kubemodel_codecs_test.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. package kubemodel
  2. import (
  3. "errors"
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestKubeModelMarshalBinary(t *testing.T) {
  9. s := time.Now().UTC().Truncate(time.Hour)
  10. e := s.Add(time.Hour)
  11. // Test empty KubeModelSet
  12. kms := NewKubeModelSet(s, e)
  13. b, err := kms.MarshalBinary()
  14. require.NoError(t, err)
  15. var act = new(KubeModelSet)
  16. err = act.UnmarshalBinary(b)
  17. require.NoError(t, err)
  18. require.Equal(t, kms.Metadata, act.Metadata)
  19. require.Equal(t, kms.Window, act.Window)
  20. require.Equal(t, kms.Cluster, act.Cluster)
  21. require.Equal(t, kms.Namespaces, act.Namespaces)
  22. require.Equal(t, kms.ResourceQuotas, act.ResourceQuotas)
  23. // Test non-empty KubeModelSet
  24. kms = NewKubeModelSet(s, e)
  25. kms.Metadata.CreatedAt = time.Now().UTC()
  26. kms.RegisterCluster("cluster")
  27. kms.Cluster.Start = s
  28. kms.Cluster.End = e
  29. kms.RegisterNamespace("ns1", "ns1")
  30. kms.Namespaces["ns1"].Start = s
  31. kms.Namespaces["ns1"].End = e
  32. kms.Namespaces["ns1"].Labels = map[string]string{"label1": "label1"}
  33. kms.Namespaces["ns1"].Annotations = map[string]string{"anno1": "anno1"}
  34. kms.RegisterNamespace("ns2", "ns2")
  35. kms.Namespaces["ns2"].Start = s
  36. kms.Namespaces["ns2"].End = e
  37. kms.Namespaces["ns2"].Labels = map[string]string{"label2": "label2"}
  38. kms.Namespaces["ns2"].Annotations = map[string]string{"anno2": "anno2"}
  39. kms.RegisterResourceQuota("rq1", "rq1", "ns1")
  40. kms.ResourceQuotas["rq1"].Start = s
  41. kms.ResourceQuotas["rq1"].End = e
  42. kms.ResourceQuotas["rq1"].Spec = &ResourceQuotaSpec{
  43. Hard: &ResourceQuotaSpecHard{
  44. Requests: ResourceQuantities{
  45. ResourceCPU: ResourceQuantity{
  46. Resource: ResourceCPU,
  47. Unit: UnitMillicore,
  48. Values: Stats{
  49. StatAvg: 1,
  50. StatMax: 1,
  51. StatP85: 1,
  52. StatP95: 1,
  53. },
  54. },
  55. ResourceMemory: ResourceQuantity{
  56. Resource: ResourceMemory,
  57. Unit: UnitByte,
  58. Values: Stats{
  59. StatAvg: 1,
  60. StatMax: 1,
  61. StatP85: 1,
  62. StatP95: 1,
  63. },
  64. },
  65. },
  66. Limits: ResourceQuantities{
  67. ResourceCPU: ResourceQuantity{
  68. Resource: ResourceCPU,
  69. Unit: UnitMillicore,
  70. Values: Stats{
  71. StatAvg: 1,
  72. StatMax: 1,
  73. StatP85: 1,
  74. StatP95: 1,
  75. },
  76. },
  77. ResourceMemory: ResourceQuantity{
  78. Resource: ResourceMemory,
  79. Unit: UnitByte,
  80. Values: Stats{
  81. StatAvg: 1,
  82. StatMax: 1,
  83. StatP85: 1,
  84. StatP95: 1,
  85. },
  86. },
  87. },
  88. },
  89. }
  90. kms.ResourceQuotas["rq1"].Status = &ResourceQuotaStatus{
  91. Used: &ResourceQuotaStatusUsed{
  92. Requests: ResourceQuantities{
  93. ResourceCPU: ResourceQuantity{
  94. Resource: ResourceCPU,
  95. Unit: UnitMillicore,
  96. Values: Stats{
  97. StatAvg: 1,
  98. StatMax: 1,
  99. StatP85: 1,
  100. StatP95: 1,
  101. },
  102. },
  103. ResourceMemory: ResourceQuantity{
  104. Resource: ResourceMemory,
  105. Unit: UnitByte,
  106. Values: Stats{
  107. StatAvg: 1,
  108. StatMax: 1,
  109. StatP85: 1,
  110. StatP95: 1,
  111. },
  112. },
  113. },
  114. Limits: ResourceQuantities{
  115. ResourceCPU: ResourceQuantity{
  116. Resource: ResourceCPU,
  117. Unit: UnitMillicore,
  118. Values: Stats{
  119. StatAvg: 1,
  120. StatMax: 1,
  121. StatP85: 1,
  122. StatP95: 1,
  123. },
  124. },
  125. ResourceMemory: ResourceQuantity{
  126. Resource: ResourceMemory,
  127. Unit: UnitByte,
  128. Values: Stats{
  129. StatAvg: 1,
  130. StatMax: 1,
  131. StatP85: 1,
  132. StatP95: 1,
  133. },
  134. },
  135. },
  136. },
  137. }
  138. kms.RegisterResourceQuota("rq2", "rq2", "ns1")
  139. kms.ResourceQuotas["rq2"].Start = s
  140. kms.ResourceQuotas["rq2"].End = e
  141. kms.ResourceQuotas["rq2"].Spec = &ResourceQuotaSpec{
  142. Hard: &ResourceQuotaSpecHard{
  143. Requests: ResourceQuantities{
  144. ResourceCPU: ResourceQuantity{
  145. Resource: ResourceCPU,
  146. Unit: UnitMillicore,
  147. Values: Stats{
  148. StatAvg: 1,
  149. StatMax: 1,
  150. StatP85: 1,
  151. StatP95: 1,
  152. },
  153. },
  154. ResourceMemory: ResourceQuantity{
  155. Resource: ResourceMemory,
  156. Unit: UnitByte,
  157. Values: Stats{
  158. StatAvg: 1,
  159. StatMax: 1,
  160. StatP85: 1,
  161. StatP95: 1,
  162. },
  163. },
  164. },
  165. Limits: ResourceQuantities{
  166. ResourceCPU: ResourceQuantity{
  167. Resource: ResourceCPU,
  168. Unit: UnitMillicore,
  169. Values: Stats{
  170. StatAvg: 1,
  171. StatMax: 1,
  172. StatP85: 1,
  173. StatP95: 1,
  174. },
  175. },
  176. ResourceMemory: ResourceQuantity{
  177. Resource: ResourceMemory,
  178. Unit: UnitByte,
  179. Values: Stats{
  180. StatAvg: 1,
  181. StatMax: 1,
  182. StatP85: 1,
  183. StatP95: 1,
  184. },
  185. },
  186. },
  187. },
  188. }
  189. kms.ResourceQuotas["rq2"].Status = &ResourceQuotaStatus{
  190. Used: &ResourceQuotaStatusUsed{
  191. Requests: ResourceQuantities{
  192. ResourceCPU: ResourceQuantity{
  193. Resource: ResourceCPU,
  194. Unit: UnitMillicore,
  195. Values: Stats{
  196. StatAvg: 1,
  197. StatMax: 1,
  198. StatP85: 1,
  199. StatP95: 1,
  200. },
  201. },
  202. ResourceMemory: ResourceQuantity{
  203. Resource: ResourceMemory,
  204. Unit: UnitByte,
  205. Values: Stats{
  206. StatAvg: 1,
  207. StatMax: 1,
  208. StatP85: 1,
  209. StatP95: 1,
  210. },
  211. },
  212. },
  213. Limits: ResourceQuantities{
  214. ResourceCPU: ResourceQuantity{
  215. Resource: ResourceCPU,
  216. Unit: UnitMillicore,
  217. Values: Stats{
  218. StatAvg: 1,
  219. StatMax: 1,
  220. StatP85: 1,
  221. StatP95: 1,
  222. },
  223. },
  224. ResourceMemory: ResourceQuantity{
  225. Resource: ResourceMemory,
  226. Unit: UnitByte,
  227. Values: Stats{
  228. StatAvg: 1,
  229. StatMax: 1,
  230. StatP85: 1,
  231. StatP95: 1,
  232. },
  233. },
  234. },
  235. },
  236. }
  237. kms.RegisterResourceQuota("rq3", "rq3", "ns2")
  238. kms.ResourceQuotas["rq3"].Start = s
  239. kms.ResourceQuotas["rq3"].End = e
  240. kms.ResourceQuotas["rq3"].Spec = &ResourceQuotaSpec{
  241. Hard: &ResourceQuotaSpecHard{
  242. Requests: ResourceQuantities{
  243. ResourceCPU: ResourceQuantity{
  244. Resource: ResourceCPU,
  245. Unit: UnitMillicore,
  246. Values: Stats{
  247. StatAvg: 1,
  248. StatMax: 1,
  249. StatP85: 1,
  250. StatP95: 1,
  251. },
  252. },
  253. ResourceMemory: ResourceQuantity{
  254. Resource: ResourceMemory,
  255. Unit: UnitByte,
  256. Values: Stats{
  257. StatAvg: 1,
  258. StatMax: 1,
  259. StatP85: 1,
  260. StatP95: 1,
  261. },
  262. },
  263. },
  264. Limits: ResourceQuantities{
  265. ResourceCPU: ResourceQuantity{
  266. Resource: ResourceCPU,
  267. Unit: UnitMillicore,
  268. Values: Stats{
  269. StatAvg: 1,
  270. StatMax: 1,
  271. StatP85: 1,
  272. StatP95: 1,
  273. },
  274. },
  275. ResourceMemory: ResourceQuantity{
  276. Resource: ResourceMemory,
  277. Unit: UnitByte,
  278. Values: Stats{
  279. StatAvg: 1,
  280. StatMax: 1,
  281. StatP85: 1,
  282. StatP95: 1,
  283. },
  284. },
  285. },
  286. },
  287. }
  288. kms.ResourceQuotas["rq3"].Status = &ResourceQuotaStatus{
  289. Used: &ResourceQuotaStatusUsed{
  290. Requests: ResourceQuantities{
  291. ResourceCPU: ResourceQuantity{
  292. Resource: ResourceCPU,
  293. Unit: UnitMillicore,
  294. Values: Stats{
  295. StatAvg: 1,
  296. StatMax: 1,
  297. StatP85: 1,
  298. StatP95: 1,
  299. },
  300. },
  301. ResourceMemory: ResourceQuantity{
  302. Resource: ResourceMemory,
  303. Unit: UnitByte,
  304. Values: Stats{
  305. StatAvg: 1,
  306. StatMax: 1,
  307. StatP85: 1,
  308. StatP95: 1,
  309. },
  310. },
  311. },
  312. Limits: ResourceQuantities{
  313. ResourceCPU: ResourceQuantity{
  314. Resource: ResourceCPU,
  315. Unit: UnitMillicore,
  316. Values: Stats{
  317. StatAvg: 1,
  318. StatMax: 1,
  319. StatP85: 1,
  320. StatP95: 1,
  321. },
  322. },
  323. ResourceMemory: ResourceQuantity{
  324. Resource: ResourceMemory,
  325. Unit: UnitByte,
  326. Values: Stats{
  327. StatAvg: 1,
  328. StatMax: 1,
  329. StatP85: 1,
  330. StatP95: 1,
  331. },
  332. },
  333. },
  334. },
  335. }
  336. kms.RegisterResourceQuota("rq4", "rq4", "ns2")
  337. kms.ResourceQuotas["rq4"].Start = s
  338. kms.ResourceQuotas["rq4"].End = e
  339. kms.ResourceQuotas["rq4"].Spec = &ResourceQuotaSpec{
  340. Hard: &ResourceQuotaSpecHard{
  341. Requests: ResourceQuantities{
  342. ResourceCPU: ResourceQuantity{
  343. Resource: ResourceCPU,
  344. Unit: UnitMillicore,
  345. Values: Stats{
  346. StatAvg: 1,
  347. StatMax: 1,
  348. StatP85: 1,
  349. StatP95: 1,
  350. },
  351. },
  352. ResourceMemory: ResourceQuantity{
  353. Resource: ResourceMemory,
  354. Unit: UnitByte,
  355. Values: Stats{
  356. StatAvg: 1,
  357. StatMax: 1,
  358. StatP85: 1,
  359. StatP95: 1,
  360. },
  361. },
  362. },
  363. Limits: ResourceQuantities{
  364. ResourceCPU: ResourceQuantity{
  365. Resource: ResourceCPU,
  366. Unit: UnitMillicore,
  367. Values: Stats{
  368. StatAvg: 1,
  369. StatMax: 1,
  370. StatP85: 1,
  371. StatP95: 1,
  372. },
  373. },
  374. ResourceMemory: ResourceQuantity{
  375. Resource: ResourceMemory,
  376. Unit: UnitByte,
  377. Values: Stats{
  378. StatAvg: 1,
  379. StatMax: 1,
  380. StatP85: 1,
  381. StatP95: 1,
  382. },
  383. },
  384. },
  385. },
  386. }
  387. kms.ResourceQuotas["rq4"].Status = &ResourceQuotaStatus{
  388. Used: &ResourceQuotaStatusUsed{
  389. Requests: ResourceQuantities{
  390. ResourceCPU: ResourceQuantity{
  391. Resource: ResourceCPU,
  392. Unit: UnitMillicore,
  393. Values: Stats{
  394. StatAvg: 1,
  395. StatMax: 1,
  396. StatP85: 1,
  397. StatP95: 1,
  398. },
  399. },
  400. ResourceMemory: ResourceQuantity{
  401. Resource: ResourceMemory,
  402. Unit: UnitByte,
  403. Values: Stats{
  404. StatAvg: 1,
  405. StatMax: 1,
  406. StatP85: 1,
  407. StatP95: 1,
  408. },
  409. },
  410. },
  411. Limits: ResourceQuantities{
  412. ResourceCPU: ResourceQuantity{
  413. Resource: ResourceCPU,
  414. Unit: UnitMillicore,
  415. Values: Stats{
  416. StatAvg: 1,
  417. StatMax: 1,
  418. StatP85: 1,
  419. StatP95: 1,
  420. },
  421. },
  422. ResourceMemory: ResourceQuantity{
  423. Resource: ResourceMemory,
  424. Unit: UnitByte,
  425. Values: Stats{
  426. StatAvg: 1,
  427. StatMax: 1,
  428. StatP85: 1,
  429. StatP95: 1,
  430. },
  431. },
  432. },
  433. },
  434. }
  435. kms.Error(errors.New("test error"))
  436. kms.Warn("test warning")
  437. kms.Info("test info")
  438. kms.Debug("test debug")
  439. kms.Trace("test trace")
  440. kms.Metadata.CompletedAt = time.Now().UTC()
  441. b, err = kms.MarshalBinary()
  442. require.NoError(t, err)
  443. act = new(KubeModelSet)
  444. err = act.UnmarshalBinary(b)
  445. require.NoError(t, err)
  446. require.Equal(t, kms.Metadata, act.Metadata)
  447. require.Equal(t, kms.Window, act.Window)
  448. require.Equal(t, kms.Cluster, act.Cluster)
  449. require.Equal(t, kms.Namespaces, act.Namespaces)
  450. require.Equal(t, kms.ResourceQuotas, act.ResourceQuotas)
  451. }