Skip to content

Commit

Permalink
Merge pull request #29 from Laerdal/ksidirop/MAN-209-create-test-suite
Browse files Browse the repository at this point in the history
MAN-209 create test suite
  • Loading branch information
ksidirop-laerdal authored Aug 8, 2023
2 parents 980d270 + 22b59a9 commit d514101
Show file tree
Hide file tree
Showing 50 changed files with 978 additions and 290 deletions.
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright © 2022 Nordic Semiconductor ASA
Copyright © 2023 Laerdal SA

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
@SuppressWarnings("unused")
public class AndroidFirmwareEraser {

private final ImageManager _imageManager;
private ImageManager _imageManager;
private final McuMgrBleTransport _transport;

/**
* Constructs a firmware installer for a specific android-context and bluetooth-device.
Expand All @@ -25,16 +26,15 @@ public class AndroidFirmwareEraser {
* @param bluetoothDevice the device to perform the firmware-install on
*/
public AndroidFirmwareEraser(@NonNull final Context context, @NonNull final BluetoothDevice bluetoothDevice) {
final McuMgrTransport transport = new McuMgrBleTransport(context, bluetoothDevice);

_imageManager = new ImageManager(transport); //todo move this into beginErasure()
_transport = new McuMgrBleTransport(context, bluetoothDevice);
}

public void beginErasure(final int imageIndex) {
busyStateChangedAdvertisement(true);

setState(EAndroidFirmwareEraserState.ERASING);

_imageManager = new ImageManager(_transport);
_imageManager.erase(imageIndex, new McuMgrCallback<McuMgrResponse>() {
@Override
public void onResponse(@NonNull final McuMgrResponse response) {
Expand Down Expand Up @@ -82,6 +82,10 @@ public void fatalErrorOccurredAdvertisement(String errorMessage) {
_lastFatalErrorMessage = errorMessage; //this method is meant to be overridden by csharp binding libraries to intercept updates
}

public void logMessageAdvertisement(String message, String category, String level) {
//this method is intentionally empty its meant to be overridden by csharp binding libraries to intercept updates
}

public void busyStateChangedAdvertisement(boolean busyNotIdle) {
//this method is intentionally empty its meant to be overridden by csharp binding libraries to intercept updates
}
Expand Down
Empty file.
24 changes: 12 additions & 12 deletions Laerdal.McuMgr.Bindings/Laerdal.McuMgr.Bindings.csproj
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
<Project Sdk="MSBuild.Sdk.Extras/3.0.44">
<Project Sdk="MSBuild.Sdk.Extras/3.0.44">

<!-- SHARED -->
<PropertyGroup>
<IsOSX>$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))</IsOSX>
<IsLinux>$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))</IsLinux>
<IsWindows>$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))</IsWindows>
<IsUnix Condition=" '$(IsOSX)' == 'True' OR '$(IsLinux)' == 'True' ">True</IsUnix>

<!-- it only makes sense to build xamarin.ios under osx because xcodebuild is only available there -->
<TargetFrameworks>monoandroid12.0;netstandard2.0;</TargetFrameworks>
<TargetFrameworks Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))'">$(TargetFrameworks)xamarin.ios10;</TargetFrameworks>
<TargetFrameworks Condition=" '$(IsOSX)' == 'True' ">$(TargetFrameworks)xamarin.ios10;</TargetFrameworks>

<OutputType>Library</OutputType>
<OutputPath>bin\</OutputPath>
Expand Down Expand Up @@ -36,7 +41,6 @@
<PackageDescription>Xamarin wrapper around Nordic's 'mcumgr-ble.aar' for iOS and Android.</PackageDescription>

<PackageIcon Condition="Exists('icon.png')">icon.png</PackageIcon>
<PackageVersion Condition=" '$(PackageVersion)' == '' ">1.0.314</PackageVersion>
<PackageOutputPath Condition=" '$(PackageOutputPath)' == '' ">../Artifacts</PackageOutputPath>

<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Expand All @@ -46,9 +50,11 @@
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<AllowedReferenceRelatedFileExtensions>$(AllowedReferenceRelatedFileExtensions);.pdb</AllowedReferenceRelatedFileExtensions>

