blob: 31285d94282b3f153d641a977e02a0af42af3ecf [file] [log] [blame]
Sho SHIMIZUae40b572016-06-08 17:45:14 -07001/*
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 */
16
17package org.onosproject.store.resource.impl;
18
19import com.google.common.collect.ImmutableSet;
20import org.junit.Test;
Sho SHIMIZUa1a590b2016-06-29 10:53:33 -070021import org.onlab.packet.VlanId;
Sho SHIMIZUae40b572016-06-08 17:45:14 -070022import org.onosproject.net.DeviceId;
23import org.onosproject.net.PortNumber;
24import org.onosproject.net.resource.DiscreteResource;
25import org.onosproject.net.resource.Resources;
Sho SHIMIZU317b4982016-06-28 09:13:56 -070026import org.onosproject.store.service.Serializer;
Sho SHIMIZUae40b572016-06-08 17:45:14 -070027
Sho SHIMIZUa1a590b2016-06-29 10:53:33 -070028import java.util.List;
Sho SHIMIZUae40b572016-06-08 17:45:14 -070029import java.util.Optional;
Sho SHIMIZU317b4982016-06-28 09:13:56 -070030import java.util.Set;
31import java.util.stream.Collectors;
32import java.util.stream.IntStream;
Sho SHIMIZUa1a590b2016-06-29 10:53:33 -070033import java.util.stream.Stream;
Sho SHIMIZUae40b572016-06-08 17:45:14 -070034
35import static org.hamcrest.Matchers.is;
36import static org.junit.Assert.assertThat;
37
38public class EncodableDiscreteResourcesTest {
Sho SHIMIZU317b4982016-06-28 09:13:56 -070039 private final Serializer serializer = ConsistentResourceStore.SERIALIZER;
40
41 @Test
42 public void testPortSerialize() {
43 DiscreteResource device = Resources.discrete(DeviceId.deviceId("a")).resource();
44 Set<DiscreteResource> resources = IntStream.range(0, 100)
45 .mapToObj(PortNumber::portNumber)
46 .map(device::child)
47 .collect(Collectors.toSet());
48
49 DiscreteResources original = EncodableDiscreteResources.of(resources);
50
51 byte[] bytes = serializer.encode(original);
52 DiscreteResources decoded = serializer.decode(bytes);
53 assertThat(decoded, is(original));
54 }
55
Sho SHIMIZUae40b572016-06-08 17:45:14 -070056 @Test
57 public void testIfResourceIsFound() {
58 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
59
60 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
61
62 assertThat(sut.lookup(res1.id()), is(Optional.of(res1)));
63 }
64
65 @Test
66 public void testIfResourceIsNotFound() {
67 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
Sho SHIMIZU09ed3872016-06-28 11:17:09 -070068 DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
Sho SHIMIZUae40b572016-06-08 17:45:14 -070069
Sho SHIMIZU09ed3872016-06-28 11:17:09 -070070 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -070071
72 assertThat(sut.lookup(res2.id()), is(Optional.empty()));
73 }
74
75 @Test
76 public void testIfDifferenceIsEmpty() {
77 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
Sho SHIMIZU09ed3872016-06-28 11:17:09 -070078 DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
Sho SHIMIZUae40b572016-06-08 17:45:14 -070079
Sho SHIMIZU09ed3872016-06-28 11:17:09 -070080 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -070081
Sho SHIMIZU09ed3872016-06-28 11:17:09 -070082 DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -070083
Sho SHIMIZU09ed3872016-06-28 11:17:09 -070084 DiscreteResources expected = DiscreteResources.empty();
Sho SHIMIZUae40b572016-06-08 17:45:14 -070085 assertThat(sut.difference(other), is(expected));
86 }
87
88 @Test
Sho SHIMIZUa1a590b2016-06-29 10:53:33 -070089 public void testSerializeInstanceContainingEmptyEncodedDiscreteResources() {
90 DiscreteResource device = Resources.discrete(DeviceId.deviceId("a")).resource();
91 List<PortNumber> ports = IntStream.range(0, 1)
92 .mapToObj(PortNumber::portNumber)
93 .collect(Collectors.toList());
94 List<VlanId> vlans = IntStream.range(0, 2)
95 .mapToObj(x -> VlanId.vlanId((short) x))
96 .collect(Collectors.toList());
97
98 Set<DiscreteResource> originalResources = Stream.concat(ports.stream(), vlans.stream())
99 .map(device::child)
100 .collect(Collectors.toSet());
101 DiscreteResources sut = EncodableDiscreteResources.of(originalResources);
102
103 Set<DiscreteResource> portOnlyResources = ports.stream().map(device::child).collect(Collectors.toSet());
104 DiscreteResources other = EncodableDiscreteResources.of(portOnlyResources);
105
106 DiscreteResources diff = sut.difference(other);
107
108 byte[] bytes = serializer.encode(diff);
109 assertThat(serializer.decode(bytes), is(diff));
110 }
111
112 @Test
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700113 public void testIfDifferenceIsNotEmpty() {
114 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700115 DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700116
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700117 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700118
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700119 DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700120
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700121 DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700122 assertThat(sut.difference(other), is(expected));
123 }
124
125 @Test
126 public void testIfDifferenceIsNotChanged() {
127 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700128 DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700129
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700130 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700131
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700132 DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700133
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700134 DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700135 assertThat(sut.difference(other), is(expected));
136 }
137
138 @Test
139 public void testDifferenceFromEmpty() {
140 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
141
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700142 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700143
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700144 DiscreteResources other = DiscreteResources.empty();
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700145
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700146 DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700147 assertThat(sut.difference(other), is(expected));
148 }
149
150 @Test
151 public void testEmpty() {
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700152 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of());
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700153
154 assertThat(sut.isEmpty(), is(true));
155 }
156
157 @Test
158 public void testNotEmpty() {
159 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
160
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700161 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700162
163 assertThat(sut.isEmpty(), is(false));
164 }
165
166 @Test
167 public void testIfResourceIsContained() {
168 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
169
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700170 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700171
172 assertThat(sut.containsAny(ImmutableSet.of(res1)), is(true));
173 }
174
175 @Test
176 public void testIfResourceIsNotContained() {
177 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700178 DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700179
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700180 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700181
182 assertThat(sut.containsAny(ImmutableSet.of(res2)), is(false));
183 }
184
185 @Test
186 public void testContainsWithEmpty() {
187 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
188
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700189 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700190
191 assertThat(sut.containsAny(ImmutableSet.of()), is(false));
192 }
193
194 @Test
195 public void testAdd() {
196 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700197 DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700198
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700199 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700200
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700201 DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700202
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700203 DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700204 assertThat(sut.add(other), is(expected));
205 }
206
207 @Test
208 public void testValues() {
209 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700210 DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700211
Sho SHIMIZU09ed3872016-06-28 11:17:09 -0700212 DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
Sho SHIMIZUae40b572016-06-08 17:45:14 -0700213
214 assertThat(sut.values(), is(ImmutableSet.of(res1, res2)));
215 }
216}