Migrate test asserts
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / test / RpcReplyToDomTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.data.codec.xml.test;
9
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.assertTrue;
12
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.util.Collections;
16 import java.util.List;
17 import java.util.Set;
18
19 import javax.xml.parsers.DocumentBuilder;
20 import javax.xml.parsers.DocumentBuilderFactory;
21 import javax.xml.parsers.ParserConfigurationException;
22
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.opendaylight.yangtools.yang.common.QName;
26 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
27 import org.opendaylight.yangtools.yang.data.api.SimpleNode;
28 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils;
29 import org.opendaylight.yangtools.yang.model.api.Module;
30 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
31 import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
32 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
33 import org.w3c.dom.Document;
34 import org.xml.sax.SAXException;
35
36 /**
37  *
38  * @author Lukas Sedlak <lsedlak@cisco.com>
39  */
40 public class RpcReplyToDomTest {
41
42     private static final DocumentBuilderFactory BUILDER_FACTORY;
43     private static final String RES_SCHEMA_DIR = "/org/opendaylight/yangtools/yang/data/impl/schema";
44
45     private final static String MODEL_NAMESPACE = "org:opendaylight:rpc-reply:test:ns:yang";
46     private final static String MODEL_REVISION = "2014-07-17";
47
48     private final static QName RPC_OUTPUT_QNAME = QName.create(MODEL_NAMESPACE, MODEL_REVISION, "output");
49     private final static QName ROCK_THE_HOUSE_QNAME = QName.create(MODEL_NAMESPACE, MODEL_REVISION, "rock-the-house");
50     private final static QName ACTIV_SW_IMAGE_QNAME = QName.create(MODEL_NAMESPACE, MODEL_REVISION, "activate-software-image");
51
52     private SchemaContext schemaContext;
53     private Document testPayload1;
54     private Document testPayload2;
55
56     static {
57         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
58         factory.setNamespaceAware(true);
59         factory.setCoalescing(true);
60         factory.setIgnoringElementContentWhitespace(true);
61         factory.setIgnoringComments(true);
62         BUILDER_FACTORY = factory;
63     }
64
65     @Before
66     public void setup() throws Exception {
67         final List<InputStream> modelsToParse = Collections
68                 .singletonList(getClass().getResourceAsStream(RES_SCHEMA_DIR + "/rpc-test-model.yang"));
69         assertNotNull(modelsToParse);
70         assertNotNull(modelsToParse.get(0));
71
72         final YangContextParser parser = new YangParserImpl();
73         final Set<Module> modules = parser.parseYangModelsFromStreams(modelsToParse);
74         assertTrue(!modules.isEmpty());
75         schemaContext = parser.resolveSchemaContext(modules);
76         assertNotNull(schemaContext);
77
78         final InputStream rpcPayloadStream1 = getClass().getResourceAsStream(RES_SCHEMA_DIR + "/rpc-test-payload1.xml");
79         InputStream rpcPayloadStream2 = getClass().getResourceAsStream(RES_SCHEMA_DIR + "/rpc-test-payload2.xml");
80
81         assertNotNull(rpcPayloadStream1);
82         assertNotNull(rpcPayloadStream2);
83
84         testPayload1 = readXmlToDocument(rpcPayloadStream1);
85         testPayload2 = readXmlToDocument(rpcPayloadStream2);
86
87         assertNotNull(testPayload1);
88         assertNotNull(testPayload2);
89     }
90
91     private static Document readXmlToDocument(final InputStream xmlContent) throws SAXException, IOException {
92         DocumentBuilder dBuilder;
93         try {
94             dBuilder = BUILDER_FACTORY.newDocumentBuilder();
95         } catch (ParserConfigurationException e) {
96             throw new IllegalStateException("Failed to parse XML document", e);
97         }
98         Document doc = dBuilder.parse(xmlContent);
99
100         doc.getDocumentElement().normalize();
101         return doc;
102     }
103
104     @Test
105     public void test() {
106         final CompositeNode rockNode = XmlDocumentUtils
107                 .rpcReplyToDomNodes(testPayload1, ROCK_THE_HOUSE_QNAME, schemaContext);
108         assertNotNull(rockNode);
109
110         final String namespace = "org:opendaylight:rpc-reply:test:ns:yang";
111         final String revision = "2014-07-17";
112
113         CompositeNode output = rockNode.getFirstCompositeByName(RPC_OUTPUT_QNAME);
114         assertNotNull(output);
115
116         final SimpleNode<?> zipCode = output.getFirstSimpleByName(
117                 QName.create(namespace, revision, "zip-code"));
118         assertNotNull(zipCode);
119
120         final CompositeNode activNode = XmlDocumentUtils
121                 .rpcReplyToDomNodes(testPayload2, ACTIV_SW_IMAGE_QNAME, schemaContext);
122         assertNotNull(activNode);
123
124         output = activNode.getFirstCompositeByName(RPC_OUTPUT_QNAME);
125         assertNotNull(output);
126
127         final CompositeNode imgProps = output
128                 .getFirstCompositeByName(QName.create(namespace, revision, "image-properties"));
129         assertNotNull(imgProps);
130         final CompositeNode imgProperty = imgProps
131                 .getFirstCompositeByName(QName.create(namespace, revision, "image-property"));
132         assertNotNull(imgProperty);
133
134         final SimpleNode<?> imgId = imgProperty
135                 .getFirstSimpleByName(QName.create(namespace, revision, "image-id"));
136         assertNotNull(imgId);
137     }
138 }