package org.opendaylight.lispflowmapping.southbound.lisp;
-import static junit.framework.Assert.assertEquals;
-import static org.junit.Assert.*;
+import static io.netty.buffer.Unpooled.wrappedBuffer;
+import io.netty.channel.socket.DatagramPacket;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
-import java.net.DatagramPacket;
+import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import junitx.framework.ArrayAssert;
-import junitx.framework.Assert;
import org.apache.commons.lang3.ArrayUtils;
import org.jmock.api.Invocation;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
-import org.opendaylight.lispflowmapping.implementation.serializer.LispMessage;
-import org.opendaylight.lispflowmapping.implementation.serializer.LispMessageEnum;
-import org.opendaylight.lispflowmapping.implementation.serializer.MapNotifySerializer;
-import org.opendaylight.lispflowmapping.implementation.serializer.MapReplySerializer;
-import org.opendaylight.lispflowmapping.implementation.util.ByteUtil;
-import org.opendaylight.lispflowmapping.implementation.util.LispAFIConvertor;
-import org.opendaylight.lispflowmapping.implementation.util.MapNotifyBuilderHelper;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
+import org.opendaylight.lispflowmapping.lisp.util.ByteUtil;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
+import org.opendaylight.lispflowmapping.lisp.util.MapNotifyBuilderHelper;
+import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
+import org.opendaylight.lispflowmapping.lisp.serializer.MapNotifySerializer;
+import org.opendaylight.lispflowmapping.lisp.serializer.MapReplySerializer;
import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
-import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.AddMapping;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.EidToLocatorRecord.Action;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.RequestMapping;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecord;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecordBuilder;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainer;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4Builder;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6Builder;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecord;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecordBuilder;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapnotifymessage.MapNotifyBuilder;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplymessage.MapReplyBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.AddMapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRequest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MessageType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.RequestMapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItem;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder;
import org.opendaylight.yangtools.yang.binding.Notification;
public class LispSouthboundServiceTest extends BaseTestCase {
- private LispSouthboundService testedLispService;
- private NotificationProviderService nps;
+ private LispSouthboundHandler testedLispService;
+ private NotificationPublishService nps;
private byte[] mapRequestPacket;
private byte[] mapRegisterPacket;
private ValueSaverAction<Notification> lispNotificationSaver;
// private ValueSaverAction<MapRequest> mapRequestSaver;
private MapNotifyBuilder mapNotifyBuilder;
private MapReplyBuilder mapReplyBuilder;
- private EidToLocatorRecordBuilder eidToLocatorBuilder;
+ private MappingRecordBuilder mappingRecordBuilder;
private interface MapReplyIpv4SingleLocatorPos {
int RECORD_COUNT = 3;
super.before();
// mapResolver = context.mock(IMapResolver.class);
// mapServer = context.mock(IMapServer.class);
- testedLispService = new LispSouthboundService();
- nps = context.mock(NotificationProviderService.class);
+ testedLispService = new LispSouthboundHandler(null);
+ nps = context.mock(NotificationPublishService.class);
testedLispService.setNotificationProvider(nps);
lispNotificationSaver = new ValueSaverAction<Notification>();
// mapRegisterSaver = new ValueSaverAction<MapRegister>();
+ "0050 2a cd 39 c8 d6 08 00 01 01 02 03 04 00 01 c0 a8 88 0a 00 20 " //
+ "0060 00 01 01 02 03 04"));
mapReplyBuilder = new MapReplyBuilder();
- mapReplyBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
+ mapReplyBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
mapReplyBuilder.setNonce((long) 0);
mapReplyBuilder.setEchoNonceEnabled(false);
mapReplyBuilder.setProbe(true);
mapReplyBuilder.setSecurityEnabled(true);
- eidToLocatorBuilder = new EidToLocatorRecordBuilder();
+ mappingRecordBuilder = new MappingRecordBuilder();
String ip = "0.0.0.0";
- eidToLocatorBuilder.setLispAddressContainer(getIPContainer(ip));
- eidToLocatorBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
- eidToLocatorBuilder.setRecordTtl(10);
- eidToLocatorBuilder.setMapVersion((short) 0);
- eidToLocatorBuilder.setMaskLength((short) 0);
- eidToLocatorBuilder.setAction(Action.NativelyForward);
- eidToLocatorBuilder.setAuthoritative(false);
+ mappingRecordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid(ip + "/0"));
+ mappingRecordBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
+ mappingRecordBuilder.setRecordTtl(10);
+ mappingRecordBuilder.setMapVersion((short) 0);
+ mappingRecordBuilder.setMaskLength((short) 0);
+ mappingRecordBuilder.setAction(Action.NativelyForward);
+ mappingRecordBuilder.setAuthoritative(false);
// eidToLocatorBuilder.setPrefix(new LispIpv4Address(0));
// mapReply.addEidToLocator(eidToLocatorBuilder);
mapNotifyBuilder.setAuthenticationData(new byte[0]);
}
- private LispAddressContainer getIPContainer(String ip) {
- return new LispAddressContainerBuilder().setAddress(getIP(ip)).build();
- }
-
- private Ipv4 getIP(String ip) {
- return new Ipv4Builder().setIpv4Address(new Ipv4Address(ip)).setAfi((short) 1).build();
- }
-
- private Ipv6 getIPV6(String ip) {
- return new Ipv6Builder().setIpv6Address(new Ipv6Address(ip)).setAfi((short) 2).build();
- }
-
@Test
@Ignore
public void todos() throws Exception {
+ "0060 ff 00 00 05 00 01 0a 01 00 6e 06 64 ff 00 00 05 " //
+ "0070 00 01 c0 a8 88 33"));
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
handleMapRegisterPacket(mapRegisterPacket);
- List<EidToLocatorRecord> eidRecords = lastMapRegister().getEidToLocatorRecord();
+ List<MappingRecordItem> eidRecords = lastMapRegister().getMappingRecordItem();
assertEquals(1, eidRecords.size());
- EidToLocatorRecord eidRecord = eidRecords.get(0);
+ MappingRecord eidRecord = eidRecords.get(0).getMappingRecord();
assertEquals(2, eidRecord.getLocatorRecord().size());
- assertEquals(getIPContainer("10.1.0.110"), eidRecord.getLocatorRecord().get(0).getLispAddressContainer());
- assertEquals(getIPContainer("192.168.136.51"), eidRecord.getLocatorRecord().get(1).getLispAddressContainer());
+ assertEquals(LispAddressUtil.asIpv4Rloc("10.1.0.110"), eidRecord.getLocatorRecord().get(0).getRloc());
+ assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.51"), eidRecord.getLocatorRecord().get(1).getRloc());
}
@Test
+ "0060 01 92 00 00 00 00 00 00 00 01 01 64 ff 00 00 05 " //
+ "0070 00 01 0a 00 3a 9c"));
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
handleMapRegisterPacket(mapRegisterPacket);
- EidToLocatorRecord eidToLocatorRecord = lastMapRegister().getEidToLocatorRecord().get(0);
- assertEquals(getIPV6("2610:d0:ffff:192:0:0:0:1"), LispAFIConvertor.toAFI(eidToLocatorRecord.getLispAddressContainer()));
- assertEquals(AddressFamilyNumberEnum.IP6,
- AddressFamilyNumberEnum.valueOf(LispAFIConvertor.toAFI(eidToLocatorRecord.getLispAddressContainer()).getAfi()));
+ MappingRecord eidToLocatorRecord = lastMapRegister().getMappingRecordItem().get(0).getMappingRecord();
+ assertEquals("2610:d0:ffff:192:0:0:0:1/128",
+ ((Ipv6Prefix) eidToLocatorRecord.getEid().getAddress()).getIpv6Prefix().getValue());
+ assertEquals(Ipv6PrefixAfi.class, eidToLocatorRecord.getEid().getAddressType());
- assertEquals(getIP("10.0.58.156"), LispAFIConvertor.toAFI(eidToLocatorRecord.getLocatorRecord().get(0).getLispAddressContainer()));
+ assertEquals(LispAddressUtil.asIpv4Rloc("10.0.58.156"), eidToLocatorRecord.getLocatorRecord().get(0).getRloc());
}
@Test
public void mapRegister__VerifyBasicFields() throws Exception {
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
handleMapRegisterPacket(mapRegisterPacket);
- EidToLocatorRecord eidToLocator = lastMapRegister().getEidToLocatorRecord().get(0);
- assertEquals(getIP("153.16.254.1"), LispAFIConvertor.toAFI(eidToLocator.getLispAddressContainer()));
+ MappingRecord eidToLocator = lastMapRegister().getMappingRecordItem().get(0).getMappingRecord();
+ assertEquals(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"), eidToLocator.getEid());
assertEquals(1, eidToLocator.getLocatorRecord().size());
- assertEquals(getIP("192.168.136.10"), LispAFIConvertor.toAFI(eidToLocator.getLocatorRecord().get(0).getLispAddressContainer()));
+ assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.10"), eidToLocator.getLocatorRecord().get(0).getRloc());
}
@Test
@Ignore
public void mapRegister__NoResponseFromMapServerShouldReturnNullPacket() throws Exception {
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
mapNotifyBuilder = null;
assertNull(handleMapRegisterPacket(mapRegisterPacket));
System.arraycopy(mapRegisterPacket, 0, extraDataPacket, 0, mapRegisterPacket.length);
stubMapRegister(true);
- DatagramPacket dp = new DatagramPacket(extraDataPacket, extraDataPacket.length);
- dp.setLength(mapRegisterPacket.length);
+ DatagramPacket dp = new DatagramPacket(wrappedBuffer(extraDataPacket), new InetSocketAddress(0), new InetSocketAddress(0));
testedLispService.handlePacket(dp);
// Check map register fields.
// XXX: test
// byte[] notifyResult = testedLispService.handlePacket(dp).getData();
- byte[] notifyResult = lastMapNotifyPacket().getData();
+ byte[] notifyResult = lastMapNotifyPacket().content().array();
assertEquals(mapRegisterPacket.length, notifyResult.length);
}
private DatagramPacket lastMapReplyPacket() {
ByteBuffer serialize = MapReplySerializer.getInstance().serialize(mapReplyBuilder.build());
- return new DatagramPacket(serialize.array(), serialize.array().length);
+ return new DatagramPacket(wrappedBuffer(serialize), new InetSocketAddress(0), new InetSocketAddress(0));
}
private DatagramPacket lastMapNotifyPacket() {
- if (mapNotifyBuilder.getEidToLocatorRecord() == null) {
- mapNotifyBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
+ if (mapNotifyBuilder.getMappingRecordItem() == null) {
+ mapNotifyBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
}
- mapNotifyBuilder.getEidToLocatorRecord().add(eidToLocatorBuilder.build());
+ mapNotifyBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
+ mappingRecordBuilder.build()).build());
mapNotifyBuilder.setNonce((long) 0);
mapNotifyBuilder.setKeyId((short) 0);
mapNotifyBuilder.setAuthenticationData(new byte[0]);
ByteBuffer serialize = MapNotifySerializer.getInstance().serialize(mapNotifyBuilder.build());
- return new DatagramPacket(serialize.array(), serialize.array().length);
+ return new DatagramPacket(wrappedBuffer(serialize), new InetSocketAddress(0), new InetSocketAddress(0));
}
@Test
@Ignore
public void mapNotify__VerifyBasicFields() throws Exception {
byte registerType = mapRegisterPacket[0];
- assertEquals(LispMessageEnum.MapRegister.getValue(), registerType >> 4);
+ assertEquals(MessageType.MapRegister.getIntValue(), registerType >> 4);
stubMapRegister(true);
assertEquals(mapRegisterPacket.length, result.length);
- byte expectedType = (byte) (LispMessageEnum.MapNotify.getValue() << 4);
+ byte expectedType = (byte) (MessageType.MapNotify.getIntValue() << 4);
assertHexEquals(expectedType, result[0]);
assertHexEquals((byte) 0x00, result[1]);
assertHexEquals((byte) 0x00, result[2]);
stubMapRegister(true);
DatagramPacket notifyPacket = handleMapRegisterPacket(mapRegisterPacket);
- assertEquals(LispMessage.PORT_NUM, notifyPacket.getPort());
+ assertEquals(LispMessage.PORT_NUM, notifyPacket.recipient().getPort());
}
@Test
public void mapRequest__VerifyBasicFields() throws Exception {
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
handleMapRequestAsByteArray(mapRequestPacket);
- List<EidRecord> eids = lastMapRequest().getEidRecord();
+ List<EidItem> eids = lastMapRequest().getEidItem();
assertEquals(1, eids.size());
- LispAFIAddress lispAddress = LispAFIConvertor.toAFI(eids.get(0).getLispAddressContainer());
- assertTrue(lispAddress instanceof Ipv4);
- assertEquals(getIP("1.2.3.4"), ((Ipv4) lispAddress));
- assertEquals((byte) 0x20, eids.get(0).getMask().byteValue());
+ Eid lispAddress = eids.get(0).getEid();
+ assertEquals(Ipv4PrefixAfi.class, lispAddress.getAddressType());
+ assertEquals(LispAddressUtil.asIpv4PrefixEid("1.2.3.4/32"), lispAddress);
assertEquals(0x3d8d2acd39c8d608L, lastMapRequest().getNonce().longValue());
- // assertEquals(AddressFamilyNumberEnum.RESERVED,
- // AddressFamilyNumberEnum.valueOf(LispAFIToContainerConvertorFactory.toAFI(
- // lastMapRequest().getSourceEid().getLispAddressContainer()).getAfi()));
}
@Test
+ "00a0 00 02 26 10 00 d0 ff ff 01 92 00 00 00 00 00 00 " //
+ "00b0 00 01 01 64 ff 00 00 05 00 01 0a 00 3a 9c"));
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
// ret(mapReply);
handleMapRequestAsByteArray(mapRequestPacket);
- assertEquals(getIPV6("2610:d0:ffff:192:0:0:0:1"), LispAFIConvertor.toAFI(lastMapRequest().getSourceEid().getLispAddressContainer()));
- assertEquals(getIPV6("2610:d0:ffff:192:0:0:0:2"), LispAFIConvertor.toAFI(lastMapRequest().getEidRecord().get(0).getLispAddressContainer()));
+ assertEquals(LispAddressUtil.asIpv6Eid("2610:d0:ffff:192:0:0:0:1"), lastMapRequest().getSourceEid().getEid());
+ assertEquals(LispAddressUtil.asIpv6PrefixEid("2610:d0:ffff:192:0:0:0:2/128"), lastMapRequest().getEidItem().get(0).getEid());
}
@Ignore
+ "0090 00 00 00 00 00 02 00 00 00 0a 01 80 10 00 00 00 " //
+ "00a0 00 02 26 10 00 d0 ff ff 01 92 00 00 00 00 00 00 " //
+ "00b0 00 01 01 64 ff 00 00 05 00 01 0a 00 3a 9c"));
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
// ret(mapReply);
DatagramPacket replyPacket = handleMapRequestPacket(mapRequestPacket);
- assertEquals(4342, replyPacket.getPort());
+ assertEquals(4342, replyPacket.recipient().getPort());
}
@Test
+ "0070 10 00 00 00 00 01 99 10 fe 01 01 64 ff 00 00 05 " //
+ "0080 00 01 0a 00 01 26"));
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
// ret(mapReply);
handleMapRequestAsByteArray(mapRequestPacket);
- Assert.assertNotEquals(AddressFamilyNumberEnum.IP, LispAFIConvertor.toAFI(lastMapRequest().getSourceEid().getLispAddressContainer()));
+ assertEquals(Ipv4Afi.class, lastMapRequest().getSourceEid().getEid().getAddressType());
}
@Test
@Ignore
public void mapReply__VerifyBasicIPv4Fields() throws Exception {
- eidToLocatorBuilder.setMaskLength((short) 0x20).setLispAddressContainer(LispAFIConvertor.toContainer(getIP("10.0.20.200")));
+ mappingRecordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("10.0.20.200/32"));
mapReplyBuilder.setNonce(0x3d8d2acd39c8d608L);
stubHandleRequest();
byte expectedRecordCount = (byte) 1;
assertEquals(expectedRecordCount, result[MapReplyIpv4SingleLocatorPos.RECORD_COUNT]);
- assertEquals(eidToLocatorBuilder.getMaskLength().byteValue(), result[MapReplyIpv4SingleLocatorPos.EID_MASK_LEN]);
- assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
+ assertEquals(MaskUtil.getMaskForAddress(mappingRecordBuilder.getEid().getAddress()), result[MapReplyIpv4SingleLocatorPos.EID_MASK_LEN]);
+ assertEquals(AddressFamily.IpV4.getIntValue(), ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
assertEquals(0x0a0014c8, ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.EID_PREFIX));
}
@Test
@Ignore
public void mapReply__VerifyBasicIPv6() throws Exception {
- eidToLocatorBuilder.setMaskLength((short) 0x80).setLispAddressContainer(LispAFIConvertor.toContainer(getIPV6("0:0:0:0:0:0:0:1")));
+ mappingRecordBuilder.setEid(LispAddressUtil.asIpv6PrefixEid("0:0:0:0:0:0:0:1/128"));
stubHandleRequest();
byte expectedRecordCount = (byte) 1;
assertEquals(expectedRecordCount, result[MapReplyIpv4SingleLocatorPos.RECORD_COUNT]);
- assertEquals(eidToLocatorBuilder.getMaskLength().byteValue(), result[MapReplyIpv4SingleLocatorPos.EID_MASK_LEN]);
- assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
+ assertEquals(MaskUtil.getMaskForAddress(mappingRecordBuilder.getEid().getAddress()), result[MapReplyIpv4SingleLocatorPos.EID_MASK_LEN]);
+ assertEquals(AddressFamily.IpV6.getIntValue(), ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
byte[] expectedIpv6 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
ArrayAssert.assertEquals(expectedIpv6, Arrays.copyOfRange(result, 24, 40));
@Test
@Ignore
public void mapReply__VerifyIPv6EidAndLocator() throws Exception {
- eidToLocatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(getIPV6("0:0:0:0:0:0:0:1")));
- eidToLocatorBuilder.getLocatorRecord().add(
- new LocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(getIPV6("0:0:0:0:0:0:0:2"))).build());
+ mappingRecordBuilder.setEid(LispAddressUtil.asIpv6PrefixEid("0:0:0:0:0:0:0:1/128"));
+ mappingRecordBuilder.getLocatorRecord().add(
+ new LocatorRecordBuilder().setRloc(LispAddressUtil.asIpv6Rloc("0:0:0:0:0:0:0:2")).build());
stubHandleRequest();
public void mapReply__UseEncapsulatedUdpPort() throws Exception {
stubHandleRequest();
- assertEquals(LispMessage.PORT_NUM, handleMapRequestPacket(mapRequestPacket).getPort());
+ assertEquals(LispMessage.PORT_NUM, handleMapRequestPacket(mapRequestPacket).recipient().getPort());
}
@Test
@Ignore
public void mapReply__WithNonRoutableSingleLocator() throws Exception {
- eidToLocatorBuilder.setMaskLength((short) 0x20).setLispAddressContainer(LispAFIConvertor.toContainer(getIP("10.0.20.200")));
- eidToLocatorBuilder.getLocatorRecord().add(
- new LocatorRecordBuilder().setRouted(false).setLispAddressContainer(LispAFIConvertor.toContainer(getIP("4.3.2.1"))).build());
+ mappingRecordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("10.0.20.200/32"));
+ mappingRecordBuilder.getLocatorRecord().add(
+ new LocatorRecordBuilder().setRouted(false).setRloc(LispAddressUtil.asIpv4Rloc("4.3.2.1")).build());
stubHandleRequest();
byte[] result = handleMapRequestAsByteArray(mapRequestPacket);
@Test
@Ignore
public void mapReply__WithSingleLocator() throws Exception {
- eidToLocatorBuilder.setMaskLength((short) 0x20)//
- .setLispAddressContainer(LispAFIConvertor.toContainer(getIP("10.0.20.200")));
- eidToLocatorBuilder.getLocatorRecord().add(
- new LocatorRecordBuilder().setRouted(true).setLispAddressContainer(LispAFIConvertor.toContainer(getIP("4.3.2.1"))).build());
+ mappingRecordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("10.0.20.200/32"));
+ mappingRecordBuilder.getLocatorRecord().add(
+ new LocatorRecordBuilder().setRouted(true).setRloc(LispAddressUtil.asIpv4Rloc("4.3.2.1")).build());
stubHandleRequest();
byte[] result = handleMapRequestAsByteArray(mapRequestPacket);
byte expectedLocCount = 1;
assertEquals(expectedLocCount, result[MapReplyIpv4SingleLocatorPos.LOCATOR_COUNT]);
- assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
+ assertEquals(AddressFamily.IpV4.getIntValue(), ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
assertEquals(0x04030201, ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.LOCATOR));
assertEquals(0x01, result[MapReplyIpv4SingleLocatorPos.LOCATOR_RBIT] & 0x01);
@Test
@Ignore
public void mapReply__WithMultipleLocator() throws Exception {
- eidToLocatorBuilder.getLocatorRecord().add(
- new LocatorRecordBuilder().setRouted(true).setLispAddressContainer(LispAFIConvertor.toContainer(getIP("4.3.2.1"))).build());
- eidToLocatorBuilder.getLocatorRecord().add(
- new LocatorRecordBuilder().setRouted(true).setLispAddressContainer(LispAFIConvertor.toContainer(getIPV6("0:0:0:0:0:0:0:1"))).build());
+ mappingRecordBuilder.getLocatorRecord().add(
+ new LocatorRecordBuilder().setRouted(true).setRloc(LispAddressUtil.asIpv4Rloc("4.3.2.1")).build());
+ mappingRecordBuilder.getLocatorRecord().add(
+ new LocatorRecordBuilder().setRouted(true).setRloc(LispAddressUtil.asIpv6Rloc("0:0:0:0:0:0:0:1")).build());
stubHandleRequest();
byte[] result = handleMapRequestAsByteArray(mapRequestPacket);
assertEquals(2, result[MapReplyIpv4SingleLocatorPos.LOCATOR_COUNT]);
- assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
+ assertEquals(AddressFamily.IpV4.getIntValue(), ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
assertEquals(0x04030201, ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.LOCATOR));
assertEquals(0x01, result[MapReplyIpv4SingleLocatorPos.LOCATOR_RBIT] & 0x01);
- assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SecondLocatorPos.LOC_AFI));
+ assertEquals(AddressFamily.IpV6.getIntValue(), ByteUtil.getInt(result, MapReplyIpv4SecondLocatorPos.LOC_AFI));
byte[] expectedIpv6Rloc = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
ArrayAssert.assertEquals(expectedIpv6Rloc,
+ "0080 01 64 ff 00 00 05 00 01 0a 01 00 6f 06 64 ff 00 " //
+ "0090 00 05 00 01 c0 a8 88 33"));
- oneOf(nps).publish(with(lispNotificationSaver));
+ oneOf(nps).putNotification(with(lispNotificationSaver));
handleMapRequestAsByteArray(mapRequestPacket);
}
private void stubMapRegister(final boolean setNotifyFromRegister) {
- allowing(nps).publish(with(lispNotificationSaver));
+ try {
+ allowing(nps).putNotification(with(lispNotificationSaver));
+ } catch (InterruptedException e) {
+ }
will(new SimpleAction() {
@Override
}
private void stubHandleRequest() {
- allowing(nps).publish(wany(Notification.class));
+ try {
+ allowing(nps).putNotification(wany(Notification.class));
+ } catch (InterruptedException e) {
+ }
}
private byte[] handleMapRequestAsByteArray(byte[] inPacket) {
handleMapRequestPacket(inPacket);
- return lastMapReplyPacket().getData();
+ return lastMapReplyPacket().content().array();
}
private byte[] handleMapRegisterAsByteArray(byte[] inPacket) {
handleMapRegisterPacket(inPacket);
- return lastMapNotifyPacket().getData();
+ return lastMapNotifyPacket().content().array();
}
private DatagramPacket handleMapRequestPacket(byte[] inPacket) {
- testedLispService.handlePacket(new DatagramPacket(inPacket, inPacket.length));
+ DatagramPacket dp = new DatagramPacket(wrappedBuffer(inPacket), new InetSocketAddress(0), new InetSocketAddress(0));
+ // Unless we explicitly set the source port, it will be -1, which breaks some tests
+ // This is till not the real port number, but it's better
+ //dp.setPort(LispMessage.PORT_NUM);
+ testedLispService.handlePacket(dp);
return lastMapReplyPacket();
}
private DatagramPacket handleMapRegisterPacket(byte[] inPacket) {
- testedLispService.handlePacket(new DatagramPacket(inPacket, inPacket.length));
+ DatagramPacket dp = new DatagramPacket(wrappedBuffer(inPacket), new InetSocketAddress(0), new InetSocketAddress(0));
+ // Unless we explicitly set the source port, it will be -1, which breaks some tests
+ // This is till not the real port number, but it's better
+ //dp.setPort(LispMessage.PORT_NUM);
+ testedLispService.handlePacket(dp);
if (mapNotifyBuilder == null) {
return null;
} else {
private DatagramPacket handlePacket(byte[] inPacket) {
// TODO get from mock
- testedLispService.handlePacket(new DatagramPacket(inPacket, inPacket.length));
+ testedLispService.handlePacket(new DatagramPacket(wrappedBuffer(inPacket), new InetSocketAddress(0), new InetSocketAddress(0)));
return null;
}
// + "40 05 c0 a8 88 0a 01 02 " // MAC (ITR-RLOC #1 of 2)
// + "00 01 01 02 03 04 " // IP (ITR-RLOC #2 of 2)
// + "00 20 00 01 01 02 03 04").array();
- // oneOf(nps).publish(with(lispNotificationSaver));
+ // oneOf(nps).putNotification(with(lispNotificationSaver));
// // ret(mapReply);
// DatagramPacket packet = handleMapRequestPacket(mapRequestPacket);
// assertEquals(2, lastMapRequest().getItrRlocs().size());
// + "00 01 01 02 03 04 " // IP (ITR-RLOC #1 of 2)
// + "00 01 c0 a8 88 0a " // MAC (ITR-RLOC #2 of 2)
// + "00 20 00 01 01 02 03 04").array();
- // oneOf(nps).publish(with(lispNotificationSaver));
+ // oneOf(nps).putNotification(with(lispNotificationSaver));
// // ret(mapReply);
// DatagramPacket packet = handleMapRequestPacket(mapRequestPacket);
// assertEquals(2, lastMapRequest().getItrRloc().size());