query clients now have more useable result methods 38/79738/2
authorBenjamin, Max (mb388a) <mb388a@us.att.com>
Tue, 5 Mar 2019 21:42:10 +0000 (16:42 -0500)
committerMarcus Williams <marcus.williams@intel.com>
Wed, 6 Mar 2019 15:58:57 +0000 (15:58 +0000)
ResourceAndUrl now outputs the correct wrapper type
query clients now have more useable result methods

Change-Id: I000f8a7e7d4e204d1da7ad1c6bb5ce3e2d0135b2
Issue-ID: SO-1596
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
20 files changed:
common/src/main/java/org/onap/so/client/RestClient.java
common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java
common/src/main/java/org/onap/so/client/aai/AAIQueryClient.java
common/src/main/java/org/onap/so/client/aai/entities/uri/HttpLookupUri.java
common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryQueryClient.java
common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java
common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java
common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java
common/src/main/java/org/onap/so/client/graphinventory/entities/Id.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/graphinventory/entities/Pathed.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/graphinventory/entities/Resource.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/graphinventory/entities/ResourceAndUrl.java [new file with mode: 0644]
common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java
common/src/test/java/org/onap/so/client/aai/AAIResourcesClientTest.java
common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java
common/src/test/java/org/onap/so/client/aai/entities/RelationshipsTest.java
common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java
common/src/test/java/org/onap/so/client/defaultproperties/DefaultAAIPropertiesImpl.java
common/src/test/resources/__files/aai/query/pathed-result.json [new file with mode: 0644]
common/src/test/resources/__files/aai/query/single-query-result.json [new file with mode: 0644]

