PageRenderTime 47ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Storage/Commands.Storage.ScenarioTest/Agent.cs

https://gitlab.com/jslee1/azure-powershell
C# | 298 lines | 176 code | 37 blank | 85 comment | 22 complexity | de75ea16d690c9a0f3aa3f5f7682d5f8 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;
  16. using System.Collections.Generic;
  17. using System.Collections.ObjectModel;
  18. using System.Linq;
  19. using Microsoft.WindowsAzure.Storage.Blob;
  20. using Microsoft.WindowsAzure.Storage.Queue;
  21. using Microsoft.WindowsAzure.Storage.Table;
  22. using MS.Test.Common.MsTestLib;
  23. namespace Commands.Storage.ScenarioTest
  24. {
  25. public abstract class Agent
  26. {
  27. /// <summary>
  28. /// output data returned after agent operation
  29. /// </summary>
  30. public Collection<Dictionary<string, object>> Output { get { return _Output; } }
  31. /// <summary>
  32. /// error messages returned after agent operation
  33. /// </summary>
  34. public Collection<string> ErrorMessages { get { return _ErrorMessages; } }
  35. public bool UseContextParam
  36. {
  37. set {_UseContextParam = value;}
  38. get {return _UseContextParam;}
  39. }
  40. /// <summary>
  41. /// Return true if succeed otherwise return false
  42. /// </summary>
  43. public abstract bool NewAzureStorageContainer(string ContainerName);
  44. /// <summary>
  45. /// Parameters:
  46. /// ContainerName:
  47. /// 1. Could be empty if no Container parameter specified
  48. /// 2. Could contain wildcards
  49. /// </summary>
  50. public abstract bool GetAzureStorageContainer(string ContainerName);
  51. public abstract bool GetAzureStorageContainerByPrefix(string Prefix);
  52. public abstract bool SetAzureStorageContainerACL(string ContainerName, BlobContainerPublicAccessType PublicAccess, bool PassThru = true);
  53. public abstract bool RemoveAzureStorageContainer(string ContainerName, bool Force = true);
  54. /// <summary>
  55. /// For pipeline, new/remove a list of container names
  56. /// </summary>
  57. public abstract bool NewAzureStorageContainer(string[] ContainerNames);
  58. public abstract bool RemoveAzureStorageContainer(string[] ContainerNames, bool Force = true);
  59. public abstract bool NewAzureStorageQueue(string QueueName);
  60. /// <summary>
  61. /// Parameters:
  62. /// ContainerName:
  63. /// 1. Could be empty if no Queue parameter specified
  64. /// 2. Could contain wildcards
  65. /// </summary>
  66. public abstract bool GetAzureStorageQueue(string QueueName);
  67. public abstract bool GetAzureStorageQueueByPrefix(string Prefix);
  68. public abstract bool RemoveAzureStorageQueue(string QueueName, bool Force = true);
  69. /// <summary>
  70. /// For pipeline, new/remove a list of queue names
  71. /// </summary>
  72. public abstract bool NewAzureStorageQueue(string[] QueueNames);
  73. public abstract bool RemoveAzureStorageQueue(string[] QueueNames, bool Force = true);
  74. /// <summary>
  75. /// Parameters:
  76. /// Block:
  77. /// true for BlockBlob, false for PageBlob
  78. /// ConcurrentCount:
  79. /// -1 means use the default value
  80. /// </summary>
  81. public abstract bool SetAzureStorageBlobContent(string FileName, string ContainerName, BlobType Type, string BlobName = "",
  82. bool Force = true, int ConcurrentCount = -1, Hashtable properties = null, Hashtable metadata = null);
  83. public abstract bool GetAzureStorageBlobContent(string Blob, string FileName, string ContainerName,
  84. bool Force = true, int ConcurrentCount = -1);
  85. public abstract bool GetAzureStorageBlob(string BlobName, string ContainerName);
  86. public abstract bool GetAzureStorageBlobByPrefix(string Prefix, string ContainerName);
  87. /// <summary>
  88. ///
  89. /// Remarks:
  90. /// currently there is no Force param, may add it later on
  91. /// </summary>
  92. public abstract bool RemoveAzureStorageBlob(string BlobName, string ContainerName, bool onlySnapshot = false, bool force = true);
  93. public abstract bool NewAzureStorageTable(string TableName);
  94. public abstract bool NewAzureStorageTable(string[] TableNames);
  95. public abstract bool GetAzureStorageTable(string TableName);
  96. public abstract bool GetAzureStorageTableByPrefix(string Prefix);
  97. public abstract bool RemoveAzureStorageTable(string TableName, bool Force = true);
  98. public abstract bool RemoveAzureStorageTable(string[] TableNames, bool Force = true);
  99. public abstract bool NewAzureStorageContext(string StorageAccountName, string StorageAccountKey, string endPoint = "");
  100. public abstract bool NewAzureStorageContext(string ConnectionString);
  101. public abstract bool StartAzureStorageBlobCopy(string sourceUri, string destContainerName, string destBlobName, object destContext, bool force = true);
  102. public abstract bool StartAzureStorageBlobCopy(string srcContainerName, string srcBlobName, string destContainerName, string destBlobName, object destContext = null, bool force = true);
  103. public abstract bool StartAzureStorageBlobCopy(ICloudBlob srcBlob, string destContainerName, string destBlobName, object destContext = null, bool force = true);
  104. public abstract bool GetAzureStorageBlobCopyState(string containerName, string blobName, bool waitForComplete);
  105. public abstract bool GetAzureStorageBlobCopyState(ICloudBlob blob, object context, bool waitForComplete);
  106. public abstract bool StopAzureStorageBlobCopy(string containerName, string blobName, string copyId, bool force);
  107. /// <summary>
  108. /// Compare the output collection data with comp
  109. ///
  110. /// Parameters:
  111. /// comp: comparsion data
  112. /// </summary>
  113. public void OutputValidation(Collection<Dictionary<string, object>> comp)
  114. {
  115. Test.Info("Validate Dictionary objects");
  116. Test.Assert(comp.Count == Output.Count, "Comparison size: {0} = {1} Output size", comp.Count, Output.Count);
  117. if (comp.Count != Output.Count)
  118. return;
  119. // first check whether Key exists and then check value if it's not null
  120. for (int i = 0; i < comp.Count; ++i)
  121. {
  122. foreach (string str in comp[i].Keys)
  123. {
  124. Test.Assert(Output[i].ContainsKey(str), "{0} should be in the ouput columns", str);
  125. switch(str)
  126. {
  127. case "Context":
  128. break;
  129. case "CloudTable":
  130. Test.Assert(Utility.CompareEntity((CloudTable)comp[i][str], (CloudTable)Output[i][str]),
  131. "CloudTable Column {0}: {1} = {2}", str, comp[i][str], Output[i][str]);
  132. break;
  133. case "CloudQueue":
  134. Test.Assert(Utility.CompareEntity((CloudQueue)comp[i][str], (CloudQueue)Output[i][str]),
  135. "CloudQueue Column {0}: {1} = {2}", str, comp[i][str], Output[i][str]);
  136. break;
  137. case "CloudBlobContainer":
  138. Test.Assert(Utility.CompareEntity((CloudBlobContainer)comp[i][str], (CloudBlobContainer)Output[i][str]),
  139. "CloudBlobContainer Column {0}: {1} = {2}", str, comp[i][str], Output[i][str]);
  140. break;
  141. case "ICloudBlob":
  142. Test.Assert(Utility.CompareEntity((ICloudBlob)comp[i][str], (ICloudBlob)Output[i][str]),
  143. "ICloudBlob Column {0}: {1} = {2}", str, comp[i][str], Output[i][str]);
  144. break;
  145. case "Permission":
  146. Test.Assert(Utility.CompareEntity((BlobContainerPermissions)comp[i][str], (BlobContainerPermissions)Output[i][str]),
  147. "Permission Column {0}: {1} = {2}", str, comp[i][str], Output[i][str]);
  148. break;
  149. default:
  150. if(comp[i][str] == null)
  151. {
  152. Test.Assert(Output[i][str] == null, "Column {0}: {1} = {2}", str, comp[i][str], Output[i][str]);
  153. }
  154. else
  155. {
  156. Test.Assert(comp[i][str].Equals(Output[i][str]), "Column {0}: {1} = {2}", str, comp[i][str], Output[i][str]);
  157. }
  158. break;
  159. }
  160. }
  161. }
  162. }
  163. /// <summary>
  164. /// Compare the output collection data with containers
  165. ///
  166. /// Parameters:
  167. /// containers: comparsion data
  168. /// </summary>
  169. public void OutputValidation(IEnumerable<CloudBlobContainer> containers)
  170. {
  171. Test.Info("Validate CloudBlobContainer objects");
  172. Test.Assert(containers.Count() == Output.Count, "Comparison size: {0} = {1} Output size", containers.Count(), Output.Count);
  173. if (containers.Count() != Output.Count)
  174. return;
  175. int count = 0;
  176. foreach (CloudBlobContainer container in containers)
  177. {
  178. container.FetchAttributes();
  179. Test.Assert(Utility.CompareEntity(container, (CloudBlobContainer)Output[count]["CloudBlobContainer"]), "container equality checking: {0}", container.Name);
  180. ++count;
  181. }
  182. }
  183. /// <summary>
  184. /// Compare the output collection data with container permissions
  185. /// </summary>
  186. /// <param name="containers">a list of cloudblobcontainer objects</param>
  187. public void OutputValidation(IEnumerable<BlobContainerPermissions> permissions)
  188. {
  189. Test.Info("Validate BlobContainerPermissions");
  190. Test.Assert(permissions.Count() == Output.Count, "Comparison size: {0} = {1} Output size", permissions.Count(), Output.Count);
  191. if (permissions.Count() != Output.Count)
  192. return;
  193. int count = 0;
  194. foreach (BlobContainerPermissions permission in permissions)
  195. {
  196. Test.Assert(Utility.CompareEntity(permission, (BlobContainerPermissions)Output[count]["Permission"]), "container permision equality checking ");
  197. ++count;
  198. }
  199. }
  200. /// <summary>
  201. /// Compare the output collection data with ICloudBlob
  202. /// </summary>
  203. /// <param name="containers">a list of cloudblobcontainer objects</param>
  204. public void OutputValidation(IEnumerable<ICloudBlob> blobs)
  205. {
  206. Test.Info("Validate ICloudBlob objects");
  207. Test.Assert(blobs.Count() == Output.Count, "Comparison size: {0} = {1} Output size", blobs.Count(), Output.Count);
  208. if (blobs.Count() != Output.Count)
  209. return;
  210. int count = 0;
  211. foreach (ICloudBlob blob in blobs)
  212. {
  213. Test.Assert(Utility.CompareEntity(blob, (ICloudBlob)Output[count]["ICloudBlob"]), string.Format("ICloudBlob equality checking for blob '{0}'", blob.Name));
  214. ++count;
  215. }
  216. }
  217. /// <summary>
  218. /// Compare the output collection data with queues
  219. ///
  220. /// Parameters:
  221. /// queues: comparsion data
  222. /// </summary>
  223. public void OutputValidation(IEnumerable<CloudQueue> queues)
  224. {
  225. Test.Info("Validate CloudQueue objects");
  226. Test.Assert(queues.Count() == Output.Count, "Comparison size: {0} = {1} Output size", queues.Count(), Output.Count);
  227. if (queues.Count() != Output.Count)
  228. return;
  229. int count = 0;
  230. foreach (CloudQueue queue in queues)
  231. {
  232. queue.FetchAttributes();
  233. Test.Assert(Utility.CompareEntity(queue, (CloudQueue)Output[count]["CloudQueue"]), "queue equality checking: {0}", queue.Name);
  234. ++count;
  235. }
  236. }
  237. /// <summary>
  238. /// Compare the output collection data with tables
  239. ///
  240. /// Parameters:
  241. /// tables: comparsion data
  242. /// </summary>
  243. public void OutputValidation(IEnumerable<CloudTable> tables)
  244. {
  245. Test.Info("Validate CloudTable objects");
  246. Test.Assert(tables.Count() == Output.Count, "Comparison size: {0} = {1} Output size", tables.Count(), Output.Count);
  247. if (tables.Count() != Output.Count)
  248. return;
  249. int count = 0;
  250. foreach (CloudTable table in tables)
  251. {
  252. Test.Assert(Utility.CompareEntity(table, (CloudTable)Output[count]["CloudTable"]), "table equality checking: {0}", table.Name);
  253. ++count;
  254. }
  255. }
  256. protected static Random _random = new Random((int)(DateTime.Now.Ticks)); // for generating random object names
  257. protected Collection<Dictionary<string, object>> _Output = new Collection<Dictionary<string, object>>();
  258. protected Collection<string> _ErrorMessages = new Collection<string>();
  259. protected bool _UseContextParam = true; // decide whether to specify the Context parameter
  260. }
  261. }