2222import org .joda .time .DateTime ;
2323import org .junit .Before ;
2424import org .junit .Test ;
25- import org .junit .Assert ;
2625import org .mockito .Mock ;
2726
2827import static com .cloud .vm .VirtualMachine .State .Running ;
2928import 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 ;
3139import static org .mockito .Mockito .when ;
3240import com .cloud .vm .VMInstanceVO ;
3341import org .mockito .MockitoAnnotations ;
3442import 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