diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index 4d670f79..ed8a8f87 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -63,7 +63,7 @@ jobs: msbuild \ "Laerdal.Builder.targets" \ -m:1 \ - -p:ShouldSkipMacCatalyst="false" \ + -p:Should_Skip_MacCatalyst="false" \ \ -p:PackageOutputPath="${{env.BUILD_REPOSITORY_FOLDERPATH}}/Artifacts" \ -p:Laerdal_Gradle_Path="/opt/homebrew/opt/gradle@7/bin/gradle" \ diff --git a/Laerdal.McuMgr.Bindings.MacCatalystAndIos.Native/Laerdal.Mac.CompileAndGenerateFatLibs.sh b/Laerdal.McuMgr.Bindings.MacCatalystAndIos.Native/Laerdal.Mac.CompileAndGenerateFatLibs.sh index 95f024dc..2e7c9e2b 100755 --- a/Laerdal.McuMgr.Bindings.MacCatalystAndIos.Native/Laerdal.Mac.CompileAndGenerateFatLibs.sh +++ b/Laerdal.McuMgr.Bindings.MacCatalystAndIos.Native/Laerdal.Mac.CompileAndGenerateFatLibs.sh @@ -8,12 +8,20 @@ # # Note that all parameters passed to xcodebuild must be in the form of -parameter value instead of --parameter -declare SDK_VERSION="" # xcodebuild -showsdks declare XCODEBUILD_TARGET_SDK="${XCODEBUILD_TARGET_SDK:-iphoneos}" +declare XCODEBUILD_TARGET_SDK_VERSION="${XCODEBUILD_TARGET_SDK_VERSION}" # xcodebuild -showsdks + +if [ "$XCODEBUILD_TARGET_SDK" == "iphoneos" ] && [ -z "$XCODEBUILD_TARGET_SDK_VERSION" ]; then # ios + XCODEBUILD_TARGET_SDK_VERSION="17.2" + +elif [ "$XCODEBUILD_TARGET_SDK" == "macosx" ] && [ -z "$XCODEBUILD_TARGET_SDK_VERSION" ]; then # maccatalyst + XCODEBUILD_TARGET_SDK_VERSION="14.2" +fi + declare SWIFT_BUILD_CONFIGURATION="${SWIFT_BUILD_CONFIGURATION:-Release}" declare SUPPORTS_MACCATALYST="${SUPPORTS_MACCATALYST:-NO}" -declare XCODEBUILD_TARGET_SDK_WITH_VERSION_IF_ANY="$XCODEBUILD_TARGET_SDK$SDK_VERSION" # if the version is the empty string then the latest version of the sdk will be used which is fine +declare XCODEBUILD_TARGET_SDK_WITH_VERSION_IF_ANY="$XCODEBUILD_TARGET_SDK$XCODEBUILD_TARGET_SDK_VERSION" declare SWIFT_OUTPUT_PATH="${SWIFT_OUTPUT_PATH:-./VendorFrameworks/swift-framework-proxy/}" @@ -38,6 +46,8 @@ function print_macos_sdks() { echo "** xcode version : '$( "xcodebuild" -version )'" echo "** xcode sdks :" xcodebuild -showsdks + echo "** xcode sdks visible to sharpie :" + sharpie xcode -sdks echo echo "** SWIFT_BUILD_PATH : '$SWIFT_BUILD_PATH' " @@ -51,9 +61,9 @@ function print_macos_sdks() { echo "** OUTPUT_FOLDER_NAME : '$OUTPUT_FOLDER_NAME' " echo "** OUTPUT_SHARPIE_HEADER_FILES_PATH : '$OUTPUT_SHARPIE_HEADER_FILES_PATH' " echo - echo "** SDK_VERSION : '${SDK_VERSION:-(No specific version specified so the latest version will be used)}'" echo "** SUPPORTS_MACCATALYST : '$SUPPORTS_MACCATALYST' " echo "** XCODEBUILD_TARGET_SDK : '$XCODEBUILD_TARGET_SDK' " + echo "** XCODEBUILD_TARGET_SDK_VERSION : '${XCODEBUILD_TARGET_SDK_VERSION:-(No specific version specified so the latest version will be used)}'" echo "** XCODEBUILD_TARGET_SDK_WITH_VERSION_IF_ANY : '$XCODEBUILD_TARGET_SDK_WITH_VERSION_IF_ANY' " echo } @@ -168,6 +178,7 @@ function create_fat_binaries() { fi echo "**** (FatBinaries 5/8) Generating binding api definition and structs" + set -x sharpie \ bind \ -sdk "$XCODEBUILD_TARGET_SDK_WITH_VERSION_IF_ANY" \ @@ -177,6 +188,7 @@ function create_fat_binaries() { "$SWIFT_OUTPUT_PATH/$SWIFT_PROJECT_NAME.framework/Headers/$SWIFT_PROJECT_NAME-Swift.h" \ -clang -arch arm64 # vital needed for mac-catalyst local exitCode=$? + set +x if [ $exitCode -ne 0 ]; then echo "** [FAILED] Failed to generate binding api definitions and structs" diff --git a/Laerdal.McuMgr.Bindings.iOS/Laerdal.McuMgr.Bindings.iOS.csproj b/Laerdal.McuMgr.Bindings.iOS/Laerdal.McuMgr.Bindings.iOS.csproj index b8c91419..73425131 100644 --- a/Laerdal.McuMgr.Bindings.iOS/Laerdal.McuMgr.Bindings.iOS.csproj +++ b/Laerdal.McuMgr.Bindings.iOS/Laerdal.McuMgr.Bindings.iOS.csproj @@ -159,7 +159,7 @@ - + diff --git a/Laerdal.McuMgr.Tests/DeviceResetter/DeviceResetterTestbed.cs b/Laerdal.McuMgr.Tests/DeviceResetter/DeviceResetterTestbed.cs index b6c26c02..7dd9efe6 100644 --- a/Laerdal.McuMgr.Tests/DeviceResetter/DeviceResetterTestbed.cs +++ b/Laerdal.McuMgr.Tests/DeviceResetter/DeviceResetterTestbed.cs @@ -2,7 +2,6 @@ using Laerdal.McuMgr.DeviceResetter.Contracts; using Laerdal.McuMgr.DeviceResetter.Contracts.Enums; using Laerdal.McuMgr.DeviceResetter.Contracts.Native; -using GenericNativeDeviceResetterCallbacksProxy_ = Laerdal.McuMgr.DeviceResetter.DeviceResetter.GenericNativeDeviceResetterCallbacksProxy; namespace Laerdal.McuMgr.Tests.DeviceResetter { diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.BeginDownload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.BeginDownload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs index a97dd0a5..d7360630 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.BeginDownload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.BeginDownload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs @@ -59,9 +59,9 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Idle, EFileDownloaderState.Downloading); await Task.Delay(20); - DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs index 9221fa63..b88a9a36 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs @@ -51,8 +51,8 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Idle, EFileDownloaderState.Downloading); await Task.Delay(20); - DownloadCompletedAdvertisement(remoteFilePath, new byte[] { }); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, new byte[] { }); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs index d4d7455d..e6046e37 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs @@ -96,23 +96,26 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) var remoteFilePathUppercase = remoteFilePath.ToUpperInvariant(); if (remoteFilePathUppercase.Contains("some/file/that/exist/but/is/erroring/out/when/we/try/to/download/it.bin".ToUpperInvariant())) { + StateChangedAdvertisement(remoteFilePath, oldState: EFileDownloaderState.Downloading, newState: EFileDownloaderState.Error); FatalErrorOccurredAdvertisement(remoteFilePath, "foobar"); } else if (remoteFilePathUppercase.Contains("some/file/that/doesnt/exist.bin".ToUpperInvariant())) { + StateChangedAdvertisement(remoteFilePath, oldState: EFileDownloaderState.Downloading, newState: EFileDownloaderState.Error); FatalErrorOccurredAdvertisement(remoteFilePath, "NO ENTRY (5)"); } else if (remoteFilePathUppercase.Contains("some/file/that/exist/and/completes/after/a/couple/of/attempts.bin".ToUpperInvariant()) && _retryCountForProblematicFile++ < 3) { + StateChangedAdvertisement(remoteFilePath, oldState: EFileDownloaderState.Downloading, newState: EFileDownloaderState.Error); FatalErrorOccurredAdvertisement(remoteFilePath, "ping pong"); } else { _expectedResults.TryGetValue(remoteFilePath, out var expectedFileContent); - DownloadCompletedAdvertisement(remoteFilePath, expectedFileContent); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, expectedFileContent); // order } }); diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs index fbf42411..8981bd7a 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs @@ -59,8 +59,9 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Idle, EFileDownloaderState.Downloading); await Task.Delay(20); - DownloadCompletedAdvertisement(remoteFilePath, new byte[] { }); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, new byte[] { }); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs index d129de97..b0525551 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.MultipleFilesDownloadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs @@ -50,8 +50,9 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Idle, EFileDownloaderState.Downloading); await Task.Delay(20); - DownloadCompletedAdvertisement(remoteFilePath, new byte[] { }); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, new byte[] { }); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs index b4ffd76b..be38c0c6 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs @@ -103,9 +103,8 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) return; } - DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); - - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenFatalErrorMidflight.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenFatalErrorMidflight.cs index 448ebe5f..02a66276 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenFatalErrorMidflight.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenFatalErrorMidflight.cs @@ -83,9 +83,8 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) await Task.Delay(2_000); - FatalErrorOccurredAdvertisement(remoteFilePath, "fatal error occurred"); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Error); + FatalErrorOccurredAdvertisement(remoteFilePath, "fatal error occurred"); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenRogueNativeErrorMessage.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenRogueNativeErrorMessage.cs index a9e39828..ecf07e72 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenRogueNativeErrorMessage.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowAllDownloadAttemptsFailedException_GivenRogueNativeErrorMessage.cs @@ -94,9 +94,8 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) await Task.Delay(100); - FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Error); + FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs index 440b8646..6c5ddf2f 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs @@ -55,9 +55,9 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Idle, EFileDownloaderState.Downloading); await Task.Delay(20); - DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadCancelledException_GivenCancellationRequestMidflight.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadCancelledException_GivenCancellationRequestMidflight.cs index 8a2c8567..8da54ee3 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadCancelledException_GivenCancellationRequestMidflight.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadCancelledException_GivenCancellationRequestMidflight.cs @@ -115,9 +115,8 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) if (_cancellationTokenSource.IsCancellationRequested) return; - DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); - - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, _mockedFileData); // order }, _cancellationTokenSource.Token); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadTimeoutException_GivenTooSmallTimeout.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadTimeoutException_GivenTooSmallTimeout.cs index 4226150b..01d543ad 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadTimeoutException_GivenTooSmallTimeout.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowDownloadTimeoutException_GivenTooSmallTimeout.cs @@ -58,10 +58,13 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) Task.Run(async () => //00 vital { await Task.Delay(10); + StateChangedAdvertisement(resource: remoteFilePath, oldState: EFileDownloaderState.Idle, newState: EFileDownloaderState.Downloading); await Task.Delay(1_000); - StateChangedAdvertisement(resource: remoteFilePath, oldState: EFileDownloaderState.Downloading, newState: EFileDownloaderState.Complete); + + StateChangedAdvertisement(resource: remoteFilePath, oldState: EFileDownloaderState.Downloading, newState: EFileDownloaderState.Complete); // order + DownloadCompletedAdvertisement(remoteFilePath, new byte[]{}); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowRemoteFileNotFoundException_GivenNonExistentFilepath.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowRemoteFileNotFoundException_GivenNonExistentFilepath.cs index 6afb1f02..cba86ed4 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowRemoteFileNotFoundException_GivenNonExistentFilepath.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.SingleFileDownloadAsync.ShouldThrowRemoteFileNotFoundException_GivenNonExistentFilepath.cs @@ -97,9 +97,8 @@ public override EFileDownloaderVerdict BeginDownload(string remoteFilePath) await Task.Delay(100); - FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound); - - StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Error); + StateChangedAdvertisement(remoteFilePath, EFileDownloaderState.Downloading, EFileDownloaderState.Error); // order simulates how the native code behaves + FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound); // order simulates how the csharp wrapper behaves }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.cs b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.cs index 6c216d27..a4f9c319 100644 --- a/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.cs +++ b/Laerdal.McuMgr.Tests/FileDownloader/FileDownloaderTestbed.cs @@ -2,7 +2,6 @@ using Laerdal.McuMgr.FileDownloader.Contracts; using Laerdal.McuMgr.FileDownloader.Contracts.Enums; using Laerdal.McuMgr.FileDownloader.Contracts.Native; -using GenericNativeFileDownloaderCallbacksProxy_ = Laerdal.McuMgr.FileDownloader.FileDownloader.GenericNativeFileDownloaderCallbacksProxy; namespace Laerdal.McuMgr.Tests.FileDownloader { diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.BeginUpload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.BeginUpload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs index a9e1991c..c9398157 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.BeginUpload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.BeginUpload.ShouldThrowArgumentException_GivenInvalidRemoteFilePath.cs @@ -56,9 +56,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] m StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Idle, EFileUploaderState.Uploading); await Task.Delay(20); - FileUploadedAdvertisement(remoteFilePath); - - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); // order + FileUploadedAdvertisement(remoteFilePath); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs index 2e3ee42d..a12c4c65 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenNoFilesToDownload.cs @@ -50,8 +50,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Idle, EFileUploaderState.Uploading); await Task.Delay(20); - FileUploadedAdvertisement(remoteFilePath); StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + FileUploadedAdvertisement(remoteFilePath); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs index 9265791e..a90925b9 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldCompleteSuccessfully_GivenVariousFilesToDownload.cs @@ -35,7 +35,7 @@ public async Task MultipleFilesUploadAsync_ShouldCompleteSuccessfully_GivenVario { " /Some/File/Path.bin ", new byte[] { 1 } }, //intentionally included multiple times to test that we handle case sensitivity correctly { "\t/some/file/that/succeeds/after/a/couple/of/attempts.bin ", new byte[] { 0 } }, { " /some/file/that/succeeds/after/a/couple/of/attempts.bin ", new byte[] { 1 } }, //intentionally included multiple times to test whether the mechanism will attempt to upload the file only once - + { " /some/file/to/a/folder/that/doesnt/exist.bin ", new byte[] { 0 } }, { "\n some/file/that/is/erroring/out/when/we/try/to/upload/it.bin ", new byte[] { 0 } }, { "\r/some/file/that/is/erroring/out/when/we/try/to/upload/it.bin ", new byte[] { 1 } }, //intentionally included multiple times to test whether the mechanism will attempt to upload the file only once @@ -54,7 +54,7 @@ public async Task MultipleFilesUploadAsync_ShouldCompleteSuccessfully_GivenVario "/some/file/to/a/folder/that/doesnt/exist.bin", "/some/file/that/is/erroring/out/when/we/try/to/upload/it.bin" }); - + eventsMonitor.OccurredEvents .Count(args => args.EventName == nameof(fileUploader.FileUploaded)) .Should() @@ -63,7 +63,7 @@ public async Task MultipleFilesUploadAsync_ShouldCompleteSuccessfully_GivenVario eventsMonitor.OccurredEvents .Count(args => args.EventName == nameof(fileUploader.FatalErrorOccurred)) .Should().Be(8); - + mockedNativeFileUploaderProxy.CancelCalled.Should().BeFalse(); mockedNativeFileUploaderProxy.DisconnectCalled.Should().BeFalse(); //00 mockedNativeFileUploaderProxy.BeginUploadCalled.Should().BeTrue(); @@ -86,27 +86,30 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d { await Task.Delay(10); StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Idle, EFileUploaderState.Uploading); - + await Task.Delay(20); - + var remoteFilePathUppercase = remoteFilePath.ToUpperInvariant(); if (remoteFilePathUppercase.Contains("some/file/to/a/folder/that/doesnt/exist.bin".ToUpperInvariant())) { + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); FatalErrorOccurredAdvertisement(remoteFilePath, "UNKNOWN (1)", EMcuMgrErrorCode.Unknown, EFileUploaderGroupReturnCode.Unset); } else if (remoteFilePathUppercase.Contains("some/file/that/succeeds/after/a/couple/of/attempts.bin".ToUpperInvariant()) && _retryCountForProblematicFile++ < 3) { + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); FatalErrorOccurredAdvertisement(remoteFilePath, "ping pong", EMcuMgrErrorCode.Busy, EFileUploaderGroupReturnCode.Unset); - } + } else if (remoteFilePathUppercase.Contains("some/file/that/is/erroring/out/when/we/try/to/upload/it.bin".ToUpperInvariant())) { + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); FatalErrorOccurredAdvertisement(remoteFilePath, "native symbols not loaded blah blah", EMcuMgrErrorCode.NotSupported, EFileUploaderGroupReturnCode.Unset); } else { - FileUploadedAdvertisement(remoteFilePath); - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); //order + FileUploadedAdvertisement(remoteFilePath); //order } }); diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs index b5d31cf0..c40c7949 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowArgumentException_GivenPathCollectionWithErroneousFilesToDownload.cs @@ -59,8 +59,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Idle, EFileUploaderState.Uploading); await Task.Delay(20); - FileUploadedAdvertisement(remoteFilePath); StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + FileUploadedAdvertisement(remoteFilePath); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs index 4e80eef8..6dc97e0f 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.MultipleFilesUploadAsync.ShouldThrowNullArgumentException_GivenNullForFilesToDownload.cs @@ -50,8 +50,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Idle, EFileUploaderState.Uploading); await Task.Delay(20); - FileUploadedAdvertisement(remoteFilePath); StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + FileUploadedAdvertisement(remoteFilePath); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs index 3e923982..2813645a 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs @@ -101,9 +101,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d return; } - FileUploadedAdvertisement(remoteFilePath); - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + FileUploadedAdvertisement(remoteFilePath); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenFatalErrorMidflight.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenFatalErrorMidflight.cs index 392e4148..4857cbfa 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenFatalErrorMidflight.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenFatalErrorMidflight.cs @@ -84,9 +84,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d await Task.Delay(2_000); - FatalErrorOccurredAdvertisement(remoteFilePath, "fatal error occurred", EMcuMgrErrorCode.Corrupt, EFileUploaderGroupReturnCode.Unset); - - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); // order + FatalErrorOccurredAdvertisement(remoteFilePath, "fatal error occurred", EMcuMgrErrorCode.Corrupt, EFileUploaderGroupReturnCode.Unset); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenRogueNativeErrorMessage.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenRogueNativeErrorMessage.cs index 4d9f0ed8..07918f0a 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenRogueNativeErrorMessage.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowAllUploadAttemptsFailedException_GivenRogueNativeErrorMessage.cs @@ -94,9 +94,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d await Task.Delay(100); - FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound, EMcuMgrErrorCode.Corrupt, EFileUploaderGroupReturnCode.Unset); - - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); // order + FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound, EMcuMgrErrorCode.Corrupt, EFileUploaderGroupReturnCode.Unset); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs index bc376a31..94dd02c2 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowArgumentException_GivenEmptyRemoteFilePath.cs @@ -52,9 +52,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Idle, EFileUploaderState.Uploading); await Task.Delay(20); - FileUploadedAdvertisement(remoteFilePath); - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + FileUploadedAdvertisement(remoteFilePath); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowRemoteFolderNotFoundException_GivenNonExistentFilepath.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowRemoteFolderNotFoundException_GivenNonExistentFilepath.cs index d8019770..8ec98478 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowRemoteFolderNotFoundException_GivenNonExistentFilepath.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowRemoteFolderNotFoundException_GivenNonExistentFilepath.cs @@ -111,9 +111,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d await Task.Delay(100); - FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound, _mcuMgrErrorCode, EFileUploaderGroupReturnCode.Unset); - - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); // order + FatalErrorOccurredAdvertisement(remoteFilePath, _nativeErrorMessageForFileNotFound, _mcuMgrErrorCode, EFileUploaderGroupReturnCode.Unset); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUnauthorizedErrorException_GivenAccessDeniedNativeErrorMessage.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUnauthorizedErrorException_GivenAccessDeniedNativeErrorMessage.cs index 53ec861f..bde5a23c 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUnauthorizedErrorException_GivenAccessDeniedNativeErrorMessage.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUnauthorizedErrorException_GivenAccessDeniedNativeErrorMessage.cs @@ -1,6 +1,5 @@ using FluentAssertions; using Laerdal.McuMgr.Common.Enums; -using Laerdal.McuMgr.Common.Exceptions; using Laerdal.McuMgr.FileUploader.Contracts.Enums; using Laerdal.McuMgr.FileUploader.Contracts.Exceptions; using Laerdal.McuMgr.FileUploader.Contracts.Native; @@ -49,9 +48,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d await Task.Delay(100); - FatalErrorOccurredAdvertisement(remoteFilePath, "blah blah", EMcuMgrErrorCode.AccessDenied, EFileUploaderGroupReturnCode.Unset); - - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); // order + FatalErrorOccurredAdvertisement(remoteFilePath, "blah blah", EMcuMgrErrorCode.AccessDenied, EFileUploaderGroupReturnCode.Unset); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadCancelledException_GivenCancellationRequestMidflight.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadCancelledException_GivenCancellationRequestMidflight.cs index d5f4385c..6391e52e 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadCancelledException_GivenCancellationRequestMidflight.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadCancelledException_GivenCancellationRequestMidflight.cs @@ -112,9 +112,8 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d if (_cancellationTokenSource.IsCancellationRequested) return; - FileUploadedAdvertisement(remoteFilePath); - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + FileUploadedAdvertisement(remoteFilePath); }, _cancellationTokenSource.Token); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadTimeoutException_GivenTooSmallTimeout.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadTimeoutException_GivenTooSmallTimeout.cs index 5220ae15..2cf1044a 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadTimeoutException_GivenTooSmallTimeout.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleFileUploadAsync.ShouldThrowUploadTimeoutException_GivenTooSmallTimeout.cs @@ -66,6 +66,7 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d await Task.Delay(1_000); StateChangedAdvertisement(resource: remoteFilePath, oldState: EFileUploaderState.Uploading, newState: EFileUploaderState.Complete); + FileUploadedAdvertisement(remoteFilePath); }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleStreamUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleStreamUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs index 3892e2e9..890039ed 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleStreamUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.SingleStreamUploadAsync.ShouldCompleteSuccessfully_GivenGreenNativeFileDownloader.cs @@ -98,14 +98,13 @@ public override EFileUploaderVerdict BeginUpload(string remoteFilePath, byte[] d await Task.Delay(20); if (_tryCount < _maxNumberOfTriesForSuccess) { - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); - FatalErrorOccurredAdvertisement(remoteFilePath, "fatal error occurred", EMcuMgrErrorCode.Corrupt, EFileUploaderGroupReturnCode.Unset); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Error); // order + FatalErrorOccurredAdvertisement(remoteFilePath, "fatal error occurred", EMcuMgrErrorCode.Corrupt, EFileUploaderGroupReturnCode.Unset); // order return; } - FileUploadedAdvertisement(remoteFilePath); - - StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); + StateChangedAdvertisement(remoteFilePath, EFileUploaderState.Uploading, EFileUploaderState.Complete); // order + FileUploadedAdvertisement(remoteFilePath); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.cs b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.cs index c3d227a6..5dbc7fcd 100644 --- a/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.cs +++ b/Laerdal.McuMgr.Tests/FileUploader/FileUploaderTestbed.cs @@ -2,7 +2,6 @@ using Laerdal.McuMgr.FileUploader.Contracts; using Laerdal.McuMgr.FileUploader.Contracts.Enums; using Laerdal.McuMgr.FileUploader.Contracts.Native; -using GenericNativeFileUploaderCallbacksProxy_ = Laerdal.McuMgr.FileUploader.FileUploader.GenericNativeFileUploaderCallbacksProxy; namespace Laerdal.McuMgr.Tests.FileUploader { diff --git a/Laerdal.McuMgr.Tests/FirmwareEraser/FirmwareEraserTestbed.cs b/Laerdal.McuMgr.Tests/FirmwareEraser/FirmwareEraserTestbed.cs index 5423c486..9010f196 100644 --- a/Laerdal.McuMgr.Tests/FirmwareEraser/FirmwareEraserTestbed.cs +++ b/Laerdal.McuMgr.Tests/FirmwareEraser/FirmwareEraserTestbed.cs @@ -2,7 +2,6 @@ using Laerdal.McuMgr.FirmwareEraser.Contracts; using Laerdal.McuMgr.FirmwareEraser.Contracts.Enums; using Laerdal.McuMgr.FirmwareEraser.Contracts.Native; -using GenericNativeFirmwareEraserCallbacksProxy_ = Laerdal.McuMgr.FirmwareEraser.FirmwareEraser.GenericNativeFirmwareEraserCallbacksProxy; namespace Laerdal.McuMgr.Tests.FirmwareEraser { diff --git a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenFirmwareUploadFatalErrorMidflight.cs b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenFirmwareUploadFatalErrorMidflight.cs index 37fdfe0b..76408798 100644 --- a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenFirmwareUploadFatalErrorMidflight.cs +++ b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenFirmwareUploadFatalErrorMidflight.cs @@ -104,8 +104,8 @@ public override EFirmwareInstallationVerdict BeginInstallation( StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Testing); await Task.Delay(100); - FatalErrorOccurredAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallerFatalErrorType.FirmwareUploadingErroredOut, "error while uploading firmware blah blah"); - StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Error); + StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Error); // order + FatalErrorOccurredAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallerFatalErrorType.FirmwareUploadingErroredOut, "error while uploading firmware blah blah"); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenGenericFatalErrorMidflight.cs b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenGenericFatalErrorMidflight.cs index eb4040d1..f4ff1a6f 100644 --- a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenGenericFatalErrorMidflight.cs +++ b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowAllFirmwareInstallationAttemptsFailedException_GivenGenericFatalErrorMidflight.cs @@ -93,8 +93,8 @@ public override EFirmwareInstallationVerdict BeginInstallation( StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Testing); await Task.Delay(100); - FatalErrorOccurredAdvertisement(EFirmwareInstallationState.Confirming, EFirmwareInstallerFatalErrorType.Generic, "fatal error occurred"); - StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Error); + StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Error); // order + FatalErrorOccurredAdvertisement(EFirmwareInstallationState.Confirming, EFirmwareInstallerFatalErrorType.Generic, "fatal error occurred"); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowFirmwareInstallationImageSwapTimeoutException_GivenFatalErrorMidflight.cs b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowFirmwareInstallationImageSwapTimeoutException_GivenFatalErrorMidflight.cs index 6507ba92..74b8ca50 100644 --- a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowFirmwareInstallationImageSwapTimeoutException_GivenFatalErrorMidflight.cs +++ b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.InstallAsync.ShouldThrowFirmwareInstallationImageSwapTimeoutException_GivenFatalErrorMidflight.cs @@ -91,8 +91,8 @@ public override EFirmwareInstallationVerdict BeginInstallation( StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Testing); await Task.Delay(100); - FatalErrorOccurredAdvertisement(EFirmwareInstallationState.Confirming, EFirmwareInstallerFatalErrorType.FirmwareImageSwapTimeout, "image swap timeout"); - StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Error); + StateChangedAdvertisement(EFirmwareInstallationState.Uploading, EFirmwareInstallationState.Error); // order + FatalErrorOccurredAdvertisement(EFirmwareInstallationState.Confirming, EFirmwareInstallerFatalErrorType.FirmwareImageSwapTimeout, "image swap timeout"); // order }); return verdict; diff --git a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.cs b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.cs index bf282a08..c5c57e48 100644 --- a/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.cs +++ b/Laerdal.McuMgr.Tests/FirmwareInstaller/FirmwareInstallerTestbed.cs @@ -2,7 +2,6 @@ using Laerdal.McuMgr.FirmwareInstaller.Contracts; using Laerdal.McuMgr.FirmwareInstaller.Contracts.Enums; using Laerdal.McuMgr.FirmwareInstaller.Contracts.Native; -using GenericNativeFirmwareInstallerCallbacksProxy_ = Laerdal.McuMgr.FirmwareInstaller.FirmwareInstaller.GenericNativeFirmwareInstallerCallbacksProxy; namespace Laerdal.McuMgr.Tests.FirmwareInstaller { diff --git a/Laerdal.McuMgr/Laerdal.McuMgr.csproj b/Laerdal.McuMgr/Laerdal.McuMgr.csproj index 2ef1935e..3782687d 100644 --- a/Laerdal.McuMgr/Laerdal.McuMgr.csproj +++ b/Laerdal.McuMgr/Laerdal.McuMgr.csproj @@ -13,8 +13,8 @@ $(TargetFrameworks)netstandard2.1; $(TargetFrameworks)net8.0-android; - $(TargetFrameworks)net8.0-ios11; - $(TargetFrameworks)net8.0-maccatalyst + $(TargetFrameworks)net8.0-ios11; + $(TargetFrameworks)net8.0-maccatalyst true true @@ -97,15 +97,15 @@ - - - - - - - - - + + + + + + + + + @@ -157,7 +157,7 @@ - + diff --git a/Laerdal.McuMgr/Shared/FileDownloader/FileDownloader.cs b/Laerdal.McuMgr/Shared/FileDownloader/FileDownloader.cs index aaf1a99d..1961a75d 100644 --- a/Laerdal.McuMgr/Shared/FileDownloader/FileDownloader.cs +++ b/Laerdal.McuMgr/Shared/FileDownloader/FileDownloader.cs @@ -193,10 +193,10 @@ public async Task DownloadAsync( try { - Cancelled += DownloadAsyncOnCancelled; - StateChanged += DownloadAsyncOnStateChanged; - DownloadCompleted += DownloadAsyncOnDownloadCompleted; - FatalErrorOccurred += DownloadAsyncOnFatalErrorOccurred; + Cancelled += FileDownloader_Cancelled_; + StateChanged += FileDownloader_StateChanged_; + DownloadCompleted += FileDownloader_DownloadCompleted_; + FatalErrorOccurred += FileDownloader_FatalErrorOccurred_; var verdict = BeginDownload(remoteFilePath); //00 dont use task.run here for now if (verdict != EFileDownloaderVerdict.Success) @@ -223,10 +223,16 @@ public async Task DownloadAsync( catch (DownloadErroredOutException ex) { if (ex is DownloadErroredOutRemoteFileNotFoundException) //order no point to retry if the remote file is not there + { + //OnStateChanged(new StateChangedEventArgs(newState: EFileDownloaderState.Error)); //noneed already done in native code throw; + } if (++triesCount > maxTriesCount) //order + { + //OnStateChanged(new StateChangedEventArgs(newState: EFileDownloaderState.Error)); //noneed already done in native code throw new AllDownloadAttemptsFailedException(remoteFilePath, maxTriesCount, innerException: ex); + } if (sleepTimeBetweenRetriesInMs > 0) //order { @@ -253,20 +259,20 @@ ex is not ArgumentException //10 wops probably missing native lib symbols! } finally { - Cancelled -= DownloadAsyncOnCancelled; - StateChanged -= DownloadAsyncOnStateChanged; - DownloadCompleted -= DownloadAsyncOnDownloadCompleted; - FatalErrorOccurred -= DownloadAsyncOnFatalErrorOccurred; + Cancelled -= FileDownloader_Cancelled_; + StateChanged -= FileDownloader_StateChanged_; + DownloadCompleted -= FileDownloader_DownloadCompleted_; + FatalErrorOccurred -= FileDownloader_FatalErrorOccurred_; } - void DownloadAsyncOnCancelled(object sender, CancelledEventArgs ea) + void FileDownloader_Cancelled_(object sender_, CancelledEventArgs ea_) { taskCompletionSource.TrySetException(new DownloadCancelledException()); } - void DownloadAsyncOnStateChanged(object sender, StateChangedEventArgs ea) + void FileDownloader_StateChanged_(object sender_, StateChangedEventArgs ea_) { - if (ea.NewState != EFileDownloaderState.Cancelling || isCancellationRequested) + if (ea_.NewState != EFileDownloaderState.Cancelling || isCancellationRequested) return; isCancellationRequested = true; @@ -294,24 +300,24 @@ void DownloadAsyncOnStateChanged(object sender, StateChangedEventArgs ea) // getting called right above but if that takes too long we give the killing blow by calling OnCancelled() manually here } - void DownloadAsyncOnDownloadCompleted(object sender, DownloadCompletedEventArgs ea) + void FileDownloader_DownloadCompleted_(object sender_, DownloadCompletedEventArgs ea_) { - taskCompletionSource.TrySetResult(ea.Data); + taskCompletionSource.TrySetResult(ea_.Data); } - void DownloadAsyncOnFatalErrorOccurred(object sender, FatalErrorOccurredEventArgs ea) + void FileDownloader_FatalErrorOccurred_(object sender_, FatalErrorOccurredEventArgs ea_) { - var isAboutUnauthorized = ea.ErrorMessage?.ToUpperInvariant().Contains("UNRECOGNIZED (11)") ?? false; + var isAboutUnauthorized = ea_.ErrorMessage?.ToUpperInvariant().Contains("UNRECOGNIZED (11)") ?? false; if (isAboutUnauthorized) { taskCompletionSource.TrySetException(new UnauthorizedException( resource: remoteFilePath, - nativeErrorMessage: ea.ErrorMessage + nativeErrorMessage: ea_.ErrorMessage )); return; } - var isAboutRemoteFileNotFound = ea.ErrorMessage + var isAboutRemoteFileNotFound = ea_.ErrorMessage ?.ToUpperInvariant() .Replace("NO_ENTRY (5)", "NO ENTRY (5)") //normalize the error for android so that it will be the same as in ios .Contains("NO ENTRY (5)") ?? false; @@ -321,7 +327,7 @@ void DownloadAsyncOnFatalErrorOccurred(object sender, FatalErrorOccurredEventArg return; } - taskCompletionSource.TrySetException(new DownloadErroredOutException(ea.ErrorMessage)); //generic + taskCompletionSource.TrySetException(new DownloadErroredOutException(ea_.ErrorMessage)); //generic } } diff --git a/Laerdal.McuMgr/Shared/FileUploader/FileUploader.cs b/Laerdal.McuMgr/Shared/FileUploader/FileUploader.cs index 3ba3fb68..fbd55b40 100644 --- a/Laerdal.McuMgr/Shared/FileUploader/FileUploader.cs +++ b/Laerdal.McuMgr/Shared/FileUploader/FileUploader.cs @@ -213,9 +213,10 @@ public async Task UploadAsync( var taskCompletionSource = new TaskCompletionSource(state: false); try { - Cancelled += UploadAsyncOnCancelled; - StateChanged += UploadAsyncOnStateChanged; - FatalErrorOccurred += UploadAsyncOnFatalErrorOccurred; + Cancelled += FileUploader_Cancelled_; + FileUploaded += FileUploader_FileUploaded_; + StateChanged += FileUploader_StateChanged_; + FatalErrorOccurred += FileUploader_FatalErrorOccurred_; var verdict = BeginUpload(remoteFilePath, dataArray); //00 dont use task.run here for now if (verdict != EFileUploaderVerdict.Success) @@ -270,25 +271,31 @@ ex is not ArgumentException //10 wops probably missing native lib symbols! } finally { - Cancelled -= UploadAsyncOnCancelled; - StateChanged -= UploadAsyncOnStateChanged; - FatalErrorOccurred -= UploadAsyncOnFatalErrorOccurred; + Cancelled -= FileUploader_Cancelled_; + FileUploaded -= FileUploader_FileUploaded_; + StateChanged -= FileUploader_StateChanged_; + FatalErrorOccurred -= FileUploader_FatalErrorOccurred_; CleanupResourcesOfLastUpload(); //vital } - void UploadAsyncOnCancelled(object sender, CancelledEventArgs ea) + void FileUploader_Cancelled_(object _, CancelledEventArgs ea_) { taskCompletionSource.TrySetException(new UploadCancelledException()); } + + void FileUploader_FileUploaded_(object _, FileUploadedEventArgs ea_) + { + taskCompletionSource.TrySetResult(true); + } // ReSharper disable AccessToModifiedClosure - void UploadAsyncOnStateChanged(object sender, StateChangedEventArgs ea) + void FileUploader_StateChanged_(object _, StateChangedEventArgs ea_) { - switch (ea.NewState) + switch (ea_.NewState) { case EFileUploaderState.Complete: - taskCompletionSource.TrySetResult(true); + //taskCompletionSource.TrySetResult(true); //dont we want to wait for the FileUploaded event return; case EFileUploaderState.Cancelling: //20 @@ -320,7 +327,7 @@ void UploadAsyncOnStateChanged(object sender, StateChangedEventArgs ea) // getting called right above but if that takes too long we give the killing blow by calling OnCancelled() manually here } - void UploadAsyncOnFatalErrorOccurred(object sender, FatalErrorOccurredEventArgs ea) + void FileUploader_FatalErrorOccurred_(object sender, FatalErrorOccurredEventArgs ea) { var isAboutUnauthorized = ea.ErrorCode == EMcuMgrErrorCode.AccessDenied; if (isAboutUnauthorized) diff --git a/Laerdal.Scripts/Laerdal.Builder.targets b/Laerdal.Scripts/Laerdal.Builder.targets index 89ad5d5a..d30f82fa 100644 --- a/Laerdal.Scripts/Laerdal.Builder.targets +++ b/Laerdal.Scripts/Laerdal.Builder.targets @@ -37,7 +37,11 @@ $([System.IO.Path]::Combine($(MSBuildThisFileDirectory), `..`, `TestResults`)) - false + + + + true + false gradle $(BUILD_SOURCEBRANCH) @@ -185,19 +189,18 @@ - + <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)GradlePath=$(Laerdal_Gradle_Path); - <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)SourceRoot=$(MSBuildThisFileDirectory)/../Laerdal.McuMgr.Bindings/; <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)Configuration=$(Configuration); <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)PackageOutputPath=$(PackageOutputPath); - <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)ShouldSkipMacCatalyst=$(ShouldSkipMacCatalyst); + <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)Should_Skip_MacCatalyst=$(Should_Skip_MacCatalyst); - + @@ -206,20 +209,14 @@ - + - - - - - - - <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)SourceRoot=$(MSBuildThisFileDirectory)/../Laerdal.McuMgr/; - <_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters)Laerdal_McuMgr_Bindings_Package_Version=$(Laerdal_Version_Assembly); - + + + - + @@ -229,7 +226,7 @@ + Properties="Configuration=$(Configuration);Should_Skip_MacCatalyst=$(Should_Skip_MacCatalyst);"/> $(TestParameters) test 'Laerdal.McuMgr.Tests/Laerdal.McuMgr.Tests.csproj' @@ -277,10 +274,11 @@ $([System.IO.Path]::Combine($(MSBuildThisFileDirectory), `Laerdal.CreateNewReleaseInGithub.sh`)) - <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --git-branch '$(Laerdal_Source_Branch)' - <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --tag-version '$(Laerdal_Version_Base)' - <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --access-token '$(Laerdal_Github_Access_Token)' - <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --repository-path '$(Laerdal_Repository_Path)' + <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --log + <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --git-branch '$(Laerdal_Source_Branch)' + <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --tag-version '$(Laerdal_Version_Base)' + <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --access-token '$(Laerdal_Github_Access_Token)' + <_Laerdal_Create_Github_Release_Script_Parameters>$(_Laerdal_Create_Github_Release_Script_Parameters) --repository-path '$(Laerdal_Repository_Path)' diff --git a/Laerdal.Scripts/Laerdal.CreateNewReleaseInGithub.sh b/Laerdal.Scripts/Laerdal.CreateNewReleaseInGithub.sh index cf1ce632..ffd89508 100644 --- a/Laerdal.Scripts/Laerdal.CreateNewReleaseInGithub.sh +++ b/Laerdal.Scripts/Laerdal.CreateNewReleaseInGithub.sh @@ -9,42 +9,41 @@ declare GITHUB_REPOSITORY_PATH="" function parse_arguments() { while [[ $# -gt 0 ]]; do - case $1 in - - -v | --log) - VERBOSE=1 - shift - ;; - - -r | --repository-path) - GITHUB_REPOSITORY_PATH="$2" - shift - ;; - - -t | --tag-version) - TAG_VERSION="$2" - shift - ;; - - -b | --git-branch) - GIT_BRANCH="$2" + case $1 in + -v | --log) + VERBOSE=1 + # shift dont shift no need for this one + ;; + + -r | --repository-path) + GITHUB_REPOSITORY_PATH="$2" + shift + ;; + + -t | --tag-version) + TAG_VERSION="$2" + shift + ;; + + -b | --git-branch) + GIT_BRANCH="$2" + shift + ;; + + -a | --access-token) + GITHUB_ACCESS_TOKEN="$2" + shift + ;; + + *) + echo "Unknown option: $1" + usage + exit 1 + ;; + esac + shift - ;; - - -a | --access-token) - GITHUB_ACCESS_TOKEN="$2" - shift - ;; - - *) - echo "Unknown option: $1" - usage - exit 1 - ;; - - esac - shift - done + done if [[ -z $GIT_BRANCH ]]; then echo "Missing git-branch." @@ -100,57 +99,26 @@ function create_release_on_github() { eventual_singleline_summary="Alpha $eventual_tag_name" fi - local -r payload=$( - cat <