1616// under the License.
1717package com .cloud .upgrade ;
1818
19- import static org .junit .Assert .assertEquals ;
20- import static org .junit .Assert .assertNotNull ;
21- import static org .junit .Assert .assertTrue ;
19+ import java .sql .SQLException ;
20+ import java .lang .reflect .Field ;
21+ import java .sql .Connection ;
22+ import java .sql .PreparedStatement ;
23+ import java .sql .ResultSet ;
2224
23- import java . util . Arrays ;
25+ import javax . sql . DataSource ;
2426
2527import org .apache .cloudstack .utils .CloudStackVersion ;
2628import org .junit .Test ;
29+ import org .junit .Before ;
30+ import org .junit .After ;
31+ import org .junit .runner .RunWith ;
32+
33+ import org .mockito .ArgumentMatchers ;
34+ import org .mockito .Mock ;
35+ import org .mockito .Mockito ;
36+ import org .mockito .junit .MockitoJUnitRunner ;
2737
2838import com .cloud .upgrade .DatabaseUpgradeChecker .NoopDbUpgrade ;
2939import com .cloud .upgrade .dao .DbUpgrade ;
4353import com .cloud .upgrade .dao .Upgrade480to481 ;
4454import com .cloud .upgrade .dao .Upgrade490to4910 ;
4555
56+ import com .cloud .utils .db .TransactionLegacy ;
57+
58+ import static org .junit .Assert .*;
59+
60+ @ RunWith (MockitoJUnitRunner .class )
4661public class DatabaseUpgradeCheckerTest {
4762
63+ @ Mock
64+ DataSource dataSource ;
65+
66+ @ Mock
67+ Connection connection ;
68+
69+ @ Mock
70+ PreparedStatement preparedStatement ;
71+
72+ @ Mock
73+ ResultSet resultSet ;
74+
75+ private DataSource backupDataSource ;
76+
77+ @ Before
78+ public void setup () throws Exception {
79+ Field dsField = TransactionLegacy .class .getDeclaredField ("s_ds" );
80+ dsField .setAccessible (true );
81+ backupDataSource = (DataSource ) dsField .get (null );
82+ dsField .set (null , dataSource );
83+
84+ Mockito .when (dataSource .getConnection ()).thenReturn (connection );
85+ Mockito .when (connection .prepareStatement (ArgumentMatchers .anyString ())).thenReturn (preparedStatement );
86+ Mockito .when (preparedStatement .executeQuery ()).thenReturn (resultSet );
87+ }
88+
89+ @ After
90+ public void cleanup () throws Exception {
91+ Field dsField = TransactionLegacy .class .getDeclaredField ("s_ds" );
92+ dsField .setAccessible (true );
93+ dsField .set (null , backupDataSource );
94+ }
95+
4896 @ Test
4997 public void testCalculateUpgradePath480to481 () {
5098
@@ -79,7 +127,7 @@ public void testCalculateUpgradePath490to4910() {
79127 assertTrue (upgrades .length >= 1 );
80128 assertTrue (upgrades [0 ] instanceof Upgrade490to4910 );
81129
82- assertTrue ( Arrays . equals ( new String [] {"4.9.0" , currentVersion .toString ()}, upgrades [0 ].getUpgradableVersionRange () ));
130+ assertArrayEquals ( new String []{"4.9.0" , currentVersion .toString ()}, upgrades [0 ].getUpgradableVersionRange ());
83131 assertEquals (currentVersion .toString (), upgrades [0 ].getUpgradedVersion ());
84132
85133 }
@@ -104,7 +152,7 @@ public void testCalculateUpgradePath410to412() {
104152 assertTrue (upgrades [3 ] instanceof Upgrade41120to41130 );
105153 assertTrue (upgrades [4 ] instanceof Upgrade41120to41200 );
106154
107- assertTrue ( Arrays . equals ( new String [] {"4.11.0.0" , "4.11.1.0" }, upgrades [1 ].getUpgradableVersionRange () ));
155+ assertArrayEquals ( new String []{"4.11.0.0" , "4.11.1.0" }, upgrades [1 ].getUpgradableVersionRange ());
108156 assertEquals (currentVersion .toString (), upgrades [4 ].getUpgradedVersion ());
109157
110158 }
@@ -151,12 +199,12 @@ public void testFindUpgradePath452to490() {
151199 assertTrue (upgrades [5 ] instanceof Upgrade471to480 );
152200 assertTrue (upgrades [6 ] instanceof Upgrade480to481 );
153201
154- assertTrue ( Arrays . equals ( new String [] {"4.8.1" , currentVersion .toString ()}, upgrades [upgrades .length - 1 ].getUpgradableVersionRange () ));
202+ assertArrayEquals ( new String []{"4.8.1" , currentVersion .toString ()}, upgrades [upgrades .length - 1 ].getUpgradableVersionRange ());
155203 assertEquals (currentVersion .toString (), upgrades [upgrades .length - 1 ].getUpgradedVersion ());
156204 }
157205
158206 @ Test
159- public void testCalculateUpgradePathUnkownDbVersion () {
207+ public void testCalculateUpgradePathUnknownDbVersion () {
160208
161209 final CloudStackVersion dbVersion = CloudStackVersion .parse ("4.99.0.0" );
162210 assertNotNull (dbVersion );
@@ -173,7 +221,7 @@ public void testCalculateUpgradePathUnkownDbVersion() {
173221 }
174222
175223 @ Test
176- public void testCalculateUpgradePathFromKownDbVersion () {
224+ public void testCalculateUpgradePathFromKnownDbVersion () {
177225
178226 final CloudStackVersion dbVersion = CloudStackVersion .parse ("4.17.0.0" );
179227 assertNotNull (dbVersion );
@@ -306,4 +354,25 @@ public void testCalculateUpgradePathFromSecurityReleaseToNextSecurityRelease() {
306354 assertEquals (upgrades .length + 1 , upgradesFromSecurityReleaseToNext .length );
307355 assertTrue (upgradesFromSecurityReleaseToNext [upgradesFromSecurityReleaseToNext .length - 1 ] instanceof NoopDbUpgrade );
308356 }
357+
358+ @ Test
359+ public void isStandalone () throws SQLException {
360+ // simulate zero 'UP' hosts -> standalone
361+ Mockito .when (resultSet .next ()).thenReturn (true );
362+ Mockito .when (resultSet .getInt (1 )).thenReturn (0 );
363+
364+ final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker ();
365+ assertTrue ("DatabaseUpgradeChecker should be a standalone component" , checker .isStandalone ());
366+ }
367+
368+ @ Test
369+ public void isNotStandalone () throws SQLException {
370+ // simulate at least one 'UP' host -> not standalone
371+ Mockito .when (resultSet .next ()).thenReturn (true );
372+ Mockito .when (resultSet .getInt (1 )).thenReturn (1 );
373+
374+ final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker ();
375+ assertFalse ("DatabaseUpgradeChecker should not be a standalone component" , checker .isStandalone ());
376+ }
377+
309378}
0 commit comments