@Override public boolean isRunning() { //we have to get our state from cassandra for(final String pluginName :getPluginNames()){ if( migrationInfoSerialization.getStatusCode(pluginName) == StatusCode.RUNNING.status){ return true; } } return false; }
@Test public void testNoPlugins() { final Set<MigrationPlugin> plugins = new HashSet<>(); final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class ); final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class); DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization, migrationInfoCache ); Set<String> pluginNames = migrationManager.getPluginNames(); assertEquals( 0, pluginNames.size() ); }
@Test public void test2Plugins() throws MigrationException { final Set<MigrationPlugin> plugins = new HashSet<>(); MigrationPlugin plugin1 = mock( MigrationPlugin.class ); when( plugin1.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin1.getName() ).thenReturn( "plugin1" ); MigrationPlugin plugin2 = mock( MigrationPlugin.class ); when( plugin2.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin2.getName() ).thenReturn( "plugin2" ); plugins.add( plugin1 ); plugins.add( plugin2 ); final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class ); final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class); DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization,migrationInfoCache ); Set<String> pluginNames = migrationManager.getPluginNames(); assertEquals(2, pluginNames.size()); assertTrue( pluginNames.contains( "plugin1" ) ); assertTrue(pluginNames.contains("plugin2")); //now run them migrationManager.migrate(); verify( plugin1 ).run(any(ProgressObserver.class)); verify( plugin2 ).run( any( ProgressObserver.class ) ); verify(migrationInfoCache,Mockito.times(2)).invalidateAll(); }
@Test public void testPluginByName() throws MigrationException { final Set<MigrationPlugin> plugins = new HashSet<>(); MigrationPlugin plugin1 = mock( MigrationPlugin.class ); when( plugin1.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin1.getName() ).thenReturn( "plugin1" ); MigrationPlugin plugin2 = mock( MigrationPlugin.class ); when( plugin2.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin2.getName() ).thenReturn( "plugin2" ); plugins.add( plugin1 ); plugins.add( plugin2 ); final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class ); final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class); DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization,migrationInfoCache ); Set<String> pluginNames = migrationManager.getPluginNames(); assertEquals(2, pluginNames.size()); assertTrue(pluginNames.contains("plugin1")); assertTrue(pluginNames.contains("plugin2")); //now run them migrationManager.migrate("plugin1"); verify( plugin1 ).run(any(ProgressObserver.class)); }
@Test public void testExecutionOrder() throws MigrationException { //linked hash set is intentional here. For iteration order we can boostrap to come second so we can //verify it was actually run first final Set<MigrationPlugin> plugins = new LinkedHashSet<>(); MigrationPlugin plugin1 = mock( MigrationPlugin.class ); when( plugin1.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin1.getName() ).thenReturn( "plugin1" ); //boostrap plugin, should run first MigrationPlugin plugin2 = mock( MigrationPlugin.class ); when( plugin2.getPhase() ).thenReturn( PluginPhase.BOOTSTRAP ); when( plugin2.getName() ).thenReturn( "plugin2" ); plugins.add( plugin1 ); plugins.add( plugin2 ); final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class ); final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class); DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization, migrationInfoCache ); Set<String> pluginNames = migrationManager.getPluginNames(); assertEquals( 2, pluginNames.size() ); assertTrue( pluginNames.contains( "plugin1" ) ); assertTrue( pluginNames.contains( "plugin2" ) ); //now run them migrationManager.migrate(); //we want to verify the bootsrap plugin was called first InOrder inOrderVerification = inOrder( plugin1, plugin2 ); inOrderVerification.verify( plugin2 ).run( any( ProgressObserver.class ) ); inOrderVerification.verify( plugin1 ).run( any( ProgressObserver.class ) ); verify(migrationInfoCache, Mockito.times(2)).invalidateAll(); }
@Test public void testPluginExists() throws MigrationException { final Set<MigrationPlugin> plugins = new HashSet<>(); MigrationPlugin plugin1 = mock( MigrationPlugin.class ); when( plugin1.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin1.getName() ).thenReturn( "plugin1" ); MigrationPlugin plugin2 = mock( MigrationPlugin.class ); when( plugin2.getPhase() ).thenReturn( PluginPhase.MIGRATE ); when( plugin2.getName() ).thenReturn( "plugin2" ); plugins.add( plugin1 ); plugins.add( plugin2 ); final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class ); final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class); DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization,migrationInfoCache ); Set<String> pluginNames = migrationManager.getPluginNames(); assertEquals(2, pluginNames.size()); assertTrue(pluginNames.contains("plugin1")); assertTrue(pluginNames.contains("plugin2")); //now run them assertTrue( migrationManager.pluginExists("plugin1") ); assertTrue( migrationManager.pluginExists("plugin2") ); assertFalse( migrationManager.pluginExists("plugin3") ); }