PageRenderTime 49ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/redistributable/openstack.net/src/testing/unit/Compute/v2_1/ImageTests.cs

https://gitlab.com/rekby-archive/onlyoffice-CommunityServer
C# | 346 lines | 292 code | 54 blank | 0 comment | 0 complexity | d07809efa696c41e2a860f79ffeb8cb7 MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using System.Net;
  4. using OpenStack.Compute.v2_1.Serialization;
  5. using OpenStack.Images.v2;
  6. using OpenStack.Serialization;
  7. using OpenStack.Synchronous;
  8. using OpenStack.Testing;
  9. using Xunit;
  10. namespace OpenStack.Compute.v2_1
  11. {
  12. public class ImageTests
  13. {
  14. private readonly ComputeService _compute;
  15. public ImageTests()
  16. {
  17. _compute = new ComputeService(Stubs.AuthenticationProvider, "region");
  18. }
  19. [Fact]
  20. public void GetImage()
  21. {
  22. using (var httpTest = new HttpTest())
  23. {
  24. Identifier imageId = "1";
  25. httpTest.RespondWithJson(new Image { Id = imageId });
  26. var result = _compute.GetImage(imageId);
  27. httpTest.ShouldHaveCalled($"*/images/{imageId}");
  28. Assert.NotNull(result);
  29. Assert.Equal(imageId, result.Id);
  30. Assert.IsType<ComputeApi>(((IServiceResource)result).Owner);
  31. }
  32. }
  33. [Fact]
  34. public void GetImageMetadata()
  35. {
  36. using (var httpTest = new HttpTest())
  37. {
  38. Identifier imageId = "1";
  39. httpTest.RespondWithJson(new ImageSummaryCollection { new ImageSummary { Id = imageId } });
  40. httpTest.RespondWithJson(new ImageMetadata { ["stuff"] = "things" });
  41. var imageReferences = _compute.ListImageSummaries();
  42. ImageMetadata result = imageReferences.First().GetMetadata();
  43. httpTest.ShouldHaveCalled($"*/images/{imageId}/metadata");
  44. Assert.NotNull(result);
  45. Assert.Single(result);
  46. Assert.True(result.ContainsKey("stuff"));
  47. Assert.IsType<ComputeApi>(((IServiceResource)result).Owner);
  48. }
  49. }
  50. [Fact]
  51. public void GetImageMetadataItem()
  52. {
  53. using (var httpTest = new HttpTest())
  54. {
  55. Identifier imageId = "1";
  56. httpTest.RespondWithJson(new ImageSummaryCollection { new ImageSummary { Id = imageId } });
  57. httpTest.RespondWithJson(new
  58. {
  59. meta = new
  60. {
  61. stuff = "things"
  62. }
  63. });
  64. var imageReferences = _compute.ListImageSummaries();
  65. string result = imageReferences.First().GetMetadataItem("stuff");
  66. httpTest.ShouldHaveCalled($"*/images/{imageId}/metadata");
  67. Assert.NotNull(result);
  68. Assert.Equal("things", result);
  69. }
  70. }
  71. [Fact]
  72. public void GetImageExtension()
  73. {
  74. using (var httpTest = new HttpTest())
  75. {
  76. Identifier imageId = Guid.NewGuid();
  77. httpTest.RespondWithJson(new ImageSummaryCollection
  78. {
  79. new ImageSummary {Id = imageId}
  80. });
  81. httpTest.RespondWithJson(new Image { Id = imageId });
  82. var results = _compute.ListImageSummaries();
  83. var flavorRef = results.First();
  84. var result = flavorRef.GetImage();
  85. Assert.NotNull(result);
  86. Assert.Equal(imageId, result.Id);
  87. }
  88. }
  89. [Fact]
  90. public void WaitForImageActive()
  91. {
  92. using (var httpTest = new HttpTest())
  93. {
  94. Identifier imageId = Guid.NewGuid();
  95. httpTest.RespondWithJson(new Image { Id = imageId, Status = ImageStatus.Unknown });
  96. httpTest.RespondWithJson(new Image { Id = imageId, Status = ImageStatus.Saving });
  97. httpTest.RespondWithJson(new Image { Id = imageId, Status = ImageStatus.Active });
  98. var result = _compute.GetImage(imageId);
  99. result.WaitUntilActive();
  100. httpTest.ShouldHaveCalled($"*/images/{imageId}");
  101. Assert.NotNull(result);
  102. Assert.Equal(imageId, result.Id);
  103. Assert.Equal(ImageStatus.Active, result.Status);
  104. Assert.IsType<ComputeApi>(((IServiceResource)result).Owner);
  105. }
  106. }
  107. [Fact]
  108. public void CreateImageMetadata()
  109. {
  110. using (var httpTest = new HttpTest())
  111. {
  112. const string key = "stuff";
  113. Identifier imageId = "1";
  114. httpTest.RespondWithJson(new Image { Id = imageId });
  115. var image = _compute.GetImage(imageId);
  116. image.Metadata.Create(key, "things");
  117. Assert.True(image.Metadata.ContainsKey(key));
  118. httpTest.ShouldHaveCalled($"*/images/{imageId}/metadata/{key}");
  119. }
  120. }
  121. [Fact]
  122. public void ListImages()
  123. {
  124. using (var httpTest = new HttpTest())
  125. {
  126. Identifier imageId = Guid.NewGuid();
  127. httpTest.RespondWithJson(new ImageSummaryCollection
  128. {
  129. Items = { new ImageSummary { Id = imageId } },
  130. Links = { new PageLink("next", "http://api.com/next") }
  131. });
  132. var results = _compute.ListImageSummaries();
  133. httpTest.ShouldHaveCalled("*/images");
  134. Assert.Single(results);
  135. var result = results.First();
  136. Assert.Equal(imageId, result.Id);
  137. Assert.IsType<ComputeApi>(((IServiceResource)result).Owner);
  138. }
  139. }
  140. [Fact]
  141. public void ListImagesWithFilter()
  142. {
  143. using (var httpTest = new HttpTest())
  144. {
  145. httpTest.RespondWithJson(new ImageCollection());
  146. const string name = "foo";
  147. const int minRam = 2;
  148. const int minDisk = 1;
  149. Identifier serverId = Guid.NewGuid();
  150. var lastModified = DateTimeOffset.Now.AddDays(-1);
  151. var imageType = ImageType.Snapshot;
  152. _compute.ListImageSummaries(new ImageListOptions { Name = name, ServerId = serverId, UpdatedAfter = lastModified, MininumDiskSize = minDisk, MininumMemorySize = minRam, Type = imageType});
  153. httpTest.ShouldHaveCalled($"*name={name}");
  154. httpTest.ShouldHaveCalled($"*server={serverId}");
  155. httpTest.ShouldHaveCalled($"*minRam={minRam}");
  156. httpTest.ShouldHaveCalled($"*minDisk={minDisk}");
  157. httpTest.ShouldHaveCalled($"*type={imageType}");
  158. httpTest.ShouldHaveCalled("*changes-since=");
  159. }
  160. }
  161. [Fact]
  162. public void ListImagesWithPaging()
  163. {
  164. using (var httpTest = new HttpTest())
  165. {
  166. httpTest.RespondWithJson(new ImageCollection());
  167. Identifier startingAt = Guid.NewGuid();
  168. const int pageSize = 10;
  169. _compute.ListImageSummaries(new ImageListOptions { PageSize = pageSize, StartingAt = startingAt });
  170. httpTest.ShouldHaveCalled($"*marker={startingAt}*");
  171. httpTest.ShouldHaveCalled($"*limit={pageSize}*");
  172. }
  173. }
  174. [Theory]
  175. [InlineData(false, "POST")]
  176. [InlineData(true, "PUT")]
  177. public void UpdateImageMetadata(bool overwrite, string expectedHttpVerb)
  178. {
  179. using (var httpTest = new HttpTest())
  180. {
  181. Identifier imageId = "1";
  182. httpTest.RespondWithJson(new Image {Id = imageId});
  183. httpTest.RespondWithJson(new ImageMetadata {["stuff"] = "things" });
  184. var image = _compute.GetImage(imageId);
  185. image.Metadata["color"] = "blue";
  186. image.Metadata.Update(overwrite);
  187. httpTest.ShouldHaveCalled($"*/images/{imageId}/metadata");
  188. Assert.Equal(expectedHttpVerb, httpTest.CallLog.Last().Request.Method.Method);
  189. Assert.True(image.Metadata.ContainsKey("stuff"));
  190. }
  191. }
  192. [Fact]
  193. public void DeleteImage()
  194. {
  195. using (var httpTest = new HttpTest())
  196. {
  197. Identifier imageId = Guid.NewGuid();
  198. httpTest.RespondWith((int)HttpStatusCode.NoContent, "All gone!");
  199. _compute.DeleteImage(imageId);
  200. httpTest.ShouldHaveCalled($"*/images/{imageId}");
  201. }
  202. }
  203. [Fact]
  204. public void DeleteImageExtension()
  205. {
  206. using (var httpTest = new HttpTest())
  207. {
  208. Identifier imageId = Guid.NewGuid();
  209. httpTest.RespondWithJson(new Image { Id = imageId });
  210. httpTest.RespondWith((int)HttpStatusCode.NoContent, "All gone!");
  211. httpTest.RespondWithJson(new Image { Id = imageId, Status = ImageStatus.Deleted });
  212. var image = _compute.GetImage(imageId);
  213. image.Delete();
  214. image.WaitUntilDeleted();
  215. Assert.Equal(image.Status, ImageStatus.Deleted);
  216. }
  217. }
  218. [Fact]
  219. public void WhenDeleteImage_Returns404NotFound_ShouldConsiderRequestSuccessful()
  220. {
  221. using (var httpTest = new HttpTest())
  222. {
  223. Identifier imageId = Guid.NewGuid();
  224. httpTest.RespondWith((int)HttpStatusCode.NotFound, "Not here, boss...");
  225. _compute.DeleteImage(imageId);
  226. httpTest.ShouldHaveCalled($"*/images/{imageId}");
  227. }
  228. }
  229. [Fact]
  230. public void WaitForImageDeleted()
  231. {
  232. using (var httpTest = new HttpTest())
  233. {
  234. Identifier imageId = Guid.NewGuid();
  235. httpTest.RespondWithJson(new Image { Id = imageId, Status = ImageStatus.Active });
  236. httpTest.RespondWith((int)HttpStatusCode.NoContent, "All gone!");
  237. httpTest.RespondWithJson(new Image { Id = imageId, Status = ImageStatus.Deleted });
  238. var result = _compute.GetImage(imageId);
  239. result.Delete();
  240. result.WaitUntilDeleted();
  241. Assert.Equal(ImageStatus.Deleted, result.Status);
  242. }
  243. }
  244. [Fact]
  245. public void WaitForImageDeleted_Returns404NotFound_ShouldConsiderRequestSuccessful()
  246. {
  247. using (var httpTest = new HttpTest())
  248. {
  249. Identifier imageId = Guid.NewGuid();
  250. httpTest.RespondWithJson(new Image { Id = imageId, Status = ImageStatus.Active });
  251. httpTest.RespondWith((int)HttpStatusCode.NoContent, "All gone!");
  252. httpTest.RespondWith((int)HttpStatusCode.NotFound, "Nothing here, boss");
  253. var result = _compute.GetImage(imageId);
  254. result.Delete();
  255. result.WaitUntilDeleted();
  256. Assert.Equal(ImageStatus.Deleted, result.Status);
  257. }
  258. }
  259. [Fact]
  260. public void DeleteImageMetadata()
  261. {
  262. using (var httpTest = new HttpTest())
  263. {
  264. Identifier imageId = Guid.NewGuid();
  265. const string key = "stuff";
  266. httpTest.RespondWithJson(new Image
  267. {
  268. Id = imageId,
  269. Metadata =
  270. {
  271. [key] = "things"
  272. }
  273. });
  274. httpTest.RespondWith((int)HttpStatusCode.NoContent, "All gone!");
  275. var image = _compute.GetImage(imageId);
  276. image.Metadata.Delete(key);
  277. Assert.False(image.Metadata.ContainsKey(key));
  278. httpTest.ShouldHaveCalled($"*/images/{imageId}/metadata/{key}");
  279. }
  280. }
  281. [Fact]
  282. public void WhenDeleteImageMetadata_Returns404NotFound_ShouldConsiderRequestSuccessful()
  283. {
  284. using (var httpTest = new HttpTest())
  285. {
  286. Identifier imageId = Guid.NewGuid();
  287. httpTest.RespondWith((int)HttpStatusCode.NotFound, "Not here, boss...");
  288. _compute.DeleteImageMetadataAsync(imageId, "{invalid-key}");
  289. }
  290. }
  291. }
  292. }