Skip to content

Commit be7b202

Browse files
committed
added unit test for VmIngestionManagerImpl
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent edeffd8 commit be7b202

1 file changed

Lines changed: 253 additions & 0 deletions

File tree

Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
package org.apache.cloudstack.ingestion;
2+
3+
import static org.mockito.Mockito.when;
4+
5+
import java.net.URI;
6+
import java.util.ArrayList;
7+
import java.util.HashMap;
8+
import java.util.LinkedHashMap;
9+
import java.util.List;
10+
import java.util.UUID;
11+
12+
import org.apache.cloudstack.api.ResponseGenerator;
13+
import org.apache.cloudstack.api.ResponseObject;
14+
import org.apache.cloudstack.api.ServerApiException;
15+
import org.apache.cloudstack.api.command.admin.ingestion.ImportUnmanageInstanceCmd;
16+
import org.apache.cloudstack.api.command.admin.ingestion.ListUnmanagedInstancesCmd;
17+
import org.apache.cloudstack.api.response.ListResponse;
18+
import org.apache.cloudstack.api.response.UserVmResponse;
19+
import org.apache.cloudstack.context.CallContext;
20+
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
21+
import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
22+
import org.apache.cloudstack.query.QueryService;
23+
import org.junit.After;
24+
import org.junit.Before;
25+
import org.junit.Test;
26+
import org.mockito.InjectMocks;
27+
import org.mockito.Mock;
28+
import org.mockito.Mockito;
29+
import org.mockito.MockitoAnnotations;
30+
31+
import com.cloud.agent.AgentManager;
32+
import com.cloud.agent.api.Answer;
33+
import com.cloud.agent.api.GetUnmanagedInstancesAnswer;
34+
import com.cloud.agent.api.GetUnmanagedInstancesCommand;
35+
import com.cloud.dc.ClusterVO;
36+
import com.cloud.dc.DataCenter;
37+
import com.cloud.dc.DataCenterVO;
38+
import com.cloud.dc.dao.ClusterDao;
39+
import com.cloud.dc.dao.DataCenterDao;
40+
import com.cloud.exception.InvalidParameterValueException;
41+
import com.cloud.exception.PermissionDeniedException;
42+
import com.cloud.host.Host;
43+
import com.cloud.host.HostVO;
44+
import com.cloud.host.Status;
45+
import com.cloud.hypervisor.Hypervisor;
46+
import com.cloud.network.Network;
47+
import com.cloud.network.dao.NetworkDao;
48+
import com.cloud.network.dao.NetworkVO;
49+
import com.cloud.offering.DiskOffering;
50+
import com.cloud.offering.ServiceOffering;
51+
import com.cloud.resource.ResourceManager;
52+
import com.cloud.server.ManagementService;
53+
import com.cloud.service.ServiceOfferingVO;
54+
import com.cloud.service.dao.ServiceOfferingDao;
55+
import com.cloud.storage.DiskOfferingVO;
56+
import com.cloud.storage.VMTemplateStoragePoolVO;
57+
import com.cloud.storage.VMTemplateVO;
58+
import com.cloud.storage.Volume;
59+
import com.cloud.storage.dao.DiskOfferingDao;
60+
import com.cloud.storage.dao.VMTemplateDao;
61+
import com.cloud.storage.dao.VMTemplatePoolDao;
62+
import com.cloud.template.VirtualMachineTemplate;
63+
import com.cloud.user.Account;
64+
import com.cloud.user.AccountService;
65+
import com.cloud.user.AccountVO;
66+
import com.cloud.user.User;
67+
import com.cloud.user.UserVO;
68+
import com.cloud.user.dao.UserDao;
69+
import com.cloud.uservm.UserVm;
70+
import com.cloud.utils.Pair;
71+
import com.cloud.vm.DiskProfile;
72+
import com.cloud.vm.NicProfile;
73+
import com.cloud.vm.UserVmService;
74+
import com.cloud.vm.UserVmVO;
75+
import com.cloud.vm.VirtualMachine;
76+
77+
public class VmIngestionManagerImplTest {
78+
79+
@InjectMocks
80+
private VmIngestionService vmIngestionService= new VmIngestionManagerImpl();
81+
82+
@Mock
83+
private UserVmService userVmService;
84+
@Mock
85+
private ClusterDao clusterDao;
86+
@Mock
87+
private ResourceManager resourceManager;
88+
@Mock
89+
public QueryService queryService;
90+
@Mock
91+
private VMTemplatePoolDao templatePoolDao;
92+
@Mock
93+
public ManagementService managementService;
94+
@Mock
95+
private AgentManager agentManager;
96+
@Mock
97+
private AccountService accountService;
98+
@Mock
99+
private UserDao userDao;
100+
@Mock
101+
private DataCenterDao dataCenterDao;
102+
@Mock
103+
private VMTemplateDao templateDao;
104+
@Mock
105+
private ServiceOfferingDao serviceOfferingDao;
106+
@Mock
107+
private DiskOfferingDao diskOfferingDao;
108+
@Mock
109+
private NetworkDao networkDao;
110+
@Mock
111+
private NetworkOrchestrationService networkOrchestrationService;
112+
@Mock
113+
private VolumeOrchestrationService volumeManager;
114+
@Mock
115+
public ResponseGenerator responseGenerator;
116+
117+
@Before
118+
public void setUp() throws Exception {
119+
MockitoAnnotations.initMocks(this);
120+
121+
AccountVO account = new AccountVO("admin", 1L, "", Account.ACCOUNT_TYPE_ADMIN, "uuid");
122+
UserVO user = new UserVO(1, "adminuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString(), User.Source.UNKNOWN);
123+
CallContext.register(user, account);
124+
125+
UnmanagedInstance instance = new UnmanagedInstance();
126+
instance.setName("TestInstance");
127+
instance.setCpuCores(2);
128+
instance.setCpuCoresPerSocket(1);
129+
instance.setCpuSpeed(100);
130+
instance.setMemory(1024);
131+
instance.setOperatingSystem("CentOS 7");
132+
List<UnmanagedInstance.Disk> instanceDisks = new ArrayList<>();
133+
UnmanagedInstance.Disk instanceDisk = new UnmanagedInstance.Disk();
134+
instanceDisk.setDiskId("1000-1");
135+
instanceDisk.setLabel("DiskLabel");
136+
instanceDisk.setImagePath("[SomeID] path/path.vmdk");
137+
instanceDisk.setCapacity(5242880L);
138+
instanceDisks.add(instanceDisk);
139+
instance.setDisks(instanceDisks);
140+
List<UnmanagedInstance.Nic> instanceNics = new ArrayList<>();
141+
UnmanagedInstance.Nic instanceNic = new UnmanagedInstance.Nic();
142+
instanceNic.setNicId("NIC 1");
143+
instanceNic.setAdapterType("VirtualE1000E");
144+
instanceNic.setMacAddress("02:00:2e:0f:00:02");
145+
instanceNic.setVlan(1024);
146+
instanceNics.add(instanceNic);
147+
instance.setNics(instanceNics);
148+
instance.setPowerState("POWERED_ON");
149+
150+
ClusterVO cluster = new ClusterVO(1, 1, "Cluster");
151+
cluster.setHypervisorType(Hypervisor.HypervisorType.VMware.toString());
152+
when(clusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
153+
154+
List<HostVO> hosts = new ArrayList<>();
155+
HostVO hostVO = Mockito.mock(HostVO.class);
156+
hosts.add(hostVO);
157+
when(resourceManager.listHostsInClusterByStatus(Mockito.anyLong(), Mockito.any(Status.class))).thenReturn(hosts);
158+
List<VMTemplateStoragePoolVO> templates = new ArrayList<>();
159+
when(templatePoolDao.listAll()).thenReturn(templates);
160+
ListResponse<UserVmResponse> vmsResponse = new ListResponse<>();
161+
when(templatePoolDao.listAll()).thenReturn(templates);
162+
GetUnmanagedInstancesCommand cmd = Mockito.mock(GetUnmanagedInstancesCommand.class);
163+
HashMap<String, UnmanagedInstance> map = new HashMap<>();
164+
map.put(instance.getName(), instance);
165+
Answer answer = new GetUnmanagedInstancesAnswer(cmd, "", map);
166+
when(agentManager.easySend(Mockito.anyLong(), Mockito.any(GetUnmanagedInstancesCommand.class))).thenReturn(answer);
167+
168+
when(dataCenterDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterVO.class));
169+
when(accountService.getActiveAccountById(Mockito.anyLong())).thenReturn(Mockito.mock(Account.class));
170+
List<UserVO> users = new ArrayList<>();
171+
users.add(Mockito.mock(UserVO.class));
172+
when(userDao.listByAccount(Mockito.anyLong())).thenReturn(users);
173+
when(templateDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(VMTemplateVO.class));
174+
when(serviceOfferingDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(ServiceOfferingVO.class));
175+
DiskOfferingVO diskOfferingVO = Mockito.mock(DiskOfferingVO.class);
176+
when(diskOfferingVO.isCustomized()).thenReturn(false);
177+
when(diskOfferingDao.findById(Mockito.anyLong())).thenReturn(diskOfferingVO);
178+
UserVmVO userVm = Mockito.mock(UserVmVO.class);
179+
userVm.setInstanceName(instance.getName());
180+
userVm.setHostName(instance.getName());
181+
when(userVmService.ingestVm(Mockito.any(DataCenter.class), Mockito.any(Host.class), Mockito.any(VirtualMachineTemplate.class), Mockito.anyString(), Mockito.anyString(),
182+
Mockito.any(Account.class), Mockito.anyString(), Mockito.any(Account.class), Mockito.anyBoolean(), Mockito.anyString(),
183+
Mockito.anyLong(), Mockito.anyLong(), Mockito.any(ServiceOffering.class), Mockito.any(DiskOffering.class), Mockito.anyString(), Mockito.any(LinkedHashMap.class),
184+
Mockito.anyString(), Mockito.any(Hypervisor.HypervisorType.class), Mockito.anyMap(), Mockito.any(VirtualMachine.PowerState.class))).thenReturn(userVm);
185+
NetworkVO networkVO = Mockito.mock(NetworkVO.class);
186+
networkVO.setBroadcastUri(URI.create(String.format("vlan://%d", instanceNic.getVlan())));
187+
when(networkDao.findById(Mockito.anyLong())).thenReturn(networkVO);
188+
NicProfile profile = Mockito.mock(NicProfile.class);
189+
Integer deviceId = 100;
190+
Pair<NicProfile, Integer> pair = new Pair<NicProfile, Integer>(profile, deviceId);
191+
when(networkOrchestrationService.ingestNic(Mockito.anyString(), Mockito.anyInt(), Mockito.any(Network.class), Mockito.anyBoolean(), Mockito.any(VirtualMachine.class))).thenReturn(pair);
192+
when(volumeManager.ingestVolume(Mockito.any(Volume.Type.class), Mockito.anyString(), Mockito.any(DiskOffering.class), Mockito.anyLong(),
193+
Mockito.anyLong(), Mockito.anyLong(), Mockito.any(VirtualMachine.class), Mockito.any(VirtualMachineTemplate.class),
194+
Mockito.any(Account.class), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyString(), Mockito.anyString())).thenReturn(Mockito.mock(DiskProfile.class));
195+
List<UserVmResponse> userVmResponses = new ArrayList<>();
196+
UserVmResponse userVmResponse = new UserVmResponse();
197+
userVmResponse.setInstanceName(instance.getName());
198+
userVmResponses.add(userVmResponse);
199+
when(responseGenerator.createUserVmResponse(Mockito.any(ResponseObject.ResponseView.class), Mockito.anyString(), Mockito.any(UserVm.class))).thenReturn(userVmResponses);
200+
}
201+
202+
@After
203+
public void tearDown() {
204+
CallContext.unregister();
205+
}
206+
207+
@Test
208+
public void listUnmanagedInstancesTest() {
209+
ListUnmanagedInstancesCmd cmd = Mockito.mock(ListUnmanagedInstancesCmd.class);
210+
vmIngestionService.listUnmanagedInstances(cmd);
211+
}
212+
213+
@Test(expected = InvalidParameterValueException.class)
214+
public void listUnmanagedInstancesInvalidHypervisorTest() {
215+
ListUnmanagedInstancesCmd cmd = Mockito.mock(ListUnmanagedInstancesCmd.class);
216+
ClusterVO cluster = new ClusterVO(1, 1, "Cluster");
217+
cluster.setHypervisorType(Hypervisor.HypervisorType.KVM.toString());
218+
when(clusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
219+
vmIngestionService.listUnmanagedInstances(cmd);
220+
}
221+
222+
@Test(expected = PermissionDeniedException.class)
223+
public void listUnmanagedInstancesInvalidCallerTest() {
224+
CallContext.unregister();
225+
AccountVO account = new AccountVO("user", 1L, "", Account.ACCOUNT_TYPE_NORMAL, "uuid");
226+
UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString(), User.Source.UNKNOWN);
227+
CallContext.register(user, account);
228+
ListUnmanagedInstancesCmd cmd = Mockito.mock(ListUnmanagedInstancesCmd.class);
229+
vmIngestionService.listUnmanagedInstances(cmd);
230+
}
231+
232+
@Test
233+
public void importUnmanagedInstanceTest() {
234+
ImportUnmanageInstanceCmd importUnmanageInstanceCmd = Mockito.mock(ImportUnmanageInstanceCmd.class);
235+
when(importUnmanageInstanceCmd.getName()).thenReturn("TestInstance");
236+
vmIngestionService.importUnmanagedInstance(importUnmanageInstanceCmd);
237+
}
238+
239+
@Test(expected = InvalidParameterValueException.class)
240+
public void importUnmanagedInstanceInvalidHostnameTest() {
241+
ImportUnmanageInstanceCmd importUnmanageInstanceCmd = Mockito.mock(ImportUnmanageInstanceCmd.class);
242+
when(importUnmanageInstanceCmd.getName()).thenReturn("TestInstance");
243+
when(importUnmanageInstanceCmd.getName()).thenReturn("some name");
244+
vmIngestionService.importUnmanagedInstance(importUnmanageInstanceCmd);
245+
}
246+
247+
@Test(expected = ServerApiException.class)
248+
public void importUnmanagedInstanceMissingInstanceTest() {
249+
ImportUnmanageInstanceCmd importUnmanageInstanceCmd = Mockito.mock(ImportUnmanageInstanceCmd.class);
250+
when(importUnmanageInstanceCmd.getName()).thenReturn("SomeInstance");
251+
vmIngestionService.importUnmanagedInstance(importUnmanageInstanceCmd);
252+
}
253+
}

0 commit comments

Comments
 (0)