/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.datamanagement.internal;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.BundleContext;
import de.rcenvironment.core.authorization.AuthorizationException;
import de.rcenvironment.core.communication.api.CommunicationService;
import de.rcenvironment.core.communication.common.InstanceNodeId;
import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils;
import de.rcenvironment.core.communication.common.ResolvableNodeId;
import de.rcenvironment.core.communication.testutils.CommunicationServiceDefaultStub;
import de.rcenvironment.core.communication.testutils.PlatformServiceDefaultStub;
import de.rcenvironment.core.datamanagement.RemotableFileDataService;
import de.rcenvironment.core.datamanagement.RemotableMetaDataService;
import de.rcenvironment.core.datamanagement.backend.DataBackend;
import de.rcenvironment.core.datamanagement.backend.MetaDataBackendService;
import de.rcenvironment.core.datamanagement.commons.BinaryReference;
import de.rcenvironment.core.datamanagement.commons.DataReference;
import de.rcenvironment.core.datamanagement.testutils.FileDataServiceDefaultStub;
import de.rcenvironment.core.datamodel.api.CompressionFormat;
/**
* Test cases for {@link DataServiceImpl}.
*
* @author Doreen Seider
* @author Robert Mischke (8.0.0 id adaptations)
*/
public class DataServiceImplTest {
private InstanceNodeId pi;
private UUID drId;
private RemotableFileDataServiceImpl fileDataService;
private DataReference dr;
private DataReference newestDr;
/** Set up. */
@Before
public void setUp() {
pi = NodeIdentifierTestUtils.createTestInstanceNodeIdWithDisplayName("dummy");
drId = UUID.randomUUID();
Set<BinaryReference> birefs = new HashSet<BinaryReference>();
birefs.add(new BinaryReference(UUID.randomUUID().toString(), CompressionFormat.GZIP, "1"));
dr = new DataReference(drId.toString(), pi, birefs);
birefs = new HashSet<BinaryReference>();
birefs.add(new BinaryReference(UUID.randomUUID().toString(), CompressionFormat.GZIP, "1"));
newestDr = new DataReference(UUID.randomUUID().toString(), pi, birefs);
fileDataService = new RemotableFileDataServiceImpl();
fileDataService.bindPlatformService(new PlatformServiceDefaultStub());
fileDataService.activate(EasyMock.createNiceMock(BundleContext.class));
MetaDataBackendService dummyCatalogBackend = EasyMock.createNiceMock(MetaDataBackendService.class);
new BackendSupportTest().setUp();
new BackendSupport().activate(BackendSupportTest.createBundleContext(dummyCatalogBackend, new DummyDataBackend()));
}
/** Test. */
@Test
public void testDeleteReference() {
fileDataService.deleteReference(dr.getBinaryReferences().iterator().next().getBinaryReferenceKey());
}
/**
* Test implementation of the {@link CommunicationService}.
*
* @author Doreen Seider
*/
private class DummyCommunicationService extends CommunicationServiceDefaultStub {
@SuppressWarnings("unchecked")
@Override
public <T> T getRemotableService(Class<T> iface, ResolvableNodeId nodeId) {
T service = null;
if (iface.equals(RemotableMetaDataService.class)) {
service = (T) EasyMock.createNiceMock(RemotableMetaDataService.class);
} else if (iface.equals(RemotableFileDataService.class)) {
service = (T) new DummyFileDataService();
}
return service;
}
}
/**
* Test implementation of the {@link RemotableFileDataService}.
*
* @author Doreen Seider
*/
private class DummyFileDataService extends FileDataServiceDefaultStub {
@Override
public InputStream getStreamFromDataReference(DataReference dataReference, Boolean calledFromRemote)
throws AuthorizationException {
if (dataReference.equals(newestDr)) {
return new InputStream() {
@Override
public int read() throws IOException {
return 0;
}
};
}
return null;
}
}
/**
* Test implementation of {@link DataBackend}.
*
* @author Doreen Seider
*/
private class DummyDataBackend implements DataBackend {
@Override
public URI suggestLocation(UUID guid) {
return null;
}
@Override
public long put(URI loc, Object object) {
return 0;
}
@Override
public boolean delete(URI loc) {
return false;
}
@Override
public Object get(URI loc) {
return null;
}
}
}