PageRenderTime 36ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/ResourceManager/HDInsight/Commands.HDInsight.Test/UnitTests/ScriptActionTests.cs

https://gitlab.com/jslee1/azure-powershell
C# | 394 lines | 339 code | 42 blank | 13 comment | 33 complexity | df2be5f26ccd171311ebe0c0bec01b69 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 Microsoft.Azure.Commands.HDInsight.Models.Management;
  15. using Microsoft.Azure.Management.HDInsight.Models;
  16. using Microsoft.WindowsAzure.Commands.ScenarioTest;
  17. using Moq;
  18. using System;
  19. using System.Collections.Generic;
  20. using System.Linq;
  21. using System.Net;
  22. using Xunit;
  23. namespace Microsoft.Azure.Commands.HDInsight.Test
  24. {
  25. public class ScriptActionTests : HDInsightTestBase
  26. {
  27. private RuntimeScriptActionDetail scriptActionDetail;
  28. private RuntimeScriptActionDetail scriptActionDetailWithApplicationName;
  29. public ScriptActionTests(Xunit.Abstractions.ITestOutputHelper output)
  30. {
  31. ServiceManagemenet.Common.Models.XunitTracingInterceptor.AddToContext(new ServiceManagemenet.Common.Models.XunitTracingInterceptor(output));
  32. base.SetupTestsForManagement();
  33. scriptActionDetail = new RuntimeScriptActionDetail
  34. {
  35. ApplicationName = "AppName",
  36. DebugInformation = "DebugInfo",
  37. EndTime = new DateTime(2016, 1, 1),
  38. ExecutionSummary =
  39. new List<Microsoft.Azure.Management.HDInsight.Models.ScriptActionExecutionSummary>
  40. {
  41. new Microsoft.Azure.Management.HDInsight.Models.ScriptActionExecutionSummary
  42. {
  43. Status = "Succeeded",
  44. InstanceCount = 4
  45. }
  46. },
  47. Name = "ScriptName",
  48. Operation = "PostCreation",
  49. Parameters = "Parameters",
  50. Roles = new List<string> { "HeadNode", "WorkerNode" },
  51. ScriptExecutionId = DateTime.UtcNow.Ticks,
  52. StartTime = new DateTime(2016, 1, 2),
  53. Status = "Succeeded",
  54. Uri = new Uri("http://bing.com")
  55. };
  56. scriptActionDetailWithApplicationName = new RuntimeScriptActionDetail
  57. {
  58. ApplicationName = "AppName",
  59. DebugInformation = "DebugInfo",
  60. EndTime = new DateTime(2016, 1, 1),
  61. ExecutionSummary =
  62. new List<Microsoft.Azure.Management.HDInsight.Models.ScriptActionExecutionSummary>
  63. {
  64. new Microsoft.Azure.Management.HDInsight.Models.ScriptActionExecutionSummary
  65. {
  66. Status = "Succeeded",
  67. InstanceCount = 1
  68. }
  69. },
  70. Name = "ScriptNameWithApp",
  71. Operation = "PostCreation",
  72. Parameters = "Parameters",
  73. Roles = new List<string> { "EdgeNode" },
  74. ScriptExecutionId = DateTime.UtcNow.Ticks,
  75. StartTime = new DateTime(2016, 1, 2),
  76. Status = "Succeeded",
  77. Uri = new Uri("http://bing.com")
  78. };
  79. }
  80. [Fact]
  81. [Trait(Category.AcceptanceType, Category.CheckIn)]
  82. public void SubmitScriptAction()
  83. {
  84. var submitCmdlet = new SubmitAzureHDInsightScriptActionCommand
  85. {
  86. CommandRuntime = commandRuntimeMock.Object,
  87. HDInsightManagementClient = hdinsightManagementMock.Object,
  88. ClusterName = ClusterName,
  89. ResourceGroupName = ResourceGroupName,
  90. Name = scriptActionDetail.Name,
  91. Uri = scriptActionDetail.Uri,
  92. Parameters = scriptActionDetail.Parameters,
  93. NodeTypes = scriptActionDetail.Roles.Select(r => (RuntimeScriptActionClusterNodeType)Enum.Parse(typeof(RuntimeScriptActionClusterNodeType), r, true)).ToArray(),
  94. PersistOnSuccess = true
  95. };
  96. hdinsightManagementMock.Setup(c => c.ExecuteScriptActions(ResourceGroupName, ClusterName,
  97. It.Is<ExecuteScriptActionParameters>(param => CompareScriptActions(param.ScriptActions.First(), scriptActionDetail) && param.PersistOnSuccess == true)))
  98. .Returns(new OperationResource
  99. {
  100. ErrorInfo = null,
  101. StatusCode = HttpStatusCode.OK,
  102. State = AsyncOperationState.Succeeded
  103. })
  104. .Verifiable();
  105. submitCmdlet.ExecuteCmdlet();
  106. commandRuntimeMock.VerifyAll();
  107. commandRuntimeMock.Verify(f => f.WriteObject(
  108. It.Is<AzureHDInsightRuntimeScriptActionOperationResource>(
  109. scriptOperationResource =>
  110. CompareScriptActions(scriptOperationResource, new AzureHDInsightRuntimeScriptAction(scriptActionDetail)) &&
  111. scriptOperationResource.OperationState == AsyncOperationState.Succeeded.ToString())));
  112. hdinsightManagementMock.VerifyAll();
  113. hdinsightManagementMock.Verify(c => c.ExecuteScriptActions(ResourceGroupName, ClusterName, It.IsAny<ExecuteScriptActionParameters>()),
  114. Times.Once);
  115. }
  116. [Fact]
  117. [Trait(Category.AcceptanceType, Category.CheckIn)]
  118. public void SubmitScriptActionOnEdgeNode()
  119. {
  120. var submitCmdlet = new SubmitAzureHDInsightScriptActionCommand
  121. {
  122. CommandRuntime = commandRuntimeMock.Object,
  123. HDInsightManagementClient = hdinsightManagementMock.Object,
  124. ClusterName = ClusterName,
  125. ResourceGroupName = ResourceGroupName,
  126. Name = scriptActionDetailWithApplicationName.Name,
  127. Uri = scriptActionDetailWithApplicationName.Uri,
  128. Parameters = scriptActionDetailWithApplicationName.Parameters,
  129. ApplicationName = scriptActionDetailWithApplicationName.ApplicationName,
  130. NodeTypes = scriptActionDetailWithApplicationName.Roles.Select(r => (RuntimeScriptActionClusterNodeType)Enum.Parse(typeof(RuntimeScriptActionClusterNodeType), r, true)).ToArray(),
  131. PersistOnSuccess = false
  132. };
  133. hdinsightManagementMock.Setup(c => c.ExecuteScriptActions(ResourceGroupName, ClusterName,
  134. It.Is<ExecuteScriptActionParameters>(param => CompareScriptActions(param.ScriptActions.First(), scriptActionDetailWithApplicationName) && param.PersistOnSuccess == false)))
  135. .Returns(new OperationResource
  136. {
  137. ErrorInfo = null,
  138. StatusCode = HttpStatusCode.OK,
  139. State = AsyncOperationState.Succeeded
  140. })
  141. .Verifiable();
  142. submitCmdlet.ExecuteCmdlet();
  143. commandRuntimeMock.VerifyAll();
  144. commandRuntimeMock.Verify(f => f.WriteObject(
  145. It.Is<AzureHDInsightRuntimeScriptActionOperationResource>(
  146. scriptOperationResource =>
  147. CompareScriptActions(scriptOperationResource, new AzureHDInsightRuntimeScriptAction(scriptActionDetailWithApplicationName)) &&
  148. scriptOperationResource.OperationState == AsyncOperationState.Succeeded.ToString())));
  149. hdinsightManagementMock.VerifyAll();
  150. hdinsightManagementMock.Verify(c => c.ExecuteScriptActions(ResourceGroupName, ClusterName, It.IsAny<ExecuteScriptActionParameters>()),
  151. Times.Once);
  152. }
  153. [Fact]
  154. [Trait(Category.AcceptanceType, Category.CheckIn)]
  155. public void RemoveScriptAction()
  156. {
  157. var demoteCmdlet = new RemoveAzureHDInsightPersistedScriptActionCommand
  158. {
  159. CommandRuntime = commandRuntimeMock.Object,
  160. HDInsightManagementClient = hdinsightManagementMock.Object,
  161. ClusterName = ClusterName,
  162. ResourceGroupName = ResourceGroupName,
  163. Name = scriptActionDetail.Name
  164. };
  165. hdinsightManagementMock.Setup(c => c.DeletePersistedScript(ResourceGroupName, ClusterName, scriptActionDetail.Name))
  166. .Returns(new OperationResource
  167. {
  168. ErrorInfo = null,
  169. StatusCode = HttpStatusCode.OK,
  170. State = AsyncOperationState.Succeeded
  171. })
  172. .Verifiable();
  173. demoteCmdlet.ExecuteCmdlet();
  174. commandRuntimeMock.VerifyAll();
  175. hdinsightManagementMock.VerifyAll();
  176. hdinsightManagementMock.Verify(c => c.DeletePersistedScript(ResourceGroupName, ClusterName, scriptActionDetail.Name),
  177. Times.Once);
  178. }
  179. [Fact]
  180. [Trait(Category.AcceptanceType, Category.CheckIn)]
  181. public void PromoteScriptAction()
  182. {
  183. var promoteCmdlet = new SetAzureHDInsightPersistedScriptActionCommand
  184. {
  185. CommandRuntime = commandRuntimeMock.Object,
  186. HDInsightManagementClient = hdinsightManagementMock.Object,
  187. ClusterName = ClusterName,
  188. ResourceGroupName = ResourceGroupName,
  189. ScriptExecutionId = scriptActionDetail.ScriptExecutionId
  190. };
  191. hdinsightManagementMock.Setup(c => c.PromoteScript(ResourceGroupName, ClusterName, scriptActionDetail.ScriptExecutionId))
  192. .Returns(new OperationResource
  193. {
  194. ErrorInfo = null,
  195. StatusCode = HttpStatusCode.OK,
  196. State = AsyncOperationState.Succeeded
  197. })
  198. .Verifiable();
  199. promoteCmdlet.ExecuteCmdlet();
  200. commandRuntimeMock.VerifyAll();
  201. hdinsightManagementMock.VerifyAll();
  202. hdinsightManagementMock.Verify(c => c.PromoteScript(ResourceGroupName, ClusterName, scriptActionDetail.ScriptExecutionId),
  203. Times.Once);
  204. }
  205. [Fact]
  206. [Trait(Category.AcceptanceType, Category.CheckIn)]
  207. public void GetPersistedScriptActions()
  208. {
  209. var persistedScripts = new List<RuntimeScriptAction> { scriptActionDetail };
  210. var getCmdlet = new GetAzureHDInsightPersistedScriptAction
  211. {
  212. CommandRuntime = commandRuntimeMock.Object,
  213. HDInsightManagementClient = hdinsightManagementMock.Object,
  214. ClusterName = ClusterName,
  215. ResourceGroupName = ResourceGroupName
  216. };
  217. hdinsightManagementMock.Setup(c => c.ListPersistedScripts(ResourceGroupName, ClusterName))
  218. .Returns(new ClusterListPersistedScriptActionsResponse
  219. {
  220. PersistedScriptActions = persistedScripts,
  221. StatusCode = HttpStatusCode.OK,
  222. RequestId = null
  223. })
  224. .Verifiable();
  225. getCmdlet.ExecuteCmdlet();
  226. commandRuntimeMock.VerifyAll();
  227. commandRuntimeMock.Verify(f => f.WriteObject(
  228. It.Is<IList<AzureHDInsightRuntimeScriptAction>>(
  229. scripts =>
  230. CompareScriptActions(scripts.Single(), new AzureHDInsightRuntimeScriptAction(scriptActionDetail))), true));
  231. hdinsightManagementMock.VerifyAll();
  232. hdinsightManagementMock.Verify(c => c.ListPersistedScripts(ResourceGroupName, ClusterName),
  233. Times.Once);
  234. }
  235. [Fact]
  236. [Trait(Category.AcceptanceType, Category.CheckIn)]
  237. public void GetPersistedScriptAction()
  238. {
  239. var persistedScripts = new List<RuntimeScriptAction> { scriptActionDetail };
  240. var getCmdlet = new GetAzureHDInsightPersistedScriptAction
  241. {
  242. CommandRuntime = commandRuntimeMock.Object,
  243. HDInsightManagementClient = hdinsightManagementMock.Object,
  244. ClusterName = ClusterName,
  245. Name = scriptActionDetail.Name,
  246. ResourceGroupName = ResourceGroupName
  247. };
  248. hdinsightManagementMock.Setup(c => c.ListPersistedScripts(ResourceGroupName, ClusterName))
  249. .Returns(new ClusterListPersistedScriptActionsResponse
  250. {
  251. PersistedScriptActions = persistedScripts,
  252. StatusCode = HttpStatusCode.OK,
  253. RequestId = null
  254. })
  255. .Verifiable();
  256. getCmdlet.ExecuteCmdlet();
  257. commandRuntimeMock.VerifyAll();
  258. commandRuntimeMock.Verify(f => f.WriteObject(
  259. It.Is<IList<AzureHDInsightRuntimeScriptAction>>(
  260. scripts =>
  261. CompareScriptActions(scripts.Single(), new AzureHDInsightRuntimeScriptAction(scriptActionDetail))), true));
  262. hdinsightManagementMock.VerifyAll();
  263. hdinsightManagementMock.Verify(c => c.ListPersistedScripts(ResourceGroupName, ClusterName),
  264. Times.Once);
  265. }
  266. [Fact]
  267. [Trait(Category.AcceptanceType, Category.CheckIn)]
  268. public void GetHistory()
  269. {
  270. var history = new List<RuntimeScriptActionDetail> { scriptActionDetail };
  271. var getCmdlet = new GetAzureHDInsightScriptActionHistory
  272. {
  273. CommandRuntime = commandRuntimeMock.Object,
  274. HDInsightManagementClient = hdinsightManagementMock.Object,
  275. ClusterName = ClusterName,
  276. ResourceGroupName = ResourceGroupName
  277. };
  278. hdinsightManagementMock.Setup(c => c.ListScriptExecutionHistory(ResourceGroupName, ClusterName))
  279. .Returns(new ClusterListRuntimeScriptActionDetailResponse
  280. {
  281. RuntimeScriptActionDetail = history,
  282. StatusCode = HttpStatusCode.OK,
  283. RequestId = null
  284. })
  285. .Verifiable();
  286. getCmdlet.ExecuteCmdlet();
  287. commandRuntimeMock.VerifyAll();
  288. commandRuntimeMock.Verify(f => f.WriteObject(
  289. It.Is<IList<AzureHDInsightRuntimeScriptActionDetail>>(
  290. scripts =>
  291. CompareScriptActionDetails(scripts.Single(), new AzureHDInsightRuntimeScriptActionDetail(scriptActionDetail))), true));
  292. hdinsightManagementMock.VerifyAll();
  293. hdinsightManagementMock.Verify(c => c.ListScriptExecutionHistory(ResourceGroupName, ClusterName),
  294. Times.Once);
  295. }
  296. [Fact]
  297. [Trait(Category.AcceptanceType, Category.CheckIn)]
  298. public void GetScriptExecutionDetail()
  299. {
  300. var getCmdlet = new GetAzureHDInsightScriptActionHistory
  301. {
  302. CommandRuntime = commandRuntimeMock.Object,
  303. HDInsightManagementClient = hdinsightManagementMock.Object,
  304. ClusterName = ClusterName,
  305. ResourceGroupName = ResourceGroupName,
  306. ScriptExecutionId = scriptActionDetail.ScriptExecutionId
  307. };
  308. hdinsightManagementMock.Setup(c => c.GetScriptExecutionDetail(ResourceGroupName, ClusterName, scriptActionDetail.ScriptExecutionId))
  309. .Returns(new ClusterRuntimeScriptActionDetailResponse
  310. {
  311. RuntimeScriptActionDetail = scriptActionDetail,
  312. StatusCode = HttpStatusCode.OK,
  313. RequestId = null
  314. })
  315. .Verifiable();
  316. getCmdlet.ExecuteCmdlet();
  317. commandRuntimeMock.VerifyAll();
  318. commandRuntimeMock.Verify(f => f.WriteObject(
  319. It.Is<IList<AzureHDInsightRuntimeScriptActionDetail>>(
  320. scripts =>
  321. CompareScriptActionDetails(scripts.Single(), new AzureHDInsightRuntimeScriptActionDetail(scriptActionDetail))), true));
  322. hdinsightManagementMock.VerifyAll();
  323. hdinsightManagementMock.Verify(c => c.GetScriptExecutionDetail(ResourceGroupName, ClusterName, scriptActionDetail.ScriptExecutionId),
  324. Times.Once);
  325. }
  326. private static bool CompareScriptActions(RuntimeScriptAction scriptA, RuntimeScriptAction scriptB)
  327. {
  328. return CompareScriptActions(new AzureHDInsightRuntimeScriptAction(scriptA), new AzureHDInsightRuntimeScriptAction(scriptB));
  329. }
  330. private static bool CompareScriptActions(AzureHDInsightRuntimeScriptAction scriptA, AzureHDInsightRuntimeScriptAction scriptB)
  331. {
  332. return scriptA.Name == scriptB.Name
  333. && scriptA.Parameters == scriptB.Parameters
  334. && scriptA.NodeTypes.Count() == scriptB.NodeTypes.Count()
  335. && scriptA.NodeTypes.Zip(scriptB.NodeTypes, (nodeA, nodeB) => nodeA == nodeB).All(x => x)
  336. && scriptA.Uri == scriptB.Uri;
  337. }
  338. private static bool CompareScriptActionDetails(AzureHDInsightRuntimeScriptActionDetail scriptA, AzureHDInsightRuntimeScriptActionDetail scriptB)
  339. {
  340. if (!CompareScriptActions(scriptA, scriptB)) { return false; }
  341. return scriptA.ApplicationName == scriptB.ApplicationName
  342. && scriptA.DebugInformation == scriptB.DebugInformation
  343. && scriptA.EndTime == scriptB.EndTime
  344. && scriptA.ExecutionSummary.Count == scriptB.ExecutionSummary.Count
  345. && scriptA.ExecutionSummary.Zip(scriptB.ExecutionSummary, (summaryA, summaryB) => summaryA == summaryB).All(x => x)
  346. && scriptA.Operation == scriptB.Operation
  347. && scriptA.ScriptExecutionId == scriptB.ScriptExecutionId
  348. && scriptA.StartTime == scriptB.StartTime
  349. && scriptA.Status == scriptB.Status;
  350. }
  351. }
  352. }