diff --git a/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 b/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 index b22769f3..1d512df8 100644 --- a/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 +++ b/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 @@ -135,7 +135,7 @@ function Get-HomebrewVersion { } function Get-CpanVersion { - $result = Get-CommandResult "cpan --version" -ExpectExitCode @(25, 255) + $result = Get-CommandResult "cpan --version" -ExpectedExitCode @(25, 255) $result.Output -match "version (?\d+\.\d+) " | Out-Null return $Matches.version } diff --git a/images/ubuntu/scripts/docs-gen/SoftwareReport.Helpers.psm1 b/images/ubuntu/scripts/docs-gen/SoftwareReport.Helpers.psm1 index 1243cc74..1f1ebf81 100644 --- a/images/ubuntu/scripts/docs-gen/SoftwareReport.Helpers.psm1 +++ b/images/ubuntu/scripts/docs-gen/SoftwareReport.Helpers.psm1 @@ -39,3 +39,16 @@ function Get-AptSourceRepository { $sourceUrl = Get-Content "$PSScriptRoot/../helpers/apt-sources.txt" | Select-String -Pattern $PackageName | Take-OutputPart -Part (1..3) return $sourceUrl } + +function Get-OSVersionShort { + $(Get-OSVersionFull) | Take-OutputPart -Delimiter '.' -Part 0,1 +} + +function Get-OSVersionFull { + lsb_release -ds | Take-OutputPart -Part 1, 2 +} + +function Get-KernelVersion { + $kernelVersion = uname -r + return $kernelVersion +} diff --git a/images/ubuntu/scripts/helpers/Common.Helpers.psm1 b/images/ubuntu/scripts/helpers/Common.Helpers.psm1 index 5f0b3e06..7faeb373 100644 --- a/images/ubuntu/scripts/helpers/Common.Helpers.psm1 +++ b/images/ubuntu/scripts/helpers/Common.Helpers.psm1 @@ -1,8 +1,33 @@ function Get-CommandResult { + <# + .SYNOPSIS + Runs a command in bash and returns the output and exit code. + + .DESCRIPTION + Function runs a provided command in bash and returns the output and exit code as hashtable. + + .PARAMETER Command + The command to run. + + .PARAMETER ExpectedExitCode + The expected exit code. If the actual exit code does not match, an exception is thrown. + + .PARAMETER Multiline + If true, the output is returned as an array of strings. Otherwise, the output is returned as a single string. + + .PARAMETER ValidateExitCode + If true, the actual exit code is compared to the expected exit code. + + .EXAMPLE + $result = Get-CommandResult "ls -la" + + This command runs "ls -la" in bash and returns the output and exit code as hashtable. + + #> param ( [Parameter(Mandatory=$true)] [string] $Command, - [int[]] $ExpectExitCode = 0, + [int[]] $ExpectedExitCode = 0, [switch] $Multiline, [bool] $ValidateExitCode = $true ) @@ -12,7 +37,7 @@ function Get-CommandResult { $exitCode = $LASTEXITCODE if ($ValidateExitCode) { - if ($ExpectExitCode -notcontains $exitCode) { + if ($ExpectedExitCode -notcontains $exitCode) { try { throw "StdOut: '$stdout' ExitCode: '$exitCode'" } catch { @@ -24,24 +49,11 @@ function Get-CommandResult { } return @{ - Output = If ($Multiline -eq $true) { $stdout } else { [string]$stdout } + Output = If ($Multiline -eq $true) { $stdout } else { [string] $stdout } ExitCode = $exitCode } } -function Get-OSVersionShort { - $(Get-OSVersionFull) | Take-OutputPart -Delimiter '.' -Part 0,1 -} - -function Get-OSVersionFull { - lsb_release -ds | Take-OutputPart -Part 1, 2 -} - -function Get-KernelVersion { - $kernelVersion = uname -r - return $kernelVersion -} - function Test-IsUbuntu20 { return (lsb_release -rs) -eq "20.04" } @@ -56,6 +68,23 @@ function Get-ToolsetContent { } function Get-ToolsetValue { + <# + .SYNOPSIS + This function retrieves the value of a specific toolset. + + .DESCRIPTION + The Get-ToolsetValue is used to retrieve the value of a specific toolset. + The toolset is a collection of tools or settings in json format. + + .PARAMETER KeyPath + The path to the toolset value in json notation. + + .EXAMPLE + Get-ToolsetValue -Toolset "tool.arch.versions" + + This command returns the value of the nodes named "tool", "arch" and "versions" as PSCustomObject. + + #> param ( [Parameter(Mandatory = $true)] [string] $KeyPath @@ -64,30 +93,9 @@ function Get-ToolsetValue { $jsonNode = Get-ToolsetContent $pathParts = $KeyPath.Split(".") - # try to walk through all arguments consequentially to resolve specific json node + # walk through all arguments consequentially to resolve specific json node $pathParts | ForEach-Object { $jsonNode = $jsonNode.$_ } return $jsonNode } - -function Get-AndroidPackages { - $packagesListFile = "/usr/local/lib/android/sdk/packages-list.txt" - - if (-Not (Test-Path -Path $packagesListFile -PathType Leaf)) { - (/usr/local/lib/android/sdk/cmdline-tools/latest/bin/sdkmanager --list --verbose 2>&1) | - Where-Object { $_ -Match "^[^\s]" } | - Where-Object { $_ -NotMatch "^(Loading |Info: Parsing |---|\[=+|Installed |Available )" } | - Where-Object { $_ -NotMatch "^[^;]*$" } | - Out-File -FilePath $packagesListFile - - Write-Host Android packages list: - Get-Content $packagesListFile - } - - return Get-Content $packagesListFile -} - -function Get-EnvironmentVariable($variable) { - return [System.Environment]::GetEnvironmentVariable($variable) -} \ No newline at end of file diff --git a/images/ubuntu/scripts/tests/Android.Tests.ps1 b/images/ubuntu/scripts/tests/Android.Tests.ps1 index 0ed6847e..f841bd3a 100644 --- a/images/ubuntu/scripts/tests/Android.Tests.ps1 +++ b/images/ubuntu/scripts/tests/Android.Tests.ps1 @@ -1,16 +1,102 @@ Describe "Android" { + BeforeAll { + function Test-AndroidPackage { + <# + .SYNOPSIS + This function tests existance of an Android package. + + .DESCRIPTION + The Test-AndroidPackage function is used to test an existance of Android package in ANDROID_HOME path. + + .PARAMETER PackageName + The name of the Android package to test. + + .EXAMPLE + Test-AndroidPackage + + This command tests the Android package. + + #> + param ( + [Parameter(Mandatory=$true)] + [string] $PackageName + ) + + # Convert 'cmake;3.6.4111459' -> 'cmake/3.6.4111459' + $PackageName = $PackageName.Replace(";", "/") + $targetPath = Join-Path $env:ANDROID_HOME $PackageName + $targetPath | Should -Exist + } + } + + function Get-AndroidPackages { + <# + .SYNOPSIS + This function returns a list of available Android packages. + + .DESCRIPTION + The Get-AndroidPackages function checks if a list of packages is already available in a file. + If not, it uses the sdkmanager to generate a list of available packages and saves it to a file. + It then returns the content of this file. + + .PARAMETER SDKRootPath + The root path of the Android SDK installation. + If not specified, the function uses the ANDROID_HOME environment variable. + + .EXAMPLE + Get-AndroidPackages -SDKRootPath "/usr/local/lib/android/sdk" + + This command returns a list of available Android packages for the specified SDK root path. + + .NOTES + This function requires the Android SDK to be installed. + #> + param ( + [Parameter(Mandatory=$false)] + [string] $SDKRootPath + ) + + if (-not $SDKRootPath) { + $SDKRootPath = $env:ANDROID_HOME + } + + $packagesListFile = "$SDKRootPath/packages-list.txt" + + if (-not (Test-Path -Path $packagesListFile -PathType Leaf)) { + (/usr/local/lib/android/sdk/cmdline-tools/latest/bin/sdkmanager --list --verbose 2>&1) | + Where-Object { $_ -Match "^[^\s]" } | + Where-Object { $_ -NotMatch "^(Loading |Info: Parsing |---|\[=+|Installed |Available )" } | + Where-Object { $_ -NotMatch "^[^;]*$" } | + Out-File -FilePath $packagesListFile + + Write-Host "Android packages list:" + Get-Content $packagesListFile + } + + return Get-Content $packagesListFile + } + $androidSdkManagerPackages = Get-AndroidPackages [int]$platformMinVersion = Get-ToolsetValue "android.platform_min_version" [version]$buildToolsMinVersion = Get-ToolsetValue "android.build_tools_min_version" [array]$ndkVersions = Get-ToolsetValue "android.ndk.versions" - $ndkFullVersions = $ndkVersions | ForEach-Object { (Get-ChildItem "/usr/local/lib/android/sdk/ndk/${_}.*" | Select-Object -Last 1).Name } | ForEach-Object { "ndk/${_}" } + $ndkFullVersions = $ndkVersions | + ForEach-Object { (Get-ChildItem "/usr/local/lib/android/sdk/ndk/${_}.*" | + Select-Object -Last 1).Name } | ForEach-Object { "ndk/${_}" } # Platforms starting with a letter are the preview versions, which is not installed on the image - $platformVersionsList = ($androidSdkManagerPackages | Where-Object { "$_".StartsWith("platforms;") }) -replace 'platforms;android-', '' | Where-Object { $_ -match "^\d" } | Sort-Object -Unique - $platformsInstalled = $platformVersionsList | Where-Object { [int]($_.Split("-")[0]) -ge $platformMinVersion } | ForEach-Object { "platforms/android-${_}" } + $platformVersionsList = ($androidSdkManagerPackages | + Where-Object { "$_".StartsWith("platforms;") }) -replace 'platforms;android-', '' | + Where-Object { $_ -match "^\d" } | Sort-Object -Unique + $platformsInstalled = $platformVersionsList | + Where-Object { [int]($_.Split("-")[0]) -ge $platformMinVersion } | + ForEach-Object { "platforms/android-${_}" } $buildToolsList = ($androidSdkManagerPackages | Where-Object { "$_".StartsWith("build-tools;") }) -replace 'build-tools;', '' - $buildTools = $buildToolsList | Where-Object { $_ -match "\d+(\.\d+){2,}$"} | Where-Object { [version]$_ -ge $buildToolsMinVersion } | Sort-Object -Unique | - ForEach-Object { "build-tools/${_}" } + $buildTools = $buildToolsList | + Where-Object { $_ -match "\d+(\.\d+){2,}$"} | + Where-Object { [version]$_ -ge $buildToolsMinVersion } | + Sort-Object -Unique | + ForEach-Object { "build-tools/${_}" } $androidPackages = @( $platformsInstalled, @@ -23,22 +109,6 @@ Describe "Android" { $androidPackages = $androidPackages | ForEach-Object { $_ } - BeforeAll { - function Validate-AndroidPackage { - param ( - [Parameter(Mandatory=$true)] - [string]$PackageName - ) - - # Convert 'm2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta1' -> - # 'm2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-beta1' - # 'cmake;3.6.4111459' -> 'cmake/3.6.4111459' - $PackageName = $PackageName.Replace(";", "/") - $targetPath = Join-Path $env:ANDROID_HOME $PackageName - $targetPath | Should -Exist - } - } - Context "SDKManagers" { $testCases = @( @{ @@ -61,7 +131,7 @@ Describe "Android" { It "" -TestCases $testCases { param ([string] $PackageName) - Validate-AndroidPackage $PackageName + Test-AndroidPackage $PackageName } } } diff --git a/images/ubuntu/scripts/tests/Java.Tests.ps1 b/images/ubuntu/scripts/tests/Java.Tests.ps1 index 7a5c2eb6..a295377c 100644 --- a/images/ubuntu/scripts/tests/Java.Tests.ps1 +++ b/images/ubuntu/scripts/tests/Java.Tests.ps1 @@ -8,8 +8,8 @@ Describe "Java" { [array]$testCases = $jdkVersions | ForEach-Object { @{Version = $_ } } It "Java is default" -TestCases @{ DefaultJavaVersion = $defaultVersion } { - $actualJavaPath = Get-EnvironmentVariable "JAVA_HOME" - $expectedJavaPath = Get-EnvironmentVariable "JAVA_HOME_${DefaultJavaVersion}_X64" + $actualJavaPath = [System.Environment]::GetEnvironmentVariable("JAVA_HOME") + $expectedJavaPath = [System.Environment]::GetEnvironmentVariable("JAVA_HOME_${DefaultJavaVersion}_X64") $actualJavaPath | Should -Not -BeNullOrEmpty $expectedJavaPath | Should -Not -BeNullOrEmpty @@ -28,7 +28,7 @@ Describe "Java" { It "Gradle" { "gradle -version" | Should -ReturnZeroExitCode - $gradleVariableValue = Get-EnvironmentVariable "GRADLE_HOME" + $gradleVariableValue = [System.Environment]::GetEnvironmentVariable("GRADLE_HOME") $gradleVariableValue | Should -BeLike "/usr/share/gradle-*" $gradlePath = Join-Path $env:GRADLE_HOME "bin/gradle" @@ -36,7 +36,7 @@ Describe "Java" { } It "Java " -TestCases $testCases { - $javaVariableValue = Get-EnvironmentVariable "JAVA_HOME_${Version}_X64" + $javaVariableValue = [System.Environment]::GetEnvironmentVariable("JAVA_HOME_${Version}_X64") $javaVariableValue | Should -Not -BeNullOrEmpty $javaPath = Join-Path $javaVariableValue "bin/java"