for (JsonNode address: node) {
JsonNode prefixes = address.get("endpointPrefix");
- assert !prefixes.isArray();
+ assert prefixes.isArray();
for (JsonNode prefix: prefixes) {
JsonNode ipv4 = prefix.get("ipv4Prefix");
JsonNode ipv6 = prefix.get("ipv6Prefix");
for (JsonNode egroup: map) {
String pid = extract_pid(egroup);
JsonNode addr_group = egroup.get("endpointAddressGroup");
- assert addr_group.isNull();
+ assert !addr_group.isNull();
RFC7285Endpoint.AddressGroup ag = group_converter.convert(addr_group);
nm.map.put(pid, ag);
--- /dev/null
+package org.opendaylight.alto.commons.types.converter;
+
+import org.opendaylight.alto.commons.types.model150404.ModelCostMap;
+import org.opendaylight.alto.commons.types.model150404.ModelJSONMapper;
+import org.opendaylight.alto.commons.types.rfc7285.RFC7285CostMap;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RFC2ModelCostMapConverterTest {
+ String costMapJson;
+ RFC2ModelCostMapConverter converter;
+ ObjectMapper mapper;
+ ModelJSONMapper model2Json;
+ String yangModelString;
+
+ @Before
+ public void init() {
+ costMapJson = "{\"meta\":{\"dependent-vtags\":[{\"resource-id\":\"my-default-network-map\",\"tag\":\"3ee2cb7e8d63d9fab71b9b34cbf764436315542e\"}],\"cost-type\":{\"cost-mode\":\"numerical\",\"cost-metric\":\"routingcost\"}},\"cost-map\":{\"PID1\":{\"PID1\":1,\"PID2\":5,\"PID3\":10},\"PID2\":{\"PID1\":5,\"PID2\":1,\"PID3\":15},\"PID3\":{\"PID1\":20,\"PID2\":15}}}";
+ converter = new RFC2ModelCostMapConverter();
+ mapper = new ObjectMapper();
+ model2Json = new ModelJSONMapper();
+ yangModelString = "{\"alto-service:resource-id\":\"my-default-network-map-routingcost-numerical\",\"alto-service:tag\":\"da65eca2eb7a10ce8b059740b0b2e3f8eb1d4786\",\"alto-service:meta\":{\"alto-service:dependent-vtags\":[{\"alto-service:resource-id\":\"my-default-network-map\",\"alto-service:tag\":\"3ee2cb7e8d63d9fab71b9b34cbf764436315542e\"}],\"alto-service:cost-type\":{\"alto-service:cost-mode\":\"numerical\",\"alto-service:cost-metric\":\"routingcost\"}},\"alto-service:map\":[{\"alto-service:src\":\"PID1\",\"alto-service:dst-costs\":[{\"alto-service:dst\":\"PID1\",\"alto-cost-default:cost-default\":\"1\"},{\"alto-service:dst\":\"PID2\",\"alto-cost-default:cost-default\":\"5\"},{\"alto-service:dst\":\"PID3\",\"alto-cost-default:cost-default\":\"10\"}]},{\"alto-service:src\":\"PID2\",\"alto-service:dst-costs\":[{\"alto-service:dst\":\"PID1\",\"alto-cost-default:cost-default\":\"5\"},{\"alto-service:dst\":\"PID2\",\"alto-cost-default:cost-default\":\"1\"},{\"alto-service:dst\":\"PID3\",\"alto-cost-default:cost-default\":\"15\"}]},{\"alto-service:src\":\"PID3\",\"alto-service:dst-costs\":[{\"alto-service:dst\":\"PID1\",\"alto-cost-default:cost-default\":\"20\"},{\"alto-service:dst\":\"PID2\",\"alto-cost-default:cost-default\":\"15\"}]}]}";
+ }
+
+ @Test
+ public void onRFC2Model() throws Exception {
+ RFC7285CostMap costMap = mapper.readValue(costMapJson,RFC7285CostMap.class);
+ ModelCostMap model = converter.convert(costMap);
+ String resultJson = model2Json.asJSON(model);
+ Assert.assertEquals(resultJson, this.yangModelString);
+ }
+}
--- /dev/null
+package org.opendaylight.alto.commons.types.converter;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.alto.commons.types.model150404.ModelEndpointPropertyMap;
+import org.opendaylight.alto.commons.types.model150404.ModelJSONMapper;
+import org.opendaylight.alto.commons.types.rfc7285.RFC7285EndpointPropertyMap;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class RFC2ModelEndpointPropMapConverterTest {
+ String endpointPropMapJson;
+ RFC2ModelEndpointPropMapConverter converter;
+ ObjectMapper mapper;
+ ModelJSONMapper model2Json;
+ String yangModelString;
+
+ @Before
+ public void init(){
+ endpointPropMapJson = "{\"meta\":{\"dependent-vtags\":[{\"resource-id\":\"my-default-network-map\",\"tag\":\"7915dc0290c2705481c491a2b4ffbec482b3cf62\"}]},\"endpoint-properties\":{\"ipv4:192.0.2.34\":{\"my-default-network-map.pid\":\"PID1\",\"priv:ietf-example-prop\":\"1\"},\"ipv4:203.0.113.129\":{\"my-default-network-map.pid\":\"PID3\"}}}";
+ converter = new RFC2ModelEndpointPropMapConverter();
+ mapper = new ObjectMapper();
+ model2Json = new ModelJSONMapper();
+ yangModelString = "{\"alto-service:meta\":{\"alto-service:dependent-vtags\":[{\"alto-service:resource-id\":\"my-default-network-map\",\"alto-service:tag\":\"7915dc0290c2705481c491a2b4ffbec482b3cf62\"}]},\"alto-service:endpoint-properties\":[{\"alto-service:endpoint\":\"ipv4:192.0.2.34\",\"alto-service:properties\":[{\"alto-service:property-type\":\"my-default-network-map.pid\",\"alto-service:property\":\"PID1\"},{\"alto-service:property-type\":\"priv:ietf-example-prop\",\"alto-service:property\":\"1\"}]},{\"alto-service:endpoint\":\"ipv4:203.0.113.129\",\"alto-service:properties\":[{\"alto-service:property-type\":\"my-default-network-map.pid\",\"alto-service:property\":\"PID3\"}]}]}";
+ }
+
+ @Test
+ public void onRFC2Model() throws Exception{
+ RFC7285EndpointPropertyMap endpointPropertyMap = mapper.readValue(this.endpointPropMapJson, RFC7285EndpointPropertyMap.class);
+ ModelEndpointPropertyMap model = converter.convert(endpointPropertyMap);
+ String resultJson = model2Json.asJSON(model);
+ Assert.assertEquals(resultJson, this.yangModelString);
+ }
+}
--- /dev/null
+/**
+ * Copyright (c) 2014 André Martins, Colin Dixon, Evan Zeller and others. All
+ * rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.alto.commons.types.converter;
+
+import org.opendaylight.alto.commons.types.rfc7285.RFC7285JSONMapper;
+import org.opendaylight.alto.commons.types.rfc7285.RFC7285NetworkMap;
+import org.opendaylight.alto.commons.types.model150404.ModelJSONMapper;
+import org.opendaylight.alto.commons.types.model150404.ModelNetworkMap;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RFC2ModelNetworkMapConverterTest {
+
+ private RFC2ModelNetworkMapConverter nmconv;
+ private RFC7285JSONMapper rfcMapper;
+ private ModelJSONMapper modelMapper;
+
+ @Before
+ public void init() {
+ nmconv = new RFC2ModelNetworkMapConverter();
+ rfcMapper = new RFC7285JSONMapper();
+ modelMapper = new ModelJSONMapper();
+ }
+
+ @Test
+ public void onRFC2ModelNetworkMap() throws Exception {
+ String testInput = "{\"network-map\": {\"PID1\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.0/25\"]}, \"PID2\": {\"ipv4\": [\"198.51.100.128/25\"]}, \"PID3\": {\"ipv6\": [\"::/0\"], \"ipv4\": [\"0.0.0.0/0\"]}}, \"meta\": {\"vtag\": {\"tag\": \"da65eca2eb7a10ce8b059740b0b2e3f8eb1d4785\", \"resource-id\": \"my-default-network-map\"}}}";
+ RFC7285NetworkMap rfcMap = rfcMapper.asNetworkMap(testInput);
+ ModelNetworkMap modelMap = nmconv.convert(rfcMap);
+ String result = modelMapper.asJSON(modelMap);
+ String testOutput = "{\"alto-service:resource-id\":\"my-default-network-map\",\"alto-service:tag\":\"da65eca2eb7a10ce8b059740b0b2e3f8eb1d4785\",\"alto-service:map\":[{\"alto-service:pid\":\"PID1\",\"alto-service:endpoint-address-group\":[{\"alto-service:address-type\":\"ipv4\",\"alto-service:endpoint-prefix\":[\"192.0.2.0/24\",\"198.51.100.0/25\"]}]},{\"alto-service:pid\":\"PID2\",\"alto-service:endpoint-address-group\":[{\"alto-service:address-type\":\"ipv4\",\"alto-service:endpoint-prefix\":[\"198.51.100.128/25\"]}]},{\"alto-service:pid\":\"PID3\",\"alto-service:endpoint-address-group\":[{\"alto-service:address-type\":\"ipv4\",\"alto-service:endpoint-prefix\":[\"0.0.0.0/0\"]},{\"alto-service:address-type\":\"ipv6\",\"alto-service:endpoint-prefix\":[\"::/0\"]}]}]}";
+ Assert.assertEquals(testOutput, result);
+ }
+}
--- /dev/null
+package org.opendaylight.alto.commons.types.converter;
+
+import org.opendaylight.alto.commons.types.model150404.ModelJSONMapper;
+import org.opendaylight.alto.commons.types.rfc7285.RFC7285CostMap;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class YANGJSON2RFCCostMapConverterTest {
+ String costMapJson;
+ YANGJSON2RFCCostMapConverter converter;
+ ObjectMapper mapper;
+ ModelJSONMapper model2Json;
+ String yangModelString;
+
+ @Before
+ public void init() {
+ yangModelString = "{\"key\":{\"resourceId\":{\"value\":\"my-default-network-map-routingcost-numerical\"}},\"map\":[{\"key\":{\"src\":{\"value\":\"PID3\"}},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.cost.map.Map\",\"dstCosts\":[{\"dst\":{\"value\":\"PID2\"},\"cost\":\"15\"},{\"dst\":{\"value\":\"PID1\"},\"cost\":\"20\"}],\"src\":{\"value\":\"PID3\"}},{\"key\":{\"src\":{\"value\":\"PID2\"}},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.cost.map.Map\",\"dstCosts\":[{\"dst\":{\"value\":\"PID2\"},\"cost\":\"1\"},{\"dst\":{\"value\":\"PID1\"},\"cost\":\"5\"},{\"dst\":{\"value\":\"PID3\"},\"cost\":\"15\"}],\"src\":{\"value\":\"PID2\"}},{\"key\":{\"src\":{\"value\":\"PID1\"}},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.cost.map.Map\",\"dstCosts\":[{\"dst\":{\"value\":\"PID2\"},\"cost\":\"5\"},{\"dst\":{\"value\":\"PID1\"},\"cost\":\"1\"},{\"dst\":{\"value\":\"PID3\"},\"cost\":\"10\"}],\"src\":{\"value\":\"PID1\"}}],\"tag\":{\"value\":\"da65eca2eb7a10ce8b059740b0b2e3f8eb1d4786\"},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.cost.maps.CostMap\",\"resourceId\":{\"value\":\"my-default-network-map-routingcost-numerical\"},\"meta\":{\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.cost.map.Meta\",\"costType\":{\"description\":null,\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.cost.map.meta.CostType\",\"costMetric\":{\"value\":\"routingcost\",\"enumeration\":null,\"string\":\"routingcost\"},\"costMode\":\"Numerical\"},\"dependentVtags\":[{\"key\":{\"resourceId\":{\"value\":\"my-default-network-map\"}},\"tag\":{\"value\":\"3ee2cb7e8d63d9fab71b9b34cbf764436315542e\"},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.dependent.vtags.DependentVtags\",\"resourceId\":{\"value\":\"my-default-network-map\"}}]}}";
+ converter = new YANGJSON2RFCCostMapConverter();
+ mapper = new ObjectMapper();
+ model2Json = new ModelJSONMapper();
+ costMapJson = "{\"meta\":{\"dependent-vtags\":[{\"resource-id\":\"my-default-network-map\",\"tag\":\"3ee2cb7e8d63d9fab71b9b34cbf764436315542e\"}],\"cost-type\":{\"cost-mode\":\"numerical\",\"cost-metric\":\"routingcost\"}},\"cost-map\":{\"PID3\":{\"PID2\":15.0,\"PID1\":20.0},\"PID2\":{\"PID2\":1.0,\"PID1\":5.0,\"PID3\":15.0},\"PID1\":{\"PID2\":5.0,\"PID1\":1.0,\"PID3\":10.0}}}";
+ }
+
+ @Test
+ public void onYANGJSON2RFC() throws Exception {
+ JsonNode node = mapper.readTree(yangModelString);
+ RFC7285CostMap costMap = converter.convert(node);
+ String resultJson = model2Json.asJSON(costMap);
+ Assert.assertEquals(resultJson, this.costMapJson);
+ }
+}
--- /dev/null
+package org.opendaylight.alto.commons.types.converter;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+//import org.opendaylight.alto.commons.types.model150404.ModelNetworkMap;
+import org.opendaylight.alto.commons.types.rfc7285.RFC7285JSONMapper;
+import org.opendaylight.alto.commons.types.rfc7285.RFC7285NetworkMap;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+public class YANGJSON2RFCNetworkMapConverterTest {
+ private RFC7285JSONMapper rfcMapper;
+ private YANGJSON2RFCNetworkMapConverter ynmc;
+ private ObjectMapper objectMapper;
+ private RFC2ModelNetworkMapConverter nmconv;
+ @Before
+ public void init() {
+ rfcMapper = new RFC7285JSONMapper();
+ objectMapper = new ObjectMapper();
+ ynmc = new YANGJSON2RFCNetworkMapConverter();
+ }
+
+ @Test
+ public void onModel2RFCNetworkMap() throws Exception {
+ String testInput = "{\"resourceId\":{\"value\":\"my-default-network-map\"},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.network.maps.NetworkMap\",\"tag\":{\"value\":\"da65eca2eb7a10ce8b059740b0b2e3f8eb1d4785\"},\"key\":{\"resourceId\":{\"value\":\"my-default-network-map\"}},\"map\":[{\"endpointAddressGroup\":[{\"endpointPrefix\":[{\"ipv4Prefix\":null,\"ipv6Prefix\":{\"value\":\"::/0\"},\"value\":\"::/0\"}],\"addressType\":{\"value\":\"ipv6\",\"enumeration\":\"Ipv6\"},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.endpoint.address.group.EndpointAddressGroup\",\"key\":{\"addressType\":{\"value\":\"ipv6\",\"enumeration\":\"Ipv6\"}}},{\"endpointPrefix\":[{\"ipv4Prefix\":{\"value\":\"0.0.0.0/0\"},\"ipv6Prefix\":null,\"value\":\"0.0.0.0/0\"}],\"addressType\":{\"value\":\"ipv4\",\"enumeration\":\"Ipv4\"},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.endpoint.address.group.EndpointAddressGroup\",\"key\":{\"addressType\":{\"value\":\"ipv4\",\"enumeration\":\"Ipv4\"}}}],\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.network.map.Map\",\"key\":{\"pid\":{\"value\":\"PID3\"}},\"pid\":{\"value\":\"PID3\"}},{\"endpointAddressGroup\":[{\"endpointPrefix\":[{\"ipv4Prefix\":{\"value\":\"198.51.100.128/25\"},\"ipv6Prefix\":null,\"value\":\"198.51.100.128/25\"}],\"addressType\":{\"value\":\"ipv4\",\"enumeration\":\"Ipv4\"},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.endpoint.address.group.EndpointAddressGroup\",\"key\":{\"addressType\":{\"value\":\"ipv4\",\"enumeration\":\"Ipv4\"}}}],\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.network.map.Map\",\"key\":{\"pid\":{\"value\":\"PID2\"}},\"pid\":{\"value\":\"PID2\"}},{\"endpointAddressGroup\":[{\"endpointPrefix\":[{\"ipv4Prefix\":{\"value\":\"192.0.2.0/24\"},\"ipv6Prefix\":null,\"value\":\"192.0.2.0/24\"},{\"ipv4Prefix\":{\"value\":\"198.51.100.0/25\"},\"ipv6Prefix\":null,\"value\":\"198.51.100.0/25\"}],\"addressType\":{\"value\":\"ipv4\",\"enumeration\":\"Ipv4\"},\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.endpoint.address.group.EndpointAddressGroup\",\"key\":{\"addressType\":{\"value\":\"ipv4\",\"enumeration\":\"Ipv4\"}}}],\"implementedInterface\":\"org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.network.map.Map\",\"key\":{\"pid\":{\"value\":\"PID1\"}},\"pid\":{\"value\":\"PID1\"}}]}";
+ ObjectNode node = (ObjectNode) objectMapper.readTree(testInput);
+ RFC7285NetworkMap rnm = ynmc.convert(node);
+ String result = rfcMapper.asJSON(rnm);
+ String testOutput = "{\"meta\":{\"vtag\":{\"resource-id\":\"my-default-network-map\",\"tag\":\"da65eca2eb7a10ce8b059740b0b2e3f8eb1d4785\"}},\"network-map\":{\"PID3\":{\"ipv4\":[\"0.0.0.0/0\"],\"ipv6\":[\"::/0\"]},\"PID2\":{\"ipv4\":[\"198.51.100.128/25\"]},\"PID1\":{\"ipv4\":[\"192.0.2.0/24\",\"198.51.100.0/25\"]}}}";
+ Assert.assertEquals(testOutput, result);
+ }
+}