Skip to content

Commit a05581c

Browse files
author
Daman Arora
committed
add unit tests
1 parent 96c0705 commit a05581c

File tree

3 files changed

+320
-0
lines changed

3 files changed

+320
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
package com.cloud.kubernetes.cluster;
18+
19+
import org.junit.Assert;
20+
import org.junit.Test;
21+
22+
public class KubernetesClusterAffinityGroupMapVOTest {
23+
24+
@Test
25+
public void testConstructorAndGetters() {
26+
KubernetesClusterAffinityGroupMapVO vo =
27+
new KubernetesClusterAffinityGroupMapVO(1L, "CONTROL", 100L);
28+
29+
Assert.assertEquals(1L, vo.getClusterId());
30+
Assert.assertEquals("CONTROL", vo.getNodeType());
31+
Assert.assertEquals(100L, vo.getAffinityGroupId());
32+
}
33+
34+
@Test
35+
public void testDefaultConstructor() {
36+
KubernetesClusterAffinityGroupMapVO vo = new KubernetesClusterAffinityGroupMapVO();
37+
Assert.assertNotNull(vo);
38+
}
39+
40+
@Test
41+
public void testSetClusterId() {
42+
KubernetesClusterAffinityGroupMapVO vo = new KubernetesClusterAffinityGroupMapVO();
43+
vo.setClusterId(2L);
44+
Assert.assertEquals(2L, vo.getClusterId());
45+
}
46+
47+
@Test
48+
public void testSetNodeType() {
49+
KubernetesClusterAffinityGroupMapVO vo = new KubernetesClusterAffinityGroupMapVO();
50+
vo.setNodeType("WORKER");
51+
Assert.assertEquals("WORKER", vo.getNodeType());
52+
}
53+
54+
@Test
55+
public void testSetAffinityGroupId() {
56+
KubernetesClusterAffinityGroupMapVO vo = new KubernetesClusterAffinityGroupMapVO();
57+
vo.setAffinityGroupId(200L);
58+
Assert.assertEquals(200L, vo.getAffinityGroupId());
59+
}
60+
61+
@Test
62+
public void testAllNodeTypes() {
63+
KubernetesClusterAffinityGroupMapVO controlVo =
64+
new KubernetesClusterAffinityGroupMapVO(1L, "CONTROL", 10L);
65+
KubernetesClusterAffinityGroupMapVO workerVo =
66+
new KubernetesClusterAffinityGroupMapVO(1L, "WORKER", 20L);
67+
KubernetesClusterAffinityGroupMapVO etcdVo =
68+
new KubernetesClusterAffinityGroupMapVO(1L, "ETCD", 30L);
69+
70+
Assert.assertEquals("CONTROL", controlVo.getNodeType());
71+
Assert.assertEquals("WORKER", workerVo.getNodeType());
72+
Assert.assertEquals("ETCD", etcdVo.getNodeType());
73+
}
74+
75+
@Test
76+
public void testSettersChain() {
77+
KubernetesClusterAffinityGroupMapVO vo = new KubernetesClusterAffinityGroupMapVO();
78+
79+
vo.setClusterId(5L);
80+
vo.setNodeType("ETCD");
81+
vo.setAffinityGroupId(500L);
82+
83+
Assert.assertEquals(5L, vo.getClusterId());
84+
Assert.assertEquals("ETCD", vo.getNodeType());
85+
Assert.assertEquals(500L, vo.getAffinityGroupId());
86+
}
87+
}

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

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.cloud.exception.InvalidParameterValueException;
2727
import com.cloud.exception.PermissionDeniedException;
2828
import com.cloud.kubernetes.cluster.actionworkers.KubernetesClusterActionWorker;
29+
import com.cloud.kubernetes.cluster.dao.KubernetesClusterAffinityGroupMapDao;
2930
import com.cloud.kubernetes.cluster.dao.KubernetesClusterDao;
3031
import com.cloud.kubernetes.cluster.dao.KubernetesClusterVmMapDao;
3132
import com.cloud.kubernetes.version.KubernetesSupportedVersion;
@@ -46,9 +47,12 @@
4647
import com.cloud.utils.net.NetUtils;
4748
import com.cloud.vm.VMInstanceVO;
4849
import com.cloud.vm.dao.VMInstanceDao;
50+
import org.apache.cloudstack.affinity.AffinityGroupVO;
51+
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
4952
import org.apache.cloudstack.api.BaseCmd;
5053
import org.apache.cloudstack.api.command.user.kubernetes.cluster.AddVirtualMachinesToKubernetesClusterCmd;
5154
import org.apache.cloudstack.api.command.user.kubernetes.cluster.RemoveVirtualMachinesFromKubernetesClusterCmd;
55+
import org.apache.cloudstack.api.response.KubernetesClusterResponse;
5256
import org.apache.cloudstack.context.CallContext;
5357
import org.apache.cloudstack.framework.config.ConfigKey;
5458
import org.apache.commons.collections.MapUtils;
@@ -103,6 +107,12 @@ public class KubernetesClusterManagerImplTest {
103107
@Mock
104108
private ServiceOfferingDao serviceOfferingDao;
105109

110+
@Mock
111+
private KubernetesClusterAffinityGroupMapDao kubernetesClusterAffinityGroupMapDao;
112+
113+
@Mock
114+
private AffinityGroupDao affinityGroupDao;
115+
106116
@Spy
107117
@InjectMocks
108118
KubernetesClusterManagerImpl kubernetesClusterManager;
@@ -441,4 +451,128 @@ public void testGetCksClusterPreferredArchSameArch() {
441451
String cksClusterPreferredArch = kubernetesClusterManager.getCksClusterPreferredArch(systemVMArch, cksIso);
442452
Assert.assertEquals(CPU.CPUArch.amd64.getType(), cksClusterPreferredArch);
443453
}
454+
455+
@Test
456+
public void testSetAffinityGroupResponseForNodeTypeControl() {
457+
KubernetesClusterResponse response = new KubernetesClusterResponse();
458+
long clusterId = 1L;
459+
460+
AffinityGroupVO ag1 = Mockito.mock(AffinityGroupVO.class);
461+
AffinityGroupVO ag2 = Mockito.mock(AffinityGroupVO.class);
462+
Mockito.when(ag1.getUuid()).thenReturn("uuid-1");
463+
Mockito.when(ag1.getName()).thenReturn("affinity-group-1");
464+
Mockito.when(ag2.getUuid()).thenReturn("uuid-2");
465+
Mockito.when(ag2.getName()).thenReturn("affinity-group-2");
466+
467+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(clusterId, CONTROL.name()))
468+
.thenReturn(Arrays.asList(1L, 2L));
469+
Mockito.when(affinityGroupDao.findById(1L)).thenReturn(ag1);
470+
Mockito.when(affinityGroupDao.findById(2L)).thenReturn(ag2);
471+
472+
kubernetesClusterManager.setAffinityGroupResponseForNodeType(response, clusterId, CONTROL.name());
473+
474+
Mockito.verify(kubernetesClusterAffinityGroupMapDao).listAffinityGroupIdsByClusterIdAndNodeType(clusterId, CONTROL.name());
475+
Mockito.verify(affinityGroupDao).findById(1L);
476+
Mockito.verify(affinityGroupDao).findById(2L);
477+
}
478+
479+
@Test
480+
public void testSetAffinityGroupResponseForNodeTypeWorker() {
481+
KubernetesClusterResponse response = new KubernetesClusterResponse();
482+
long clusterId = 1L;
483+
484+
AffinityGroupVO ag = Mockito.mock(AffinityGroupVO.class);
485+
Mockito.when(ag.getUuid()).thenReturn("worker-uuid");
486+
Mockito.when(ag.getName()).thenReturn("worker-affinity");
487+
488+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(clusterId, WORKER.name()))
489+
.thenReturn(Arrays.asList(10L));
490+
Mockito.when(affinityGroupDao.findById(10L)).thenReturn(ag);
491+
492+
kubernetesClusterManager.setAffinityGroupResponseForNodeType(response, clusterId, WORKER.name());
493+
494+
Mockito.verify(kubernetesClusterAffinityGroupMapDao).listAffinityGroupIdsByClusterIdAndNodeType(clusterId, WORKER.name());
495+
Mockito.verify(affinityGroupDao).findById(10L);
496+
}
497+
498+
@Test
499+
public void testSetAffinityGroupResponseForNodeTypeEtcd() {
500+
KubernetesClusterResponse response = new KubernetesClusterResponse();
501+
long clusterId = 1L;
502+
503+
AffinityGroupVO ag = Mockito.mock(AffinityGroupVO.class);
504+
Mockito.when(ag.getUuid()).thenReturn("etcd-uuid");
505+
Mockito.when(ag.getName()).thenReturn("etcd-affinity");
506+
507+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(clusterId, ETCD.name()))
508+
.thenReturn(Arrays.asList(20L));
509+
Mockito.when(affinityGroupDao.findById(20L)).thenReturn(ag);
510+
511+
kubernetesClusterManager.setAffinityGroupResponseForNodeType(response, clusterId, ETCD.name());
512+
513+
Mockito.verify(kubernetesClusterAffinityGroupMapDao).listAffinityGroupIdsByClusterIdAndNodeType(clusterId, ETCD.name());
514+
Mockito.verify(affinityGroupDao).findById(20L);
515+
}
516+
517+
@Test
518+
public void testSetAffinityGroupResponseForNodeTypeEmptyList() {
519+
KubernetesClusterResponse response = new KubernetesClusterResponse();
520+
long clusterId = 1L;
521+
522+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(clusterId, CONTROL.name()))
523+
.thenReturn(Collections.emptyList());
524+
525+
kubernetesClusterManager.setAffinityGroupResponseForNodeType(response, clusterId, CONTROL.name());
526+
527+
Mockito.verify(affinityGroupDao, Mockito.never()).findById(Mockito.anyLong());
528+
}
529+
530+
@Test
531+
public void testSetAffinityGroupResponseForNodeTypeNullList() {
532+
KubernetesClusterResponse response = new KubernetesClusterResponse();
533+
long clusterId = 1L;
534+
535+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(clusterId, ETCD.name()))
536+
.thenReturn(null);
537+
538+
kubernetesClusterManager.setAffinityGroupResponseForNodeType(response, clusterId, ETCD.name());
539+
540+
Mockito.verify(affinityGroupDao, Mockito.never()).findById(Mockito.anyLong());
541+
}
542+
543+
@Test
544+
public void testSetAffinityGroupResponseForNodeTypeNullAffinityGroup() {
545+
KubernetesClusterResponse response = new KubernetesClusterResponse();
546+
long clusterId = 1L;
547+
548+
AffinityGroupVO ag1 = Mockito.mock(AffinityGroupVO.class);
549+
Mockito.when(ag1.getUuid()).thenReturn("uuid-1");
550+
Mockito.when(ag1.getName()).thenReturn("affinity-group-1");
551+
552+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(clusterId, CONTROL.name()))
553+
.thenReturn(Arrays.asList(1L, 2L));
554+
Mockito.when(affinityGroupDao.findById(1L)).thenReturn(ag1);
555+
Mockito.when(affinityGroupDao.findById(2L)).thenReturn(null);
556+
557+
kubernetesClusterManager.setAffinityGroupResponseForNodeType(response, clusterId, CONTROL.name());
558+
559+
Mockito.verify(affinityGroupDao).findById(1L);
560+
Mockito.verify(affinityGroupDao).findById(2L);
561+
}
562+
563+
@Test
564+
public void testSetNodeTypeAffinityGroupResponse() {
565+
KubernetesClusterResponse response = new KubernetesClusterResponse();
566+
long clusterId = 1L;
567+
568+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(Mockito.eq(clusterId), Mockito.anyString()))
569+
.thenReturn(Collections.emptyList());
570+
571+
kubernetesClusterManager.setNodeTypeAffinityGroupResponse(response, clusterId);
572+
573+
Mockito.verify(kubernetesClusterAffinityGroupMapDao).listAffinityGroupIdsByClusterIdAndNodeType(clusterId, CONTROL.name());
574+
Mockito.verify(kubernetesClusterAffinityGroupMapDao).listAffinityGroupIdsByClusterIdAndNodeType(clusterId, WORKER.name());
575+
Mockito.verify(kubernetesClusterAffinityGroupMapDao).listAffinityGroupIdsByClusterIdAndNodeType(clusterId, ETCD.name());
576+
}
577+
444578
}

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

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@
1616
// under the License.
1717
package com.cloud.kubernetes.cluster.actionworkers;
1818

