@Test public void testJSONSerialization() { AggregationSerializerBolt bolt = new AggregationSerializerBolt(); Map<String, String> conf = new HashMap<>(); final AtomicReference<Values> outputTuple = new AtomicReference<Values>(null); OutputCollector mockCollector = MockTupleHelpers.mockCollector(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { Object newEvent = invocation.getArguments()[1]; outputTuple.set((Values) newEvent); return new ArrayList<>(); } }); bolt.prepare(conf, null, mockCollector); when(tuple.getLongByField(Constants.FIELD_TIMESTAMP)).thenReturn(143322L); when(tuple.getStringByField(Constants.FIELD_RULE_ACTION_ID)).thenReturn("34_22"); when(tuple.getStringByField(Constants.FIELD_AGGREGATION_KEY)).thenReturn("host1"); when(tuple.getIntegerByField(Constants.FIELD_AGGREGATION_WINDOW)).thenReturn(100); when(tuple.getBooleanByField(Constants.FIELD_STATE_TRACK)).thenReturn(true); when(tuple.contains(Constants.FIELD_STATE_TRACK)).thenReturn(true); bolt.execute(tuple); verify(mockCollector, times(1)).ack(tuple); assertEquals("34_22_host1", outputTuple.get().get(0)); JsonObject obj = new Gson().fromJson(outputTuple.get().get(1).toString(), JsonObject.class); assertEquals(143322L, obj.get(Constants.FIELD_TIMESTAMP).getAsLong()); assertEquals("34_22", obj.get(Constants.FIELD_RULE_ACTION_ID).getAsString()); assertEquals("host1", obj.get(Constants.FIELD_AGGREGATION_KEY).getAsString()); assertEquals(100, obj.get(Constants.FIELD_AGGREGATION_WINDOW).getAsInt()); assertEquals(true, obj.get(Constants.FIELD_STATE_TRACK).getAsBoolean()); }
@Test public void testDateValidation() { InterceptionBolt bolt = new InterceptionBolt(); final AtomicReference<Values> processedEventContainer = new AtomicReference<Values>(null); bolt.prepare(new HashMap<>(), null, MockTupleHelpers.mockCollector(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { Object newEvent = invocation.getArguments()[1]; processedEventContainer.set((Values) newEvent); System.out.println("Event emitted:" + processedEventContainer.get()); return new ArrayList<>(); } })); when(input.getString(0)).thenReturn("{\"@timestamp\":\"2016-04-21T20:54:41.103Z\"}"); bolt.execute(input); String result = processedEventContainer.get().get(0).toString(); assertNotNull(result); assertEquals(1461272081103L, new Gson().fromJson(result, JsonObject.class).get("@timestamp").getAsLong()); }
@Test public void testStateEventDeserialization() { String input = "{\"_t\":1476297512224,\"_agw\":10,\"_ri\":\"BNEAAA\\u003d\\u003d\",\"_a\":\"test11\",\"_st\":true}"; AggregationClassifierBolt bolt = new AggregationClassifierBolt(); final AtomicReference<Values> outputTuple = new AtomicReference<Values>(null); final AtomicReference<String> outputStream = new AtomicReference<String>(null); OutputCollector mockCollector = MockTupleHelpers.mockCollector(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { Object stream = invocation.getArguments()[0]; outputStream.set((String) stream); Object newEvent = invocation.getArguments()[2]; outputTuple.set((Values) newEvent); return new ArrayList<>(); } }); Map<String, String> conf = new HashMap<>(); bolt.prepare(conf, null, mockCollector); when(tuple.getString(0)).thenReturn(input); bolt.execute(tuple); verify(mockCollector, times(1)).ack(tuple); assertEquals(Constants.STATE_STREAM_ID, outputStream.get()); Values values = outputTuple.get(); assertEquals(true, values.get(0)); assertEquals(1476297512224L, values.get(1)); assertEquals(10, values.get(2)); assertEquals("BNEAAA\u003d\u003d", values.get(3)); assertEquals("test11", values.get(4)); }
@Test public void testAlertExecution() { AlertingEngineBolt bolt = new AlertingEngineBolt(); when(input.getSourceStreamId()).thenReturn(Constants.EVENT_STREAM_ID); int hostCounter = 0; for (String event : events) { final AtomicReference<Values> processedEventContainer = new AtomicReference<Values>(null); bolt.prepare(stormConf, null, MockTupleHelpers.mockCollector(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { Object newEvent = invocation.getArguments()[2]; processedEventContainer.set((Values) newEvent); System.out.println("Alert emitted:" + processedEventContainer.get()); return new ArrayList<>(); } })); when(input.getValueByField(Constants.FIELD_EVENT)).thenReturn(TestUtils.stringToEvent(event)); when(input.getShortByField(Constants.FIELD_RULE_ID)).thenReturn((short) 1123); when(input.getShortByField(Constants.FIELD_ACTION_ID)).thenReturn((short) 0); when(input.getStringByField(Constants.FIELD_ALERT_TARGET)).thenReturn("dlp"); when(input.getStringByField(Constants.FIELD_ALERT_MEDIA)).thenReturn("mail"); bolt.execute(input); assertEquals("dlp", processedEventContainer.get().get(0)); assertEquals("mail", processedEventContainer.get().get(1)); if (processedEventContainer.get().get(2).toString().contains("test")) { hostCounter++; } } assertEquals(4, hostCounter); }
Values values = outputTuple.get(); assertEquals(fakeTenant, values.get(0)); JsonObject json = new Gson().fromJson((String) values.get(1), JsonObject.class); when(tuple.getString(0)).thenReturn((String) values.get(1)); InterceptionBolt interceptor = new InterceptionBolt(); interceptor.prepare(conf, null, mockCollector); interceptor.execute(tuple); verify(mockCollector, times(1)).ack(tuple); json = new Gson().fromJson((String) outputTuple.get().get(0), JsonObject.class); System.out.println(outputTuple.get().get(0)); assertEquals(ts, json.get("@timestamp").getAsLong());
when(input.getString(0)).thenReturn("{\"@timestamp\":\"2016-04-21T20:54:41.103Z\",\"tenant_id\":\"asdas\"}"); bolt.execute(input); String result = processedEventContainer.get().get(0).toString(); when(input.getString(0)).thenReturn(result); bolt.execute(input); Event event = (Event) processedEventContainer.get().get(0); System.out.println(((Double)event.getHeaders().get("@timestamp")).longValue()); assertTrue(event.getHeaders().get("@timestamp") instanceof Double);
when(tuple.getLongByField(Constants.FIELD_TIMESTAMP)).thenReturn((Long) values.get(1)); when(tuple.getIntegerByField(Constants.FIELD_AGGREGATION_WINDOW)).thenReturn((Integer) values.get(2)); when(tuple.getStringByField(Constants.FIELD_RULE_ACTION_ID)).thenReturn((String) values.get(3)); when(tuple.getBooleanByField(Constants.FIELD_STATE_TRACK)).thenReturn((Boolean) values.get(0)); when(tuple.getStringByField(Constants.FIELD_AGGREGATION_KEY)).thenReturn((String) values.get(4)); System.out.println("Serialized state tracking:"+values2); verify(mockCollector, times(1)).ack(tuple); JsonObject obj = new Gson().fromJson(values2.get(1).toString(), JsonObject.class); assertEquals(values.get(1), obj.get(Constants.FIELD_TIMESTAMP).getAsLong()); assertEquals(values.get(2), obj.get(Constants.FIELD_AGGREGATION_WINDOW).getAsInt()); assertEquals(values.get(3), obj.get(Constants.FIELD_RULE_ACTION_ID).getAsString()); assertEquals(values.get(0), obj.get(Constants.FIELD_STATE_TRACK).getAsBoolean()); assertEquals(values.get(4), obj.get(Constants.FIELD_AGGREGATION_KEY).getAsString());
@Test public void testExecutePositive() { JSONTranslatorBolt bolt = new JSONTranslatorBolt(); for (String event : events) { final AtomicReference<Values> processedEventContainer = new AtomicReference<Values>(null); OutputCollector collector = MockTupleHelpers.mockCollector(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { Object newEvent = invocation.getArguments()[1]; processedEventContainer.set((Values) newEvent); return new ArrayList<>(); } }); bolt.prepare(new HashMap<>(), null, collector); when(input.getString(0)).thenReturn(event); bolt.execute(input); assertNotNull(processedEventContainer.get()); assertTrue(processedEventContainer.get().size()>0); HendrixEvent processedEvent = (HendrixEvent) processedEventContainer.get().get(0); assertTrue(processedEvent.getHeaders().size() > 0); // validate timestamp exists assertTrue(processedEvent.getHeaders().containsKey(Constants.FIELD_TIMESTAMP)); // validate timestamp was copied assertEquals(((Double)processedEvent.getHeaders().get("@timestamp")).longValue(), processedEvent.getHeaders().get(Constants.FIELD_TIMESTAMP)); // validate event was successfully translated to a hashmap verify(collector, times(1)).ack(input); } }
assertEquals(j % 3, bolt.getCounter().get(alert.getId()).getVal()); verify(collector, times(i)).emit(eq(Constants.DELIVERY_STREAM), eq(input), any()); assertEquals(alert, (Alert) processedEventContainer.get().get(0)); verify(collector, times(j++)).ack(input); if (i % 2 == 0) {
assertEquals(i + 1, bolt.getCounter().get(alert.getId()).getVal()); verify(collector, times(i + 1)).emit(eq(Constants.DELIVERY_STREAM), eq(input), any()); assertEquals(alert, (Alert) processedEventContainer.get().get(0)); verify(collector, times(i + 1)).ack(input);
HendrixEvent processedEvent = (HendrixEvent) processedEventContainer.get().get(0); assertTrue(processedEvent.getHeaders().containsKey(Constants.FIELD_ALERT_TEMPLATE_ID)); assertEquals((short) 1, processedEvent.getHeaders().get(Constants.FIELD_ALERT_TEMPLATE_ID));