Skip to content
Snippets Groups Projects
Commit 9c3ab73f authored by hvanwelbergen's avatar hvanwelbergen
Browse files

tests+bug fixes for publishing of IUs with links

parent 02f5d668
No related branches found
No related tags found
No related merge requests found
......@@ -32,11 +32,28 @@ public abstract class AbstractIU
protected SetMultimap<String, String> links = HashMultimap.create();
private final SetMultimap<String, String> EMPTYLINKS = HashMultimap.create();
public SetMultimap<String, String> getAllLinks()
{
return links;
}
public Set<String> getLinks(String 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
*/
......
package ipaaca;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map.Entry;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;
import com.google.protobuf.InvalidProtocolBufferException;
import rsb.converter.ConversionException;
......@@ -12,6 +15,7 @@ import rsb.converter.ConverterSignature;
import rsb.converter.UserData;
import rsb.converter.WireContents;
import ipaaca.Ipaaca.IU;
import ipaaca.Ipaaca.LinkSet;
import ipaaca.Ipaaca.PayloadItem;
/**
......@@ -48,6 +52,12 @@ public class IUConverter implements Converter<ByteBuffer>
.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()
.setUid(iua.getUid())
.setRevision(iua.getRevision())
......@@ -58,6 +68,7 @@ public class IUConverter implements Converter<ByteBuffer>
.setReadOnly(iua.isReadOnly())
.setPayloadType("MAP")
.addAllPayload(payloadItems)
.addAllLinks(links)
.build();
return new WireContents<ByteBuffer>(ByteBuffer.wrap(iu.toByteArray()),"ipaaca-remotepushiu");
}
......@@ -83,7 +94,13 @@ public class IUConverter implements Converter<ByteBuffer>
iuout.setOwnerName(iu.getOwnerName());
iuout.setRevision(iu.getRevision());
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);
}
else
......
......@@ -109,6 +109,7 @@ public class ComponentCommunicationIntegrationTest
localIU = new LocalIU();
localIU.setCategory(CATEGORY);
localIU.getPayload().put("key1", "item1");
localIU.addLinks("INIT", ImmutableSet.of("init1","init2"));
outBuffer.add(localIU);
}
......@@ -126,6 +127,7 @@ public class ComponentCommunicationIntegrationTest
AbstractIU iuIn = inBuffer.getIU(localIU.getUid());
assertNotNull(iuIn);
assertEqualIU(iuIn, localIU);
assertThat(localIU.getLinks("INIT"),containsInAnyOrder("init1","init2"));
assertEquals(1,component2EventHandler.getNumberOfAddEvents(iuIn.getUid()));
assertEquals(0,component1EventHandler.getNumberOfAddEvents(localIU.getUid()));
}
......
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.assertThat;
import static org.junit.Assert.assertTrue;
import ipaaca.Ipaaca.IU;
import ipaaca.Ipaaca.LinkSet;
import ipaaca.Ipaaca.PayloadItem;
import java.util.Collection;
import java.util.List;
import java.util.Map.Entry;
import com.google.common.collect.SetMultimap;
/**
* Test utilities for the IU system.
* @author hvanwelbergen
......@@ -22,30 +29,25 @@ public final class IUTestUtil
assertEquals(iu1.getUid(), iu2.getUid());
assertEquals(iu1.getRevision(), iu2.getRevision());
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());
assertEquals(iuSrc.getCommitted(), iuTarget.isCommitted());
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())
// all payload items in pl1 are in pl2
for (PayloadItem item : pl1)
{
assertTrue("Key "+item.getKey() +" from protocol buffer payload not found in IU payload "+iuTarget.getPayload(),
iuTarget.getPayload().containsKey(item.getKey()));
assertEquals(item.getValue(), iuTarget.getPayload().get(item.getKey()));
assertTrue("Key "+item.getKey() +" from protocol buffer payload not found in IU payload "+pl2,
pl2.containsKey(item.getKey()));
assertEquals(item.getValue(), pl2.get(item.getKey()));
}
// all payload items in target are in source
for (Entry<String, String> entry : iuTarget.getPayload().entrySet())
// all payload items in pl12 are in pl1
for (Entry<String, String> entry : pl2.entrySet())
{
boolean found = false;
for (PayloadItem item : iuSrc.getPayloadList())
for (PayloadItem item : pl1)
{
if (item.getKey().equals(entry.getKey()) && item.getValue().equals(entry.getValue()))
{
......@@ -54,7 +56,44 @@ public final class IUTestUtil
}
}
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;
import ipaaca.Ipaaca;
import ipaaca.Ipaaca.IU;
import ipaaca.Ipaaca.IU.AccessMode;
import ipaaca.Ipaaca.LinkSet;
import ipaaca.Ipaaca.PayloadItem;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
......@@ -15,6 +16,7 @@ import static org.mockito.Mockito.*;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.ImmutableSet;
import com.google.protobuf.InvalidProtocolBufferException;
import rsb.converter.ConversionException;
......@@ -52,6 +54,8 @@ public class IuConverterTest
rpIU.getPayload().enforcedSetItem("key1", "value1");
rpIU.getPayload().enforcedSetItem("key2", "value2");
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);
IU iu = IU.newBuilder().mergeFrom(wiu.getSerialization().array()).build();
......@@ -73,7 +77,20 @@ public class IuConverterTest
List<PayloadItem> payload = new ArrayList<PayloadItem>();
payload.add(createPayloadItem("key1","value1"));
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()
.setUid("uid1")
.setRevision(1)
......@@ -83,6 +100,8 @@ public class IuConverterTest
.setReadOnly(false)
.setCategory(CATEGORY)
.addAllPayload(payload)
.addAllLinks(links)
.setPayloadType("")
.build();
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