HardwareDeserializationTests.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. using RackPeek.Domain.Resources.Hardware;
  2. using RackPeek.Domain.Resources.Hardware.Models;
  3. using RackPeek.Yaml;
  4. namespace Tests.Yaml;
  5. public class HardwareDeserializationTests
  6. {
  7. public static IHardwareRepository CreateSut(string yaml)
  8. {
  9. var yamlResourceCollection = new YamlResourceCollection();
  10. yamlResourceCollection.Load(yaml, "test.yaml");
  11. return new YamlHardwareRepository(yamlResourceCollection);
  12. }
  13. [Theory]
  14. [InlineData("Server", typeof(Server))]
  15. [InlineData("Switch", typeof(Switch))]
  16. [InlineData("Firewall", typeof(Firewall))]
  17. [InlineData("Desktop", typeof(Desktop))]
  18. [InlineData("Laptop", typeof(Laptop))]
  19. [InlineData("Router", typeof(Router))]
  20. [InlineData("AccessPoint", typeof(AccessPoint))]
  21. [InlineData("Ups", typeof(Ups))]
  22. public async Task deserialize_yaml_kind(string kind, Type type)
  23. {
  24. // Given
  25. var yaml = $@"
  26. resources:
  27. - kind: {kind}
  28. ";
  29. var sut = CreateSut(yaml);
  30. // When
  31. var resources = await sut.GetAllAsync();
  32. // Then
  33. var hardware = Assert.Single(resources);
  34. Assert.IsType(type, hardware);
  35. }
  36. [Fact]
  37. public async Task deserialize_yaml_kind_server()
  38. {
  39. // Given
  40. var yaml = @"
  41. resources:
  42. - kind: Server
  43. name: dell-c6400-node01
  44. cpus:
  45. - model: Intel(R) Xeon(R) CPU E3-1270 v6
  46. cores: 4
  47. threads: 8
  48. ram:
  49. size: 32gb
  50. Mts: 2400
  51. drives:
  52. - type: hdd
  53. size: 2Tb
  54. - type: ssd
  55. size: 256gb
  56. gpus:
  57. - model: NVIDIA Tesla T4
  58. vram: 16gb
  59. nics:
  60. - type: rj45
  61. speed: 1gb
  62. ports: 2
  63. - type: sfp+
  64. speed: 10gb
  65. ports: 2
  66. ipmi: true
  67. ";
  68. var sut = CreateSut(yaml);
  69. // When
  70. var resources = await sut.GetAllAsync();
  71. // Then
  72. var hardware = Assert.Single(resources);
  73. Assert.IsType<Server>(hardware);
  74. var server = hardware as Server;
  75. Assert.NotNull(server);
  76. Assert.Equal("dell-c6400-node01", server.Name);
  77. // Cpu
  78. Assert.NotNull(server.Cpus);
  79. var cpu = server.Cpus[0];
  80. Assert.Equal("Intel(R) Xeon(R) CPU E3-1270 v6", cpu.Model);
  81. Assert.Equal(4, cpu.Cores);
  82. Assert.Equal(8, cpu.Threads);
  83. // Ram
  84. Assert.NotNull(server.Ram);
  85. Assert.Equal(32, server.Ram.Size);
  86. Assert.Equal(2400, server.Ram.Mts);
  87. // Drives
  88. Assert.NotNull(server.Drives);
  89. var hdd = server.Drives[0];
  90. Assert.Equal("hdd", hdd.Type);
  91. Assert.Equal(2048, hdd.Size);
  92. var ssd = server.Drives[1];
  93. Assert.Equal("ssd", ssd.Type);
  94. Assert.Equal(256, ssd.Size);
  95. //GPUs
  96. Assert.NotNull(server.Gpus);
  97. var gpu = server.Gpus[0];
  98. Assert.Equal("NVIDIA Tesla T4", gpu.Model);
  99. Assert.Equal(16, gpu.Vram);
  100. // ipmi
  101. Assert.True(server.Ipmi);
  102. // Nics
  103. Assert.NotNull(server.Nics);
  104. var nic0 = server.Nics[0];
  105. Assert.Equal("rj45", nic0.Type);
  106. Assert.Equal(1, nic0.Speed);
  107. Assert.Equal(2, nic0.Ports);
  108. var nic1 = server.Nics[1];
  109. Assert.Equal("sfp+", nic1.Type);
  110. Assert.Equal(10, nic1.Speed);
  111. Assert.Equal(2, nic1.Ports);
  112. }
  113. [Fact]
  114. public async Task deserialize_yaml_kind_switch()
  115. {
  116. // Given
  117. var yaml = @"
  118. resources:
  119. - kind: Switch
  120. name: netgear-s24
  121. model: GS324
  122. ports:
  123. - type: rj45
  124. speed: 1gb
  125. count: 8
  126. - type: sfp
  127. speed: 10gb
  128. count: 2
  129. managed: true
  130. poe: true
  131. ";
  132. var sut = CreateSut(yaml);
  133. // When
  134. var resources = await sut.GetAllAsync();
  135. // Then
  136. var hardware = Assert.Single(resources);
  137. Assert.IsType<Switch>(hardware);
  138. var sw = hardware as Switch;
  139. Assert.NotNull(sw);
  140. Assert.Equal("netgear-s24", sw.Name);
  141. Assert.Equal("GS324", sw.Model);
  142. Assert.Equal(true, sw.Managed);
  143. Assert.Equal(true, sw.Poe);
  144. // Nics
  145. Assert.NotNull(sw.Ports);
  146. var nic0 = sw.Ports[0];
  147. Assert.Equal("rj45", nic0.Type);
  148. Assert.Equal(1, nic0.Speed);
  149. Assert.Equal(8, nic0.Count);
  150. var nic1 = sw.Ports[1];
  151. Assert.Equal("sfp", nic1.Type);
  152. Assert.Equal(10, nic1.Speed);
  153. Assert.Equal(2, nic1.Count);
  154. }
  155. [Fact]
  156. public async Task deserialize_yaml_kind_firewall()
  157. {
  158. // Given
  159. var yaml = @"
  160. resources:
  161. - kind: Firewall
  162. name: pfsense
  163. model: pfSense-1100
  164. ports:
  165. - type: rj45
  166. speed: 1gb
  167. count: 8
  168. - type: sfp
  169. speed: 10gb
  170. count: 2
  171. managed: true
  172. poe: true
  173. ";
  174. var sut = CreateSut(yaml);
  175. // When
  176. var resources = await sut.GetAllAsync();
  177. // Then
  178. var hardware = Assert.Single(resources);
  179. Assert.IsType<Firewall>(hardware);
  180. var fw = hardware as Firewall;
  181. Assert.NotNull(fw);
  182. Assert.Equal("pfsense", fw.Name);
  183. Assert.Equal("pfSense-1100", fw.Model);
  184. Assert.Equal(true, fw.Managed);
  185. Assert.Equal(true, fw.Poe);
  186. // Nics
  187. Assert.NotNull(fw.Ports);
  188. var nic0 = fw.Ports[0];
  189. Assert.Equal("rj45", nic0.Type);
  190. Assert.Equal(1, nic0.Speed);
  191. Assert.Equal(8, nic0.Count);
  192. var nic1 = fw.Ports[1];
  193. Assert.Equal("sfp", nic1.Type);
  194. Assert.Equal(10, nic1.Speed);
  195. Assert.Equal(2, nic1.Count);
  196. }
  197. [Fact]
  198. public async Task deserialize_yaml_kind_router()
  199. {
  200. // Given
  201. var yaml = @"
  202. resources:
  203. - kind: Router
  204. name: ubiquiti-edge-router
  205. model: ER-4
  206. ports:
  207. - type: rj45
  208. speed: 1gb
  209. count: 8
  210. - type: sfp
  211. speed: 10gb
  212. count: 2
  213. managed: true
  214. poe: true
  215. ";
  216. var sut = CreateSut(yaml);
  217. // When
  218. var resources = await sut.GetAllAsync();
  219. // Then
  220. var hardware = Assert.Single(resources);
  221. Assert.IsType<Router>(hardware);
  222. var router = hardware as Router;
  223. Assert.NotNull(router);
  224. Assert.Equal("ubiquiti-edge-router", router.Name);
  225. Assert.Equal("ER-4", router.Model);
  226. Assert.Equal(true, router.Managed);
  227. Assert.Equal(true, router.Poe);
  228. // Nics
  229. Assert.NotNull(router.Ports);
  230. var nic0 = router.Ports[0];
  231. Assert.Equal("rj45", nic0.Type);
  232. Assert.Equal(1, nic0.Speed);
  233. Assert.Equal(8, nic0.Count);
  234. var nic1 = router.Ports[1];
  235. Assert.Equal("sfp", nic1.Type);
  236. Assert.Equal(10, nic1.Speed);
  237. Assert.Equal(2, nic1.Count);
  238. }
  239. [Fact]
  240. public async Task deserialize_yaml_kind_desktop()
  241. {
  242. // Given
  243. var yaml = @"
  244. resources:
  245. - kind: Desktop
  246. name: dell-optiplex
  247. cpus:
  248. - model: Intel(R) Core(TM) i5-9500
  249. cores: 6
  250. threads: 6
  251. ram:
  252. size: 16gb
  253. mts: 2666
  254. drives:
  255. - type: ssd
  256. size: 512gb
  257. nics:
  258. - type: rj45
  259. speed: 1gb
  260. ports: 1
  261. gpus:
  262. - model: RTX 3080
  263. vram: 12gb
  264. ";
  265. var sut = CreateSut(yaml);
  266. // When
  267. var resources = await sut.GetAllAsync();
  268. // Then
  269. var hardware = Assert.Single(resources);
  270. Assert.IsType<Desktop>(hardware);
  271. var desktop = hardware as Desktop;
  272. Assert.NotNull(desktop);
  273. Assert.Equal("dell-optiplex", desktop.Name);
  274. // CPU
  275. Assert.NotNull(desktop.Cpus);
  276. Assert.Equal("Intel(R) Core(TM) i5-9500", desktop.Cpus[0].Model);
  277. Assert.Equal(6, desktop.Cpus[0].Cores);
  278. Assert.Equal(6, desktop.Cpus[0].Threads);
  279. // RAM
  280. Assert.NotNull(desktop.Ram);
  281. Assert.Equal(16, desktop.Ram.Size);
  282. Assert.Equal(2666, desktop.Ram.Mts);
  283. // Drives
  284. Assert.NotNull(desktop.Drives);
  285. Assert.Equal("ssd", desktop.Drives[0].Type);
  286. Assert.Equal(512, desktop.Drives[0].Size);
  287. // NIC
  288. Assert.NotNull(desktop.Nics);
  289. Assert.Equal("rj45", desktop.Nics[0].Type);
  290. Assert.Equal(1, desktop.Nics[0].Speed);
  291. Assert.Equal(1, desktop.Nics[0].Ports);
  292. }
  293. [Fact]
  294. public async Task deserialize_yaml_kind_laptop()
  295. {
  296. // Given
  297. var yaml = @"
  298. resources:
  299. - kind: Laptop
  300. name: thinkpad-x1
  301. cpus:
  302. - model: Intel(R) Core(TM) i7-10510U
  303. cores: 4
  304. threads: 8
  305. ram:
  306. size: 16gb
  307. mts: 2666
  308. drives:
  309. - type: ssd
  310. size: 1tb
  311. gpus:
  312. - model: RTX 3080
  313. vram: 12gb
  314. ";
  315. var sut = CreateSut(yaml);
  316. // When
  317. var resources = await sut.GetAllAsync();
  318. // Then
  319. var hardware = Assert.Single(resources);
  320. Assert.IsType<Laptop>(hardware);
  321. var laptop = hardware as Laptop;
  322. Assert.NotNull(laptop);
  323. Assert.Equal("thinkpad-x1", laptop.Name);
  324. // CPU
  325. Assert.NotNull(laptop.Cpus);
  326. Assert.Equal("Intel(R) Core(TM) i7-10510U", laptop.Cpus[0].Model);
  327. Assert.Equal(4, laptop.Cpus[0].Cores);
  328. Assert.Equal(8, laptop.Cpus[0].Threads);
  329. // RAM
  330. Assert.NotNull(laptop.Ram);
  331. Assert.Equal(16, laptop.Ram.Size);
  332. Assert.Equal(2666, laptop.Ram.Mts);
  333. // Drives
  334. Assert.NotNull(laptop.Drives);
  335. Assert.Equal("ssd", laptop.Drives[0].Type);
  336. Assert.Equal(1024, laptop.Drives[0].Size);
  337. }
  338. [Fact]
  339. public async Task deserialize_yaml_kind_accesspoint()
  340. {
  341. // Given
  342. var yaml = @"
  343. resources:
  344. - kind: AccessPoint
  345. name: lounge-ap
  346. model: Unifi-Ap-Pro
  347. speed: 2.5Gb
  348. ";
  349. var sut = CreateSut(yaml);
  350. // When
  351. var resources = await sut.GetAllAsync();
  352. // Then
  353. var hardware = Assert.Single(resources);
  354. Assert.IsType<AccessPoint>(hardware);
  355. var accessPoint = hardware as AccessPoint;
  356. Assert.NotNull(accessPoint);
  357. Assert.Equal("lounge-ap", accessPoint.Name);
  358. Assert.Equal("Unifi-Ap-Pro", accessPoint.Model);
  359. Assert.Equal(2.5, accessPoint.Speed);
  360. }
  361. [Fact]
  362. public async Task deserialize_yaml_kind_ups()
  363. {
  364. // Given
  365. var yaml = @"
  366. resources:
  367. - kind: Ups
  368. name: rack-ups
  369. model: Volta
  370. va: 2200
  371. ";
  372. var sut = CreateSut(yaml);
  373. // When
  374. var resources = await sut.GetAllAsync();
  375. // Then
  376. var hardware = Assert.Single(resources);
  377. Assert.IsType<Ups>(hardware);
  378. var ups = hardware as Ups;
  379. Assert.NotNull(ups);
  380. Assert.Equal("rack-ups", ups.Name);
  381. Assert.Equal("Volta", ups.Model);
  382. Assert.Equal(2200, ups.Va);
  383. }
  384. }