/*
* 2012-3 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.overlord.rtgov.activity.util;
import static org.junit.Assert.*;
import org.junit.Test;
import org.overlord.rtgov.activity.model.ActivityUnit;
import org.overlord.rtgov.activity.model.Context;
import org.overlord.rtgov.activity.model.Origin;
import org.overlord.rtgov.activity.model.soa.RequestSent;
import org.overlord.rtgov.activity.model.soa.ResponseReceived;
import org.overlord.rtgov.activity.util.ActivityUtil;
import com.fasterxml.jackson.databind.JsonNode;
public class ActivityUtilTest {
public ActivityUnit createTestActivityUnit(String id) {
ActivityUnit act=new ActivityUnit();
act.setId(id);
Origin origin=new Origin();
origin.setHost("MyHost");
origin.setNode("MyNode");
origin.setPrincipal("Me");
origin.setThread("MyThread");
act.setOrigin(origin);
RequestSent me1=new RequestSent();
me1.setTimestamp(1000);
me1.setContent("<tns:Order xmlns:tns=\"http://www.savara.org\" amount=\"100\" />");
me1.setMessageType("{http://message}Order");
me1.setOperation("myOp");
me1.setServiceType("{http://service}OrderService");
me1.setMessageId("corr1");
me1.getProperties().put("customer", "Fred");
me1.getProperties().put("trader", "Joe");
Context c1a=new Context();
c1a.setType(Context.Type.Conversation);
c1a.setValue("12345");
me1.getContext().add(c1a);
Context c1b=new Context();
c1b.setType(Context.Type.Link);
c1b.setValue("54321");
c1b.setTimeframe(5000);
me1.getContext().add(c1b);
act.getActivityTypes().add(me1);
ResponseReceived me2=new ResponseReceived();
me2.setTimestamp(2000);
me2.setContent("<tns:Confirmation xmlns:tns=\"http://www.savara.org\" amount=\"100\" />");
me2.setFault("MyFault");
me2.setMessageType("{http://message}Confirmation");
me2.setOperation("myOp");
me2.setServiceType("{http://service}OrderService");
me2.setMessageId("corr1");
me2.getProperties().put("customer", "Fred");
me2.getProperties().put("trader", "Joe");
Context c2=new Context();
c2.setType(Context.Type.Endpoint);
c2.setValue("abc123");
me2.getContext().add(c2);
act.getActivityTypes().add(me2);
return (act);
}
@Test
public void testJSONCompareActivityUnit() {
ActivityUnit act=createTestActivityUnit("TestId");
try {
byte[] b=ActivityUtil.serializeActivityUnit(act);
if (b == null) {
fail("null returned");
}
java.io.InputStream is=ActivityUtilTest.class.getResourceAsStream("/json/activity.json");
byte[] inb2=new byte[is.available()];
is.read(inb2);
is.close();
JsonNode node1=ActivityUtil.MAPPER.readTree(b);
JsonNode node2=ActivityUtil.MAPPER.readTree(inb2);
if (!node1.equals(node2)) {
String s1=new String(b);
String s2=new String(inb2);
fail("JSON is different: created="+s1+" stored="+s2);
}
} catch(Exception e) {
e.printStackTrace();
fail("Failed to serialize: "+e);
}
}
@Test
public void testJSONCompareActivityUnitList() {
ActivityUnit act1=createTestActivityUnit("TestId1");
ActivityUnit act2=createTestActivityUnit("TestId2");
try {
java.util.List<ActivityUnit> acts=new java.util.Vector<ActivityUnit>();
acts.add(act1);
acts.add(act2);
byte[] b=ActivityUtil.serializeActivityUnitList(acts);
if (b == null) {
fail("null returned");
}
java.io.InputStream is=ActivityUtilTest.class.getResourceAsStream("/json/activityList.json");
byte[] inb2=new byte[is.available()];
is.read(inb2);
is.close();
JsonNode node1=ActivityUtil.MAPPER.readTree(b);
JsonNode node2=ActivityUtil.MAPPER.readTree(inb2);
if (!node1.equals(node2)) {
String s1=new String(b);
String s2=new String(inb2);
fail("JSON is different: created="+s1+" stored="+s2);
}
} catch(Exception e) {
e.printStackTrace();
fail("Failed to serialize: "+e);
}
}
@Test
public void testJSONBinarySerialization() {
ActivityUnit act1=createTestActivityUnit("TestId");
try {
java.io.ByteArrayOutputStream os=new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream oos=new java.io.ObjectOutputStream(os);
oos.writeObject(act1);
oos.close();
os.close();
java.io.ByteArrayInputStream is=new java.io.ByteArrayInputStream(os.toByteArray());
java.io.ObjectInputStream ois=new java.io.ObjectInputStream(is);
ActivityUnit act2=(ActivityUnit)ois.readObject();
ois.close();
is.close();
String s1=new String(ActivityUtil.serializeActivityUnit(act1));
String s2=new String(ActivityUtil.serializeActivityUnit(act2));
JsonNode node1=ActivityUtil.MAPPER.readTree(s1);
JsonNode node2=ActivityUtil.MAPPER.readTree(s2);
if (!node1.equals(node2)) {
fail("Representations are different: s1="+s1+" s2="+s2);
}
} catch(Exception e) {
e.printStackTrace();
fail("Failed to serialize: "+e);
}
}
}