19+
import java.util.ArrayList;
20+
import java.util.Arrays;
21+
import java.util.Collections;
22+
import java.util.List;
1923
import java.util.UUID;
2024

25+
import org.apache.cloudstack.affinity.AffinityGroupVO;
26+
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
2127
import org.apache.cloudstack.api.ApiConstants;
2228
import org.junit.Assert;
2329
import org.junit.Before;
@@ -30,6 +36,8 @@
3036
import com.cloud.kubernetes.cluster.KubernetesCluster;
3137
import com.cloud.kubernetes.cluster.KubernetesClusterDetailsVO;
3238
import com.cloud.kubernetes.cluster.KubernetesClusterManagerImpl;
39+
import com.cloud.kubernetes.cluster.KubernetesServiceHelper.KubernetesClusterNodeType;
40+
import com.cloud.kubernetes.cluster.dao.KubernetesClusterAffinityGroupMapDao;
3341
import com.cloud.kubernetes.cluster.dao.KubernetesClusterDao;
3442
import com.cloud.kubernetes.cluster.dao.KubernetesClusterDetailsDao;
3543
import com.cloud.kubernetes.cluster.dao.KubernetesClusterVmMapDao;
@@ -60,6 +68,12 @@ public class KubernetesClusterActionWorkerTest {
6068
@Mock
6169
IPAddressDao ipAddressDao;
6270

71+
@Mock
72+
KubernetesClusterAffinityGroupMapDao kubernetesClusterAffinityGroupMapDao;
73+
74+
@Mock
75+
AffinityGroupDao affinityGroupDao;
76+
6377
KubernetesClusterActionWorker actionWorker = null;
6478

6579
final static Long DEFAULT_ID = 1L;
@@ -70,10 +84,12 @@ public void setUp() throws Exception {
7084
kubernetesClusterManager.kubernetesSupportedVersionDao = kubernetesSupportedVersionDao;
7185
kubernetesClusterManager.kubernetesClusterDetailsDao = kubernetesClusterDetailsDao;
7286
kubernetesClusterManager.kubernetesClusterVmMapDao = kubernetesClusterVmMapDao;
87+
kubernetesClusterManager.kubernetesClusterAffinityGroupMapDao = kubernetesClusterAffinityGroupMapDao;
7388
KubernetesCluster kubernetesCluster = Mockito.mock(KubernetesCluster.class);
7489
Mockito.when(kubernetesCluster.getId()).thenReturn(DEFAULT_ID);
7590
actionWorker = new KubernetesClusterActionWorker(kubernetesCluster, kubernetesClusterManager);
7691
actionWorker.ipAddressDao = ipAddressDao;
92+
actionWorker.affinityGroupDao = affinityGroupDao;
7793
}
7894

7995
@Test
@@ -130,4 +146,87 @@ public void testGetVpcTierKubernetesPublicIpValid() {
130146
IpAddress result = actionWorker.getVpcTierKubernetesPublicIp(mockNetworkForGetVpcTierKubernetesPublicIpTest());
131147
Assert.assertNotNull(result);
132148
}
149+
150+
@Test
151+
public void testGetAffinityGroupIdsForNodeTypeReturnsIds() {
152+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(DEFAULT_ID, "CONTROL"))
153+
.thenReturn(Arrays.asList(1L, 2L));
154+
155+
List<Long> result = actionWorker.getAffinityGroupIdsForNodeType(KubernetesClusterNodeType.CONTROL);
156+
157+
Assert.assertEquals(2, result.size());
158+
Assert.assertTrue(result.containsAll(Arrays.asList(1L, 2L)));
159+
}
160+
161+
@Test
162+
public void testGetAffinityGroupIdsForNodeTypeReturnsEmptyList() {
163+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(DEFAULT_ID, "WORKER"))
164+
.thenReturn(Collections.emptyList());
165+
166+
List<Long> result = actionWorker.getAffinityGroupIdsForNodeType(KubernetesClusterNodeType.WORKER);
167+
168+
Assert.assertTrue(result.isEmpty());
169+
}
170+
171+
@Test
172+
public void testGetMergedAffinityGroupIdsWithExplicitDedication() {
173+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(DEFAULT_ID, "CONTROL"))
174+
.thenReturn(new ArrayList<>(Arrays.asList(1L)));
175+
176+
AffinityGroupVO explicitGroup = Mockito.mock(AffinityGroupVO.class);
177+
Mockito.when(explicitGroup.getId()).thenReturn(99L);
178+
Mockito.when(affinityGroupDao.findByAccountAndType(Mockito.anyLong(), Mockito.eq("ExplicitDedication")))
179+
.thenReturn(explicitGroup);
180+
181+
List<Long> result = actionWorker.getMergedAffinityGroupIds(KubernetesClusterNodeType.CONTROL, 1L, 1L);
182+
183+
Assert.assertEquals(2, result.size());
184+
Assert.assertTrue(result.contains(1L));
185+
Assert.assertTrue(result.contains(99L));
186+
}
187+
188+
@Test
189+
public void testGetMergedAffinityGroupIdsNoExplicitDedication() {
190+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(DEFAULT_ID, "WORKER"))
191+
.thenReturn(new ArrayList<>(Arrays.asList(1L, 2L)));
192+
Mockito.when(affinityGroupDao.findByAccountAndType(Mockito.anyLong(), Mockito.eq("ExplicitDedication")))
193+
.thenReturn(null);
194+
Mockito.when(affinityGroupDao.findDomainLevelGroupByType(Mockito.anyLong(), Mockito.eq("ExplicitDedication")))
195+
.thenReturn(null);
196+
197+
List<Long> result = actionWorker.getMergedAffinityGroupIds(KubernetesClusterNodeType.WORKER, 1L, 1L);
198+
199+
Assert.assertEquals(2, result.size());
200+
}
201+
202+
@Test
203+
public void testGetMergedAffinityGroupIdsReturnsNullWhenEmpty() {
204+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(DEFAULT_ID, "ETCD"))
205+
.thenReturn(new ArrayList<>());
206+
Mockito.when(affinityGroupDao.findByAccountAndType(Mockito.anyLong(), Mockito.anyString()))
207+
.thenReturn(null);
208+
Mockito.when(affinityGroupDao.findDomainLevelGroupByType(Mockito.anyLong(), Mockito.anyString()))
209+
.thenReturn(null);
210+
211+
List<Long> result = actionWorker.getMergedAffinityGroupIds(KubernetesClusterNodeType.ETCD, 1L, 1L);
212+
213+
Assert.assertNull(result);
214+
}
215+
216+
@Test
217+
public void testGetMergedAffinityGroupIdsExplicitDedicationAlreadyInList() {
218+
Mockito.when(kubernetesClusterAffinityGroupMapDao.listAffinityGroupIdsByClusterIdAndNodeType(DEFAULT_ID, "CONTROL"))
219+
.thenReturn(new ArrayList<>(Arrays.asList(99L, 2L)));
220+
221+
AffinityGroupVO explicitGroup = Mockito.mock(AffinityGroupVO.class);
222+
Mockito.when(explicitGroup.getId()).thenReturn(99L);
223+
Mockito.when(affinityGroupDao.findByAccountAndType(Mockito.anyLong(), Mockito.eq("ExplicitDedication")))
224+
.thenReturn(explicitGroup);
225+
226+
List<Long> result = actionWorker.getMergedAffinityGroupIds(KubernetesClusterNodeType.CONTROL, 1L, 1L);
227+
228+
Assert.assertEquals(2, result.size());
229+
Assert.assertTrue(result.contains(99L));
230+
Assert.assertTrue(result.contains(2L));
231+
}
133232
}

0 commit comments

Comments
 (0)