diff options
Diffstat (limited to 'aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java')
-rw-r--r-- | aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java | 551 |
1 files changed, 545 insertions, 6 deletions
diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java index 7918eb3..311de49 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java @@ -20,13 +20,14 @@ package org.onap.aai.rest; import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraphTransaction; +import org.junit.Assert; import org.junit.Test; -import org.junit.Ignore; -import org.onap.aai.HttpTestUtil; import org.onap.aai.PayloadUtil; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.util.AAIConfig; @@ -52,9 +53,116 @@ public class DslConsumerTest extends AbstractSpringRestTest { boolean success = true; try { GraphTraversalSource g = transaction.traversal(); - g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl") + Vertex p1 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl") .property("in-maint", false).property("source-of-truth", "JUNIT") .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl").next(); + Vertex p2 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl-02") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-02").next(); + Vertex p3 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl-03") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-03").next(); + Vertex p4 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl-04") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("number-of-cpus", 364).property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-04").next(); + Vertex c1 = g.addV().property("aai-node-type", "complex").property("physical-location-id", "test-complex-dsl") + .property("state", "NJ") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/complexes/complex/test-complex-dsl").next(); + Vertex cr1 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-cloud-owner-01") + .property("cloud-region-id", "test-cloud-region-id-01") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/test-cloud-owner-01/test-cloud-region-id-01").next(); + Vertex pnf01 = g.addV().property("aai-node-type", "pnf") + .property("pnf-name", "test-pnf-name-01") + .property("in-maint", false) + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-01").next(); + Vertex vserver2 = g.addV().property("aai-node-type", "vserver") + .property("vserver-id", "test-vserver-id-2") + .property("vserver-name", "test-vserver-name-2") + .property("in-maint", "false") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/vservers/vserver/test-vserver-id-2").next(); + Vertex tenant2 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-tenant-id-2") + .property("tenant-name", "test-tenant-name-2") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/tenants/tenant/test-tenant-id-2").next(); + Vertex linterface2 = g.addV().property("aai-node-type", "l-interface") + .property("interface-name", "test-interface-name-02") + .property("priority", "123") + .property("is-port-mirrored", "true") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/l-interfaces/l-interface/test-interface-name-02").next(); + Vertex oamNetwork2 = g.addV().property("aai-node-type", "oam-network") + .property("network-uuid", "test-network-uuid-02") + .property("network-name", "test-network-name-02") + .property("cvlan-tag", "456") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/oam-networks/oam-network/test-network-uuid-02").next(); + Vertex cr2 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-cloud-owner-02") + .property("cloud-region-id", "test-cloud-region-id-02") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/test-cloud-owner-02/test-cloud-region-id-02").next(); + + // For adding edges, check the dbedgetules and the property from and to node + // along with the other properties to populate information + p1.addEdge("org.onap.relationships.inventory.LocatedIn", c1, + "private", false, + "prevent-delete", "NONE", + "delete-other-v", "NONE", + "contains-other-v", "NONE", + "default", true); + p1.addEdge("org.onap.relationships.inventory.LocatedIn", cr1, + "private", false, + "prevent-delete", "NONE", + "delete-other-v", "NONE", + "contains-other-v", "NONE", + "default", true); + p3.addEdge("org.onap.relationships.inventory.LocatedIn", c1, + "private", false, + "prevent-delete", "NONE", + "delete-other-v", "NONE", + "contains-other-v", "NONE", + "default", true); + p4.addEdge("org.onap.relationships.inventory.LocatedIn", c1, + "private", false, + "prevent-delete", "NONE", + "delete-other-v", "NONE", + "contains-other-v", "NONE", + "default", true); + tenant2.addEdge("org.onap.relationships.inventory.BelongsTo", cr2, + "private", false, + "prevent-delete", "NONE", + "delete-other-v", "NONE", + "contains-other-v", "NONE", + "default", true); + vserver2.addEdge("org.onap.relationships.inventory.BelongsTo", tenant2, + "private", false, + "prevent-delete", "NONE", + "delete-other-v", "NONE", + "contains-other-v", "NONE", + "default", true); + linterface2.addEdge("tosca.relationships.network.BindsTo", vserver2, + "direction", "OUT", + "multiplicity", "MANY2ONE", + "contains-other-v", "!OUT", + "delete-other-v", "!OUT", + "prevent-delete", "NONE", + "default", true); + oamNetwork2.addEdge("org.onap.relationships.inventory.BelongsTo", cr2, + "direction", "OUT", + "multiplicity", "MANY2ONE", + "contains-other-v", "!OUT", + "delete-other-v", "NONE", + "prevent-delete", "!OUT", + "default", true); + + } catch (Exception ex) { success = false; } finally { @@ -209,7 +317,6 @@ public class DslConsumerTest extends AbstractSpringRestTest { responseEntity.getStatusCode()); } - @Test public void testDslQueryProcessingV2_WithSimpleFormat_WithAsTreeQueryParameter() throws Exception { Map<String, String> dslQueryMap = new HashMap<>(); @@ -286,7 +393,6 @@ public class DslConsumerTest extends AbstractSpringRestTest { headers.remove("X-DslApiVersion"); } - @Ignore @Test public void testDslQueryProcessingV2_WithResourceFormat_WithoutAsTreeQueryParameter() throws Exception { Map<String, String> dslQueryMap = new HashMap<>(); @@ -339,7 +445,6 @@ public class DslConsumerTest extends AbstractSpringRestTest { headers.remove("X-DslApiVersion"); } - @Ignore @Test public void testDslQueryProcessingV2_WithResourceAndUrlFormat_WithoutAsTreeQueryParameter() throws Exception { Map<String, String> dslQueryMap = new HashMap<>(); @@ -366,4 +471,438 @@ public class DslConsumerTest extends AbstractSpringRestTest { headers.remove("X-DslApiVersion"); } + @Test + public void testDslQueryTestAggregateFormatLastNodeNotSelectedAndNotReturned() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver{'hostname'}('hostname','test-pserver-dsl') > complex"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion","V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + assertNull(resultsValue.get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl")); //assert complex is not returned since it is not selected + JsonObject properties = resultsValue.get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl").getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(1, properties.size()); + assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); //assert only hostname is selected + assertNull(properties.get("in-maint")); //assert that in-maint is not returned in the properties list + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestAggregateFormatLastNodeSelectedAndReturned() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver{'hostname'}('hostname','test-pserver-dsl') > complex*"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion","V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonArray resultsValue = resultsArray.get(0).getAsJsonArray(); + assertNotNull(resultsValue.get(1).getAsJsonObject().get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl")); //assert complex is returned since it is selected + JsonObject properties = resultsValue.get(0).getAsJsonObject().get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl").getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(1, properties.size()); + assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); //verify that only selected attribute (hostname) is displayed + assertNull(properties.get("in-maint")); //assert that in-maint is not returned in the properties list + JsonObject complexProperties = resultsValue.get(1).getAsJsonObject().get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl").getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(2, complexProperties.size()); //internal properties like source-of-truth, node-type and aai-uri are not returned. + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestAggregateFormatInternalPropsNotReturned() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion","V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject properties = resultsArray.get(0).getAsJsonObject().get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl").getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(2, properties.size()); + assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); //verify that only hostname is displayed + assertNull(properties.get("source-of-truth")); //assert that source-of-truth is not returned in properties list + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestWithMultipleWheres() throws Exception { + // Return pservers where pserver has edge to complex "AND" same pserver also has an edge to cloud-region + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')(> complex)(> cloud-region)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v18/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion","V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + assertEquals(1, resultsArray.size()); // Returns only test-pserver-dsl, does not return test-pserver-dsl-03 since it does not have an edge to cloud-region + assertEquals(null, resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl-03")); //not returned + assertNotNull(resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestWithMultipleWhereNots() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname')!(> complex)!(> cloud-region)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v18/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion","V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + assertEquals(1, resultsArray.size()); // Returns only test-pserver-dsl-02 + assertEquals(null, resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl")); //not returned + assertNotNull(resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl-02")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryProcessing_ExpectedError_WrongDataType() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('number-of-cpus','test')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=simple"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + Assert.assertTrue(responseString.contains( + "Value ['test'] is not an instance of the expected data type for property key ['number-of-cpus'] and cannot be converted. " + + "Expected: class java.lang.Integer, found: class java.lang.String")); + } + + @Test + public void testDslQueryOnComplex_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "[complex*('source-of-truth', 'JUNIT'), complex*('aai-uri', '/cloud-infrastructure/complexes/complex/test-complex-dsl')]"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultValue = resultsArray.get(0).getAsJsonObject(); + JsonObject complex = resultValue.get("complex").getAsJsonObject(); + Assert.assertEquals("\"test-complex-dsl\"", complex.get("physical-location-id").toString()); + } + + @Test + public void testDslQueryOnPserver_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "[pserver*('hostname','test-pserver-dsl'), complex*('physical-location-id', 'test-complex-dsl')]"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + for (JsonElement je : resultsArray) { + JsonObject jo = je.getAsJsonObject(); + if (jo.get("complex") != null) { + Assert.assertEquals("\"test-complex-dsl\"", jo.get("complex").getAsJsonObject().get("physical-location-id").toString()); + } + else if (jo.get("pserver") != null) { + Assert.assertEquals("\"test-pserver-dsl\"", jo.get("pserver").getAsJsonObject().get("hostname").toString()); + } else { + Assert.fail(); + } + } + } + + @Test + public void testDslQueryOnNodesWithEdges_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "[pserver*('hostname','test-pserver-dsl-02'), pserver*('hostname','test-pserver-dsl')>complex*, pnf('pnf-name','pnf-name-noResults')>lag-interface>l-interface] > complex*"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); // pnf should have no results + + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + boolean hasPserver1 = false, hasPserver2 = false; + for (JsonElement je : resultsArray) { + JsonObject jo = je.getAsJsonObject(); + if (jo.get("complex") != null) { + Assert.assertEquals("\"test-complex-dsl\"", jo.get("complex").getAsJsonObject().get("physical-location-id").toString()); + } + else if (jo.get("pserver") != null) { + if (jo.get("pserver").getAsJsonObject().get("hostname").toString().equals("\"test-pserver-dsl\"")){ + hasPserver1 = true; + } + if (jo.get("pserver").getAsJsonObject().get("hostname").toString().equals("\"test-pserver-dsl-02\"")) { + hasPserver2 = true; + } + } else { + Assert.fail(); + } + } + Assert.assertTrue(hasPserver1 && hasPserver2); + } + + @Test + public void testDslQueryOnNodesWithEdges2_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "[pnf*('pnf-name','test-pnf-name-01'),pserver(>cloud-region*('cloud-owner','test-cloud-owner-01'))]"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + for (JsonElement je : resultsArray) { + JsonObject jo = je.getAsJsonObject(); + if (jo.get("pnf") != null) { + Assert.assertEquals("\"test-pnf-name-01\"", jo.get("pnf").getAsJsonObject().get("pnf-name").toString()); + } + else if (jo.get("cloud-region") != null) { + Assert.assertEquals("\"test-cloud-owner-01\"", jo.get("cloud-region").getAsJsonObject().get("cloud-owner").toString()); + } else { + Assert.fail(); + } + } + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsString_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the vserver was returned in the response + Assert.assertTrue(responseString.contains("\"vserver-id\":\"test-vserver-id-2\"") ); + + dslQueryMap.remove("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)"); + + // With expected boolean value of in-maint, "false", in string form (with single quotes) + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'false')"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + // Confirm that the vserver was returned in the response + Assert.assertTrue(responseString.contains("\"vserver-id\":\"test-vserver-id-2\"") ); + } + + @Test + public void testDslQuery_IsAgnosticWithWrongBooleanPropertyAsString_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // all string values not boolean related default to false + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'bogusBoolean')>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsInteger0_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 0)>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsInteger1_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert.assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsTrue_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', true)>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert.assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsTrueString_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'true')>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert.assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); + } + + @Test + public void testDslQuery_IsAgnosticWithIntegerPropertyAsString_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', false)>l-interface*('priority', '00123')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); + dslQueryMap.remove("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', false)>l-interface*('priority', '00123')"); + + // With expected boolean value of in-maint, "false", in string form (with single quotes) + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'false')>l-interface*('priority', 00123)"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); + } + + @Test + public void testDslQuery_IsAgnosticWithLongPropertyAsString_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', '456')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the oam-network was returned in the response + Assert.assertTrue(responseString.contains("\"cvlan-tag\":456")); + dslQueryMap.remove("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', '456')"); + + dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', 456)"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + + // Confirm that the oam-network was returned in the response + Assert.assertTrue(responseString.contains("\"cvlan-tag\":456")); + } + + @Test + public void testDslQuery_IsAgnosticWithPrimitivePropertiesInList_ReturnSuccessfulResponse() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", "complex('state')>pserver*('number-of-cpus', '234', '364', 2342)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the pserver was returned in the response + Assert.assertTrue(responseString.contains("\"number-of-cpus\":364")); + dslQueryMap.remove("dsl-query", "complex('state')>pserver*('number-of-cpus', '234', '364', 2342)"); + + dslQueryMap.put("dsl-query", "complex('state')>pserver*('number-of-cpus', '234', 364, 2342)"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + + // Confirm that the pserver was returned in the response + Assert.assertTrue(responseString.contains("\"number-of-cpus\":364")); + } } |