/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.file.service.legacy.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.net.URI;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import de.rcenvironment.core.communication.api.CommunicationService;
import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils;
import de.rcenvironment.core.communication.common.NodeIdentifierUtils;
import de.rcenvironment.core.communication.common.ResolvableNodeId;
import de.rcenvironment.core.communication.file.service.legacy.api.RemotableFileStreamAccessService;
import de.rcenvironment.core.communication.fileaccess.api.RemoteFileConnection;
import de.rcenvironment.core.communication.fileaccess.api.RemoteFileConnection.FileType;
import de.rcenvironment.core.communication.testutils.CommunicationServiceDefaultStub;
/**
* Test cases for {@link ServiceRemoteFileConnection}.
*
* @author Doreen Seider
* @author Robert Mischke (8.0.0 id adaptations)
*/
@Deprecated
public class ServiceRemoteFileConnectionTest {
private static final String TEST_INSTANCE_ID_STRING = NodeIdentifierTestUtils.createTestInstanceNodeIdString();
private final UUID dmUuid = UUID.randomUUID();
// TODO review/encapsulate
private final String uri = "rce://" + TEST_INSTANCE_ID_STRING + "/" + dmUuid + "/7";
/**
* Common setup.
*/
@Before
public void setup() {
NodeIdentifierTestUtils.attachTestNodeIdentifierServiceToCurrentThread();
}
/**
* Common teardown.
*/
@After
public void teardown() {
NodeIdentifierTestUtils.removeTestNodeIdentifierServiceFromCurrentThread();
}
/**
* Test.
*
* @throws Exception if the test fails.
*/
@Test
public void defaultTest() throws Exception {
RemoteFileConnection connection = new ServiceRemoteFileConnection(new URI(uri), new DummyCommunicationService());
int read = connection.read();
final int minusOne = -1;
assertTrue(read > minusOne);
byte[] b = new byte[5];
read = connection.read(b, 0, 5);
connection.skip(5);
assertEquals(5, read);
connection.close();
}
/**
* Dummy {@link CommunicationService} implementation.
*
* @author Doreen Seider
*/
private class DummyCommunicationService extends CommunicationServiceDefaultStub {
@SuppressWarnings("unchecked")
@Override
public <T> T getRemotableService(Class<T> iface, ResolvableNodeId nodeId2) throws IllegalStateException {
// TODO could be improved; uses unnecessary conversions
if (nodeId2.isSameInstanceNodeAs(NodeIdentifierUtils
.parseArbitraryIdStringToLogicalNodeIdWithExceptionWrapping(TEST_INSTANCE_ID_STRING))
&& iface == RemotableFileStreamAccessService.class) {
return (T) new MockRemotableFileStreamAccessService();
}
return null;
}
/**
* Mock {@link RemotableFileStreamAccessService} implementation.
*
* @author Doreen Seider
* @author Robert Mischke (adapted for 7.0.0)
*/
private class MockRemotableFileStreamAccessService implements RemotableFileStreamAccessService {
private final String testUUID = "snoopy";
@Override
public void close(String uuid) throws IOException {}
@Override
public String open(FileType type, String file) throws IOException {
return testUUID;
}
@Override
public int read(String uuid) throws IOException {
if (uuid.equals(testUUID)) {
return 5;
}
return 0;
}
@Override
public byte[] read(String uuid, Integer len) throws IOException {
if (uuid.equals(testUUID)) {
return new byte[len];
}
return new byte[0];
}
@Override
public long skip(String uuid, Long n) throws IOException {
if (uuid.equals(testUUID)) {
return n;
}
return 0;
}
}
}
}