HardwareDeserializationTests.cs 11 KB

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