package com.rackspacecloud.blueflood.utils;
import com.rackspacecloud.blueflood.io.*;
import com.rackspacecloud.blueflood.service.Configuration;
import com.rackspacecloud.blueflood.service.CoreConfig;
import org.junit.Assert;
import org.junit.Test;
public class ModuleLoaderTest {
@Test
public void getInstanceShouldReturnCorrectInstance() throws Exception{
try {
// test that ModuleLoader for DISCOVERY_MODULES loads ElasticIO
System.setProperty("DISCOVERY_MODULES", "com.rackspacecloud.blueflood.io.ElasticIO");
Configuration.getInstance().init();
Object discoveryModule = ModuleLoader.getInstance(ElasticIO.class, CoreConfig.DISCOVERY_MODULES);
Assert.assertNotNull("discoveryModule should not be null", discoveryModule);
Assert.assertTrue(
"discoveryModule should be instanceof DiscoveryIO, but is " + discoveryModule.getClass(),
discoveryModule instanceof DiscoveryIO);
Assert.assertTrue(
"discoveryModule should be instanceof ElasticIO, but is " + discoveryModule.getClass(),
discoveryModule instanceof ElasticIO);
// test that ModuleLoader for EVENTS_MODULES loads EventElasticSearchIO
System.setProperty("EVENTS_MODULES", "com.rackspacecloud.blueflood.io.EventElasticSearchIO");
Configuration.getInstance().init();
Object eventsModules = ModuleLoader.getInstance(EventsIO.class, CoreConfig.EVENTS_MODULES);
Assert.assertNotNull("eventsModules should not be null", eventsModules);
Assert.assertTrue(
"eventsModules should be instanceof EventsIO, but is " + eventsModules.getClass(),
eventsModules instanceof EventsIO);
Assert.assertTrue(
"eventsModules should be instanceof EventElasticSearchIO, but is " + eventsModules.getClass(),
eventsModules instanceof EventElasticSearchIO);
// test that ModuleLoader did not mixed up the IO classes
Assert.assertFalse(
"ModuleLoader should not returned EventsIO instance for DISCOVERY_MODULES",
(ModuleLoader.getInstance(DiscoveryIO.class, CoreConfig.DISCOVERY_MODULES)) instanceof EventsIO);
Assert.assertFalse(
"ModuleLoader should not returned DiscoveryIO instance for EVENTS_MODULES",
(ModuleLoader.getInstance(DiscoveryIO.class, CoreConfig.EVENTS_MODULES)) instanceof DiscoveryIO);
} finally {
System.clearProperty("DISCOVERY_MODULES");
System.clearProperty("EVENTS_MODULES");
}
}
}