Fixes and tests for deserializers
This commit is contained in:
parent
41bc1608da
commit
d8053d3d67
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)));
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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())));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue