@@ -20,6 +20,7 @@ import (
2020 "context"
2121 "testing"
2222
23+ "github.com/stretchr/testify/require"
2324 apiv1 "k8s.io/api/core/v1"
2425 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -120,18 +121,92 @@ func TestIncreaseSize(t *testing.T) {
120121}
121122
122123func TestDeleteNodes (t * testing.T ) {
123- ng := makeTestNodeGroup ("ng-1" , "uid-1" , 0 , 5 , 3 )
124- validNode := & apiv1.Node {
125- ObjectMeta : metav1.ObjectMeta {
126- Name : "node1" ,
127- Labels : map [string ]string {coreWeaveNodePoolUID : "uid-1" },
124+ initialTargetSize := int64 (3 )
125+
126+ testCases := map [string ]struct {
127+ nodesToDelete []* apiv1.Node
128+ expectedTargetSize int
129+ expectedError error
130+ }{
131+ "reduce-target-size-by-one-node" : {
132+ nodesToDelete : []* apiv1.Node {
133+ {
134+ ObjectMeta : metav1.ObjectMeta {
135+ Name : "node1" ,
136+ Labels : map [string ]string {coreWeaveNodePoolUID : "uid-1" },
137+ },
138+ },
139+ },
140+ expectedTargetSize : 2 ,
141+ },
142+ "reduce-target-size-by-three-node" : {
143+ nodesToDelete : []* apiv1.Node {
144+ {
145+ ObjectMeta : metav1.ObjectMeta {
146+ Name : "node1" ,
147+ Labels : map [string ]string {coreWeaveNodePoolUID : "uid-1" },
148+ },
149+ },
150+ {
151+ ObjectMeta : metav1.ObjectMeta {
152+ Name : "node2" ,
153+ Labels : map [string ]string {coreWeaveNodePoolUID : "uid-1" },
154+ },
155+ },
156+ {
157+ ObjectMeta : metav1.ObjectMeta {
158+ Name : "node3" ,
159+ Labels : map [string ]string {coreWeaveNodePoolUID : "uid-1" },
160+ },
161+ },
162+ },
163+ expectedTargetSize : 0 ,
128164 },
129165 }
130- nodes := []* apiv1.Node {
131- validNode ,
166+
167+ for name , tc := range testCases {
168+ t .Run (name , func (t * testing.T ) {
169+ ng := makeTestNodeGroup ("ng-1" , "uid-1" , 0 , 5 , initialTargetSize )
170+
171+ err := ng .DeleteNodes (tc .nodesToDelete )
172+ if tc .expectedError != nil {
173+ require .Equal (t , tc .expectedError , err )
174+ return
175+ }
176+ require .NoError (t , err )
177+ require .Equal (t , ng .nodepool .GetTargetSize (), tc .expectedTargetSize )
178+ })
132179 }
133- err := ng .DeleteNodes (nodes )
134- if err != nil && err != cloudprovider .ErrNotImplemented {
135- t .Errorf ("expected ErrNotImplemented or nil, got %v" , err )
180+ }
181+
182+ func TestDecreaseTargetSize (t * testing.T ) {
183+ testCases := map [string ]struct {
184+ delta int
185+ expectedTargetSize int
186+ expectedError error
187+ }{
188+ "positive-delta" : {
189+ delta : 2 ,
190+ expectedTargetSize : 1 ,
191+ },
192+ "negative-delta" : {
193+ delta : - 2 ,
194+ expectedTargetSize : 1 ,
195+ },
196+ }
197+
198+ for name , tc := range testCases {
199+ t .Run (name , func (t * testing.T ) {
200+ ng := makeTestNodeGroup ("ng-1" , "uid-1" , 1 , 5 , 3 )
201+
202+ err := ng .DecreaseTargetSize (tc .delta )
203+ if tc .expectedError != nil {
204+ require .Error (t , err )
205+ require .Equal (t , tc .expectedError , err )
206+ return
207+ }
208+ require .NoError (t , err )
209+ require .Equal (t , tc .expectedTargetSize , ng .nodepool .GetTargetSize ())
210+ })
136211 }
137212}
0 commit comments