Skip to content

Commit f84e7d9

Browse files
committed
add tests
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent ad123ee commit f84e7d9

File tree

1 file changed

+123
-68
lines changed

1 file changed

+123
-68
lines changed

plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImplTest.java

Lines changed: 123 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,35 @@
1919

2020
package com.cloud.kubernetes.cluster;
2121

22+
import static org.mockito.Mockito.doNothing;
23+
import static org.mockito.Mockito.doReturn;
24+
import static org.mockito.Mockito.doThrow;
25+
import static org.mockito.Mockito.verify;
26+
import static org.mockito.Mockito.verifyNoMoreInteractions;
27+
import static org.mockito.Mockito.when;
28+
29+
import java.lang.reflect.Field;
30+
import java.util.ArrayList;
31+
import java.util.Arrays;
32+
import java.util.Collections;
33+
import java.util.List;
34+
35+
import org.apache.cloudstack.api.BaseCmd;
36+
import org.apache.cloudstack.api.command.user.kubernetes.cluster.AddVirtualMachinesToKubernetesClusterCmd;
37+
import org.apache.cloudstack.api.command.user.kubernetes.cluster.RemoveVirtualMachinesFromKubernetesClusterCmd;
38+
import org.apache.cloudstack.context.CallContext;
39+
import org.apache.cloudstack.framework.config.ConfigKey;
40+
import org.junit.After;
41+
import org.junit.Assert;
42+
import org.junit.Before;
43+
import org.junit.Test;
44+
import org.junit.runner.RunWith;
45+
import org.mockito.InjectMocks;
46+
import org.mockito.Mock;
47+
import org.mockito.Mockito;
48+
import org.mockito.Spy;
49+
import org.mockito.junit.MockitoJUnitRunner;
50+
2251
import com.cloud.api.query.dao.TemplateJoinDao;
2352
import com.cloud.api.query.vo.TemplateJoinVO;
2453
import com.cloud.dc.DataCenter;
@@ -37,29 +66,9 @@
3766
import com.cloud.user.Account;
3867
import com.cloud.user.AccountManager;
3968
import com.cloud.user.User;
69+
import com.cloud.utils.exception.CloudRuntimeException;
4070
import com.cloud.vm.VMInstanceVO;
4171
import com.cloud.vm.dao.VMInstanceDao;
42-
import org.apache.cloudstack.api.BaseCmd;
43-
import org.apache.cloudstack.api.command.user.kubernetes.cluster.AddVirtualMachinesToKubernetesClusterCmd;
44-
import org.apache.cloudstack.api.command.user.kubernetes.cluster.RemoveVirtualMachinesFromKubernetesClusterCmd;
45-
import org.apache.cloudstack.context.CallContext;
46-
import org.apache.cloudstack.framework.config.ConfigKey;
47-
import org.junit.After;
48-
import org.junit.Assert;
49-
import org.junit.Before;
50-
import org.junit.Test;
51-
import org.junit.runner.RunWith;
52-
import org.mockito.InjectMocks;
53-
import org.mockito.Mock;
54-
import org.mockito.Mockito;
55-
import org.mockito.Spy;
56-
import org.mockito.junit.MockitoJUnitRunner;
57-
58-
import java.lang.reflect.Field;
59-
import java.util.ArrayList;
60-
import java.util.Arrays;
61-
import java.util.Collections;
62-
import java.util.List;
6372

