Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
private GenericSearchBuilder<NicVO, String> IpSearch;
private SearchBuilder<NicVO> NonReleasedSearch;
private GenericSearchBuilder<NicVO, Integer> deviceIdSearch;
private GenericSearchBuilder<NicVO, Integer> CountByForNonStoppedVms;
GenericSearchBuilder<NicVO, Integer> CountByForNonStoppedVms;
private SearchBuilder<NicVO> PeerRouterSearch;

@Inject
Expand Down Expand Up @@ -394,7 +394,7 @@ public int countNicsForNonStoppedRunningVrs(long networkId) {
SearchCriteria<Integer> sc = CountByForNonStoppedVms.create();
sc.setParameters("networkId", networkId);
sc.setParameters("vmTypeNEQ", VirtualMachine.Type.User);
sc.setJoinParameters("vm", "state", new Object[] {VirtualMachine.State.Starting, VirtualMachine.State.Stopping, VirtualMachine.State.Migrating});
sc.setJoinParameters("vm", "state", new Object[] {VirtualMachine.State.Starting, VirtualMachine.State.Running, VirtualMachine.State.Stopping, VirtualMachine.State.Migrating});
List<Integer> results = customSearch(sc, null);
return results.get(0);
}
Expand Down
22 changes: 22 additions & 0 deletions engine/schema/src/test/java/com/cloud/vm/dao/NicDaoImplTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,24 @@
package com.cloud.vm.dao;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;

import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericSearchBuilder;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.vm.NicVO;
import com.cloud.vm.VirtualMachine;

@RunWith(MockitoJUnitRunner.class)
public class NicDaoImplTest {
Expand Down Expand Up @@ -66,4 +70,22 @@ public void testSearchRemovedByVms() {
Mockito.any(SearchCriteria.class), Mockito.any(Filter.class), Mockito.eq(null),
Mockito.eq(false));
}

@Test
@SuppressWarnings("unchecked")
public void testCountNicsForNonStoppedRunningVrsIncludesRunningState() {
GenericSearchBuilder<NicVO, Integer> sb = Mockito.mock(GenericSearchBuilder.class);
SearchCriteria<Integer> sc = Mockito.mock(SearchCriteria.class);
Mockito.when(sb.create()).thenReturn(sc);
nicDaoImplSpy.CountByForNonStoppedVms = sb;
Mockito.doReturn(List.of(0)).when(nicDaoImplSpy).customSearch(Mockito.eq(sc), Mockito.eq(null));

nicDaoImplSpy.countNicsForNonStoppedRunningVrs(5L);

ArgumentCaptor<Object[]> statesCaptor = ArgumentCaptor.forClass(Object[].class);
Mockito.verify(sc).setJoinParameters(Mockito.eq("vm"), Mockito.eq("state"), statesCaptor.capture());
Assert.assertTrue("A running VR's nic must still count towards the non-stopped-VR check, "
+ "otherwise NetworkGarbageCollector will tear down a network with a live router",
Arrays.asList(statesCaptor.getValue()).contains(VirtualMachine.State.Running));
}
}
Loading