AzureRM.Websites.Experiments.Tests.ps1
# ---------------------------------------------------------------------------------- # # Copyright Microsoft Corporation # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ---------------------------------------------------------------------------------- InModuleScope AzureRM.Websites.Experiments { function Get-AzureRmAppServicePlanMock { param( [string]$PlanName, [string]$GroupName, [object[]]$Plans ) if ($PlanName -and $GroupName){ return @{Id=$PlanName;Name=$PlanName;ResourceGroup=$GroupName} } else { return $Plans } } function Get-AzureRmResourceGroupMock { param( [string]$Name, [object[]]$Groups ) return $Groups | Where-Object {$_.ResourceGroupName -eq $Name} } Describe "Get-WebAppName "{ $randomNumber = 1 $defaultName = "WebApp$randomNumber" Context "[mock] When name is not provided: " { Mock Get-Random {return $randomNumber} Mock Test-NameAvailability {return $true} $result = Get-WebAppName -ProvidedParameters @{} It "Returns string with defaultName" { $result | Should BeOfType System.String $result | Should Be $defaultName } } Context "[mock] When name is provided and name is available: " { $customName = "customName" Mock Test-NameAvailability {return $true} $result = Get-WebAppName -ProvidedParameters @{WebAppName=$customName} It "Returns a string with provided name" { $result | Should BeOfType System.String $result | Should Be $customName } } Context "[mock] When name is provided and name is NOT available: " { $customName = "customName" Mock Test-NameAvailability {return $false} It "Should throw." { {$result = Get-WebAppName -ProvidedParameters @{WebAppName=$customName}} | Should Throw } } } Describe "Get-ResourceGroupInfo "{ $webAppName = "MyWebAppName1" Context "[mock] When a ResourceGroupName is not provided and WebAppName is not equal to an existing resource group: " { Mock Test-ResourceGroupExistence {return $false} $result = Get-ResourceGroupInfo ` -ProvidedParameters @{} ` -WebAppName $webAppName It "Returns a hashtable." { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same value as webAppName." { $result.Name| Should Be $webAppName } It "Returns a hashtable with key 'Exists' set to 'False'." { $result.Exists | Should Be $false } } Context "[mock] When a ResourceGroupName is not provided and WebAppName is equal to an existing resource group: " { Mock Test-ResourceGroupExistence {return $true} $result = Get-ResourceGroupInfo ` -ProvidedParameters @{} ` -WebAppName $webAppName It "Returns a hashtable." { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same value as webAppName." { $result.Name| Should Be $webAppName } It "Returns a hashtable with key 'Exists' set to 'False'." { $result.Exists | Should Be $true } } Context "[mock] When a ResourceGroupName is provided and that name does not already exist: " { $customName = "customName" Mock Test-ResourceGroupExistence {return $false} $result = Get-ResourceGroupInfo ` -ProvidedParameters @{ResourceGroupName=$customName} ` -WebAppName $webAppName It "Returns a hashtable." { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same value as provided name." { $result.Name| Should Be $customName } It "Returns a hashtable with key 'Exists' set to 'False'." { $result.Exists | Should Be $false } } Context "[mock] When a ResourceGroupName is provided and that name already exists: " { $customName = "customName" Mock Test-ResourceGroupExistence {return $true} $result = Get-ResourceGroupInfo ` -ProvidedParameters @{ResourceGroupName=$customName} ` -WebAppName $webAppName It "Returns a hashtable." { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same value as provided name." { $result.Name| Should Be $customName } It "Returns a hashtable with key 'Exists' set to 'True'." { $result.Exists | Should Be $true } } } Describe "Get-AppServicePlanInfo" { $webAppName = "MyWebAppName1" Context "When no parameters are provided and there is not a default app service plan: " { $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $groupName = "group1" Mock Get-AzureRmAppServicePlan {return $plans} $result = Get-AppServicePlanInfo ` -ProvidedParameters @{} ` -WebAppName $webAppName ` -ResourceGroupName $groupName It "Returns a hashtable. " { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same value as the WebAppName. " { $result.Name | Should Be $webAppName } It "Returns a hashtable with key 'Exists' set to 'False'. " { $result.Exists | Should Be $false } It "Returns a hashtable with key 'ResourceGroup' set to ResourceGroupName passed. " { $result.ResourceGroup | Should Be $groupName } It "Returns a hashtable with key 'IsDefaultPlan' set to 'False'. " { $result.IsDefaultPlan | Should Be $false } } Context "When no parameters are provided and there is a default app service plan: " { $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2Id";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group2"} $plan3 = @{Id="plan3Id";Name="plan3";Sku=@{Tier="Free"};ResourceGroup="group3"} $plans = @($plan1,$plan2,$plan3) $groupName = "group1" Mock Get-AzureRmAppServicePlan {return $plans} $result = Get-AppServicePlanInfo ` -ProvidedParameters @{} ` -WebAppName $webAppName ` -ResourceGroupName $groupName It "Returns a hashtable. " { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same vaue as the first plan with default characteristics. " { $result.Name | Should Be $plan2.Name } It "Returns a hashtable with key 'Exists' set 'True'. " { $result.Exists | Should Be $true } It "Returns a hashtable with key 'ResourceGroup' set to same value as the first default plan's resource group. " { $result.ResourceGroup | Should Be $plan2.ResourceGroup } It "Returns a hashtable with key 'IsDefaultPlan' set to 'False'. " { $result.IsDefaultPlan | Should Be $true } } Context "When an Id is provided and plan name exists and group provided matches the provided in the id: " { $planName = "plan1" $groupName = "group1" $planId = "/subscriptions/f30a7701-df2c-4bc7-ba8d-ab11861ca13c/resourceGroups/$groupName/providers/Microsoft.Web/serverfarms/$planName" $plan1 = @{Id=$planId;Name=$planName;Sku=@{Tier="Basic"};ResourceGroup=$groupName} $plan2 = @{Id="plan2Id";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group2"} $plan3 = @{Id="plan3Id";Name="plan3";Sku=@{Tier="Free"};ResourceGroup="group3"} $plans = @($plan1,$plan2,$plan3) Mock Get-AzureRmAppServicePlan {return $plans} $result = Get-AppServicePlanInfo ` -ProvidedParameters @{AppServicePlan=$planId} ` -WebAppName $webAppName ` -ResourceGroupName $groupName It "Returns a hashtable. " { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same vaue as the plan wiht matching ID. " { $result.Name | Should Be $planName } It "Returns a hashtable with key 'Exists' set 'True'. " { $result.Exists | Should Be $true } It "Returns a hashtable with key 'ResourceGroup' set to same resource group found in the ID. " { $result.ResourceGroup | Should Be $groupName } It "Returns a hashtable with key 'IsDefaultPlan' set to 'False'. " { $result.IsDefaultPlan | Should Be $false } } Context "When an Id is provided and the Id does not belong to any existent plan: " { $planName = "plan1" $groupName = "group1" $planId = "/subscriptions/f30a7701-df2c-4bc7-ba8d-ab11861ca13c/resourceGroups/$groupName/providers/Microsoft.Web/serverfarms/$planName" $plan2 = @{Id="plan2Id";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group2"} $plan3 = @{Id="plan3Id";Name="plan3";Sku=@{Tier="Free"};ResourceGroup="group3"} $plans = @($plan2,$plan3) Mock Get-AzureRmAppServicePlan {return $plans} It "Should throw. " { { $result = Get-AppServicePlanInfo ` -ProvidedParameters @{AppServicePlan=$planId} ` -WebAppName $webAppName ` -ResourceGroupName $nonMatchingGroupName } | Should Throw } } Context "When a plan name is provided and the plan name does not exist: " { $planName = "customName" $groupName = "customGroup" $plan1 = @{Id="plan1Id";Name="plan1";Sku=@{Tier="Free"};ResourceGroup="group1"} $plan2 = @{Id="plan2Id";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group2"} $plans = @($plan1,$plan2) Mock Get-AzureRmAppServicePlan {return $plans} $result = Get-AppServicePlanInfo ` -ProvidedParameters @{AppServicePlan=$planName} ` -WebAppName $webAppName ` -ResourceGroupName $groupName It "Returns a hashtable. " { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same name provided. " { $result.Name | Should Be $planName } It "Returns a hashtable with key 'Exists' set 'False'. " { $result.Exists | Should Be $false } It "Returns a hashtable with key 'ResourceGroup' set to ResourceGroupName passed. " { $result.ResourceGroup | Should Be $groupName } It "Returns a hashtable with key 'IsDefaultPlan' set to 'False'. " { $result.IsDefaultPlan | Should Be $false } } Context "When a plan name is provided and plan name exists and there are various plans with the same name and a Resource Group matching ResourceGroupName passed contains that plan name : " { $existingPlanName = "existingPlan" $groupName = "existingGroup" $plan1 = @{Id="plan1Id";Name=$existingPlanName;Sku=@{Tier="Free"};ResourceGroup="group1"} $plan2 = @{Id="plan2Id";Name=$existingPlanName;Sku=@{Tier="Free"};ResourceGroup=$groupName} $plan3 = @{Id="plan3Id";Name="plan3";Sku=@{Tier="Free"};ResourceGroup="group3"} $plans = @($plan1,$plan2,$plan3) Mock Get-AzureRmAppServicePlan {return $plans} $result = Get-AppServicePlanInfo ` -ProvidedParameters @{AppServicePlan=$existingPlanName} ` -WebAppName $webAppName ` -ResourceGroupName $groupName It "Returns a hashtable. " { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same name provided. " { $result.Name | Should Be $existingPlanName } It "Returns a hashtable with key 'Exists' set to 'True'. " { $result.Exists | Should Be $true } It "Returns a hashtable with key 'ResourceGroup' set to passed ResourceGroupName. " { $result.ResourceGroup | Should Be $groupName } It "Returns a hashtable with key 'IsDefaultPlan' set to 'False'. " { $result.IsDefaultPlan | Should Be $false } } Context "When a plan name is provided and plan name exists and there are various plans with the same name and a there is not Resource Group matching ResourceGroupName passed which contains that plan name : " { $existingPlanName = "customPlan" $groupName = "customGroup" $plan1 = @{Id="plan1Id";Name=$existingPlanName;Sku=@{Tier="Free"};ResourceGroup="group1"} $plan2 = @{Id="plan2Id";Name=$existingPlanName;Sku=@{Tier="Free"};ResourceGroup="group2"} $plan3 = @{Id="plan3Id";Name="plan3";Sku=@{Tier="Free"};ResourceGroup="group3"} $plans = @($plan1,$plan2,$plan3) Mock Get-AzureRmAppServicePlan {return $plans} It "Should Throw. " { { $result = Get-AppServicePlanInfo ` -ProvidedParameters @{AppServicePlan=$existingPlanName} ` -WebAppName $webAppName ` -ResourceGroupName $groupName } | Should Throw } } Context "When a plan name is provided and plan name exists and there is one with that same name and a there is not Resource Group matching ResourceGroupName passed which contains that plan name : " { $existingPlanName = "customPlan" $existingPlanGroup = "customGroup" $groupName = "passedGroup" $plan1 = @{Id="plan1Id";Name=$existingPlanName;Sku=@{Tier="Free"};ResourceGroup=$existingPlanGroup} $plan2 = @{Id="plan2Id";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group2"} $plan3 = @{Id="plan3Id";Name="plan3";Sku=@{Tier="Free"};ResourceGroup="group3"} $plans = @($plan1,$plan2,$plan3) Mock Get-AzureRmAppServicePlan {return $plans} $result = Get-AppServicePlanInfo ` -ProvidedParameters @{AppServicePlan=$existingPlanName} ` -WebAppName $webAppName ` -ResourceGroupName $groupName It "Returns a hashtable. " { $result | Should BeOfType System.Collections.Hashtable } It "Returns a hashtable with key 'Name' set to same name provided. " { $result.Name | Should Be $existingPlanName } It "Returns a hashtable with key 'Exists' set to 'True'. " { $result.Exists | Should Be $true } It "Returns a hashtable with key 'ResourceGroup' set to passed ResourceGroupName. " { $result.ResourceGroup | Should Be $existingPlanGroup } It "Returns a hashtable with key 'IsDefaultPlan' set to 'False'. " { $result.IsDefaultPlan | Should Be $false } } } Describe "Get-AppLocation" { $defaultLocation = "West Europe" Mock Get-DefaultLocation {return $defaultLocation} Context "When a location is not provided and ResourceGroupName passed does not exist."{ $groupName = "customGroup" $resourceGroupExists = $false $result = Get-AppLocation -ProvidedParameters @{} -ResourceGroupName $groupName -ResourceGroupExists $resourceGroupExists It "Returns a string with default location. " { $result | Should BeOfType System.String $result | Should Be $defaultLocation } } Context "When a location is not provided and ResourceGroupName passed exists."{ $groupName = "customGroup" $groupLocation = "customGroupLocation" $group1 = @{ResourceGroupName=$groupName;Location=$groupLocation} $group2 = @{ResourceGroupName="group2";Location="loc2"} $groups = @($group1,$group2) $resourceGroupExists = $true Mock Get-AzureRmResourceGroup {return $groups | Where-Object {$_.ResourceGroupName -eq $Name}} $result = Get-AppLocation -ProvidedParameters @{} -ResourceGroupName $groupName -ResourceGroupExists $resourceGroupExists It "Returns a string with default location. " { $result | Should BeOfType System.String $result | Should Be $groupLocation } } Context "When a location is provided."{ $providedLocation = "customLocation" $result = Get-AppLocation -ProvidedParameters @{Location=$providedLocation} It "Returns a string with the provided location. " { $result | Should BeOfType System.String $result | Should Be $providedLocation } } } Describe "New-AzWebAppJustDoIt"{ $randomNumber = 1 $defaultName = "WebApp$randomNumber" $defaultLocation = "West Europe" Mock Get-Random {return $randomNumber} Mock Get-DefaultLocation {return $defaultLocation} $validLocations = @("loc1","loc2","loc3") Mock Get-AzureRmResourceProvider{return @(@{ProviderNamespace="Microsoft.Web";Locations=$validLocations})} Mock Get-Context {} Mock Get-WebSitesClient {} Mock Get-ResourceManagementClient {} Context "[mock] When no parameters are provided and there is not default plan: " { $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2Id";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt It "Returns Site with default name." { $result.Name | Should be $defaultName } It "Returns Site with a NEW ResourceGroup with same name as the webapp." { $result.ResourceGroupName | Should be $defaultName $result.ResourceGroupName | Should be $result.Name } It "Returns Site with default location." { $result.Location | Should be $defaultLocation } It "Returns Site with a NEW AppServicePlan with same name as the webapp." { $result.AppServicePlan | Should be $defaultName $result.AppServicePlan | Should be $result.Name } } Context "[mock] When name is provided and there is not default plan: " { $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2Id";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $customName = "customName" Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $appPlans} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -WebAppName $customName It "Returns Site with provided name." { $result.Name | Should be $customName } It "Returns Site with a NEW ResourceGroup with same name as the webapp." { $result.ResourceGroupName | Should be $customName } It "Returns Site with default location." { $result.Location | Should be $defaultLocation } It "Returns Site with a NEW AppServicePlan with same name as the webapp." { $result.AppServicePlan | Should be $customName } } Context "[mock] When no parameters are provided and there is one default plan: " { $defaultPlanName = "defaultPlan" $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="$defaultPlanName";Name=$defaultPlanName;Sku=@{Tier="Free"};ResourceGroup="group2"} $plans = @($plan1,$plan2) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt It "Returns Site with default name." { $result.Name | Should be $defaultName } It "Returns Site with a NEW ResourceGroup with same name as the webapp." { $result.ResourceGroupName | Should be $defaultName $result.ResourceGroupName | Should be $result.Name } It "Returns Site with default Location." { $result.Location | Should be $defaultLocation } It "Returns Site with the only EXISTING default plan." { $result.AppServicePlan | Should be $defaultPlanName } } Context "[mock] When no parameters are provided and there is multiple default plans: " { $defaultPlanName1 = "defaultPlan1" $defaultPlanName2 = "defaultPlan2" $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="$defaultPlanName1";Name=$defaultPlanName1;Sku=@{Tier="Free"};ResourceGroup="group2"} $plan3 = @{Id="$defaultPlanName2";Name=$defaultPlanName2;Sku=@{Tier="Free"};ResourceGroup="group3"} $plans = @($plan1,$plan2,$plan3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt It "Returns Site with default name." { $result.Name | Should be $defaultName } It "Returns Site with a NEW ResourceGroup with same name as the webapp." { $result.ResourceGroupName | Should be $defaultName $result.ResourceGroupName | Should be $result.Name } It "Returns Site with default Location." { $result.Location | Should be $defaultLocation } It "Returns Site with the first EXISTING default plan." { $result.AppServicePlan | Should be $defaultPlanName1 } } Context "[mock] When group name is provided and group with provided name exists and default plan does not exist: " { $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $existingGroupName = "existingGroupName" $existingGroupLocation = "existingGroupLocation" $group1 = @{ResourceGroupName=$existingGroupName;Location=$existingGroupLocation} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $true} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -ResourceGroupName $existingGroupName It "Returns Site with default name." { $result.Name | Should be $defaultName } It "Returns Site with EXISTING group with provided ResourceGroupName." { $result.ResourceGroupName | Should be $existingGroupName } It "Returns Site with the SAME Location as the existing resource group that matches the provided ResourceGroupName." { $result.Location | Should be $existingGroupLocation } It "Returns Site with NEW AppServicePlan with the same name as the webapp." { $result.AppServicePlan | Should be $defaultName $result.AppServicePlan | Should be $result.Name } } Context "[mock] When group name is provided and group with provided name does not exist and default plan does not exist: " { $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $providedGroupName = "providedGroupName" $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -ResourceGroupName $providedGroupName It "Returns Site with default name." { $result.Name | Should be $defaultName } It "Returns Site with NEW group with provided ResourceGroupName." { $result.ResourceGroupName | Should be $providedGroupName } It "Returns Site with the default Location." { $result.Location | Should be $defaultLocation } It "Returns Site with NEW AppServicePlan with the same name as the webapp." { $result.AppServicePlan | Should be $defaultName $result.AppServicePlan | Should be $result.Name } } Context "[mock] When plan name is provided and plan with provided name does not exist: " { $providedPlanName = "ProvidedPlanName" $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $providedPlanName It "Returns Site with default name." { $result.Name | Should be $defaultName } It "Returns Site with NEW group with same name as the webapp." { $result.ResourceGroupName | Should Be $defaultName $result.ResourceGroupName | Should Be $result.Name } It "Returns Site with the default Location." { $result.Location | Should be $defaultLocation } It "Returns Site with NEW AppServicePlan with the same name as the webapp." { $result.AppServicePlan | Should be $providedPlanName } } Context "[mock] When plan name is provided and one plan with provided name exist: " { $existingPlanName = "ExistingPlanName" $existingPlanGroup = "ExistingPlanGroup" $plan1 = @{Id=$existingPlanName;Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup=$existingPlanGroup} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanName It "Returns Site with default name." { $result.Name | Should be $defaultName } It "Returns Site with NEW group with same name as the webapp." { $result.ResourceGroupName | Should Be $defaultName $result.ResourceGroupName | Should Be $result.Name } It "Returns Site with the default Location." { $result.Location | Should be $defaultLocation } It "Returns Site with EXISTING AppServicePlan name." { $result.AppServicePlan | Should be $existingPlanName } } Context "[mock] When plan name is provided and multiple plans with provided name exist: " { $existingPlanName = "ExistingPlanName" $existingPlanGroup = "ExistingPlanGroup" $plan1 = @{Id="plan1";Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} It "Should throw." { {$result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanName} | Should Throw } } Context "[mock] When plan name and group name are provided and no plan nor group with those names exist: " { $providedPlanName = "PlanName" $providedGroupName = "GroupNAme" $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $providedPlanName -ResourceGroupName $providedGroupName It "Returns Site with DEFAULT name." { $result.Name | Should be $defaultName } It "Returns Site with NEW group with same name provided." { $result.ResourceGroupName | Should Be $providedGroupName } It "Returns Site with the DEFAULT Location." { $result.Location | Should be $defaultLocation } It "Returns Site with EXISTING AppServicePlan name." { $result.AppServicePlan | Should Be $providedPlanName } } Context "[mock] When plan name and group name are provided and no group with that name exist and plan with that name exist: " { $existingPlanName = "ExistingPlanName" $providedGroupName = "GroupNAme" $plan1 = @{Id=$existingPlanName;Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanName -ResourceGroupName $providedGroupName It "Returns Site with DEFAULT name." { $result.Name | Should be $defaultName } It "Returns Site with NEW group with same name provided." { $result.ResourceGroupName | Should Be $providedGroupName } It "Returns Site with the DEFAULT Location." { $result.Location | Should be $defaultLocation } It "Returns Site with EXISTING AppServicePlan name." { $result.AppServicePlan | Should Be $existingPlanName } } Context "[mock] When plan name and group name are provided and no group with that name exist and multiple plans with that name exist: " { $existingPlanName = "ExistingPlanName" $providedGroupName = "GroupNAme" $plan1 = @{Id="plan1";Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup="group1"} $plan2 = @{Id="plan2";Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName="rg2";Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $false} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} It "Should throw." { {$result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanName -ResourceGroupName $providedGroupName} | Should Throw "There are various App Service Plans with that name" } } Context "[mock] When plan name and group name are provided and group with that name exists plan with that name exist and belongs to that group: " { $existingPlanName = "ExistingPlanName" $existingGroupName = "GroupNAme" $existingGroupLocation = "locationgroup" $plan1 = @{Id=$existingPlanName;Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup=$existingGroupName} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName=$existingGroupName;Location=$existingGroupLocation} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $true} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanName -ResourceGroupName $existingGroupName It "Returns Site with DEFAULT name." { $result.Name | Should be $defaultName } It "Returns Site with EXISTING group with same name provided." { $result.ResourceGroupName | Should Be $existingGroupName } It "Returns Site with the location of EXISTING Location." { $result.Location | Should be $existingGroupLocation } It "Returns Site with EXISTING AppServicePlan name." { $result.AppServicePlan | Should Be $existingPlanName } } Context "[mock] When plan name and group name are provided and group with that name exists plan with that name exist and belongs to another group: " { $existingPlanName = "ExistingPlanName" $existingPlanGroup = "ExistingPlanGroup" $existingGroupName = "GroupNAme" $existingGroupLocation = "locationgroup" $plan1 = @{Id=$existingPlanName;Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup=$existingPlanGroup} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup=$existingGroupName} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName=$existingGroupName;Location=$existingGroupLocation} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $true} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanName -ResourceGroupName $existingGroupName It "Returns Site with DEFAULT name." { $result.Name | Should be $defaultName } It "Returns Site with EXISTING group with same name provided." { $result.ResourceGroupName | Should Be $existingGroupName } It "Returns Site with the location of EXISTING Location." { $result.Location | Should be $existingGroupLocation } It "Returns Site with EXISTING AppServicePlan name." { $result.AppServicePlan | Should Be $existingPlanName } } Context "[mock] When plan name and group name are provided and group with that name exists multiple plans with that name and one belongs to the existing group: " { $existingPlanName = "ExistingPlanName" $existingPlanGroup = "ExistingPlanGroup" $existingPlanGroupLocation = "locationgroup" $plan1 = @{Id=$existingPlanName;Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup=$existingPlanGroup} $plan2 = @{Id="plan2";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName=$existingPlanGroup ;Location=$existingPlanGroupLocation} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $true} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanName -ResourceGroupName $existingPlanGroup It "Returns Site with DEFAULT name." { $result.Name | Should be $defaultName } It "Returns Site with EXISTING group with same name provided." { $result.ResourceGroupName | Should Be $existingPlanGroup } It "Returns Site with the location of EXISTING Location." { $result.Location | Should be $existingPlanGroupLocation } It "Returns Site with EXISTING AppServicePlan name which belongs to the existing group." { $result.AppServicePlan | Should Be $existingPlanName } } Context "[mock] When plan name and group name are provided and group with that name exists and plan with that name does not exist, and there is a default plan: " { $defaultPlanName = "DefaultPlanName" $customPlan = "customPlan" $existingGroup = "exisitingGroup" $existingGroupLocation = "locationgroup" $plan1 = @{Id="plan1";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group1"} $plan2 = @{Id=$defaultPlanName;Name=$defaultPlanName;Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName=$existingGroup ;Location=$existingGroupLocation} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $true} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmAppServicePlan {return @{Id=$Name;Name=$Name;Location=$Location;Sku=@{Tier=$Tier};ResourcerGroupName=$ResourceGroupName}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $customPlan -ResourceGroupName $existingGroup It "Returns Site with DEFAULT name." { $result.Name | Should be $defaultName } It "Returns Site with EXISTING group with same name provided." { $result.ResourceGroupName | Should Be $existingGroup } It "Returns Site with the location of EXISTING Location." { $result.Location | Should be $existingGroupLocation } It "Returns Site with EXISTING AppServicePlan name which belongs to the existing group." { $result.AppServicePlan | Should Be $customPlan } } Context "[mock] When plan ID and group name are provided and group with that name does not exist and plan with that ID exist: " { $existingPlanName = "existingPlan" $existingPlanGroup = "existingPlanGroup" $groupExistence = $false $existingPlanId = "/subscriptions/f30a7701-df2c-1bc2-ba9d-pb11861cr13c/resourceGroups/$existingPlanGroup/providers/Microsoft.Web/serverfarms/$existingPlanName" $providedGroupName = "ProvidedGroupName" $plan1 = @{Id="plan1";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group1"} $plan2 = @{Id=$existingPlanId;Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup=$existingPlanGroup} $plans = @($plan1,$plan2) $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName=$existingPlanGroup ;Location="loc2"} $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $groupExistence} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmResourceGroup {return @{ResourceGroupName=$Name;Location=$Location}} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanId -ResourceGroupName $providedGroupName It "Returns Site with DEFAULT name." { $result.Name | Should be $defaultName } It "Returns Site with NEW group with same name as the app." { $result.ResourceGroupName | Should be $providedGroupName } It "Returns Site with the location of DEFAULT Location." { $result.Location | Should be $defaultLocation } It "Returns Site with EXISTING AppServicePlan name." { $result.AppServicePlan | Should Be $existingPlanName } } Context "[mock] When plan ID and group name are provided and group with that name exists and plan with that ID exist: " { $existingPlanName = "existingPlan" $existingPlanGroup = "existingPlanGroup" $existingPlanId = "/subscriptions/f30a7701-df2c-1bc2-ba9d-pb11861cr13c/resourceGroups/$existingPlanGroup/providers/Microsoft.Web/serverfarms/$existingPlanName" $groupExistence = $true $plan1 = @{Id="plan1";Name="plan2";Sku=@{Tier="Free"};ResourceGroup="group1"} $plan2 = @{Id=$existingPlanId;Name=$existingPlanName;Sku=@{Tier="Basic"};ResourceGroup=$existingPlanGroup} $plans = @($plan1,$plan2) $groupLocation = "groupLocation" $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName=$existingPlanGroup ;Location=$groupLocation } $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $groupExistence} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} $result = New-AzWebAppJustDoIt -AppServicePlan $existingPlanId -ResourceGroupName $existingPlanGroup It "Returns Site with DEFAULT name." { $result.Name | Should Be $defaultName } It "Returns Site with NEW group with same name as the app." { $result.ResourceGroupName | Should Be $existingPlanGroup } It "Returns Site with the location of DEFAULT Location." { $result.Location | Should Be $groupLocation } It "Returns Site with EXISTING AppServicePlan name." { $result.AppServicePlan | Should Be $existingPlanName } } Context "[mock] When plan ID and group name are provided and group with that name exists and plan with that ID DOES NOT exist: " { $providedPlanName = "ProvidedPlanName" $providedPlanGroup = "ProvidedPlanGroup" $providedPlanId = "/subscriptions/f30a7701-df2c-1bc2-ba9d-pb11861cr13c/resourceGroups/$providedPlanName/providers/Microsoft.Web/serverfarms/$providedPlanGroup" $groupExistence = $true $plan1 = @{Id="plan1";Name="plan1";Sku=@{Tier="Free"};ResourceGroup="group1"} $plan2 = @{Id="plan1";Name="plan2";Sku=@{Tier="Basic"};ResourceGroup="group2"} $plans = @($plan1,$plan2) $existingGroup = "Existing Group" $groupLocation = "groupLocation" $group1 = @{ResourceGroupName="rg1";Location="loc1"} $group2 = @{ResourceGroupName=$existingGroup ;Location=$groupLocation } $group3 = @{ResourceGroupName="rg3";Location="loc3"} $groups = @($group1, $group2, $group3) Mock Test-NameAvailability {return $true} Mock Test-ResourceGroupExistence {return $groupExistence} Mock Get-AzureRmAppServicePlan {return Get-AzureRmAppServicePlanMock $Name $ResourceGroupName $plans} Mock Get-AzureRmResourceGroup {return Get-AzureRmResourceGroupMock $Name $groups} Mock New-AzureRmWebApp {return @{Name=$Name;ResourceGroupName=$ResourceGroupName;AppServicePlan=$AppServicePlan;Location=$Location}} It "Should Throw." { {$result = New-AzWebAppJustDoIt -AppServicePlan $providedPlanId -ResourceGroupName $existingGroup} | Should Throw "The app service plan with the id provided does not exist" } } Context "[mock] When NON-VALID LOCATION is provided: " { $nonValidLocation = "customLocation" It "Should throw." { {$result = New-AzWebAppJustDoIt -ResourceGroupName $existingGroup.ResourceGroupName -Location $nonValidLocation} | Should Throw } } } } # SIG # Begin signature block # MIIkDgYJKoZIhvcNAQcCoIIj/zCCI/sCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBMq3+vPTbsoGbS # VB/Mj4/KLuUirZ55egpnv2PHqv+reqCCDYMwggYBMIID6aADAgECAhMzAAAAxOmJ # +HqBUOn/AAAAAADEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMTcwODExMjAyMDI0WhcNMTgwODExMjAyMDI0WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQCIirgkwwePmoB5FfwmYPxyiCz69KOXiJZGt6PLX4kvOjMuHpF4+nypH4IBtXrL # GrwDykbrxZn3+wQd8oUK/yJuofJnPcUnGOUoH/UElEFj7OO6FYztE5o13jhwVG87 # 7K1FCTBJwb6PMJkMy3bJ93OVFnfRi7uUxwiFIO0eqDXxccLgdABLitLckevWeP6N # +q1giD29uR+uYpe/xYSxkK7WryvTVPs12s1xkuYe/+xxa8t/CHZ04BBRSNTxAMhI # TKMHNeVZDf18nMjmWuOF9daaDx+OpuSEF8HWyp8dAcf9SKcTkjOXIUgy+MIkogCy # vlPKg24pW4HvOG6A87vsEwvrAgMBAAGjggGAMIIBfDAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUy9ZihM9gOer/Z8Jc0si7q7fDE5gw # UgYDVR0RBEswSaRHMEUxDTALBgNVBAsTBE1PUFIxNDAyBgNVBAUTKzIzMDAxMitj # ODA0YjVlYS00OWI0LTQyMzgtODM2Mi1kODUxZmEyMjU0ZmMwHwYDVR0jBBgwFoAU # SG5k5VAF04KqFzc3IrVtqMp1ApUwVAYDVR0fBE0wSzBJoEegRYZDaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljQ29kU2lnUENBMjAxMV8yMDEx # LTA3LTA4LmNybDBhBggrBgEFBQcBAQRVMFMwUQYIKwYBBQUHMAKGRWh0dHA6Ly93 # d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljQ29kU2lnUENBMjAxMV8y # MDExLTA3LTA4LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQAG # Fh/bV8JQyCNPolF41+34/c291cDx+RtW7VPIaUcF1cTL7OL8mVuVXxE4KMAFRRPg # mnmIvGar27vrAlUjtz0jeEFtrvjxAFqUmYoczAmV0JocRDCppRbHukdb9Ss0i5+P # WDfDThyvIsoQzdiCEKk18K4iyI8kpoGL3ycc5GYdiT4u/1cDTcFug6Ay67SzL1BW # XQaxFYzIHWO3cwzj1nomDyqWRacygz6WPldJdyOJ/rEQx4rlCBVRxStaMVs5apao # pIhrlihv8cSu6r1FF8xiToG1VBpHjpilbcBuJ8b4Jx/I7SCpC7HxzgualOJqnWmD # oTbXbSD+hdX/w7iXNgn+PRTBmBSpwIbM74LBq1UkQxi1SIV4htD50p0/GdkUieeN # n2gkiGg7qceATibnCCFMY/2ckxVNM7VWYE/XSrk4jv8u3bFfpENryXjPsbtrj4Ns # h3Kq6qX7n90a1jn8ZMltPgjlfIOxrbyjunvPllakeljLEkdi0iHv/DzEMQv3Lz5k # pTdvYFA/t0SQT6ALi75+WPbHZ4dh256YxMiMy29H4cAulO2x9rAwbexqSajplnbI # vQjE/jv1rnM3BrJWzxnUu/WUyocc8oBqAU+2G4Fzs9NbIj86WBjfiO5nxEmnL9wl # iz1e0Ow0RJEdvJEMdoI+78TYLaEEAo5I+e/dAs8DojCCB3owggVioAMCAQICCmEO # kNIAAAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQI # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj # YXRlIEF1dGhvcml0eSAyMDExMB4XDTExMDcwODIwNTkwOVoXDTI2MDcwODIxMDkw # OVowfjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT # B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UE # AxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMTCCAiIwDQYJKoZIhvcN # AQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t2G6qghBNNLrytlghn0IbKmvpWlCq # uAY4GgRJun/DDB7dN2vGEtgL8DjCmQawyDnVARQxQtOJDXlkh36UYCRsr55JnOlo # XtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ26DJSJhIv56sIUM+zRLdd2MQuA3Wr # aPPLbfM6XKEW9Ea64DhkrG5kNXimoGMPLdNAk/jj3gcN1Vx5pUkp5w2+oBN3vpQ9 # 7/vjK1oQH01WKKJ6cuASOrdJXtjt7UORg9l7snuGG9k+sYxd6IlPhBryoS9Z5JA7 # La4zWMW3Pv4y07MDPbGyr5I4ftKdgCz1TlaRITUlwzluZH9TupwPrRkjhMv0ugOG # jfdf8NBSv4yUh7zAIXQlXxgotswnKDglmDlKNs98sZKuHCOnqWbsYR9q4ShJnV+I # 4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43BdD1FGd7P4AOG8rAKCX9vAFbO9G9RVS+c5 # oQ/pI0m8GLhEfEXkwcNyeuBy5yTfv0aZxe/CHFfbg43sTUkwp6uO3+xbn6/83bBm # 4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7IvhNdXnFy/dygo8e1twyiPLI9AN0/B # 4YVEicQJTMXUpUMvdJX3bvh4IFgsE11glZo+TzOE2rCIF96eTvSWsLxGoGyY0uDW # iIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUSG5k # 5VAF04KqFzc3IrVtqMp1ApUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD # VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUci06AjGQQ7kU # BU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybC5taWNyb3Nv # ZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAz # XzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAz # XzIyLmNydDCBnwYDVR0gBIGXMIGUMIGRBgkrBgEEAYI3LgMwgYMwPwYIKwYBBQUH # AgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvZG9jcy9wcmltYXJ5 # Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBwAG8AbABpAGMA # eQBfAHMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAZ/KG # pZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQwWVfLiw++MNy0W2D/r4/6ArKO79H # qaPzadtjvyI1pZddZYSQfYtGUFXYDJJ80hpLHPM8QotS0LD9a+M+By4pm+Y9G6XU # tR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJGKsKKELukqQUMm+1o+mgulaAqPypr # WEljHwlpblqYluSD9MCP80Yr3vw70L01724lruWvJ+3Q3fMOr5kol5hNDj0L8giJ # 1h/DMhji8MUtzluetEk5CsYKwsatruWy2dsViFFFWDgycScaf7H0J/jeLDogaZiy # WYlobm+nt3TDQAUGpgEqKD6CPxNNZgvAs0314Y9/HG8VfUWnduVAKmWjw11SYobD # HWM2l4bf2vP48hahmifhzaWX0O5dY0HjWwechz4GdwbRBrF1HxS+YWG18NzGGwS+ # 30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOXpQlLSBCZgB/QACnFsZulP0V3HjXG0qKi # n3p6IvpIlR+r+0cjgPWe+L9rt0uX4ut1eBrs6jeZeRhL/9azI2h15q/6/IvrC4Dq # aTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4ETIheu9BCrE/+6jMpF3BoYibV3FW # TkhFwELJm3ZbCoBIa/15n8G9bW1qyVJzEw16UM0xghXhMIIV3QIBATCBlTB+MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNy # b3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExAhMzAAAAxOmJ+HqBUOn/AAAAAADE # MA0GCWCGSAFlAwQCAQUAoIHMMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwG # CisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCB0vmLA # 4FOOy540WwRgy7V+KvHNzRSfZyGvG/TMAcQ0XzBgBgorBgEEAYI3AgEMMVIwUKA2 # gDQATQBpAGMAcgBvAHMAbwBmAHQAIABBAHoAdQByAGUAIABQAG8AdwBlAHIAUwBo # AGUAbABsoRaAFGh0dHA6Ly9Db2RlU2lnbkluZm8gMA0GCSqGSIb3DQEBAQUABIIB # ACVb6En9vJKZtgtHyXAOP8ezji2IWXJXEZ/gi44uF26McKDJqE/98RZxHRuSNpdr # K7ONELZrgBTvrqH6FGoXr5m8+wW+Nil4xVBJmgivZ6phMs1Ru4V1erxW7X/2gRyy # NygPnILOptJCI/twuvP2kIZSS+WhFl+xJw/DR72STofKbQUcW3sRTCtIujnBB4MC # psu5Xa3wadEz/TidXYUjbVonT742t3W07ffabO9DVmf5k/99SY/053mwnd12tJUI # RzLuGyokJCF1HvEosbGok4vJz+mSMWCw9ibbYEA0jeuAgDf5chnLJ4eUTQ+YzxRx # sITlmolyu0Dijlga3JtRJUOhghNNMIITSQYKKwYBBAGCNwMDATGCEzkwghM1Bgkq # hkiG9w0BBwKgghMmMIITIgIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBPQYLKoZIhvcN # AQkQAQSgggEsBIIBKDCCASQCAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF # AAQgSxRHVjLrkodx9x3RsgiuYIWH0V5LMqe5tJ/9fDQQo1sCBlm6tVNPsRgTMjAx # NzA5MTUxOTU4MDQuMjkyWjAHAgEBgAIB9KCBuaSBtjCBszELMAkGA1UEBhMCVVMx # EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT # FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMe # bkNpcGhlciBEU0UgRVNOOkJCRUMtMzBDQS0yREJFMSUwIwYDVQQDExxNaWNyb3Nv # ZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIO0DCCBnEwggRZoAMCAQICCmEJgSoAAAAA # AAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo # aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y # cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1 # dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIxNDY1NVowfDEL # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWlj # cm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IB # DwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF++18aEssX8XD # 5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRDDNdNuDgIs0Ld # k6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSxz5NMksHEpl3R # YRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1rL2KQk1AUdEP # nAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16HgcsOmZzTznL0S6 # p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB4jAQBgkrBgEE # AYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqFbVUwGQYJKwYB # BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMB # Af8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBL # oEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv # TWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggr # BgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS # b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCBkjCBjwYJKwYB # BAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # UEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBn # AGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqG # SIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUxvs8F4qn++ldt # GTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GASinbMQEBBm9xc # F/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1L3mBZdmptWvk # x872ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWOM7tiX5rbV0Dp # 8c6ZZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4pm3S4Zz5Hfw4 # 2JT0xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45V3aicaoGig+J # FrphpxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x4QDf5zEHpJM6 # 92VHeOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEegPsbiSpUObJb # 2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKnQqLJzxlBTeCG # +SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp3lfB0d4wwP3M # 5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvTX4/edIhJEjCC # BNowggPCoAMCAQICEzMAAAChpf257qf8np0AAAAAAKEwDQYJKoZIhvcNAQELBQAw # fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd # TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMTYwOTA3MTc1NjQ4WhcN # MTgwOTA3MTc1NjQ4WjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 # b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNOOkJC # RUMtMzBDQS0yREJFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2 # aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm9ABeeYir3p8G3Ue # 87dn1h3ep94ANNgS+QfqCHsfTU3KhZR6q3ZrKgdFjVEn07ZdRqUlxmIUeYtPzOYs # 9eyfTXodNCI2KrjD4uzFUO3T/UPBLb/F8PrPzISQ66Kmsm1XoI+5YXDUSc6IL4Mu # O4FKk7VJSsRlyZaF5C/6rOLYVx0z9r4Q58JSGxPg+RQ2qLOb9NsV8PTSa30tuFXO # EelW/5TpIQ67kVfMnBV5cM2OrNPjgZmYww4H39tzxc8pY/U+7DcYenP2JHW1/Mk3 # lDBXB9WgQBVNCxaw5tU3XTzY06u8h5eHelVzS2FDwfMJiJK+zrjlhEo8FjecQc4g # l4HICQIDAQABo4IBGzCCARcwHQYDVR0OBBYEFKtcuYK+cSrVj+DosinP+hvTt/pI # MB8GA1UdIwQYMBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRPME0wS6BJ # oEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p # Y1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYB # BQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGlt # U3RhUENBXzIwMTAtMDctMDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI # KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBACNgTLgFVOlnyb45PBUywxPIswCQ # fxczm/12L11MErPosCSi/rL0H6iyji5OEAdc6Pc0iu40HejhRIb4HtvePRKUh8Ga # D0Pgm/oUYau26hLjqohq12V35Qdb0FBT0cVa1CgvKkpReR95OSp3x2HlI38qBdom # ntVAtuJf3DoTdOU6/ar7PwL8K/n4IFJbKMpdsiAo7h0e9IqEvBdS6rMScZosHRtO # DXjR25MNJF4XiElUIfzYXCbQ6RPhbMpOvwe4O/nhnC9GDGU6nEWwCadzTCxrttcW # Y+D8cjiZpgXNMpFBol76u9etDnuFy/MPdzt4MtNPlpEUSCPGipeXWB39pUGhggN5 # MIICYQIBATCB46GBuaSBtjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw # b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO # OkJCRUMtMzBDQS0yREJFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT # ZXJ2aWNloiUKAQEwCQYFKw4DAhoFAAMVAIKuifW05j8WXCC8F+TBw0DNOetooIHC # MIG/pIG8MIG5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMQ0w # CwYDVQQLEwRNT1BSMScwJQYDVQQLEx5uQ2lwaGVyIE5UUyBFU046NERFOS0wQzVF # LTNFMDkxKzApBgNVBAMTIk1pY3Jvc29mdCBUaW1lIFNvdXJjZSBNYXN0ZXIgQ2xv # Y2swDQYJKoZIhvcNAQEFBQACBQDdZnMGMCIYDzIwMTcwOTE1MTU0MDU0WhgPMjAx # NzA5MTYxNTQwNTRaMHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFAN1mcwYCAQAwCgIB # AAICGXACAf8wBwIBAAICF0cwCgIFAN1nxIYCAQAwNgYKKwYBBAGEWQoEAjEoMCYw # DAYKKwYBBAGEWQoDAaAKMAgCAQACAxbjYKEKMAgCAQACAwehIDANBgkqhkiG9w0B # AQUFAAOCAQEAPygKnE52j2mWDi0S30lMHTHjSAxBNnCQojY/rdi88jXs9rh0H84G # ae/QS3pXfq73SjiJe2xIPVkG3f9b+X4dCyV4i8OJJQYLRYgfhvIk9q367SKehRuH # xu9xQARW8gWQsqi8IpTV9isnH4fQbFLzNvPblXYscq+ovDP0/YyApNh6EZ3qFuO2 # aFacFDoYeTUnyhLG65QJET7fziak5gk5A6rAjhSdmcCyMRH2Hcf5i6xt4fq1tJrC # kSJ5M1AsLv+7r5hjFWYrPczIt1EuyhL4hazk/CiYEFz6YZvAhkDrmUd7JpRpjWki # 0ppoC6eCY5wj1W7MTMfQwSmjzBGpjRBv5TGCAvUwggLxAgEBMIGTMHwxCzAJBgNV # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m # dCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAAoaX9ue6n/J6dAAAAAAChMA0GCWCG # SAFlAwQCAQUAoIIBMjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZI # hvcNAQkEMSIEIEXgEkNHfv4GMXGcvW05wfDfg48YsguU0omMdbFUrWZJMIHiBgsq # hkiG9w0BCRACDDGB0jCBzzCBzDCBsQQUgq6J9bTmPxZcILwX5MHDQM0562gwgZgw # gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD # VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAKGl/bnup/ye # nQAAAAAAoTAWBBQMBglWDL+44/F/K5fV1xPwY8uPgDANBgkqhkiG9w0BAQsFAASC # AQBpE73+9fOzEy7A5li8+jIP6KiFpjXE0Pon9/m6otMvJ5H2rpheZaWvz1D1jhQN # gc6/mnSJDPgz4nFt03QpB71WLKPXHboG9KPvjFrBRHGVqMYxv9NhC62Khq7xWNHy # DsUwTzZdiduDnSy6e2C/Cl3STRlG1tAsJybUdEgttjvS6Yv+k7OwA026fExKDHMr # PVRP9aUQhbu3hRO+lDipdCNcmv26MnV9h0d46mYwMP/sGMj6ys+ysylYUVZyIWBw # mAJAU0tgjrH+mdVO2k0HTX3z4MVxqF5kQDHQvyw+kwPr2kQm4fHy3qYupeKBwYwN # /i39MkFsr+0OGYRWc1UWgSwg # SIG # End signature block |