6473
@RunWith(MockitoJUnitRunner.class)
6574
public class KubernetesClusterManagerImplTest {
@@ -89,26 +98,30 @@ public class KubernetesClusterManagerImplTest {
8998
@InjectMocks
9099
KubernetesClusterManagerImpl kubernetesClusterManager;
91100

101+
102+
@Mock
103+
private Account account;
104+
92105
@Test
93106
public void testValidateVpcTierAllocated() {
94107
Network network = Mockito.mock(Network.class);
95-
Mockito.when(network.getState()).thenReturn(Network.State.Allocated);
108+
when(network.getState()).thenReturn(Network.State.Allocated);
96109
kubernetesClusterManager.validateVpcTier(network);
97110
}
98111

99112
@Test(expected = InvalidParameterValueException.class)
100113
public void testValidateVpcTierDefaultDenyRule() {
101114
Network network = Mockito.mock(Network.class);
102-
Mockito.when(network.getState()).thenReturn(Network.State.Implemented);
103-
Mockito.when(network.getNetworkACLId()).thenReturn(NetworkACL.DEFAULT_DENY);
115+
when(network.getState()).thenReturn(Network.State.Implemented);
116+
when(network.getNetworkACLId()).thenReturn(NetworkACL.DEFAULT_DENY);
104117
kubernetesClusterManager.validateVpcTier(network);
105118
}
106119

107120
@Test
108121
public void testValidateVpcTierValid() {
109122
Network network = Mockito.mock(Network.class);
110-
Mockito.when(network.getState()).thenReturn(Network.State.Implemented);
111-
Mockito.when(network.getNetworkACLId()).thenReturn(NetworkACL.DEFAULT_ALLOW);
123+
when(network.getState()).thenReturn(Network.State.Implemented);
124+
when(network.getNetworkACLId()).thenReturn(NetworkACL.DEFAULT_ALLOW);
112125
kubernetesClusterManager.validateVpcTier(network);
113126
}
114127

@@ -117,7 +130,7 @@ public void validateIsolatedNetworkIpRulesNoRules() {
117130
long ipId = 1L;
118131
FirewallRule.Purpose purpose = FirewallRule.Purpose.Firewall;
119132
Network network = Mockito.mock(Network.class);
120-
Mockito.when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(new ArrayList<>());
133+
when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(new ArrayList<>());
121134
kubernetesClusterManager.validateIsolatedNetworkIpRules(ipId, FirewallRule.Purpose.Firewall, network, 3);
122135
}
123136

@@ -131,7 +144,7 @@ public void validateIsolatedNetworkIpRulesNoConflictingRules() {
131144
long ipId = 1L;
132145
FirewallRule.Purpose purpose = FirewallRule.Purpose.Firewall;
133146
Network network = Mockito.mock(Network.class);
134-
Mockito.when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(80, 80), createRule(443, 443)));
147+
when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(80, 80), createRule(443, 443)));
135148
kubernetesClusterManager.validateIsolatedNetworkIpRules(ipId, FirewallRule.Purpose.Firewall, network, 3);
136149
}
137150

@@ -140,7 +153,7 @@ public void validateIsolatedNetworkIpRulesApiConflictingRules() {
140153
long ipId = 1L;
141154
FirewallRule.Purpose purpose = FirewallRule.Purpose.Firewall;
142155
Network network = Mockito.mock(Network.class);
143-
Mockito.when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(6440, 6445), createRule(443, 443)));
156+
when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(6440, 6445), createRule(443, 443)));
144157
kubernetesClusterManager.validateIsolatedNetworkIpRules(ipId, FirewallRule.Purpose.Firewall, network, 3);
145158
}
146159

@@ -149,7 +162,7 @@ public void validateIsolatedNetworkIpRulesSshConflictingRules() {
149162
long ipId = 1L;
150163
FirewallRule.Purpose purpose = FirewallRule.Purpose.Firewall;
151164
Network network = Mockito.mock(Network.class);
152-
Mockito.when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(2200, KubernetesClusterActionWorker.CLUSTER_NODES_DEFAULT_START_SSH_PORT), createRule(443, 443)));
165+
when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(2200, KubernetesClusterActionWorker.CLUSTER_NODES_DEFAULT_START_SSH_PORT), createRule(443, 443)));
153166
kubernetesClusterManager.validateIsolatedNetworkIpRules(ipId, FirewallRule.Purpose.Firewall, network, 3);
154167
}
155168

@@ -158,7 +171,7 @@ public void validateIsolatedNetworkIpRulesNearConflictingRules() {
158171
long ipId = 1L;
159172
FirewallRule.Purpose purpose = FirewallRule.Purpose.Firewall;
160173
Network network = Mockito.mock(Network.class);
161-
Mockito.when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(2220, 2221), createRule(2225, 2227), createRule(6440, 6442), createRule(6444, 6446)));
174+
when(firewallRulesDao.listByIpAndPurposeAndNotRevoked(ipId, purpose)).thenReturn(List.of(createRule(2220, 2221), createRule(2225, 2227), createRule(6440, 6442), createRule(6444, 6446)));
162175
kubernetesClusterManager.validateIsolatedNetworkIpRules(ipId, FirewallRule.Purpose.Firewall, network, 3);
163176
}
164177

