2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.aaiclient.client.aai;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25 import org.junit.Test;
26 import org.onap.aaiclient.client.graphinventory.entities.DSLNodeKey;
27 import org.onap.aaiclient.client.graphinventory.entities.DSLQueryBuilder;
28 import org.onap.aaiclient.client.graphinventory.entities.DSLStartNode;
29 import org.onap.aaiclient.client.graphinventory.entities.Output;
30 import org.onap.aaiclient.client.graphinventory.entities.Start;
31 import org.onap.aaiclient.client.graphinventory.entities.TraversalBuilder;
32 import org.onap.aaiclient.client.graphinventory.entities.__;
34 public class DSLQueryBuilderTest {
37 public void whereTest() {
38 DSLQueryBuilder<Start, Start> builder = TraversalBuilder.fragment(new DSLStartNode(AAIObjectType.CLOUD_REGION,
39 __.key("cloud-owner", "att-nc"), __.key("cloud-region-id", "test")));
41 builder.to(__.node(AAIObjectType.VLAN_TAG))
42 .where(__.node(AAIObjectType.OWNING_ENTITY, __.key("owning-entity-name", "name")))
43 .to(__.node(AAIObjectType.VLAN_TAG, __.key("vlan-id-outer", "108")).output());
45 assertEquals("cloud-region('cloud-owner', 'att-nc')('cloud-region-id', 'test') > "
46 + "vlan-tag (> owning-entity('owning-entity-name', 'name')) > " + "vlan-tag*('vlan-id-outer', '108')",
47 builder.build().get());
51 public void unionTest() {
52 DSLQueryBuilder<Output, Output> builder = TraversalBuilder
53 .traversal(new DSLStartNode(AAIObjectType.GENERIC_VNF, __.key("vnf-id", "vnfId")).output());
55 builder.union(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output()),
56 __.node(AAIObjectType.VSERVER)
57 .to(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output())));
60 "generic-vnf*('vnf-id', 'vnfId') > " + "[ pserver* > complex*, " + "vserver > pserver* > complex* ]",
61 builder.build().get());
65 public void whereUnionTest() {
66 DSLQueryBuilder<Output, Output> builder = TraversalBuilder
67 .traversal(new DSLStartNode(AAIObjectType.GENERIC_VNF, __.key("vnf-id", "vnfId")).output());
69 builder.where(__.union(__.node(AAIObjectType.PSERVER, __.key("hostname", "hostname1")),
70 __.node(AAIObjectType.VSERVER).to(__.node(AAIObjectType.PSERVER, __.key("hostname", "hostname1")))));
72 assertEquals("generic-vnf*('vnf-id', 'vnfId') (> [ pserver('hostname', 'hostname1'), "
73 + "vserver > pserver('hostname', 'hostname1') ])", builder.build().get());
77 public void notNullTest() {
78 DSLQueryBuilder<Output, Output> builder = TraversalBuilder.traversal(
79 new DSLStartNode(AAIObjectType.CLOUD_REGION, __.key("cloud-owner", "", "null").not()).output());
81 assertEquals("cloud-region* !('cloud-owner', ' ', ' null ')", builder.build().get());
85 public void shortCutToTest() {
86 DSLQueryBuilder<Output, Output> builder = TraversalBuilder
87 .traversal(new DSLStartNode(AAIObjectType.PSERVER, __.key("hostname", "my-hostname")).output());
89 builder.to(AAIObjectType.P_INTERFACE).to(AAIObjectType.SRIOV_PF, __.key("pf-pci-id", "my-id"));
90 assertEquals("pserver*('hostname', 'my-hostname') > p-interface > sriov-pf('pf-pci-id', 'my-id')",
91 builder.build().get());
95 public void limitTest() {
96 DSLQueryBuilder<Output, Output> builder = TraversalBuilder
97 .traversal(new DSLStartNode(AAIObjectType.PSERVER, __.key("hostname", "my-hostname")).output());
99 builder.to(AAIObjectType.P_INTERFACE).limit(2).to(AAIObjectType.SRIOV_PF, __.key("pf-pci-id", "my-id"));
100 assertEquals("pserver*('hostname', 'my-hostname') > p-interface > sriov-pf('pf-pci-id', 'my-id') LIMIT 2",
101 builder.build().get());
105 public void equalsTest() {
106 DSLQueryBuilder<Output, Output> builder = TraversalBuilder
107 .traversal(new DSLStartNode(AAIObjectType.PSERVER, __.key("hostname", "my-hostname")).output());
109 builder.to(AAIObjectType.P_INTERFACE).to(AAIObjectType.SRIOV_PF, __.key("pf-pci-id", "my-id"));
111 builder.equals("pserver*('hostname', 'my-hostname') > p-interface > sriov-pf('pf-pci-id', 'my-id')"));
112 assertTrue(builder.equals(builder));
116 public void mixedTypeTest() {
117 DSLQueryBuilder<Start, Start> builder = TraversalBuilder.fragment(new DSLStartNode(AAIObjectType.CLOUD_REGION,
118 __.key("cloud-owner", "owner"), __.key("cloud-region-id", "id")));
119 builder.to(__.node(AAIObjectType.VLAN_TAG, __.key("vlan-id-outer", 167), __.key("my-boolean", true)).output());
120 assertTrue(builder.equals(
121 "cloud-region('cloud-owner', 'owner')('cloud-region-id', 'id') > vlan-tag*('vlan-id-outer', 167)('my-boolean', true)"));
125 public void outputOnNodeLambdasTest() {
126 DSLQueryBuilder<Start, Start> builder = TraversalBuilder
127 .fragment(new DSLStartNode(AAIObjectType.L_INTERFACE, new DSLNodeKey("interface-id", "myId")));
129 builder.to(AAIObjectType.VSERVER, __.key("vserver-name", "myName")).output().to(AAIObjectType.P_INTERFACE)
131 assertEquals("l-interface('interface-id', 'myId') > vserver*('vserver-name', 'myName') > p-interface*",
132 builder.build().get());
136 public void skipOutputOnUnionTest() {
137 DSLQueryBuilder<Output, Output> builder = TraversalBuilder
138 .traversal(new DSLStartNode(AAIObjectType.GENERIC_VNF, __.key("vnf-id", "vnfId")).output());
140 builder.union(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output()),
141 __.node(AAIObjectType.VSERVER)
142 .to(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output())))
146 "generic-vnf*('vnf-id', 'vnfId') > " + "[ pserver* > complex*, " + "vserver > pserver* > complex* ]",
147 builder.build().get());