/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.datamanagement.backend.data.efs.internal; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import java.net.URISyntaxException; import java.util.UUID; import java.util.zip.GZIPInputStream; import org.easymock.EasyMock; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.runtime.CoreException; import org.junit.Before; import org.junit.Test; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import de.rcenvironment.core.configuration.ConfigurationService; import de.rcenvironment.core.configuration.testutils.MockConfigurationService; /** * Test cases for {@link EFSDataBackend}. * * @author Doreen Seider */ public class EFSDataBackendTest { private EFSDataBackend efsDataBackend; private EFSDataBackendConfiguration config; private IFileStore fileStore = EasyMock.createNiceMock(IFileStore.class); private URI uri; private InputStream is; private InputStream brokenIs; private OutputStream os; private UUID uuid = UUID.randomUUID(); private String storage = "src/test/resources"; private String bundleName = "ick mag dir"; private int writtenBytes = 9; /** * Set up. * * @throws Exception if an error occurs. **/ @Before public void setUp() throws Exception { uri = new EFSDataBackend().suggestLocation(uuid); config = new EFSDataBackendConfiguration(); config.setEfsStorage(storage); fileStore = EasyMock.createNiceMock(IFileStore.class); EasyMock.expect(fileStore.getParent()).andReturn(fileStore).anyTimes(); is = EasyMock.createNiceMock(GZIPInputStream.class); final int bufferSize = 256 * 1024; final int endOfRead = -1; byte[] buffer = new byte[bufferSize]; EasyMock.expect(is.read(EasyMock.aryEq(buffer))).andReturn(writtenBytes); EasyMock.expect(is.read(EasyMock.aryEq(buffer))).andReturn(endOfRead); EasyMock.replay(is); EasyMock.expect(fileStore.openInputStream(EFS.NONE, null)).andReturn(is); brokenIs = EasyMock.createNiceMock(InputStream.class); EasyMock.expect(brokenIs.read(EasyMock.aryEq(buffer))).andThrow(new IOException()); EasyMock.replay(brokenIs); EasyMock.expect(fileStore.openInputStream(EFS.NONE, null)).andReturn(brokenIs); os = EasyMock.createNiceMock(OutputStream.class); EasyMock.expect(fileStore.openOutputStream(EFS.NONE, null)).andReturn(os).anyTimes(); EasyMock.expect(fileStore.getName()).andReturn(uuid.toString()).anyTimes(); EasyMock.expect(fileStore.childNames(EFS.NONE, null)).andReturn(new String[] {}).anyTimes(); EasyMock.replay(fileStore); efsDataBackend = new EFSDataBackend(); efsDataBackend.bindConfigurationService(new DummyConfigurationService()); efsDataBackend.bindEncapsulatedEFSService(new DummyEncapsulatedEFSService()); Bundle bundle = EasyMock.createNiceMock(Bundle.class); EasyMock.expect(bundle.getSymbolicName()).andReturn(bundleName).anyTimes(); EasyMock.replay(bundle); BundleContext bundleContext = EasyMock.createNiceMock(BundleContext.class); EasyMock.expect(bundleContext.getBundle()).andReturn(bundle).anyTimes(); EasyMock.replay(bundleContext); efsDataBackend.activate(bundleContext); } /** Test. */ @Test public void testGet() { try { efsDataBackend.get(new URI("yeah://besser")); fail(); } catch (URISyntaxException e) { fail(); } catch (IllegalArgumentException e) { assertTrue(true); } } /** Test. */ @Test public void testPut() { try { efsDataBackend.put(uri, (Object) brokenIs); fail(); } catch (RuntimeException e) { assertTrue(true); } try { efsDataBackend.put(uri, new Object()); fail(); } catch (IllegalArgumentException e) { assertTrue(true); } try { efsDataBackend.put(new URI("och://du"), (Object) is); fail(); } catch (URISyntaxException e) { fail(); } catch (IllegalArgumentException e) { assertTrue(true); } } /** Test. */ @Test public void testSuggestLocation() { assertNotNull(efsDataBackend.suggestLocation(UUID.randomUUID())); } /** Test. */ @Test public void testDelete() { // create file (on base of URI) in file system to delete String dirPath = new File(config.getEfsStorage()).getAbsoluteFile().getAbsolutePath(); File dir = new File(dirPath); dir.mkdirs(); File file = new File(dirPath + File.separator + uuid); try { file.createNewFile(); } catch (IOException e) { fail(); } assertTrue(efsDataBackend.delete(uri)); try { efsDataBackend.delete(new URI("jap://gehtSo")); fail(); } catch (URISyntaxException e) { fail(); } catch (IllegalArgumentException e) { assertTrue(true); } file.delete(); dir.delete(); assertFalse(efsDataBackend.delete(uri)); } /** * Test implementation of {@link ConfigurationService}. * * @author Doreen Seider */ private class DummyConfigurationService extends MockConfigurationService.ThrowExceptionByDefault { @Override @SuppressWarnings("unchecked") public <T> T getConfiguration(String identifier, Class<T> clazz) { return (T) config; } @Override public File getProfileDirectory() { return new File(System.getProperty("java.io.tmpdir"), "unittest-temp"); // TODO improve } @Override public File initializeSubDirInConfigurablePath(ConfigurablePathId pathId, String relativePath) { return new File(config.getEfsStorage()); } } /** * Test implementation of {@link EncapsulatedEFSService}. * * @author Doreen Seider */ private class DummyEncapsulatedEFSService implements EncapsulatedEFSService { @Override public IFileStore getStore(URI location) throws CoreException { return fileStore; } } }