@@ -171,74 +184,74 @@ public void testValidateKubernetesClusterScaleSizeNullNewSizeNoError() {
171184
public void testValidateKubernetesClusterScaleSizeSameNewSizeNoError() {
172185
Long size = 2L;
173186
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
174-
Mockito.when(clusterVO.getNodeCount()).thenReturn(size);
187+
when(clusterVO.getNodeCount()).thenReturn(size);
175188
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, size, 100, Mockito.mock(DataCenter.class));
176189
}
177190

178191
@Test(expected = PermissionDeniedException.class)
179192
public void testValidateKubernetesClusterScaleSizeStoppedCluster() {
180193
Long size = 2L;
181194
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
182-
Mockito.when(clusterVO.getNodeCount()).thenReturn(size);
183-
Mockito.when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Stopped);
195+
when(clusterVO.getNodeCount()).thenReturn(size);
196+
when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Stopped);
184197
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, 3L, 100, Mockito.mock(DataCenter.class));
185198
}
186199

187200
@Test(expected = InvalidParameterValueException.class)
188201
public void testValidateKubernetesClusterScaleSizeZeroNewSize() {
189202
Long size = 2L;
190203
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
191-
Mockito.when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
192-
Mockito.when(clusterVO.getNodeCount()).thenReturn(size);
204+
when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
205+
when(clusterVO.getNodeCount()).thenReturn(size);
193206
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, 0L, 100, Mockito.mock(DataCenter.class));
194207
}
195208

196209
@Test(expected = InvalidParameterValueException.class)
197210
public void testValidateKubernetesClusterScaleSizeOverMaxSize() {
198211
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
199-
Mockito.when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
200-
Mockito.when(clusterVO.getControlNodeCount()).thenReturn(1L);
212+
when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
213+
when(clusterVO.getControlNodeCount()).thenReturn(1L);
201214
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, 4L, 4, Mockito.mock(DataCenter.class));
202215
}
203216

204217
@Test
205218
public void testValidateKubernetesClusterScaleSizeDownscaleNoError() {
206219
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
207-
Mockito.when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
208-
Mockito.when(clusterVO.getControlNodeCount()).thenReturn(1L);
209-
Mockito.when(clusterVO.getNodeCount()).thenReturn(4L);
220+
when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
221+
when(clusterVO.getControlNodeCount()).thenReturn(1L);
222+
when(clusterVO.getNodeCount()).thenReturn(4L);
210223
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, 2L, 10, Mockito.mock(DataCenter.class));
211224
}
212225

213226
@Test(expected = InvalidParameterValueException.class)
214227
public void testValidateKubernetesClusterScaleSizeUpscaleDeletedTemplate() {
215228
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
216-
Mockito.when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
217-
Mockito.when(clusterVO.getControlNodeCount()).thenReturn(1L);
218-
Mockito.when(clusterVO.getNodeCount()).thenReturn(2L);
219-
Mockito.when(templateDao.findById(Mockito.anyLong())).thenReturn(null);
229+
when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
230+
when(clusterVO.getControlNodeCount()).thenReturn(1L);
231+
when(clusterVO.getNodeCount()).thenReturn(2L);
232+
when(templateDao.findById(Mockito.anyLong())).thenReturn(null);
220233
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, 4L, 10, Mockito.mock(DataCenter.class));
221234
}
222235