<Version Condition=" '$(Version)' == '' ">1.0.0.0</Version>
<FileVersion Condition=" '$(FileVersion)' == '' ">1.0.0.0</FileVersion>
<AssemblyVersion Condition=" '$(AssemblyVersion)' == '' ">1.0.0.0</AssemblyVersion>
<!-- these versions are getting replaced by the build script in one swift pass -->
<Version>1.0.515.0</Version>
<FileVersion>1.0.515.0</FileVersion>
<PackageVersion>1.0.515.0</PackageVersion>
<AssemblyVersion>1.0.515.0</AssemblyVersion>

<Title>$(PackageId)</Title>
<Summary>Xamarin McuMgr Bindings</Summary>
Expand Down Expand Up @@ -143,12 +149,6 @@

<!-- on windows we need to make sure that the org.gradle.java.home property is set properly otherwise the build will fail -->
<PropertyGroup>
<IsOSX>$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))</IsOSX>
<IsLinux>$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))</IsLinux>
<IsWindows>$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))</IsWindows>

<IsUnix Condition=" '$(IsOSX)' == 'True' OR '$(IsLinux)' == 'True' ">True</IsUnix>

<!-- OSX and Linux azure pipelines install java under /usr/local/opt/openjdk@11 or /opt/homebrew/opt/openjdk@11 by default -->
<JavaHome Condition=" '$(IsUnix)' == 'True' AND '$(JavaHome)' == '' AND Exists('/usr/local/opt/openjdk@11') ">/usr/local/opt/openjdk@11</JavaHome>
<JavaHome Condition=" '$(IsUnix)' == 'True' AND '$(JavaHome)' == '' AND Exists('/opt/homebrew/opt/openjdk@11') ">/opt/homebrew/opt/openjdk@11</JavaHome>
Expand Down
104 changes: 90 additions & 14 deletions Laerdal.McuMgr.Builder.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,15 @@
<!-- -->
<!-- - to simply calculate the proper version and build use: -->
<!-- -->
<!-- dotnet \ -->
<!-- build \ -->
<!-- Laerdal.McuMgr.Builder.csproj -->
<!-- # on macos -->
<!-- msbuild \ -->
<!-- Laerdal.McuMgr.Builder.csproj \ -->
<!-- '"/p:Laerdal_Version_Full=1.0.x.0"' -->
<!-- -->
<!-- # on windows powershell -->
<!-- & "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\MSBuild.exe" ^ -->
<!-- Laerdal.McuMgr.Builder.csproj ^ -->
<!-- /p:Laerdal_Version_Full=1.0.x.0 -->
<!-- -->
<!-- - (use with caution - only use in localdev for testing) to calculate the proper version, build, tag and create a new release in github with changelog autogenerated -->
<!-- -->
Expand All @@ -24,7 +30,7 @@

<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

<PackageOutputPath Condition=" '$(PackageOutputPath)' == '' ">$(BUILD_ARTIFACTSTAGINGDIRECTORY)</PackageOutputPath>
<PackageOutputPath Condition=" '$(PackageOutputPath)' == '' ">$([System.IO.Path]::Combine($(MSBuildThisFileDirectory), `Artifacts/`))</PackageOutputPath>

Expand All @@ -33,7 +39,7 @@
<Laerdal_Should_Tag_And_Release Condition=" '$(Laerdal_Should_Tag_And_Release)' == '' AND ( '$(Laerdal_Source_Branch)' == 'refs/heads/main' OR '$(Laerdal_Source_Branch)' == 'refs/heads/develop' OR '$(Laerdal_Source_Branch)' == 'refs/pull/develop' ) ">True</Laerdal_Should_Tag_And_Release>
</PropertyGroup>

<Target Name="PrintConfiguration" BeforeTargets="BuildProjects">
<Target Name="PrintConfiguration">
<Message Importance="High" Text="** Configuration ='$(Configuration)'"/>
<Message Importance="High" Text="** PackageOutputPath ='$(PackageOutputPath)'"/>

Expand All @@ -44,7 +50,7 @@
</Target>

<!-- VERSION -->
<Target Name="GenerateVersionFile" BeforeTargets="PrintConfiguration">
<Target Name="DeduceVersion" DependsOnTargets="PrintConfiguration">

<PropertyGroup>
<Laerdal_Version_Major Condition=" '$(Laerdal_Version_Major)' == '' ">1</Laerdal_Version_Major>
Expand All @@ -55,6 +61,9 @@
<Laerdal_Master_Branch_Name Condition=" '$(Laerdal_Master_Branch_Name)' == '' ">main</Laerdal_Master_Branch_Name>
<Laerdal_Develop_Branch_Name Condition=" '$(Laerdal_Develop_Branch_Name)' == '' ">develop</Laerdal_Develop_Branch_Name>

