4
0

HardwareDeserializationTests.cs 11 KB

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