1+ $here = Split-Path - Parent $MyInvocation.MyCommand.Path
2+ $sut = (Split-Path - Leaf $MyInvocation.MyCommand.Path ) -replace ' \.Tests\.' , ' .'
3+ . " $here \$sut "
4+
5+ BeforeAll {
6+ . $PSScriptRoot / ManagedHsmDatePlaneTests.ps1
7+ ImportModules
8+ $hsmName = GetAzManagedHsm
9+ }
10+
11+ Describe " AddAzManagedHsmKey" {
12+ It " Create a RSA key inside a managed HSM" {
13+ $keyName = GetRandomName - Prefix " key"
14+ $keyType = " RSA"
15+ $rsaKey = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType $keyType
16+ $rsaKey.VaultName | Should - BeExactly $hsmName
17+ $rsaKey.Name | Should - BeExactly $keyName
18+ $rsaKey.Attributes.KeyType | Should - Be " RSA-HSM"
19+ }
20+
21+ It " Create an EC key with curve P-256 inside a managed HSM" {
22+ $keyName = GetRandomName - Prefix " key"
23+ $keyType = " EC"
24+ $curveName = " P-256"
25+ $rsaKey = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType $keyType - CurveName $curveName
26+ $rsaKey.VaultName | Should - BeExactly $hsmName
27+ $rsaKey.Name | Should - BeExactly $keyName
28+ $rsaKey.Attributes.KeyType | Should - Be " EC-HSM"
29+ $rsaKey.Key.CurveName | Should - Be $curveName
30+ }
31+
32+ It " Create an oct key inside a managed HSM" {
33+ $keyName = GetRandomName - Prefix " key"
34+ $keyType = " oct"
35+ $rsaKey = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType $keyType
36+ $rsaKey.VaultName | Should - BeExactly $hsmName
37+ $rsaKey.Name | Should - BeExactly $keyName
38+ $rsaKey.Attributes.KeyType | Should - Be " oct-HSM"
39+ }
40+
41+ It " Create an oct key inside a managed HSM" {
42+ $keyName = GetRandomName - Prefix " key"
43+ $keyType = " oct"
44+ $rsaKey = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType $keyType
45+ $rsaKey.VaultName | Should - BeExactly $hsmName
46+ $rsaKey.Name | Should - BeExactly $keyName
47+ $rsaKey.Attributes.KeyType | Should - Be " oct-HSM"
48+ }
49+
50+ It " Create a key with non-default values inside a managed HSM" {
51+ $keyName = GetRandomName - Prefix " key"
52+ $keyType = " RSA"
53+ $KeyOps = ' decrypt' , ' verify'
54+ # Expires & NotBefore is hard to cmpare, may add in the furture
55+ $Tags = @ {' Severity' = ' high' ; ' Accounting' = " true" }
56+
57+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType $keyType - KeyOps $KeyOps - Disable - Tag $Tags
58+
59+ $key.Attributes.KeyOps | Should - Be $KeyOps
60+ $key.Tags.Count | Should - Be 2
61+ $key.Enabled | Should - Be $false
62+ }
63+
64+ It " Import a RSA key from pfx file into a managed HSM" {
65+ $keyName = GetRandomName - Prefix " key"
66+ $keyFilePath = Join-Path $PSScriptRoot ../ Resources/ testImportKey.pfx - Resolve
67+ $keyFilePwd = ConvertTo-SecureString " Passw0rd" - AsPlainText - Force
68+ $key = Add-AzManagedHsmKey - HsmName bezmhsm - Name $keyName - KeyFilePath $keyFilePath - KeyFilePassword $keyFilePwd
69+ $key.Name | Should - BeExactly $keyName
70+ }
71+ }
72+
73+ Describe " GetAzManagedHsmKey" {
74+ It " List all the keys in a managed HSM" {
75+ $keyName = GetRandomName - Prefix " key"
76+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
77+ $keys = Get-AzManagedHsmKey - HsmName $hsmName
78+ $keys.Count | Should - BeGreaterThan 0
79+ }
80+
81+ It " Get a specific key in a managed HSM" {
82+ $keyName = GetRandomName - Prefix " key"
83+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
84+ $got = Get-AzManagedHsmKey - HsmName $hsmName - KeyName $keyName
85+ $got.Id | Should - Be $key.Id
86+ }
87+
88+ It " List all the keys that have been deleted in a managed HSM" {
89+ $keyName = GetRandomName - Prefix " key"
90+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
91+ Remove-AzManagedHsmKey - HsmName $hsmName - Name $keyName
92+ $deletedKey = Get-AzManagedHsmKey - HsmName $hsmName - KeyName $keyName - InRemovedState
93+ $deletedKey.Id | Should - Be $key.Id
94+ }
95+
96+ It " Download a key from a managed HSM" {
97+ $keyName = GetRandomName - Prefix " key"
98+ Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
99+ $filePath = " $PSScriptRoot \public.pem"
100+ Get-AzManagedHsmKey - HsmName $hsmName - KeyName $keyName - OutFile $filePath
101+ $filePath | Should - Exist
102+ }
103+ }
104+
105+ Describe " RemoveAzManagedHsmKey" {
106+ It " Remove a key from a managed HSM" {
107+ $keyName = GetRandomName - Prefix " key"
108+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
109+ $deletedKey = Remove-AzManagedHsmKey - HsmName $hsmName - Name $keyName - Force - PassThru
110+ $deletedKey.Id | Should - Be $key.Id
111+ }
112+
113+ It " Purge a deleted key from a managed HSM" {
114+ $keyName = GetRandomName - Prefix " key"
115+ Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
116+ Remove-AzManagedHsmKey - HsmName $hsmName - Name $keyName - Force - PassThru
117+ Remove-AzManagedHsmKey - HsmName $hsmName - Name $keyName - InRemovedState - Force - PassThru
118+ $deletedKey = Get-AzManagedHsmKey - HsmName $hsmName - Name $keyName - InRemovedState
119+ $deletedKey | Should - Be $null
120+ }
121+
122+ It " Remove keys by using piping" {
123+ Get-AzManagedHsmKey - HsmName $hsmName | Remove-AzManagedHsmKey - Force
124+ $keys = Get-AzManagedHsmKey - HsmName $hsmName
125+ $keys.Count | Should - Be 0
126+ }
127+ }
128+
129+ Describe " UpdateAzManagedHsmKey" {
130+ It " Enable a key and set tags" {
131+ $keyName = GetRandomName - Prefix " key"
132+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA" - Disable
133+ $Tags = @ {' Severity' = ' high' ; ' Accounting' = ' true' }
134+
135+ $updatedKey = Update-AzManagedHsmKey - HsmName $hsmName - Name $keyName - Enable $True - Tag $Tags - PassThru
136+
137+ $updatedKey.Id | Should - Be $key.Id
138+ $updatedKey.Enabled | Should - Be $True
139+ $updatedKey.Tags.Count | Should - Be 2
140+ }
141+ }
142+
143+ Describe " UndoAzManagedHsmKeyRemoval" {
144+ It " Undo a key removal" {
145+ $keyName = GetRandomName - Prefix " key"
146+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
147+ $deletedKey = Remove-AzManagedHsmKey - HsmName $hsmName - Name $keyName - Force - PassThru
148+ $recoveredKey = $deletedKey | Undo-AzManagedHsmKeyRemoval
149+ $recoveredKey.Id | Should - Be $key.Id
150+ }
151+ }
152+
153+ Describe " BackupAndRetoreAzManagedHsmKey" {
154+ It " Backup and retore a key" {
155+ $keyName = GetRandomName - Prefix " key"
156+ $key = Add-AzManagedHsmKey - HsmName $hsmName - Name $keyName - KeyType " RSA"
157+ $filePath = " $PSScriptRoot /backupkey.blob"
158+ $key | Backup-AzManagedHsmKey - OutputFile $filePath - Force
159+ $filePath | Should - Exist
160+
161+ Remove-AzManagedHsmKey - HsmName $hsmName - Name $keyName - Force
162+ Remove-AzManagedHsmKey - HsmName $hsmName - Name $keyName - InRemovedState - Force
163+ $restoredKey = Restore-AzManagedHsmKey - HsmName $hsmName - InputFile $filePath
164+ $restoredKey.Id | Should - Be $key.Id
165+ }
166+ }
167+
168+ # to do: manually remove all stuffs in resource group
169+ # AfterAll {
170+ # $hsm = Get-AzManagedHsm -Name $hsmName
171+ # Remove-AzResourceGroup -Name $hsm.ResourceGroupName -Force
172+ # }
0 commit comments