223236
@Test(expected = InvalidParameterValueException.class)
224237
public void testValidateKubernetesClusterScaleSizeUpscaleNotInZoneTemplate() {
225238
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
226-
Mockito.when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
227-
Mockito.when(clusterVO.getControlNodeCount()).thenReturn(1L);
228-
Mockito.when(clusterVO.getNodeCount()).thenReturn(2L);
229-
Mockito.when(templateDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(VMTemplateVO.class));
230-
Mockito.when(templateJoinDao.newTemplateView(Mockito.any(VMTemplateVO.class), Mockito.anyLong(), Mockito.anyBoolean())).thenReturn(null);
239+
when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
240+
when(clusterVO.getControlNodeCount()).thenReturn(1L);
241+
when(clusterVO.getNodeCount()).thenReturn(2L);
242+
when(templateDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(VMTemplateVO.class));
243+
when(templateJoinDao.newTemplateView(Mockito.any(VMTemplateVO.class), Mockito.anyLong(), Mockito.anyBoolean())).thenReturn(null);
231244
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, 4L, 10, Mockito.mock(DataCenter.class));
232245
}
233246

234247
@Test
235248
public void testValidateKubernetesClusterScaleSizeUpscaleNoError() {
236249
KubernetesClusterVO clusterVO = Mockito.mock(KubernetesClusterVO.class);
237-
Mockito.when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
238-
Mockito.when(clusterVO.getControlNodeCount()).thenReturn(1L);
239-
Mockito.when(clusterVO.getNodeCount()).thenReturn(2L);
240-
Mockito.when(templateDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(VMTemplateVO.class));
241-
Mockito.when(templateJoinDao.newTemplateView(Mockito.any(VMTemplateVO.class), Mockito.anyLong(), Mockito.anyBoolean())).thenReturn(List.of(Mockito.mock(TemplateJoinVO.class)));
250+
when(clusterVO.getState()).thenReturn(KubernetesCluster.State.Running);
251+
when(clusterVO.getControlNodeCount()).thenReturn(1L);
252+
when(clusterVO.getNodeCount()).thenReturn(2L);
253+
when(templateDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(VMTemplateVO.class));
254+
when(templateJoinDao.newTemplateView(Mockito.any(VMTemplateVO.class), Mockito.anyLong(), Mockito.anyBoolean())).thenReturn(List.of(Mockito.mock(TemplateJoinVO.class)));
242255
kubernetesClusterManager.validateKubernetesClusterScaleSize(clusterVO, 4L, 10, Mockito.mock(DataCenter.class));
243256

244257
}
@@ -247,7 +260,7 @@ public void testValidateKubernetesClusterScaleSizeUpscaleNoError() {
247260
public void setUp() throws Exception {
248261
CallContext.register(Mockito.mock(User.class), Mockito.mock(Account.class));
249262
overrideDefaultConfigValue(KubernetesClusterService.KubernetesServiceEnabled, "_defaultValue", "true");
250-
Mockito.doNothing().when(accountManager).checkAccess(
263+
doNothing().when(accountManager).checkAccess(
251264
Mockito.any(Account.class), Mockito.any(), Mockito.anyBoolean(), Mockito.any());
252265
}
253266

@@ -269,13 +282,13 @@ public void addVmsToCluster() {
269282
AddVirtualMachinesToKubernetesClusterCmd cmd = Mockito.mock(AddVirtualMachinesToKubernetesClusterCmd.class);
270283
List<Long> vmIds = Arrays.asList(1L, 2L, 3L);
271284

272-
Mockito.when(cmd.getId()).thenReturn(1L);
273-
Mockito.when(cmd.getVmIds()).thenReturn(vmIds);
274-
Mockito.when(cmd.getActualCommandName()).thenReturn(BaseCmd.getCommandNameByClass(RemoveVirtualMachinesFromKubernetesClusterCmd.class));
275-
Mockito.when(cluster.getClusterType()).thenReturn(KubernetesCluster.ClusterType.ExternalManaged);
276-
Mockito.when(vmInstanceDao.findById(Mockito.anyLong())).thenReturn(vm);
277-
Mockito.when(kubernetesClusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
278-
Mockito.when(kubernetesClusterVmMapDao.listByClusterIdAndVmIdsIn(1L, vmIds)).thenReturn(Collections.emptyList());
285+
when(cmd.getId()).thenReturn(1L);
286+
when(cmd.getVmIds()).thenReturn(vmIds);
287+
when(cmd.getActualCommandName()).thenReturn(BaseCmd.getCommandNameByClass(RemoveVirtualMachinesFromKubernetesClusterCmd.class));
288+
when(cluster.getClusterType()).thenReturn(KubernetesCluster.ClusterType.ExternalManaged);
289+
when(vmInstanceDao.findById(Mockito.anyLong())).thenReturn(vm);
290+
when(kubernetesClusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
291+
when(kubernetesClusterVmMapDao.listByClusterIdAndVmIdsIn(1L, vmIds)).thenReturn(Collections.emptyList());
279292
Assert.assertTrue(kubernetesClusterManager.addVmsToCluster(cmd));
280293
}
281294

@@ -285,11 +298,53 @@ public void removeVmsFromCluster() {
285298
RemoveVirtualMachinesFromKubernetesClusterCmd cmd = Mockito.mock(RemoveVirtualMachinesFromKubernetesClusterCmd.class);
286299
List<Long> vmIds = Arrays.asList(1L, 2L, 3L);
287300

288-
Mockito.when(cmd.getId()).thenReturn(1L);
289-
Mockito.when(cmd.getVmIds()).thenReturn(vmIds);
290-
Mockito.when(cmd.getActualCommandName()).thenReturn(BaseCmd.getCommandNameByClass(RemoveVirtualMachinesFromKubernetesClusterCmd.class));
291-
Mockito.when(cluster.getClusterType()).thenReturn(KubernetesCluster.ClusterType.ExternalManaged);
292-
Mockito.when(kubernetesClusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
301+
when(cmd.getId()).thenReturn(1L);
302+
when(cmd.getVmIds()).thenReturn(vmIds);
303+
when(cmd.getActualCommandName()).thenReturn(BaseCmd.getCommandNameByClass(RemoveVirtualMachinesFromKubernetesClusterCmd.class));
304+
when(cluster.getClusterType()).thenReturn(KubernetesCluster.ClusterType.ExternalManaged);
305+
when(kubernetesClusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
293306
Assert.assertTrue(kubernetesClusterManager.removeVmsFromCluster(cmd).size() > 0);
294307
}
308+
309+
@Test
310+
public void testCleanupForAccount_NoClusters() {
311+
when(account.getId()).thenReturn(123L);
312+
when(kubernetesClusterDao.listForCleanupByAccount(123L)).thenReturn(Collections.emptyList());
313+
314+
kubernetesClusterManager.cleanupForAccount(account);
315+
316+
verify(kubernetesClusterDao).listForCleanupByAccount(123L);
317+
verifyNoMoreInteractions(kubernetesClusterDao);
318+
}
319+
320+
@Test
321+
public void testCleanupForAccount_SuccessfulCleanup() {
322+
KubernetesClusterVO cluster = Mockito.mock(KubernetesClusterVO.class);
323+
when(account.getId()).thenReturn(123L);
324+
when(kubernetesClusterDao.listForCleanupByAccount(123L)).thenReturn(List.of(cluster));
325+
326+
doReturn(true).when(kubernetesClusterManager).destroyKubernetesCluster(cluster);
327+
328+
kubernetesClusterManager.cleanupForAccount(account);
329+
330+
verify(kubernetesClusterDao).listForCleanupByAccount(123L);
331+
verify(kubernetesClusterManager).destroyKubernetesCluster(cluster);
332+
}
333+
334+
@Test
335+
public void testCleanupForAccount_ClusterCleanupFails() {
336+
KubernetesClusterVO cluster = Mockito.mock(KubernetesClusterVO.class);
337+
when(account.getId()).thenReturn(123L);
338+
when(cluster.getName()).thenReturn("failed-cluster");
339+
when(kubernetesClusterDao.listForCleanupByAccount(123L)).thenReturn(List.of(cluster));
340+
341+
doThrow(new CloudRuntimeException("Error destroying cluster"))
342+
.when(kubernetesClusterManager)
343+
.destroyKubernetesCluster(cluster);
344+
345+
kubernetesClusterManager.cleanupForAccount(account);
346+
347+
verify(kubernetesClusterDao).listForCleanupByAccount(123L);
348+
verify(kubernetesClusterManager).destroyKubernetesCluster(cluster);
349+
}
295350
}

0 commit comments

Comments
 (0)