package eu.europeana.cloud.service.mcs.persistent;
import eu.europeana.cloud.common.model.DataProvider;
import eu.europeana.cloud.common.model.File;
import eu.europeana.cloud.common.model.Representation;
import eu.europeana.cloud.service.mcs.persistent.swift.SwiftContentDAO;
import eu.europeana.cloud.service.mcs.UISClientHandler;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import static eu.europeana.cloud.service.mcs.Storage.OBJECT_STORAGE;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = { "classpath:/spiedServicesTestContext.xml" })
public class CassandraSwiftInteractionsTest extends CassandraTestBase {
@Autowired
private CassandraRecordService cassandraRecordService;
@Autowired
private SwiftContentDAO swiftContentDAO;
@Autowired
private UISClientHandler uisHandler;
private static final String providerId = "provider";
@After
public void resetMocks() {
Mockito.reset(swiftContentDAO);
Mockito.reset(uisHandler);
}
@Test
public void shouldRemainConsistentWhenSwiftNotWorks() throws Exception {
Mockito.doReturn(new DataProvider()).when(uisHandler)
.getProvider(providerId);
Mockito.doReturn(true).when(uisHandler).existsCloudId("id");
// prepare failure
Mockito.doThrow(new MockException()).when(swiftContentDAO)
.putContent(anyString(), any(InputStream.class));
// given representation
byte[] dummyContent = { 1, 2, 3 };
File f = new File("content.xml", "application/xml", null, null, 0, null, OBJECT_STORAGE);
Representation r = cassandraRecordService.createRepresentation("id",
"dc", providerId);
// when content is put
try {
cassandraRecordService.putContent(r.getCloudId(),
r.getRepresentationName(), r.getVersion(), f,
new ByteArrayInputStream(dummyContent));
} catch (MockException e) {
// it's expected
}
// then - no file should be present
Representation fetched = cassandraRecordService.getRepresentation(
r.getCloudId(), r.getRepresentationName(), r.getVersion());
Assert.assertTrue(fetched.getFiles().isEmpty());
}
static class MockException extends RuntimeException {
}
}