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