package dk.kb.yggdrasil.messaging; import java.io.File; import java.util.UUID; import org.apache.commons.io.FileUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.mockito.ArgumentMatcher; import org.mockito.Mockito; import dk.kb.yggdrasil.db.PreservationRequestState; import dk.kb.yggdrasil.json.preservation.PreservationRequest; import dk.kb.yggdrasil.json.preservation.PreservationResponse; import dk.kb.yggdrasil.messaging.MQ; import dk.kb.yggdrasil.messaging.RemotePreservationStateUpdater; import dk.kb.yggdrasil.preservation.PreservationState; @RunWith(JUnit4.class) public class RemotePreservationStateUpdaterTest { protected static PreservationRequest request; protected static final String NON_RANDOM_UUID = "random-uuid"; protected static File tempDir; @BeforeClass public static void beforeClass() throws Exception { request = new PreservationRequest(); request.Content_URI = null; request.File_UUID = null; request.metadata = ""; request.Model = "MODEL"; request.Preservation_profile = "collectionId"; request.UUID = NON_RANDOM_UUID; request.Valhal_ID = "ID"; tempDir = new File("tempDir"); tempDir.mkdirs(); } @AfterClass public static void afterClass() throws Exception { FileUtils.deleteDirectory(tempDir); } @Test public void testUsingStateDefaultsDetails() throws Exception { MQ mq = Mockito.mock(MQ.class); PreservationRequestState prs = new PreservationRequestState(request, PreservationState.PRESERVATION_REQUEST_RECEIVED, NON_RANDOM_UUID); RemotePreservationStateUpdater updater = new RemotePreservationStateUpdater(mq); updater.sendPreservationResponse(prs, PreservationState.PRESERVATION_REQUEST_FAILED); Mockito.verify(mq).publishPreservationResponse(Mockito.any(PreservationResponse.class)); } @Test public void testUsingSpecificDetails() throws Exception { MQ mq = Mockito.mock(MQ.class); PreservationRequestState prs = new PreservationRequestState(request, PreservationState.PRESERVATION_REQUEST_RECEIVED, NON_RANDOM_UUID); RemotePreservationStateUpdater updater = new RemotePreservationStateUpdater(mq); updater.sendPreservationResponseWithSpecificDetails(prs, PreservationState.PRESERVATION_REQUEST_FAILED, "Test are test specific details."); Mockito.verify(mq).publishPreservationResponse(Mockito.any(PreservationResponse.class)); } @Test public void testAllElements() throws Exception { MQ mq = Mockito.mock(MQ.class); final String warcId = UUID.randomUUID().toString(); File warc = new File(tempDir, warcId); try { Assert.assertFalse(warc.exists()); warc.createNewFile(); PreservationRequestState prs = new PreservationRequestState(request, PreservationState.PRESERVATION_REQUEST_RECEIVED, NON_RANDOM_UUID); prs.setMetadataWarcFile(warc); prs.setResourceWarcFile(warc); RemotePreservationStateUpdater updater = new RemotePreservationStateUpdater(mq); updater.sendPreservationResponseWithSpecificDetails(prs, PreservationState.PRESERVATION_PACKAGE_WAITING_FOR_MORE_DATA, "Test are test specific details."); ArgumentMatcher<PreservationResponse> matcher = new ArgumentMatcher<PreservationResponse>() { @Override public boolean matches(Object item) { PreservationResponse response = (PreservationResponse) item; if(!response.id.equals(request.Valhal_ID)) { return false; } if(!response.model.equals(request.Model)) { return false; } if(!response.preservation.preservation_state.equals(PreservationState.PRESERVATION_PACKAGE_WAITING_FOR_MORE_DATA.name())) { return false; } if(!response.preservation.warc_id.equals(warcId)) { return false; } if(!response.preservation.file_warc_id.equals(warcId)) { return false; } return true; } }; Mockito.verify(mq).publishPreservationResponse(Mockito.argThat(matcher)); } finally { if(warc.exists()) { warc.delete(); } } } }