diff options
Diffstat (limited to 'common/src')
8 files changed, 390 insertions, 150 deletions
diff --git a/common/src/main/java/org/openecomp/mso/client/aai/AAIResourcesClient.java b/common/src/main/java/org/openecomp/mso/client/aai/AAIResourcesClient.java index 32c61f7fd7..c55e5e9eee 100644 --- a/common/src/main/java/org/openecomp/mso/client/aai/AAIResourcesClient.java +++ b/common/src/main/java/org/openecomp/mso/client/aai/AAIResourcesClient.java @@ -28,6 +28,7 @@ import javax.ws.rs.NotFoundException; import javax.ws.rs.client.ResponseProcessingException; import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.Response; import org.onap.aai.domain.yang.Relationship; import org.openecomp.mso.client.aai.entities.AAIResultWrapper; import org.openecomp.mso.client.aai.entities.uri.AAIResourceUri; @@ -153,7 +154,7 @@ public class AAIResourcesClient extends AAIClient { aaiRC.patch(obj); return; } - + /** * Retrieves an object from A&AI and unmarshalls it into the Class specified * @param clazz @@ -163,6 +164,15 @@ public class AAIResourcesClient extends AAIClient { public <T> T get(Class<T> clazz, AAIResourceUri uri) { return this.createClient(uri).get(clazz); } + + /** + * Retrieves an object from A&AI and returns complete response + * @param uri + * @return + */ + public Response getFullResponse(AAIResourceUri uri) { + return this.createClient(uri).get(); + } /** * Retrieves an object from A&AI and automatically unmarshalls it into a Map or List diff --git a/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientI.java b/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientI.java index 801c0f91d4..6819ba1edf 100644 --- a/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientI.java +++ b/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientI.java @@ -23,7 +23,9 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.List; +import java.util.Optional; import org.onap.aai.domain.yang.GenericVnf; +import org.onap.aai.domain.yang.Pnf; import org.onap.aai.domain.yang.Pserver; import org.onap.aai.domain.yang.Pservers; @@ -39,6 +41,10 @@ public interface AAIRestClientI { void updateMaintenceFlag(String vnfId,boolean inMaint, String transactionLoggingUuid) throws Exception; void updateMaintenceFlagVnfId(String vnfId, boolean inMaint, String transactionLoggingUuid) throws Exception; - + GenericVnf getVnfByName(String vnfId, String transactionLoggingUuid) throws Exception; + + Optional<Pnf> getPnfByName(String pnfId, String transactionLoggingUuid) throws Exception; + + void createPnf(String pnfId, String transactionLoggingUuid, Pnf pnf) throws IOException; } diff --git a/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientImpl.java b/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientImpl.java index e27075d9dd..54aab5c296 100644 --- a/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientImpl.java +++ b/common/src/main/java/org/openecomp/mso/client/aai/AAIRestClientImpl.java @@ -20,14 +20,20 @@ package org.openecomp.mso.client.aai; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; - +import javax.ws.rs.core.Response; import org.onap.aai.domain.yang.GenericVnf; import org.onap.aai.domain.yang.GenericVnfs; +import org.onap.aai.domain.yang.Pnf; import org.onap.aai.domain.yang.Pserver; import org.onap.aai.domain.yang.Pservers; import org.openecomp.mso.client.aai.entities.CustomQuery; @@ -36,130 +42,154 @@ import org.openecomp.mso.client.aai.entities.uri.AAIResourceUri; import org.openecomp.mso.client.aai.entities.uri.AAIUriFactory; import org.springframework.stereotype.Service; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - @Service public class AAIRestClientImpl implements AAIRestClientI { - - private static final EELFLogger logger = EELFManager.getInstance().getMetricsLogger(); - private static final AAIVersion ENDPOINT_VERSION = AAIVersion.V10; - private static final String ENDPOINT_GET_ALL = ENDPOINT_VERSION + "/cloud-infrastructure/pservers"; - private static final String ENDPOINT_GET_ALL_VNFS = ENDPOINT_VERSION + "/network/generic-vnfs"; - private static final String ENDPOINT_CUSTOM_QUERY = ENDPOINT_VERSION + "/query"; - private static final String PSERVER_VNF_QUERY = "pservers-fromVnf"; - private static final String GENERIC_VNF_PATH = ENDPOINT_VERSION + "/network/generic-vnfs/generic-vnf"; - private static final String SERVICE_TOPOLOGY_BY_SERVICE_INSTANCE_ID = "store(‘x’).union(__.in(‘subscribesTo’).has(‘aai-node-type’,’customer’).store(‘x’),__.out(‘uses’).has(‘aai-node-type’,’allotted-resource’).store(‘x’),__.in(‘hasInstance’).has(‘aai-node-type’,’generic-vnf’).store(‘x’).union(" - + ".out(‘has’).has(‘aai-node-type’,’vf-module’).store(‘x’),out(‘uses’).has(‘aai-node-type’,’volume-group’).store(‘x’)," - + ".out(‘hasLInterface’).has(‘aai-node-type’,’l-interface’).union(" - + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv4-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)," - + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv6-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)" - + ")," + ".out(‘runsOnVserver’).has(‘aai-node-type’,’vserver’).store(‘x’).union(" - + ".in(‘owns’).has(‘aai-node-type’,’tenant’).store(‘x’).in(‘has’).has(‘aai-node-type’,’cloud-region’).store(‘x’)," - + ".out(‘runsOnPserver’).has(‘aai-node-type’,’pserver’).store(‘x’)," - + ".out(‘hasLInterface’).has(‘aai-node-type’,’l-interface’).union(" - + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv4-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)," - + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv6-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)" - + ")" + ")" + ")" + ").cap(‘x’).unfold().dedup()"; - - public AAIRestClientImpl() { - - - } - - public AAIRestClientImpl(final String host) { - - - } - - @Override - public Pservers getPhysicalServers(String hostName, String uuid) { - UUID requestId; - try { - requestId = UUID.fromString(uuid); - } catch (IllegalArgumentException e) { - logger.warn("could not parse uuid: " + uuid + " creating valid uuid automatically"); - requestId = UUID.randomUUID(); - } - return new AAIResourcesClient(ENDPOINT_VERSION, requestId).get(Pservers.class, AAIUriFactory.createResourceUri(AAIObjectPlurals.PSERVER)); - } - - @Override - public List<Pserver> getPhysicalServerByVnfId(String vnfId, String transactionLoggingUuid) - throws JsonParseException, JsonMappingException, IOException { - UUID requestId; - try { - requestId = UUID.fromString(transactionLoggingUuid); - } catch (IllegalArgumentException e) { - logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); - requestId = UUID.randomUUID(); - } - List<AAIResourceUri> startNodes = new ArrayList<>(); - startNodes.add(AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId)); - String jsonInput = new AAIQueryClient(ENDPOINT_VERSION, requestId).query(Format.RESOURCE, new CustomQuery(startNodes,PSERVER_VNF_QUERY)); - - return this.getListOfPservers(jsonInput); - - } - - protected List<Pserver> getListOfPservers(String jsonInput) throws JsonParseException, JsonMappingException, IOException { - ObjectMapper mapper = new AAICommonObjectMapperProvider().getContext(Object.class); - Results<Map<String, Pserver>> resultsFromJson = mapper.readValue(jsonInput, - new TypeReference<Results<Map<String, Pserver>>>() { - }); - List<Pserver> results = new ArrayList<>(); - for (Map<String, Pserver> m : resultsFromJson.getResult()) { - results.add(m.get("pserver")); - } - return results; - } - @Override - public void updateMaintenceFlag(String vnfName, boolean inMaint, String transactionLoggingUuid) throws JsonParseException, JsonMappingException, IOException { - UUID requestId; - try { - requestId = UUID.fromString(transactionLoggingUuid); - } catch (IllegalArgumentException e) { - logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); - requestId = UUID.randomUUID(); - } - GenericVnfs genericVnfs = new AAIResourcesClient(ENDPOINT_VERSION, requestId).get(GenericVnfs.class, AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF).queryParam("vnf-name", vnfName)); - if(genericVnfs.getGenericVnf().size() > 1) - throw new IndexOutOfBoundsException("Multiple Generic Vnfs Returned"); - - GenericVnf genericVnf = genericVnfs.getGenericVnf().get(0); - updateMaintenceFlagVnfId(genericVnf.getVnfId(), inMaint, transactionLoggingUuid); - } - - @Override - public void updateMaintenceFlagVnfId(String vnfId, boolean inMaint, String transactionLoggingUuid) throws JsonParseException, JsonMappingException, IOException { - UUID requestId; - try { - requestId = UUID.fromString(transactionLoggingUuid); - } catch (IllegalArgumentException e) { - logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); - requestId = UUID.randomUUID(); - } - GenericVnf genericVnf = new GenericVnf(); - genericVnf.setInMaint(inMaint); - new AAIResourcesClient(ENDPOINT_VERSION, requestId).update(AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId), genericVnf); - - } - - @Override - public GenericVnf getVnfByName(String vnfId, String transactionLoggingUuid) throws JsonParseException, JsonMappingException, IOException { - UUID requestId; - try { - requestId = UUID.fromString(transactionLoggingUuid); - } catch (IllegalArgumentException e) { - logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); - requestId = UUID.randomUUID(); - } - return new AAIResourcesClient(ENDPOINT_VERSION, requestId).get(GenericVnf.class, AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId)); - } + private static final EELFLogger logger = EELFManager.getInstance().getMetricsLogger(); + private static final AAIVersion ENDPOINT_VERSION = AAIVersion.V10; + private static final String ENDPOINT_GET_ALL = ENDPOINT_VERSION + "/cloud-infrastructure/pservers"; + private static final String ENDPOINT_GET_ALL_VNFS = ENDPOINT_VERSION + "/network/generic-vnfs"; + private static final String ENDPOINT_CUSTOM_QUERY = ENDPOINT_VERSION + "/query"; + private static final String PSERVER_VNF_QUERY = "pservers-fromVnf"; + private static final String GENERIC_VNF_PATH = ENDPOINT_VERSION + "/network/generic-vnfs/generic-vnf"; + private static final String SERVICE_TOPOLOGY_BY_SERVICE_INSTANCE_ID = + "store(‘x’).union(__.in(‘subscribesTo’).has(‘aai-node-type’,’customer’).store(‘x’),__.out(‘uses’).has(‘aai-node-type’,’allotted-resource’).store(‘x’),__.in(‘hasInstance’).has(‘aai-node-type’,’generic-vnf’).store(‘x’).union(" + + ".out(‘has’).has(‘aai-node-type’,’vf-module’).store(‘x’),out(‘uses’).has(‘aai-node-type’,’volume-group’).store(‘x’)," + + ".out(‘hasLInterface’).has(‘aai-node-type’,’l-interface’).union(" + + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv4-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)," + + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv6-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)" + + ")," + ".out(‘runsOnVserver’).has(‘aai-node-type’,’vserver’).store(‘x’).union(" + + ".in(‘owns’).has(‘aai-node-type’,’tenant’).store(‘x’).in(‘has’).has(‘aai-node-type’,’cloud-region’).store(‘x’)," + + ".out(‘runsOnPserver’).has(‘aai-node-type’,’pserver’).store(‘x’)," + + ".out(‘hasLInterface’).has(‘aai-node-type’,’l-interface’).union(" + + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv4-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)," + + ".out(‘hasIpAddress’).has(‘aai-node-type’,’l3-interface-ipv6-address’).store(‘x’).out(‘isMemberOf’).has(‘aai-node-type’,’l3-network’).store(‘x’)" + + ")" + ")" + ")" + ").cap(‘x’).unfold().dedup()"; + + public AAIRestClientImpl() { + } + + @Override + public Pservers getPhysicalServers(String hostName, String uuid) { + UUID requestId; + try { + requestId = UUID.fromString(uuid); + } catch (IllegalArgumentException e) { + logger.warn("could not parse uuid: " + uuid + " creating valid uuid automatically"); + requestId = UUID.randomUUID(); + } + return new AAIResourcesClient(ENDPOINT_VERSION, requestId) + .get(Pservers.class, AAIUriFactory.createResourceUri(AAIObjectPlurals.PSERVER)); + } + + @Override + public List<Pserver> getPhysicalServerByVnfId(String vnfId, String transactionLoggingUuid) throws IOException { + UUID requestId; + try { + requestId = UUID.fromString(transactionLoggingUuid); + } catch (IllegalArgumentException e) { + logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); + requestId = UUID.randomUUID(); + } + List<AAIResourceUri> startNodes = new ArrayList<>(); + startNodes.add(AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId)); + String jsonInput = new AAIQueryClient(ENDPOINT_VERSION, requestId) + .query(Format.RESOURCE, new CustomQuery(startNodes, PSERVER_VNF_QUERY)); + + return this.getListOfPservers(jsonInput); + + } + + protected List<Pserver> getListOfPservers(String jsonInput) throws IOException { + ObjectMapper mapper = new AAICommonObjectMapperProvider().getContext(Object.class); + Results<Map<String, Pserver>> resultsFromJson = mapper.readValue(jsonInput, + new TypeReference<Results<Map<String, Pserver>>>() { + }); + List<Pserver> results = new ArrayList<>(); + for (Map<String, Pserver> m : resultsFromJson.getResult()) { + results.add(m.get("pserver")); + } + return results; + } + + @Override + public void updateMaintenceFlag(String vnfName, boolean inMaint, String transactionLoggingUuid) throws IOException { + UUID requestId; + try { + requestId = UUID.fromString(transactionLoggingUuid); + } catch (IllegalArgumentException e) { + logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); + requestId = UUID.randomUUID(); + } + GenericVnfs genericVnfs = new AAIResourcesClient(ENDPOINT_VERSION, requestId).get(GenericVnfs.class, + AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF).queryParam("vnf-name", vnfName)); + if (genericVnfs.getGenericVnf().size() > 1) { + throw new IndexOutOfBoundsException("Multiple Generic Vnfs Returned"); + } + + GenericVnf genericVnf = genericVnfs.getGenericVnf().get(0); + updateMaintenceFlagVnfId(genericVnf.getVnfId(), inMaint, transactionLoggingUuid); + } + + @Override + public void updateMaintenceFlagVnfId(String vnfId, boolean inMaint, String transactionLoggingUuid) + throws IOException { + UUID requestId; + try { + requestId = UUID.fromString(transactionLoggingUuid); + } catch (IllegalArgumentException e) { + logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); + requestId = UUID.randomUUID(); + } + GenericVnf genericVnf = new GenericVnf(); + genericVnf.setInMaint(inMaint); + new AAIResourcesClient(ENDPOINT_VERSION, requestId) + .update(AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId), genericVnf); + + } + + @Override + public GenericVnf getVnfByName(String vnfId, String transactionLoggingUuid) throws IOException { + UUID requestId; + try { + requestId = UUID.fromString(transactionLoggingUuid); + } catch (IllegalArgumentException e) { + logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); + requestId = UUID.randomUUID(); + } + return new AAIResourcesClient(ENDPOINT_VERSION, requestId) + .get(GenericVnf.class, AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId)); + } + + @Override + public Optional<Pnf> getPnfByName(String pnfId, String transactionLoggingUuid) throws IOException { + UUID requestId; + try { + requestId = UUID.fromString(transactionLoggingUuid); + } catch (IllegalArgumentException e) { + logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); + requestId = UUID.randomUUID(); + } + Response response = new AAIResourcesClient(ENDPOINT_VERSION, requestId) + .getFullResponse(AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnfId)); + if (response.getStatus() != 200) { + return Optional.empty(); + } else { + return Optional.of(response.readEntity(Pnf.class)); + } + } + + @Override + public void createPnf(String pnfId, String transactionLoggingUuid, Pnf pnf) throws IOException { + UUID requestId; + try { + requestId = UUID.fromString(transactionLoggingUuid); + } catch (IllegalArgumentException e) { + logger.warn("could not parse uuid: " + transactionLoggingUuid + " creating valid uuid automatically"); + requestId = UUID.randomUUID(); + } + new AAIResourcesClient(ENDPOINT_VERSION, requestId) + .createIfNotExists(AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnfId), Optional.of(pnf)); + } } diff --git a/common/src/main/java/org/openecomp/mso/client/dmaap/DmaapConsumer.java b/common/src/main/java/org/openecomp/mso/client/dmaap/DmaapConsumer.java index 033951612d..6a01fb61ba 100644 --- a/common/src/main/java/org/openecomp/mso/client/dmaap/DmaapConsumer.java +++ b/common/src/main/java/org/openecomp/mso/client/dmaap/DmaapConsumer.java @@ -20,29 +20,25 @@ package org.openecomp.mso.client.dmaap; -import java.io.FileNotFoundException; +import com.google.common.base.Stopwatch; import java.io.IOException; import java.util.concurrent.TimeUnit; - import org.openecomp.mso.client.dmaap.exceptions.DMaaPConsumerFailure; import org.openecomp.mso.client.dmaap.exceptions.ExceededMaximumPollingTime; import org.openecomp.mso.client.dmaap.rest.RestConsumer; -import com.google.common.base.Stopwatch; - public abstract class DmaapConsumer extends DmaapClient { - public DmaapConsumer() throws FileNotFoundException, IOException { + public DmaapConsumer() throws IOException { super("dmaap/default-consumer.properties"); } - - public Consumer getConsumer() throws FileNotFoundException, IOException { + + public Consumer getConsumer() { return new RestConsumer(this.properties); } + public boolean consume() throws Exception { - - Consumer mrConsumer = this.getConsumer(); - int iterations = 0; + Consumer mrConsumer = this.getConsumer(); boolean accepted = false; Stopwatch stopwatch = Stopwatch.createUnstarted(); try { @@ -59,32 +55,28 @@ public abstract class DmaapConsumer extends DmaapClient { if (!accepted && this.isAccepted(message)) { auditLogger.info("accepted message found for " + this.getRequestId() + " on " + this.getTopic()); accepted = true; - } + } if (accepted) { + auditLogger.info("received dmaap message: " + message); if (this.isFailure(message)) { this.stopProcessingMessages(); - auditLogger.info("received dmaap message: " + message); final String errorMsg = "failure received from dmaap topic " + this.getTopic(); auditLogger.error(errorMsg); throw new DMaaPConsumerFailure(errorMsg); } else { - auditLogger.info("received dmaap message: " + message); this.processMessage(message); } } } - iterations++; } return true; - } catch (Exception e ) { - throw e; } finally { if (stopwatch.isRunning()) { stopwatch.stop(); } } } - + /** * Should this consumer continue to consume messages from the topic? * @return @@ -92,7 +84,7 @@ public abstract class DmaapConsumer extends DmaapClient { public abstract boolean continuePolling(); /** * Process a message from a DMaaP topic - * + * * @param message * @throws Exception */ @@ -100,14 +92,14 @@ public abstract class DmaapConsumer extends DmaapClient { /** * Has the request been accepted by the receiving system? * Should the consumer move to processing messages? - * + * * @param message * @return */ public abstract boolean isAccepted(String message); /** * has the request failed? - * + * * @param message * @return */ @@ -121,11 +113,14 @@ public abstract class DmaapConsumer extends DmaapClient { * Logic that defines when the consumer should stop processing messages */ public abstract void stopProcessingMessages(); - + /** * time in milliseconds */ public int getMaximumElapsedTime() { return 180000; } + + + } diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/PnfReadyEventConsumer.java b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/PnfReadyEventConsumer.java new file mode 100644 index 0000000000..08e35f62f8 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/PnfReadyEventConsumer.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.dmaap; + +import java.io.IOException; +import java.util.Optional; +import javax.ws.rs.NotSupportedException; +import org.openecomp.mso.client.dmaap.DmaapConsumer; +import org.openecomp.mso.jsonpath.JsonPathUtil; + +public class PnfReadyEventConsumer extends DmaapConsumer { + + private static final String JSON_PATH_CORRELATION_ID = "$.pnfRegistrationFields.correlationId"; + + private boolean continuePolling = true; + private String correlationId; + + public PnfReadyEventConsumer(String correlationId) throws IOException { + this.correlationId = correlationId; + } + + @Override + public boolean continuePolling() { + return continuePolling; + } + + @Override + public void processMessage(String message) { + } + + @Override + public boolean isAccepted(String message) { + Optional<String> correlationIdOpt = JsonPathUtil.getInstance().locateResult(message, JSON_PATH_CORRELATION_ID); + if (correlationIdOpt.isPresent()) { + continuePolling = false; + return correlationIdOpt.get().equals(correlationId); + } + return false; + } + + @Override + public boolean isFailure(String message) { + throw new NotSupportedException(); + } + + @Override + public void stopProcessingMessages() { + continuePolling = false; + } + + @Override + public String getRequestId() { + throw new NotSupportedException(); + } + + @Override + public String getUserName() { + throw new NotSupportedException(); + } + + @Override + public String getPassword() { + throw new NotSupportedException(); + } + + @Override + public String getTopic() { + throw new NotSupportedException(); + } + + @Override + public Optional<String> getHost() { + throw new NotSupportedException(); + } +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java index 59adeb2026..ca5888caca 100644 --- a/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java +++ b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java @@ -20,10 +20,8 @@ package org.openecomp.mso.client.sdno.dmaap; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.Optional; - import org.openecomp.mso.client.dmaap.DmaapConsumer; import org.openecomp.mso.client.exceptions.SDNOException; import org.openecomp.mso.jsonpath.JsonPathUtil; @@ -34,11 +32,11 @@ public class SDNOHealthCheckDmaapConsumer extends DmaapConsumer { private boolean continuePolling = true; private final static String healthDiagnosticPath = "body.output.*"; - public SDNOHealthCheckDmaapConsumer() throws FileNotFoundException, IOException { + public SDNOHealthCheckDmaapConsumer() throws IOException { this("none"); } - public SDNOHealthCheckDmaapConsumer(String uuid) throws FileNotFoundException, IOException { + public SDNOHealthCheckDmaapConsumer(String uuid) throws IOException { super(); this.uuid = uuid; } diff --git a/common/src/main/java/org/openecomp/mso/openpojo/rules/EqualsAndHashCodeTester.java b/common/src/main/java/org/openecomp/mso/openpojo/rules/EqualsAndHashCodeTester.java index f4192e6cc8..9540409e16 100644 --- a/common/src/main/java/org/openecomp/mso/openpojo/rules/EqualsAndHashCodeTester.java +++ b/common/src/main/java/org/openecomp/mso/openpojo/rules/EqualsAndHashCodeTester.java @@ -23,6 +23,7 @@ package org.openecomp.mso.openpojo.rules; import static org.hamcrest.CoreMatchers.anyOf; import static org.hamcrest.CoreMatchers.anything; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -44,6 +45,7 @@ public class EqualsAndHashCodeTester implements Tester { private final Matcher m; + private boolean onlyDeclaredMethods = false; public EqualsAndHashCodeTester() { m = anything(); } @@ -51,12 +53,33 @@ public class EqualsAndHashCodeTester implements Tester { public EqualsAndHashCodeTester(Matcher m) { this.m = m; } + + public EqualsAndHashCodeTester onlyDeclaredMethods() { + this.onlyDeclaredMethods = true; + return this; + } @Override public void run(PojoClass pojoClass) { Class<?> clazz = pojoClass.getClazz(); if (anyOf(m).matches(clazz)) { final Object classInstanceOne = ValidationHelper.getBasicInstance(pojoClass); final Object classInstanceTwo = ValidationHelper.getBasicInstance(pojoClass); + if (onlyDeclaredMethods) { + Method[] methods = classInstanceOne.getClass().getDeclaredMethods(); + boolean hasEquals = false; + boolean hasHashcode = false; + for (Method method : methods) { + if (method.getName().equals("equals")) { + hasEquals = true; + } else if (method.getName().equals("hashCode")) { + hasHashcode = true; + } + } + + if (!(hasEquals && hasHashcode)) { + return; + } + } Set<PojoField> identityFields = hasIdOrBusinessKey(pojoClass); List<PojoField> otherFields = new ArrayList<>(pojoClass.getPojoFields()); otherFields.removeAll(identityFields); diff --git a/common/src/test/java/org/openecomp/mso/client/dmaap/PnfReadyEventConsumerTest.java b/common/src/test/java/org/openecomp/mso/client/dmaap/PnfReadyEventConsumerTest.java new file mode 100644 index 0000000000..1561f75140 --- /dev/null +++ b/common/src/test/java/org/openecomp/mso/client/dmaap/PnfReadyEventConsumerTest.java @@ -0,0 +1,85 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.dmaap; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Optional; +import org.junit.Test; +import org.openecomp.mso.client.sdno.dmaap.PnfReadyEventConsumer; + +public class PnfReadyEventConsumerTest { + + private static final String CORRELATION_ID = "correlation_id_test"; + + private static final String JSON_WITH_CORRELATION_ID = " {\"pnfRegistrationFields\": {\n" + + " \"correlationId\": \"correlation_id_test\"\n" + + " }}"; + + @Test + public void eventIsFoundForGivenCorrelationId2() throws Exception { + PnfReadyEventConsumerForTesting testedObjectSpy = spy(new PnfReadyEventConsumerForTesting(CORRELATION_ID)); + Consumer consumerMock = mock(Consumer.class); + when(testedObjectSpy.getConsumer()).thenReturn(consumerMock); + when(consumerMock.fetch()).thenReturn(Arrays.asList(JSON_WITH_CORRELATION_ID)); + testedObjectSpy.consume(); + assertThat(testedObjectSpy.continuePolling()).isFalse(); + } + + // TODO this is temporary class, when methods are defined, it will be deleted + private class PnfReadyEventConsumerForTesting extends PnfReadyEventConsumer { + + public PnfReadyEventConsumerForTesting(String correlationId) throws IOException { + super(correlationId); + } + + @Override + public String getUserName(){ + return "userNameTest"; + } + @Override + public String getPassword(){ + return "passTest"; + } + @Override + public String getTopic(){ + return "topicTest"; + } + @Override + public Optional<String> getHost(){ + return Optional.of("http://localhost"); + } + @Override + public boolean isFailure(String message) { + return false; + } + @Override + public String getRequestId() { + return "requestTest"; + } + } + +} |