index 76134a4..4284cea 100644 (file)
@@ -262,6 +262,10 @@ public abstract class RestClient {
        public <T> T put(Object obj, Class<T> resultClass) {
                return format(method("PUT", obj), resultClass).orElse(null);
        }
+       
+       public <T> T put(Object obj, GenericType<T> resultClass) {
+               return format(method("PUT", obj), resultClass).orElse(null);
+       }
 
        public <T> T delete(Class<T> resultClass) {
                return format(method("DELETE", null), resultClass).orElse(null);
index 4cee4f3..5f2c623 100644 (file)
 
 package org.onap.so.client.aai;
 
+import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.graphinventory.GraphInventoryQueryClient;
 import org.onap.so.client.graphinventory.entities.DSLQuery;
 import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri;
 
-public class AAIDSLQueryClient extends GraphInventoryQueryClient<AAIDSLQueryClient, DSLQuery> {
+public class AAIDSLQueryClient extends GraphInventoryQueryClient<AAIDSLQueryClient, DSLQuery, AAIResultWrapper, AAIObjectType> {
 
        public AAIDSLQueryClient() {
                super(new AAIClient());
@@ -40,4 +41,15 @@ public class AAIDSLQueryClient extends GraphInventoryQueryClient<AAIDSLQueryClie
                return AAIUriFactory.createResourceUri(AAIObjectType.DSL);
        }
        
+
+       @Override
+       public AAIResultWrapper createWrapper(String json) {
+               return new AAIResultWrapper(json);
+       }
+
+       @Override
+       public AAIObjectType createType(String name) {
+               return AAIObjectType.fromTypeName(name);
+       }
+       
 }
index 66d5d1f..cc855e4 100644 (file)
 
 package org.onap.so.client.aai;
 
+import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.CustomQuery;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.graphinventory.GraphInventoryQueryClient;
 import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri;
 
-public class AAIQueryClient extends GraphInventoryQueryClient<AAIQueryClient, CustomQuery> {
+public class AAIQueryClient extends GraphInventoryQueryClient<AAIQueryClient, CustomQuery, AAIResultWrapper, AAIObjectType> {
 
        public AAIQueryClient() {
                super(new AAIClient());
@@ -44,5 +45,15 @@ public class AAIQueryClient extends GraphInventoryQueryClient<AAIQueryClient, Cu
        protected GraphInventoryUri setupQueryParams(GraphInventoryUri uri) {
                return super.setupQueryParams(uri);
        }
+
+       @Override
+       public AAIResultWrapper createWrapper(String json) {
+               return new AAIResultWrapper(json);
+       }
+
+       @Override
+       public AAIObjectType createType(String name) {
+               return AAIObjectType.fromTypeName(name);
+       }
        
 }
index 324bb8a..a627480 100644 (file)
@@ -33,6 +33,7 @@ import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.client.aai.entities.Results;
 import org.onap.so.client.graphinventory.Format;
+import org.onap.so.client.graphinventory.entities.Pathed;
 import org.onap.so.client.graphinventory.entities.uri.HttpAwareUri;
 import org.onap.so.client.graphinventory.exceptions.GraphInventoryPayloadException;
 import org.onap.so.client.graphinventory.exceptions.GraphInventoryUriComputationException;
@@ -82,9 +83,9 @@ public abstract class HttpLookupUri extends AAISimpleUri implements HttpAwareUri
                Optional<String> result;
                ObjectMapper mapper = new ObjectMapper();
                
-               Results<Map<String, String>> results = mapper.readValue(jsonString, new TypeReference<Results<Map<String, String>>>(){});
+               Results<Pathed> results = mapper.readValue(jsonString, new TypeReference<Results<Pathed>>(){});
                if (results.getResult().size() == 1) {
-                       String uriString = results.getResult().get(0).get("resource-link");
+                       String uriString = results.getResult().get(0).getResourceLink();
                        URI uri = UriBuilder.fromUri(uriString).build();
                        String rawPath = uri.getRawPath();
                        result = Optional.of(rawPath.replaceAll("/aai/v\\d+", ""));
index c4bf0f0..152e9d7 100644 (file)
 
 package org.onap.so.client.graphinventory;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
-import org.onap.so.client.aai.entities.CustomQuery;
+import javax.ws.rs.core.GenericType;
+
+import org.onap.so.client.aai.entities.Results;
+import org.onap.so.client.graphinventory.entities.GraphInventoryResultWrapper;
+import org.onap.so.client.graphinventory.entities.Pathed;
+import org.onap.so.client.graphinventory.entities.ResourceAndUrl;
 import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri;
 
-public abstract class GraphInventoryQueryClient<S, I> {
+import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public abstract class GraphInventoryQueryClient<S, I, Wrapper extends GraphInventoryResultWrapper<?>, Type extends GraphInventoryObjectType> {
 
        private Optional<String> depth = Optional.empty();
        private boolean nodesOnly = false;
        private Optional<GraphInventorySubgraphType> subgraph = Optional.empty();
        private GraphInventoryClient client;
+       private GraphInventoryCommonObjectMapperProvider mapperProvider = new GraphInventoryCommonObjectMapperProvider();
        
        public GraphInventoryQueryClient(GraphInventoryClient client) {
                this.client = client;
@@ -42,6 +58,58 @@ public abstract class GraphInventoryQueryClient<S, I> {
                return client.createClient(setupQueryParams(getQueryUri().queryParam("format", format.toString()))).put(query, String.class);
        }
        
+       protected <R> List<R> querySingleType(Format format, I query, Class<R> clazz) {
+               return client.createClient(
+                               setupQueryParams(getQueryUri().queryParam("format", format.toString()))).put(
+                                               query, new GenericType<Results<Object>>(){}).getResult()
+                               .stream().map(item -> {
+                                       try {
+                                               return mapperProvider.getMapper().readValue(mapperProvider.getMapper().writeValueAsString(item), clazz);
+                                       } catch (IOException e) {
+                                               throw new IllegalArgumentException("could not map values from json", e);
+                                       }
+                               }).collect(Collectors.toList());
+       }
+       
+       public List<Pathed> queryPathed(I query) {
+               return querySingleType(Format.PATHED, query, Pathed.class);
+       }
+       
+       public List<Id> queryId(I query) {
+               return querySingleType(Format.ID, query, Id.class);
+       }
+       
+       public <R> List<R> querySingleResource(I query, Class<R> clazz) {
+               try {
+                       return getResourceAndUrl(query).stream().map(item -> item.getWrapper().asBean(clazz).get()).collect(Collectors.toList());
+               } catch (IOException e) {
+                       throw new IllegalArgumentException("could not map values from json", e);
+               }
+       }
+       
+       public List<ResourceAndUrl<Wrapper>> getResourceAndUrl(I query) throws IOException {
+               List<ResourceAndUrl<Wrapper>> result = new ArrayList<>();
+               ObjectMapper mapper = mapperProvider.getMapper();
+               Results<Map<String, Object>> resultsFromJson = mapper.readValue(query(Format.RESOURCE_AND_URL, query),
+                               new TypeReference<Results<Map<String, Object>>>() {
+               });
+               for (Map<String, Object> m : resultsFromJson.getResult()) {
+                       for(Entry<String, Object> entrySet : m.entrySet()) {
+                               if (!entrySet.getKey().equals("url")) {
+                                       String url = (String)m.get("url");
+                                       String stringJson = mapper.writeValueAsString(entrySet.getValue());
+                                       result.add(new ResourceAndUrl<Wrapper>(url, createType(entrySet.getKey()), createWrapper(stringJson)));
+                               }
+                       }
+               }
+
+               return result;
+       }
+
+       public abstract Wrapper createWrapper(String json);
+       
+       public abstract Type createType(String name);
+       
        public S depth (String depth) {
                this.depth = Optional.of(depth);
                return (S) this;
index 73dccea..6554368 100644 (file)
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import org.onap.so.client.aai.entities.QueryStep;
+import org.onap.so.client.graphinventory.GraphInventoryObjectName;
 
 import com.google.common.base.Joiner;
 
@@ -94,6 +95,14 @@ public class DSLQueryBuilder<S, E> implements QueryStep {
                return this;
        }
        
+       public DSLQueryBuilder<S, E> to(GraphInventoryObjectName name) {
+               return to(__.node(name));
+       }
+       
+       public DSLQueryBuilder<S, E> to(GraphInventoryObjectName name, DSLNodeKey... key) {
+               return to(__.node(name, key));
+       }
+       
        public String limit(int limit) {
                return compile() + " LIMIT " + limit;
        }
index 759fad7..752a743 100644 (file)
@@ -126,7 +126,7 @@ public abstract class GraphInventoryRelationships<Wrapper extends GraphInventory
        protected List<String> getRelatedLinks(Optional<GraphInventoryObjectName> type) {
                String matcher = "";
                if (type.isPresent()) {
-                       matcher = "[?(@.related-to=='" + type.get() + "')]";
+                       matcher = "[?(@.related-to=='" + type.get().typeName() + "')]";
                }
                return JsonPathUtil.getInstance().locateResultList(this.jsonBody, String.format("$.relationship%s.related-link", matcher));
        }
index c5651c0..c0b29e4 100644 (file)
@@ -86,22 +86,27 @@ public abstract class GraphInventoryResultWrapper<R extends GraphInventoryRelati
        }
        
        public Map<String, Object> asMap() {
+               
+               return asBean(new TypeReference<Map<String, Object>>(){}).orElse(new HashMap<>());
+       }
+       
+       public <T> Optional<T> asBean(Class<T> clazz) {
                if (isEmpty()) {
-                       return new HashMap<>();
+                       return Optional.empty();
                }
                try {
-                       return mapper.readValue(this.jsonBody, new TypeReference<Map<String, Object>>(){});
+                       return Optional.of(mapper.readValue(this.jsonBody, clazz));
                } catch (IOException e) {
-                       return new HashMap<>();
+                       return Optional.empty();
                }
        }
        
-       public <T> Optional<T> asBean(Class<T> clazz) {
+       public <T> Optional<T> asBean(TypeReference<T> reference) {
                if (isEmpty()) {
                        return Optional.empty();
                }
                try {
-                       return Optional.of(mapper.readValue(this.jsonBody, clazz));
+                       return Optional.of(mapper.readValue(this.jsonBody, reference));
                } catch (IOException e) {
                        return Optional.empty();
                }
diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/Id.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/Id.java
new file mode 100644 (file)
index 0000000..76492dc
--- /dev/null
@@ -0,0 +1,5 @@
+package org.onap.so.client.graphinventory.entities;
+
+public class Id extends Resource {
+
+}
diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/Pathed.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/Pathed.java
new file mode 100644 (file)
index 0000000..a53bdc0
--- /dev/null
@@ -0,0 +1,5 @@
+package org.onap.so.client.graphinventory.entities;
+
+public class Pathed extends Resource {
+
+}
diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/Resource.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/Resource.java
new file mode 100644 (file)
index 0000000..5c53f2c
--- /dev/null
@@ -0,0 +1,40 @@
+package org.onap.so.client.graphinventory.entities;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({
+       "resource-type",
+       "resource-link"
+})
+public class Resource {
+
+       @JsonProperty("resource-type")
+       private String resourceType;
+       @JsonProperty("resource-link")
+       private String resourceLink;
+
+       @JsonProperty("resource-type")
+       public String getResourceType() {
+               return resourceType;
+       }
+
+       @JsonProperty("resource-type")
+       public void setResourceType(String resourceType) {
+               this.resourceType = resourceType;
+       }
+
+       @JsonProperty("resource-link")
+       public String getResourceLink() {
+               return resourceLink;
+       }
+
+       @JsonProperty("resource-link")
+       public void setResourceLink(String resourceLink) {
+               this.resourceLink = resourceLink;
+       }
+
+}
+
diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/ResourceAndUrl.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/ResourceAndUrl.java
new file mode 100644 (file)
index 0000000..e53fc02
--- /dev/null
@@ -0,0 +1,36 @@
+package org.onap.so.client.graphinventory.entities;
+
+import org.onap.so.client.graphinventory.GraphInventoryObjectType;
+
+public class ResourceAndUrl<Wrapper extends GraphInventoryResultWrapper> {
+
+       private String url;
+       private GraphInventoryObjectType type;
+       private Wrapper wrapper;
+       
+       public ResourceAndUrl(String url, GraphInventoryObjectType type, Wrapper wrapper) {
+               this.url = url;
+               this.type = type;
+               this.wrapper = wrapper;
+       }
+       public String getUrl() {
+               return url;
+       }
+       public void setUrl(String url) {
+               this.url = url;
+       }
+       public Wrapper getWrapper() {
+               return wrapper;
+       }
+       public void setWrapper(Wrapper wrapper) {
+               this.wrapper = wrapper;
+       }
+       public GraphInventoryObjectType getType() {
+               return type;
+       }
+       
+       public void setType(GraphInventoryObjectType type) {
+               this.type = type;
+       }
+       
+}
index 84c3cad..e648ea3 100644 (file)
 
 package org.onap.so.client.aai;
 
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
-import javax.ws.rs.core.Response;
+import javax.ws.rs.core.GenericType;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.aai.domain.yang.Complex;
 import org.onap.so.client.RestClient;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.CustomQuery;
+import org.onap.so.client.aai.entities.Results;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.graphinventory.Format;
 import org.onap.so.client.graphinventory.GraphInventoryClient;
 import org.onap.so.client.graphinventory.GraphInventorySubgraphType;
+import org.onap.so.client.graphinventory.entities.Pathed;
+import org.onap.so.client.graphinventory.entities.ResourceAndUrl;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 
 @RunWith(MockitoJUnitRunner.class) 
 public class AAIQueryClientTest {
        
        @Mock
-       Response response;
-       
-       @Mock
-       RestClient restClient;
+       private RestClient restClient;
        
        @Mock
-       GraphInventoryClient client;
+       private GraphInventoryClient client;
        
        @InjectMocks
-       AAIQueryClient aaiQueryClient = new AAIQueryClient();
+       @Spy
+       private AAIQueryClient aaiQueryClient = new AAIQueryClient();
        
+       private String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/query/";
+       
+       private ObjectMapper mapper = new ObjectMapper();
        @Test
        public void testQuery() {
                List<AAIResourceUri> uris = Arrays.asList(AAIUriFactory.createResourceUri(AAIObjectType.CUSTOM_QUERY));
@@ -91,4 +109,37 @@ public class AAIQueryClientTest {
                verify(aaiUri, times(1)).queryParam("nodesOnly", "");
                verify(aaiUri, times(1)).queryParam("subgraph", subgraph.toString());
        }
+       
+       @Test
+       public void querySingleResourceTest() throws IOException {
+               doReturn(getJson("single-query-result.json")).when(aaiQueryClient).query(eq(Format.RESOURCE_AND_URL), any(CustomQuery.class));
+               List<Complex> result = aaiQueryClient.querySingleResource(new CustomQuery(Arrays.asList(AAIUriFactory.createNodesUri(AAIObjectType.COMPLEX, "test"))), Complex.class);
+               assertEquals(2, result.size());
+               assertEquals("complex-id-15100-jc689q2", result.get(1).getPhysicalLocationId());
+       }
+       
+       @Test
+       public void getResourceAndUrlTest() throws IOException {
+               doReturn(getJson("single-query-result.json")).when(aaiQueryClient).query(eq(Format.RESOURCE_AND_URL), any(CustomQuery.class));
+               List<ResourceAndUrl<AAIResultWrapper>> result = aaiQueryClient.getResourceAndUrl(new CustomQuery(Arrays.asList(AAIUriFactory.createNodesUri(AAIObjectType.COMPLEX, "test"))));
+               assertEquals(2, result.size());
+               
+               assertEquals(1, result.get(1).getWrapper().getRelationships().get().getRelatedUris(AAIObjectType.PSERVER).size());
+       }
+       
+       @Test
+       public void querySingleTypeTest() throws IOException {
+               when(client.createClient(isA(AAIUri.class))).thenReturn(restClient);
+               when(restClient.put(any(Object.class), any(GenericType.class))).thenReturn(mapper.readValue(getJson("pathed-result.json"), new TypeReference<Results<Map<String, Object>>>(){}));
+               
+               
+               List<Pathed> results = aaiQueryClient.queryPathed(new CustomQuery(Arrays.asList(AAIUriFactory.createNodesUri(AAIObjectType.COMPLEX, "test"))));
+
+               assertEquals(2, results.size());
+               assertEquals("service-instance", results.get(1).getResourceType());
+       }
+       
+       private String getJson(String filename) throws IOException {
+                return new String(Files.readAllBytes(Paths.get(AAI_JSON_FILE_LOCATION + filename)));
+       }
 }
index 73fbff6..174c76b 100644 (file)
@@ -33,9 +33,9 @@ import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
 
 import javax.ws.rs.BadRequestException;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -50,7 +50,6 @@ import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.defaultproperties.DefaultAAIPropertiesImpl;
-import org.onap.so.client.graphinventory.GraphInventoryClient;
 
 import com.github.tomakehurst.wiremock.admin.NotFoundException;
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
@@ -60,7 +59,7 @@ public class AAIResourcesClientTest {
 
 
        @Rule
-       public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8443));
+       public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort());
        
        @Rule
        public ExpectedException thrown = ExpectedException.none();
@@ -72,9 +71,11 @@ public class AAIResourcesClientTest {
        @InjectMocks
        public AAIResourcesClient aaiClient = new AAIResourcesClient();
        
+       private String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/query/";
+
        @Before
        public void beforeTest() {
-               doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
+               doReturn(new DefaultAAIPropertiesImpl(wireMockRule.port())).when(client).getRestProperties();
        }
        
        @Test
index 69d46de..a156e3c 100644 (file)
@@ -80,4 +80,13 @@ public class DSLQueryBuilderTest {
                
                assertEquals("cloud-region* !('cloud-owner', ' ', ' null ')", builder.build());
        }
+       
+       @Test
+       public void shortCutToTest() {
+               DSLQueryBuilder<DSLNode, DSLNode> builder = new DSLQueryBuilder<>(new DSLNode(AAIObjectType.PSERVER,
+                               __.key("hostname", "my-hostname")).output());
+               
+               builder.to(AAIObjectType.P_INTERFACE).to(AAIObjectType.SRIOV_PF, __.key("pf-pci-id", "my-id"));
+               assertEquals("pserver*('hostname', 'my-hostname') > p-interface > sriov-pf('pf-pci-id', 'my-id')", builder.build());
+       }
 }
index 1ce6e43..8d11f69 100644 (file)
@@ -44,7 +44,7 @@ public class RelationshipsTest {
                AAIResultWrapper wrapper = new AAIResultWrapper(content);
                Relationships relationships = wrapper.getRelationships().get();
                
-               List<AAIResourceUri> test = relationships.getRelatedAAIUris(AAIObjectType.VCE);
+               List<AAIResourceUri> test = relationships.getRelatedUris(AAIObjectType.VCE);
                
                System.out.println(test.get(0).build());
                List<AAIResourceUri> uris = Arrays.asList(
index 15c1c24..979ca39 100644 (file)
@@ -69,7 +69,7 @@ public class ServiceInstanceUriTest {
        private final static String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/resources/";
        
        @Rule
-       public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8443));
+       public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort());
        
        @Rule
        public final ExpectedException exception = ExpectedException.none();
@@ -82,7 +82,7 @@ public class ServiceInstanceUriTest {
        
        @Before
        public void beforeTest() {
-               doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
+               doReturn(new DefaultAAIPropertiesImpl(wireMockRule.port())).when(client).getRestProperties();
        }
        @Test
        public void found() throws IOException {
index 77e1dfe..65c7656 100644 (file)
@@ -49,6 +49,21 @@ public class DefaultAAIPropertiesImpl implements AAIProperties {
                }
                this.props = temp;
 
+       }
+       
+       public DefaultAAIPropertiesImpl(int port) {
+               File initialFile = new File("src/test/resources/aai.properties");
+               Map<Object, Object> temp;
+               try (InputStream targetStream = new FileInputStream(initialFile)) {
+                       Properties properties = new Properties();
+                       properties.load(targetStream);
+                       temp = properties;
+               } catch (IOException e) {
+                       temp = new HashMap<>();
+               }
+               this.props = temp;
+               this.props.put("aai.endpoint", this.props.get("aai.endpoint").toString().replaceFirst(":\\d+", ":" + port));
+
        }
        @Override
        public URL getEndpoint() throws MalformedURLException {
diff --git a/common/src/test/resources/__files/aai/query/pathed-result.json b/common/src/test/resources/__files/aai/query/pathed-result.json
new file mode 100644 (file)
index 0000000..e9a3e65
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "results": [
+    {
+      "resource-type": "service-instance",
+      "resource-link": "https://localhost:8443/aai/v9/business/customers/customer/key1/service-subscriptions/service-subscription/key2/service-instances/service-instance/key3"
+    },
+    {
+      "resource-type": "service-instance",
+      "resource-link": "https://localhost:8443/aai/v9/business/customers/customer/key1/service-subscriptions/service-subscription/key2/service-instances/service-instance/key3"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/common/src/test/resources/__files/aai/query/single-query-result.json b/common/src/test/resources/__files/aai/query/single-query-result.json
new file mode 100644 (file)
index 0000000..eb12dea
--- /dev/null
@@ -0,0 +1,80 @@
+{
+    "results": [
+        {
+            "url": "/aai/v14/cloud-infrastructure/complexes/complex/complex-id-15100-jc689q",
+            "complex": {
+                "physical-location-id": "complex-id-15100-jc689q",
+                "resource-version": "1541786379243",
+                "physical-location-type": "lvXHWJC",
+                "street1": "uAAi5qjc1",
+                "street2": "vkK6XQjc2",
+                "city": "3Ec8JSW0JC",
+                "state": "COczHmeJC",
+                "postal-code": "D4J1",
+                "country": "K0JC1",
+                "region": "JzHqJC1",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "pserver",
+                            "relationship-label": "org.onap.relationships.inventory.LocatedIn",
+                            "related-link": "/aai/v14/cloud-infrastructure/pservers/pserver/pserver-15100-jc689q",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "pserver.hostname",
+                                    "relationship-value": "pserver-15100-jc689q"
+                                }
+                            ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "pserver.pserver-name2"
+                                },
+                                {
+                                    "property-key": "pserver.fqdn"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
+        },
+        {
+            "url": "/aai/v14/cloud-infrastructure/complexes/complex/complex-id-15100-jc689q2",
+            "complex": {
+                "physical-location-id": "complex-id-15100-jc689q2",
+                "resource-version": "1541786379243",
+                "physical-location-type": "lvXHWJC",
+                "street1": "uAAi5qjc1",
+                "street2": "vkK6XQjc2",
+                "city": "3Ec8JSW0JC",
+                "state": "COczHmeJC",
+                "postal-code": "D4J1",
+                "country": "K0JC1",
+                "region": "JzHqJC1",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "pserver",
+                            "relationship-label": "org.onap.relationships.inventory.LocatedIn",
+                            "related-link": "/aai/v14/cloud-infrastructure/pservers/pserver/pserver-15100-jc689q",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "pserver.hostname",
+                                    "relationship-value": "pserver-15100-jc689q"
+                                }
+                            ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "pserver.pserver-name2"
+                                },
+                                {
+                                    "property-key": "pserver.fqdn"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file