/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.datamanagement.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; import de.rcenvironment.core.configuration.ConfigurationService; import de.rcenvironment.core.configuration.testutils.MockConfigurationService; import de.rcenvironment.core.datamanagement.backend.DataBackend; import de.rcenvironment.core.datamanagement.backend.MetaDataBackendService; /** * Tests cases for {@link BackendSupport}. * * @author Juergen Klein * @author Doreen Seider */ public class BackendSupportTest { private static final String CLOSE_BRACKET = ")"; private static final String OPEN_BRACKET = "("; private static final String EQUALS_SIGN = "="; private static String xmlBackendProvider = "snoopy"; private static String fileBackendProvider = "linus"; private static String dataScheme = "ftp"; private static String catalogBackendProvider = "de.rcenvironment.core.datamanagement.backend.metadata.derby"; private MetaDataBackendService catalogBackend = EasyMock.createNiceMock(MetaDataBackendService.class); private DataBackend dataBackend; private BackendSupport backendSupport; /** Set up. */ @Before public void setUp() { dataBackend = EasyMock.createNiceMock(DataBackend.class); EasyMock.expect(dataBackend.get(EasyMock.anyObject(URI.class))).andReturn(new InputStream() { @Override public int read() throws IOException { return 0; } }); EasyMock.replay(dataBackend); backendSupport = new BackendSupport(); backendSupport.bindConfigurationService(new DummyConfigurationService()); backendSupport.bindDataBackendService(dataBackend); backendSupport.activate(createBundleContext(catalogBackend, dataBackend)); } /** Test. */ @Test public void testGetCatalogBackend() { assertEquals(catalogBackend, BackendSupport.getMetaDataBackend()); } /** Test. */ @Test public void testGetDataBackend() { URI dataUri = null; try { dataUri = new URI("ftp://eieiei"); } catch (URISyntaxException e) { fail(); } assertEquals(dataBackend, BackendSupport.getDataBackend(dataUri)); try { dataUri = new URI("efs://eieiei"); } catch (URISyntaxException e) { fail(); } try { BackendSupport.getDataBackend(dataUri); fail(); } catch (IllegalStateException e) { assertTrue(true); } assertEquals(dataBackend, BackendSupport.getDataBackend()); } /** * Test implementation of {@link ConfigurationService}. * * @author Doreen Seider */ private class DummyConfigurationService extends MockConfigurationService.ThrowExceptionByDefault { @SuppressWarnings("unchecked") @Override public <T> T getConfiguration(String identifier, Class<T> clazz) { DataManagementConfiguration config = new DataManagementConfiguration(); config.setMetaDataBackend(catalogBackendProvider); config.setFileDataBackend(fileBackendProvider); return (T) config; } } /** * Helper method creating a {@link BundleContext} object which retrieves the given backend services. * * @param catalogBackend {@link MetaDataBackendService} to retrieve. * @param dataBackend {@link DataBackend} to retrieve. * @return the {@link BundleContext}. */ public static BundleContext createBundleContext(MetaDataBackendService catalogBackend, DataBackend dataBackend) { BundleContext bundleContext = EasyMock.createNiceMock(BundleContext.class); Bundle bundleMock = EasyMock.createNiceMock(Bundle.class); EasyMock.expect(bundleMock.getSymbolicName()).andReturn("huebscherName").anyTimes(); EasyMock.replay(bundleMock); EasyMock.expect(bundleContext.getBundle()).andReturn(bundleMock).anyTimes(); // catalog backend String catalogFilterString = OPEN_BRACKET + MetaDataBackendService.PROVIDER + EQUALS_SIGN + catalogBackendProvider + CLOSE_BRACKET; ServiceReference catalogServiceRef = EasyMock.createNiceMock(ServiceReference.class); ServiceReference[] catalogServiceRefs = { catalogServiceRef }; try { EasyMock.expect(bundleContext.getServiceReferences(MetaDataBackendService.class.getName(), catalogFilterString)) .andReturn(catalogServiceRefs).anyTimes(); } catch (InvalidSyntaxException e) { throw new RuntimeException(e); } EasyMock.expect(bundleContext.getService(catalogServiceRef)).andReturn(catalogBackend).anyTimes(); // data backend String dataFilterStringForScheme = OPEN_BRACKET + DataBackend.PROVIDER + EQUALS_SIGN + fileBackendProvider + CLOSE_BRACKET; String dataFilterStringForProvider = OPEN_BRACKET + DataBackend.PROVIDER + EQUALS_SIGN + xmlBackendProvider + CLOSE_BRACKET; String dataSchemefilterString = OPEN_BRACKET + DataBackend.SCHEME + EQUALS_SIGN + dataScheme + CLOSE_BRACKET; ServiceReference dataServiceRef = EasyMock.createNiceMock(ServiceReference.class); ServiceReference[] dataServiceRefs = { dataServiceRef }; try { EasyMock.expect(bundleContext.getServiceReferences(DataBackend.class.getName(), dataFilterStringForProvider)) .andReturn(dataServiceRefs).anyTimes(); EasyMock.expect(bundleContext.getServiceReferences(DataBackend.class.getName(), dataFilterStringForScheme)) .andReturn(dataServiceRefs).anyTimes(); EasyMock.expect(bundleContext.getServiceReferences(DataBackend.class.getName(), dataSchemefilterString)) .andReturn(dataServiceRefs).anyTimes(); } catch (InvalidSyntaxException e) { throw new RuntimeException(e); } EasyMock.expect(bundleContext.getService((ServiceReference) dataServiceRef)).andReturn(dataBackend).anyTimes(); // for failures EasyMock.expect(bundleContext.getServiceReference((String) null)).andReturn(null).anyTimes(); EasyMock.replay(bundleContext); return bundleContext; } }