package io.eguan.vold.rest.resources;
/*
* #%L
* Project eguan
* %%
* Copyright (C) 2012 - 2017 Oodrive
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import io.eguan.vold.rest.generated.model.ConnectionInfo;
import io.eguan.vold.rest.generated.model.Device;
import io.eguan.vold.rest.generated.model.Snapshot;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBException;
import org.junit.Test;
import com.google.common.base.Strings;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.ClientResponse.Status;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.core.util.MultivaluedMapImpl;
public final class TestDeviceResourceL extends AbstractVvrResourceTest {
private static final int DEFAULT_ISCSI_SERVER_PORT = 3260;
private static final int DEFAULT_NBD_SERVER_PORT = 10809;
private static final String classNamePrefix = TestDeviceResourceL.class.getSimpleName();
public TestDeviceResourceL(final MediaType runContentType, final MediaType runAcceptType) {
super(runContentType, runAcceptType);
}
@Test
public final void testGetDevice() throws TimeoutException {
final WebResource rootSnapResource = getVvrResource().path("root");
assertNotNull(rootSnapResource);
final String devName = classNamePrefix + "-getDevice";
final long devSize = DEFAULT_DEVICE_SIZE;
final MultivaluedMapImpl createDevParams = new MultivaluedMapImpl();
createDevParams.add("name", devName);
createDevParams.add("size", devSize);
final WebResource deviceResource = createDevice(rootSnapResource, createDevParams);
assertNotNull(deviceResource);
final Device result = prebuildRequest(deviceResource, null).get(Device.class);
assertNotNull(result);
assertNotNull(result.getUuid());
assertEquals(devSize, result.getSize());
assertEquals(devName, result.getName());
}
@Test
public final void testPostDevice() throws TimeoutException, JAXBException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final Device originalDev = prebuildRequest(deviceResource, null).get(Device.class);
assertNotNull(originalDev);
assertNotNull(originalDev.getUuid());
final Device modifiedDev = deviceReplicator.replicate(originalDev);
assertFalse(originalDev == modifiedDev);
modifiedDev.setName(classNamePrefix + " - modified device");
modifiedDev.setDescription(classNamePrefix + " is now modified ");
final ClientResponse postResponse = prebuildRequest(deviceResource, null).post(ClientResponse.class,
modifiedDev);
assertEquals(Status.OK.getStatusCode(), postResponse.getStatus());
final Device updatedDev = postResponse.getEntity(Device.class);
assertNotNull(updatedDev);
assertEquals(originalDev.getUuid(), updatedDev.getUuid());
assertEquals(originalDev.getSize(), updatedDev.getSize());
assertEquals(modifiedDev.getName(), updatedDev.getName());
assertEquals(modifiedDev.getDescription(), updatedDev.getDescription());
}
@Test
public final void testPostDeviceFailNull() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final ClientResponse postResponse = prebuildRequest(deviceResource, null).post(ClientResponse.class, null);
assertEquals(Status.BAD_REQUEST.getStatusCode(), postResponse.getStatus());
}
@Test
public final void testPostDeviceFailIdChanged() throws TimeoutException, JAXBException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final Device originalDev = prebuildRequest(deviceResource, null).get(Device.class);
assertNotNull(originalDev);
assertNotNull(originalDev.getUuid());
final Device modifiedDev = deviceReplicator.replicate(originalDev);
assertFalse(originalDev == modifiedDev);
modifiedDev.setName(classNamePrefix + " - modified device");
modifiedDev.setDescription(classNamePrefix + " is now modified ");
// modifies the ID
modifiedDev.setUuid(UUID.randomUUID().toString());
final ClientResponse postResponse = prebuildRequest(deviceResource, null).post(ClientResponse.class,
modifiedDev);
assertEquals(Status.FORBIDDEN.getStatusCode(), postResponse.getStatus());
final Device readDev = prebuildRequest(deviceResource, null).get(Device.class);
assertNotNull(readDev);
assertEquals(originalDev.getUuid(), readDev.getUuid());
assertEquals(originalDev.getSize(), readDev.getSize());
assertEquals(originalDev.getName(), readDev.getName());
assertEquals(originalDev.getDescription(), readDev.getDescription());
}
@Test
public final void testDeleteDevice() throws IllegalStateException, TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final Device targetDev = prebuildRequest(deviceResource, null).get(Device.class);
assertNotNull(targetDev);
assertNotNull(targetDev.getUuid());
final ClientResponse deleteResponse = prebuildRequest(deviceResource, null).delete(ClientResponse.class);
final WebResource deletedDeviceRes = getResultFromTask(deleteResponse, TimeUnit.SECONDS, DEFAULT_TASK_TIMEOUT_S);
final ClientResponse getResponse = prebuildRequest(deletedDeviceRes, null).get(ClientResponse.class);
assertEquals(Status.NOT_FOUND.getStatusCode(), getResponse.getStatus());
}
@Test
public final void testDeleteDeviceFailDeviceActive() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final WebResource activatedDevRes = activateDevice(deviceResource, false);
final ClientResponse deleteResponse = prebuildRequest(activatedDevRes, null).delete(ClientResponse.class);
assertEquals(Status.FORBIDDEN.getStatusCode(), deleteResponse.getStatus());
}
@Test
public final void testActivateDeactivateDevice() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final Device inactiveDevice = prebuildRequest(deviceResource, null).get(Device.class);
assertNotNull(inactiveDevice);
assertFalse(inactiveDevice.isActive());
assertFalse(inactiveDevice.isReadOnly());
final WebResource activatedDevRes = activateDevice(deviceResource, false);
final Device activatedDevice = prebuildRequest(activatedDevRes, null).get(Device.class);
assertNotNull(activatedDevice);
assertEquals(inactiveDevice.getUuid(), activatedDevice.getUuid());
assertTrue(activatedDevice.isActive());
assertFalse(activatedDevice.isReadOnly());
final WebResource deactivatedDevRes = deactivateDevice(activatedDevRes);
final Device deactivatedDevice = prebuildRequest(deactivatedDevRes, null).get(Device.class);
assertNotNull(deactivatedDevice);
assertEquals(deactivatedDevice.getUuid(), activatedDevice.getUuid());
assertFalse(deactivatedDevice.isActive());
assertFalse(activatedDevice.isReadOnly());
final WebResource twiceDeactivatedDevRes = deactivateDevice(activatedDevRes);
final Device twiceDeactivatedDevice = prebuildRequest(twiceDeactivatedDevRes, null).get(Device.class);
assertNotNull(twiceDeactivatedDevice);
assertEquals(twiceDeactivatedDevice.getUuid(), activatedDevice.getUuid());
assertFalse(twiceDeactivatedDevice.isActive());
assertFalse(activatedDevice.isReadOnly());
}
@Test
public final void testActivateDeviceFailActive() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final WebResource activatedDevRes = activateDevice(deviceResource, false);
final Device activatedDevice = prebuildRequest(activatedDevRes, null).get(Device.class);
assertNotNull(activatedDevice);
assertTrue(activatedDevice.isActive());
assertFalse(activatedDevice.isReadOnly());
final WebResource activateActionRes = deviceResource.path("action/activate");
final MultivaluedMapImpl activateParams = new MultivaluedMapImpl();
activateParams.add("readOnly", false);
final ClientResponse activateResponse = prebuildRequest(activateActionRes, activateParams).post(
ClientResponse.class);
assertEquals(Status.FORBIDDEN.getStatusCode(), activateResponse.getStatus());
}
@Test
public final void testResizeDevice() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final Device originalDevice = prebuildRequest(deviceResource, null).get(Device.class);
assertNotNull(originalDevice);
assertFalse(originalDevice.isActive());
final long origSize = originalDevice.getSize();
assertTrue(origSize >= 0);
final long inactiveAugmentedSize = origSize + DEFAULT_DEVICE_SIZE;
final long inactiveReducedSize = Math.max(origSize, DEFAULT_DEVICE_SIZE / 2);
final WebResource resizeActionRes = deviceResource.path("action/resize");
final MultivaluedMapImpl resizeParams = new MultivaluedMapImpl();
resizeParams.add("size", inactiveAugmentedSize);
final WebResource inactiveAugmentedDeviceRes = getResultFromTask(prebuildRequest(resizeActionRes, resizeParams)
.post(ClientResponse.class), TimeUnit.SECONDS, DEFAULT_TASK_TIMEOUT_S);
assertNotNull(inactiveAugmentedDeviceRes);
final Device inactiveAugmentedDevice = prebuildRequest(inactiveAugmentedDeviceRes, null).get(Device.class);
assertEquals(originalDevice.getUuid(), inactiveAugmentedDevice.getUuid());
assertEquals(inactiveAugmentedSize, inactiveAugmentedDevice.getSize());
resizeParams.putSingle("size", inactiveReducedSize);
final WebResource inactiveReducedDeviceRes = getResultFromTask(prebuildRequest(resizeActionRes, resizeParams)
.post(ClientResponse.class), TimeUnit.SECONDS, DEFAULT_TASK_TIMEOUT_S);
final Device inactiveReducedDevice = prebuildRequest(inactiveReducedDeviceRes, null).get(Device.class);
assertEquals(originalDevice.getUuid(), inactiveReducedDevice.getUuid());
assertEquals(inactiveReducedSize, inactiveReducedDevice.getSize());
final WebResource activeDeviceRes = activateDevice(deviceResource, false);
final Device activeDevice = prebuildRequest(activeDeviceRes, null).get(Device.class);
assertNotNull(activeDevice);
assertTrue(activeDevice.isActive());
final long activeNewSize = inactiveReducedSize + DEFAULT_DEVICE_SIZE;
resizeParams.putSingle("size", activeNewSize);
final WebResource activeResizedDeviceRes = getResultFromTask(prebuildRequest(resizeActionRes, resizeParams)
.post(ClientResponse.class), TimeUnit.SECONDS, DEFAULT_TASK_TIMEOUT_S);
assertNotNull(activeResizedDeviceRes);
final Device activeResizedDevice = prebuildRequest(inactiveAugmentedDeviceRes, null).get(Device.class);
assertEquals(originalDevice.getUuid(), activeResizedDevice.getUuid());
assertEquals(activeNewSize, activeResizedDevice.getSize());
}
@Test
public final void testResizeDeviceFailMissingSize() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final WebResource resizeActionRes = deviceResource.path("action/resize");
final ClientResponse resizeResponse = prebuildRequest(resizeActionRes, null).post(ClientResponse.class);
assertEquals(Status.FORBIDDEN.getStatusCode(), resizeResponse.getStatus());
}
@Test
public final void testResizeDeviceFailNegativeSize() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final MultivaluedMapImpl resizeParams = new MultivaluedMapImpl();
resizeParams.add("size", (-1) * DEFAULT_DEVICE_SIZE);
final WebResource resizeActionRes = deviceResource.path("action/resize");
final ClientResponse resizeResponse = prebuildRequest(resizeActionRes, resizeParams).post(ClientResponse.class);
assertEquals(Status.FORBIDDEN.getStatusCode(), resizeResponse.getStatus());
}
@Test
public final void testResizeDeviceFailSizeReducedAndActive() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final long startSize = 2 * DEFAULT_DEVICE_SIZE;
final WebResource resizeActionRes = deviceResource.path("action/resize");
final MultivaluedMapImpl resizeParams = new MultivaluedMapImpl();
resizeParams.add("size", startSize);
final WebResource startDeviceRes = getResultFromTask(
prebuildRequest(resizeActionRes, resizeParams).post(ClientResponse.class), TimeUnit.SECONDS,
DEFAULT_TASK_TIMEOUT_S);
assertNotNull(startDeviceRes);
final Device startDevice = prebuildRequest(startDeviceRes, null).get(Device.class);
assertFalse(startDevice.isActive());
assertEquals(startSize, startDevice.getSize());
activateDevice(startDeviceRes, false);
resizeParams.putSingle("size", startSize / 2);
final ClientResponse resizeResponse = prebuildRequest(resizeActionRes, resizeParams).post(ClientResponse.class);
assertEquals(Status.FORBIDDEN.getStatusCode(), resizeResponse.getStatus());
}
@Test
public final void testCreateSnapshotNoUuid() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
// Name only
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.add("name", "defSnap1");
final WebResource newSnapRes = createSnapshot(deviceResource, createSnapParams);
final Snapshot readSnap = prebuildRequest(newSnapRes, null).get(Snapshot.class);
assertEquals("defSnap1", readSnap.getName());
}
// Name + description
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.add("name", "defSnap2");
createSnapParams.add("description", "descriptionSnap2");
final WebResource newSnapRes = createSnapshot(deviceResource, createSnapParams);
final Snapshot readSnap = prebuildRequest(newSnapRes, null).get(Snapshot.class);
assertEquals("defSnap2", readSnap.getName());
assertEquals("descriptionSnap2", readSnap.getDescription());
}
}
@Test
public final void testCreateSnapshotWithUuid() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
// Name + uuid
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.add("name", "defSnap1");
final UUID snapUuid = UUID.randomUUID();
createSnapParams.add("uuid", snapUuid.toString());
final WebResource newSnapRes = createSnapshot(deviceResource, createSnapParams);
final Snapshot readSnap = prebuildRequest(newSnapRes, null).get(Snapshot.class);
assertEquals("defSnap1", readSnap.getName());
assertEquals(snapUuid.toString(), readSnap.getUuid());
}
// Name + uuid + description
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.add("name", "defSnap2");
createSnapParams.add("description", "descriptionSnap2");
final UUID snapUuid = UUID.randomUUID();
createSnapParams.add("uuid", snapUuid.toString());
final WebResource newSnapRes = createSnapshot(deviceResource, createSnapParams);
final Snapshot readSnap = prebuildRequest(newSnapRes, null).get(Snapshot.class);
assertEquals("defSnap2", readSnap.getName());
assertEquals("descriptionSnap2", readSnap.getDescription());
assertEquals(snapUuid.toString(), readSnap.getUuid());
}
}
@Test
public final void testCreateSnapshotNoName() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.remove("name");
final WebResource createSnapResource = deviceResource.path(CREATE_SNAPSHOT_PATH);
ClientResponse createResponse = prebuildRequest(createSnapResource, createSnapParams)
.post(ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), createResponse.getStatus());
final UUID devUuid = UUID.randomUUID();
createSnapParams.add("uuid", devUuid.toString());
createResponse = prebuildRequest(createSnapResource, createSnapParams).post(ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), createResponse.getStatus());
}
@Test
public final void testCreateSnapshotBadUuid() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.add("name", "defSnap");
createSnapParams.add("uuid", "uuid");
final WebResource createSnapResource = deviceResource.path(CREATE_SNAPSHOT_PATH);
final ClientResponse createResponse = prebuildRequest(createSnapResource, createSnapParams).post(
ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), createResponse.getStatus());
}
/**
* Test successful iSCSI connection information retrieval.
*
* @throws TimeoutException
* if device setup fails, not part of this test
*/
@Test
public final void testGetConnectionIscsi() throws TimeoutException {
final WebResource deviceResource = activateDevice(getDeviceResource(), false);
assertNotNull(deviceResource);
final Device device = prebuildRequest(deviceResource, null).get(Device.class);
assertTrue(device.isActive());
final WebResource connectionResource = deviceResource.path(CONNECTION_PATH);
final MultivaluedMapImpl getIscsiConnectParams = new MultivaluedMapImpl();
getIscsiConnectParams.add("ip", "198.51.100.24");
getIscsiConnectParams.add("clientProtocol", "iscsi");
final ClientResponse iscsiConnectResponse = prebuildRequest(connectionResource, getIscsiConnectParams).get(
ClientResponse.class);
assertEquals(Status.OK.getStatusCode(), iscsiConnectResponse.getStatus());
assertTrue(iscsiConnectResponse.hasEntity());
final ConnectionInfo iscsiConnectInfo = iscsiConnectResponse.getEntity(ConnectionInfo.class);
assertEquals("iscsi", iscsiConnectInfo.getDriverVolumeType());
assertFalse(Strings.isNullOrEmpty(iscsiConnectInfo.getServerAddress()));
assertEquals(Integer.valueOf(DEFAULT_ISCSI_SERVER_PORT), iscsiConnectInfo.getServerPort());
assertFalse(Strings.isNullOrEmpty(iscsiConnectInfo.getIqn()));
assertFalse(Strings.isNullOrEmpty(iscsiConnectInfo.getIscsiAlias()));
}
/**
* Test successful NBD connection information retrieval.
*
* @throws TimeoutException
* if device setup fails, not part of this test
*/
@Test
public final void testGetConnectionNbd() throws TimeoutException {
final WebResource deviceResource = activateDevice(getDeviceResource(), false);
assertNotNull(deviceResource);
final Device device = prebuildRequest(deviceResource, null).get(Device.class);
assertTrue(device.isActive());
final WebResource connectionResource = deviceResource.path(CONNECTION_PATH);
final MultivaluedMapImpl getNbdConnectParams = new MultivaluedMapImpl();
getNbdConnectParams.add("ip", "203.0.113.130");
getNbdConnectParams.add("clientProtocol", "nbd");
final ClientResponse nbdConnectResponse = prebuildRequest(connectionResource, getNbdConnectParams).get(
ClientResponse.class);
assertEquals(Status.OK.getStatusCode(), nbdConnectResponse.getStatus());
assertTrue(nbdConnectResponse.hasEntity());
final ConnectionInfo nbdConnectInfo = nbdConnectResponse.getEntity(ConnectionInfo.class);
assertEquals("nbd", nbdConnectInfo.getDriverVolumeType());
assertEquals(device.getName(), nbdConnectInfo.getDevName());
assertFalse(Strings.isNullOrEmpty(nbdConnectInfo.getServerAddress()));
assertEquals(Integer.valueOf(DEFAULT_NBD_SERVER_PORT), nbdConnectInfo.getServerPort());
assertFalse(Strings.isNullOrEmpty(nbdConnectInfo.getDevName()));
}
/**
* Test failed connection information retrieval due to an inactive device.
*
* @throws TimeoutException
* if device setup fails, not part of this test
*/
@Test
public final void testGetConnectionFailNotActive() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final Device device = prebuildRequest(deviceResource, null).get(Device.class);
assertFalse(device.isActive());
final WebResource connectionResource = deviceResource.path(CONNECTION_PATH);
final MultivaluedMapImpl getConnectParams = new MultivaluedMapImpl();
getConnectParams.add("ip", "203.0.113.130");
getConnectParams.add("clientProtocol", "iscsi");
final ClientResponse connectResponse = prebuildRequest(connectionResource, getConnectParams).get(
ClientResponse.class);
assertEquals(Status.FORBIDDEN.getStatusCode(), connectResponse.getStatus());
}
/**
* Test failed connection information retrieval due to a missing client IP address.
*
* @throws TimeoutException
* if device setup fails, not part of this test
*/
@Test
public final void testGetConnectionFailNoIp() throws TimeoutException {
final WebResource deviceResource = activateDevice(getDeviceResource(), false);
assertNotNull(deviceResource);
final Device device = prebuildRequest(deviceResource, null).get(Device.class);
assertTrue(device.isActive());
final WebResource connectionResource = deviceResource.path(CONNECTION_PATH);
final MultivaluedMapImpl getConnectParams = new MultivaluedMapImpl();
getConnectParams.add("clientProtocol", "iscsi");
final ClientResponse connectResponse = prebuildRequest(connectionResource, getConnectParams).get(
ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), connectResponse.getStatus());
}
/**
* Test failed connection information retrieval due to an invalid client IP address.
*
* @throws TimeoutException
* if device setup fails, not part of this test
*/
@Test
public final void testGetConnectionFailBadIp() throws TimeoutException {
final WebResource deviceResource = activateDevice(getDeviceResource(), false);
assertNotNull(deviceResource);
final Device device = prebuildRequest(deviceResource, null).get(Device.class);
assertTrue(device.isActive());
final WebResource connectionResource = deviceResource.path(CONNECTION_PATH);
final MultivaluedMapImpl getConnectParams = new MultivaluedMapImpl();
getConnectParams.add("ip", "to.the.unknown.h0$t");
getConnectParams.add("clientProtocol", "iscsi");
final ClientResponse connectResponse = prebuildRequest(connectionResource, getConnectParams).get(
ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), connectResponse.getStatus());
}
/**
* Test failed connection information retrieval due to a missing client protocol.
*
* @throws TimeoutException
* if device setup fails, not part of this test
*/
@Test
public final void testGetConnectionFailNoProtocol() throws TimeoutException {
final WebResource deviceResource = activateDevice(getDeviceResource(), false);
assertNotNull(deviceResource);
final Device device = prebuildRequest(deviceResource, null).get(Device.class);
assertTrue(device.isActive());
final WebResource connectionResource = deviceResource.path(CONNECTION_PATH);
final MultivaluedMapImpl getConnectParams = new MultivaluedMapImpl();
getConnectParams.add("ip", "203.0.113.130");
final ClientResponse connectResponse = prebuildRequest(connectionResource, getConnectParams).get(
ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), connectResponse.getStatus());
}
/**
* Test failed connection information retrieval due to an unsupported client protocol.
*
* @throws TimeoutException
* if device setup fails, not part of this test
*/
@Test
public final void testGetConnectionFailBadProtocol() throws TimeoutException {
final WebResource deviceResource = activateDevice(getDeviceResource(), false);
assertNotNull(deviceResource);
final Device device = prebuildRequest(deviceResource, null).get(Device.class);
assertTrue(device.isActive());
final WebResource connectionResource = deviceResource.path(CONNECTION_PATH);
final MultivaluedMapImpl getConnectParams = new MultivaluedMapImpl();
getConnectParams.add("ip", "203.0.113.130");
getConnectParams.add("clientProtocol", "snailmail");
final ClientResponse connectResponse = prebuildRequest(connectionResource, getConnectParams).get(
ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), connectResponse.getStatus());
}
@Test
public final void testCloneDevice() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
// Name only
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.add("name", "clone1");
final WebResource newDeviceRes = cloneDevice(deviceResource, createSnapParams);
final Device readClone = prebuildRequest(newDeviceRes, null).get(Device.class);
assertEquals("clone1", readClone.getName());
}
// Name + description
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
createSnapParams.add("name", "clone2");
createSnapParams.add("description", "desc2");
final WebResource newDeviceRes = cloneDevice(deviceResource, createSnapParams);
final Device readClone = prebuildRequest(newDeviceRes, null).get(Device.class);
assertEquals("clone2", readClone.getName());
assertEquals("desc2", readClone.getDescription());
}
// Name + uuid
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
final UUID cloneUuid = UUID.randomUUID();
createSnapParams.add("name", "clone3");
createSnapParams.add("uuid", cloneUuid);
final WebResource newDeviceRes = cloneDevice(deviceResource, createSnapParams);
final Device readClone = prebuildRequest(newDeviceRes, null).get(Device.class);
assertEquals("clone3", readClone.getName());
assertEquals(cloneUuid.toString(), readClone.getUuid());
}
// Name + uuid + description
{
final MultivaluedMapImpl createSnapParams = new MultivaluedMapImpl();
final UUID cloneUuid = UUID.randomUUID();
createSnapParams.add("name", "clone4");
createSnapParams.add("description", "desc4");
createSnapParams.add("uuid", cloneUuid);
final WebResource newDeviceRes = cloneDevice(deviceResource, createSnapParams);
final Device readClone = prebuildRequest(newDeviceRes, null).get(Device.class);
assertEquals("clone4", readClone.getName());
assertEquals("desc4", readClone.getDescription());
assertEquals(cloneUuid.toString(), readClone.getUuid());
}
}
@Test
public final void testCloneDeviceNoName() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final MultivaluedMapImpl cloneDeviceParams = new MultivaluedMapImpl();
cloneDeviceParams.remove("name");
final WebResource cloneResource = deviceResource.path(CLONE_DEVICE_PATH);
// Clone with no param
ClientResponse cloneResponse = prebuildRequest(cloneResource, cloneDeviceParams).post(ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), cloneResponse.getStatus());
// try to clone only with uuid
final UUID devUuid = UUID.randomUUID();
cloneDeviceParams.add("uuid", devUuid);
cloneResponse = prebuildRequest(cloneResource, cloneDeviceParams).post(ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), cloneResponse.getStatus());
}
@Test
public final void testCloneDeviceBadUuid() throws TimeoutException {
final WebResource deviceResource = getDeviceResource();
assertNotNull(deviceResource);
final MultivaluedMapImpl cloneDeviceParams = new MultivaluedMapImpl();
cloneDeviceParams.add("name", "clone");
cloneDeviceParams.add("uuid", "uuid");
final WebResource cloneResource = deviceResource.path(CLONE_DEVICE_PATH);
final ClientResponse createResponse = prebuildRequest(cloneResource, cloneDeviceParams).post(
ClientResponse.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), createResponse.getStatus());
}
}