@@ -44,6 +44,148 @@ func TestJobs_Register(t *testing.T) {
44
44
}
45
45
}
46
46
47
+ func TestJobs_Register_PreserveCounts (t * testing.T ) {
48
+ t .Parallel ()
49
+ require := require .New (t )
50
+
51
+ c , s := makeClient (t , nil , nil )
52
+ defer s .Stop ()
53
+ jobs := c .Jobs ()
54
+
55
+ // Listing jobs before registering returns nothing
56
+ resp , _ , err := jobs .List (nil )
57
+ require .Nil (err )
58
+ require .Emptyf (resp , "expected 0 jobs, got: %d" , len (resp ))
59
+
60
+ // Create a job
61
+ task := NewTask ("task" , "exec" ).
62
+ SetConfig ("command" , "/bin/sleep" ).
63
+ Require (& Resources {
64
+ CPU : intToPtr (100 ),
65
+ MemoryMB : intToPtr (256 ),
66
+ }).
67
+ SetLogConfig (& LogConfig {
68
+ MaxFiles : intToPtr (1 ),
69
+ MaxFileSizeMB : intToPtr (2 ),
70
+ })
71
+
72
+ group1 := NewTaskGroup ("group1" , 1 ).
73
+ AddTask (task ).
74
+ RequireDisk (& EphemeralDisk {
75
+ SizeMB : intToPtr (25 ),
76
+ })
77
+ group2 := NewTaskGroup ("group2" , 2 ).
78
+ AddTask (task ).
79
+ RequireDisk (& EphemeralDisk {
80
+ SizeMB : intToPtr (25 ),
81
+ })
82
+
83
+ job := NewBatchJob ("job" , "redis" , "global" , 1 ).
84
+ AddDatacenter ("dc1" ).
85
+ AddTaskGroup (group1 ).
86
+ AddTaskGroup (group2 )
87
+
88
+ // Create a job and register it
89
+ resp2 , wm , err := jobs .Register (job , nil )
90
+ require .Nil (err )
91
+ require .NotNil (resp2 )
92
+ require .NotEmpty (resp2 .EvalID )
93
+ assertWriteMeta (t , wm )
94
+
95
+ // Update the job, new groups to test PreserveCounts
96
+ group1 .Count = nil
97
+ group2 .Count = intToPtr (0 )
98
+ group3 := NewTaskGroup ("group3" , 3 ).
99
+ AddTask (task ).
100
+ RequireDisk (& EphemeralDisk {
101
+ SizeMB : intToPtr (25 ),
102
+ })
103
+ job .AddTaskGroup (group3 )
104
+
105
+ // Update the job, with PreserveCounts = true
106
+ _ , _ , err = jobs .RegisterOpts (job , & RegisterOptions {
107
+ PreserveCounts : true ,
108
+ }, nil )
109
+ require .NoError (err )
110
+
111
+ // Query the job scale status
112
+ status , _ , err := jobs .ScaleStatus (* job .ID , nil )
113
+ require .NoError (err )
114
+ require .Equal (1 , status .TaskGroups ["group1" ].Desired ) // present and nil => preserved
115
+ require .Equal (2 , status .TaskGroups ["group2" ].Desired ) // present and specified => preserved
116
+ require .Equal (3 , status .TaskGroups ["group3" ].Desired ) // new => as specific in job spec
117
+ }
118
+
119
+ func TestJobs_Register_NoPreserveCounts (t * testing.T ) {
120
+ t .Parallel ()
121
+ require := require .New (t )
122
+
123
+ c , s := makeClient (t , nil , nil )
124
+ defer s .Stop ()
125
+ jobs := c .Jobs ()
126
+
127
+ // Listing jobs before registering returns nothing
128
+ resp , _ , err := jobs .List (nil )
129
+ require .Nil (err )
130
+ require .Emptyf (resp , "expected 0 jobs, got: %d" , len (resp ))
131
+
132
+ // Create a job
133
+ task := NewTask ("task" , "exec" ).
134
+ SetConfig ("command" , "/bin/sleep" ).
135
+ Require (& Resources {
136
+ CPU : intToPtr (100 ),
137
+ MemoryMB : intToPtr (256 ),
138
+ }).
139
+ SetLogConfig (& LogConfig {
140
+ MaxFiles : intToPtr (1 ),
141
+ MaxFileSizeMB : intToPtr (2 ),
142
+ })
143
+
144
+ group1 := NewTaskGroup ("group1" , 1 ).
145
+ AddTask (task ).
146
+ RequireDisk (& EphemeralDisk {
147
+ SizeMB : intToPtr (25 ),
148
+ })
149
+ group2 := NewTaskGroup ("group2" , 2 ).
150
+ AddTask (task ).
151
+ RequireDisk (& EphemeralDisk {
152
+ SizeMB : intToPtr (25 ),
153
+ })
154
+
155
+ job := NewBatchJob ("job" , "redis" , "global" , 1 ).
156
+ AddDatacenter ("dc1" ).
157
+ AddTaskGroup (group1 ).
158
+ AddTaskGroup (group2 )
159
+
160
+ // Create a job and register it
161
+ resp2 , wm , err := jobs .Register (job , nil )
162
+ require .Nil (err )
163
+ require .NotNil (resp2 )
164
+ require .NotEmpty (resp2 .EvalID )
165
+ assertWriteMeta (t , wm )
166
+
167
+ // Update the job, new groups to test PreserveCounts
168
+ group1 .Count = intToPtr (0 )
169
+ group2 .Count = nil
170
+ group3 := NewTaskGroup ("group3" , 3 ).
171
+ AddTask (task ).
172
+ RequireDisk (& EphemeralDisk {
173
+ SizeMB : intToPtr (25 ),
174
+ })
175
+ job .AddTaskGroup (group3 )
176
+
177
+ // Update the job, with PreserveCounts = default [false]
178
+ _ , _ , err = jobs .Register (job , nil )
179
+ require .NoError (err )
180
+
181
+ // Query the job scale status
182
+ status , _ , err := jobs .ScaleStatus (* job .ID , nil )
183
+ require .NoError (err )
184
+ require .Equal (0 , status .TaskGroups ["group1" ].Desired ) // present => as specified
185
+ require .Equal (1 , status .TaskGroups ["group2" ].Desired ) // nil => default (1)
186
+ require .Equal (3 , status .TaskGroups ["group3" ].Desired ) // new => as specified
187
+ }
188
+
47
189
func TestJobs_Validate (t * testing.T ) {
48
190
t .Parallel ()
49
191
c , s := makeClient (t , nil , nil )
0 commit comments