summaryrefslogtreecommitdiffstats
path: root/mod/runtimeapi/runtime-core
diff options
context:
space:
mode:
authorDesai, Dhrumin (dd303q) <dd303q@att.com>2021-08-27 17:53:06 -0400
committerDhrumin Desai <dd303q@att.com>2021-10-07 22:22:22 -0400
commit4371989e7a50d015b6eefa074d4988033223551b (patch)
treeba7bfdedcc7b4fdf11c520be941190f7fcbc4f4a /mod/runtimeapi/runtime-core
parentf6129791bd343d7c4a19bc4c5c758d76e24f0926 (diff)
integrate helm-chart-generator to runtime api
Issue-ID: DCAEGEN2-2694 Issue-ID: DCAEGEN2-2805 Change-Id: I1b7d1bd7d2254280e0faa561e49223357c615090 Signed-off-by: Dhrumin Desai <dd303q@att.com>
Diffstat (limited to 'mod/runtimeapi/runtime-core')
-rw-r--r--mod/runtimeapi/runtime-core/pom.xml14
-rw-r--r--mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClient.java28
-rw-r--r--mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImpl.java112
-rw-r--r--mod/runtimeapi/runtime-core/src/test/data/compspecs/vesWithDb.json452
-rw-r--r--mod/runtimeapi/runtime-core/src/test/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImplTest.java67
5 files changed, 666 insertions, 7 deletions
diff --git a/mod/runtimeapi/runtime-core/pom.xml b/mod/runtimeapi/runtime-core/pom.xml
index 5514cc9..ff22a58 100644
--- a/mod/runtimeapi/runtime-core/pom.xml
+++ b/mod/runtimeapi/runtime-core/pom.xml
@@ -25,12 +25,12 @@ limitations under the License.
<parent>
<artifactId>runtimeapi</artifactId>
<groupId>org.onap.dcaegen2.platform.mod</groupId>
- <version>1.2.3</version>
+ <version>1.3.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>runtime-core</artifactId>
- <version>1.2.3</version>
+ <version>1.3.0</version>
<dependencies>
<dependency>
@@ -48,11 +48,11 @@ limitations under the License.
<artifactId>blueprint-generator-onap</artifactId>
<version>1.7.3</version>
</dependency>
- <dependency>
- <groupId>org.json</groupId>
- <artifactId>json</artifactId>
- <version>20190722</version>
- </dependency>
+ <dependency>
+ <groupId>org.onap.dcaegen2.platform</groupId>
+ <artifactId>helmchartgenerator-core</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
diff --git a/mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClient.java b/mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClient.java
new file mode 100644
index 0000000..cc5fdca
--- /dev/null
+++ b/mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClient.java
@@ -0,0 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 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.onap.dcae.runtime.core.helm;
+
+import java.io.File;
+
+public interface HelmChartGeneratorClient {
+
+ File generateHelmChart(String componentSpec);
+
+ void distribute(File helmChart);
+}
diff --git a/mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImpl.java b/mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImpl.java
new file mode 100644
index 0000000..49ca3de
--- /dev/null
+++ b/mod/runtimeapi/runtime-core/src/main/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImpl.java
@@ -0,0 +1,112 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 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.onap.dcae.runtime.core.helm;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.onap.dcaegen2.platform.helmchartgenerator.chartbuilder.ChartBuilder;
+import org.onap.dcaegen2.platform.helmchartgenerator.distribution.ChartDistributor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Files;
+
+/**
+ * Implementation class for Helm Chart Generator Client
+ */
+@Slf4j
+@Component
+@ComponentScan(basePackages = "org.onap.dcaegen2.platform.helmchartgenerator")
+public class HelmChartGeneratorClientImpl implements HelmChartGeneratorClient {
+
+ @Autowired
+ private final ChartBuilder chartBuilder;
+
+ @Autowired
+ private final ChartDistributor distributor;
+
+ @Value("${helm.base.chart.template.location}")
+ private String templateLocation;
+
+ public HelmChartGeneratorClientImpl(ChartBuilder chartBuilder, ChartDistributor distributor) {
+ this.chartBuilder = chartBuilder;
+ this.distributor = distributor;
+ }
+
+ /**
+ * Generate Helm Chart for a component spec
+ * @param componentSpec component spec as String
+ * @return packaged helm chart
+ */
+ @Override
+ public File generateHelmChart(String componentSpec){
+ try {
+ return chartBuilder.build(createTempSpecFile(componentSpec),templateLocation,
+ createTempChartOutputLocation(), "");
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ throw new RuntimeException("Error while generating the helm chart.");
+ }
+ }
+
+ private String createTempChartOutputLocation() {
+ try {
+ return Files.createTempDirectory("chart").toAbsolutePath().toString();
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ throw new RuntimeException("Error creating a temporary chart dir.");
+ }
+ }
+
+ private String createTempSpecFile(String componentSpec) throws IOException{
+ File tmpFile = File.createTempFile("spec",".json");
+ try (FileWriter writer = new FileWriter(tmpFile)) {
+ writer.write(componentSpec);
+ }
+ return tmpFile.getAbsolutePath();
+ }
+
+ /**
+ * Distributes helm chart to Chart Museum
+ * @param helmChart packaged chart location
+ */
+ @Override
+ public void distribute(File helmChart) {
+ try {
+ distributor.distribute(helmChart);
+ }catch (Exception e){
+ throw e;
+ } finally {
+ removeChartLocally(helmChart);
+ }
+ }
+
+ private void removeChartLocally(File helmChart) {
+ try {
+ FileUtils.forceDelete(helmChart);
+ } catch (IOException e) {
+ log.warn("Could not delete a temporary helm chart " + helmChart.getName());
+ }
+ }
+}
diff --git a/mod/runtimeapi/runtime-core/src/test/data/compspecs/vesWithDb.json b/mod/runtimeapi/runtime-core/src/test/data/compspecs/vesWithDb.json
new file mode 100644
index 0000000..207be6d
--- /dev/null
+++ b/mod/runtimeapi/runtime-core/src/test/data/compspecs/vesWithDb.json
@@ -0,0 +1,452 @@
+{
+ "self": {
+ "version": "1.8.0",
+ "name": "dcae-ves-collector",
+ "description": "Collector for receiving VES events through restful interface",
+ "component_type": "docker"
+ },
+ "streams": {
+ "subscribes": [],
+ "publishes": [
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-fault"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-measurement"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-syslog"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-heartbeat"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-other"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-mobileflow"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-statechange"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-thresholdCrossingAlert"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-voicequality"
+ },
+ {
+ "format": "VES_specification",
+ "version": "5.28.4",
+ "type": "message router",
+ "config_key": "ves-sipsignaling"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-pnfRegistration"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-notification"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-perf3gpp"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-3gpp-fault-supervision"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-3gpp-provisioning"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-3gpp-heartbeat"
+ },
+ {
+ "format": "VES_specification",
+ "version": "7.30.2",
+ "type": "message router",
+ "config_key": "ves-3gpp-performance-assurance"
+ }
+ ]
+ },
+ "services": {
+ "calls": [],
+ "provides": [
+ {
+ "route": "/eventListener/v1",
+ "verb": "POST",
+ "request": {
+ "format": "VES_specification",
+ "version": "4.27.2"
+ },
+ "response": {
+ "format": "ves.coll.response",
+ "version": "1.0.0"
+ }
+ },
+ {
+ "route": "/eventListener/v2",
+ "verb": "POST",
+ "request": {
+ "format": "VES_specification",
+ "version": "4.27.2"
+ },
+ "response": {
+ "format": "ves.coll.response",
+ "version": "1.0.0"
+ }
+ },
+ {
+ "route": "/eventListener/v3",
+ "verb": "POST",
+ "request": {
+ "format": "VES_specification",
+ "version": "4.27.2"
+ },
+ "response": {
+ "format": "ves.coll.response",
+ "version": "1.0.0"
+ }
+ },
+ {
+ "route": "/eventListener/v4",
+ "verb": "POST",
+ "request": {
+ "format": "VES_specification",
+ "version": "4.27.2"
+ },
+ "response": {
+ "format": "ves.coll.response",
+ "version": "1.0.0"
+ }
+ },
+ {
+ "route": "/eventListener/v5",
+ "verb": "POST",
+ "request": {
+ "format": "VES_specification",
+ "version": "5.28.4"
+ },
+ "response": {
+ "format": "ves.coll.response",
+ "version": "1.0.0"
+ }
+ },
+ {
+ "route": "/eventListener/v7",
+ "verb": "POST",
+ "request": {
+ "format": "VES_specification",
+ "version": "7.30.2"
+ },
+ "response": {
+ "format": "ves.coll.response",
+ "version": "1.0.0"
+ }
+ }
+ ]
+ },
+ "parameters": [
+ {
+ "name": "streams_publishes",
+ "value": {
+ "ves-fault": {
+ "dmaap_info": {
+ "topic_url": "http://message-router:3904/events/unauthenticated.SEC_FAULT_OUTPUT"
+ },
+ "type": "message_router"
+ }
+ },
+ "description": "standard http port collector will open for listening;",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ }
+ ,
+ {
+ "name": "collector.service.port",
+ "value": 8080,
+ "description": "standard http port collector will open for listening;",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.service.secure.port",
+ "value": 8443,
+ "description": "secure http port collector will open for listening ",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": true
+ },
+ {
+ "name": "collector.keystore.file.location",
+ "value": "/opt/app/dcae-certificate/cert.jks",
+ "description": "fs location of keystore file in vm",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.keystore.passwordfile",
+ "value": "/opt/app/dcae-certificate/jks.pass",
+ "description": "location of keystore password file in vm",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.truststore.file.location",
+ "value": "/opt/app/dcae-certificate/trust.jks",
+ "description": "fs location of truststore file in vm",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.truststore.passwordfile",
+ "value": "/opt/app/dcae-certificate/trust.pass",
+ "description": "location of truststore password file in vm",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.dmaap.streamid",
+ "value": "fault=ves-fault|syslog=ves-syslog|heartbeat=ves-heartbeat|measurementsForVfScaling=ves-measurement|mobileFlow=ves-mobileflow|other=ves-other|stateChange=ves-statechange|thresholdCrossingAlert=ves-thresholdCrossingAlert|voiceQuality=ves-voicequality|sipSignaling=ves-sipsignaling|notification=ves-notification|pnfRegistration=ves-pnfRegistration|3GPP-FaultSupervision=ves-3gpp-fault-supervision|3GPP-Heartbeat=ves-3gpp-heartbeat|3GPP-Provisioning=ves-3gpp-provisioning|3GPP-PerformanceAssurance=ves-3gpp-performance-assurance",
+ "description": "domain-to-streamid mapping used by VESCollector to distributes events based on domain. Both primary and secondary config_key are included for resilency (multiple streamid can be included commma separated). The streamids MUST match to topic config_keys. For single site without resiliency deployment - configkeys with -secondary suffix can be removed",
+ "sourced_at_deployment": true,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "auth.method",
+ "value": "noAuth",
+ "description": "Property to manage application mode, possible configurations: noAuth - default option - no security (http) , certOnly - auth by certificate (https), basicAuth - auth by basic auth username and password (https),certBasicAuth - auth by certificate and basic auth username / password (https),",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "header.authlist",
+ "value": "sample1,$2a$10$pgjaxDzSuc6XVFEeqvxQ5u90DKJnM/u7TJTcinAlFJVaavXMWf/Zi|userid1,$2a$10$61gNubgJJl9lh3nvQvY9X.x4e5ETWJJ7ao7ZhJEvmfJigov26Z6uq|userid2,$2a$10$G52y/3uhuhWAMy.bx9Se8uzWinmbJa.dlm1LW6bYPdPkkywLDPLiy",
+ "description": "List of id and base 64 encoded password.For each onboarding VNF - unique userid and password should be assigned and communicated to VNF owner. Password value should be base64 encoded in config here",
+ "policy_editable": false,
+ "sourced_at_deployment": true,
+ "designer_editable": true
+ },
+ {
+ "name": "collector.schema.checkflag",
+ "value": 1,
+ "description": "Schema check validation flag. When enabled, collector will validate input VES events against VES Schema defined on collector.schema.file ",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.schema.file",
+ "value": "{\"v1\":\"./etc/CommonEventFormat_27.2.json\",\"v2\":\"./etc/CommonEventFormat_27.2.json\",\"v3\":\"./etc/CommonEventFormat_27.2.json\",\"v4\":\"./etc/CommonEventFormat_27.2.json\",\"v5\":\"./etc/CommonEventFormat_28.4.1.json\",\"v7\":\"./etc/CommonEventFormat_30.2.1_ONAP.json\"}",
+ "description": "VES schema file name per version used for validation",
+ "designer_editable": true,
+ "sourced_at_deployment": false,
+ "policy_editable": false
+ },
+ {
+ "name": "event.transform.flag",
+ "value": 1,
+ "description": "flag to enable tranformation rules defined under eventTransform.json; this is applicable when event tranformation rules preset should be activated for transforming <VES5.4 events to 5.4",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "tomcat.maxthreads",
+ "value": "200",
+ "description": "Tomcat control for concurrent request",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.externalSchema.checkflag",
+ "value": 1,
+ "description": "Schema stndDefined validation flag. When enabled, collector will validate stndDefined fields in stndDefined domain events against mapped local schemas listed in file from property collector.externalSchema.mappingFileLocation.",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": true
+ },
+ {
+ "name": "collector.externalSchema.schemasLocation",
+ "value": "./etc/externalRepo/",
+ "description": "External schemas repository. Path to schemas storage directory.",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.externalSchema.mappingFileLocation",
+ "value": "./etc/externalRepo/schema-map.json",
+ "description": "Path to JSON file containing mapping of externally located stndDefined schemas to local schema files.",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "event.externalSchema.schemaRefPath",
+ "value": "$.event.stndDefinedFields.schemaReference",
+ "description": "An internal path from validated JSON. Defines which field is taken as public schema reference, which is later mapped.",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "event.externalSchema.stndDefinedDataPath",
+ "value": "$.event.stndDefinedFields.data",
+ "description": "An internal path from validated JSON. Defines which field of event will be validated during stndDefined validation.",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ },
+ {
+ "name": "collector.description.api.version.location",
+ "value": "etc/api_version_description.json",
+ "description": "Path to the file containing description of api versions",
+ "sourced_at_deployment": false,
+ "policy_editable": false,
+ "designer_editable": false
+ }
+ ],
+ "auxilary": {
+ "helm": {
+ "applicationEnv": {
+ "PMSH_PG_URL": "dcae-pmsh-pg-primary",
+ "PMSH_PG_USERNAME": {
+ "secretUid": "pgUserCredsSecretUid",
+ "key": "login"
+ },
+ "PMSH_PG_PASSWORD": {
+ "secretUid": "pgUserCredsSecretUid",
+ "key": "password"
+ }
+ },
+ "service": {
+ "type": "NodePort",
+ "name": "dcae-ves-collector",
+ "has_internal_only_ports": true,
+ "ports": [
+ {
+ "name": "http",
+ "port": 8443,
+ "plain_port": 8080,
+ "port_protocol": "http",
+ "nodePort": 17,
+ "useNodePortExt": true
+ },
+ {
+ "name": "metrics",
+ "port": 4444,
+ "internal_only": true
+ }
+ ]
+ }
+ },
+ "healthcheck": {
+ "type": "http",
+ "interval": "15s",
+ "timeout": "1s",
+ "endpoint": "/healthcheck",
+ "port": 8080,
+ "initialDelaySeconds": 5
+ },
+ "volumes": [{
+ "config_volume": {
+ "name": "dcae-external-repo-configmap-schema-map"
+ },
+ "container": {
+ "bind": "/opt/app/VESCollector/etc/externalRepo/"
+ }
+ }, {
+ "config_volume": {
+ "name": "dcae-external-repo-configmap-sa88-rel16"
+ },
+ "container": {
+ "bind": "/opt/app/VESCollector/etc/externalRepo/3gpp/rep/sa5/MnS/blob/SA88-Rel16/OpenAPI/"
+ }
+ }],
+ "ports": [
+ "8080:0",
+ "8443:0"
+ ],
+ "log_info": {
+ "log_directory": "/opt/app/VESCollector/logs/"
+ },
+ "tls_info":{
+ "cert_directory":"/opt/app/dcae-certificate/",
+ "use_tls": true,
+ "use_external_tls": true
+ }
+ },
+ "policy_info":{
+ "policy":[
+ {
+ "node_label":"tca_policy_00",
+ "policy_model_id":"onap.policies.monitoring.cdap.tca.hi.lo.app",
+ "policy_id":"tca_policy_id_10"
+ },
+ {
+ "node_label":"tca_policy_11",
+ "policy_id":"tca_policy_id_11",
+ "policy_model_id":"onap.policies.monitoring.cdap.tca.hi.lo.app"
+ }
+ ]
+ },
+ "artifacts": [
+ {
+ "type": "docker image",
+ "uri": "nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest"
+ }
+ ]
+} \ No newline at end of file
diff --git a/mod/runtimeapi/runtime-core/src/test/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImplTest.java b/mod/runtimeapi/runtime-core/src/test/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImplTest.java
new file mode 100644
index 0000000..da58550
--- /dev/null
+++ b/mod/runtimeapi/runtime-core/src/test/java/org/onap/dcae/runtime/core/helm/HelmChartGeneratorClientImplTest.java
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 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.onap.dcae.runtime.core.helm;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.dcaegen2.platform.helmchartgenerator.chartbuilder.ChartBuilder;
+import org.onap.dcaegen2.platform.helmchartgenerator.distribution.ChartDistributor;
+
+import java.io.File;
+import java.nio.file.Files;
+
+import static org.mockito.ArgumentMatchers.any;
+
+@RunWith(MockitoJUnitRunner.class)
+public class HelmChartGeneratorClientImplTest {
+
+ @Mock
+ private ChartBuilder chartBuilder;
+
+ @Mock
+ private ChartDistributor distributor;
+
+ private HelmChartGeneratorClientImpl client;
+
+ private File mockChartFile;
+
+ @Before
+ public void setUp() throws Exception {
+ client = new HelmChartGeneratorClientImpl(chartBuilder, distributor);
+ mockChartFile = Files.createTempFile("chart", ".tgz").toFile();
+ }
+
+ @Test
+ public void testGenerateHelmChart() throws Exception{
+ client.generateHelmChart("someSpec");
+ Mockito.verify(chartBuilder, Mockito.times(1)).build(any(), any(), any(), any());
+ }
+
+ @Test
+ public void testDistribute() throws Exception{
+ client.distribute(mockChartFile);
+ Mockito.verify(distributor, Mockito.times(1)).distribute(mockChartFile);
+ }
+
+}