cluster_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package kubemodel
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestValidateCluster(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. cluster *Cluster
  14. wantErr string
  15. }{
  16. {
  17. name: "empty UID",
  18. cluster: &Cluster{Name: "my-cluster", Start: start, End: end},
  19. wantErr: "UID is missing for Cluster with name 'my-cluster'",
  20. },
  21. {
  22. name: "outside window",
  23. cluster: &Cluster{UID: "cluster-uid", Name: "my-cluster", Start: start.Add(-time.Hour), End: end},
  24. wantErr: checkWindow(window, start.Add(-time.Hour), end).Error(),
  25. },
  26. {
  27. name: "valid",
  28. cluster: &Cluster{UID: "cluster-uid", Name: "my-cluster", Start: start, End: end},
  29. },
  30. }
  31. for _, tt := range tests {
  32. t.Run(tt.name, func(t *testing.T) {
  33. err := tt.cluster.ValidateCluster(window)
  34. if tt.wantErr != "" {
  35. require.EqualError(t, err, tt.wantErr)
  36. } else {
  37. require.NoError(t, err)
  38. }
  39. })
  40. }
  41. }
  42. func TestRegisterCluster(t *testing.T) {
  43. start := time.Now().UTC().Truncate(time.Hour)
  44. end := start.Add(time.Hour)
  45. newCluster := func(uid, name string) *Cluster {
  46. return &Cluster{UID: uid, Name: name, Start: start, End: end}
  47. }
  48. tests := []struct {
  49. name string
  50. setup func(*KubeModelSet)
  51. cluster *Cluster
  52. wantErr string
  53. want *KubeModelSet
  54. }{
  55. {
  56. name: "validation failure",
  57. cluster: &Cluster{UID: "", Name: "my-cluster", Start: start, End: end},
  58. wantErr: "RegisterCluster: invalid cluster: UID is missing for Cluster with name 'my-cluster'",
  59. want: func() *KubeModelSet {
  60. kms := NewKubeModelSet(start, end)
  61. kms.Metadata.Diagnostics = []Diagnostic{
  62. {Level: DiagnosticLevelError, Message: "RegisterCluster: invalid cluster: UID is missing for Cluster with name 'my-cluster'"},
  63. }
  64. return kms
  65. }(),
  66. },
  67. {
  68. name: "registers cluster",
  69. cluster: newCluster("cluster-uid", "my-cluster"),
  70. want: func() *KubeModelSet {
  71. kms := NewKubeModelSet(start, end)
  72. kms.Cluster = newCluster("cluster-uid", "my-cluster")
  73. return kms
  74. }(),
  75. },
  76. {
  77. name: "same UID is a no-op",
  78. setup: func(kms *KubeModelSet) {
  79. kms.RegisterCluster(newCluster("cluster-uid", "original"))
  80. },
  81. cluster: newCluster("cluster-uid", "duplicate"),
  82. want: func() *KubeModelSet {
  83. kms := NewKubeModelSet(start, end)
  84. kms.Cluster = newCluster("cluster-uid", "original")
  85. return kms
  86. }(),
  87. },
  88. {
  89. name: "different UID emits warning and keeps original",
  90. setup: func(kms *KubeModelSet) {
  91. kms.RegisterCluster(newCluster("cluster-uid", "original"))
  92. },
  93. cluster: newCluster("another-uid", "another"),
  94. want: func() *KubeModelSet {
  95. kms := NewKubeModelSet(start, end)
  96. kms.Cluster = newCluster("cluster-uid", "original")
  97. kms.Metadata.Diagnostics = []Diagnostic{
  98. {Level: DiagnosticLevelWarning, Message: "RegisterCluster(another-uid): attempting to change cluster UID from cluster-uid to another-uid"},
  99. }
  100. return kms
  101. }(),
  102. },
  103. }
  104. for _, tt := range tests {
  105. t.Run(tt.name, func(t *testing.T) {
  106. kms := NewKubeModelSet(start, end)
  107. if tt.setup != nil {
  108. tt.setup(kms)
  109. }
  110. err := kms.RegisterCluster(tt.cluster)
  111. if tt.wantErr != "" {
  112. require.EqualError(t, err, tt.wantErr)
  113. } else {
  114. require.NoError(t, err)
  115. }
  116. KubeModelSetEquals(t, tt.want, kms)
  117. })
  118. }
  119. }