/* * Copyright 2012 Nodeable Inc * * 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. */ package com.streamreduce.core.service; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import javax.ws.rs.core.Response; import com.streamreduce.AbstractServiceTestCase; import com.streamreduce.core.model.Connection; import com.streamreduce.core.model.ConnectionCredentials; import com.streamreduce.core.model.OutboundConfiguration; import com.streamreduce.core.model.OutboundDataType; import com.streamreduce.rest.resource.ErrorMessage; import com.streamreduce.rest.resource.gateway.GatewayResource; import com.streamreduce.test.service.S3TestUtils; import com.streamreduce.test.service.TestUtils; import net.sf.json.JSONObject; import org.apache.commons.io.IOUtils; import org.jclouds.blobstore.domain.Blob; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.util.ReflectionTestUtils; public class OutboundStorageServiceRawToS3IT extends AbstractServiceTestCase { @Autowired GatewayResource gatewayResource; @Autowired OutboundStorageService outboundStorageService; S3TestUtils s3TestUtils; @After public void tearDown() throws Exception { try { if (s3TestUtils != null) { s3TestUtils.removeBuckets("com.streamreduce"); } } catch (Exception e) { logger.error("unable to delete buckets", e); } super.tearDown(); } @Test public void testSendRawMessageAppearsInS3() throws Exception { Connection testIMGConnection = createAndMockForIMGConnectionWithOutboundTypes(OutboundDataType.RAW); testIMGConnection.setUser(testUser); testIMGConnection.setAccount(testAccount); testIMGConnection.setId(null); connectionService.createConnection(testIMGConnection); JSONObject imgPayload = TestUtils.createValidSampleIMGPayload(); Response response = gatewayResource.createCustomConnectionMessage(imgPayload); //magic happens here //Start verification if (response.getStatus() != 201) { ErrorMessage e = (ErrorMessage) response.getEntity(); Assert.fail("Unable to verify test due to IMG failure. Response has a status of " + response.getStatus() + " and an error message of : " + e.getErrorMessage()); } //Give enough time for this to trickle to SQS and back to server Thread.sleep(TimeUnit.SECONDS.toMillis(10)); ConnectionCredentials s3Creds = new ArrayList<>( testIMGConnection.getOutboundConfigurations()).get(0).getCredentials(); s3TestUtils = new S3TestUtils(s3Creds); String expectedBucketName = "com.streamreduce." + testIMGConnection.getAccount().getId(); String prefix = "raw/" + testIMGConnection.getId() + "/"; Blob payload = s3TestUtils.getFirstBlobFromS3ThatMatchesPrefix(expectedBucketName, prefix); JSONObject jsonPayload = JSONObject.fromObject(IOUtils.toString(payload.getPayload().getInput())); Assert.assertEquals(imgPayload,jsonPayload); } @Test public void testSendRawMessageDoesNotAppearWithoutRawOutboundDataTypeInS3() throws Exception { Connection testIMGConnection = createAndMockForIMGConnectionWithOutboundTypes( OutboundDataType.EVENT, OutboundDataType.PROCESSED, OutboundDataType.INSIGHT); JSONObject imgPayload = TestUtils.createValidSampleIMGPayload(); Response response = gatewayResource.createCustomConnectionMessage(imgPayload); //magic happens here //Start verification if (response.getStatus() != 201) { ErrorMessage e = (ErrorMessage) response.getEntity(); Assert.fail("Unable to verify test due to IMG failure. Response has a status of " + response.getStatus() + " and an error message of : " + e.getErrorMessage()); } ConnectionCredentials s3Creds = new ArrayList<>( testIMGConnection.getOutboundConfigurations()).get(0).getCredentials(); s3TestUtils = new S3TestUtils(s3Creds); String expectedBucketName = "com.streamreduce." + testIMGConnection.getAccount().getId(); String prefix = "raw/" + testIMGConnection.getId() + "/"; List<Blob> blobs = s3TestUtils.getBlobsFromS3(expectedBucketName,prefix); Assert.assertEquals(0,blobs.size()); } private Connection createAndMockForIMGConnectionWithOutboundTypes(OutboundDataType... dataTypes) { Connection testIMGConnection = TestUtils.createIMGConnectionWithSpecificOutboundDatatypes(dataTypes); SecurityService mockSecurityService = mock(SecurityService.class); when(mockSecurityService.getCurrentGatewayConnection()).thenReturn(testIMGConnection); ReflectionTestUtils.setField(gatewayResource,"securityService",mockSecurityService); return testIMGConnection; } }