package com.sumologic.client; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.Ignore; import com.amazonaws.services.kinesis.model.Record; import com.sumologic.client.model.CloudWatchLogsMessageModel; import com.sumologic.client.model.SimpleKinesisMessageModel; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.CharBuffer; import java.nio.ByteBuffer; public class CloudWatchMessageModelSumologicTransformerTest { public static Charset charset = Charset.forName("UTF-8"); public static CharsetEncoder encoder = charset.newEncoder(); @Test public void theTransformerShouldFailGracefullyWhenUnableToCompress () { CloudWatchMessageModelSumologicTransformer transfomer = new CloudWatchMessageModelSumologicTransformer(); String randomData = "Some random string without GZIP compression"; ByteBuffer bufferedData = null; try { bufferedData = encoder.encode(CharBuffer.wrap(randomData)); } catch (Exception e) { Assert.fail("Getting error: "+e.getMessage()); } Record mockedRecord = new Record(); mockedRecord.setData(bufferedData); CloudWatchLogsMessageModel messageModel = transfomer.toClass(mockedRecord); Assert.assertNull(messageModel); } @Test public void theTransformerShouldSucceedWhenTransformingAProperJSON() { CloudWatchMessageModelSumologicTransformer transfomer = new CloudWatchMessageModelSumologicTransformer(); String jsonData = "" +"{" + "\"logEvents\": [{" + "\"id\": \"3889492387492837492374982374897239847289374892\"," + "\"message\": \"1 23423532532 eni-ac9342k3492 10.1.1.75 66.175.209.17 123 123 17 1 76 1437755534 1437755549 ACCEPT OK\"," + "\"timestamp\": \"2342342342300\"" + "}]," + "\"logGroup\": \"MyFirstVPC\"," + "\"logStream\": \"eni-ac6a7de4-all\"," + "\"messageType\": \"DATA_MESSAGE\"," + "\"owner\": \"2342352352\"," + "\"subscriptionFilters\": [\"MyFirstVPC\"]" + "}" +""; byte[] compressData = SumologicKinesisUtils.compressGzip(jsonData); ByteBuffer bufferedData = null; try { bufferedData = ByteBuffer.wrap(compressData); } catch (Exception e) { Assert.fail("Getting error: "+e.getMessage()); } Record mockedRecord = new Record(); mockedRecord.setData(bufferedData); CloudWatchLogsMessageModel messageModel = transfomer.toClass(mockedRecord); Assert.assertNotNull(messageModel); } @Test public void theTransformerShouldFailWhenTransformingAJSONWithTrailingCommas() { CloudWatchMessageModelSumologicTransformer transfomer = new CloudWatchMessageModelSumologicTransformer(); String jsonData = "" +"{" + "\"logEvents\": [{" + "\"id\": \"3889492387492837492374982374897239847289374892\"," + "\"message\": \"1 23423532532 eni-ac9342k3492 10.1.1.75 66.175.209.17 123 123 17 1 76 1437755534 1437755549 ACCEPT OK\"," + "\"timestamp\": \"2342342342300\"" + "}]," + "\"logGroup\": \"MyFirstVPC\"," + "\"logStream\": \"eni-ac6a7de4-all\"," + "\"messageType\": \"DATA_MESSAGE\"," + "\"owner\": \"2342352352\"," + "\"subscriptionFilters\": [\"MyFirstVPC\"]," + "}" +""; byte[] compressData = SumologicKinesisUtils.compressGzip(jsonData); ByteBuffer bufferedData = null; try { bufferedData = ByteBuffer.wrap(compressData); } catch (Exception e) { Assert.fail("Getting error: "+e.getMessage()); } Record mockedRecord = new Record(); mockedRecord.setData(bufferedData); CloudWatchLogsMessageModel messageModel = null; messageModel = transfomer.toClass(mockedRecord); Assert.assertNull(messageModel); } @Test public void theTransfomerShouldSeparateBatchesOfLogs() { CloudWatchMessageModelSumologicTransformer transfomer = new CloudWatchMessageModelSumologicTransformer(); String jsonData = "" +"{" + "\"logEvents\": [{" + "\"id\": \"3889492387492837492374982374897239847289374892\"," + "\"message\": \"1 23423532532 eni-ac9342k3492 10.1.1.75 66.175.209.17 123 123 17 1 76 1437755534 1437755549 ACCEPT OK\"," + "\"timestamp\": \"2342342342300\"" + "}," + "{" + "\"id\": \"3289429357928375892739857238975235235235\"," + "\"message\": \"1 23423516 eni-ac9342k3492 10.1.1.75 66.175.209.17 123 123 17 1 76 1437755534 1437755549 REJECT OK\"," + "\"timestamp\": \"2342352351616\"" + "}]," + "\"logGroup\": \"MyFirstVPC\"," + "\"logStream\": \"eni-ac6a7de4-all\"," + "\"messageType\": \"DATA_MESSAGE\"," + "\"owner\": \"2342352352\"," + "\"subscriptionFilters\": [\"MyFirstVPC\"]" + "}" +""; byte[] compressData = SumologicKinesisUtils.compressGzip(jsonData); ByteBuffer bufferedData = null; try { bufferedData = ByteBuffer.wrap(compressData); } catch (Exception e) { Assert.fail("Getting error: "+e.getMessage()); } Record mockedRecord = new Record(); mockedRecord.setData(bufferedData); CloudWatchLogsMessageModel messageModel = null; messageModel = transfomer.toClass(mockedRecord); String debatchedMessage = transfomer.fromClass(messageModel); System.out.println(debatchedMessage); String[] messages = debatchedMessage.split("\n"); Assert.assertTrue(messages.length == 2); } }