Skip to content

Commit

Permalink
Do not allow overwriting the Message timestamp with a non Date object
Browse files Browse the repository at this point in the history
This is a sign of bad extractors/converters.

Fixes #1556

(cherry picked from commit 228d0c6)
  • Loading branch information
bernd authored and Jochen Schalanda committed Nov 16, 2015
1 parent 38b9912 commit 2b36b12
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,12 @@ public void addField(final String key, final Object value) {
return;
}

if (FIELD_TIMESTAMP.equals(key) && !(value instanceof DateTime) && !(value instanceof Date)) {
LOG.warn("Field [{}] must be of value Date or DateTime. Make sure to apply a date converter when using extractors. Not overwriting field.",
FIELD_TIMESTAMP);
return;
}

if(value instanceof String) {
final String str = ((String) value).trim();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
*/
package org.graylog2.plugin;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
Expand All @@ -34,11 +35,13 @@
import org.mockito.runners.MockitoJUnitRunner;

import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
Expand Down Expand Up @@ -244,6 +247,39 @@ public void testTimestampAsDate() {
Tools.buildElasticSearchTimeFormat(dateTime), esTimestampFormatted);
}

@Test
public void testDoesNotOverwriteTimestampWithBadValue() throws Exception {
final DateTime dateTime = new DateTime(2015, 9, 8, 0, 0, DateTimeZone.UTC);
final Date date = new DateTime(2014, 3, 10, 0, 0, DateTimeZone.UTC).toDate();

message.addField(Message.FIELD_TIMESTAMP, dateTime);
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addField(Message.FIELD_TIMESTAMP, "foo");
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addField(Message.FIELD_TIMESTAMP, 123);
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addField(Message.FIELD_TIMESTAMP, 123L);
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addField(Message.FIELD_TIMESTAMP, true);
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addField(Message.FIELD_TIMESTAMP, new Object());
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addFields(ImmutableMap.<String, Object>of(Message.FIELD_TIMESTAMP, "foo"));
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addStringFields(ImmutableMap.<String, String>of(Message.FIELD_TIMESTAMP, "foo"));
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(dateTime);

message.addField(Message.FIELD_TIMESTAMP, date);
assertThat(message.getField(Message.FIELD_TIMESTAMP)).isEqualTo(date);
}

@Test
public void testGetMessage() throws Exception {
assertEquals("foo", message.getMessage());
Expand Down Expand Up @@ -284,15 +320,6 @@ public void testToElasticSearchObject() throws Exception {
assertEquals(Collections.EMPTY_LIST, object.get("streams"));
}

@Test
public void testToElasticSearchObjectWithoutDateTimeTimestamp() throws Exception {
message.addField("timestamp", "time!");

final Map<String, Object> object = message.toElasticSearchObject();

assertEquals("time!", object.get("timestamp"));
}

@Test
public void testToElasticSearchObjectWithStreams() throws Exception {
final Stream stream = mock(Stream.class);
Expand Down

0 comments on commit 2b36b12

Please sign in to comment.