Skip to content

Commit 35bc622

Browse files
committed
Merge pull request #184 from hungmai-msft/ignite-sql2-server-upgrade
Cmdlets Azure Sql Server Upgrade
2 parents 05268ae + 590015c commit 35bc622

22 files changed

+5387
-5
lines changed

src/ResourceManager/Sql/Commands.Sql.Test/Commands.Sql.Test.csproj

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll</HintPath>
6666
</Reference>
6767
<Reference Include="Microsoft.Azure.Management.Sql">
68-
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Sql.0.22.0-prerelease\lib\net40\Microsoft.Azure.Management.Sql.dll</HintPath>
68+
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Sql.0.23.0-prerelease\lib\net40\Microsoft.Azure.Management.Sql.dll</HintPath>
6969
</Reference>
7070
<Reference Include="Microsoft.Azure.ResourceManager, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
7171
<SpecificVersion>False</SpecificVersion>
@@ -161,12 +161,14 @@
161161
<Compile Include="ScenarioTests\ElasticPoolCrudTests.cs" />
162162
<Compile Include="ScenarioTests\SecurityTests.cs" />
163163
<Compile Include="ScenarioTests\ServerCrudTests.cs" />
164+
<Compile Include="ScenarioTests\ServerUpgradeTests.cs" />
164165
<Compile Include="ScenarioTests\SqlTestsBase.cs" />
165166
<Compile Include="UnitTests\AzureSqlCmdletBaseAttributeTests.cs" />
166167
<Compile Include="UnitTests\AzureSqlDatabaseAttributeTests.cs" />
167168
<Compile Include="UnitTests\AzureSqlDatabaseServerServiceObjectiveAttributeTests.cs" />
168169
<Compile Include="UnitTests\AzureSqlDatabaseServerFirewallRuleAttributeTests.cs" />
169170
<Compile Include="UnitTests\AzureSqlDatabaseServerAttributeTests.cs" />
171+
<Compile Include="UnitTests\AzureSqlServerUpgradeAttributeTests.cs" />
170172
<Compile Include="Utilities\UnitTestHelper.cs" />
171173
</ItemGroup>
172174
<ItemGroup>
@@ -218,6 +220,9 @@
218220
<None Include="ScenarioTests\Common.ps1">
219221
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
220222
</None>
223+
<None Include="ScenarioTests\ServerUpgradeTests.ps1">
224+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
225+
</None>
221226
<None Include="SessionRecords\Microsoft.Azure.Commands.ScenarioTest.SqlTests.DataMaskingTests\TestDatabaseDataMaskingBasicRuleLifecycle.json">
222227
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
223228
</None>
@@ -371,6 +376,15 @@
371376
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ServerCrudTests\TestServerUpdate.json">
372377
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
373378
</None>
379+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ServerUpgradeTests\TestServerUpgradeWithRecommendedDatabase.json">
380+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
381+
</None>
382+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ServerUpgradeTests\TestServerUpgradeAndCancel.json">
383+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
384+
</None>
385+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ServerUpgradeTests\TestServerUpgradeNegative.json">
386+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
387+
</None>
374388
<None Include="Templates\sql-audit-test-env-setup.json">
375389
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
376390
</None>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// ----------------------------------------------------------------------------------
2+
//
3+
// Copyright Microsoft Corporation
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
// ----------------------------------------------------------------------------------
14+
15+
using Microsoft.Azure.Commands.ScenarioTest.SqlTests;
16+
using Microsoft.WindowsAzure.Commands.ScenarioTest;
17+
using Xunit;
18+
19+
namespace Microsoft.Azure.Commands.Sql.Test.ScenarioTests
20+
{
21+
public class ServerUpgradeTests : SqlTestsBase
22+
{
23+
[Fact]
24+
[Trait(Category.Sql, Category.CheckIn)]
25+
public void TestServerUpgradeWithRecommendedDatabase()
26+
{
27+
RunPowerShellTest("Test-ServerUpgradeWithRecommendedDatabase");
28+
}
29+
30+
[Fact]
31+
[Trait(Category.Sql, Category.CheckIn)]
32+
public void TestServerUpgradeAndCancel()
33+
{
34+
RunPowerShellTest("Test-ServerUpgradeAndCancel");
35+
}
36+
37+
[Fact]
38+
[Trait(Category.Sql, Category.CheckIn)]
39+
public void TestServerUpgradeNegative()
40+
{
41+
RunPowerShellTest("Test-ServerUpgradeNegative");
42+
}
43+
}
44+
}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# ----------------------------------------------------------------------------------
2+
#
3+
# Copyright Microsoft Corporation
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
# ----------------------------------------------------------------------------------
14+
15+
<#
16+
.SYNOPSIS
17+
Tests upgrading a server with recommended database
18+
#>
19+
function Test-ServerUpgradeWithRecommendedDatabase
20+
{
21+
# Setup
22+
$server = Create-ServerForServerUpgradeTest
23+
24+
# Create a basic database
25+
$databaseName = Get-DatabaseName
26+
$database = New-AzureSqlDatabase -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName -Edition Basic -MaxSizeBytes 1GB
27+
Assert-AreEqual $database.DatabaseName $databaseName
28+
29+
try
30+
{
31+
$recommendedDatabase = New-Object -TypeName Microsoft.Azure.Management.Sql.Models.RecommendedDatabaseProperties
32+
$recommendedDatabase.Name = databaseName
33+
$recommendedDatabase.TargetEdition = "Standard"
34+
$recommendedDatabase.TargetServiceLevelObjective = "S0"
35+
36+
Start-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -ServerVersion 12.0 -ScheduleUpgradeAfterUtcDateTime ((Get-Date).AddMinutes(1).ToUniversalTime()) -DatabaseCollection ($recommendedDatabase)
37+
38+
while ($true)
39+
{
40+
$upgrade = Get-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName
41+
if ($upgrade.Status -eq "Completed")
42+
{
43+
# Upgrade is successful
44+
$server = Get-AzureSqlServer -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName
45+
Assert-AreEqual $server.ServerVersion "12.0"
46+
break
47+
}
48+
elseif ($upgrade.Status -eq "Stopped")
49+
{
50+
# Upgrade failed
51+
$server = Get-AzureSqlServer -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName
52+
Assert-AreEqual $server.ServerVersion "2.0"
53+
break
54+
}
55+
56+
Start-Sleep -Seconds 1
57+
}
58+
}
59+
finally
60+
{
61+
Remove-AzureResourceGroup -Name $server.ResourceGroupName -Force
62+
}
63+
}
64+
65+
<#
66+
.SYNOPSIS
67+
Tests upgrading a server and then cancel the upgrade
68+
#>
69+
function Test-ServerUpgradeAndCancel
70+
{
71+
# Setup
72+
$server = Create-ServerForServerUpgradeTest
73+
74+
try
75+
{
76+
Start-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -ServerVersion 12.0
77+
78+
$upgrade = Get-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName
79+
Assert-AreEqual $upgrade.Status "Queued"
80+
81+
Stop-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -Force
82+
83+
$upgrade = Get-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName
84+
Assert-AreEqual $upgrade.Status "Cancelling"
85+
86+
while ($true)
87+
{
88+
$upgrade = Get-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName
89+
if ($upgrade.Status -eq "Stopped")
90+
{
91+
break
92+
}
93+
94+
Start-Sleep -Seconds 1
95+
}
96+
97+
# Upgrade is cancelled
98+
$server = Get-AzureSqlServer -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName
99+
Assert-AreEqual $server.ServerVersion "2.0"
100+
}
101+
finally
102+
{
103+
Remove-AzureResourceGroup -Name $server.ResourceGroupName -Force
104+
}
105+
}
106+
107+
<#
108+
.SYNOPSIS
109+
Tests upgrading a server with invalid parameters
110+
#>
111+
function Test-ServerUpgradeNegative
112+
{
113+
# Setup
114+
$server = Create-ServerForServerUpgradeTest
115+
116+
# Create a basic database
117+
$databaseName = Get-DatabaseName
118+
$database = New-AzureSqlDatabase -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -DatabaseName $databaseName -Edition Basic -MaxSizeBytes 1GB
119+
Assert-AreEqual $database.DatabaseName $databaseName
120+
121+
try
122+
{
123+
Assert-Throws { Start-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName }
124+
Assert-Throws { Start-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -ServerVersion 13.0}
125+
Assert-Throws { Start-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -ScheduleUpgradeAfterUtcDateTime ((Get-Date).ToUniversalTime())}
126+
127+
$recommendedDatabase = New-Object -TypeName Microsoft.Azure.Management.Sql.Models.RecommendedDatabaseProperties
128+
$recommendedDatabase.Name = databaseName
129+
$recommendedDatabase.TargetEdition = "InvalidEdition"
130+
$recommendedDatabase.TargetServiceLevelObjective = "S0"
131+
Assert-Throws { Start-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -DatabaseCollection ($recommendedDatabase)}
132+
133+
$recommendedDatabase.TargetEdition = "Premium"
134+
$recommendedDatabase.TargetServiceLevelObjective = "S0"
135+
Assert-Throws { Start-AzureSqlServerUpgrade -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -DatabaseCollection ($recommendedDatabase)}
136+
}
137+
finally
138+
{
139+
Remove-AzureResourceGroup -Name $server.ResourceGroupName -Force
140+
}
141+
}
142+
143+
<#
144+
.SYNOPSIS
145+
Creates a resource group and server for server upgrade tests
146+
#>
147+
function Create-ServerForServerUpgradeTest()
148+
{
149+
$location = "West US"
150+
$rgName = Get-ResourceGroupName
151+
152+
$rg = New-AzureResourceGroup -Name $rgName -Location $location
153+
154+
$serverName = Get-ServerName
155+
$version = "2.0"
156+
$serverLogin = "testusername"
157+
$serverPassword = "t357ingP@s5w0rd!"
158+
$credentials = New-Object System.Management.Automation.PSCredential($serverLogin, ($serverPassword | ConvertTo-SecureString -asPlainText -Force))
159+
160+
$server = New-AzureSqlServer -ResourceGroupName $rgName -ServerName $serverName -Location $location -ServerVersion $version -SqlAdminCredentials $credentials
161+
return $server
162+
}

0 commit comments

Comments
 (0)