/*-
* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
* Copyright (C) 2019 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.clamp.loop;
import static org.assertj.core.api.Assertions.assertThat;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.json.simple.parser.ParseException;
import org.junit.Test;
import org.mockito.Mockito;
import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse;
import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse;
import org.onap.clamp.loop.components.external.DcaeComponent;
import org.onap.clamp.loop.components.external.ExternalComponentState;
import org.onap.clamp.loop.template.LoopTemplate;
import org.onap.clamp.policy.microservice.MicroServicePolicy;
public class DcaeComponentTest {
private Loop createTestLoop() {
Loop loopTest = new Loop("ControlLoopTest", "");
loopTest.setGlobalPropertiesJson(
new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class));
loopTest.setLastComputedState(LoopState.DESIGN);
loopTest.setDcaeDeploymentId("123456789");
loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085");
MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "",
"tosca_definitions_version: tosca_simple_yaml_1_0_0", true,
new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
microServicePolicy.setConfigurationsJson(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class));
loopTest.addMicroServicePolicy(microServicePolicy);
LoopTemplate loopTemplate = new LoopTemplate("test", "yaml", "svg", 1, null);
loopTemplate.setDcaeBlueprintId("UUID-blueprint");
loopTest.setLoopTemplate(loopTemplate);
return loopTest;
}
@Test
public void convertDcaeResponseTest() throws IOException {
String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state','error':'errorMessage', "
+ "'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}";
DcaeOperationStatusResponse responseObject = DcaeComponent.convertDcaeResponse(dcaeFakeResponse);
assertThat(responseObject.getRequestId()).isEqualTo("testId");
assertThat(responseObject.getOperationType()).isEqualTo("install");
assertThat(responseObject.getStatus()).isEqualTo("state");
assertThat(responseObject.getError()).isEqualTo("errorMessage");
assertThat(responseObject.getLinks()).isNotNull();
assertThat(responseObject.getLinks().getSelf()).isEqualTo("selfUrl");
assertThat(responseObject.getLinks().getUninstall()).isEqualTo("uninstallUrl");
assertThat(responseObject.getLinks().getStatus()).isNull();
}
@Test
public void testGetDeployPayload() throws IOException {
Loop loop = this.createTestLoop();
String deploymentPayload = DcaeComponent.getDeployPayload(loop);
String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\",\"inputs\":{\"policy_id\":\"name\"}}";
assertThat(deploymentPayload).isEqualTo(expectedPayload);
}
@Test
public void testGetUndeployPayload() throws IOException {
Loop loop = this.createTestLoop();
String unDeploymentPayload = DcaeComponent.getUndeployPayload(loop);
String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\"}";
assertThat(unDeploymentPayload).isEqualTo(expectedPayload);
}
@Test
public void computeStateTest() throws IOException {
Exchange exchange = Mockito.mock(Exchange.class);
Message message = Mockito.mock(Message.class);
Exchange exchange2 = Mockito.mock(Exchange.class);
Mockito.when(exchange.getIn()).thenReturn(message);
Mockito.when(message.getExchange()).thenReturn(exchange2);
Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(null);
DcaeComponent dcae = new DcaeComponent();
// initial state
ExternalComponentState state = dcae.computeState(exchange);
assertThat(state.getStateName()).isEqualTo("BLUEPRINT_DEPLOYED");
// OperationalType = install
DcaeOperationStatusResponse dcaeResponse = Mockito.mock(DcaeOperationStatusResponse.class);
Mockito.when(dcaeResponse.getOperationType()).thenReturn("install");
Mockito.when(dcaeResponse.getStatus()).thenReturn("succeeded");
Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(dcaeResponse);
ExternalComponentState state2 = dcae.computeState(exchange);
assertThat(state2.getStateName()).isEqualTo("MICROSERVICE_INSTALLED_SUCCESSFULLY");
Mockito.when(dcaeResponse.getStatus()).thenReturn("processing");
ExternalComponentState state3 = dcae.computeState(exchange);
assertThat(state3.getStateName()).isEqualTo("PROCESSING_MICROSERVICE_INSTALLATION");
Mockito.when(dcaeResponse.getStatus()).thenReturn("failed");
ExternalComponentState state4 = dcae.computeState(exchange);
assertThat(state4.getStateName()).isEqualTo("MICROSERVICE_INSTALLATION_FAILED");
// OperationalType = uninstall
Mockito.when(dcaeResponse.getOperationType()).thenReturn("uninstall");
Mockito.when(dcaeResponse.getStatus()).thenReturn("succeeded");
Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(dcaeResponse);
ExternalComponentState state5 = dcae.computeState(exchange);
assertThat(state5.getStateName()).isEqualTo("MICROSERVICE_UNINSTALLED_SUCCESSFULLY");
Mockito.when(dcaeResponse.getStatus()).thenReturn("processing");
ExternalComponentState state6 = dcae.computeState(exchange);
assertThat(state6.getStateName()).isEqualTo("PROCESSING_MICROSERVICE_UNINSTALLATION");
Mockito.when(dcaeResponse.getStatus()).thenReturn("failed");
ExternalComponentState state7 = dcae.computeState(exchange);
assertThat(state7.getStateName()).isEqualTo("MICROSERVICE_UNINSTALLATION_FAILED");
// error cases
Mockito.when(dcaeResponse.getOperationType()).thenReturn("whatever");
ExternalComponentState state8 = dcae.computeState(exchange);
assertThat(state8.getStateName()).isEqualTo("IN_ERROR");
Mockito.when(dcaeResponse.getOperationType()).thenReturn("install");
Mockito.when(dcaeResponse.getStatus()).thenReturn("anythingelse");
ExternalComponentState state9 = dcae.computeState(exchange);
assertThat(state9.getStateName()).isEqualTo("IN_ERROR");
}
@Test
public void convertToDcaeInventoryResponseTest() throws IOException, ParseException {
String dcaeFakeResponse = "{\n" + " \"links\": {\n" + " \"previousLink\": {\n"
+ " \"title\": \"string\",\n" + " \"rel\": \"string\",\n" + " \"uri\": \"string\",\n"
+ " \"uriBuilder\": {},\n" + " \"rels\": [\n" + " \"string\"\n" + " ],\n"
+ " \"params\": {\n" + " \"additionalProp1\": \"string\",\n"
+ " \"additionalProp2\": \"string\",\n" + " \"additionalProp3\": \"string\"\n"
+ " },\n" + " \"type\": \"string\"\n" + " },\n" + " \"nextLink\": {\n"
+ " \"title\": \"string\",\n" + " \"rel\": \"string\",\n" + " \"uri\": \"string\",\n"
+ " \"uriBuilder\": {},\n" + " \"rels\": [\n" + " \"string\"\n" + " ],\n"
+ " \"params\": {\n" + " \"additionalProp1\": \"string\",\n"
+ " \"additionalProp2\": \"string\",\n" + " \"additionalProp3\": \"string\"\n"
+ " },\n" + " \"type\": \"string\"\n" + " }\n" + " },\n" + " \"totalCount\": 0,\n"
+ " \"items\": [\n" + " {\n" + " \"owner\": \"testOwner\",\n"
+ " \"application\": \"testApplication\",\n" + " \"component\": \"testComponent\",\n"
+ " \"typeName\": \"testTypeName\",\n" + " \"typeVersion\": 0,\n"
+ " \"blueprintTemplate\": \"testBlueprintTemplate\",\n" + " \"serviceIds\": [\n"
+ " \"serviceId1\", \"serviceId2\"\n" + " ],\n" + " \"vnfTypes\": [\n"
+ " \"vnfType1\", \"vnfType2\"\n" + " ],\n" + " \"serviceLocations\": [\n"
+ " \"serviceLocation1\", \"serviceLocation2\"\n" + " ],\n"
+ " \"asdcServiceId\": \"testAsdcServiceId\",\n"
+ " \"asdcResourceId\": \"testAsdcResourceId\",\n"
+ " \"asdcServiceURL\": \"testAsdcServiceURL\",\n" + " \"typeId\": \"testTypeId\",\n"
+ " \"selfLink\": {\n" + " \"title\": \"selfLinkTitle\",\n"
+ " \"rel\": \"selfLinkRel\",\n" + " \"uri\": \"selfLinkUri\",\n"
+ " \"uriBuilder\": {},\n" + " \"rels\": [\n" + " \"string\"\n" + " ],\n"
+ " \"params\": {\n" + " \"additionalProp1\": \"string\",\n"
+ " \"additionalProp2\": \"string\",\n" + " \"additionalProp3\": \"string\"\n"
+ " },\n" + " \"type\": \"string\"\n" + " },\n"
+ " \"created\": \"2020-01-22T09:38:15.436Z\",\n"
+ " \"deactivated\": \"2020-01-22T09:38:15.437Z\"\n" + " }\n" + " ]\n" + "}";
List responseObject = DcaeComponent.convertToDcaeInventoryResponse(dcaeFakeResponse);
assertThat(responseObject.get(0).getAsdcResourceId()).isEqualTo("testAsdcResourceId");
assertThat(responseObject.get(0).getAsdcServiceId()).isEqualTo("testAsdcServiceId");
assertThat(responseObject.get(0).getTypeName()).isEqualTo("testTypeName");
assertThat(responseObject.get(0).getTypeId()).isEqualTo("testTypeId");
assertThat(responseObject.get(0).getBlueprintTemplate()).isEqualTo("testBlueprintTemplate");
}
}