Skip to content

Commit 70f4e26

Browse files
committed
Sort instead of filtering by preferred arch
1 parent 02de12f commit 70f4e26

2 files changed

Lines changed: 27 additions & 4 deletions

File tree

engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -585,12 +585,12 @@ public VMTemplateVO findSystemVMReadyTemplate(long zoneId, HypervisorType hyperv
585585
return null;
586586
}
587587
if (StringUtils.isNotBlank(preferredArch)) {
588+
// Sort the templates by preferred architecture first
588589
templates = templates.stream()
589-
.filter(x -> x.getArch().getType().equalsIgnoreCase(preferredArch))
590+
.sorted(Comparator.comparing(
591+
x -> !x.getArch().getType().equalsIgnoreCase(preferredArch)
592+
))
590593
.collect(Collectors.toList());
591-
if (CollectionUtils.isEmpty(templates)) {
592-
return null;
593-
}
594594
}
595595
if (hypervisorType == HypervisorType.Any) {
596596
return templates.get(0);

engine/schema/src/test/java/com/cloud/storage/dao/VMTemplateDaoImplTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.List;
3232
import java.util.Map;
3333

34+
import org.junit.Assert;
3435
import org.junit.Test;
3536
import org.junit.runner.RunWith;
3637
import org.mockito.InjectMocks;
@@ -186,4 +187,26 @@ public void testFindLatestTemplateByTypeAndHypervisorAndArch_NotFound() {
186187
VMTemplateVO result = templateDao.findLatestTemplateByTypeAndHypervisorAndArch(hypervisorType, arch, type);
187188
assertNull(result);
188189
}
190+
191+
@Test
192+
public void testFindSystemVMReadyTemplate() {
193+
Long zoneId = 1L;
194+
VMTemplateVO systemVmTemplate1 = mock(VMTemplateVO.class);
195+
Mockito.when(systemVmTemplate1.getArch()).thenReturn(CPU.CPUArch.x86);
196+
Mockito.when(systemVmTemplate1.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM);
197+
VMTemplateVO systemVmTemplate2 = mock(VMTemplateVO.class);
198+
Mockito.when(systemVmTemplate2.getArch()).thenReturn(CPU.CPUArch.x86);
199+
Mockito.when(systemVmTemplate2.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM);
200+
VMTemplateVO systemVmTemplate3 = mock(VMTemplateVO.class);
201+
Mockito.when(systemVmTemplate3.getArch()).thenReturn(CPU.CPUArch.arm64);
202+
Mockito.when(systemVmTemplate3.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM);
203+
List<VMTemplateVO> templates = Arrays.asList(systemVmTemplate1, systemVmTemplate2, systemVmTemplate3);
204+
Mockito.when(hostDao.listDistinctHypervisorTypes(zoneId)).thenReturn(Arrays.asList(Hypervisor.HypervisorType.KVM));
205+
SearchBuilder<VMTemplateVO> sb = mock(SearchBuilder.class);
206+
templateDao.readySystemTemplateSearch = sb;
207+
when(sb.create()).thenReturn(mock(SearchCriteria.class));
208+
doReturn(templates).when(templateDao).listBy(any(SearchCriteria.class), any(Filter.class));
209+
VMTemplateVO readyTemplate = templateDao.findSystemVMReadyTemplate(zoneId, Hypervisor.HypervisorType.KVM, CPU.CPUArch.arm64.getType());
210+
Assert.assertEquals(CPU.CPUArch.arm64, readyTemplate.getArch());
211+
}
189212
}

0 commit comments

Comments
 (0)