<Laerdal_McuMgr_ProjectFile>Laerdal.McuMgr/Laerdal.McuMgr.csproj</Laerdal_McuMgr_ProjectFile>
<Laerdal_McuMgrBindings_ProjectFile>Laerdal.McuMgr.Bindings/Laerdal.McuMgr.Bindings.csproj</Laerdal_McuMgrBindings_ProjectFile>

<_Laerdal_Version_Script_Parameters>$(_Laerdal_Version_Script_Parameters) -o '$(Laerdal_Version_Details_Filepath)'</_Laerdal_Version_Script_Parameters>
<_Laerdal_Version_Script_Parameters>$(_Laerdal_Version_Script_Parameters) --major '$(Laerdal_Version_Major)'</_Laerdal_Version_Script_Parameters>
<_Laerdal_Version_Script_Parameters>$(_Laerdal_Version_Script_Parameters) --master-branch '$(Laerdal_Master_Branch_Name)'</_Laerdal_Version_Script_Parameters>
Expand All @@ -65,7 +74,6 @@

<!-- its useful to allow specifying the version through the command line for testing and development purposes on localdev -->
<Exec Condition=" '$(Laerdal_Version_Full)' == '' "

EchoOff="true"
Command=" bash '$(Laerdal_Version_Script_Filepath)' $(_Laerdal_Version_Script_Parameters) "
ConsoleToMSBuild="true"
Expand Down Expand Up @@ -93,8 +101,56 @@
<Message Importance="High" Text="##vso[build.updatebuildnumber]$(Laerdal_Version_Full)"/>
</Target>

<!-- UPDATE PROJECT FILES WITH NEW PACKAGE AND ASSEMBLY VERSIONS -->
<Target Name="WriteUpdatedPackageVersionsInCsprojFiles" DependsOnTargets="DeduceVersion">
<ItemGroup>
<ProjectFiles Include="$(Laerdal_McuMgr_ProjectFile)"/>
<ProjectFiles Include="$(Laerdal_McuMgrBindings_ProjectFile)"/>
</ItemGroup>

<!-- https://stackoverflow.com/a/1294679/863651 -->
<MsBuild Projects="$(MSBuildProjectFullPath)"
Targets="_updatePackageVersionsInCsprojFile"
Properties="ProjectFile=$(Laerdal_McuMgr_ProjectFile);Version=$(Laerdal_Version_Assembly);"/>
<MsBuild Projects="$(MSBuildProjectFullPath)"
Targets="_updatePackageVersionsInCsprojFile"
Properties="ProjectFile=$(Laerdal_McuMgrBindings_ProjectFile);Version=$(Laerdal_Version_Assembly);"/>
</Target>

<Target Name="_updatePackageVersionsInCsprojFile">
<_replaceRegexInFile InputFile="$(ProjectFile)" Regex="&lt;Version&gt;.*?&lt;/Version&gt;" ReplacementText="&lt;Version&gt;$(Version)&lt;/Version&gt;" />
<_replaceRegexInFile InputFile="$(ProjectFile)" Regex="&lt;FileVersion&gt;.*?&lt;/FileVersion&gt;" ReplacementText="&lt;FileVersion&gt;$(Version)&lt;/FileVersion&gt;" />
<_replaceRegexInFile InputFile="$(ProjectFile)" Regex="&lt;PackageVersion&gt;.*?&lt;/PackageVersion&gt;" ReplacementText="&lt;PackageVersion&gt;$(Version)&lt;/PackageVersion&gt;" />
<_replaceRegexInFile InputFile="$(ProjectFile)" Regex="&lt;AssemblyVersion&gt;.*?&lt;/AssemblyVersion&gt;" ReplacementText="&lt;AssemblyVersion&gt;$(Version)&lt;/AssemblyVersion&gt;" />

<!-- this affects only laerdal.mcumgr.csproj -->
<_replaceRegexInFile InputFile="$(ProjectFile)"
Regex="&lt;PackageReference Include=&quot;Laerdal.McuMgr.Bindings&quot; Version=&quot;.*?&quot;"
ReplacementText="&lt;PackageReference Include=&quot;Laerdal.McuMgr.Bindings&quot; Version=&quot;$(Version)&quot;" />
</Target>

