Skip to content

Commit 686b298

Browse files
committed
Add unit tests
1 parent 1a86b86 commit 686b298

File tree

2 files changed

+134
-10
lines changed

2 files changed

+134
-10
lines changed

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
public class VMInstanceDaoImpl extends GenericDaoBase<VMInstanceVO, Long> implements VMInstanceDao {
6767

6868
public static final Logger s_logger = Logger.getLogger(VMInstanceDaoImpl.class);
69-
private static final int MAX_CONSECUTIVE_SAME_STATE_UPDATE_COUNT = 3;
69+
static final int MAX_CONSECUTIVE_SAME_STATE_UPDATE_COUNT = 3;
7070

7171
protected SearchBuilder<VMInstanceVO> VMClusterSearch;
7272
protected SearchBuilder<VMInstanceVO> LHVMClusterSearch;
@@ -897,17 +897,17 @@ public List<VMInstanceVO> listStartingWithNoHostId() {
897897

898898
@Override
899899
public boolean updatePowerState(final long instanceId, final long powerHostId, final VirtualMachine.PowerState powerState, Date wisdomEra) {
900-
return Transaction.execute(new TransactionCallback<Boolean>() {
900+
return Transaction.execute(new TransactionCallback<>() {
901901
@Override
902902
public Boolean doInTransaction(TransactionStatus status) {
903903
boolean needToUpdate = false;
904904
VMInstanceVO instance = findById(instanceId);
905905
if (instance != null
906-
&& (null == instance.getPowerStateUpdateTime()
906+
&& (null == instance.getPowerStateUpdateTime()
907907
|| instance.getPowerStateUpdateTime().before(wisdomEra))) {
908908
Long savedPowerHostId = instance.getPowerHostId();
909909
if (instance.getPowerState() != powerState || savedPowerHostId == null
910-
|| savedPowerHostId.longValue() != powerHostId) {
910+
|| savedPowerHostId != powerHostId) {
911911
instance.setPowerState(powerState);
912912
instance.setPowerHostId(powerHostId);
913913
instance.setPowerStateUpdateCount(1);

engine/schema/src/test/java/com/cloud/vm/dao/VMInstanceDaoImplTest.java

Lines changed: 130 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,27 @@
2222
import org.joda.time.DateTime;
2323
import org.junit.Before;
2424
import org.junit.Test;
25-
import org.junit.Assert;
2625
import org.mockito.Mock;
2726

2827
import static com.cloud.vm.VirtualMachine.State.Running;
2928
import static com.cloud.vm.VirtualMachine.State.Stopped;
3029

30+
import static com.cloud.vm.dao.VMInstanceDaoImpl.MAX_CONSECUTIVE_SAME_STATE_UPDATE_COUNT;
31+
import static org.junit.Assert.assertFalse;
32+
import static org.junit.Assert.assertTrue;
33+
import static org.mockito.ArgumentMatchers.any;
34+
import static org.mockito.ArgumentMatchers.anyLong;
35+
import static org.mockito.Mockito.doReturn;
36+
import static org.mockito.Mockito.never;
37+
import static org.mockito.Mockito.times;
38+
import static org.mockito.Mockito.verify;
3139
import static org.mockito.Mockito.when;
3240
import com.cloud.vm.VMInstanceVO;
3341
import org.mockito.MockitoAnnotations;
3442
import org.mockito.Spy;
3543

44+
import java.util.Date;
45+
3646
/**
3747
* Created by sudharma_jain on 3/2/17.
3848
*/
@@ -55,16 +65,130 @@ public void setUp() throws Exception {
5565
}
5666

5767
@Test
58-
public void testUpdateState() throws Exception {
68+
public void testUpdateState() {
5969
Long destHostId = null;
60-
Pair<Long, Long> opaqueMock = new Pair<Long, Long>(new Long(1), destHostId);
70+
Pair<Long, Long> opaqueMock = new Pair<>(1L, destHostId);
6171
vmInstanceDao.updateState(Stopped, VirtualMachine.Event.FollowAgentPowerOffReport, Stopped, vm , opaqueMock);
6272
}
6373

6474
@Test
65-
public void testIfStateAndHostUnchanged() throws Exception {
66-
Assert.assertEquals(vmInstanceDao.ifStateUnchanged(Stopped, Stopped, null, null), true);
67-
Assert.assertEquals(vmInstanceDao.ifStateUnchanged(Stopped, Running, null, null), false);
75+
public void testIfStateAndHostUnchanged() {
76+
assertTrue(vmInstanceDao.ifStateUnchanged(Stopped, Stopped, null, null));
77+
assertFalse(vmInstanceDao.ifStateUnchanged(Stopped, Running, null, null));
78+
}
79+
80+
@Test
81+
public void testUpdatePowerStateDifferentPowerState() {
82+
when(vm.getPowerStateUpdateTime()).thenReturn(null);
83+
when(vm.getPowerHostId()).thenReturn(1L);
84+
when(vm.getPowerState()).thenReturn(VirtualMachine.PowerState.PowerOn);
85+
doReturn(vm).when(vmInstanceDao).findById(anyLong());
86+
doReturn(true).when(vmInstanceDao).update(anyLong(), any());
87+
88+
boolean result = vmInstanceDao.updatePowerState(1L, 1L, VirtualMachine.PowerState.PowerOff, new Date());
89+
90+
verify(vm, times(1)).setPowerState(VirtualMachine.PowerState.PowerOff);
91+
verify(vm, times(1)).setPowerHostId(1L);
92+
verify(vm, times(1)).setPowerStateUpdateCount(1);
93+
verify(vm, times(1)).setPowerStateUpdateTime(any(Date.class));
94+
95+
assertTrue(result);
96+
}
97+
98+
@Test
99+
public void testUpdatePowerStateVmNotFound() {
100+
when(vm.getPowerStateUpdateTime()).thenReturn(null);
101+
when(vm.getPowerHostId()).thenReturn(1L);
102+
when(vm.getPowerState()).thenReturn(VirtualMachine.PowerState.PowerOn);
103+
doReturn(null).when(vmInstanceDao).findById(anyLong());
104+
105+
boolean result = vmInstanceDao.updatePowerState(1L, 1L, VirtualMachine.PowerState.PowerOff, new Date());
106+
107+
verify(vm, never()).setPowerState(any());
108+
verify(vm, never()).setPowerHostId(anyLong());
109+
verify(vm, never()).setPowerStateUpdateCount(any(Integer.class));
110+
verify(vm, never()).setPowerStateUpdateTime(any(Date.class));
111+
112+
assertFalse(result);
113+
}
114+
115+
@Test
116+
public void testUpdatePowerStateNoChangeFirstUpdate() {
117+
when(vm.getPowerStateUpdateTime()).thenReturn(null);
118+
when(vm.getPowerHostId()).thenReturn(1L);
119+
when(vm.getPowerState()).thenReturn(VirtualMachine.PowerState.PowerOn);
120+
when(vm.getPowerStateUpdateCount()).thenReturn(1);
121+
doReturn(vm).when(vmInstanceDao).findById(anyLong());
122+
doReturn(true).when(vmInstanceDao).update(anyLong(), any());
123+
124+
boolean result = vmInstanceDao.updatePowerState(1L, 1L, VirtualMachine.PowerState.PowerOn, new Date());
125+
126+
verify(vm, never()).setPowerState(any());
127+
verify(vm, never()).setPowerHostId(anyLong());
128+
verify(vm, times(1)).setPowerStateUpdateCount(2);
129+
verify(vm, times(1)).setPowerStateUpdateTime(any(Date.class));
130+
131+
assertTrue(result);
132+
}
133+
134+
@Test
135+
public void testUpdatePowerStateNoChangeMaxUpdatesValidState() {
136+
when(vm.getPowerStateUpdateTime()).thenReturn(null);
137+
when(vm.getPowerHostId()).thenReturn(1L);
138+
when(vm.getPowerState()).thenReturn(VirtualMachine.PowerState.PowerOn);
139+
when(vm.getPowerStateUpdateCount()).thenReturn(MAX_CONSECUTIVE_SAME_STATE_UPDATE_COUNT);
140+
when(vm.getState()).thenReturn(Running);
141+
doReturn(vm).when(vmInstanceDao).findById(anyLong());
142+
doReturn(true).when(vmInstanceDao).update(anyLong(), any());
143+
144+
boolean result = vmInstanceDao.updatePowerState(1L, 1L, VirtualMachine.PowerState.PowerOn, new Date());
145+
146+
verify(vm, never()).setPowerState(any());
147+
verify(vm, never()).setPowerHostId(anyLong());
148+
verify(vm, never()).setPowerStateUpdateCount(any(Integer.class));
149+
verify(vm, never()).setPowerStateUpdateTime(any(Date.class));
150+
151+
assertFalse(result);
152+
}
153+
154+
@Test
155+
public void testUpdatePowerStateNoChangeMaxUpdatesInvalidStateVmStopped() {
156+
when(vm.getPowerStateUpdateTime()).thenReturn(null);
157+
when(vm.getPowerHostId()).thenReturn(1L);
158+
when(vm.getPowerState()).thenReturn(VirtualMachine.PowerState.PowerOn);
159+
when(vm.getPowerStateUpdateCount()).thenReturn(MAX_CONSECUTIVE_SAME_STATE_UPDATE_COUNT);
160+
when(vm.getState()).thenReturn(Stopped);
161+
doReturn(vm).when(vmInstanceDao).findById(anyLong());
162+
doReturn(true).when(vmInstanceDao).update(anyLong(), any());
163+
164+
boolean result = vmInstanceDao.updatePowerState(1L, 1L, VirtualMachine.PowerState.PowerOn, new Date());
165+
166+
verify(vm, never()).setPowerState(any());
167+
verify(vm, never()).setPowerHostId(anyLong());
168+
verify(vm, times(1)).setPowerStateUpdateCount(1);
169+
verify(vm, times(1)).setPowerStateUpdateTime(any(Date.class));
170+
171+
assertTrue(result);
172+
}
173+
174+
@Test
175+
public void testUpdatePowerStateNoChangeMaxUpdatesInvalidStateVmRunning() {
176+
when(vm.getPowerStateUpdateTime()).thenReturn(null);
177+
when(vm.getPowerHostId()).thenReturn(1L);
178+
when(vm.getPowerState()).thenReturn(VirtualMachine.PowerState.PowerOff);
179+
when(vm.getPowerStateUpdateCount()).thenReturn(MAX_CONSECUTIVE_SAME_STATE_UPDATE_COUNT);
180+
when(vm.getState()).thenReturn(Running);
181+
doReturn(vm).when(vmInstanceDao).findById(anyLong());
182+
doReturn(true).when(vmInstanceDao).update(anyLong(), any());
183+
184+
boolean result = vmInstanceDao.updatePowerState(1L, 1L, VirtualMachine.PowerState.PowerOff, new Date());
185+
186+
verify(vm, never()).setPowerState(any());
187+
verify(vm, never()).setPowerHostId(anyLong());
188+
verify(vm, times(1)).setPowerStateUpdateCount(1);
189+
verify(vm, times(1)).setPowerStateUpdateTime(any(Date.class));
190+
191+
assertTrue(result);
68192
}
69193

70194
}

0 commit comments

Comments
 (0)