Modernize sal-rest-docgen tests a bit
[netconf.git] / restconf / sal-rest-docgen / src / test / java / org / opendaylight / controller / sal / rest / doc / impl / ApiDocGeneratorDraftO2Test.java
1 /*
2  * Copyright (c) 2014, 2015 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.controller.sal.rest.doc.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14
15 import com.fasterxml.jackson.databind.JsonNode;
16 import com.fasterxml.jackson.databind.node.ObjectNode;
17 import com.google.common.collect.ImmutableList;
18 import java.util.List;
19 import org.junit.Test;
20 import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocGeneratorDraftO2;
21 import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl;
22 import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType;
23 import org.opendaylight.netconf.sal.rest.doc.swagger.SwaggerObject;
24 import org.opendaylight.yangtools.yang.common.Revision;
25
26 public final class ApiDocGeneratorDraftO2Test extends AbstractApiDocTest {
27     private static final String NAME = "toaster2";
28     private static final String REVISION_DATE = "2009-11-20";
29     private static final String NAME_2 = "toaster";
30     private static final String REVISION_DATE_2 = "2009-11-20";
31
32     private final ApiDocGeneratorDraftO2 generator = new ApiDocGeneratorDraftO2(SCHEMA_SERVICE);
33
34     /**
35      * Test that paths are generated according to the model.
36      */
37     @Test
38     public void testPaths() {
39         final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow();
40         final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, URIType.DRAFT02,
41             ApiDocServiceImpl.OAversion.V2_0);
42
43         assertEquals(List.of("/restconf/config",
44             "/restconf/config/toaster2:toaster",
45             "/restconf/config/toaster2:toaster/toasterSlot/{slotId}",
46             "/restconf/config/toaster2:toaster/toasterSlot/{slotId}/toaster-augmented:slotInfo",
47             "/restconf/operational/toaster2:toaster",
48             "/restconf/operational/toaster2:toaster/toasterSlot/{slotId}",
49             "/restconf/operational/toaster2:toaster/toasterSlot/{slotId}/toaster-augmented:slotInfo",
50             "/restconf/config/toaster2:lst",
51             "/restconf/config/toaster2:lst/cont1",
52             "/restconf/config/toaster2:lst/cont1/cont11",
53             "/restconf/config/toaster2:lst/cont1/lst11",
54             "/restconf/config/toaster2:lst/lst1/{key1}/{key2}",
55             "/restconf/operational/toaster2:lst",
56             "/restconf/operational/toaster2:lst/cont1",
57             "/restconf/operational/toaster2:lst/cont1/cont11",
58             "/restconf/operational/toaster2:lst/cont1/lst11",
59             "/restconf/operational/toaster2:lst/lst1/{key1}/{key2}",
60             "/restconf/operations/toaster2:make-toast",
61             "/restconf/operations/toaster2:cancel-toast",
62             "/restconf/operations/toaster2:restock-toaster"),
63             ImmutableList.copyOf(doc.getPaths().fieldNames()));
64     }
65
66     /**
67      * Test that generated configuration paths allow to use operations: get, put, delete and post.
68      */
69     @Test
70     public void testConfigPaths() {
71         final List<String> configPaths = List.of("/restconf/config/toaster2:lst",
72             "/restconf/config/toaster2:lst/cont1",
73             "/restconf/config/toaster2:lst/cont1/cont11",
74             "/restconf/config/toaster2:lst/cont1/lst11",
75             "/restconf/config/toaster2:lst/lst1/{key1}/{key2}");
76
77         final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow();
78         final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
79             URIType.DRAFT02, ApiDocServiceImpl.OAversion.V2_0);
80
81         for (final String path : configPaths) {
82             final JsonNode node = doc.getPaths().get(path);
83             assertFalse(node.path("get").isMissingNode());
84             assertFalse(node.path("put").isMissingNode());
85             assertFalse(node.path("delete").isMissingNode());
86             assertFalse(node.path("post").isMissingNode());
87         }
88     }
89
90     /**
91      * Test that generated document contains the following definitions.
92      */
93     @Test
94     public void testDefinitions() {
95         final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow();
96         final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
97             URIType.DRAFT02, ApiDocServiceImpl.OAversion.V2_0);
98
99         final ObjectNode definitions = doc.getDefinitions();
100         assertNotNull(definitions);
101
102         final JsonNode configLstTop = definitions.get("toaster2_config_lst_TOP");
103         assertNotNull(configLstTop);
104         DocGenTestHelper.containsReferences(configLstTop, "lst", "#/definitions/toaster2_config_lst");
105
106         final JsonNode configLst = definitions.get("toaster2_config_lst");
107         assertNotNull(configLst);
108         DocGenTestHelper.containsReferences(configLst, "lst1", "#/definitions/toaster2_lst_config_lst1");
109         DocGenTestHelper.containsReferences(configLst, "cont1", "#/definitions/toaster2_lst_config_cont1");
110
111         final JsonNode configLst1Top = definitions.get("toaster2_lst_config_lst1_TOP");
112         assertNotNull(configLst1Top);
113         DocGenTestHelper.containsReferences(configLst1Top, "lst1", "#/definitions/toaster2_lst_config_lst1");
114
115         final JsonNode configLst1 = definitions.get("toaster2_lst_config_lst1");
116         assertNotNull(configLst1);
117
118         final JsonNode configCont1Top = definitions.get("toaster2_lst_config_cont1_TOP");
119         assertNotNull(configCont1Top);
120         DocGenTestHelper.containsReferences(configCont1Top, "cont1", "#/definitions/toaster2_lst_config_cont1");
121
122         final JsonNode configCont1 = definitions.get("toaster2_lst_config_cont1");
123         assertNotNull(configCont1);
124         DocGenTestHelper.containsReferences(configCont1, "cont11", "#/definitions/toaster2_lst_cont1_config_cont11");
125         DocGenTestHelper.containsReferences(configCont1, "lst11", "#/definitions/toaster2_lst_cont1_config_lst11");
126
127         final JsonNode configCont11Top = definitions.get("toaster2_lst_cont1_config_cont11_TOP");
128         assertNotNull(configCont11Top);
129         DocGenTestHelper.containsReferences(configCont11Top,
130             "cont11", "#/definitions/toaster2_lst_cont1_config_cont11");
131
132         final JsonNode configCont11 = definitions.get("toaster2_lst_cont1_config_cont11");
133         assertNotNull(configCont11);
134
135         final JsonNode configLst11Top = definitions.get("toaster2_lst_cont1_config_lst11_TOP");
136         assertNotNull(configLst11Top);
137         DocGenTestHelper.containsReferences(configLst11Top, "lst11", "#/definitions/toaster2_lst_cont1_config_lst11");
138
139         final JsonNode configLst11 = definitions.get("toaster2_lst_cont1_config_lst11");
140         assertNotNull(configLst11);
141     }
142
143     /**
144      * Test that generated document contains RPC definition for "make-toast" with correct input.
145      */
146     @Test
147     public void testRPC() {
148         final var module = CONTEXT.findModule(NAME_2, Revision.of(REVISION_DATE_2)).orElseThrow();
149         final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
150             URIType.DRAFT02, ApiDocServiceImpl.OAversion.V2_0);
151         assertNotNull(doc);
152
153         final ObjectNode definitions = doc.getDefinitions();
154         final JsonNode inputTop = definitions.get("toaster_make-toast_input_TOP");
155         assertNotNull(inputTop);
156         final String testString = "{\"input\":{\"$ref\":\"#/definitions/toaster_make-toast_input\"}}";
157         assertEquals(testString, inputTop.get("properties").toString());
158         final JsonNode input = definitions.get("toaster_make-toast_input");
159         final JsonNode properties = input.get("properties");
160         assertTrue(properties.has("toasterDoneness"));
161         assertTrue(properties.has("toasterToastType"));
162     }
163 }