blob: 1b58f601af36bbeb82eb6bfd81b0029b1489c367 [file] [log] [blame]
Jian Li99f83ef2016-11-03 19:14:25 +01001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.lisp.msg.types;
17
18import com.google.common.collect.ImmutableList;
19import com.google.common.testing.EqualsTester;
20import io.netty.buffer.ByteBuf;
21import io.netty.buffer.Unpooled;
22import org.junit.Before;
23import org.junit.Test;
24import org.onlab.packet.IpAddress;
25import org.onosproject.lisp.msg.exceptions.LispParseError;
26import org.onosproject.lisp.msg.exceptions.LispReaderException;
27import org.onosproject.lisp.msg.exceptions.LispWriterException;
28import org.onosproject.lisp.msg.types.LispTeLcafAddress.TeAddressBuilder;
29import org.onosproject.lisp.msg.types.LispTeLcafAddress.TeAddressBuilder.TeLcafAddressReader;
30import org.onosproject.lisp.msg.types.LispTeLcafAddress.TeAddressBuilder.TeLcafAddressWriter;
31import org.onosproject.lisp.msg.types.LispTeRecord.TeRecordBuilder;
32
33import static org.hamcrest.MatcherAssert.assertThat;
34import static org.hamcrest.Matchers.is;
35
36/**
37 * Unit tests for LispTeLcafAddress class.
38 */
39public class LispTeLcafAddressTest {
40
41 private LispTeLcafAddress address1;
42 private LispTeLcafAddress sameAsAddress1;
43 private LispTeLcafAddress address2;
44
45 @Before
46 public void setup() {
47
48 TeAddressBuilder builder1 = new TeAddressBuilder();
49
50 TeRecordBuilder recordBuilder1 = new TeRecordBuilder();
51 LispIpv4Address rtrRloc1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
52
53 recordBuilder1.withIsLookup(false);
54 recordBuilder1.withIsRlocProbe(false);
55 recordBuilder1.withIsStrict(false);
56 recordBuilder1.withRtrRlocAddress(rtrRloc1);
57 LispTeRecord record1 = recordBuilder1.build();
58
59 TeRecordBuilder recordBuilder2 = new TeRecordBuilder();
60 LispIpv4Address rtrRloc2 = new LispIpv4Address(IpAddress.valueOf("192.168.1.2"));
61
62 recordBuilder2.withIsLookup(false);
63 recordBuilder2.withIsRlocProbe(true);
64 recordBuilder2.withIsStrict(false);
65 recordBuilder2.withRtrRlocAddress(rtrRloc2);
66 LispTeRecord record2 = recordBuilder2.build();
67
68 builder1.withTeRecords(ImmutableList.of(record1, record2));
69
70 address1 = builder1.build();
71
72 TeAddressBuilder builder2 = new TeAddressBuilder();
73
74 TeRecordBuilder recordBuilder3 = new TeRecordBuilder();
75 recordBuilder3.withIsLookup(false);
76 recordBuilder3.withIsRlocProbe(false);
77 recordBuilder3.withIsStrict(false);
78 recordBuilder3.withRtrRlocAddress(rtrRloc1);
79 LispTeRecord record3 = recordBuilder3.build();
80
81 TeRecordBuilder recordBuilder4 = new TeRecordBuilder();
82 recordBuilder4.withIsLookup(false);
83 recordBuilder4.withIsRlocProbe(true);
84 recordBuilder4.withIsStrict(false);
85 recordBuilder4.withRtrRlocAddress(rtrRloc2);
86 LispTeRecord record4 = recordBuilder4.build();
87
88 builder2.withTeRecords(ImmutableList.of(record3, record4));
89
90 sameAsAddress1 = builder2.build();
91
92 TeAddressBuilder builder3 = new TeAddressBuilder();
93
94 TeRecordBuilder recordBuilder5 = new TeRecordBuilder();
95 LispIpv4Address rtrRloc3 = new LispIpv4Address(IpAddress.valueOf("192.168.2.1"));
96
97 recordBuilder5.withIsLookup(true);
98 recordBuilder5.withIsRlocProbe(false);
99 recordBuilder5.withIsStrict(true);
100 recordBuilder5.withRtrRlocAddress(rtrRloc3);
101 LispTeRecord record5 = recordBuilder5.build();
102
103 TeRecordBuilder recordBuilder6 = new TeRecordBuilder();
104 LispIpv4Address rtrRloc4 = new LispIpv4Address(IpAddress.valueOf("192.168.2.2"));
105
106 recordBuilder6.withIsLookup(true);
107 recordBuilder6.withIsRlocProbe(true);
108 recordBuilder6.withIsStrict(true);
109 recordBuilder6.withRtrRlocAddress(rtrRloc4);
110 LispTeRecord record6 = recordBuilder6.build();
111
112 builder3.withTeRecords(ImmutableList.of(record5, record6));
113
114 address2 = builder3.build();
115 }
116
117 @Test
118 public void testEquality() {
119 new EqualsTester()
120 .addEqualityGroup(address1, sameAsAddress1)
121 .addEqualityGroup(address2).testEquals();
122 }
123
124 @Test
125 public void testConstruction() {
126 LispTeLcafAddress teLcafAddress = address1;
127 LispIpv4Address rtrRloc1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
128 LispIpv4Address rtrRloc2 = new LispIpv4Address(IpAddress.valueOf("192.168.1.2"));
129
130 assertThat("lookup flag value in TeRecord is not correct",
131 teLcafAddress.getTeRecords().get(0).isLookup(), is(false));
132 assertThat("RLOC probe flag value in TeRecord is not correct",
133 teLcafAddress.getTeRecords().get(0).isRlocProbe(), is(false));
134 assertThat("strict flag value in TeRecord is not correct",
135 teLcafAddress.getTeRecords().get(0).isStrict(), is(false));
136 assertThat("RTR RLOC address in TeRecord is not correct",
137 teLcafAddress.getTeRecords().get(0).getRtrRlocAddress(), is(rtrRloc1));
138
139 assertThat("lookup flag value in TeRecord in not correct",
140 teLcafAddress.getTeRecords().get(1).isLookup(), is(false));
141 assertThat("RLOC probe flag value in TeRecord is not correct",
142 teLcafAddress.getTeRecords().get(1).isRlocProbe(), is(true));
143 assertThat("strict flag value in TeRecord is not correct",
144 teLcafAddress.getTeRecords().get(1).isStrict(), is(false));
145 assertThat("RTR RLOC address in TeRecord is not correct",
146 teLcafAddress.getTeRecords().get(1).getRtrRlocAddress(), is(rtrRloc2));
147 }
148
149 @Test
150 public void testSerialization() throws LispWriterException, LispParseError, LispReaderException {
151 ByteBuf byteBuf = Unpooled.buffer();
152
153 TeLcafAddressWriter writer = new TeLcafAddressWriter();
154 writer.writeTo(byteBuf, address1);
155
156 TeLcafAddressReader reader = new TeLcafAddressReader();
157 LispTeLcafAddress deserialized = reader.readFrom(byteBuf);
158
159 new EqualsTester()
160 .addEqualityGroup(address1, deserialized).testEquals();
161 }
162}