PageRenderTime 46ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/src/ServiceManagement/Sql/Commands.SqlDatabase.Test/UnitTests/Database/Cmdlet/GetRecoverableDatabaseTests.cs

https://gitlab.com/jslee1/azure-powershell
C# | 282 lines | 222 code | 41 blank | 19 comment | 0 complexity | 87a69dcc9553b572bfc417b7f469a561 MD5 | raw file
  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. using System;
  15. using System.Collections.ObjectModel;
  16. using System.Globalization;
  17. using System.Linq;
  18. using System.Management.Automation;
  19. using Microsoft.VisualStudio.TestTools.UnitTesting;
  20. using Microsoft.WindowsAzure.Commands.SqlDatabase.Test.UnitTests.MockServer;
  21. using Microsoft.WindowsAzure.Commands.SqlDatabase.Test.UnitTests.Server.Cmdlet;
  22. using Microsoft.WindowsAzure.Commands.SqlDatabase.Test.Utilities;
  23. using Microsoft.WindowsAzure.Commands.Test.Utilities.Common;
  24. using Microsoft.WindowsAzure.Commands.Utilities.Common;
  25. using Microsoft.WindowsAzure.Management.Sql.Models;
  26. using Microsoft.WindowsAzure.Commands.Common;
  27. namespace Microsoft.WindowsAzure.Commands.SqlDatabase.Test.UnitTests.Database.Cmdlet
  28. {
  29. [TestClass]
  30. public class GetRecoverableDatabaseTests : SMTestBase
  31. {
  32. private static System.Management.Automation.PowerShell powershell;
  33. private static string serverName;
  34. [ClassInitialize]
  35. public static void InitializeClass(TestContext context)
  36. {
  37. powershell = System.Management.Automation.PowerShell.Create();
  38. MockHttpServer.SetupCertificates();
  39. UnitTestHelper.SetupUnitTestSubscription(powershell);
  40. serverName = SqlDatabaseTestSettings.Instance.ServerName;
  41. powershell.Runspace.SessionStateProxy.SetVariable("serverName", serverName);
  42. }
  43. [TestCleanup]
  44. public void CleanupTest()
  45. {
  46. powershell.Streams.ClearStreams();
  47. // Save the mock session results
  48. MockServerHelper.SaveDefaultSessionCollection();
  49. }
  50. /// <summary>
  51. /// Test Get/Set/Remove a database using certificate authentication.
  52. /// </summary>
  53. [TestMethod]
  54. public void GetRecoverableDatabase()
  55. {
  56. var testSession = MockServerHelper.DefaultSessionCollection.GetSession(
  57. "UnitTest.GetRecoverableDatabase");
  58. ServerTestHelper.SetDefaultTestSessionSettings(testSession);
  59. testSession.RequestValidator =
  60. new Action<HttpMessage, HttpMessage.Request>(
  61. (expected, actual) =>
  62. {
  63. Assert.AreEqual(expected.RequestInfo.Method, actual.Method);
  64. Assert.IsTrue(
  65. actual.UserAgent.Contains(ApiConstants.UserAgentHeaderValue),
  66. "Missing proper UserAgent string.");
  67. });
  68. using (var exceptionManager = new AsyncExceptionManager())
  69. {
  70. Collection<PSObject> databases, database1, database2;
  71. using(new MockHttpServer(exceptionManager, MockHttpServer.DefaultHttpsServerPrefixUri, testSession))
  72. {
  73. databases = powershell.InvokeBatchScript(
  74. @"Get-AzureSqlRecoverableDatabase -ServerName $serverName");
  75. }
  76. Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!");
  77. Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!");
  78. powershell.Streams.ClearStreams();
  79. // Expecting testdb1, testdb2, possibly dropped databases from previous runs
  80. Assert.IsTrue(
  81. databases.Count >= 2,
  82. "Expecting at-least two RecoverableDatabase objects");
  83. Assert.IsTrue(
  84. databases[0].BaseObject is RecoverableDatabase,
  85. "Expecting a RecoverableDatabase object");
  86. Assert.IsInstanceOfType(
  87. databases[1].BaseObject, typeof(RecoverableDatabase),
  88. "Expecting a RecoverableDatabase object");
  89. var database1Object = (RecoverableDatabase)databases[0].BaseObject;
  90. var database2Object = (RecoverableDatabase)databases[1].BaseObject;
  91. using (new MockHttpServer(
  92. exceptionManager, MockHttpServer.DefaultHttpsServerPrefixUri, testSession))
  93. {
  94. database1 = powershell.InvokeBatchScript(
  95. @"Get-AzureSqlRecoverableDatabase " +
  96. @"-ServerName $serverName " +
  97. @"-DatabaseName " + database1Object.Name);
  98. database2 = powershell.InvokeBatchScript(
  99. @"Get-AzureSqlRecoverableDatabase " +
  100. @"-ServerName $serverName " +
  101. @"-DatabaseName " + database2Object.Name);
  102. }
  103. Assert.IsInstanceOfType(
  104. database1.Single().BaseObject, typeof(RecoverableDatabase),
  105. "Expecting a RecoverableDatabase object");
  106. var refreshedDatabase1Object = (RecoverableDatabase)database1.Single().BaseObject;
  107. Assert.AreEqual(
  108. database1Object.Name, refreshedDatabase1Object.Name,
  109. "Expected db name to be " + database1Object.Name);
  110. Assert.IsInstanceOfType(
  111. database2.Single().BaseObject, typeof(RecoverableDatabase),
  112. "Expecting a RecoverableDatabase object");
  113. var refreshedDatabase2Object = (RecoverableDatabase)database2.Single().BaseObject;
  114. Assert.AreEqual(
  115. database2Object.Name, refreshedDatabase2Object.Name,
  116. "Expected db name to be " + database2Object.Name);
  117. Assert.AreEqual(
  118. database2Object.Edition, refreshedDatabase2Object.Edition,
  119. "Expected edition to be " + database2Object.Edition);
  120. }
  121. }
  122. [TestMethod]
  123. public void GetRecoverableDatabaseByPipe()
  124. {
  125. var testSession = MockServerHelper.DefaultSessionCollection.GetSession(
  126. "UnitTest.GetRecoverableDatabaseByPipe");
  127. ServerTestHelper.SetDefaultTestSessionSettings(testSession);
  128. testSession.RequestValidator =
  129. new Action<HttpMessage, HttpMessage.Request>(
  130. (expected, actual) =>
  131. {
  132. Assert.AreEqual(expected.RequestInfo.Method, actual.Method);
  133. Assert.IsTrue(
  134. actual.UserAgent.Contains(ApiConstants.UserAgentHeaderValue),
  135. "Missing proper UserAgent string.");
  136. });
  137. using (var exceptionManager = new AsyncExceptionManager())
  138. {
  139. Collection<PSObject> databases, database1, database2;
  140. using (new MockHttpServer(
  141. exceptionManager, MockHttpServer.DefaultHttpsServerPrefixUri, testSession))
  142. {
  143. databases = powershell.InvokeBatchScript(
  144. @"Get-AzureSqlRecoverableDatabase " +
  145. @"-ServerName $serverName");
  146. }
  147. Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!");
  148. Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!");
  149. powershell.Streams.ClearStreams();
  150. // Expecting testdb1, testdb2, possibly dropped databases from previous runs
  151. Assert.IsTrue(
  152. databases.Count >= 2,
  153. "Expecting at-least two RecoverableDatabase objects");
  154. Assert.IsInstanceOfType(
  155. databases[0].BaseObject, typeof(RecoverableDatabase),
  156. "Expecting a RecoverableDatabase object");
  157. Assert.IsInstanceOfType(
  158. databases[1].BaseObject, typeof(RecoverableDatabase),
  159. "Expecting a RecoverableDatabase object");
  160. var database1Object = (RecoverableDatabase)databases[0].BaseObject;
  161. var database2Object = (RecoverableDatabase)databases[1].BaseObject;
  162. using (new MockHttpServer(
  163. exceptionManager, MockHttpServer.DefaultHttpsServerPrefixUri, testSession))
  164. {
  165. powershell.InvokeBatchScript(
  166. @"$testdb1 = Get-AzureSqlRecoverableDatabase " +
  167. @"-ServerName $serverName " +
  168. @"-DatabaseName " + database1Object.Name);
  169. powershell.InvokeBatchScript(
  170. @"$testdb2 = Get-AzureSqlRecoverableDatabase " +
  171. @"-ServerName $serverName " +
  172. @"-DatabaseName " + database2Object.Name);
  173. database1 = powershell.InvokeBatchScript(
  174. @"$testdb1 | Get-AzureSqlRecoverableDatabase");
  175. database2 = powershell.InvokeBatchScript(
  176. @"$testdb2 | Get-AzureSqlRecoverableDatabase");
  177. }
  178. Assert.IsInstanceOfType(
  179. database1.Single().BaseObject, typeof(RecoverableDatabase),
  180. "Expecting a RecoverableDatabase object");
  181. var refreshedDatabase1Object = (RecoverableDatabase)database1.Single().BaseObject;
  182. Assert.AreEqual(
  183. database1Object.Name, refreshedDatabase1Object.Name,
  184. "Expected db name to be " + database1Object.Name);
  185. Assert.IsInstanceOfType(
  186. database2.Single().BaseObject, typeof(RecoverableDatabase),
  187. "Expecting a RecoverableDatabase object");
  188. var refreshedDatabase2Object = (RecoverableDatabase)database2.Single().BaseObject;
  189. Assert.AreEqual(
  190. database2Object.Name, refreshedDatabase2Object.Name,
  191. "Expected db name to be " + database2Object.Name);
  192. Assert.AreEqual(
  193. database2Object.Edition, refreshedDatabase2Object.Edition,
  194. "Expected edition to be " + database2Object.Edition);
  195. }
  196. }
  197. [TestMethod]
  198. public void GetRecoverableDatabaseNonExistentDb()
  199. {
  200. var testSession = MockServerHelper.DefaultSessionCollection.GetSession(
  201. "UnitTest.GetRecoverableDatabaseNonExistentDb");
  202. ServerTestHelper.SetDefaultTestSessionSettings(testSession);
  203. testSession.RequestValidator =
  204. new Action<HttpMessage, HttpMessage.Request>(
  205. (expected, actual) =>
  206. {
  207. Assert.AreEqual(expected.RequestInfo.Method, actual.Method);
  208. Assert.IsTrue(
  209. actual.UserAgent.Contains(ApiConstants.UserAgentHeaderValue),
  210. "Missing proper UserAgent string.");
  211. });
  212. using (var exceptionManager = new AsyncExceptionManager())
  213. {
  214. using (new MockHttpServer(
  215. exceptionManager, MockHttpServer.DefaultHttpsServerPrefixUri, testSession))
  216. {
  217. powershell.InvokeBatchScript(
  218. @"Get-AzureSqlRecoverableDatabase " +
  219. @"-ServerName $serverName " +
  220. @"-DatabaseName testdbnonexistent");
  221. }
  222. Assert.AreEqual(
  223. 1, powershell.Streams.Error.Count,
  224. "Expecting errors");
  225. Assert.AreEqual(
  226. 1, powershell.Streams.Warning.Count,
  227. "Expecting tracing IDs");
  228. Assert.AreEqual(
  229. string.Format(
  230. CultureInfo.InvariantCulture,
  231. "Resource with the name '{0}' does not exist. To continue, specify a valid resource name.",
  232. "testdbnonexistent"),
  233. powershell.Streams.Error.First().Exception.Message,
  234. "Unexpected error message");
  235. Assert.IsTrue(
  236. powershell.Streams.Warning[0].Message.StartsWith("Request Id"),
  237. "Expecting Client Request Id");
  238. }
  239. }
  240. }
  241. }