<UsingTask
TaskName="_replaceRegexInFile"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<ParameterGroup>
<Regex ParameterType="System.String" Required="true" />
<InputFile ParameterType="System.String" Required="true" />
<ReplacementText ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs">
<![CDATA[
string fileText = System.IO.File.ReadAllText(InputFile);
string eventualText = System.Text.RegularExpressions.Regex.Replace(fileText, Regex, ReplacementText);
System.IO.File.WriteAllText(InputFile, eventualText, System.Text.Encoding.UTF8);
]]>
</Code>
</Task>
</UsingTask>

<!-- BUILD -->
<Target Name="BuildProjects">
<Target Name="BuildProjects" DependsOnTargets="WriteUpdatedPackageVersionsInCsprojFiles">
<Error Text="'Laerdal_Version_Assembly' has to be set. Please call this script again with the argument '/p:Laerdal_Version_Assembly=...'"
Condition=" '$(Laerdal_Version_Assembly)' == '' "/>

Expand All @@ -112,20 +168,40 @@
<_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters);Version=$(Laerdal_Version_Assembly)</_Laerdal_Build_Parameters>
<_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters);FileVersion=$(Laerdal_Version_Assembly)</_Laerdal_Build_Parameters>
<_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters);AssemblyVersion=$(Laerdal_Version_Assembly)</_Laerdal_Build_Parameters>

<_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters);PackageVersion=$(Laerdal_Version_Assembly)</_Laerdal_Build_Parameters>
</PropertyGroup>


<MSBuild Projects="Laerdal.McuMgr.Bindings/Laerdal.McuMgr.Bindings.csproj" Properties="$(_Laerdal_Build_Parameters)" Targets="Restore;Build"/>
<!-- notice that we rebuild bindings merely building the project doesnt really cut it -->
<MSBuild Projects="Laerdal.McuMgr.Bindings/Laerdal.McuMgr.Bindings.csproj" Properties="$(_Laerdal_Build_Parameters)" Targets="Restore;Rebuild"/>

<!-- build mcumgr -->
<PropertyGroup>
<_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters);SourceRoot=$(MSBuildThisFileDirectory)/Laerdal.McuMgr/</_Laerdal_Build_Parameters>
<_Laerdal_Build_Parameters>$(_Laerdal_Build_Parameters);Laerdal_McuMgr_Bindings_Package_Version=$(Laerdal_Version_Assembly)</_Laerdal_Build_Parameters>
</PropertyGroup>

<MSBuild Projects="Laerdal.McuMgr/Laerdal.McuMgr.csproj" Properties="$(_Laerdal_Build_Parameters)" Targets="Restore;Build"/>
<!-- notice that we rebuild mcumgr merely building the project doesnt really cut it -->
<MSBuild Projects="Laerdal.McuMgr/Laerdal.McuMgr.csproj" Properties="$(_Laerdal_Build_Parameters)" Targets="Restore;Rebuild"/>
</Target>

<!-- TESTS -->
<Target Name="RunTests" AfterTargets="BuildProjects" BeforeTargets="CreateGithubReleaseWithTag">
<PropertyGroup>
<_Laerdal_Testbed_Parameters>$(_Laerdal_Testbed_Parameters);Configuration=$(Configuration)</_Laerdal_Testbed_Parameters>
<_Laerdal_Testbed_Parameters>$(_Laerdal_Testbed_Parameters);Laerdal_McuMgr_Bindings_Package_Version=$(Laerdal_Version_Assembly)</_Laerdal_Testbed_Parameters>
</PropertyGroup>

<!-- in azure pipelines this doesnt work as intended for net framework projects because -->
<!-- quite simply they dont have any target called 'Restore' like net7+ projects do ;) -->
<!-- -->
<!-- <MSBuild Targets="Restore" -->
<!-- Projects="Laerdal.McuMgr.Tests/Laerdal.McuMgr.Tests.csproj" -->
<!-- Properties="$(_Laerdal_Testbed_Parameters);RestorePackagesPath=packages/" /> -->

<!-- this is the only way to reliably restore nuget packages for dotnet framework projects -->
<Exec Command=" nuget restore Laerdal.McuMgr.Tests/Laerdal.McuMgr.Tests.csproj -PackagesDirectory packages/ "/>

<MSBuild Targets="Test"
Projects="Laerdal.McuMgr.Tests/Laerdal.McuMgr.Tests.csproj"
Properties="$(_Laerdal_Testbed_Parameters)"/>
</Target>

<!-- GITHUB RELEASE -->
Expand Down
Loading

0 comments on commit d514101

Please sign in to comment.