blob: 9d1448d6c899d74924d93b9b1260004040385b38 [file] [log] [blame]
/*
* Copyright 2016-present Open Networking Laboratory
*
* 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.onosproject.lisp.msg.protocols;
import com.google.common.collect.ImmutableList;
import com.google.common.testing.EqualsTester;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.DeserializationException;
import org.onlab.packet.IP;
import org.onlab.packet.IPv4;
import org.onlab.packet.IpAddress;
import org.onlab.packet.UDP;
import org.onosproject.lisp.msg.exceptions.LispParseError;
import org.onosproject.lisp.msg.exceptions.LispReaderException;
import org.onosproject.lisp.msg.exceptions.LispWriterException;
import org.onosproject.lisp.msg.protocols.DefaultLispEncapsulatedControl.DefaultEcmBuilder;
import org.onosproject.lisp.msg.protocols.DefaultLispEncapsulatedControl.EcmReader;
import org.onosproject.lisp.msg.protocols.DefaultLispEncapsulatedControl.EcmWriter;
import org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.DefaultRegisterBuilder;
import org.onosproject.lisp.msg.protocols.LispEncapsulatedControl.EcmBuilder;
import org.onosproject.lisp.msg.protocols.LispMapRegister.RegisterBuilder;
import org.onosproject.lisp.msg.types.LispIpv4Address;
import org.onosproject.lisp.msg.protocols.LispMapRecord.MapRecordBuilder;
import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.DefaultMapRecordBuilder;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
/**
* Unit tests for DefaultLispEncapsulatedControl class.
*/
public final class DefaultLispEncapsulatedControlTest {
private static final String ECM1_SRC_IP = "192.168.1.1";
private static final String ECM1_DST_IP = "192.168.1.2";
private static final String ECM2_SRC_IP = "192.168.2.1";
private static final String ECM2_DST_IP = "192.168.2.2";
private static final String RECORD_EID = "1.1.1.1";
private static final String AUTH_KEY = "onos";
private LispEncapsulatedControl ecm1;
private LispEncapsulatedControl sameAsEcm1;
private LispEncapsulatedControl ecm2;
@Before
public void setup() {
//Creates ecm1
EcmBuilder builder1 = new DefaultEcmBuilder();
IP innerIp1 = new IPv4().setSourceAddress(ECM1_SRC_IP)
.setDestinationAddress(ECM1_DST_IP)
.setProtocol(IPv4.PROTOCOL_UDP).setVersion((byte) (4 & 0xf));
UDP innerUdp1 = new UDP().setSourcePort(1)
.setDestinationPort(2);
RegisterBuilder msgBuilder = new DefaultRegisterBuilder();
List<LispMapRecord> records1 = ImmutableList.of(getMapRecord(),
getMapRecord());
LispMapRegister innerMsg1 = msgBuilder.withIsProxyMapReply(true)
.withIsWantMapNotify(false)
.withKeyId((short) 1)
.withAuthKey(AUTH_KEY)
.withNonce(1L)
.withMapRecords(records1)
.build();
ecm1 = builder1.isSecurity(false)
.innerIpHeader(innerIp1)
.innerUdpHeader(innerUdp1)
.innerLispMessage(innerMsg1)
.build();
//Creates sameAsEcm1
EcmBuilder builder2 = new DefaultEcmBuilder();
IP innerIp2 = new IPv4().setSourceAddress(ECM1_SRC_IP)
.setDestinationAddress(ECM1_DST_IP)
.setProtocol(IPv4.PROTOCOL_UDP);
UDP innerUdp2 = new UDP().setSourcePort(1)
.setDestinationPort(2);
RegisterBuilder msgBuilder2 = new DefaultRegisterBuilder();
List<LispMapRecord> records2 = ImmutableList.of(getMapRecord(),
getMapRecord());
LispMapRegister innerMsg2 = msgBuilder2.withIsProxyMapReply(true)
.withIsWantMapNotify(false)
.withKeyId((short) 1)
.withAuthKey(AUTH_KEY)
.withNonce(1L)
.withMapRecords(records2)
.build();
sameAsEcm1 = builder2.isSecurity(false)
.innerIpHeader(innerIp2)
.innerUdpHeader(innerUdp2)
.innerLispMessage(innerMsg2)
.build();
//Creates ecm2
EcmBuilder builder3 = new DefaultEcmBuilder();
IP innerIp3 = new IPv4().setSourceAddress(ECM2_SRC_IP)
.setDestinationAddress(ECM2_DST_IP)
.setProtocol(IPv4.PROTOCOL_UDP);
UDP innerUdp3 = new UDP().setSourcePort(10)
.setDestinationPort(20);
RegisterBuilder msgBuilder3 = new DefaultRegisterBuilder();
List<LispMapRecord> records3 = ImmutableList.of(getMapRecord(),
getMapRecord());
LispMapRegister innerMsg3 = msgBuilder3.withIsProxyMapReply(true)
.withIsWantMapNotify(false)
.withKeyId((short) 2)
.withAuthKey(AUTH_KEY)
.withNonce(1L)
.withMapRecords(records3)
.build();
ecm2 = builder3.isSecurity(false)
.innerIpHeader(innerIp3)
.innerUdpHeader(innerUdp3)
.innerLispMessage(innerMsg3)
.build();
}
@Test
public void testEquality() {
new EqualsTester()
.addEqualityGroup(ecm1, sameAsEcm1)
.addEqualityGroup(ecm2).testEquals();
}
@Test
public void testConstruction() {
DefaultLispEncapsulatedControl ecm = (DefaultLispEncapsulatedControl) ecm1;
assertThat("Inner Ip versions are not match",
ecm.innerIpHeader().getVersion(), is((byte) 4));
assertThat("Inner Ip protocols are not match",
((IPv4) ecm.innerIpHeader()).getProtocol(),
is(IPv4.PROTOCOL_UDP));
assertThat("Inner IP source addresses are not match",
((IPv4) ecm.innerIpHeader()).getSourceAddress(),
is(IPv4.toIPv4Address(ECM1_SRC_IP)));
assertThat("Inner IP destination addresses are not match",
((IPv4) ecm.innerIpHeader()).getDestinationAddress(),
is(IPv4.toIPv4Address(ECM1_DST_IP)));
assertThat("Inner UDP source ports are not match",
ecm.innerUdp().getSourcePort(), is(1));
assertThat("Inner UDP destination ports are not match",
ecm.innerUdp().getDestinationPort(), is(2));
assertThat("Inner LISP control messages are not match",
ecm.getControlMessage().getType(),
is(LispType.LISP_MAP_REGISTER));
}
@Test
public void testSerialization() throws LispReaderException,
LispWriterException, LispParseError, DeserializationException {
ByteBuf byteBuf = Unpooled.buffer();
EcmWriter writer = new EcmWriter();
writer.writeTo(byteBuf, ecm1);
EcmReader reader = new EcmReader();
LispEncapsulatedControl deserialized = reader.readFrom(byteBuf);
new EqualsTester().addEqualityGroup(ecm1, deserialized).testEquals();
}
private LispMapRecord getMapRecord() {
MapRecordBuilder builder1 = new DefaultMapRecordBuilder();
LispIpv4Address ipv4Locator1 =
new LispIpv4Address(IpAddress.valueOf(RECORD_EID));
return builder1
.withRecordTtl(100)
.withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
.withEidPrefixAfi(ipv4Locator1)
.build();
}
}