001: /*
002: * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
003: * notice. All rights reserved.
004: */
005: package com.tc.l2.msg;
006:
007: import com.tc.async.api.Sink;
008: import com.tc.async.impl.MockSink;
009: import com.tc.bytes.TCByteBuffer;
010: import com.tc.bytes.TCByteBufferFactory;
011: import com.tc.l2.context.ManagedObjectSyncContext;
012: import com.tc.net.groups.NodeID;
013: import com.tc.net.groups.NodeIDImpl;
014: import com.tc.object.ObjectID;
015: import com.tc.object.dna.impl.ObjectStringSerializer;
016:
017: import java.io.ByteArrayInputStream;
018: import java.io.ByteArrayOutputStream;
019: import java.io.ObjectInput;
020: import java.io.ObjectInputStream;
021: import java.io.ObjectOutput;
022: import java.io.ObjectOutputStream;
023: import java.util.HashMap;
024: import java.util.Iterator;
025: import java.util.Set;
026:
027: import junit.framework.TestCase;
028:
029: public class ObjectSyncMessageTest extends TestCase {
030: private ManagedObjectSyncContext managedObjectSyncContext;
031: private TCByteBuffer[] tcByteBufferArray;
032: private ObjectStringSerializer objectStringSerializer;
033: private final int dnaCount = 56;
034:
035: public void setUp() {
036: NodeID nodeID = new NodeIDImpl("foo", "foobar".getBytes());
037: HashMap rootsMap = new HashMap();
038: rootsMap.put("root1", new ObjectID(1));
039: rootsMap.put("root2", new ObjectID(2));
040: rootsMap.put("root3", new ObjectID(3));
041: Sink sink = new MockSink();
042: objectStringSerializer = new ObjectStringSerializer();
043: TCByteBuffer tcbb = TCByteBufferFactory
044: .getInstance(false, 3452);
045: tcByteBufferArray = new TCByteBuffer[] { tcbb };
046: managedObjectSyncContext = new ManagedObjectSyncContext(nodeID,
047: rootsMap, true, sink);
048: managedObjectSyncContext.setDehydratedBytes(
049: new TCByteBuffer[] { tcbb }, dnaCount,
050: objectStringSerializer);
051: managedObjectSyncContext.setSequenceID(11);
052: }
053:
054: public void tearDown() {
055: managedObjectSyncContext = null;
056: }
057:
058: private void validate(ObjectSyncMessage osm, ObjectSyncMessage osm1) {
059: assertEquals(osm.getType(), osm1.getType());
060: assertEquals(osm.getMessageID(), osm1.getMessageID());
061: assertEquals(osm.inResponseTo(), osm1.inResponseTo());
062: assertEquals(osm.messageFrom(), osm1.messageFrom());
063:
064: assertEquals(osm.getRootsMap(), osm1.getRootsMap());
065: assertEquals(osm.getDnaCount(), osm1.getDnaCount());
066:
067: Set oids = osm.getOids();
068: Set oids1 = osm1.getOids();
069: assertEquals(oids.size(), oids1.size());
070: for (Iterator iter = osm.getOids().iterator(); iter.hasNext();) {
071: ObjectID oid = (ObjectID) iter.next();
072: assertTrue(oids1.contains(oid));
073: oids1.remove(oid);
074: }
075: assertTrue(oids1.isEmpty());
076:
077: TCByteBuffer[] dnas1 = osm1.getUnprocessedDNAs();
078: assertEquals(tcByteBufferArray.length, dnas1.length);
079: for (int i = 0; i < tcByteBufferArray.length; i++) {
080: assertEquals(tcByteBufferArray[i].getBoolean(), dnas1[i]
081: .getBoolean());
082: assertEquals(tcByteBufferArray[i].hasArray(), dnas1[i]
083: .hasArray());
084: assertEquals(tcByteBufferArray[i].hasRemaining(), dnas1[i]
085: .hasRemaining());
086: assertEquals(tcByteBufferArray[i].isDirect(), dnas1[i]
087: .isDirect());
088: assertEquals(tcByteBufferArray[i].isReadOnly(), dnas1[i]
089: .isReadOnly());
090: byte[] byteArray = tcByteBufferArray[i].array();
091: byte[] byteArray1 = dnas1[i].array();
092: assertEquals(byteArray.length, byteArray1.length);
093: for (int j = 0; j < byteArray.length; j++) {
094: assertEquals(byteArray[j], byteArray1[j]);
095: }
096: assertEquals(tcByteBufferArray[i].arrayOffset(), dnas1[i]
097: .arrayOffset());
098: assertEquals(tcByteBufferArray[i].capacity(), dnas1[i]
099: .capacity());
100: assertEquals(tcByteBufferArray[i].get(), dnas1[i].get());
101: assertEquals(tcByteBufferArray[i].getChar(), dnas1[i]
102: .getChar());
103: assertEquals(tcByteBufferArray[i].getInt(), dnas1[i]
104: .getInt());
105: assertEquals(tcByteBufferArray[i].getLong(), dnas1[i]
106: .getLong());
107: assertEquals(tcByteBufferArray[i].getShort(), dnas1[i]
108: .getShort());
109: assertEquals(tcByteBufferArray[i].getUbyte(), dnas1[i]
110: .getUbyte());
111: assertEquals(tcByteBufferArray[i].getUint(), dnas1[i]
112: .getUint());
113: assertEquals(tcByteBufferArray[i].getUshort(), dnas1[i]
114: .getUshort());
115: assertEquals(tcByteBufferArray[i].limit(), dnas1[i].limit());
116: assertEquals(tcByteBufferArray[i].position(), dnas1[i]
117: .position());
118: assertEquals(tcByteBufferArray[i].remaining(), dnas1[i]
119: .remaining());
120: }
121:
122: assertEquals(osm.getSequenceID(), osm1.getSequenceID());
123: }
124:
125: private ObjectSyncMessage writeAndRead(ObjectSyncMessage osm)
126: throws Exception {
127: ByteArrayOutputStream bo = new ByteArrayOutputStream();
128: ObjectOutput oo = new ObjectOutputStream(bo);
129: oo.writeObject(osm);
130: System.err.println("Written : " + osm);
131: ByteArrayInputStream bi = new ByteArrayInputStream(bo
132: .toByteArray());
133: ObjectInput oi = new ObjectInputStream(bi);
134: ObjectSyncMessage osm1 = (ObjectSyncMessage) oi.readObject();
135: System.err.println("Read : " + osm1);
136: return osm1;
137: }
138:
139: public void testBasicSerialization() throws Exception {
140: ObjectSyncMessage osm = ObjectSyncMessageFactory
141: .createObjectSyncMessageFrom(managedObjectSyncContext);
142: ObjectSyncMessage osm1 = writeAndRead(osm);
143: validate(osm, osm1);
144: }
145: }
|