deployment_test.go 4.2 KB

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