2121import static org .junit .Assert .assertNull ;
2222import static org .mockito .ArgumentMatchers .any ;
2323import static org .mockito .Mockito .doReturn ;
24+ import static org .mockito .Mockito .eq ;
2425import static org .mockito .Mockito .mock ;
26+ import static org .mockito .Mockito .never ;
27+ import static org .mockito .Mockito .times ;
28+ import static org .mockito .Mockito .verify ;
2529import static org .mockito .Mockito .when ;
2630
2731import java .util .ArrayList ;
4448import com .cloud .hypervisor .Hypervisor ;
4549import com .cloud .storage .Storage ;
4650import com .cloud .storage .VMTemplateVO ;
51+ import com .cloud .storage .VMTemplateZoneVO ;
4752import com .cloud .utils .Pair ;
4853import com .cloud .utils .db .Filter ;
54+ import com .cloud .utils .db .GenericSearchBuilder ;
55+ import com .cloud .utils .db .JoinBuilder ;
4956import com .cloud .utils .db .SearchBuilder ;
5057import com .cloud .utils .db .SearchCriteria ;
5158
@@ -55,6 +62,9 @@ public class VMTemplateDaoImplTest {
5562 @ Mock
5663 HostDao hostDao ;
5764
65+ @ Mock
66+ VMTemplateZoneDao templateZoneDao ;
67+
5868 @ Spy
5969 @ InjectMocks
6070 VMTemplateDaoImpl templateDao = new VMTemplateDaoImpl ();
@@ -186,4 +196,107 @@ public void testFindLatestTemplateByTypeAndHypervisorAndArch_NotFound() {
186196 VMTemplateVO result = templateDao .findLatestTemplateByTypeAndHypervisorAndArch (hypervisorType , arch , type );
187197 assertNull (result );
188198 }
199+
200+ private void mockTemplateZoneJoin () {
201+ VMTemplateZoneVO templateZoneVO = mock (VMTemplateZoneVO .class );
202+ SearchBuilder <VMTemplateZoneVO > templateZoneVOSearchBuilder = mock (SearchBuilder .class );
203+ when (templateZoneVOSearchBuilder .entity ()).thenReturn (templateZoneVO );
204+ when (templateZoneDao .createSearchBuilder ()).thenReturn (templateZoneVOSearchBuilder );
205+ }
206+
207+ @ Test
208+ public void testListTemplateIsoByArchAndZone_WithDataCenterId () {
209+ Long dataCenterId = 1L ;
210+ CPU .CPUArch arch = CPU .CPUArch .getDefault ();
211+ Boolean isIso = true ;
212+ VMTemplateVO templateVO = mock (VMTemplateVO .class );
213+ GenericSearchBuilder <VMTemplateVO , Long > searchBuilder = mock (GenericSearchBuilder .class );
214+ when (searchBuilder .entity ()).thenReturn (templateVO );
215+ SearchCriteria <Long >searchCriteria = mock (SearchCriteria .class );
216+ when (templateDao .createSearchBuilder (Long .class )).thenReturn (searchBuilder );
217+ when (searchBuilder .create ()).thenReturn (searchCriteria );
218+ mockTemplateZoneJoin ();
219+ doReturn (new ArrayList <>()).when (templateDao ).customSearch (searchCriteria , null );
220+ List <Long > result = templateDao .listTemplateIsoByArchAndZone (dataCenterId , arch , isIso );
221+ assertNotNull (result );
222+ verify (searchBuilder , times (1 )).select (null , SearchCriteria .Func .DISTINCT , templateVO .getGuestOSId ());
223+ verify (searchBuilder , times (1 )).and (eq ("state" ), any (), eq (SearchCriteria .Op .IN ));
224+ verify (searchBuilder , times (1 )).and (eq ("type" ), any (), eq (SearchCriteria .Op .IN ));
225+ verify (searchBuilder , times (1 )).and (eq ("arch" ), any (), eq (SearchCriteria .Op .EQ ));
226+ verify (searchBuilder , times (1 )).and (eq ("isIso" ), any (), eq (SearchCriteria .Op .EQ ));
227+ verify (searchBuilder , times (1 )).join (eq ("templateZoneSearch" ), any (), any (), any (), eq (JoinBuilder .JoinType .INNER ));
228+ verify (templateDao , times (1 )).customSearch (searchCriteria , null );
229+ }
230+
231+ @ Test
232+ public void testListTemplateIsoByArchAndZone_WithoutDataCenterId () {
233+ Long dataCenterId = null ;
234+ CPU .CPUArch arch = CPU .CPUArch .getDefault ();
235+ Boolean isIso = false ;
236+ VMTemplateVO templateVO = mock (VMTemplateVO .class );
237+ GenericSearchBuilder <VMTemplateVO , Long > searchBuilder = mock (GenericSearchBuilder .class );
238+ when (searchBuilder .entity ()).thenReturn (templateVO );
239+ SearchCriteria <Long >searchCriteria = mock (SearchCriteria .class );
240+ when (templateDao .createSearchBuilder (Long .class )).thenReturn (searchBuilder );
241+ when (searchBuilder .create ()).thenReturn (searchCriteria );
242+ doReturn (new ArrayList <>()).when (templateDao ).customSearch (searchCriteria , null );
243+ List <Long > result = templateDao .listTemplateIsoByArchAndZone (dataCenterId , arch , isIso );
244+ assertNotNull (result );
245+ verify (searchBuilder , times (1 )).select (null , SearchCriteria .Func .DISTINCT , templateVO .getGuestOSId ());
246+ verify (searchBuilder , times (1 )).and (eq ("state" ), any (), eq (SearchCriteria .Op .IN ));
247+ verify (searchBuilder , times (1 )).and (eq ("type" ), any (), eq (SearchCriteria .Op .IN ));
248+ verify (searchBuilder , times (1 )).and (eq ("arch" ), any (), eq (SearchCriteria .Op .EQ ));
249+ verify (searchBuilder , times (1 )).and (eq ("isIso" ), any (), eq (SearchCriteria .Op .NEQ ));
250+ verify (searchBuilder , never ()).join (eq ("templateZoneSearch" ), any (), any (), any (), eq (JoinBuilder .JoinType .INNER ));
251+ verify (templateDao , times (1 )).customSearch (searchCriteria , null );
252+ }
253+
254+ @ Test
255+ public void testListTemplateIsoByArchAndZone_WithoutArch () {
256+ Long dataCenterId = 1L ;
257+ CPU .CPUArch arch = null ;
258+ Boolean isIso = true ;
259+ VMTemplateVO templateVO = mock (VMTemplateVO .class );
260+ GenericSearchBuilder <VMTemplateVO , Long > searchBuilder = mock (GenericSearchBuilder .class );
261+ when (searchBuilder .entity ()).thenReturn (templateVO );
262+ SearchCriteria <Long >searchCriteria = mock (SearchCriteria .class );
263+ when (templateDao .createSearchBuilder (Long .class )).thenReturn (searchBuilder );
264+ when (searchBuilder .create ()).thenReturn (searchCriteria );
265+ mockTemplateZoneJoin ();
266+ doReturn (new ArrayList <>()).when (templateDao ).customSearch (searchCriteria , null );
267+ List <Long > result = templateDao .listTemplateIsoByArchAndZone (dataCenterId , arch , isIso );
268+ assertNotNull (result );
269+ verify (searchBuilder , times (1 )).select (null , SearchCriteria .Func .DISTINCT , templateVO .getGuestOSId ());
270+ verify (searchBuilder , times (1 )).and (eq ("state" ), any (), eq (SearchCriteria .Op .IN ));
271+ verify (searchBuilder , times (1 )).and (eq ("type" ), any (), eq (SearchCriteria .Op .IN ));
272+ verify (searchBuilder , times (1 )).and (eq ("arch" ), any (), eq (SearchCriteria .Op .EQ ));
273+ verify (searchBuilder , times (1 )).and (eq ("isIso" ), any (), eq (SearchCriteria .Op .EQ ));
274+ verify (searchBuilder , times (1 )).join (eq ("templateZoneSearch" ), any (), any (), any (), eq (JoinBuilder .JoinType .INNER ));
275+ verify (templateDao , times (1 )).customSearch (searchCriteria , null );
276+ }
277+
278+ @ Test
279+ public void testListTemplateIsoByArchAndZone_WithoutIsIso () {
280+ Long dataCenterId = 1L ;
281+ CPU .CPUArch arch = CPU .CPUArch .getDefault ();
282+ Boolean isIso = null ;
283+ VMTemplateVO templateVO = mock (VMTemplateVO .class );
284+ GenericSearchBuilder <VMTemplateVO , Long > searchBuilder = mock (GenericSearchBuilder .class );
285+ when (searchBuilder .entity ()).thenReturn (templateVO );
286+ SearchCriteria <Long >searchCriteria = mock (SearchCriteria .class );
287+ when (templateDao .createSearchBuilder (Long .class )).thenReturn (searchBuilder );
288+ when (searchBuilder .create ()).thenReturn (searchCriteria );
289+ mockTemplateZoneJoin ();
290+ doReturn (new ArrayList <>()).when (templateDao ).customSearch (searchCriteria , null );
291+ List <Long > result = templateDao .listTemplateIsoByArchAndZone (dataCenterId , arch , isIso );
292+ assertNotNull (result );
293+ verify (searchBuilder , times (1 )).select (null , SearchCriteria .Func .DISTINCT , templateVO .getGuestOSId ());
294+ verify (searchBuilder , times (1 )).and (eq ("state" ), any (), eq (SearchCriteria .Op .IN ));
295+ verify (searchBuilder , times (1 )).and (eq ("type" ), any (), eq (SearchCriteria .Op .IN ));
296+ verify (searchBuilder , times (1 )).and (eq ("arch" ), any (), eq (SearchCriteria .Op .EQ ));
297+ verify (searchBuilder , never ()).and (eq ("isIso" ), any (), eq (SearchCriteria .Op .NEQ ));
298+ verify (searchBuilder , never ()).and (eq ("isIso" ), any (), eq (SearchCriteria .Op .EQ ));
299+ verify (searchBuilder , times (1 )).join (eq ("templateZoneSearch" ), any (), any (), any (), eq (JoinBuilder .JoinType .INNER ));
300+ verify (templateDao , times (1 )).customSearch (searchCriteria , null );
301+ }
189302}
0 commit comments