1
1
package canary
2
2
3
3
import (
4
+ "strings"
4
5
"testing"
5
6
6
7
"github.com/stretchr/testify/assert"
@@ -24,39 +25,57 @@ func TestDaemonSetController_IsReady(t *testing.T) {
24
25
}
25
26
26
27
func TestDaemonSetController_isDaemonSetReady (t * testing.T ) {
27
- ds := & appsv1.DaemonSet {
28
- Status : appsv1.DaemonSetStatus {
29
- DesiredNumberScheduled : 1 ,
30
- UpdatedNumberScheduled : 1 ,
31
- },
32
- }
33
-
28
+ mocks := newDaemonSetFixture ()
34
29
cd := & flaggerv1.Canary {}
35
- cd .Spec .ProgressDeadlineSeconds = int32p (1e5 )
36
- cd .Status .LastTransitionTime = metav1 .Now ()
37
30
38
- // ready
39
- mocks := newDaemonSetFixture ()
40
- _ , err := mocks .controller .isDaemonSetReady (cd , ds )
31
+ // observed generation is less than desired generation
32
+ ds := & appsv1.DaemonSet {Status : appsv1.DaemonSetStatus {}}
33
+ ds .Status .ObservedGeneration --
34
+ retyable , err := mocks .controller .isDaemonSetReady (cd , ds )
35
+ require .Error (t , err )
36
+ require .True (t , retyable )
37
+
38
+ // succeeded
39
+ ds = & appsv1.DaemonSet {Status : appsv1.DaemonSetStatus {
40
+ UpdatedNumberScheduled : 1 ,
41
+ DesiredNumberScheduled : 1 ,
42
+ NumberAvailable : 1 ,
43
+ }}
44
+ retyable , err = mocks .controller .isDaemonSetReady (cd , ds )
41
45
require .NoError (t , err )
46
+ require .True (t , retyable )
42
47
43
- // not ready but retriable
44
- ds .Status .NumberUnavailable ++
45
- retrieable , err := mocks .controller .isDaemonSetReady (cd , ds )
48
+ // deadline exceeded
49
+ ds = & appsv1.DaemonSet {Status : appsv1.DaemonSetStatus {
50
+ UpdatedNumberScheduled : 0 ,
51
+ DesiredNumberScheduled : 1 ,
52
+ }}
53
+ cd .Status .LastTransitionTime = metav1 .Now ()
54
+ cd .Spec .ProgressDeadlineSeconds = int32p (- 1e6 )
55
+ retyable , err = mocks .controller .isDaemonSetReady (cd , ds )
46
56
require .Error (t , err )
47
- require .True (t , retrieable )
48
- ds .Status .NumberUnavailable --
57
+ require .False (t , retyable )
49
58
50
- ds .Status .DesiredNumberScheduled ++
51
- retrieable , err = mocks .controller .isDaemonSetReady (cd , ds )
59
+ // only newCond not satisfied
60
+ ds = & appsv1.DaemonSet {Status : appsv1.DaemonSetStatus {
61
+ UpdatedNumberScheduled : 0 ,
62
+ DesiredNumberScheduled : 1 ,
63
+ NumberAvailable : 1 ,
64
+ }}
65
+ cd .Spec .ProgressDeadlineSeconds = int32p (1e6 )
66
+ retyable , err = mocks .controller .isDaemonSetReady (cd , ds )
52
67
require .Error (t , err )
53
- require .True (t , retrieable )
68
+ require .True (t , retyable )
69
+ require .True (t , strings .Contains (err .Error (), "new pods" ))
54
70
55
- // not ready and not retriable
56
- cd .Status .LastTransitionTime = metav1 .Now ()
57
- cd .Spec .ProgressDeadlineSeconds = int32p (- 1e5 )
58
- retrieable , err = mocks .controller .isDaemonSetReady (cd , ds )
71
+ // only availableCond not satisfied
72
+ ds = & appsv1.DaemonSet {Status : appsv1.DaemonSetStatus {
73
+ UpdatedNumberScheduled : 1 ,
74
+ DesiredNumberScheduled : 1 ,
75
+ NumberAvailable : 0 ,
76
+ }}
77
+ retyable , err = mocks .controller .isDaemonSetReady (cd , ds )
59
78
require .Error (t , err )
60
- require .False (t , retrieable )
61
-
79
+ require .True (t , retyable )
80
+ require . True ( t , strings . Contains ( err . Error (), "available" ))
62
81
}
0 commit comments