Skip to content
Snippets Groups Projects
Commit 180a99f4 authored by Ramin Yaghoubzadeh's avatar Ramin Yaghoubzadeh
Browse files
parents 671dd5c4 8462e320
No related branches found
No related tags found
No related merge requests found
<project name="ipaaca" default="build" basedir="."> <project name="ipaaca" default="build" basedir=".">
<target name="resolve">
<subant target="resolve" genericantfile="build.xml">
<fileset dir="." includes="*/build.xml"/>
</subant>
</target>
<target name="build"> <target name="build">
<subant target="build" genericantfile="build.xml"> <subant target="build" genericantfile="build.xml">
<fileset dir="." includes="*/build.xml"/> <fileset dir="." includes="*/build.xml"/>
......
...@@ -32,11 +32,28 @@ public abstract class AbstractIU ...@@ -32,11 +32,28 @@ public abstract class AbstractIU
protected SetMultimap<String, String> links = HashMultimap.create(); protected SetMultimap<String, String> links = HashMultimap.create();
private final SetMultimap<String, String> EMPTYLINKS = HashMultimap.create(); private final SetMultimap<String, String> EMPTYLINKS = HashMultimap.create();
public SetMultimap<String, String> getAllLinks()
{
return links;
}
public Set<String> getLinks(String type) public Set<String> getLinks(String type)
{ {
return links.get(type); return links.get(type);
} }
public void setLinksLocally(SetMultimap<String, String> l)
{
links.clear();
links.putAll(l);
}
public void setLinksLocally(String type, Set<String> values)
{
links.removeAll(type);
links.putAll(type, values);
}
/** /**
* Replace all links * Replace all links
*/ */
......
package ipaaca; package ipaaca;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import rsb.converter.ConversionException; import rsb.converter.ConversionException;
...@@ -12,6 +15,7 @@ import rsb.converter.ConverterSignature; ...@@ -12,6 +15,7 @@ import rsb.converter.ConverterSignature;
import rsb.converter.UserData; import rsb.converter.UserData;
import rsb.converter.WireContents; import rsb.converter.WireContents;
import ipaaca.Ipaaca.IU; import ipaaca.Ipaaca.IU;
import ipaaca.Ipaaca.LinkSet;
import ipaaca.Ipaaca.PayloadItem; import ipaaca.Ipaaca.PayloadItem;
/** /**
...@@ -48,6 +52,12 @@ public class IUConverter implements Converter<ByteBuffer> ...@@ -48,6 +52,12 @@ public class IUConverter implements Converter<ByteBuffer>
.build()); .build());
} }
List<LinkSet> links = new ArrayList<LinkSet>();
for (Entry<String, Collection<String>> entry:iua.getAllLinks().asMap().entrySet())
{
links.add(LinkSet.newBuilder().setType(entry.getKey()).addAllTargets(entry.getValue()).build());
}
IU iu = IU.newBuilder() IU iu = IU.newBuilder()
.setUid(iua.getUid()) .setUid(iua.getUid())
.setRevision(iua.getRevision()) .setRevision(iua.getRevision())
...@@ -58,6 +68,7 @@ public class IUConverter implements Converter<ByteBuffer> ...@@ -58,6 +68,7 @@ public class IUConverter implements Converter<ByteBuffer>
.setReadOnly(iua.isReadOnly()) .setReadOnly(iua.isReadOnly())
.setPayloadType("MAP") .setPayloadType("MAP")
.addAllPayload(payloadItems) .addAllPayload(payloadItems)
.addAllLinks(links)
.build(); .build();
return new WireContents<ByteBuffer>(ByteBuffer.wrap(iu.toByteArray()),"ipaaca-remotepushiu"); return new WireContents<ByteBuffer>(ByteBuffer.wrap(iu.toByteArray()),"ipaaca-remotepushiu");
} }
...@@ -83,7 +94,13 @@ public class IUConverter implements Converter<ByteBuffer> ...@@ -83,7 +94,13 @@ public class IUConverter implements Converter<ByteBuffer>
iuout.setOwnerName(iu.getOwnerName()); iuout.setOwnerName(iu.getOwnerName());
iuout.setRevision(iu.getRevision()); iuout.setRevision(iu.getRevision());
iuout.setReadOnly(iu.getReadOnly()); iuout.setReadOnly(iu.getReadOnly());
iuout.payload = new Payload(iuout,iu.getPayloadList()); iuout.payload = new Payload(iuout,iu.getPayloadList());
SetMultimap<String, String> links = HashMultimap.create();
for(LinkSet ls: iu.getLinksList())
{
links.putAll(ls.getType(),ls.getTargetsList());
}
iuout.setLinksLocally(links);
return new UserData<RemotePushIU>(iuout, RemotePushIU.class); return new UserData<RemotePushIU>(iuout, RemotePushIU.class);
} }
else else
......
...@@ -109,6 +109,7 @@ public class ComponentCommunicationIntegrationTest ...@@ -109,6 +109,7 @@ public class ComponentCommunicationIntegrationTest
localIU = new LocalIU(); localIU = new LocalIU();
localIU.setCategory(CATEGORY); localIU.setCategory(CATEGORY);
localIU.getPayload().put("key1", "item1"); localIU.getPayload().put("key1", "item1");
localIU.addLinks("INIT", ImmutableSet.of("init1","init2"));
outBuffer.add(localIU); outBuffer.add(localIU);
} }
...@@ -126,6 +127,7 @@ public class ComponentCommunicationIntegrationTest ...@@ -126,6 +127,7 @@ public class ComponentCommunicationIntegrationTest
AbstractIU iuIn = inBuffer.getIU(localIU.getUid()); AbstractIU iuIn = inBuffer.getIU(localIU.getUid());
assertNotNull(iuIn); assertNotNull(iuIn);
assertEqualIU(iuIn, localIU); assertEqualIU(iuIn, localIU);
assertThat(localIU.getLinks("INIT"),containsInAnyOrder("init1","init2"));
assertEquals(1,component2EventHandler.getNumberOfAddEvents(iuIn.getUid())); assertEquals(1,component2EventHandler.getNumberOfAddEvents(iuIn.getUid()));
assertEquals(0,component1EventHandler.getNumberOfAddEvents(localIU.getUid())); assertEquals(0,component1EventHandler.getNumberOfAddEvents(localIU.getUid()));
} }
......
package ipaaca; package ipaaca;
import static org.junit.Assert.*;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import ipaaca.Ipaaca.IU; import ipaaca.Ipaaca.IU;
import ipaaca.Ipaaca.LinkSet;
import ipaaca.Ipaaca.PayloadItem; import ipaaca.Ipaaca.PayloadItem;
import java.util.Collection;
import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import com.google.common.collect.SetMultimap;
/** /**
* Test utilities for the IU system. * Test utilities for the IU system.
* @author hvanwelbergen * @author hvanwelbergen
...@@ -22,30 +29,25 @@ public final class IUTestUtil ...@@ -22,30 +29,25 @@ public final class IUTestUtil
assertEquals(iu1.getUid(), iu2.getUid()); assertEquals(iu1.getUid(), iu2.getUid());
assertEquals(iu1.getRevision(), iu2.getRevision()); assertEquals(iu1.getRevision(), iu2.getRevision());
assertEquals(iu1.isReadOnly(), iu2.isReadOnly()); assertEquals(iu1.isReadOnly(), iu2.isReadOnly());
iu1.getPayload().equals(iu2.getPayload()); assertEquals(iu1.getPayload(),iu2.getPayload());
assertEquals(iu1.getAllLinks(),iu2.getAllLinks());
} }
public static void assertEqualIU(IU iuSrc, AbstractIU iuTarget) public static void assertEqualPayload(Collection<PayloadItem> pl1, Payload pl2)
{ {
assertEquals(iuSrc.getCategory(), iuTarget.getCategory()); // all payload items in pl1 are in pl2
assertEquals(iuSrc.getCommitted(), iuTarget.isCommitted()); for (PayloadItem item : pl1)
assertEquals(iuSrc.getUid(), iuTarget.getUid());
assertEquals(iuSrc.getRevision(), iuTarget.getRevision());
assertEquals(iuSrc.getReadOnly(), iuTarget.isReadOnly());
// all payload items in src are in target
for (PayloadItem item : iuSrc.getPayloadList())
{ {
assertTrue("Key "+item.getKey() +" from protocol buffer payload not found in IU payload "+iuTarget.getPayload(), assertTrue("Key "+item.getKey() +" from protocol buffer payload not found in IU payload "+pl2,
iuTarget.getPayload().containsKey(item.getKey())); pl2.containsKey(item.getKey()));
assertEquals(item.getValue(), iuTarget.getPayload().get(item.getKey())); assertEquals(item.getValue(), pl2.get(item.getKey()));
} }
// all payload items in target are in source // all payload items in pl12 are in pl1
for (Entry<String, String> entry : iuTarget.getPayload().entrySet()) for (Entry<String, String> entry : pl2.entrySet())
{ {
boolean found = false; boolean found = false;
for (PayloadItem item : iuSrc.getPayloadList()) for (PayloadItem item : pl1)
{ {
if (item.getKey().equals(entry.getKey()) && item.getValue().equals(entry.getValue())) if (item.getKey().equals(entry.getKey()) && item.getValue().equals(entry.getValue()))
{ {
...@@ -54,7 +56,44 @@ public final class IUTestUtil ...@@ -54,7 +56,44 @@ public final class IUTestUtil
} }
} }
assertTrue("Entry " + entry + "from IU implementation not found in protocol buffer. Protocal buffer payload: " assertTrue("Entry " + entry + "from IU implementation not found in protocol buffer. Protocal buffer payload: "
+ iuSrc.getPayloadList(),found); + pl2,found);
}
}
public static void assertEqualLinks(List<LinkSet> links1, SetMultimap<String,String> links2)
{
// all links in links1 are in links2
for(LinkSet ls:links1)
{
assertThat(links2.get(ls.getType()),containsInAnyOrder(ls.getTargetsList().toArray(new String[0])));
}
// all links in links2 are in links1
for(Entry<String, Collection<String>> entry:links2.asMap().entrySet())
{
boolean found = false;
for(LinkSet ls:links1)
{
if(ls.getType().equals(entry.getKey()))
{
assertThat(entry.getValue(), containsInAnyOrder(ls.getTargetsList().toArray(new String[0])));
found = true;
break;
}
}
assertTrue("Link " + entry + "from IU implementation not found in protocol buffer. Protocal buffer links: "
+ links2,found);
} }
} }
public static void assertEqualIU(IU iuSrc, AbstractIU iuTarget)
{
assertEquals(iuSrc.getCategory(), iuTarget.getCategory());
assertEquals(iuSrc.getCommitted(), iuTarget.isCommitted());
assertEquals(iuSrc.getUid(), iuTarget.getUid());
assertEquals(iuSrc.getRevision(), iuTarget.getRevision());
assertEquals(iuSrc.getReadOnly(), iuTarget.isReadOnly());
assertEqualPayload(iuSrc.getPayloadList(),iuTarget.getPayload());
assertEqualLinks(iuSrc.getLinksList(),iuTarget.getAllLinks());
}
} }
...@@ -7,6 +7,7 @@ import java.util.List; ...@@ -7,6 +7,7 @@ import java.util.List;
import ipaaca.Ipaaca; import ipaaca.Ipaaca;
import ipaaca.Ipaaca.IU; import ipaaca.Ipaaca.IU;
import ipaaca.Ipaaca.IU.AccessMode; import ipaaca.Ipaaca.IU.AccessMode;
import ipaaca.Ipaaca.LinkSet;
import ipaaca.Ipaaca.PayloadItem; import ipaaca.Ipaaca.PayloadItem;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
...@@ -15,6 +16,7 @@ import static org.mockito.Mockito.*; ...@@ -15,6 +16,7 @@ import static org.mockito.Mockito.*;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.google.common.collect.ImmutableSet;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import rsb.converter.ConversionException; import rsb.converter.ConversionException;
...@@ -52,6 +54,8 @@ public class IuConverterTest ...@@ -52,6 +54,8 @@ public class IuConverterTest
rpIU.getPayload().enforcedSetItem("key1", "value1"); rpIU.getPayload().enforcedSetItem("key1", "value1");
rpIU.getPayload().enforcedSetItem("key2", "value2"); rpIU.getPayload().enforcedSetItem("key2", "value2");
rpIU.getPayload().enforcedSetItem("key3", "value3"); rpIU.getPayload().enforcedSetItem("key3", "value3");
rpIU.setLinksLocally("SAME_LEVEL",ImmutableSet.of("sibling1","sibling2"));
rpIU.setLinksLocally("GROUNDED_IN",ImmutableSet.of("parent1","parent2"));
WireContents<ByteBuffer> wiu = converter.serialize(RemotePushIU.class,rpIU); WireContents<ByteBuffer> wiu = converter.serialize(RemotePushIU.class,rpIU);
IU iu = IU.newBuilder().mergeFrom(wiu.getSerialization().array()).build(); IU iu = IU.newBuilder().mergeFrom(wiu.getSerialization().array()).build();
...@@ -73,7 +77,20 @@ public class IuConverterTest ...@@ -73,7 +77,20 @@ public class IuConverterTest
List<PayloadItem> payload = new ArrayList<PayloadItem>(); List<PayloadItem> payload = new ArrayList<PayloadItem>();
payload.add(createPayloadItem("key1","value1")); payload.add(createPayloadItem("key1","value1"));
payload.add(createPayloadItem("key2","value2")); payload.add(createPayloadItem("key2","value2"));
payload.add(createPayloadItem("key3","value3")); payload.add(createPayloadItem("key3","value3"));
List<LinkSet> links = new ArrayList<LinkSet>();
links.add(
LinkSet.newBuilder()
.addAllTargets(ImmutableSet.of("sibling1","sibling2"))
.setType("SAME_LEVEL")
.build()
);
links.add(
LinkSet.newBuilder()
.addAllTargets(ImmutableSet.of("parent1","parent2"))
.setType("GROUNDED_IN")
.build()
);
Ipaaca.IU iu = Ipaaca.IU.newBuilder() Ipaaca.IU iu = Ipaaca.IU.newBuilder()
.setUid("uid1") .setUid("uid1")
.setRevision(1) .setRevision(1)
...@@ -83,6 +100,8 @@ public class IuConverterTest ...@@ -83,6 +100,8 @@ public class IuConverterTest
.setReadOnly(false) .setReadOnly(false)
.setCategory(CATEGORY) .setCategory(CATEGORY)
.addAllPayload(payload) .addAllPayload(payload)
.addAllLinks(links)
.setPayloadType("")
.build(); .build();
UserData<?> data = converter.deserialize("", ByteBuffer.wrap(iu.toByteArray())); UserData<?> data = converter.deserialize("", ByteBuffer.wrap(iu.toByteArray()));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment