node_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package kubemodel
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestValidateNode(t *testing.T) {
  8. start := time.Now().UTC().Truncate(time.Hour)
  9. end := start.Add(time.Hour)
  10. window := Window{Start: start, End: end}
  11. tests := []struct {
  12. name string
  13. node *Node
  14. wantErr string
  15. }{
  16. {
  17. name: "empty UID",
  18. node: &Node{Name: "my-node", Start: start, End: end},
  19. wantErr: "UID is missing for Node with name 'my-node'",
  20. },
  21. {
  22. name: "empty Name",
  23. node: &Node{UID: "node-uid", Start: start, End: end},
  24. wantErr: "Name is missing for Node 'node-uid'",
  25. },
  26. {
  27. name: "outside window",
  28. node: &Node{UID: "node-uid", Name: "my-node", Start: start.Add(-time.Hour), End: end},
  29. wantErr: checkWindow(window, start.Add(-time.Hour), end).Error(),
  30. },
  31. {
  32. name: "valid",
  33. node: &Node{UID: "node-uid", Name: "my-node", Start: start, End: end},
  34. },
  35. }
  36. for _, tt := range tests {
  37. t.Run(tt.name, func(t *testing.T) {
  38. err := tt.node.ValidateNode(window)
  39. if tt.wantErr != "" {
  40. require.EqualError(t, err, tt.wantErr)
  41. } else {
  42. require.NoError(t, err)
  43. }
  44. })
  45. }
  46. }
  47. func TestRegisterNode(t *testing.T) {
  48. start := time.Now().UTC().Truncate(time.Hour)
  49. end := start.Add(time.Hour)
  50. newNode := func(uid, name string) *Node {
  51. return &Node{UID: uid, Name: name, Start: start, End: end}
  52. }
  53. withCluster := func(kms *KubeModelSet) {
  54. kms.RegisterCluster(&Cluster{UID: "cluster-uid", Start: start, End: end})
  55. }
  56. tests := []struct {
  57. name string
  58. setup func(*KubeModelSet)
  59. node *Node
  60. wantErr string
  61. want *KubeModelSet
  62. }{
  63. {
  64. name: "validation failure",
  65. node: &Node{UID: "", Name: "my-node", Start: start, End: end},
  66. wantErr: "RegisterNode: invalid node: UID is missing for Node with name 'my-node'",
  67. want: func() *KubeModelSet {
  68. kms := NewKubeModelSet(start, end)
  69. kms.Metadata.Diagnostics = []Diagnostic{
  70. {Level: DiagnosticLevelError, Message: "RegisterNode: invalid node: UID is missing for Node with name 'my-node'"},
  71. }
  72. return kms
  73. }(),
  74. },
  75. {
  76. name: "warns when cluster is nil",
  77. node: newNode("node-uid", "my-node"),
  78. want: func() *KubeModelSet {
  79. kms := NewKubeModelSet(start, end)
  80. kms.Nodes["node-uid"] = newNode("node-uid", "my-node")
  81. kms.Metadata.ObjectCount = 1
  82. kms.Metadata.Diagnostics = []Diagnostic{
  83. {Level: DiagnosticLevelWarning, Message: "RegisterNode: Cluster is nil"},
  84. }
  85. return kms
  86. }(),
  87. },
  88. {
  89. name: "registers node with cluster",
  90. setup: withCluster,
  91. node: newNode("node-uid", "my-node"),
  92. want: func() *KubeModelSet {
  93. kms := NewKubeModelSet(start, end)
  94. withCluster(kms)
  95. kms.Nodes["node-uid"] = newNode("node-uid", "my-node")
  96. kms.Metadata.ObjectCount = 1
  97. return kms
  98. }(),
  99. },
  100. {
  101. name: "duplicate registration is a no-op",
  102. setup: func(kms *KubeModelSet) {
  103. withCluster(kms)
  104. kms.RegisterNode(newNode("node-uid", "original"))
  105. },
  106. node: newNode("node-uid", "duplicate"),
  107. want: func() *KubeModelSet {
  108. kms := NewKubeModelSet(start, end)
  109. withCluster(kms)
  110. kms.Nodes["node-uid"] = newNode("node-uid", "original")
  111. kms.Metadata.ObjectCount = 1
  112. return kms
  113. }(),
  114. },
  115. }
  116. for _, tt := range tests {
  117. t.Run(tt.name, func(t *testing.T) {
  118. kms := NewKubeModelSet(start, end)
  119. if tt.setup != nil {
  120. tt.setup(kms)
  121. }
  122. err := kms.RegisterNode(tt.node)
  123. if tt.wantErr != "" {
  124. require.EqualError(t, err, tt.wantErr)
  125. } else {
  126. require.NoError(t, err)
  127. }
  128. KubeModelSetEquals(t, tt.want, kms)
  129. })
  130. }
  131. }