Fixes and tests for deserializers

This commit is contained in:
Jonathan Halterman 2013-05-01 16:17:48 -07:00
parent 41bc1608da
commit d8053d3d67
6 changed files with 114 additions and 5 deletions

View File

@ -13,7 +13,7 @@ import backtype.storm.tuple.Fields;
public interface TupleDeserializer {
/**
* Returns a list of deserialized tuples, consisting of a list of tuples each with a list of
* fields, for the {@code tuple}.
* fields, for the {@code tuple}, else null if the {@code tuple} cannot be deserialized.
*/
List<List<?>> deserialize(String tuple);

View File

@ -6,6 +6,8 @@ import java.util.List;
import backtype.storm.tuple.Fields;
import com.hpcloud.maas.common.event.AlarmCreatedEvent;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.maas.infrastructure.storm.TupleDeserializer;
import com.hpcloud.util.Serialization;
@ -22,9 +24,19 @@ public class MaasEventDeserializer implements TupleDeserializer, Serializable {
private static final long serialVersionUID = -1306620481933667305L;
private static final Fields FIELDS = new Fields("event");
static {
// Register event types
Serialization.registerTarget(AlarmCreatedEvent.class);
Serialization.registerTarget(AlarmDeletedEvent.class);
}
@Override
public List<List<?>> deserialize(String tuple) {
return Collections.<List<?>>singletonList(Collections.singletonList(Serialization.fromJson(tuple)));
try {
return Collections.<List<?>>singletonList(Collections.singletonList(Serialization.fromJson(tuple)));
} catch (Exception ignore) {
return null;
}
}
@Override

View File

@ -1,14 +1,16 @@
package com.hpcloud.maas.infrastructure.thresholding;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import backtype.storm.tuple.Fields;
import com.hpcloud.maas.common.model.metric.FlatMetric;
import com.hpcloud.maas.common.model.metric.FlatMetrics;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.maas.infrastructure.storm.TupleDeserializer;
import com.hpcloud.util.Serialization;
/**
* Deserializes MaaS metrics.
@ -25,8 +27,9 @@ public class MaasMetricDeserializer implements TupleDeserializer, Serializable {
@Override
public List<List<?>> deserialize(String tuple) {
FlatMetric flatMetric = Serialization.fromJson(tuple, FlatMetric.class);
return Collections.<List<?>>singletonList(Collections.singletonList(flatMetric.toMetric()));
FlatMetric flatMetric = FlatMetrics.fromJson(tuple);
Metric metric = flatMetric.toMetric();
return Collections.<List<?>>singletonList(Arrays.asList(metric.definition, metric));
}
@Override

View File

@ -0,0 +1,37 @@
package com.hpcloud.maas.infrastructure.thresholding;
import static org.testng.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
/**
* @author Jonathan Halterman
*/
@Test
public class CollectdMetricDeserializerTest {
private CollectdMetricDeserializer deserializer = new CollectdMetricDeserializer();
@SuppressWarnings("unchecked")
public void shouldDeserialize() {
String metric = "{\"putval\":{\"values\":[36184,51182963],\"dstypes\":[\"derive\",\"derive\"],\"dsnames\":[\"read\",\"write\"],\"time\":1365802618.809,\"interval\":60.000,\"host\":\"instance-000d65f3\",\"plugin\":\"libvirt\",\"plugin_instance\":\"\",\"type\":\"disk_ops\",\"type_instance\":\"vda\"}}";
List<List<?>> metrics = deserializer.deserialize(metric);
Metric expected1 = new Metric(new MetricDefinition("compute", "disk_read_ops", "vda",
ImmutableMap.<String, String>builder().put("instance_id", "878067").build()), 1365802618,
36184);
Metric expected2 = new Metric(new MetricDefinition("compute", "disk_write_ops", "vda",
ImmutableMap.<String, String>builder().put("instance_id", "878067").build()), 1365802618,
51182963);
assertEquals(
metrics,
Arrays.asList(Arrays.asList(expected1.definition, expected1),
Arrays.asList(expected2.definition, expected2)));
}
}

View File

@ -0,0 +1,32 @@
package com.hpcloud.maas.infrastructure.thresholding;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import java.util.Collections;
import org.testng.annotations.Test;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.util.Serialization;
/**
* @author Jonathan Halterman
*/
@Test
public class MaasEventDeserializerTest {
private MaasEventDeserializer deserializer = new MaasEventDeserializer();
public void shouldDeserialize() {
Object event = new AlarmDeletedEvent("abc", "123", null);
String serialized = Serialization.toJson(event);
Object deserialized = deserializer.deserialize(serialized);
Object expected = Collections.singletonList(Collections.singletonList(event));
assertEquals(deserialized, expected);
}
public void shouldReturnNullOnDeserializeUnknownEvent() {
String unknownEventJson = "{\"alarm-foo-deleted\":{\"tenantId\":\"abc\",\"alarmId\":\"123\"}}";
assertNull(deserializer.deserialize(unknownEventJson));
}
}

View File

@ -0,0 +1,25 @@
package com.hpcloud.maas.infrastructure.thresholding;
import static org.testng.Assert.assertEquals;
import java.util.Collections;
import java.util.List;
import org.testng.annotations.Test;
import com.hpcloud.maas.common.model.metric.FlatMetric;
import com.hpcloud.maas.common.model.metric.FlatMetrics;
/**
* @author Jonathan Halterman
*/
@Test
public class MaasMetricDeserializerTest {
private MaasMetricDeserializer deserializer = new MaasMetricDeserializer();
public void shouldDeserialize() {
FlatMetric initial = new FlatMetric("bob", "test", "1", null, 123, 5.0);
List<List<?>> metrics = deserializer.deserialize(FlatMetrics.toJson(initial));
assertEquals(metrics, Collections.singletonList(Collections.singletonList(initial.toMetric())));
}
}