blob: 956befe0d46d8f5a698f19f80bbcc2eff52019c1 [file] [log] [blame]
Thomas Vachuskace0bbb32015-11-18 16:56:10 -08001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
Thomas Vachuskace0bbb32015-11-18 16:56:10 -08003 *
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.net.config;
18
19import com.fasterxml.jackson.databind.JsonNode;
20import com.fasterxml.jackson.databind.ObjectMapper;
21import org.junit.Before;
22import org.junit.Test;
23
Thomas Vachuskace0bbb32015-11-18 16:56:10 -080024import static org.junit.Assert.assertTrue;
25import static org.onosproject.net.config.Config.FieldPresence.MANDATORY;
26import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL;
27
28/**
29 * Test of the base network config class.
30 */
31public class ConfigTest {
32
33 private static final String SUBJECT = "subject";
34 private static final String KEY = "key";
35
36 private static final String TEXT = "text";
37 private static final String LONG = "long";
38 private static final String DOUBLE = "double";
Jonathan Hart54b83e82016-03-26 20:37:20 -070039 private static final String BOOLEAN = "boolean";
Thomas Vachuskace0bbb32015-11-18 16:56:10 -080040 private static final String MAC = "mac";
Jonathan Hart54b83e82016-03-26 20:37:20 -070041 private static final String BAD_MAC = "badMac";
Thomas Vachuskace0bbb32015-11-18 16:56:10 -080042 private static final String IP = "ip";
Jonathan Hart54b83e82016-03-26 20:37:20 -070043 private static final String BAD_IP = "badIp";
44 private static final String PREFIX = "prefix";
45 private static final String BAD_PREFIX = "badPrefix";
46 private static final String CONNECT_POINT = "connectPoint";
47 private static final String BAD_CONNECT_POINT = "badConnectPoint";
Hyunsun Moon61b73e92016-05-10 18:05:57 -070048 private static final String TP_PORT = "tpPort";
49 private static final String BAD_TP_PORT = "badTpPort";
Thomas Vachuskace0bbb32015-11-18 16:56:10 -080050
51 private final ObjectMapper mapper = new ObjectMapper();
52 private final ConfigApplyDelegate delegate = new TestDelegate();
53
54 private Config<String> cfg;
55 private JsonNode json;
56
57 @Before
58 public void setUp() {
59 json = new ObjectMapper().createObjectNode()
60 .put(TEXT, "foo").put(LONG, 5).put(DOUBLE, 0.5)
Jonathan Hart54b83e82016-03-26 20:37:20 -070061 .put(BOOLEAN, "true")
62 .put(MAC, "ab:cd:ef:ca:fe:ed").put(BAD_MAC, "ab:cd:ef:ca:fe.ed")
63 .put(IP, "12.34.56.78").put(BAD_IP, "12.34-56.78")
64 .put(PREFIX, "12.34.56.78/18").put(BAD_PREFIX, "12.34.56.78-18")
65 .put(CONNECT_POINT, "of:0000000000000001/1")
66 .put(BAD_CONNECT_POINT, "of:0000000000000001-1")
Hyunsun Moon61b73e92016-05-10 18:05:57 -070067 .put(TP_PORT, 65535).put(BAD_TP_PORT, 65536);
Thomas Vachuskace0bbb32015-11-18 16:56:10 -080068 cfg = new TestConfig();
69 cfg.init(SUBJECT, KEY, json, mapper, delegate);
70 }
71
72 @Test
73 public void hasOnlyFields() {
Jonathan Hart54b83e82016-03-26 20:37:20 -070074 assertTrue("has unexpected fields",
75 cfg.hasOnlyFields(TEXT, LONG, DOUBLE, BOOLEAN, MAC, BAD_MAC,
76 IP, BAD_IP, PREFIX, BAD_PREFIX,
77 CONNECT_POINT, BAD_CONNECT_POINT, TP_PORT, BAD_TP_PORT));
78 assertTrue("did not detect unexpected fields",
79 expectInvalidField(() -> cfg.hasOnlyFields(TEXT, LONG, DOUBLE, MAC)));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -080080 }
81
82 @Test
Hyunsun Moon61b73e92016-05-10 18:05:57 -070083 public void hasFields() {
Jonathan Hart54b83e82016-03-26 20:37:20 -070084 assertTrue("does not have mandatory field",
85 cfg.hasFields(TEXT, LONG, DOUBLE, MAC));
86 assertTrue("did not detect missing field",
87 expectInvalidField(() -> cfg.hasFields("none")));
Hyunsun Moon61b73e92016-05-10 18:05:57 -070088 }
89
90 @Test
Thomas Vachuskace0bbb32015-11-18 16:56:10 -080091 public void isString() {
92 assertTrue("is not proper text", cfg.isString(TEXT, MANDATORY));
93 assertTrue("is not proper text", cfg.isString(TEXT, MANDATORY, "^f.*"));
94 assertTrue("is not proper text", cfg.isString(TEXT, OPTIONAL, "^f.*"));
95 assertTrue("is not proper text", cfg.isString(TEXT, OPTIONAL));
96 assertTrue("is not proper text", cfg.isString("none", OPTIONAL));
Jonathan Hart54b83e82016-03-26 20:37:20 -070097 assertTrue("did not detect missing field",
98 expectInvalidField(() -> cfg.isString("none", MANDATORY)));
99 assertTrue("did not detect bad text",
100 expectInvalidField(() -> cfg.isString(TEXT, OPTIONAL, "^b.*")));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800101 }
102
103 @Test
104 public void isNumber() {
105 assertTrue("is not proper number", cfg.isNumber(LONG, MANDATORY));
106 assertTrue("is not proper number", cfg.isNumber(LONG, MANDATORY, 0));
107 assertTrue("is not proper number", cfg.isNumber(LONG, MANDATORY, 0, 10));
108 assertTrue("is not proper number", cfg.isNumber(LONG, MANDATORY, 5, 6));
Jonathan Hart54b83e82016-03-26 20:37:20 -0700109 assertTrue("is not in range",
110 expectInvalidField(() -> cfg.isNumber(LONG, MANDATORY, 6, 10)));
111 assertTrue("is not in range", cfg.isNumber(LONG, MANDATORY, 4, 5));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800112 assertTrue("is not proper number", cfg.isNumber(LONG, OPTIONAL, 0, 10));
113 assertTrue("is not proper number", cfg.isNumber(LONG, OPTIONAL));
114 assertTrue("is not proper number", cfg.isNumber("none", OPTIONAL));
Jonathan Hart54b83e82016-03-26 20:37:20 -0700115 assertTrue("did not detect missing field",
116 expectInvalidField(() -> cfg.isNumber("none", MANDATORY)));
117 assertTrue("is not proper number",
118 expectInvalidField(() -> cfg.isNumber(TEXT, MANDATORY)));
119
120 assertTrue("is not proper number", cfg.isNumber(DOUBLE, MANDATORY, 0, 1));
121 assertTrue("is not in range",
122 expectInvalidField(() -> cfg.isNumber(DOUBLE, MANDATORY, 1, 2)));
123 }
124
125 @Test
126 public void isIntegralNumber() {
127 assertTrue("is not proper number", cfg.isIntegralNumber(LONG, MANDATORY));
128 assertTrue("is not proper number", cfg.isIntegralNumber(LONG, MANDATORY, 0));
129 assertTrue("is not proper number", cfg.isIntegralNumber(LONG, MANDATORY, 0, 10));
130 assertTrue("is not proper number", cfg.isIntegralNumber(LONG, MANDATORY, 5, 6));
131 assertTrue("is not in range",
132 expectInvalidField(() -> cfg.isIntegralNumber(LONG, MANDATORY, 6, 10)));
133 assertTrue("is not in range", cfg.isIntegralNumber(LONG, MANDATORY, 4, 5));
134 assertTrue("is not proper number", cfg.isIntegralNumber(LONG, OPTIONAL, 0, 10));
135 assertTrue("is not proper number", cfg.isIntegralNumber(LONG, OPTIONAL));
136 assertTrue("is not proper number", cfg.isIntegralNumber("none", OPTIONAL));
137 assertTrue("did not detect missing field",
138 expectInvalidField(() -> cfg.isIntegralNumber("none", MANDATORY)));
139 assertTrue("is not proper number",
140 expectInvalidField(() -> cfg.isIntegralNumber(TEXT, MANDATORY)));
141
142 assertTrue("is not in range",
143 expectInvalidField(() -> cfg.isIntegralNumber(DOUBLE, MANDATORY, 0, 10)));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800144 }
145
146 @Test
147 public void isDecimal() {
148 assertTrue("is not proper decimal", cfg.isDecimal(DOUBLE, MANDATORY));
149 assertTrue("is not proper decimal", cfg.isDecimal(DOUBLE, MANDATORY, 0.0));
150 assertTrue("is not proper decimal", cfg.isDecimal(DOUBLE, MANDATORY, 0.0, 1.0));
151 assertTrue("is not proper decimal", cfg.isDecimal(DOUBLE, MANDATORY, 0.5, 0.6));
Jonathan Hart54b83e82016-03-26 20:37:20 -0700152 assertTrue("is not proper decimal", cfg.isDecimal(DOUBLE, MANDATORY, 0.4, 0.5));
153 assertTrue("is not in range",
154 expectInvalidField(() -> cfg.isDecimal(DOUBLE, MANDATORY, 0.6, 1.0)));
155 assertTrue("is not in range",
156 expectInvalidField(() -> cfg.isDecimal(DOUBLE, MANDATORY, 0.3, 0.4)));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800157 assertTrue("is not proper decimal", cfg.isDecimal(DOUBLE, OPTIONAL, 0.0, 1.0));
158 assertTrue("is not proper decimal", cfg.isDecimal(DOUBLE, OPTIONAL));
159 assertTrue("is not proper decimal", cfg.isDecimal("none", OPTIONAL));
Jonathan Hart54b83e82016-03-26 20:37:20 -0700160 assertTrue("did not detect missing field",
161 expectInvalidField(() -> cfg.isDecimal("none", MANDATORY)));
162 }
163
164 @Test
165 public void isBoolean() {
166 assertTrue("is not proper boolean", cfg.isBoolean(BOOLEAN, MANDATORY));
167 assertTrue("did not detect missing field",
168 expectInvalidField(() -> cfg.isBoolean("none", MANDATORY)));
169 assertTrue("is not proper boolean", cfg.isBoolean("none", OPTIONAL));
170 assertTrue("did not detect bad boolean",
171 expectInvalidField(() -> cfg.isBoolean(TEXT, MANDATORY)));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800172 }
173
174 @Test
175 public void isMacAddress() {
176 assertTrue("is not proper mac", cfg.isMacAddress(MAC, MANDATORY));
177 assertTrue("is not proper mac", cfg.isMacAddress(MAC, OPTIONAL));
178 assertTrue("is not proper mac", cfg.isMacAddress("none", OPTIONAL));
Jonathan Hart54b83e82016-03-26 20:37:20 -0700179 assertTrue("did not detect missing field",
180 expectInvalidField(() -> cfg.isMacAddress("none", MANDATORY)));
181 assertTrue("did not detect bad ip",
182 expectInvalidField(() -> cfg.isMacAddress(BAD_MAC, MANDATORY)));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800183 }
184
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800185 @Test
186 public void isIpAddress() {
187 assertTrue("is not proper ip", cfg.isIpAddress(IP, MANDATORY));
188 assertTrue("is not proper ip", cfg.isIpAddress(IP, OPTIONAL));
189 assertTrue("is not proper ip", cfg.isIpAddress("none", OPTIONAL));
Jonathan Hart54b83e82016-03-26 20:37:20 -0700190 assertTrue("did not detect missing ip",
191 expectInvalidField(() -> cfg.isIpAddress("none", MANDATORY)));
192 assertTrue("did not detect bad ip",
193 expectInvalidField(() -> cfg.isIpAddress(BAD_IP, MANDATORY)));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800194 }
195
Jonathan Hart54b83e82016-03-26 20:37:20 -0700196 @Test
197 public void isIpPrefix() {
198 assertTrue("is not proper prefix", cfg.isIpPrefix(PREFIX, MANDATORY));
199 assertTrue("is not proper prefix", cfg.isIpPrefix(PREFIX, OPTIONAL));
200 assertTrue("is not proper prefix", cfg.isIpPrefix("none", OPTIONAL));
201 assertTrue("did not detect missing prefix",
202 expectInvalidField(() -> cfg.isIpPrefix("none", MANDATORY)));
203 assertTrue("did not detect bad prefix",
204 expectInvalidField(() -> cfg.isIpPrefix(BAD_PREFIX, MANDATORY)));
205 }
206
207 @Test
208 public void isConnectPoint() {
209 assertTrue("is not proper connectPoint", cfg.isConnectPoint(CONNECT_POINT, MANDATORY));
210 assertTrue("is not proper connectPoint", cfg.isConnectPoint(CONNECT_POINT, OPTIONAL));
211 assertTrue("is not proper connectPoint", cfg.isConnectPoint("none", OPTIONAL));
212 assertTrue("did not detect missing connectPoint",
213 expectInvalidField(() -> cfg.isConnectPoint("none", MANDATORY)));
214 assertTrue("did not detect bad connectPoint",
215 expectInvalidField(() -> cfg.isConnectPoint(BAD_CONNECT_POINT, MANDATORY)));
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800216 }
217
Hyunsun Moon61b73e92016-05-10 18:05:57 -0700218 @Test
219 public void isTpPort() {
220 assertTrue("is not proper transport port", cfg.isTpPort(TP_PORT, MANDATORY));
221 assertTrue("is not proper transport port", cfg.isTpPort(TP_PORT, OPTIONAL));
222 assertTrue("is not proper transport port", cfg.isTpPort("none", OPTIONAL));
Jonathan Hart54b83e82016-03-26 20:37:20 -0700223 assertTrue("did not detect missing field",
224 expectInvalidField(() -> cfg.isTpPort("none", MANDATORY)));
225 assertTrue("is not proper transport port",
226 expectInvalidField(() -> cfg.isTpPort(BAD_TP_PORT, MANDATORY)));
Hyunsun Moon61b73e92016-05-10 18:05:57 -0700227 }
228
Jonathan Hart54b83e82016-03-26 20:37:20 -0700229 /**
230 * Expects an InvalidFieldException to be thrown when the given runnable is
231 * run.
232 *
233 * @param runnable runnable to run
234 * @return true if an InvalidFieldException was thrown, otherwise false
235 */
236 private boolean expectInvalidField(Runnable runnable) {
237 try {
238 runnable.run();
239 return false;
240 } catch (InvalidFieldException e) {
241 return true;
242 }
Hyunsun Moon61b73e92016-05-10 18:05:57 -0700243 }
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800244
Thomas Vachuskace0bbb32015-11-18 16:56:10 -0800245 private class TestConfig extends Config<String> {
246 }
247
248 private class TestDelegate implements ConfigApplyDelegate {
249 @Override
250 public void onApply(Config config) {
251 }
252 }
Jonathan Hart54b83e82016-03-26 20:37:20 -0700253}