From 416c7a449548a2fc8709cd60b27b3bad40872b69 Mon Sep 17 00:00:00 2001 From: "Benjamin, Max (mb388a)" Date: Tue, 5 Mar 2019 16:42:10 -0500 Subject: query clients now have more useable result methods 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) --- .../main/java/org/onap/so/client/RestClient.java | 4 ++ .../org/onap/so/client/aai/AAIDSLQueryClient.java | 14 +++- .../org/onap/so/client/aai/AAIQueryClient.java | 13 +++- .../so/client/aai/entities/uri/HttpLookupUri.java | 5 +- .../graphinventory/GraphInventoryQueryClient.java | 72 ++++++++++++++++++- .../graphinventory/entities/DSLQueryBuilder.java | 9 +++ .../entities/GraphInventoryRelationships.java | 2 +- .../entities/GraphInventoryResultWrapper.java | 15 ++-- .../onap/so/client/graphinventory/entities/Id.java | 5 ++ .../so/client/graphinventory/entities/Pathed.java | 5 ++ .../client/graphinventory/entities/Resource.java | 40 +++++++++++ .../graphinventory/entities/ResourceAndUrl.java | 36 ++++++++++ .../org/onap/so/client/aai/AAIQueryClientTest.java | 65 ++++++++++++++++-- .../onap/so/client/aai/AAIResourcesClientTest.java | 9 +-- .../onap/so/client/aai/DSLQueryBuilderTest.java | 9 +++ .../so/client/aai/entities/RelationshipsTest.java | 2 +- .../aai/entities/uri/ServiceInstanceUriTest.java | 4 +- .../DefaultAAIPropertiesImpl.java | 15 ++++ .../resources/__files/aai/query/pathed-result.json | 12 ++++ .../__files/aai/query/single-query-result.json | 80 ++++++++++++++++++++++ 20 files changed, 390 insertions(+), 26 deletions(-) create mode 100644 common/src/main/java/org/onap/so/client/graphinventory/entities/Id.java create mode 100644 common/src/main/java/org/onap/so/client/graphinventory/entities/Pathed.java create mode 100644 common/src/main/java/org/onap/so/client/graphinventory/entities/Resource.java create mode 100644 common/src/main/java/org/onap/so/client/graphinventory/entities/ResourceAndUrl.java create mode 100644 common/src/test/resources/__files/aai/query/pathed-result.json create mode 100644 common/src/test/resources/__files/aai/query/single-query-result.json diff --git a/common/src/main/java/org/onap/so/client/RestClient.java b/common/src/main/java/org/onap/so/client/RestClient.java index 76134a42f4..4284cea847 100644 --- a/common/src/main/java/org/onap/so/client/RestClient.java +++ b/common/src/main/java/org/onap/so/client/RestClient.java @@ -262,6 +262,10 @@ public abstract class RestClient { public T put(Object obj, Class resultClass) { return format(method("PUT", obj), resultClass).orElse(null); } + + public T put(Object obj, GenericType resultClass) { + return format(method("PUT", obj), resultClass).orElse(null); + } public T delete(Class resultClass) { return format(method("DELETE", null), resultClass).orElse(null); diff --git a/common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java b/common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java index 4cee4f3df7..5f2c623d57 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java @@ -20,12 +20,13 @@ 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 { +public class AAIDSLQueryClient extends GraphInventoryQueryClient { public AAIDSLQueryClient() { super(new AAIClient()); @@ -40,4 +41,15 @@ public class AAIDSLQueryClient extends GraphInventoryQueryClient { +public class AAIQueryClient extends GraphInventoryQueryClient { public AAIQueryClient() { super(new AAIClient()); @@ -44,5 +45,15 @@ public class AAIQueryClient extends GraphInventoryQueryClient result; ObjectMapper mapper = new ObjectMapper(); - Results> results = mapper.readValue(jsonString, new TypeReference>>(){}); + Results results = mapper.readValue(jsonString, new TypeReference>(){}); 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+", "")); diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryQueryClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryQueryClient.java index c4bf0f0beb..152e9d7a36 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryQueryClient.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryQueryClient.java @@ -20,17 +20,33 @@ 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 { +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +public abstract class GraphInventoryQueryClient, Type extends GraphInventoryObjectType> { private Optional depth = Optional.empty(); private boolean nodesOnly = false; private Optional 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 { return client.createClient(setupQueryParams(getQueryUri().queryParam("format", format.toString()))).put(query, String.class); } + protected List querySingleType(Format format, I query, Class clazz) { + return client.createClient( + setupQueryParams(getQueryUri().queryParam("format", format.toString()))).put( + query, new GenericType>(){}).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 queryPathed(I query) { + return querySingleType(Format.PATHED, query, Pathed.class); + } + + public List queryId(I query) { + return querySingleType(Format.ID, query, Id.class); + } + + public List querySingleResource(I query, Class 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> getResourceAndUrl(I query) throws IOException { + List> result = new ArrayList<>(); + ObjectMapper mapper = mapperProvider.getMapper(); + Results> resultsFromJson = mapper.readValue(query(Format.RESOURCE_AND_URL, query), + new TypeReference>>() { + }); + for (Map m : resultsFromJson.getResult()) { + for(Entry entrySet : m.entrySet()) { + if (!entrySet.getKey().equals("url")) { + String url = (String)m.get("url"); + String stringJson = mapper.writeValueAsString(entrySet.getValue()); + result.add(new ResourceAndUrl(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; diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java index 73dccea8e6..6554368b6d 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java @@ -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 implements QueryStep { return this; } + public DSLQueryBuilder to(GraphInventoryObjectName name) { + return to(__.node(name)); + } + + public DSLQueryBuilder to(GraphInventoryObjectName name, DSLNodeKey... key) { + return to(__.node(name, key)); + } + public String limit(int limit) { return compile() + " LIMIT " + limit; } diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java index 759fad7e54..752a743247 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java @@ -126,7 +126,7 @@ public abstract class GraphInventoryRelationships getRelatedLinks(Optional 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)); } diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java index c5651c0d26..c0b29e46c2 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java @@ -86,22 +86,27 @@ public abstract class GraphInventoryResultWrapper asMap() { + + return asBean(new TypeReference>(){}).orElse(new HashMap<>()); + } + + public Optional asBean(Class clazz) { if (isEmpty()) { - return new HashMap<>(); + return Optional.empty(); } try { - return mapper.readValue(this.jsonBody, new TypeReference>(){}); + return Optional.of(mapper.readValue(this.jsonBody, clazz)); } catch (IOException e) { - return new HashMap<>(); + return Optional.empty(); } } - public Optional asBean(Class clazz) { + public Optional asBean(TypeReference 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 index 0000000000..76492dc38b --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/Id.java @@ -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 index 0000000000..a53bdc0259 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/Pathed.java @@ -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 index 0000000000..5c53f2cbf1 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/Resource.java @@ -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 index 0000000000..e53fc02da7 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/ResourceAndUrl.java @@ -0,0 +1,36 @@ +package org.onap.so.client.graphinventory.entities; + +import org.onap.so.client.graphinventory.GraphInventoryObjectType; + +public class ResourceAndUrl { + + 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; + } + +} diff --git a/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java b/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java index 84c3cad0f9..e648ea38da 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java +++ b/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java @@ -20,47 +20,65 @@ 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 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 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> 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>>(){})); + + + List 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))); + } } diff --git a/common/src/test/java/org/onap/so/client/aai/AAIResourcesClientTest.java b/common/src/test/java/org/onap/so/client/aai/AAIResourcesClientTest.java index 73fbff6e4f..174c76b1ef 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAIResourcesClientTest.java +++ b/common/src/test/java/org/onap/so/client/aai/AAIResourcesClientTest.java @@ -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 diff --git a/common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java b/common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java index 69d46de96a..a156e3c158 100644 --- a/common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java +++ b/common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java @@ -80,4 +80,13 @@ public class DSLQueryBuilderTest { assertEquals("cloud-region* !('cloud-owner', ' ', ' null ')", builder.build()); } + + @Test + public void shortCutToTest() { + DSLQueryBuilder 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()); + } } diff --git a/common/src/test/java/org/onap/so/client/aai/entities/RelationshipsTest.java b/common/src/test/java/org/onap/so/client/aai/entities/RelationshipsTest.java index 1ce6e4377c..8d11f69308 100644 --- a/common/src/test/java/org/onap/so/client/aai/entities/RelationshipsTest.java +++ b/common/src/test/java/org/onap/so/client/aai/entities/RelationshipsTest.java @@ -44,7 +44,7 @@ public class RelationshipsTest { AAIResultWrapper wrapper = new AAIResultWrapper(content); Relationships relationships = wrapper.getRelationships().get(); - List test = relationships.getRelatedAAIUris(AAIObjectType.VCE); + List test = relationships.getRelatedUris(AAIObjectType.VCE); System.out.println(test.get(0).build()); List uris = Arrays.asList( diff --git a/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java b/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java index 15c1c24ae2..979ca39489 100644 --- a/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java +++ b/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java @@ -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 { diff --git a/common/src/test/java/org/onap/so/client/defaultproperties/DefaultAAIPropertiesImpl.java b/common/src/test/java/org/onap/so/client/defaultproperties/DefaultAAIPropertiesImpl.java index 77e1dfee7d..65c76561dc 100644 --- a/common/src/test/java/org/onap/so/client/defaultproperties/DefaultAAIPropertiesImpl.java +++ b/common/src/test/java/org/onap/so/client/defaultproperties/DefaultAAIPropertiesImpl.java @@ -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 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 index 0000000000..e9a3e65c73 --- /dev/null +++ b/common/src/test/resources/__files/aai/query/pathed-result.json @@ -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 index 0000000000..eb12deae80 --- /dev/null +++ b/common/src/test/resources/__files/aai/query/single-query-result.json @@ -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 -- cgit 1.2.3-korg