replication_controller_utils_test.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. Copyright 2017 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package replication
  14. import (
  15. "reflect"
  16. "testing"
  17. "k8s.io/api/core/v1"
  18. )
  19. var (
  20. imagePullBackOff v1.ReplicationControllerConditionType = "ImagePullBackOff"
  21. condImagePullBackOff = func() v1.ReplicationControllerCondition {
  22. return v1.ReplicationControllerCondition{
  23. Type: imagePullBackOff,
  24. Status: v1.ConditionTrue,
  25. Reason: "NonExistentImage",
  26. }
  27. }
  28. condReplicaFailure = func() v1.ReplicationControllerCondition {
  29. return v1.ReplicationControllerCondition{
  30. Type: v1.ReplicationControllerReplicaFailure,
  31. Status: v1.ConditionTrue,
  32. Reason: "OtherFailure",
  33. }
  34. }
  35. condReplicaFailure2 = func() v1.ReplicationControllerCondition {
  36. return v1.ReplicationControllerCondition{
  37. Type: v1.ReplicationControllerReplicaFailure,
  38. Status: v1.ConditionTrue,
  39. Reason: "AnotherFailure",
  40. }
  41. }
  42. status = func() *v1.ReplicationControllerStatus {
  43. return &v1.ReplicationControllerStatus{
  44. Conditions: []v1.ReplicationControllerCondition{condReplicaFailure()},
  45. }
  46. }
  47. )
  48. func TestGetCondition(t *testing.T) {
  49. exampleStatus := status()
  50. tests := []struct {
  51. name string
  52. status v1.ReplicationControllerStatus
  53. condType v1.ReplicationControllerConditionType
  54. condStatus v1.ConditionStatus
  55. condReason string
  56. expected bool
  57. }{
  58. {
  59. name: "condition exists",
  60. status: *exampleStatus,
  61. condType: v1.ReplicationControllerReplicaFailure,
  62. expected: true,
  63. },
  64. {
  65. name: "condition does not exist",
  66. status: *exampleStatus,
  67. condType: imagePullBackOff,
  68. expected: false,
  69. },
  70. }
  71. for _, test := range tests {
  72. cond := GetCondition(test.status, test.condType)
  73. exists := cond != nil
  74. if exists != test.expected {
  75. t.Errorf("%s: expected condition to exist: %t, got: %t", test.name, test.expected, exists)
  76. }
  77. }
  78. }
  79. func TestSetCondition(t *testing.T) {
  80. tests := []struct {
  81. name string
  82. status *v1.ReplicationControllerStatus
  83. cond v1.ReplicationControllerCondition
  84. expectedStatus *v1.ReplicationControllerStatus
  85. }{
  86. {
  87. name: "set for the first time",
  88. status: &v1.ReplicationControllerStatus{},
  89. cond: condReplicaFailure(),
  90. expectedStatus: &v1.ReplicationControllerStatus{Conditions: []v1.ReplicationControllerCondition{condReplicaFailure()}},
  91. },
  92. {
  93. name: "simple set",
  94. status: &v1.ReplicationControllerStatus{Conditions: []v1.ReplicationControllerCondition{condImagePullBackOff()}},
  95. cond: condReplicaFailure(),
  96. expectedStatus: &v1.ReplicationControllerStatus{Conditions: []v1.ReplicationControllerCondition{condImagePullBackOff(), condReplicaFailure()}},
  97. },
  98. {
  99. name: "overwrite",
  100. status: &v1.ReplicationControllerStatus{Conditions: []v1.ReplicationControllerCondition{condReplicaFailure()}},
  101. cond: condReplicaFailure2(),
  102. expectedStatus: &v1.ReplicationControllerStatus{Conditions: []v1.ReplicationControllerCondition{condReplicaFailure2()}},
  103. },
  104. }
  105. for _, test := range tests {
  106. SetCondition(test.status, test.cond)
  107. if !reflect.DeepEqual(test.status, test.expectedStatus) {
  108. t.Errorf("%s: expected status: %v, got: %v", test.name, test.expectedStatus, test.status)
  109. }
  110. }
  111. }
  112. func TestRemoveCondition(t *testing.T) {
  113. tests := []struct {
  114. name string
  115. status *v1.ReplicationControllerStatus
  116. condType v1.ReplicationControllerConditionType
  117. expectedStatus *v1.ReplicationControllerStatus
  118. }{
  119. {
  120. name: "remove from empty status",
  121. status: &v1.ReplicationControllerStatus{},
  122. condType: v1.ReplicationControllerReplicaFailure,
  123. expectedStatus: &v1.ReplicationControllerStatus{},
  124. },
  125. {
  126. name: "simple remove",
  127. status: &v1.ReplicationControllerStatus{Conditions: []v1.ReplicationControllerCondition{condReplicaFailure()}},
  128. condType: v1.ReplicationControllerReplicaFailure,
  129. expectedStatus: &v1.ReplicationControllerStatus{},
  130. },
  131. {
  132. name: "doesn't remove anything",
  133. status: status(),
  134. condType: imagePullBackOff,
  135. expectedStatus: status(),
  136. },
  137. }
  138. for _, test := range tests {
  139. RemoveCondition(test.status, test.condType)
  140. if !reflect.DeepEqual(test.status, test.expectedStatus) {
  141. t.Errorf("%s: expected status: %v, got: %v", test.name, test.expectedStatus, test.status)
  142. }
  143. }
  144. }