summaryrefslogtreecommitdiffstats
path: root/policy-regression-tests/policy-clamp-regression/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'policy-regression-tests/policy-clamp-regression/src/test/java')
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java37
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java354
2 files changed, 391 insertions, 0 deletions
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java
new file mode 100644
index 00000000..90ec0ce5
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Nordix Foundation. 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.regression;
+
+import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
+
+import org.junit.platform.suite.api.ConfigurationParameter;
+import org.junit.platform.suite.api.IncludeEngines;
+import org.junit.platform.suite.api.SelectClasspathResource;
+import org.junit.platform.suite.api.Suite;
+
+@Suite
+@IncludeEngines("cucumber")
+@SelectClasspathResource("features")
+@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty")
+public class AcmRegressionTests {
+
+
+}
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java
new file mode 100644
index 00000000..b8454592
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java
@@ -0,0 +1,354 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Nordix Foundation. 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.regression;
+
+import static io.restassured.config.EncoderConfig.encoderConfig;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import io.cucumber.java.en.Then;
+import io.cucumber.java.en.When;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import io.restassured.path.json.JsonPath;
+import io.restassured.response.Response;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.concurrent.TimeUnit;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+
+public class StepDefinitions {
+ private static final String acmUrl = "http://localhost:30007/";
+ private static final String username = "runtimeUser";
+ private static final String password = "zb!XztG34";
+ private static String compositionId;
+ private static String instanceId;
+ private static String targetCompositionId;
+
+ private Response response;
+
+ /**
+ * Verify ACM healthcheck.
+ */
+ @When("the acm health check endpoint is invoked {string}")
+ public void isAcmEndpointRunning(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint);
+ }
+
+ /**
+ * Verify commissioning.
+ */
+ @When("the ACM commissioning endpoint {string} is invoked with {string} {string}")
+ public void commissioningIsAccepted(String endpoint, String filePath, String isMigration) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent)
+ .post(endpoint);
+ var jsonPath = new JsonPath(response.getBody().asString());
+ if (Boolean.parseBoolean(isMigration)) {
+ targetCompositionId = jsonPath.getString("compositionId");
+ } else {
+ compositionId = jsonPath.getString("compositionId");
+ }
+ }
+
+ /**
+ * Register participants.
+ */
+ @When("the register participants endpoint is invoked {string}")
+ public void registerParticipants(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .put(endpoint);
+ }
+
+ /**
+ * Verify priming.
+ */
+ @When("the ACM participants are primed {string} {string}")
+ public void primeTheParticipants(String endpoint, String isMigration) throws JSONException {
+ var jsonBody = new JSONObject().put("primeOrder", "PRIME");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}",
+ Boolean.parseBoolean(isMigration) ? targetCompositionId : compositionId));
+ }
+
+ /**
+ * Fetch composition by Id.
+ */
+ @When("the ACM composition is fetched {string}")
+ public void fetchCompositionById(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Wait and retry requests until the keyword is present.
+ */
+ @Then("Wait and retry until the response contains the keyword {string} {string} {string}")
+ public void waitUntilKeyword(String keyword, String endpoint, String isMigration) throws InterruptedException {
+ var startTime = System.currentTimeMillis();
+ var maxWaitTime = TimeUnit.MINUTES.toMillis(2); // 2 minutes in milliseconds
+ var conditionMet = false;
+ while (!conditionMet && System.currentTimeMillis() - startTime < maxWaitTime) {
+ var jsonPath = new JsonPath(response.getBody().asString());
+ switch (keyword) {
+ case "PRIMED", "COMMISSIONED" -> {
+ conditionMet = keyword.equals(jsonPath.getString("state"));
+ if (!conditionMet) {
+ Thread.sleep(10000); // Wait for 10 second before retrying
+ fetchCompositionById(endpoint);
+ }
+ }
+ case "DEPLOYED", "UNDEPLOYED" -> {
+ conditionMet = keyword.equals(jsonPath.getString("deployState"));
+ if (!conditionMet) {
+ Thread.sleep(10000); // Wait for 10 second before retrying
+ fetchAcInstanceById(endpoint,
+ Boolean.parseBoolean(isMigration) ? targetCompositionId : compositionId);
+ }
+ }
+ default -> {
+ break;
+ }
+ }
+ }
+ assertTrue(conditionMet);
+ }
+
+
+ /**
+ * Verify AC instantiation.
+ */
+ @When("the ACM instance is created {string} with {string}")
+ public void instantiate(String endpoint, String filePath) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent.replace("COMPOSITIONIDPLACEHOLDER", compositionId))
+ .post(endpoint.replace("{compositionId}", compositionId));
+ var jsonPath = new JsonPath(response.getBody().asString());
+ instanceId = jsonPath.getString("instanceId");
+ }
+
+ /**
+ * Verify update property.
+ */
+ @When("the AC instance property is updated {string} {string}")
+ public void updateInstanceProperty(String endpoint, String filePath) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent.replace("COMPOSITIONIDPLACEHOLDER", compositionId)
+ .replace("INSTANCEIDPLACEHOLDER", instanceId))
+ .post(endpoint.replace("{compositionId}", compositionId));
+ var jsonPath = new JsonPath(response.getBody().asString());
+ instanceId = jsonPath.getString("instanceId");
+ }
+
+ /**
+ * Verify AC deployment.
+ */
+ @When("the AC instance is deployed {string}")
+ public void deployAcInstance(String endpoint) throws JSONException {
+ var jsonBody = new JSONObject().put("deployOrder", "DEPLOY");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}", compositionId)
+ .replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Fetch Ac instance by id.
+ */
+ @When("the AC instance is fetched {string} {string}")
+ public void fetchAcInstanceById(String endpoint, String isMigration) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint.replace("{compositionId}",
+ Boolean.parseBoolean(isMigration) ? targetCompositionId : compositionId)
+ .replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Verify Ac undeployment.
+ */
+ @When("the AC instance is undeployed {string}")
+ public void unDeployAcInstance(String endpoint) throws JSONException {
+ var jsonBody = new JSONObject().put("deployOrder", "UNDEPLOY");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}", compositionId)
+ .replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Verify Ac uninstantiation.
+ */
+ @When("the ACM instance is uninstantiated {string}")
+ public void unInstantiate(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .delete(endpoint.replace("{compositionId}", compositionId).replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Fetch all Ac instances for the given composition id.
+ */
+ @When("all the AC instances are fetched {string}")
+ public void fetchAllAcInstances(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Wait and retry request until the instance list is empty in the response.
+ */
+ @Then("Wait and retry until the ac instance list is empty {string}")
+ public void waitUntilTheCondition(String endpoint) throws InterruptedException {
+ var startTime = System.currentTimeMillis();
+ var maxWaitTime = TimeUnit.MINUTES.toMillis(2); // 2 minutes in milliseconds
+ var conditionMet = false;
+ while (!conditionMet && System.currentTimeMillis() - startTime < maxWaitTime) {
+ var size = response.getBody().jsonPath().getList("automationCompositionList").size();
+ conditionMet = Integer.valueOf(0).equals(size);
+ if (!conditionMet) {
+ Thread.sleep(10000); // Wait for 10 second before retrying
+ fetchAllAcInstances(endpoint);
+ }
+ }
+ }
+
+ /**
+ * Verify de-priming.
+ */
+ @When("the ACM participants are deprimed {string}")
+ public void deprimeTheParticipants(String endpoint) throws JSONException {
+ var jsonBody = new JSONObject().put("primeOrder", "DEPRIME");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Verify deletion of composition defintion.
+ */
+ @When("the AC definition is deleted {string}")
+ public void deleteAcDefinition(String endpoint) throws IOException {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .delete(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Verify migration functionality.
+ */
+ @When("the ACM instance is migrated {string} with {string}")
+ public void migrate(String endpoint, String filePath) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent
+ .replace("COMPOSITIONIDPLACEHOLDER", compositionId)
+ .replace("INSTANCEIDPLACEHOLDER", instanceId)
+ .replace("COMPOSITIONTARGETIDPLACEHOLDER", targetCompositionId))
+ .post(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Verify the response status.
+ */
+ @Then("the response status code should be {int}")
+ public void theUserEndpointIsUpAndRunning(int expectedStatus) {
+ assertEquals(expectedStatus, response.getStatusCode());
+ }
+
+ /**
+ * Verify the response contains specific keywords.
+ */
+ @Then("the response should contain the updated properties {string} {string}")
+ public void theUserEndpointIsUpAndRunning(String value1, String value2) {
+ assertThat(value1, response.getBody().asString().contains(value1));
+ assertThat(value1, response.getBody().asString().contains(value2));
+ }
+
+}