diff options
Diffstat (limited to 'vid-automation/src/main/java')
134 files changed, 12186 insertions, 490 deletions
diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseAAIPreset.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseAAIPreset.java new file mode 100644 index 000000000..d75b41ee8 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseAAIPreset.java @@ -0,0 +1,12 @@ +package org.opencomp.simulator.presetGenerator.presets.BasePresets; + +/** + * Created by itzikliderman on 27/12/2017. + */ +public abstract class BaseAAIPreset extends BasePreset { + + @Override + protected String getRootPath() { + return "/aai/v.."; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseEcompPortalPreset.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseEcompPortalPreset.java new file mode 100644 index 000000000..d073a7164 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseEcompPortalPreset.java @@ -0,0 +1,12 @@ +package org.opencomp.simulator.presetGenerator.presets.BasePresets; + +/** + * Created by itzikliderman on 27/12/2017. + */ +public abstract class BaseEcompPortalPreset extends BasePreset { + + @Override + protected String getRootPath() { + return "/ecompportal_att/auxapi"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseMSOPreset.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseMSOPreset.java new file mode 100644 index 000000000..e30bdefeb --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseMSOPreset.java @@ -0,0 +1,30 @@ +package org.opencomp.simulator.presetGenerator.presets.BasePresets; + +import vid.automation.test.infra.Features; + +/** + * Created by itzikliderman on 27/12/2017. + */ +public abstract class BaseMSOPreset extends BasePreset { + + public static String getRequestBodyWithTestApiOnly() { + if (Features.FLAG_ADD_MSO_TESTAPI_FIELD.isActive()) { + return "" + + "{" + + " \"requestDetails\": { " + + " \"requestParameters\": { " + + " \"testApi\": \"GR_API\" " + + " } " + + " } " + + "} " + + ""; + } else { + return null; + } + } + + @Override + protected String getRootPath() { + return "/mso"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseMSOPresetServiceInstanceOperationsPost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseMSOPresetServiceInstanceOperationsPost.java new file mode 100644 index 000000000..8f298c45a --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseMSOPresetServiceInstanceOperationsPost.java @@ -0,0 +1,33 @@ +package org.opencomp.simulator.presetGenerator.presets.BasePresets; + +import org.springframework.http.HttpMethod; + +/** + * Created by itzikliderman on 21/12/2017. + */ +public abstract class BaseMSOPresetServiceInstanceOperationsPost extends BaseMSOPreset { + @Override + protected String getRootPath() { + return super.getRootPath() + "/cloudResources/v1/operationalEnvironments/ENV-UUID"; + } + + @Override + public Object getResponseBody() { + return "{"+ + " \"requestReferences\": {"+ + " \"instanceId\": \"dbe54591-c8ed-46d3-abc7-d3a24873dfbd\","+ + " \"requestId\": \"dbe54591-c8ed-46d3-abc7-d3a24873sssa\""+ + " }"+ + " }"; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.POST; + } + + @Override + public int getResponseCode() { + return 202; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BasePreset.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BasePreset.java new file mode 100644 index 000000000..51ba8590c --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BasePreset.java @@ -0,0 +1,47 @@ +package org.opencomp.simulator.presetGenerator.presets.BasePresets; + +import org.opencomp.simulator.presetGenerator.presets.model.RegistrationRequest; +import org.springframework.http.HttpMethod; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by itzikliderman on 13/12/2017. + */ +public abstract class BasePreset { + + public RegistrationRequest generateScenario() { + Map<String, String> headers = new HashMap<>(); + headers.put("Content-Type", getContentType()); + + return new RegistrationRequest( + new RegistrationRequest.SimulatorRequest(getReqMethod(), getReqPath(), getQueryParams(), getRequestBody()), + new RegistrationRequest.SimulatorResponse(getResponseCode(), headers, getResponseBody(), getFile())); + } + + public Object getResponseBody() { return null; }; + + public String getContentType() { + return "application/json"; + } + + public String getFile() { + return null; + } + + public int getResponseCode() { return 200; } + + public abstract HttpMethod getReqMethod(); + + public abstract String getReqPath(); + + public Object getRequestBody() { + return null; + } + + public Map<String, List> getQueryParams() { return null; } + + protected abstract String getRootPath(); +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseSDCPreset.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseSDCPreset.java new file mode 100644 index 000000000..ef64450b1 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/BasePresets/BaseSDCPreset.java @@ -0,0 +1,12 @@ +package org.opencomp.simulator.presetGenerator.presets.BasePresets; + +/** + * Created by itzikliderman on 27/12/2017. + */ +public abstract class BaseSDCPreset extends BasePreset { + + @Override + protected String getRootPath() { + return "/sdc/v1/catalog/services"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/BasePresetAAIGetVersion.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/BasePresetAAIGetVersion.java new file mode 100644 index 000000000..18644b819 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/BasePresetAAIGetVersion.java @@ -0,0 +1,48 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class BasePresetAAIGetVersion extends BaseAAIPreset { + public String modelVersionId1; + public String modelInvariantId; + + public BasePresetAAIGetVersion(String modelVersionId1, String modelInvariantId) { + this.modelVersionId1 = modelVersionId1; + this.modelInvariantId = modelInvariantId; + } + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of("format", Collections.singletonList("resource")); + } + + @Override + public Object getRequestBody() { + return "{\"start\" : \"service-design-and-creation/models/\", \"query\" : \"query/serviceModels-byDistributionStatus?distributionStatus=DISTRIBUTION_COMPLETE_OK\"}"; + } + + public String getModelVersionId1() { + return modelVersionId1; + } + + public String getModelInvariantId() { + return modelInvariantId; + } + + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBadBodyForGetServicesGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBadBodyForGetServicesGet.java new file mode 100644 index 000000000..0a90bf8df --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBadBodyForGetServicesGet.java @@ -0,0 +1,15 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAIBadBodyForGetServicesGet extends PresetAAIBaseGetServicesGet { + + private String responseBody; + + public PresetAAIBadBodyForGetServicesGet(String responseBody) { + this.responseBody = responseBody; + } + + @Override + public Object getResponseBody() { + return responseBody; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBaseGetServicesGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBaseGetServicesGet.java new file mode 100644 index 000000000..82e3f406e --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBaseGetServicesGet.java @@ -0,0 +1,16 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +public class PresetAAIBaseGetServicesGet extends BaseAAIPreset { + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/service-design-and-creation/services"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBaseSearchNodeQuery.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBaseSearchNodeQuery.java new file mode 100644 index 000000000..d8553ca8d --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIBaseSearchNodeQuery.java @@ -0,0 +1,16 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +public abstract class PresetAAIBaseSearchNodeQuery extends BaseAAIPreset { + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/search/nodes-query"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAICloudRegionAndSourceFromConfigurationPut.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAICloudRegionAndSourceFromConfigurationPut.java new file mode 100644 index 000000000..2e634bd9e --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAICloudRegionAndSourceFromConfigurationPut.java @@ -0,0 +1,93 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAICloudRegionAndSourceFromConfigurationPut extends BaseAAIPreset { + + public PresetAAICloudRegionAndSourceFromConfigurationPut(String configurationId, String cloudRegionId) { + this.configurationId = configurationId; + this.cloudRegionId = cloudRegionId; + } + + private final String configurationId; + private final String cloudRegionId; + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("simple"), + "nodesOnly", Collections.singletonList("true") + ); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", ImmutableList.of("network/configurations/configuration/" + getConfigurationId()), + "query", "query/cloud-region-and-source-FromConfiguration" + ); + // "{" + + // " \"start\": [\"network/configurations/configuration/{configuration-id}\"]," + + // " \"query\": \"query/cloud-region-and-source-FromConfiguration\"" + + // "}"; + } + + public String getConfigurationId() { + return configurationId; + } + + public String getCloudRegionId() { + return cloudRegionId; + } + + @Override + public Object getResponseBody() { + return "" + + "{" + + " \"results\": [{" + + " \"id\": \"2979590232\"," + + " \"node-type\": \"cloud-region\"," + + " \"url\": \"/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/att-aic/SDNO-S-BcloudReg-E1802\"," + + " \"properties\": {" + + " \"cloud-owner\": \"att-aic\"," + + " \"cloud-region-id\": \"" + getCloudRegionId() + "\"," + + " \"sriov-automation\": false," + + " \"resource-version\": \"1513631040564\"" + + " }" + + " }," + + " {" + + " \"id\": \"2979598424\"," + + " \"node-type\": \"generic-vnf\"," + + " \"url\": \"/aai/v12/network/generic-vnfs/generic-vnf/SOURCE-gVnf-E1802\"," + + " \"properties\": {" + + " \"vnf-id\": \"SOURCE-gVnf-E1802\"," + + " \"vnf-name\": \"SOURCE-vnf-SDNO\"," + + " \"vnf-type\": \"S-1-SDNO\"," + + " \"service-id\": \"a9a77d5a-123e-4-SDNO\"," + + " \"orchestration-status\": \"active\"," + + " \"in-maint\": true," + + " \"is-closed-loop-disabled\": false," + + " \"resource-version\": \"1513631043149\"" + + " }" + + " }" + + " ]" + + "}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegion.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegion.java new file mode 100644 index 000000000..283befefa --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegion.java @@ -0,0 +1,182 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetInstanceGroupsByCloudRegion extends BaseAAIPreset { + + private String cloudOwner; + private String cloudRegionId; + private String networkFunction; + private final String type = "L3-NETWORK"; + private final String role = "SUB-INTERFACE"; + + public PresetAAIGetInstanceGroupsByCloudRegion(String cloudOwner, String cloudRegionId, String networkFunction) { + this.cloudOwner = cloudOwner; + this.cloudRegionId = cloudRegionId; + this.networkFunction = networkFunction; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("resource") + ); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", ImmutableList.of("cloud-infrastructure/cloud-regions/cloud-region/" + getCloudOwner() + "/" + getCloudRegionId()), + "query", "query/instance-group-byCloudRegion?type=" + type + "&role=" + role + "&function=" + getNetworkFunction() + ); + } + + public String getCloudOwner() { + return cloudOwner; + } + + public String getCloudRegionId() { + return cloudRegionId; + } + + public String getNetworkFunction() { + return networkFunction; + } + + @Override + public Object getResponseBody() { + return "{\n" + + " \"results\": [\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id3\",\n" + + " \"model-version-id\": \"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\n" + + " \"id\": \"AAI-12002-test3-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520888659539\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id1\",\n" + + " \"model-version-id\": \"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\n" + + " \"id\": \"AAI-12002-test1-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520886467989\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id2\",\n" + + " \"model-version-id\": \"version2\",\n" + + " \"id\": \"AAI-12002-test2-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520888629970\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}\n"; + } + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest.java new file mode 100644 index 000000000..e47612d15 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest.java @@ -0,0 +1,185 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest extends BaseAAIPreset { + + private String cloudOwner; + private String cloudRegionId; + private String networkFunction; + private final String type = "L3-NETWORK"; + private final String role = "SUB-INTERFACE"; + + public PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest(String cloudOwner, String cloudRegionId, String networkFunction) { + this.cloudOwner = cloudOwner; + this.cloudRegionId = cloudRegionId; + this.networkFunction = networkFunction; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("resource") + ); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", ImmutableList.of("cloud-infrastructure/cloud-regions/cloud-region/" + getCloudOwner() + "/" + getCloudRegionId()), + "query", "query/instance-group-byCloudRegion?type=" + type + "&role=" + role + "&function=" + getNetworkFunction() + ); + } + + public String getCloudOwner() { + return cloudOwner; + } + + public String getCloudRegionId() { + return cloudRegionId; + } + + public String getNetworkFunction() { + return networkFunction; + } + + @Override + public Object getResponseBody() { + return "{\n" + + " \"results\": [\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"some-filed\": \"some-data\",\n" + //extra field + " \"model-invariant-id\": \"model-id3\",\n" + + " \"model-version-id\": \"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\n" + + " \"id\": \"AAI-12002-test3-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520888659539\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"some-filed\": \"some-data\",\n" + //extra field + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id1\",\n" + + " \"model-version-id\": \"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\n" + + " \"id\": \"AAI-12002-test1-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520886467989\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"some-filed\": \"some-data\",\n" + //extra field + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id2\",\n" + + " \"model-version-id\": \"version2\",\n" + + " \"id\": \"AAI-12002-test2-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520888629970\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}\n"; + } + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing.java new file mode 100644 index 000000000..9c8f82d18 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing.java @@ -0,0 +1,181 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing extends BaseAAIPreset { + + private String cloudOwner; + private String cloudRegionId; + private String networkFunction; + private final String type = "L3-NETWORK"; + private final String role = "SUB-INTERFACE"; + + public PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing(String cloudOwner, String cloudRegionId, String networkFunction) { + this.cloudOwner = cloudOwner; + this.cloudRegionId = cloudRegionId; + this.networkFunction = networkFunction; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("resource") + ); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", ImmutableList.of("cloud-infrastructure/cloud-regions/cloud-region/" + getCloudOwner() + "/" + getCloudRegionId()), + "query", "query/instance-group-byCloudRegion?type=" + type + "&role=" + role + "&function=" + getNetworkFunction() + ); + } + + public String getCloudOwner() { + return cloudOwner; + } + + public String getCloudRegionId() { + return cloudRegionId; + } + + public String getNetworkFunction() { + return networkFunction; + } + + @Override + public Object getResponseBody() { + return "{\n" + + " \"results\": [\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id3\",\n" + + " \"model-version-id\": \"version3\",\n" + + " \"id\": \"AAI-12002-test3-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"resource-version\": \"1520888659539\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id1\",\n" + + " \"model-version-id\": \"version1\",\n" + + " \"id\": \"AAI-12002-test1-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520886467989\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"model-id2\",\n" + + " \"model-version-id\": \"version2\",\n" + + " \"id\": \"AAI-12002-test2-vm230w\",\n" + + " \"description\": \"a9DEa0kpY\",\n" + + " \"instance-group-type\": \"type\",\n" + + " \"resource-version\": \"1520888629970\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"cloud-region\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"AAI-12002-vm230w\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"AAI-region-vm230w\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"cloud-region.owner-defined-type\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}\n"; + } + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetModelsByOwningEntity.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetModelsByOwningEntity.java new file mode 100644 index 000000000..0cf32095e --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetModelsByOwningEntity.java @@ -0,0 +1,176 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetModelsByOwningEntity extends BaseAAIPreset { + String oeName; + + public PresetAAIGetModelsByOwningEntity(String oeName) { + this.oeName = oeName; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/business/owning-entities"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "owning-entity-id", Collections.singletonList(oeName) + ); + } + + @Override + public Object getResponseBody() { + return "{" + + " \"owning-entity\": [" + + " {" + + " \"owning-entity-id\": \"43b8a85a-0421-4265-9069-117dd6526b8a\"," + + " \"owning-entity-name\": \"" + oeName + "\"," + + " \"resource-version\": \"1527418700853\"," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.BelongsTo\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/af9d52f9-13b2-4657-a198-463677f82dc0\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"MSO_1610_ST\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"MSO-dev-service-type\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"af9d52f9-13b2-4657-a198-463677f82dc0\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"xbghrftgr_shani\"" + + " }" + + " ]" + + " }," + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.BelongsTo\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/49769492-5def-4c89-8e73-b236f958fa40\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"MSO_1610_ST\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"MSO-dev-service-type\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"49769492-5def-4c89-8e73-b236f958fa40\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"fghghfhgf\"" + + " }" + + " ]" + + " }," + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.BelongsTo\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/service-subscriptions/service-subscription/vMOG/service-instances/service-instance/13695dfb-db99-4c2f-905e-fe7bf2fc7b9f\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"vMOG\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"13695dfb-db99-4c2f-905e-fe7bf2fc7b9f\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"FIRSTNET_DEMO\"" + + " }" + + " ]" + + " }," + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.BelongsTo\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/service-subscriptions/service-subscription/Mobility/service-instances/service-instance/7e4f8130-5dee-47c4-8770-1abc5f5ded83\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"Mobility\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"7e4f8130-5dee-47c4-8770-1abc5f5ded83\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"Amir123\"" + + " }" + + " ]" + + " }," + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.BelongsTo\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/service-subscriptions/service-subscription/Mobility/service-instances/service-instance/d849b312-03f6-4fa3-a923-a469b850ec73\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"Mobility\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"d849b312-03f6-4fa3-a923-a469b850ec73\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"edbh54\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " ]" + + " }"; + } +}
\ No newline at end of file diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetModelsByProject.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetModelsByProject.java new file mode 100644 index 000000000..df0df6ccc --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetModelsByProject.java @@ -0,0 +1,157 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class PresetAAIGetModelsByProject extends BaseAAIPreset { + private String projectName; + private String serviceInstanceId; + + public PresetAAIGetModelsByProject(String projectName) { + this.projectName = projectName; + ImmutableMap servicesPerProject = ImmutableMap.of ("x1","7e4f8130-5dee-47c4-8770-1abc5f5ded83", + "yyy1","13695dfb-db99-4c2f-905e-fe7bf2fc7b9f"); + this.serviceInstanceId = (servicesPerProject.containsKey(projectName)) ? servicesPerProject.get(projectName).toString(): UUID.randomUUID().toString(); + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/business/projects"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "project-name", Collections.singletonList(projectName) + ); + } + + @Override + public Object getResponseBody() { + return "{" + + " \"project\": [" + + " {" + + " \"project-name\": \"" + projectName + "\"," + + " \"resource-version\": \"1527026201826\"," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/service-subscriptions/service-subscription/Mobility/service-instances/service-instance/3f826016-3ac9-4928-9561-beee75fd91d5\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"Mobility\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"3f826016-3ac9-4928-9561-beee75fd91d5\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"Lital_SRIOV2_001\"" + + " }" + + " ]" + + " }," + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/DHV1707-TestSubscriber-2/service-subscriptions/service-subscription/HNGATEWAY/service-instances/service-instance/45713f81-04b8-4fd0-b824-64536d493984\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"DHV1707-TestSubscriber-2\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"HNGATEWAY\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"45713f81-04b8-4fd0-b824-64536d493984\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"kkkk\"" + + " }" + + " ]" + + " }," + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.BelongsTo\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/service-subscriptions/service-subscription/vMOG/service-instances/service-instance/" + serviceInstanceId + "\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"vMOG\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"" + serviceInstanceId + "\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"FIRSTNET_DEMO\"" + + " }" + + " ]" + + " }," + + " {" + + " \"related-to\": \"service-instance\"," + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\"," + + " \"related-link\": \"/aai/v12/business/customers/customer/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/service-subscriptions/service-subscription/Mobility/service-instances/service-instance/ff2d9326-1ef5-4760-aba0-0eaf372ae675\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"customer.global-customer-id\"," + + " \"relationship-value\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"" + + " }," + + " {" + + " \"relationship-key\": \"service-subscription.service-type\"," + + " \"relationship-value\": \"Mobility\"" + + " }," + + " {" + + " \"relationship-key\": \"service-instance.service-instance-id\"," + + " \"relationship-value\": \"ff2d9326-1ef5-4760-aba0-0eaf372ae675\"" + + " }" + + " ]," + + " \"related-to-property\": [" + + " {" + + " \"property-key\": \"service-instance.service-instance-name\"," + + " \"property-value\": \"VNF_INSTANCE_DEMO_THREE\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " ]" + + "}"; + } + + +}
\ No newline at end of file diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetMultipleVersion.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetMultipleVersion.java new file mode 100644 index 000000000..6586eb1bc --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetMultipleVersion.java @@ -0,0 +1,59 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAIGetMultipleVersion extends BasePresetAAIGetVersion { + public String modelVersionId2; + public String modelVersionId3; + public PresetAAIGetMultipleVersion(String modelVersionId1, + String modelVersionId2, + String modelVersionId3, + String modelInvariantId) { + super( modelVersionId1, modelInvariantId); + this.modelVersionId2 = modelVersionId2; + this.modelVersionId3 = modelVersionId3; + } + public String getModelVersionId2() { + return modelVersionId2; + } + public String getModelVersionId3() { + return modelVersionId3; + } + + @Override + public Object getResponseBody() { + return "{\"results\": [" + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"" + getModelInvariantId() + "\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1500138206526\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"" + getModelVersionId1() + "\"," + + " \"model-name\": \"action-data\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"decontamination arm circus ammonia hump edge\"," + + " \"resource-version\": \"1500137463984\"" + + " }," + + " {" + + " \"model-version-id\": \"" + getModelVersionId3() + "\"," + + " \"model-name\": \"action-data\"," + + " \"model-version\": \"3.0\"," + + " \"model-description\": \"Non decontamination arm circus ammonia hump edge\"," + + " \"resource-version\": \"1500137463986\"" + + " }," + + " {" + + " \"model-version-id\": \"" + getModelVersionId2() + "\"," + + " \"model-name\": \"action-data\"," + + " \"model-version\": \"2.0\"," + + " \"model-description\": \"The oldest one\"," + + " \"resource-version\": \"1500137463980\"" + + " }" + + " ]" + + " }" + + " }" + + " }" + + " ]}"; + } + + }
\ No newline at end of file diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetails.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetails.java new file mode 100644 index 000000000..8a27fbce8 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetails.java @@ -0,0 +1,338 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetNetworkCollectionDetails extends BaseAAIPreset { + + + private String serviceInstanceId; + + public PresetAAIGetNetworkCollectionDetails(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("resource") + ); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", ImmutableList.of("nodes/service-instances/service-instance/" + getServiceInstanceId()), + "query", "query/network-collection-ByServiceInstance" + ); + } + + public String getServiceInstanceId() { + return serviceInstanceId; + } + + + @Override + public Object getResponseBody() { + return "{\n" + + " \"results\": [\n" + + " {\n" + + " \"service-instance\": {\n" + + " \"service-instance-id\": \"2UJZZ01777-rs804s\",\n" + + " \"resource-version\": \"1521662813382\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"collection\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"collection.collection-id\",\n" + + " \"relationship-value\": \"collection-1-2018-rs804s\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"collection\": {\n" + + " \"collection-id\": \"collection-1-2018-rs804s\",\n" + + " \"model-invariant-id\": \"5761e0a7-defj777\",\n" + + " \"model-version-id\": \"5761e0a7-defj232\",\n" + + " \"collection-name\": \"collection-name\",\n" + + " \"collection-type\": \"L3-NETWORK\",\n" + + " \"collection-role\": \"SUB-INTERFACE\",\n" + + " \"collection-function\": \"collection-function\",\n" + + " \"collection-customization-id\": \"custom-unique-data-id\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"service-instance\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/business/customers/customer/customer-1-2017-rs804s/service-subscriptions/service-subscription/service-value7-rs804s/service-instances/service-instance/2UJZZ01777-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"customer.global-customer-id\",\n" + + " \"relationship-value\": \"customer-1-2017-rs804s\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"service-subscription.service-type\",\n" + + " \"relationship-value\": \"service-value7-rs804s\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"service-instance.service-instance-id\",\n" + + " \"relationship-value\": \"2UJZZ01777-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"service-instance.service-instance-name\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"resource-version\": \"1521662811309\"\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"5761e0a7-defj777\",\n" + + " \"model-version-id\": \"5761e0a7-defj22\",\n" + + " \"id\": \"instanceGroup-2018-rs804s\",\n" + + " \"description\": \"zr6h\",\n" + + " \"instance-group-type\": \"7DDjOdNL\",\n" + + " \"resource-version\": \"1521662814023\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"collection\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"collection.collection-id\",\n" + + " \"relationship-value\": \"collection-1-2018-rs804s\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-3-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-3-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-2-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-2-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662814627\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-3-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662816043\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-2-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662815304\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}"; + } + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetailsInvalidRequest.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetailsInvalidRequest.java new file mode 100644 index 000000000..9e4d653d2 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetailsInvalidRequest.java @@ -0,0 +1,342 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetNetworkCollectionDetailsInvalidRequest extends BaseAAIPreset { + + private String serviceInstanceId; + + public PresetAAIGetNetworkCollectionDetailsInvalidRequest(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("resource") + ); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", ImmutableList.of("nodes/service-instances/service-instance/" + getServiceInstanceId()), + "query", "query/network-collection-ByServiceInstance" + ); + } + + public String getServiceInstanceId() { + return serviceInstanceId; + } + + + @Override + public Object getResponseBody() { + return "{\n" + + " \"results\": [\n" + + " {\n" + + " \"service-instance\": {\n" + + " \"service-instance-id\": \"2UJZZ01777-rs804s\",\n" + + " \"resource-version\": \"1521662813382\",\n" + + " \"resource-versions\": \"1521662813382\",\n" + //extra field + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"collection\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"collection.collection-id\",\n" + + " \"relationship-value\": \"collection-1-2018-rs804s\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"collection\": {\n" + + " \"collection-id\": \"collection-1-2018-rs804s\",\n" + + " \"model-invariant-id\": \"5761e0a7-defj777\",\n" + + " \"model-version-id\": \"5761e0a7-defj232\",\n" + + " \"collection-name\": \"collection-name\",\n" + + " \"collection-names\": \"collection-name\",\n" +//extra field + " \"collection-type\": \"L3-NETWORK\",\n" + + " \"collection-role\": \"SUB-INTERFACE\",\n" + + " \"collection-function\": \"collection-function\",\n" + + " \"collection-customization-id\": \"custom-unique-data-id\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"service-instance\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/business/customers/customer/customer-1-2017-rs804s/service-subscriptions/service-subscription/service-value7-rs804s/service-instances/service-instance/2UJZZ01777-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"customer.global-customer-id\",\n" + + " \"relationship-value\": \"customer-1-2017-rs804s\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"service-subscription.service-type\",\n" + + " \"relationship-value\": \"service-value7-rs804s\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"service-instance.service-instance-id\",\n" + + " \"relationship-value\": \"2UJZZ01777-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"service-instance.service-instance-name\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"resource-version\": \"1521662811309\"\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"5761e0a7-defj777\",\n" + + " \"model-version-id\": \"5761e0a7-defj22\",\n" + + " \"id\": \"instanceGroup-2018-rs804s\",\n" + + " \"ids\": \"instanceGroup-2018-rs804s\",\n" + //extra field + " \"description\": \"zr6h\",\n" + + " \"instance-group-type\": \"7DDjOdNL\",\n" + + " \"resource-version\": \"1521662814023\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"collection\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"collection.collection-id\",\n" + + " \"relationship-value\": \"collection-1-2018-rs804s\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-3-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-3-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-2-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-2-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-roles\": \"HngwProtectedOam.OAM\",\n" +//extra field + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662814627\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-3-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662816043\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-2-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662815304\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}"; + } + + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetailsRequiredMissing.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetailsRequiredMissing.java new file mode 100644 index 000000000..e137ee233 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkCollectionDetailsRequiredMissing.java @@ -0,0 +1,337 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetNetworkCollectionDetailsRequiredMissing extends BaseAAIPreset { + + + private String serviceInstanceId; + + public PresetAAIGetNetworkCollectionDetailsRequiredMissing(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("resource") + ); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", ImmutableList.of("nodes/service-instances/service-instance/" + getServiceInstanceId()), + "query", "query/network-collection-ByServiceInstance" + ); + } + + public String getServiceInstanceId() { + return serviceInstanceId; + } + + + @Override + public Object getResponseBody() { + return "{\n" + + " \"results\": [\n" + + " {\n" + + " \"service-instance\": {\n" + + " \"service-instance-id\": \"2UJZZ01777-rs804s\",\n" + + " \"resource-version\": \"1521662813382\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"collection\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"collection.collection-id\",\n" + + " \"relationship-value\": \"collection-1-2018-rs804s\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"collection\": {\n" + + " \"collection-id\": \"collection-1-2018-rs804s\",\n" + + " \"model-invariant-id\": \"5761e0a7-defj777\",\n" + + " \"model-version-id\": \"5761e0a7-defj232\",\n" + + " \"collection-name\": \"collection-name\",\n" + + " \"collection-type\": \"L3-NETWORK\",\n" + + " \"collection-role\": \"SUB-INTERFACE\",\n" + + " \"collection-function\": \"collection-function\",\n" + + " \"collection-customization-id\": \"custom-unique-data-id\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"service-instance\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/business/customers/customer/customer-1-2017-rs804s/service-subscriptions/service-subscription/service-value7-rs804s/service-instances/service-instance/2UJZZ01777-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"customer.global-customer-id\",\n" + + " \"relationship-value\": \"customer-1-2017-rs804s\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"service-subscription.service-type\",\n" + + " \"relationship-value\": \"service-value7-rs804s\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"service-instance.service-instance-id\",\n" + + " \"relationship-value\": \"2UJZZ01777-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"service-instance.service-instance-name\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"resource-version\": \"1521662811309\"\n" + + " }\n" + + " },\n" + + " {\n" + + " \"instance-group\": {\n" + + " \"instance-group-role\": \"JZmha7QSS4tJ\",\n" + + " \"model-invariant-id\": \"5761e0a7-defj777\",\n" + + " \"model-version-id\": \"5761e0a7-defj22\",\n" + + " \"id\": \"instanceGroup-2018-rs804s\",\n" + + " \"instance-group-type\": \"7DDjOdNL\",\n" + + " \"resource-version\": \"1521662814023\",\n" + + " \"instance-group-name\": \"wKmBXiO1xm8bK\",\n" + + " \"instance-group-function\": \"testfunction2\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"collection\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"collection.collection-id\",\n" + + " \"relationship-value\": \"collection-1-2018-rs804s\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-3-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-3-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"l3-network\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/l3-networks/l3-network/l3network-id-2-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"l3-network.network-id\",\n" + + " \"relationship-value\": \"l3network-id-2-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"l3-network.network-name\",\n" + + " \"property-value\": \"oam-net\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662814627\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-3-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662816043\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"l3-network\": {\n" + + " \"network-id\": \"l3network-id-2-rs804s\",\n" + + " \"network-name\": \"oam-net\",\n" + + " \"network-type\": \"Tenant_Layer_3\",\n" + + " \"network-role\": \"HngwProtectedOam.OAM\",\n" + + " \"network-technology\": \"Contrail\",\n" + + " \"is-bound-to-vpn\": false,\n" + + " \"resource-version\": \"1521662815304\",\n" + + " \"is-provider-network\": false,\n" + + " \"is-shared-network\": false,\n" + + " \"is-external-network\": false,\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"instanceGroup-2018-rs804s\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"zr6h\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"wKmBXiO1xm8bK\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}"; + } + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkZones.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkZones.java new file mode 100644 index 000000000..02f01bd7a --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetNetworkZones.java @@ -0,0 +1,794 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +public class PresetAAIGetNetworkZones extends BaseAAIPreset { + + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/network/zones"; + } + + @Override + public Object getResponseBody() { + return "{" + + " \"zone\": [" + + " {" + + " \"zone-id\": \"NFT1\"," + + " \"zone-name\": \"NFTJSSSS-NFT1\"" + + " }," + + " {" + + " \"zone-id\": \"JAG1\"," + + " \"zone-name\": \"YUDFJULP-JAG1\"" + + " }," + + " {" + + " \"zone-id\": \"YYY1\"," + + " \"zone-name\": \"UUUAIAAI-YYY1\"" + + " }," + + " {" + + " \"zone-id\": \"BAN1\"," + + " \"zone-name\": \"VSDKYUTP-BAN1\"" + + " }," + + " {" + + " \"zone-id\": \"DKJ1\"," + + " \"zone-name\": \"DKJSJDKA-DKJ1\"" + + " }," + + " {" + + " \"zone-id\": \"MCS1\"," + + " \"zone-name\": \"ASACMAMS-MCS1\"" + + " }," + + " {" + + " \"zone-id\": \"UIO1\"," + + " \"zone-name\": \"uioclli1-UIO1\"" + + " }," + + " {" + + " \"zone-id\": \"RAJ1\"," + + " \"zone-name\": \"YGBIJNLQ-RAJ1\"" + + " }," + + " {" + + " \"zone-id\": \"OPA1\"," + + " \"zone-name\": \"opaclli1-OPA1\"" + + " }," + + " {" + + " \"zone-id\": \"SDE1\"," + + " \"zone-name\": \"ZXCVBNMA-SDE1\"" + + " }," + + " {" + + " \"zone-id\": \"VEN2\"," + + " \"zone-name\": \"FGHJUHIL-VEN2\"" + + " }," + + " {" + + " \"zone-id\": \"ORL1\"," + + " \"zone-name\": \"ORLDFLMA-ORL1\"" + + " }," + + " {" + + " \"zone-id\": \"JAD1\"," + + " \"zone-name\": \"JADECLLI-JAD1\"" + + " }," + + " {" + + " \"zone-id\": \"ZXL1\"," + + " \"zone-name\": \"LWLWCANN-ZXL1\"" + + " }," + + " {" + + " \"zone-id\": \"CKL1\"," + + " \"zone-name\": \"CLKSKCKK-CKL1\"" + + " }," + + " {" + + " \"zone-id\": \"SDF1\"," + + " \"zone-name\": \"sdfclli1-SDF1\"" + + " }," + + " {" + + " \"zone-id\": \"RAD1\"," + + " \"zone-name\": \"RADICAL1-RAD1\"" + + " }," + + " {" + + " \"zone-id\": \"KIT1\"," + + " \"zone-name\": \"BHYJFGLN-KIT1\"" + + " }," + + " {" + + " \"zone-id\": \"REL1\"," + + " \"zone-name\": \"INGERFGT-REL1\"" + + " }," + + " {" + + " \"zone-id\": \"JNL1\"," + + " \"zone-name\": \"CJALSDAC-JNL1\"" + + " }," + + " {" + + " \"zone-id\": \"OLK1\"," + + " \"zone-name\": \"OLKOLKLS-OLK1\"" + + " }," + + " {" + + " \"zone-id\": \"CHI1\"," + + " \"zone-name\": \"CHILLIWE-CHI1\"" + + " }," + + " {" + + " \"zone-id\": \"UUU4\"," + + " \"zone-name\": \"UUUAAAUU-UUU4\"" + + " }," + + " {" + + " \"zone-id\": \"TUF1\"," + + " \"zone-name\": \"TUFCLLI1-TUF1\"" + + " }," + + " {" + + " \"zone-id\": \"KJN1\"," + + " \"zone-name\": \"CKALDKSA-KJN1\"" + + " }," + + " {" + + " \"zone-id\": \"SAM1\"," + + " \"zone-name\": \"SNDGCA64-SAN1\"" + + " }," + + " {" + + " \"zone-id\": \"SCK1\"," + + " \"zone-name\": \"SCKSCKSK-SCK1\"" + + " }," + + " {" + + " \"zone-id\": \"HJH1\"," + + " \"zone-name\": \"AOEEQQQD-HJH1\"" + + " }," + + " {" + + " \"zone-id\": \"HGD1\"," + + " \"zone-name\": \"SDFQWHGD-HGD1\"" + + " }," + + " {" + + " \"zone-id\": \"KOR1\"," + + " \"zone-name\": \"HYFLNBVT-KOR1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL43\"," + + " \"zone-name\": \"AICLOCID-ATL43\"" + + " }," + + " {" + + " \"zone-id\": \"ATL54\"," + + " \"zone-name\": \"AICFTAAI-ATL54\"" + + " }," + + " {" + + " \"zone-id\": \"ATL66\"," + + " \"zone-name\": \"CLLIAAII-ATL66\"" + + " }," + + " {" + + " \"zone-id\": \"VEL1\"," + + " \"zone-name\": \"BNMLKUIK-VEL1\"" + + " }," + + " {" + + " \"zone-id\": \"ICC1\"," + + " \"zone-name\": \"SANJITAT-ICC1\"" + + " }," + + " {" + + " \"zone-id\": \"MNT11\"," + + " \"zone-name\": \"WSXEFBTH-MNT11\"" + + " }," + + " {" + + " \"zone-id\": \"DEF2\"," + + " \"zone-name\": \"WSBHGTYL-DEF2\"" + + " }," + + " {" + + " \"zone-id\": \"MAD11\"," + + " \"zone-name\": \"SDFQWGKL-MAD11\"" + + " }," + + " {" + + " \"zone-id\": \"OLG1\"," + + " \"zone-name\": \"OLHOLHOL-OLG1\"" + + " }," + + " {" + + " \"zone-id\": \"GAR1\"," + + " \"zone-name\": \"NGFVSJKO-GAR1\"" + + " }," + + " {" + + " \"zone-id\": \"SAN22\"," + + " \"zone-name\": \"GNVLSCTL-SAN22\"" + + " }," + + " {" + + " \"zone-id\": \"HRG1\"," + + " \"zone-name\": \"HRGHRGGS-HRG1\"" + + " }," + + " {" + + " \"zone-id\": \"JCS1\"," + + " \"zone-name\": \"JCSJSCJS-JCS1\"" + + " }," + + " {" + + " \"zone-id\": \"DHA12\"," + + " \"zone-name\": \"WSXEDECF-DHA12\"" + + " }," + + " {" + + " \"zone-id\": \"HJE1\"," + + " \"zone-name\": \"AOEEWWWD-HJE1\"" + + " }," + + " {" + + " \"zone-id\": \"NCA1\"," + + " \"zone-name\": \"NCANCANN-NCA1\"" + + " }," + + " {" + + " \"zone-id\": \"IOP1\"," + + " \"zone-name\": \"iopclli1-IOP1\"" + + " }," + + " {" + + " \"zone-id\": \"RTY1\"," + + " \"zone-name\": \"rtyclli1-RTY1\"" + + " }," + + " {" + + " \"zone-id\": \"KAP1\"," + + " \"zone-name\": \"HIOUYTRQ-KAP1\"" + + " }," + + " {" + + " \"zone-id\": \"ZEN1\"," + + " \"zone-name\": \"ZENCLLI1-ZEN1\"" + + " }," + + " {" + + " \"zone-id\": \"HKA1\"," + + " \"zone-name\": \"JAKHLASS-HKA1\"" + + " }," + + " {" + + " \"zone-id\": \"CQK1\"," + + " \"zone-name\": \"CQKSCAKK-CQK1\"" + + " }," + + " {" + + " \"zone-id\": \"SAI1\"," + + " \"zone-name\": \"UBEKQLPD-SAI1\"" + + " }," + + " {" + + " \"zone-id\": \"ERT1\"," + + " \"zone-name\": \"ertclli1-ERT1\"" + + " }," + + " {" + + " \"zone-id\": \"IBB1\"," + + " \"zone-name\": \"PLMKOIJU-IBB1\"" + + " }," + + " {" + + " \"zone-id\": \"TIR2\"," + + " \"zone-name\": \"PLKINHYI-TIR2\"" + + " }," + + " {" + + " \"zone-id\": \"HSD1\"," + + " \"zone-name\": \"CHASKCDS-HSD1\"" + + " }," + + " {" + + " \"zone-id\": \"SLF78\"," + + " \"zone-name\": \"SDCTLFN1-SLF78\"" + + " }," + + " {" + + " \"zone-id\": \"SEE78\"," + + " \"zone-name\": \"SDCTEEE4-SEE78\"" + + " }," + + " {" + + " \"zone-id\": \"SAN13\"," + + " \"zone-name\": \"TOKYJPFA-SAN13\"" + + " }," + + " {" + + " \"zone-id\": \"SAA78\"," + + " \"zone-name\": \"SDCTAAA1-SAA78\"" + + " }," + + " {" + + " \"zone-id\": \"LUC1\"," + + " \"zone-name\": \"ATLDFGYC-LUC1\"" + + " }," + + " {" + + " \"zone-id\": \"AMD13\"," + + " \"zone-name\": \"MEMATLAN-AMD13\"" + + " }," + + " {" + + " \"zone-id\": \"TOR1\"," + + " \"zone-name\": \"TOROONXN-TOR1\"" + + " }," + + " {" + + " \"zone-id\": \"QWE1\"," + + " \"zone-name\": \"QWECLLI1-QWE1\"" + + " }," + + " {" + + " \"zone-id\": \"ZOG1\"," + + " \"zone-name\": \"ZOGASTRO-ZOG1\"" + + " }," + + " {" + + " \"zone-id\": \"CAL33\"," + + " \"zone-name\": \"CALIFORN-CAL33\"" + + " }," + + " {" + + " \"zone-id\": \"SHH78\"," + + " \"zone-name\": \"SDIT1HHH-SHH78\"" + + " }," + + " {" + + " \"zone-id\": \"DSA1\"," + + " \"zone-name\": \"LKJHGFDS-DSA1\"" + + " }," + + " {" + + " \"zone-id\": \"CLG1\"," + + " \"zone-name\": \"CLGRABAD-CLG1\"" + + " }," + + " {" + + " \"zone-id\": \"BNA1\"," + + " \"zone-name\": \"BNARAGBK-BNA1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL84\"," + + " \"zone-name\": \"CANTTCOC-ATL84\"" + + " }," + + " {" + + " \"zone-id\": \"APP1\"," + + " \"zone-name\": \"WBHGTYUI-APP1\"" + + " }," + + " {" + + " \"zone-id\": \"RJN1\"," + + " \"zone-name\": \"RJNRBZAW-RJN1\"" + + " }," + + " {" + + " \"zone-id\": \"EHH78\"," + + " \"zone-name\": \"SDCSHHH5-EHH78\"" + + " }," + + " {" + + " \"zone-id\": \"mac10\"," + + " \"zone-name\": \"PKGTESTF-mac10\"" + + " }," + + " {" + + " \"zone-id\": \"SXB78\"," + + " \"zone-name\": \"SDCTGXB1-SXB78\"" + + " }," + + " {" + + " \"zone-id\": \"SAX78\"," + + " \"zone-name\": \"SDCTAXG1-SAX78\"" + + " }," + + " {" + + " \"zone-id\": \"SYD1\"," + + " \"zone-name\": \"SYDNAUBV-SYD1\"" + + " }," + + " {" + + " \"zone-id\": \"TOK1\"," + + " \"zone-name\": \"TOKYJPFA-TOK1\"" + + " }," + + " {" + + " \"zone-id\": \"KGM2\"," + + " \"zone-name\": \"KGMTNC20-KGM2\"" + + " }," + + " {" + + " \"zone-id\": \"DCC1b\"," + + " \"zone-name\": \"POIUYTGH-DCC1b\"" + + " }," + + " {" + + " \"zone-id\": \"SKK78\"," + + " \"zone-name\": \"SDCTKKK1-SKK78\"" + + " }," + + " {" + + " \"zone-id\": \"SGG78\"," + + " \"zone-name\": \"SDCTGGG1-SGG78\"" + + " }," + + " {" + + " \"zone-id\": \"SJJ78\"," + + " \"zone-name\": \"SDCTJJJ1-SJJ78\"" + + " }," + + " {" + + " \"zone-id\": \"SBX78\"," + + " \"zone-name\": \"SDCTBXG1-SBX78\"" + + " }," + + " {" + + " \"zone-id\": \"LAG1\"," + + " \"zone-name\": \"LARGIZON-LAG1\"" + + " }," + + " {" + + " \"zone-id\": \"IAA1\"," + + " \"zone-name\": \"QAZXSWED-IAA1\"" + + " }," + + " {" + + " \"zone-id\": \"POI1\"," + + " \"zone-name\": \"PLMNJKIU-POI1\"" + + " }," + + " {" + + " \"zone-id\": \"LAG1a\"," + + " \"zone-name\": \"LARGIZON-LAG1a\"" + + " }," + + " {" + + " \"zone-id\": \"PBL1\"," + + " \"zone-name\": \"PBLAPBAI-PBL1\"" + + " }," + + " {" + + " \"zone-id\": \"LAG45\"," + + " \"zone-name\": \"LARGIZON-LAG1a\"" + + " }," + + " {" + + " \"zone-id\": \"MAR1\"," + + " \"zone-name\": \"MNBVCXZM-MAR1\"" + + " }," + + " {" + + " \"zone-id\": \"HST70\"," + + " \"zone-name\": \"HSTNTX70-HST70\"" + + " }," + + " {" + + " \"zone-id\": \"DCC1a\"," + + " \"zone-name\": \"POIUYTGH-DCC1a\"" + + " }," + + " {" + + " \"zone-id\": \"TOL1\"," + + " \"zone-name\": \"TOLDOH21-TOL1\"" + + " }," + + " {" + + " \"zone-id\": \"LON1\"," + + " \"zone-name\": \"LONEENCO-LON1\"" + + " }," + + " {" + + " \"zone-id\": \"SJU78\"," + + " \"zone-name\": \"SDIT1JUB-SJU78\"" + + " }," + + " {" + + " \"zone-id\": \"STN27\"," + + " \"zone-name\": \"HSTNTX01-STN27\"" + + " }," + + " {" + + " \"zone-id\": \"SSW56\"," + + " \"zone-name\": \"ss8126GT-SSW56\"" + + " }," + + " {" + + " \"zone-id\": \"SBB78\"," + + " \"zone-name\": \"SDIT1BBB-SBB78\"" + + " }," + + " {" + + " \"zone-id\": \"DCC3\"," + + " \"zone-name\": \"POIUYTGH-DCC3\"" + + " }," + + " {" + + " \"zone-id\": \"GNV1\"," + + " \"zone-name\": \"GNVLSCTL-GNV1\"" + + " }," + + " {" + + " \"zone-id\": \"WAS1\"," + + " \"zone-name\": \"WASHDCSW-WAS1\"" + + " }," + + " {" + + " \"zone-id\": \"TOY1\"," + + " \"zone-name\": \"TORYONNZ-TOY1\"" + + " }," + + " {" + + " \"zone-id\": \"STT1\"," + + " \"zone-name\": \"STTLWA02-STT1\"" + + " }," + + " {" + + " \"zone-id\": \"STG1\"," + + " \"zone-name\": \"STTGGE62-STG1\"" + + " }," + + " {" + + " \"zone-id\": \"SLL78\"," + + " \"zone-name\": \"SDCTLLL1-SLL78\"" + + " }," + + " {" + + " \"zone-id\": \"SBU78\"," + + " \"zone-name\": \"SDIT1BUB-SBU78\"" + + " }," + + " {" + + " \"zone-id\": \"ATL2\"," + + " \"zone-name\": \"ATLNGANW-ATL2\"" + + " }," + + " {" + + " \"zone-id\": \"BOT1\"," + + " \"zone-name\": \"BOTHWAKY-BOT1\"" + + " }," + + " {" + + " \"zone-id\": \"SNG1\"," + + " \"zone-name\": \"SNGPSIAU-SNG1\"" + + " }," + + " {" + + " \"zone-id\": \"NYC1\"," + + " \"zone-name\": \"NYCMNY54-NYC1\"" + + " }," + + " {" + + " \"zone-id\": \"LAG1b\"," + + " \"zone-name\": \"LARGIZON-LAG1b\"" + + " }," + + " {" + + " \"zone-id\": \"AMD15\"," + + " \"zone-name\": \"AMDFAA01-AMD15\"" + + " }," + + " {" + + " \"zone-id\": \"SNA1\"," + + " \"zone-name\": \"SNANTXCA-SNA1\"" + + " }," + + " {" + + " \"zone-id\": \"PLT1\"," + + " \"zone-name\": \"PLTNCA60-PLT1\"" + + " }," + + " {" + + " \"zone-id\": \"TLP1\"," + + " \"zone-name\": \"TLPNXM18-TLP1\"" + + " }," + + " {" + + " \"zone-id\": \"SDD81\"," + + " \"zone-name\": \"SAIT1DD6-SDD81\"" + + " }," + + " {" + + " \"zone-id\": \"DCC1\"," + + " \"zone-name\": \"POIUYTGH-DCC1\"" + + " }," + + " {" + + " \"zone-id\": \"DCC2\"," + + " \"zone-name\": \"POIUYTGH-DCC2\"" + + " }," + + " {" + + " \"zone-id\": \"OKC1\"," + + " \"zone-name\": \"OKCBOK55-OKC1\"" + + " }," + + " {" + + " \"zone-id\": \"PAR1\"," + + " \"zone-name\": \"PARSFRCG-PAR1\"" + + " }," + + " {" + + " \"zone-id\": \"TES36\"," + + " \"zone-name\": \"ABCEETES-TES36\"" + + " }," + + " {" + + " \"zone-id\": \"COM1\"," + + " \"zone-name\": \"PLMKOPIU-COM1\"" + + " }," + + " {" + + " \"zone-id\": \"ANI1\"," + + " \"zone-name\": \"ATLNGTRE-ANI1\"" + + " }," + + " {" + + " \"zone-id\": \"SDG78\"," + + " \"zone-name\": \"SDIT1BDG-SDG78\"" + + " }," + + " {" + + " \"zone-id\": \"mac20\"," + + " \"zone-name\": \"PKGTESTF-mac20\"" + + " }," + + " {" + + " \"zone-id\": \"DSF45\"," + + " \"zone-name\": \"DSFBG123-DSF45\"" + + " }," + + " {" + + " \"zone-id\": \"HST25\"," + + " \"zone-name\": \"HSTNTX01-HST25\"" + + " }," + + " {" + + " \"zone-id\": \"AMD18\"," + + " \"zone-name\": \"AUDIMA01-AMD18\"" + + " }," + + " {" + + " \"zone-id\": \"SAA80\"," + + " \"zone-name\": \"SAIT9AA3-SAA80\"" + + " }," + + " {" + + " \"zone-id\": \"SSA56\"," + + " \"zone-name\": \"SSIT2AA7-SSA56\"" + + " }," + + " {" + + " \"zone-id\": \"SDD82\"," + + " \"zone-name\": \"SAIT1DD9-SDD82\"" + + " }," + + " {" + + " \"zone-id\": \"JCV1\"," + + " \"zone-name\": \"JCVLFLBW-JCV1\"" + + " }," + + " {" + + " \"zone-id\": \"SUL2\"," + + " \"zone-name\": \"WERTYUJK-SUL2\"" + + " }," + + " {" + + " \"zone-id\": \"PUR1\"," + + " \"zone-name\": \"purelyde-PUR1\"" + + " }," + + " {" + + " \"zone-id\": \"FDE55\"," + + " \"zone-name\": \"FDERT555-FDE55\"" + + " }," + + " {" + + " \"zone-id\": \"SITE\"," + + " \"zone-name\": \"LONEENCO-SITE\"" + + " }," + + " {" + + " \"zone-id\": \"ATL1\"," + + " \"zone-name\": \"ATLNGAMA-ATL1\"" + + " }," + + " {" + + " \"zone-id\": \"JUL1\"," + + " \"zone-name\": \"ZXCVBNMM-JUL1\"" + + " }," + + " {" + + " \"zone-id\": \"TAT34\"," + + " \"zone-name\": \"TESAAISB-TAT34\"" + + " }," + + " {" + + " \"zone-id\": \"XCP12\"," + + " \"zone-name\": \"CHKGH123-XCP12\"" + + " }," + + " {" + + " \"zone-id\": \"RAI1\"," + + " \"zone-name\": \"poiuytre-RAI1\"" + + " }," + + " {" + + " \"zone-id\": \"HPO1\"," + + " \"zone-name\": \"ATLNGAUP-HPO1\"" + + " }," + + " {" + + " \"zone-id\": \"KJF12\"," + + " \"zone-name\": \"KJFDH123-KJF12\"" + + " }," + + " {" + + " \"zone-id\": \"SCC80\"," + + " \"zone-name\": \"SAIT9CC3-SCC80\"" + + " }," + + " {" + + " \"zone-id\": \"SAA12\"," + + " \"zone-name\": \"SAIT9AF8-SAA12\"" + + " }," + + " {" + + " \"zone-id\": \"SAA14\"," + + " \"zone-name\": \"SAIT1AA9-SAA14\"" + + " }," + + " {" + + " \"zone-id\": \"ATL35\"," + + " \"zone-name\": \"TTESSAAI-ATL35\"" + + " }," + + " {" + + " \"zone-id\": \"CWY1\"," + + " \"zone-name\": \"CWYMOWBS-CWY1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL76\"," + + " \"zone-name\": \"TELEPAAI-ATL76\"" + + " }," + + " {" + + " \"zone-id\": \"DSL12\"," + + " \"zone-name\": \"DSLFK242-DSL12\"" + + " }," + + " {" + + " \"zone-id\": \"ATL53\"," + + " \"zone-name\": \"AAIATLTE-ATL53\"" + + " }," + + " {" + + " \"zone-id\": \"SAA11\"," + + " \"zone-name\": \"SAIT9AA2-SAA11\"" + + " }," + + " {" + + " \"zone-id\": \"ATL62\"," + + " \"zone-name\": \"TESSASCH-ATL62\"" + + " }," + + " {" + + " \"zone-id\": \"AUG1\"," + + " \"zone-name\": \"ASDFGHJK-AUG1\"" + + " }," + + " {" + + " \"zone-id\": \"POI22\"," + + " \"zone-name\": \"POIUY123-POI22\"" + + " }," + + " {" + + " \"zone-id\": \"SAA13\"," + + " \"zone-name\": \"SAIT1AA9-SAA13\"" + + " }," + + " {" + + " \"zone-id\": \"BHY17\"," + + " \"zone-name\": \"BHYTFRF3-BHY17\"" + + " }," + + " {" + + " \"zone-id\": \"LIS1\"," + + " \"zone-name\": \"HOSTPROF-LIS1\"" + + " }," + + " {" + + " \"zone-id\": \"SIP1\"," + + " \"zone-name\": \"ZXCVBNMK-SIP1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL99\"," + + " \"zone-name\": \"TEESTAAI-ATL43\"" + + " }," + + " {" + + " \"zone-id\": \"ATL64\"," + + " \"zone-name\": \"FORLOAAJ-ATL64\"" + + " }," + + " {" + + " \"zone-id\": \"TAT33\"," + + " \"zone-name\": \"TESAAISA-TAT33\"" + + " }," + + " {" + + " \"zone-id\": \"RAD10\"," + + " \"zone-name\": \"INDIPUNE-RAD10\"" + + " }," + + " {" + + " \"zone-id\": \"RTW5\"," + + " \"zone-name\": \"BHYTFRY4-RTW5\"" + + " }," + + " {" + + " \"zone-id\": \"JGS1\"," + + " \"zone-name\": \"KSJKKKKK-JGS1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL98\"," + + " \"zone-name\": \"TEESTAAI-ATL43\"" + + " }," + + " {" + + " \"zone-id\": \"WAN1\"," + + " \"zone-name\": \"LEIWANGW-WAN1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL44\"," + + " \"zone-name\": \"ATLSANAB-ATL44\"" + + " }," + + " {" + + " \"zone-id\": \"RTD2\"," + + " \"zone-name\": \"BHYTFRk4-RTD2\"" + + " }," + + " {" + + " \"zone-id\": \"NIR1\"," + + " \"zone-name\": \"ORFLMANA-NIR1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL75\"," + + " \"zone-name\": \"SANAAIRE-ATL75\"" + + " }," + + " {" + + " \"zone-id\": \"NUM1\"," + + " \"zone-name\": \"QWERTYUI-NUM1\"" + + " }," + + " {" + + " \"zone-id\": \"MTN32\"," + + " \"zone-name\": \"MDTWNJ21-MTN32\"" + + " }," + + " {" + + " \"zone-id\": \"RTZ4\"," + + " \"zone-name\": \"BHYTFRZ6-RTZ4\"" + + " }," + + " {" + + " \"zone-id\": \"ATL56\"," + + " \"zone-name\": \"ATLSANAC-ATL56\"" + + " }," + + " {" + + " \"zone-id\": \"AMS1\"," + + " \"zone-name\": \"AMSTNLBW-AMS1\"" + + " }," + + " {" + + " \"zone-id\": \"RCT1\"," + + " \"zone-name\": \"AMSTERNL-RCT1\"" + + " }," + + " {" + + " \"zone-id\": \"JAN1\"," + + " \"zone-name\": \"ORFLMATT-JAN1\"" + + " }," + + " {" + + " \"zone-id\": \"ABC14\"," + + " \"zone-name\": \"TESAAISA-ABC14\"" + + " }," + + " {" + + " \"zone-id\": \"TAT37\"," + + " \"zone-name\": \"TESAAISD-TAT37\"" + + " }," + + " {" + + " \"zone-id\": \"MIC54\"," + + " \"zone-name\": \"MICHIGAN-MIC54\"" + + " }," + + " {" + + " \"zone-id\": \"ABC11\"," + + " \"zone-name\": \"ATLSANAI-ABC11\"" + + " }," + + " {" + + " \"zone-id\": \"AMF11\"," + + " \"zone-name\": \"AMDOCS01-AMF11\"" + + " }," + + " {" + + " \"zone-id\": \"ATL63\"," + + " \"zone-name\": \"ATLSANEW-ATL63\"" + + " }," + + " {" + + " \"zone-id\": \"ABC12\"," + + " \"zone-name\": \"ATLSECIA-ABC12\"" + + " }," + + " {" + + " \"zone-id\": \"MTN20\"," + + " \"zone-name\": \"MDTWNJ21-MTN20\"" + + " }," + + " {" + + " \"zone-id\": \"ABC15\"," + + " \"zone-name\": \"AAITESAN-ABC15\"" + + " }," + + " {" + + " \"zone-id\": \"AVT1\"," + + " \"zone-name\": \"AVTRFLHD-AVT1\"" + + " }," + + " {" + + " \"zone-id\": \"ATL34\"," + + " \"zone-name\": \"ATLSANAI-ATL34\"" + + " }" + + " ]" + + " }"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetOneVersion.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetOneVersion.java new file mode 100644 index 000000000..1ccf8b9ea --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetOneVersion.java @@ -0,0 +1,33 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAIGetOneVersion extends BasePresetAAIGetVersion { + + public PresetAAIGetOneVersion(String modelVersionId1, + String modelInvariantId) { + super(modelVersionId1, modelInvariantId); + } + + @Override + public Object getResponseBody() { + return "{\"results\": [" + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"" + getModelInvariantId() + "\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1500138206526\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"" + getModelVersionId1() + "\"," + + " \"model-name\": \"action-data\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"decontamination arm circus ammonia hump edge\"," + + " \"resource-version\": \"1500137463984\"" + + " }" + + " ]" + + " }" + + " }" + + " }" + + " ]}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPNFByRegionErrorPut.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPNFByRegionErrorPut.java new file mode 100644 index 000000000..dd5d0abfc --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPNFByRegionErrorPut.java @@ -0,0 +1,31 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +/** + * Created by itzikliderman on 21/12/2017. + */ +public class PresetAAIGetPNFByRegionErrorPut extends BaseAAIPreset { + + @Override + public Object getResponseBody() { + return "{" + + " \"start\": \"/business/customers/customer/e433710f-9217-458d-a79d-1c7aff376d89/service-subscriptions/service-subscription/VIRTUAL%20USP/service-instances?model-version-id=8a84e59b-45fe-4851-8ff1-34225a0b32c3&model-invariant-id=83b458fd-5dd3-419b-a9e3-7335814a0911\"," + + " \"query\": \"query/pnf-fromModel-byRegion?cloudRegionId=AAIAIC25&equipVendor=Cisco&equipModel=Nexus%203048-TP\"" + + " }"; + } + + @Override + public int getResponseCode() { + return 500; + } + + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + public String getReqPath() { + return getRootPath() + "/query"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPortMirroringSourcePorts.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPortMirroringSourcePorts.java new file mode 100644 index 000000000..22accac1d --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPortMirroringSourcePorts.java @@ -0,0 +1,129 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetPortMirroringSourcePorts extends BaseAAIPreset { + public PresetAAIGetPortMirroringSourcePorts(String configurationId, String interfaceId, String interfaceName, boolean isPortMirrored) { + this.configurationId = configurationId; + this.interfaceId = interfaceId; + this.interfaceName = interfaceName; + this.isPortMirrored = isPortMirrored; + } + + private final String configurationId; + private final String interfaceId; + private final String interfaceName; + private final boolean isPortMirrored; + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "format", Collections.singletonList("simple")); + } + + @Override + public Object getRequestBody() { + return ImmutableMap.of( + "start", "/network/configurations/configuration/" + getConfigurationId(), + "query", "query/pserver-fromConfiguration" + ); + } + + public String getConfigurationId() { + return configurationId; + } + + public String getInterfaceId() { + return interfaceId; + } + + public String getInterfaceName() { return interfaceName; } + + public boolean getIsPortMirrored() { return isPortMirrored; } + + @Override + public Object getResponseBody() { + return "{\n" + + " \"results\": [\n" + + " {\n" + + " \"id\": \"4876980240\",\n" + + " \"node-type\": \"l-interface\",\n" + + " \"url\": \"/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/att-aic/rdm5b/tenants/tenant/460f35aeb53542dc9f77105066483e83/vservers/vserver/15e46e2f-4b98-4e06-9644-f0e6e35cc79a/l-interfaces/l-interface/zrdm5bfprbVLBA005-vlbagent_aff_int_pktmirror_1_port-dr5jhyxva5ib\",\n" + + " \"properties\": {\n" + + " \"interface-name\": " + doubleQuoteIfNotNull(getInterfaceName()) + ",\n" + + " \"selflink\": \"https://network-aic.rdm5b.cci.att.com:9696/v2.0/ports/6de7bf87-6faa-4984-9492-18d1188b3d4a\",\n" + + " \"interface-id\": " + doubleQuoteIfNotNull(getInterfaceId()) + ",\n" + + " \"macaddr\": \"02:6d:e7:bf:87:6f\",\n" + + " \"network-name\": \"APP-C-24595-D-T001-vprobe_int_pktmirror_net_1\",\n" + + " \"is-port-mirrored\": " + getIsPortMirrored() + ",\n" + + " \"resource-version\": \"1519383879190\",\n" + + " \"in-maint\": false,\n" + + " \"is-ip-unnumbered\": false\n" + + " },\n" + + " \"related-to\": [\n" + + " {\n" + + " \"id\": \"4999893128\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.BelongsTo\",\n" + + " \"node-type\": \"l3-interface-ipv4-address-list\",\n" + + " \"url\": \"/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/att-aic/rdm5b/tenants/tenant/460f35aeb53542dc9f77105066483e83/vservers/vserver/15e46e2f-4b98-4e06-9644-f0e6e35cc79a/l-interfaces/l-interface/zrdm5bfprbVLBA005-vlbagent_aff_int_pktmirror_1_port-dr5jhyxva5ib/l3-interface-ipv4-address-list/107.244.46.254\"\n" + + " },\n" + + " {\n" + + " \"id\": \"6150074384\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Source\",\n" + + " \"node-type\": \"logical-link\",\n" + + " \"url\": \"/aai/v12/network/logical-links/logical-link/PMC_a22607fb-8392-42f4-bbe7-b8d845a97183_Sourcezrdm5bepdg_147_lb_2_Gn_UntrustedVrf_5_RVMI_Destzrdm5bfprbVLBA005-vlbagent_aff_int_pktmirror_1_port-dr5jhyxva5ib\"\n" + + " },\n" + + " {\n" + + " \"id\": \"6975434912\",\n" + + " \"relationship-label\": \"tosca.relationships.network.LinksTo\",\n" + + " \"node-type\": \"logical-link\",\n" + + " \"url\": \"/aai/v12/network/logical-links/logical-link/PMC_a22607fb-8392-42f4-bbe7-b8d845a97183_Sourcezrdm5bepdg_147_lb_1_Gn_UntrustedVrf_5_RVMI_Destzrdm5bfprbVLBA005-vlbagent_aff_int_pktmirror_1_port-dr5jhyxva5ib\"\n" + + " },\n" + + " {\n" + + " \"id\": \"7007121568\",\n" + + " \"relationship-label\": \"tosca.relationships.network.LinksTo\",\n" + + " \"node-type\": \"logical-link\",\n" + + " \"url\": \"/aai/v12/network/logical-links/logical-link/PMC_9c099448-a0e1-451d-ac20-c5e3ada8cccd_Sourcezrdm5bepdg_147_lb_2_Gn_UntrustedVrf_5_RVMI_Destzrdm5bfprbVLBA005-vlbagent_aff_int_pktmirror_1_port-dr5jhyxva5ib\"\n" + + " },\n" + + " {\n" + + " \"id\": \"7048110232\",\n" + + " \"relationship-label\": \"tosca.relationships.network.LinksTo\",\n" + + " \"node-type\": \"logical-link\",\n" + + " \"url\": \"/aai/v12/network/logical-links/logical-link/PMC_9c099448-a0e1-451d-ac20-c5e3ada8cccd_Sourcezrdm5bepdg_147_lb_1_Gn_UntrustedVrf_5_RVMI_Destzrdm5bfprbVLBA005-vlbagent_aff_int_pktmirror_1_port-dr5jhyxva5ib\"\n" + + " },\n" + + " {\n" + + " \"id\": \"5491453960\",\n" + + " \"relationship-label\": \"tosca.relationships.network.BindsTo\",\n" + + " \"node-type\": \"vserver\",\n" + + " \"url\": \"/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/att-aic/rdm5b/tenants/tenant/460f35aeb53542dc9f77105066483e83/vservers/vserver/15e46e2f-4b98-4e06-9644-f0e6e35cc79a\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + "}"; + } + + private String doubleQuoteIfNotNull(String str) { + if (str == null) { + return null; + } else { + return "\"" + str + "\""; + } + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPortMirroringSourcePortsError.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPortMirroringSourcePortsError.java new file mode 100644 index 000000000..0f2332397 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetPortMirroringSourcePortsError.java @@ -0,0 +1,18 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAIGetPortMirroringSourcePortsError extends PresetAAIGetPortMirroringSourcePorts { + + public PresetAAIGetPortMirroringSourcePortsError(String configurationId, String interfaceId, String interfaceName, boolean isPortMirrored) { + super(configurationId, interfaceId, interfaceName, isPortMirrored); + } + + @Override + public int getResponseCode() { + return 503; + } + + @Override + public Object getResponseBody() { + return "You are not allowed to do things"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetRelatedInstanceGroupsByVnfId.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetRelatedInstanceGroupsByVnfId.java new file mode 100644 index 000000000..a70a43232 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetRelatedInstanceGroupsByVnfId.java @@ -0,0 +1,129 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetRelatedInstanceGroupsByVnfId extends BaseAAIPreset { + + private String vnfId; + + + public String getVnfId() { + return vnfId; + } + + public void setVnfId(String vnfId) { + this.vnfId = vnfId; + } + + + public PresetAAIGetRelatedInstanceGroupsByVnfId(String vnfId){ + this.vnfId = vnfId; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/network/generic-vnfs/generic-vnf/" + getVnfId(); + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "depth", Collections.singletonList("0") + ); + } + + @Override + public Object getResponseBody() { + return "{\n" + + " \"vnf-id\": \"vnf-id-3\",\n" + + " \"vnf-name\": \"zmtn6nf-code-110\",\n" + + " \"vnf-type\": \"vnf-type\",\n" + + " \"prov-status\": \"NVTPROV\",\n" + + " \"operational-status\": \"out-of-service-path\",\n" + + " \"equipment-role\": \"nf-role-1\",\n" + + " \"in-maint\": false,\n" + + " \"is-closed-loop-disabled\": false,\n" + + " \"resource-version\": \"1524162037142\",\n" + + " \"model-invariant-id\": \"inv-id-5000\",\n" + + " \"model-version-id\": \"ver-id-5000\",\n" + + " \"model-customization-id\": \"vnf-customization-uuid-1\",\n" + + " \"selflink\": \"restconf/config/GENERIC-RESOURCE-API:services/service/bgb-instance-2/service-data/vnfs/vnf/vnf-id-3/vnf-data/vnf-topology\",\n" + + " \"relationship-list\": {\n" + + " \"relationship\": [\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/bgb-net-inst-group-1\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"bgb-net-inst-group-1\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"test\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"instance group name\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"instance-group\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.MemberOf\",\n" + + " \"related-link\": \"/aai/v13/network/instance-groups/instance-group/bgb-net-inst-group-2\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"instance-group.id\",\n" + + " \"relationship-value\": \"bgb-net-inst-group-2\"\n" + + " }\n" + + " ],\n" + + " \"related-to-property\": [\n" + + " {\n" + + " \"property-key\": \"instance-group.description\",\n" + + " \"property-value\": \"test\"\n" + + " },\n" + + " {\n" + + " \"property-key\": \"instance-group.instance-group-name\",\n" + + " \"property-value\": \"instance group name\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"related-to\": \"availability-zone\",\n" + + " \"relationship-label\": \"org.onap.relationships.inventory.Uses\",\n" + + " \"related-link\": \"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mtn6/availability-zones/availability-zone/AZ-MN02\",\n" + + " \"relationship-data\": [\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-owner\",\n" + + " \"relationship-value\": \"att-aic\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"cloud-region.cloud-region-id\",\n" + + " \"relationship-value\": \"mtn6\"\n" + + " },\n" + + " {\n" + + " \"relationship-key\": \"availability-zone.availability-zone-name\",\n" + + " \"relationship-value\": \"AZ-MN02\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + "}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetServiceModelList.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetServiceModelList.java new file mode 100644 index 000000000..48d630139 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetServiceModelList.java @@ -0,0 +1,80 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAIGetServiceModelList extends BasePresetAAIGetVersion { + + public String modelInvariant2; + public String modelInvariant3; + public PresetAAIGetServiceModelList(String modelVersionId1, + String modelInvariantId1, String modelInvariant2, String modelInvariant3) { + super(modelVersionId1, modelInvariantId1); + this.modelInvariant2 = modelInvariant2; + this.modelInvariant3 = modelInvariant3; + } + + public String getModelInvariant2() { + return modelInvariant2; + } + + public void setModelInvariant2(String modelInvariant2) { + this.modelInvariant2 = modelInvariant2; + } + + public String getModelInvariant3() { + return modelInvariant3; + } + + public void setModelInvariant3(String modelInvariant3) { + this.modelInvariant3 = modelInvariant3; + } + + @Override + public Object getResponseBody() { + return "{\n" + + "\"results\": [\n" + + " {\"model\": { \n" + + " \"model-invariant-id\": \"" + getModelInvariantId() + "\"," + + " \"model-type\": \"service\",\n" + + " \"resource-version\": \"1515103312329\",\n" + + " \"model-vers\": {\"model-ver\": [\n" + + " {\n" + + " \"model-version-id\": \"" + getModelVersionId1() + "\"," + + " \"model-name\": \"AAAvIRC_mm779p_Service\",\n" + + " \"model-version\": \"1.0\",\n" + + " \"distribution-status\": \"DISTRIBUTION_COMPLETE_OK\",\n" + + " \"model-description\": \"tbd\",\n" + + " \"resource-version\": \"1516206395612\"\n" + + " }\n" + + " ]}\n" + + " }},\n" + + " {\"model\": { \n" + + " \"model-invariant-id\": \"" + getModelInvariant2() + "\"," + + " \"model-type\": \"service\",\n" + + " \"resource-version\": \"1515103312329\",\n" + + " \"model-vers\": {\"model-ver\": [\n" + + " {\n" + + " \"model-version-id\": \"1dae721c-a1ef-435f-b811-760c23f467bf\",\n" + + " \"model-name\": \"BBBvIRC_mm779p_Service\",\n" + + " \"model-version\": \"3.0\",\n" + + " \"model-description\": \"tbd\",\n" + + " \"resource-version\": \"1516025197086\"\n" + + " }\n" + + " ]}\n" + + " }},\n" + + " {\"model\": { \n" + + " \"model-invariant-id\": \"" + getModelInvariant3() + "\"," + + " \"model-type\": \"service\",\n" + + " \"resource-version\": \"1515103312329\",\n" + + " \"model-vers\": {\"model-ver\": [\n" + + "{\n" + + " \"model-version-id\": \"29236d45-e790-4c17-a115-1533cc09b7b1\",\n" + + " \"model-name\": \"CCCvIRC_mm779p_Service\",\n" + + " \"model-version\": \"4.0\",\n" + + " \"distribution-status\": \"DISTRIBUTION_COMPLETE_ERROR\",\n" + + " \"model-description\": \"tbd\",\n" + + " \"resource-version\": \"1517319724440\"\n" + + " }\n" + + " ]}\n" + + " }}\n" + + "]}\n"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetServicesGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetServicesGet.java new file mode 100644 index 000000000..e97e5fe3b --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetServicesGet.java @@ -0,0 +1,122 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAIGetServicesGet extends PresetAAIBaseGetServicesGet { + + @Override + public Object getResponseBody() { + return responseBody; + } + + private String responseBody = "{\"service\":[" + + " {" + + " \"service-id\":\"ebc3bc3d-62fd-4a3f-a037-f619df4ff034\"," + + " \"service-description\":\"DHV\"," + + " \"resource-version\":\"1494001985150\"" + + " }," + + " {" + + " \"service-id\":\"17cc1042-527b-11e6-beb8-9e71128cae77\"," + + " \"service-description\":\"FLEXREACH\"," + + " \"resource-version\":\"1494001922171\"" + + " }," + + " {" + + " \"service-id\":\"36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e\"," + + " \"service-description\":\"Netbond\"," + + " \"resource-version\":\"1494001855144\"" + + " }," + + " {" + + " \"service-id\":\"a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7\"," + + " \"service-description\":\"Enhanced Services\"," + + " \"resource-version\":\"1494001980153\"" + + " }," + + " {" + + " \"service-id\":\"vRRaaS\"," + + " \"service-description\":\"vRRaaS\"," + + " \"resource-version\":\"1484865266\"" + + " }," + + " {" + + " \"service-id\":\"323d69d9-2efe-4r45-ay0a-89ea7ard4e6f\"," + + " \"service-description\":\"vSCP\"," + + " \"resource-version\":\"1494001903012\"" + + " }," + + " {" + + " \"service-id\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"," + + " \"service-description\":\"Mobility\"," + + " \"resource-version\":\"1503954056794\"" + + " }," + + " {" + + " \"service-id\":\"d8a6ed93-251c-47ca-adc9-86671fd19f4c\"," + + " \"service-description\":\"BVOIP\"," + + " \"resource-version\":\"1490910089351\"" + + " }," + + " {" + + " \"service-id\":\"db171b8f-115c-4992-a2e3-ee04cae357e0\"," + + " \"service-description\":\"FIRSTNET\"," + + " \"resource-version\":\"1490910095155\"" + + " }," + + " {" + + " \"service-id\":\"LRSI-OSPF\"," + + " \"service-description\":\"LRSI-OSPF\"," + + " \"resource-version\":\"1494001863930\"" + + " }," + + " {" + + " \"service-id\":\"vHNGWaas\"," + + " \"service-description\":\"HNGATEWAY\"," + + " \"resource-version\":\"1501192849249\"" + + " }," + + " {" + + " \"service-id\":\"vHNPaas\"," + + " \"service-description\":\"HNPORTAL\"," + + " \"resource-version\":\"1501192982895\"" + + " }," + + " {" + + " \"service-id\":\"e433710f-9217-458d-a79d-1c7aff376d89\"," + + " \"service-description\":\"VIRTUAL USP\"," + + " \"resource-version\":\"1494001802638\"" + + " }," + + " {" + + " \"service-id\":\"b6a3f28c-eebf-494c-a900-055cc7c874ce\"," + + " \"service-description\":\"VROUTER\"," + + " \"resource-version\":\"1492533254036\"" + + " }," + + " {" + + " \"service-id\":\"VIPRaaS\"," + + " \"service-description\":\"vIPRaaS\"," + + " \"resource-version\":\"1490910058887\"" + + " }," + + " {" + + " \"service-id\":\"0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1\"," + + " \"service-description\":\"WAN Bonding\"," + + " \"resource-version\":\"1498053422512\"" + + " }," + + " {" + + " \"service-id\":\"c7611ebe-c324-48f1-8085-94aef0c6ef3d\"," + + " \"service-description\":\"HOSTED COMMUNICATIONS\"," + + " \"resource-version\":\"1494001913639\"" + + " }," + + " {" + + " \"service-id\":\"e30755dc-5673-4b6b-9dcf-9abdd96b93d1\"," + + " \"service-description\":\"Transport\"," + + " \"resource-version\":\"1506361785997\"" + + " }," + + " {" + + " \"service-id\":\"vVIGaaS\"," + + " \"service-description\":\"vVIGaaS\"," + + " \"resource-version\":\"1494001900545\"" + + " }," + + " {" + + " \"service-id\":\"d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4\"," + + " \"service-description\":\"uCPE-VMS\"," + + " \"resource-version\":\"1494001941772\"" + + " }," + + " {" + + " \"service-id\":\"vPEaaS\"," + + " \"service-description\":\"vPEaaS\"," + + " \"resource-version\":\"1494001988229\"" + + " }," + + " {" + + " \"service-id\":\"12a96a9d-4b4c-4349-a950-fe1159602621\"," + + " \"service-description\":\"HOSTED COMMUNICATIONS\"," + + " \"resource-version\":\"1494001817126\"" + + " }" + + " ]}"; +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubDetailsGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubDetailsGet.java new file mode 100644 index 000000000..5b9f2ff96 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubDetailsGet.java @@ -0,0 +1,46 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static vid.automation.test.utils.ReadFile.loadResourceAsString; + +public class PresetAAIGetSubDetailsGet extends BaseAAIPreset { + private String subscriberId; + private String responseBody; + + private static final String baseResponseBody = loadResourceAsString("presets_templates/PresetAAIGetSubDetailsGet.json"); + private static final String GLOBAL_CUSTOMER_ID = "GLOBAL_CUSTOMER_ID"; + + public PresetAAIGetSubDetailsGet(String subscriberId) { + this.subscriberId = subscriberId == null ? "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb" : subscriberId; + this.responseBody = baseResponseBody.replace(GLOBAL_CUSTOMER_ID, this.subscriberId); + } + + public void mapQueryParams(Map<String, List> map) { + map.put("depth", Collections.singletonList("2")); + } + + @Override + public Object getResponseBody() { + return responseBody; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/business/customers/customer/" + getSubscriberId(); + } + + public String getSubscriberId() { + return subscriberId; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubscribersGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubscribersGet.java new file mode 100644 index 000000000..955771295 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubscribersGet.java @@ -0,0 +1,159 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.opencomp.simulator.presetGenerator.presets.model.Subscriber; +import org.springframework.http.HttpMethod; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PresetAAIGetSubscribersGet extends BaseAAIPreset { + + private static ObjectMapper objectMapper = new ObjectMapper(); + private List<Subscriber> subscriberList; + + public PresetAAIGetSubscribersGet(List<Subscriber> subscriberList) { + this.subscriberList = subscriberList; + } + + public PresetAAIGetSubscribersGet() { + TypeReference<List<Subscriber>> typeRef + = new TypeReference<List<Subscriber>>() {}; + + // like registration_to_simulator/create_new_instance/aai_get_full_subscribers.json + String subscribersString = "" + + "[ " + + " { " + + " \"global-customer-id\":\"MSO_1610_ST\", " + + " \"subscriber-name\":\"MSO_1610_ST\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1494001902987\" " + + " }, " + + " { " + + " \"global-customer-id\":\"21014aa2-526b-11e6-beb8-9e71128cae77\", " + + " \"subscriber-name\":\"PACKET CORE\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1494001776295\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1707-TestSubscriber-2\", " + + " \"subscriber-name\":\"ICORE CORE\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1498751754450\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1707-TestSubscriber-1\", " + + " \"subscriber-name\":\"PACKET1 CORE\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1498595633607\" " + + " }, " + + " { " + + " \"global-customer-id\":\"jimmy-example\", " + + " \"subscriber-name\":\"JimmyExampleCust-20161102\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1494001970063\" " + + " }, " + + " { " + + " \"global-customer-id\":\"jimmy-example2\", " + + " \"subscriber-name\":\"JimmyExampleCust-20161103\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1494001970225\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1802-TestSub-PWT-102\", " + + " \"subscriber-name\":\"DHV1802-TestSub-PWT-102\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1508852495058\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1802-TestSub-PWT-101\", " + + " \"subscriber-name\":\"DHV1802-TestSub-PWT-101\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1508179953733\" " + + " }, " + + " { " + + " \"global-customer-id\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\", " + + " \"subscriber-name\":\"Mobility\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1494001894192\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1802-Subscriber-4\", " + + " \"subscriber-name\":\"DHV1802-Subscriber-5\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1509134064531\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1802-TestSub-PWT-103\", " + + " \"subscriber-name\":\"DHV1802-TestSub-PWT-103\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1509045503736\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1802-Subscriber-2\", " + + " \"subscriber-name\":\"DHV1802-Subscriber-2\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1509122065439\" " + + " }, " + + " { " + + " \"global-customer-id\":\"e433710f-9217-458d-a79d-1c7aff376d89\", " + + " \"subscriber-name\":\"USP VOICE\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1494001938080\" " + + " }, " + + " { " + + " \"global-customer-id\":\"DHV1802-Subscriber-3\", " + + " \"subscriber-name\":\"DHV1802-Subscriber-3\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1509122759407\" " + + " }, " + + " { " + + " \"global-customer-id\":\"31739f3e-526b-11e6-beb8-9e71128cae77\", " + + " \"subscriber-name\":\"FIREWALL/MISC\", " + + " \"subscriber-type\":\"INFRA\", " + + " \"resource-version\":\"1494001772223\" " + + " } " + + " ] "; + try { + this.subscriberList = objectMapper.readValue(subscribersString, typeRef); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public List<Subscriber> getSubscriberList() { + return subscriberList; + } + + public void setSubscriberList(List<Subscriber> subscriberList) { + this.subscriberList = subscriberList; + } + + @Override + public Object getResponseBody() { + return ImmutableMap.of("customer", subscriberList); + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of( + "subscriber-type", Collections.singletonList("INFRA"), + "depth", Collections.singletonList("0")); + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/business/customers"; + } + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubscribersGetInvalidResponse.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubscribersGetInvalidResponse.java new file mode 100644 index 000000000..d5da2a92a --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetSubscribersGetInvalidResponse.java @@ -0,0 +1,17 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAIGetSubscribersGetInvalidResponse extends PresetAAIGetSubscribersGet { + private int httpCode; + + public PresetAAIGetSubscribersGetInvalidResponse(int httpCode) { + this.httpCode = httpCode; + } + + @Override + public int getResponseCode() { return httpCode; } + + @Override + public Object getResponseBody() { + return "this payload is an invalid json"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetTenants.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetTenants.java new file mode 100644 index 000000000..45b577df4 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIGetTenants.java @@ -0,0 +1,27 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import static vid.automation.test.utils.ReadFile.loadResourceAsString; + +public class PresetAAIGetTenants extends BaseAAIPreset { + + @Override + public Object getResponseBody() { + return responseBody; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return getRootPath() + "/business/customers/customer/e433710f-9217-458d-a79d-1c7aff376d89/service-subscriptions/service-subscription/VIRTUAL USP"; + } + + private String responseBody = loadResourceAsString("presets_templates/PresetAAIGetTenants.json"); + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIPostNamedQueryForViewEdit.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIPostNamedQueryForViewEdit.java new file mode 100644 index 000000000..07d7f1df6 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIPostNamedQueryForViewEdit.java @@ -0,0 +1,100 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +public class PresetAAIPostNamedQueryForViewEdit extends BaseAAIPreset { + + private final String serviceInstanceId; + private final boolean hasConfigurationInstance; + + public PresetAAIPostNamedQueryForViewEdit(String serviceInstanceId) { + this(serviceInstanceId, true); + } + + public PresetAAIPostNamedQueryForViewEdit(String serviceInstanceId, boolean hasConfigurationInstance) { + this.serviceInstanceId = serviceInstanceId; + this.hasConfigurationInstance = hasConfigurationInstance; + } + + // inspired by + // registration_to_simulator/search_for_service_instance/aai_named_query_for_view_edit_test_sssdad.json + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.POST; + } + + @Override + public String getReqPath() { + return "/aai/search/named-query"; + } + + @Override + public Object getRequestBody() { + return "" + + "{" + + " \"instance-filters\": {" + + " \"instance-filter\": [{" + + " \"customer\": {" + + " \"global-customer-id\": \"e433710f-9217-458d-a79d-1c7aff376d89\"" + + " }," + + " \"service-instance\": {" + + //" \"service-instance-id\": \"c187e9fe-40c3-4862-b73e-84ff056205f6\"" + + " \"service-instance-id\": \"" + serviceInstanceId + "\"" + + " }," + + " \"service-subscription\": {" + + " \"service-type\": \"VIRTUAL USP\"" + + " }" + + " }" + + " ]" + + " }," + + " \"query-parameters\": {" + + " \"named-query\": {" + + " \"named-query-uuid\": \"0367193e-c785-4d5f-9cb8-7bc89dc9ddb7\"" + + " }" + + " }" + + "}"; + } + + @Override + public Object getResponseBody() { + String response = + "{" + + " \"inventory-response-item\": [{" + + " \"model-name\": \"0eOHz2Yh8WJcBYzKy079\"," + + " \"service-instance\": {" + + " \"service-instance-id\": \"" + serviceInstanceId + "\"," + + " \"service-instance-name\": \"test_sssdad\"" + + " }," + + " \"extra-properties\": {}"; + if(hasConfigurationInstance) { + response += "," + + " \"inventory-response-items\": {" + + " \"inventory-response-item\": [{" + + " \"model-name\": \"Proxy-Config-Instance\"," + + " \"configuration\": {" + + " \"configuration-id\": \"9533-config-LB1113\"," + + " \"configuration-name\": \"dummy_instance\"," + + " \"configuration-type\": \"configuration-type-9533\"," + + " \"configuration-sub-type\": \"configuration-sub-type-9533\"," + + " \"model-invariant-id\": \"model-invariant-id-9533\"," + + " \"model-version-id\": \"model-version-id-9533\"," + + //" \"orchestration-status\": \"<ORCH_STATUS>\"," + + " \"orchestration-status\": \"Active\"," + + " \"operational-status\": \"\"," + + " \"configuration-selflink\": \"\"," + + " \"model-customization-id\": \"08a181aa-72eb-435f-9593-e88a3ad0a86b\"," + + " \"resource-version\": \"1504038855716\"" + + " }," + + " \"extra-properties\": {}" + + " }" + + " ]" + + " }"; + } + response += " }" + + " ]" + + "}"; + return response; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAISearchNodeQueryEmptyResult.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAISearchNodeQueryEmptyResult.java new file mode 100644 index 000000000..154aff755 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAISearchNodeQueryEmptyResult.java @@ -0,0 +1,14 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +public class PresetAAISearchNodeQueryEmptyResult extends PresetAAIBaseSearchNodeQuery { + + @Override + public Object getResponseBody() { + return "{}"; + } + + @Override + public int getResponseCode() { + return 200; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIServiceDesignAndCreationPut.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIServiceDesignAndCreationPut.java new file mode 100644 index 000000000..6a20c4796 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/aai/PresetAAIServiceDesignAndCreationPut.java @@ -0,0 +1,427 @@ +package org.opencomp.simulator.presetGenerator.presets.aai; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class PresetAAIServiceDesignAndCreationPut extends BaseAAIPreset { + + public PresetAAIServiceDesignAndCreationPut(boolean emptyList) { + serviceModelIdentifiers = ImmutableList.of(); + this.emptyList = emptyList; + } + + public PresetAAIServiceDesignAndCreationPut(String modelVersionId, String modelInvariantId) { + serviceModelIdentifiers = ImmutableList.of(new ServiceModelIdentifiers(modelVersionId, modelInvariantId)); + } + + public PresetAAIServiceDesignAndCreationPut(List<ServiceModelIdentifiers> serviceModelIdentifiers) { + this.serviceModelIdentifiers = serviceModelIdentifiers; + } + + public static class ServiceModelIdentifiers { + public final String modelVersionId; + public final String modelInvariantId; + + public ServiceModelIdentifiers(String modelVersionId, String modelInvariantId) { + this.modelVersionId = modelVersionId; + this.modelInvariantId = modelInvariantId; + } + } + + private List<ServiceModelIdentifiers> serviceModelIdentifiers; + boolean emptyList; + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.PUT; + } + + @Override + public String getReqPath() { + return getRootPath() + "/query"; + } + + @Override + public Map<String, List> getQueryParams() { + return ImmutableMap.of("format", Collections.singletonList("resource")); + } + + @Override + public Object getRequestBody() { + return "{\"start\" : \"service-design-and-creation/models/\", \"query\" : \"query/serviceModels-byDistributionStatus?distributionStatus=DISTRIBUTION_COMPLETE_OK\"}"; + } + + + + private String presetModels() { + return + serviceModelIdentifiers.stream().map(identifiers -> + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"" + identifiers.modelInvariantId + "\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1500138206526\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"" + identifiers.modelVersionId + "\"," + + " \"model-name\": \"action-data\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"lustre settler sideways volcanic eight cellular\"," + + " \"resource-version\": \"1500137463984\"," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"model-element\"," + + " \"relationship-label\": \"isA\"," + + " \"related-link\": \"/aai/v12/service-design-and-creation/models/model/l2-bridge-for-wan-connector-model-id-ps-02/model-vers/model-ver/l2-bridge-for-wan-connector-resource-id-ps-02/model-elements/model-element/e874da22-729d-47bd-8c08-d596fd9c213d/model-elements/model-element/ccbb65b8-2faf-4f5f-80d9-804bb50f1455\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"model.model-invariant-id\"," + + " \"relationship-value\": \"l2-bridge-for-wan-connector-model-id-ps-02\"" + + " }," + + " {" + + " \"relationship-key\": \"model-ver.model-version-id\"," + + " \"relationship-value\": \"l2-bridge-for-wan-connector-resource-id-ps-02\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"e874da22-729d-47bd-8c08-d596fd9c213d\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"ccbb65b8-2faf-4f5f-80d9-804bb50f1455\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " ]" + + " }" + + " }" + + " }," + ).collect(Collectors.joining()); + } + + + @Override + public Object getResponseBody() { + if(emptyList) { + return "{\"results\": [{}]}"; + } + return "{\"results\": [" + + presetModels()+ + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"00beb8f9-6d39-452f-816d-c709b9cbb87d\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"4076846985447\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"0903e1c0-8e03-4936-b5c2-260653b96413\"," + + " \"model-name\": \"action-data\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"honor immunity exile prong below misshapen\"," + + " \"resource-version\": \"4076846985447\"" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"ea78c9e3-514d-4a0a-9162-13837fa54c35\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1500137034452\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"666a06ee-4b57-46df-bacf-908da8f10c3f\"," + + " \"model-name\": \"multicast-configuration\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"python bullwhip appointment computation ambidextrous heaving\"," + + " \"resource-version\": \"1500136282691\"" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"78ca26d0-246d-11e7-93ae-92361f002671\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1492627634298\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"20c4431c-246d-11e7-93ae-92361f002671\"," + + " \"model-name\": \"vSAMP10aDEV::base::module-0\"," + + " \"model-version\": \"2\"," + + " \"model-description\": \"MSO aLaCarte VF vSAMP10aDEV Base\"," + + " \"resource-version\": \"1492627634300\"" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"5b607929-6088-4614-97ef-cac817508e0e\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1492814035001\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"797a6c41-0f80-4d35-a288-3920c4e06baa\"," + + " \"model-name\": \"CONTRAIL30_L2NODHCP\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"contrail 3.0.x L2 network for AIC 3.x sites (and No DHCP).\"," + + " \"resource-version\": \"1492814035003\"," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"model-element\"," + + " \"relationship-label\": \"isA\"," + + " \"related-link\": \"/aai/v12/service-design-and-creation/models/model/52b49b5d-3086-4ffd-b5e6-1b1e5e7e062f/model-vers/model-ver/aed5a5b7-20d3-44f7-90a3-ddbd16f14d1e/model-elements/model-element/2f622421-1c67-4142-be6e-cecad5242af6/model-elements/model-element/2add7556-a23b-46b8-b6b4-ad300b47ceab\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"model.model-invariant-id\"," + + " \"relationship-value\": \"52b49b5d-3086-4ffd-b5e6-1b1e5e7e062f\"" + + " }," + + " {" + + " \"relationship-key\": \"model-ver.model-version-id\"," + + " \"relationship-value\": \"aed5a5b7-20d3-44f7-90a3-ddbd16f14d1e\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"2f622421-1c67-4142-be6e-cecad5242af6\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"2add7556-a23b-46b8-b6b4-ad300b47ceab\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"0143d57b-a517-4de9-a0a1-eb76db51f402\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1497897268768\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"f1bde010-cc5f-4765-941f-75f15b24f9fc\"," + + " \"model-name\": \"BkVmxAv061917..base_vPE_AV..module-0\"," + + " \"model-version\": \"2\"," + + " \"resource-version\": \"1497897268769\"," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"model-element\"," + + " \"relationship-label\": \"isA\"," + + " \"related-link\": \"/aai/v12/service-design-and-creation/models/model/267ef491-3c1a-4c32-8e69-0e557bfb61e7/model-vers/model-ver/18655c7f-c846-4934-9e25-34378dfd33d6/model-elements/model-element/578492b2-36a4-47da-83dc-91b58c699ad1/model-elements/model-element/6b1fc7a5-fc01-4a9d-a87f-0ad0d8caa13f\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"model.model-invariant-id\"," + + " \"relationship-value\": \"267ef491-3c1a-4c32-8e69-0e557bfb61e7\"" + + " }," + + " {" + + " \"relationship-key\": \"model-ver.model-version-id\"," + + " \"relationship-value\": \"18655c7f-c846-4934-9e25-34378dfd33d6\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"578492b2-36a4-47da-83dc-91b58c699ad1\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"6b1fc7a5-fc01-4a9d-a87f-0ad0d8caa13f\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"ipe-resource-id-ps-02\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1493389430122\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"ipe-resource-id-ps-02\"," + + " \"model-name\": \"abc\"," + + " \"model-version\": \"v1.0\"," + + " \"resource-version\": \"1493389520357\"," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"model-element\"," + + " \"relationship-label\": \"isA\"," + + " \"related-link\": \"/aai/v12/service-design-and-creation/models/model/l2-bridge-for-wan-connector-model-id-ps-02/model-vers/model-ver/l2-bridge-for-wan-connector-resource-id-ps-02/model-elements/model-element/e874da22-729d-47bd-8c08-d596fd9c213d/model-elements/model-element/ccbb65b8-2faf-4f5f-80d9-804bb50f1455\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"model.model-invariant-id\"," + + " \"relationship-value\": \"l2-bridge-for-wan-connector-model-id-ps-02\"" + + " }," + + " {" + + " \"relationship-key\": \"model-ver.model-version-id\"," + + " \"relationship-value\": \"l2-bridge-for-wan-connector-resource-id-ps-02\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"e874da22-729d-47bd-8c08-d596fd9c213d\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"ccbb65b8-2faf-4f5f-80d9-804bb50f1455\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"lmoser410-connector-model-id\"," + + " \"model-type\": \"widget\"," + + " \"resource-version\": \"1493389512180\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"lmoser410-connector-model-version-id\"," + + " \"model-name\": \"connector\"," + + " \"model-version\": \"v1.0\"," + + " \"resource-version\": \"1493389444766\"" + + " }" + + " ]" + + " }," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"named-query-element\"," + + " \"relationship-label\": \"isA\"," + + " \"related-link\": \"/aai/v12/service-design-and-creation/named-queries/named-query/lmoser410-named-query-uuid/named-query-elements/named-query-element/48278a7d-2b1e-454f-89e6-5c0ba145f486\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"named-query.named-query-uuid\"," + + " \"relationship-value\": \"lmoser410-named-query-uuid\"" + + " }," + + " {" + + " \"relationship-key\": \"named-query-element.named-query-element-uuid\"," + + " \"relationship-value\": \"48278a7d-2b1e-454f-89e6-5c0ba145f486\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"3a97db99-c4bb-498a-a13a-38f65f1ced3d\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1492630209768\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"ff2ae348-214a-11e7-93ae-92361f002673\"," + + " \"model-name\": \"vSAMP10aDEV::base::module-0\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"MACRO_vSAMP_module\"," + + " \"resource-version\": \"1492630209769\"" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"3c504d40-b847-424c-9d25-4fb7e0a3e994\"," + + " \"model-type\": \"widget\"," + + " \"resource-version\": \"1493389430124\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"204c641a-3494-48c8-979a-86856f5fd32a\"," + + " \"model-name\": \"named-query-element\"," + + " \"model-version\": \"1.0\"," + + " \"resource-version\": \"1493389423212\"" + + " }" + + " ]" + + " }" + + " }" + + " }," + + " {" + + " \"model\": {" + + " \"model-invariant-id\": \"93e56950-cb19-44e6-ace4-8b50f2d02e45\"," + + " \"model-type\": \"resource\"," + + " \"resource-version\": \"1497898974232\"," + + " \"model-vers\": {" + + " \"model-ver\": [" + + " {" + + " \"model-version-id\": \"acba1f72-c6e0-477f-9426-ad190151e100\"," + + " \"model-name\": \"RG_6-19_Test\"," + + " \"model-version\": \"1.0\"," + + " \"model-description\": \"RG_6-19_Test\"," + + " \"resource-version\": \"1497898974233\"," + + " \"relationship-list\": {" + + " \"relationship\": [" + + " {" + + " \"related-to\": \"model-element\"," + + " \"relationship-label\": \"isA\"," + + " \"related-link\": \"/aai/v12/service-design-and-creation/models/model/a07220ba-954e-422f-86b5-e8b95fe6b116/model-vers/model-ver/bf6dbd68-2c7d-4ba2-ade1-dfd4476aa505/model-elements/model-element/6e10fe2e-6d04-4198-9124-dd051a5ae65f/model-elements/model-element/cb3c22e1-9dc6-467f-9636-0a7aef10d5d0\"," + + " \"relationship-data\": [" + + " {" + + " \"relationship-key\": \"model.model-invariant-id\"," + + " \"relationship-value\": \"a07220ba-954e-422f-86b5-e8b95fe6b116\"" + + " }," + + " {" + + " \"relationship-key\": \"model-ver.model-version-id\"," + + " \"relationship-value\": \"bf6dbd68-2c7d-4ba2-ade1-dfd4476aa505\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"6e10fe2e-6d04-4198-9124-dd051a5ae65f\"" + + " }," + + " {" + + " \"relationship-key\": \"model-element.model-element-uuid\"," + + " \"relationship-value\": \"cb3c22e1-9dc6-467f-9636-0a7aef10d5d0\"" + + " }" + + " ]" + + " }" + + " ]" + + " }" + + " }" + + " ]" + + " }" + + " }" + + " }" + + " ]}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/EcompPortalPresetsUtils.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/EcompPortalPresetsUtils.java new file mode 100644 index 000000000..5363eac4a --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/EcompPortalPresetsUtils.java @@ -0,0 +1,18 @@ +package org.opencomp.simulator.presetGenerator.presets.ecompportal_att; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset; + +import java.util.Arrays; +import java.util.List; + +public class EcompPortalPresetsUtils { + + private final static List<BasePreset> ecompPortalPresets = Arrays.asList( + new PresetGetUserGet(), + new PresetGetSessionSlotCheckIntervalGet(), + new PresetExtendSessionTimeOutsPost()); + + public static List<BasePreset> getEcompPortalPresets() { + return ecompPortalPresets; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetExtendSessionTimeOutsPost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetExtendSessionTimeOutsPost.java new file mode 100644 index 000000000..c8d61df25 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetExtendSessionTimeOutsPost.java @@ -0,0 +1,18 @@ +package org.opencomp.simulator.presetGenerator.presets.ecompportal_att; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseEcompPortalPreset; +import org.springframework.http.HttpMethod; + +public class PresetExtendSessionTimeOutsPost extends BaseEcompPortalPreset { + public Object getResponseBody() { + return "300000"; + } + + public HttpMethod getReqMethod() { + return HttpMethod.POST; + } + + public String getReqPath() { + return getRootPath() + "//extendSessionTimeOuts"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetGetSessionSlotCheckIntervalGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetGetSessionSlotCheckIntervalGet.java new file mode 100644 index 000000000..c35dfcda5 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetGetSessionSlotCheckIntervalGet.java @@ -0,0 +1,18 @@ +package org.opencomp.simulator.presetGenerator.presets.ecompportal_att; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseEcompPortalPreset; +import org.springframework.http.HttpMethod; + +public class PresetGetSessionSlotCheckIntervalGet extends BaseEcompPortalPreset { + public Object getResponseBody() { + return "300000"; + } + + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + public String getReqPath() { + return getRootPath() + "//getSessionSlotCheckInterval"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetGetUserGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetGetUserGet.java new file mode 100644 index 000000000..b046b77c8 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/ecompportal_att/PresetGetUserGet.java @@ -0,0 +1,20 @@ +package org.opencomp.simulator.presetGenerator.presets.ecompportal_att; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseEcompPortalPreset; +import org.springframework.http.HttpMethod; + +import java.util.Collections; + +public class PresetGetUserGet extends BaseEcompPortalPreset { + public Object getResponseBody() { + return Collections.EMPTY_LIST; + } + + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + public String getReqPath() { + return getRootPath() + "/context/get_user"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/model/RegistrationRequest.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/model/RegistrationRequest.java new file mode 100644 index 000000000..2b1cdeb5c --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/model/RegistrationRequest.java @@ -0,0 +1,54 @@ +package org.opencomp.simulator.presetGenerator.presets.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import org.springframework.http.HttpMethod; + +import java.util.List; +import java.util.Map; + +public class RegistrationRequest { + + public static class SimulatorRequest { + public final HttpMethod method; + public final String path; + + @JsonInclude(JsonInclude.Include.NON_NULL) + public final Map<String,List> queryParams; + + @JsonInclude(JsonInclude.Include.NON_NULL) + public final Object body; + + public SimulatorRequest(HttpMethod method, String path, Map<String, List> queryParams, Object body) { + this.method = method; + this.path = path; + this.queryParams = queryParams; + this.body = body; + } + } + + public static class SimulatorResponse { + public final int responseCode; + public final Map<String,String> responseHeaders; + + @JsonInclude(JsonInclude.Include.NON_NULL) + public final Object body; + + @JsonInclude(JsonInclude.Include.NON_NULL) + public final String file; + + public SimulatorResponse(int responseCode, Map<String, String> responseHeaders, Object body, String file) { + this.responseCode = responseCode; + this.responseHeaders = responseHeaders; + this.body = body; + this.file = file; + } + } + + public SimulatorRequest simulatorRequest; + public SimulatorResponse simulatorResponse; + + public RegistrationRequest(SimulatorRequest simulatorRequest, SimulatorResponse simulatorResponse) { + this.simulatorRequest = simulatorRequest; + this.simulatorResponse = simulatorResponse; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/model/Subscriber.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/model/Subscriber.java new file mode 100644 index 000000000..0ec3b18c5 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/model/Subscriber.java @@ -0,0 +1,19 @@ +package org.opencomp.simulator.presetGenerator.presets.model; + + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class Subscriber { + + @JsonProperty("global-customer-id") + public String globalCustomerId; + + @JsonProperty("subscriber-name") + public String subscriberName; + + @JsonProperty("subscriber-type") + public String subscriberType; + + @JsonProperty("resource-version") + public String resourceVersion; +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetActivateServiceInstancePost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetActivateServiceInstancePost.java new file mode 100644 index 000000000..3ea8c16c0 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetActivateServiceInstancePost.java @@ -0,0 +1,12 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseMSOPresetServiceInstanceOperationsPost; + +/** + * Created by itzikliderman on 13/12/2017. + */ +public class PresetActivateServiceInstancePost extends BaseMSOPresetServiceInstanceOperationsPost { + public String getReqPath() { + return getRootPath() + "/activate"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetDeactivateServiceInstancePost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetDeactivateServiceInstancePost.java new file mode 100644 index 000000000..99eea8152 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetDeactivateServiceInstancePost.java @@ -0,0 +1,12 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseMSOPresetServiceInstanceOperationsPost; + +/** + * Created by itzikliderman on 13/12/2017. + */ +public class PresetDeactivateServiceInstancePost extends BaseMSOPresetServiceInstanceOperationsPost { + public String getReqPath() { + return getRootPath() + "/deactivate"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOAssignServiceInstanceGen2WithNames.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOAssignServiceInstanceGen2WithNames.java new file mode 100644 index 000000000..09f1f508a --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOAssignServiceInstanceGen2WithNames.java @@ -0,0 +1,16 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import java.util.Map; + +public class PresetMSOAssignServiceInstanceGen2WithNames extends PresetMSOServiceInstanceGen2WithNames { + + + public PresetMSOAssignServiceInstanceGen2WithNames(Map<Keys, String> names, int suffix) { + super(names, suffix); + } + + @Override + public String getReqPath() { + return getRootPath() + "/serviceInstantiation/v7/serviceInstances/assign"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOBaseCreateServiceInstancePost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOBaseCreateServiceInstancePost.java new file mode 100644 index 000000000..73e99b526 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOBaseCreateServiceInstancePost.java @@ -0,0 +1,34 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset; +import org.springframework.http.HttpMethod; + +public abstract class PresetMSOBaseCreateServiceInstancePost extends BaseMSOPreset { + private final String requestId; + public static final String DEFAULT_REQUEST_ID = "c0011670-0e1a-4b74-945d-8bf5aede1d9c"; + + public PresetMSOBaseCreateServiceInstancePost() { + this(null); + } + + public PresetMSOBaseCreateServiceInstancePost(String requestId) { + this.requestId = requestId != null ? requestId : DEFAULT_REQUEST_ID; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.POST; + } + + @Override + public int getResponseCode() { + return 202; + } + + + + @Override + public Object getResponseBody() { + return "{\"requestReferences\":{\"instanceId\":\"f8791436-8d55-4fde-b4d5-72dd2cf13cfb\",\"requestId\":\"" + requestId + "\"}}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOBaseDelete.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOBaseDelete.java new file mode 100644 index 000000000..5084b7cad --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOBaseDelete.java @@ -0,0 +1,37 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset; +import org.springframework.http.HttpMethod; + +public abstract class PresetMSOBaseDelete extends BaseMSOPreset { + private final String requestId; + public static final String DEFAULT_REQUEST_ID = "c0011670-0e1a-4b74-945d-8bf5aede1d9c"; + + public PresetMSOBaseDelete() { + this(null ); + } + + public PresetMSOBaseDelete(String requestId) { + this.requestId = requestId != null ? requestId : DEFAULT_REQUEST_ID; + } + + @Override + protected String getRootPath() { + return super.getRootPath() + "/serviceInstances/v./"; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.DELETE; + } + + @Override + public int getResponseCode() { + return 202; + } + + @Override + public Object getResponseBody() { + return "{\"requestReferences\":{\"instanceId\":\"f8791436-8d55-4fde-b4d5-72dd2cf13cfb\",\"requestId\":\"" + requestId + "\"}}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstanceGen2.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstanceGen2.java new file mode 100644 index 000000000..828dae8ab --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstanceGen2.java @@ -0,0 +1,104 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSOCreateServiceInstanceGen2 extends PresetMSOBaseCreateServiceInstancePost{ + + public PresetMSOCreateServiceInstanceGen2() { + } + + public PresetMSOCreateServiceInstanceGen2(String requestId) { + super(requestId); + } + + @Override + public String getReqPath() { + return getRootPath() + "/serviceInstantiation/v7/serviceInstances"; + } + + @Override + public Object getRequestBody() { + return "" + + "{ " + + " \"requestDetails\": { " + + " \"modelInfo\": { " + + " \"modelInvariantId\": \"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0\", " + + " \"modelVersionId\": \"1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd\", " + + " \"modelName\": \"action-data\", " + + " \"modelType\": \"service\", " + + " \"modelVersion\": \"1.0\" " + + " }, " + + " \"owningEntity\": { " + + " \"owningEntityId\": \"d61e6f2d-12fa-4cc2-91df-7c244011d6fc\", " + + " \"owningEntityName\": \"MetroPacketCore\" " + + " }, " + + " \"subscriberInfo\": { " + + " \"globalSubscriberId\": \"e433710f-9217-458d-a79d-1c7aff376d89\" " + + " }, " + + " \"project\": { " + + " \"projectName\": \"DFW\" " + + " }, " + + " \"requestInfo\": { " + +// " \"instanceName\": \"some instance name_0" + suffix + "\", " + + " \"productFamilyId\": \"e433710f-9217-458d-a79d-1c7aff376d89\", " + + " \"source\": \"VID\", " + + " \"suppressRollback\": true, " + + " \"requestorId\": \"us16807000\" " + + " }, " + + " \"requestParameters\": { " + + " \"subscriptionServiceType\": \"VIRTUAL USP\", " + + " \"aLaCarte\": false, " + + " \"userParams\": [{ " + + " \"service\": { " + + " \"modelInfo\": { " + + " \"modelVersionId\": \"1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd\", " + + " \"modelName\": \"action-data\", " + + " \"modelType\": \"service\" " + + " }, " + +// " \"instanceName\": \"some instance name_0" + suffix + "\", " + + " \"instanceParams\": [], " + + " \"resources\": { " + + " \"vnfs\": [{ " + + " \"modelInfo\": { " + + " \"modelCustomizationName\": \"2017-488_ADIOD-vPE 0\", " + + " \"modelCustomizationId\": \"1da7b585-5e61-4993-b95e-8e6606c81e45\", " + + " \"modelInvariantId\": \"72e465fe-71b1-4e7b-b5ed-9496118ff7a8\", " + + " \"modelVersionId\": \"69e09f68-8b63-4cc9-b9ff-860960b5db09\", " + + " \"modelName\": \"2017-488_ADIOD-vPE\", " + + " \"modelType\": \"vnf\", " + + " \"modelVersion\": \"5.0\" " + + " }, " + + " \"cloudConfiguration\": { " + + " \"lcpCloudRegionId\": \"mtn6\", " + + " \"tenantId\": \"bae71557c5bb4d5aac6743a4e5f1d054\" " + + " }, " + + " \"platform\": { " + + " \"platformName\": \"platform\" " + + " }, " + + " \"lineOfBusiness\": { " + + " \"lineOfBusinessName\": \"ECOMP\" " + + " }, " + + " \"productFamilyId\": \"e433710f-9217-458d-a79d-1c7aff376d89\", " + + " \"instanceParams\": [], " + + " \"vfModules\": [{ " + + " \"modelInfo\": { " + + " \"modelInvariantId\": \"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1\", " + + " \"modelVersionId\": \"25284168-24bb-4698-8cb4-3f509146eca5\", " + + " \"modelName\": \"2017488AdiodVpe..ADIOD_vRE_BV..module-1\", " + + " \"modelType\": \"vfModule\", " + + " \"modelVersion\": \"6\" " + + " }, " + +// " \"instanceName\": \"VFinstancename_00" + suffix + "\", " + + " \"instanceParams\": [] " + + " } " + + " ] " + +// " \"instanceName\": \"2017488_ADIODvPEVNFinstancename_00" + suffix + "\" " + + " } " + + " ] " + + " } " + + " } " + + " } " + + " ] " + + " } " + + " } " + + "}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstanceGen2WithNames.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstanceGen2WithNames.java new file mode 100644 index 000000000..4076bc6ba --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstanceGen2WithNames.java @@ -0,0 +1,15 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import java.util.Map; + +public class PresetMSOCreateServiceInstanceGen2WithNames extends PresetMSOServiceInstanceGen2WithNames { + + public PresetMSOCreateServiceInstanceGen2WithNames(Map<Keys, String> names, int suffix) { + super(names, suffix); + } + + @Override + public String getReqPath() { + return getRootPath() + "/serviceInstantiation/v7/serviceInstances"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstancePost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstancePost.java new file mode 100644 index 000000000..5b3406e90 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateServiceInstancePost.java @@ -0,0 +1,12 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +/** + * Created by itzikliderman on 13/12/2017. + */ +public class PresetMSOCreateServiceInstancePost extends PresetMSOBaseCreateServiceInstancePost { + + public String getReqPath() { + return getRootPath() + "/serviceInstances/v6"; + } + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateVNFInstancePost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateVNFInstancePost.java new file mode 100644 index 000000000..726cb799f --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateVNFInstancePost.java @@ -0,0 +1,21 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSOCreateVNFInstancePost extends PresetMSOBaseCreateServiceInstancePost { + private String serviceInstanceId; + private String serviceModelVersionId; + + public PresetMSOCreateVNFInstancePost(String serviceInstanceId, String serviceModelVersionId) { + this.serviceInstanceId = serviceInstanceId; + this.serviceModelVersionId = serviceModelVersionId; + } + + @Override + public String getReqPath() { + return getRootPath() + "/serviceInstances/v./" + serviceInstanceId + "/vnfs"; + } + + @Override + public Object getRequestBody() { + return "{\"requestDetails\":{\"requestInfo\":{\"productFamilyId\":\"e433710f-9217-458d-a79d-1c7aff376d89\",\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"us16807000\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"ecomp\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"AAIAIC25\",\"tenantId\":\"092eb9e8e4b7412e8787dd091bc58e86\"},\"platform\":{\"platformName\":\"plat1\"},\"modelInfo\":{\"modelCustomizationId\":\"882e5dcb-ba9f-4766-8cde-e326638107db\",\"modelCustomizationName\":\"vDBE 0\",\"modelVersionId\":\"61535073-2e50-4141-9000-f66fea69b433\",\"modelName\":\"vDBE\",\"modelInvariantId\":\"fcdf49ce-6f0b-4ca2-b676-a484e650e734\",\"modelType\":\"vnf\",\"modelVersion\":\"0.2\"},\"requestParameters\":{\"userParams\":[],\"testApi\":\"GR_API\"},\"relatedInstanceList\":[{\"relatedInstance\":{\"instanceId\":\"" + serviceInstanceId + "\",\"modelInfo\":{\"modelVersionId\":\"" + serviceModelVersionId + "\",\"modelName\":\"vDBE_srv\",\"modelInvariantId\":\"9aa04749-c02c-432d-a90c-18caa361c833\",\"modelType\":\"service\",\"modelVersion\":\"1.0\"}}},{\"relatedInstance\":{\"instanceId\":\"AAI-12002-test3-vm230w\",\"modelInfo\":{\"modelName\":\"oam_group\",\"modelType\":\"networkCollection\",\"modelVersion\":\"1\",\"modelVersionId\":\"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\"modelInvariantId\":\"9384abf9-1231-4da4-bd8d-89e4d2f8a749\"}}},{\"relatedInstance\":{\"instanceId\":\"AAI-12002-test3-vm230w\",\"modelInfo\":{\"modelName\":\"oam_group\",\"modelType\":\"networkCollection\",\"modelVersion\":\"1\",\"modelVersionId\":\"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\"modelInvariantId\":\"9384abf9-1231-4da4-bd8d-89e4d2f8a749\"}}}]}}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateVfModuleInstancePost.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateVfModuleInstancePost.java new file mode 100644 index 000000000..29452f4d2 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOCreateVfModuleInstancePost.java @@ -0,0 +1,62 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSOCreateVfModuleInstancePost extends PresetMSOBaseCreateServiceInstancePost{ + private String serviceInstanceId; + private String vnfInstanceId; + + public PresetMSOCreateVfModuleInstancePost(String serviceInstanceId, String vnfInstanceId) { + this.serviceInstanceId = serviceInstanceId; + this.vnfInstanceId = vnfInstanceId; + } + + @Override + public String getReqPath() { + return getRootPath() + "/serviceInstances/v./" + serviceInstanceId + "/vnfs/"+vnfInstanceId+"/vfModules"; + } + + @Override + public Object getRequestBody() { + return "{" + + "\"requestDetails\":{" + + "\"requestInfo\":{" + + "\"instanceName\":\"aa\"," + + "\"source\":\"VID\"," + + "\"suppressRollback\":false," + + "\"requestorId\":\"us16807000\"" + + "}," + + "\"modelInfo\":{" + + "\"modelType\":\"vfModule\"," + + "\"modelInvariantId\":\"\"," + + "\"modelVersionId\":\"\"," + + "\"modelName\":\"\"," + + "\"modelVersion\":\"\"," + + "\"modelCustomizationId\":\"\"," + + "\"modelCustomizationName\":\"\"" + + "}," + + "\"requestParameters\":{" + + "\"userParams\":[" + + "]," + + "\"usePreload\":false" + + "}," + + "\"cloudConfiguration\":{" + + "\"lcpCloudRegionId\":\"mdt1\"," + + "\"tenantId\":\"092eb9e8e4b7412e8787dd091bc58e86\"" + + "}," + + "\"relatedInstanceList\":[" + + "{" + + "\"relatedInstance\":{" + + "\"instanceId\":\"" + serviceInstanceId + "\","+ + "\"modelInfo\":{" + + "\"modelType\":\"service\"," + + "\"modelName\":\"Demo Service 1\"," + + "\"modelInvariantId\":\"709d1be4-9a3f-4a29-8c4d-a20465e808a3\"," + + "\"modelVersion\":\"1.0\"," + + "\"modelVersionId\":\"240376de-870e-48df-915a-31f140eedd2c\"" + + "}" + + "}" + + "}" + + "]" + + "}" + + "}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteInstanceOrchestrationRequestGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteInstanceOrchestrationRequestGet.java new file mode 100644 index 000000000..7d222e6e5 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteInstanceOrchestrationRequestGet.java @@ -0,0 +1,64 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset; +import org.springframework.http.HttpMethod; + +public class PresetMSODeleteInstanceOrchestrationRequestGet extends BaseMSOPreset { + + private final static String DEFAULT_REQUEST_ID = "c0011670-0e1a-4b74-945d-8bf5aede1d9c"; + private final String requestId; + private final String requestScope; + String requestState; + + public PresetMSODeleteInstanceOrchestrationRequestGet() { + this("Service"); + } + + public PresetMSODeleteInstanceOrchestrationRequestGet(String requestScope) { + this(requestScope, "COMPLETE"); + } + + public PresetMSODeleteInstanceOrchestrationRequestGet(String requestScope, String requestState) { + this.requestScope = requestScope; + this.requestState = requestState; + this.requestId = DEFAULT_REQUEST_ID; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + public String getReqPath() { + return getRootPath() + "/orchestrationRequests/v5/" + requestId; + } + + @Override + public Object getResponseBody() { + return "{" + + " \"request\": {" + + " \"requestId\": \"" + requestId + "\"," + + " \"startTime\": \"Mon, 11 Dec 2017 07:27:49 GMT\"," + + " \"requestScope\": \"" + this.requestScope.toLowerCase() + "\"," + + " \"requestType\": \"deleteInstance\"," + + " \"instanceReferences\": {" + + " \"serviceInstanceId\": \"f8791436-8d55-4fde-b4d5-72dd2cf13cfb\"," + + " \"serviceInstanceName\": \"asdfasdf234234asdf\"," + + " \"requestorId\": \"il883e\"" + + " }," + + " \"requestStatus\": {" + + " \"requestState\": \"" + requestState + "\"," + + " \"statusMessage\": \"" + getStatusMessage() + "\"," + + " \"percentProgress\": 100," + + " \"finishTime\": \"Mon, 11 Dec 2017 07:27:53 GMT\"" + + " }" + + " }" + + "}"; + } + + private String getStatusMessage() { + return "COMPLETE".equals(requestState) ? + this.requestScope + " has been deleted successfully." : + (this.requestScope + " has been " + requestState.toLowerCase() + " successfully."); + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteNetwork.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteNetwork.java new file mode 100644 index 000000000..49503b98c --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteNetwork.java @@ -0,0 +1,23 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSODeleteNetwork extends PresetMSOBaseDelete { + private final String serviceInstanceId; + private final String networkInstanceId; + public static final String DEFAULT_SERVICE_INSTANCE_ID = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; + public static final String DEFAULT_NETWORK_INSTANCE_ID = "6adc05e4-85c6-4f91-aa5a-1eb9546c4369"; + + public PresetMSODeleteNetwork() { + this(null, null, null); + } + + public PresetMSODeleteNetwork(String requestId, String serviceInstanceId, String networkInstanceId) { + super(requestId); + this.serviceInstanceId = serviceInstanceId != null ? serviceInstanceId : DEFAULT_SERVICE_INSTANCE_ID; + this.networkInstanceId = networkInstanceId != null ? networkInstanceId : DEFAULT_NETWORK_INSTANCE_ID; + } + + @Override + public String getReqPath() { + return getRootPath() + serviceInstanceId + "/networks/" + networkInstanceId; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteService.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteService.java new file mode 100644 index 000000000..410922c78 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteService.java @@ -0,0 +1,30 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import vid.automation.test.infra.Features; + +public class PresetMSODeleteService extends PresetMSOBaseDelete { + private final String serviceInstanceId; + public static final String DEFAULT_SERVICE_INSTANCE_ID = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; + + public PresetMSODeleteService() { + this(null, null); + } + + public PresetMSODeleteService(String requestId, String serviceInstanceId) { + super(requestId); + this.serviceInstanceId = serviceInstanceId != null ? serviceInstanceId : DEFAULT_SERVICE_INSTANCE_ID; + } + + @Override + public String getReqPath() { + return getRootPath() + serviceInstanceId; + } + + @Override + protected String getRootPath() { + return Features.FLAG_UNASSIGN_SERVICE.isActive() ? + "/mso/serviceInstantiation/v./serviceInstances/" : + "/mso/serviceInstances/v./"; + + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVfModule.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVfModule.java new file mode 100644 index 000000000..45f8ec95e --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVfModule.java @@ -0,0 +1,26 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSODeleteVfModule extends PresetMSOBaseDelete { + private final String serviceInstanceId; + private final String vnfInstanceId; + private final String vfModuleInstanceId; + public static final String DEFAULT_SERVICE_INSTANCE_ID = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; + public static final String DEFAULT_VNF_INSTANCE_ID = "c015cc0f-0f37-4488-aabf-53795fd93cd3"; + public static final String DEFAULT_VFMODULE_INSTANCE_ID = "f2805715-e24f-4c8a-9eb3-6c618da7691d"; + + public PresetMSODeleteVfModule() { + this(null, null, null, null); + } + + public PresetMSODeleteVfModule(String requestId, String serviceInstanceId, String vnfInstanceId, String vfModuleInstanceId) { + super(requestId); + this.serviceInstanceId = serviceInstanceId != null ? serviceInstanceId : DEFAULT_SERVICE_INSTANCE_ID; + this.vnfInstanceId = vnfInstanceId != null ? vnfInstanceId : DEFAULT_VNF_INSTANCE_ID; + this.vfModuleInstanceId = vfModuleInstanceId != null ? vfModuleInstanceId : DEFAULT_VFMODULE_INSTANCE_ID; + } + + @Override + public String getReqPath() { + return getRootPath() + serviceInstanceId + "/vnfs/" + vnfInstanceId + "/vfModules/" + vfModuleInstanceId; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVnf.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVnf.java new file mode 100644 index 000000000..afebeaf53 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVnf.java @@ -0,0 +1,23 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSODeleteVnf extends PresetMSOBaseDelete { + private final String serviceInstanceId; + private final String vnfInstanceId; + public static final String DEFAULT_SERVICE_INSTANCE_ID = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; + public static final String DEFAULT_VNF_INSTANCE_ID = "9908b762-136f-4b1f-8eb4-ef670ef58bb4"; + + public PresetMSODeleteVnf() { + this(null, null, null); + } + + public PresetMSODeleteVnf(String requestId, String serviceInstanceId, String vnfInstanceId) { + super(requestId); + this.serviceInstanceId = serviceInstanceId != null ? serviceInstanceId : DEFAULT_SERVICE_INSTANCE_ID; + this.vnfInstanceId = vnfInstanceId != null ? vnfInstanceId : DEFAULT_VNF_INSTANCE_ID; + } + + @Override + public String getReqPath() { + return getRootPath() + serviceInstanceId + "/vnfs/" + vnfInstanceId; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVolumeGroup.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVolumeGroup.java new file mode 100644 index 000000000..e0bb2cc1d --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSODeleteVolumeGroup.java @@ -0,0 +1,26 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSODeleteVolumeGroup extends PresetMSOBaseDelete { + private final String serviceInstanceId; + private final String vnfInstanceId; + private final String volumeGroupInstanceId; + public static final String DEFAULT_SERVICE_INSTANCE_ID = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; + public static final String DEFAULT_VNF_INSTANCE_ID = "c015cc0f-0f37-4488-aabf-53795fd93cd3"; + public static final String DEFAULT_VG_INSTANCE_ID = "d9db0900-31f6-4880-8658-8c996c6123b4"; + + public PresetMSODeleteVolumeGroup() { + this(null, null, null, null); + } + + public PresetMSODeleteVolumeGroup(String requestId, String serviceInstanceId, String vnfInstanceId, String volumeGroupInstanceId) { + super(requestId); + this.serviceInstanceId = serviceInstanceId != null ? serviceInstanceId : DEFAULT_SERVICE_INSTANCE_ID; + this.vnfInstanceId = vnfInstanceId != null ? vnfInstanceId : DEFAULT_VNF_INSTANCE_ID; + this.volumeGroupInstanceId = volumeGroupInstanceId != null ? volumeGroupInstanceId : DEFAULT_VG_INSTANCE_ID; + } + + @Override + public String getReqPath() { + return getRootPath() + serviceInstanceId + "/vnfs/" + vnfInstanceId + "/volumeGroups/" + volumeGroupInstanceId; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOOrchestrationRequestGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOOrchestrationRequestGet.java new file mode 100644 index 000000000..43eae49ae --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOOrchestrationRequestGet.java @@ -0,0 +1,77 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import org.apache.commons.lang3.StringUtils; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset; +import org.springframework.http.HttpMethod; + +/** + * Created by itzikliderman on 13/12/2017. + */ +public class PresetMSOOrchestrationRequestGet extends BaseMSOPreset { + + private final String DEFAULT_REQUEST_ID = "c0011670-0e1a-4b74-945d-8bf5aede1d9c"; + private final String requestId; + private String statusMessage; + String requestState; + + public PresetMSOOrchestrationRequestGet() { + requestState = "COMPLETE"; + this.requestId = DEFAULT_REQUEST_ID; + } + + public PresetMSOOrchestrationRequestGet(String requestState) { + this.requestState = requestState; + this.requestId = DEFAULT_REQUEST_ID; + } + + public PresetMSOOrchestrationRequestGet(String requestState, String overrideRequestId) { + this.requestState = requestState; + this.requestId = overrideRequestId; + } + + public PresetMSOOrchestrationRequestGet(String requestState, String overrideRequestId, String statusMessage) { + this.requestState = requestState; + this.requestId = overrideRequestId; + this.statusMessage = statusMessage; + } + + @Override + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + public String getReqPath() { + return getRootPath() + "/orchestrationRequests/v5/" + requestId; + } + + @Override + public Object getResponseBody() { + return "{" + + " \"request\": {" + + " \"requestId\": \"" + requestId + "\"," + + " \"startTime\": \"Mon, 11 Dec 2017 07:27:49 GMT\"," + + " \"requestScope\": \"service\"," + + " \"requestType\": \"createInstance\"," + + " \"instanceReferences\": {" + + " \"serviceInstanceId\": \"f8791436-8d55-4fde-b4d5-72dd2cf13cfb\"," + + " \"serviceInstanceName\": \"asdfasdf234234asdf\"," + + " \"requestorId\": \"il883e\"" + + " }," + + " \"requestStatus\": {" + + " \"requestState\": \"" + requestState + "\"," + + " \"statusMessage\": \"" + getStatusMessage() + "\"," + + " \"percentProgress\": 100," + + " \"finishTime\": \"Mon, 11 Dec 2017 07:27:53 GMT\"" + + " }" + + " }" + + "}"; + } + + private String getStatusMessage() { + if (!StringUtils.isEmpty(statusMessage)) + return statusMessage; + return "COMPLETE".equals(requestState) ? + "Service Instance was created successfully." : + ("Service Instance was " + requestState.toLowerCase() + " successfully."); + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOOrchestrationRequestGetErrorResponse.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOOrchestrationRequestGetErrorResponse.java new file mode 100644 index 000000000..910450aa4 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOOrchestrationRequestGetErrorResponse.java @@ -0,0 +1,24 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSOOrchestrationRequestGetErrorResponse extends PresetMSOOrchestrationRequestGet { + private final int responseCode; + + public PresetMSOOrchestrationRequestGetErrorResponse(int responseCode) { + this.responseCode = responseCode; + } + + @Override + public int getResponseCode() { + return responseCode; + } + + @Override + public Object getResponseBody() { + return "{" + + " \"serviceException\": {" + + " \"messageId\": \"SVC0002\"," + + " \"text\": \"JSON Object Mapping Request\"" + + " }" + + "}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOServiceInstanceGen2ErrorResponse.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOServiceInstanceGen2ErrorResponse.java new file mode 100644 index 000000000..0bf60cafb --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOServiceInstanceGen2ErrorResponse.java @@ -0,0 +1,30 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +public class PresetMSOServiceInstanceGen2ErrorResponse extends PresetMSOBaseCreateServiceInstancePost { + + private final int responseCode; + + public PresetMSOServiceInstanceGen2ErrorResponse(int responseCode) { + this.responseCode = responseCode; + } + + @Override + public int getResponseCode() { + return responseCode; + } + + @Override + public String getReqPath() { + return getRootPath() + "/serviceInstantiation/v7/serviceInstances/assign"; + } + + @Override + public Object getResponseBody() { + return "{" + + " \"serviceException\": {" + + " \"messageId\": \"SVC0002\"," + + " \"text\": \"JSON Object Mapping Request\"" + + " }" + + "}"; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOServiceInstanceGen2WithNames.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOServiceInstanceGen2WithNames.java new file mode 100644 index 000000000..56ef9c6da --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/mso/PresetMSOServiceInstanceGen2WithNames.java @@ -0,0 +1,131 @@ +package org.opencomp.simulator.presetGenerator.presets.mso; + +import java.util.Map; + +import static org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.*; + +public abstract class PresetMSOServiceInstanceGen2WithNames extends PresetMSOBaseCreateServiceInstancePost{ + + public enum Keys { + SERVICE_NAME, VNF_NAME, VFM_NAME1, VFM_NAME2, VG_NAME + } + + private final Map<Keys, String> names; + + private final String suffix; + + public PresetMSOServiceInstanceGen2WithNames(Map<Keys, String> names, int suffix) { + this.names = names; + this.suffix = "_" + String.format("%03d", suffix); + } + + @Override + public Object getRequestBody() { + return "{" + + " \"requestDetails\": {" + + " \"modelInfo\": {" + + " \"modelInvariantId\": \"300adb1e-9b0c-4d52-bfb5-fa5393c4eabb\"," + + " \"modelVersionId\": \"5c9e863f-2716-467b-8799-4a67f378dcaa\"," + + " \"modelName\": \"AIM_TRANSPORT_00004\"," + + " \"modelType\": \"service\"," + + " \"modelVersion\": \"1.0\"" + + " }," + + " \"owningEntity\": {" + + " \"owningEntityId\": \"someID\"," + + " \"owningEntityName\": \"someName\"" + + " }," + + " \"subscriberInfo\": {" + + " \"globalSubscriberId\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"" + + " }," + + " \"project\": {" + + " \"projectName\": \"myProject\"" + + " }," + + " \"requestInfo\": {" + + " \"instanceName\": \""+ names.get(SERVICE_NAME) + suffix + "\"," + + " \"productFamilyId\": \"myProductFamilyId\"," + + " \"source\": \"VID\"," + + " \"suppressRollback\": false," + + " \"requestorId\": \"ab2222\"" + + " }," + + " \"requestParameters\": {" + + " \"subscriptionServiceType\": \"mySubType\"," + + " \"aLaCarte\": false," + + " \"userParams\": [" + + " {" + + " \"service\": {" + + " \"modelInfo\": {" + + " \"modelVersionId\": \"5c9e863f-2716-467b-8799-4a67f378dcaa\"," + + " \"modelName\": \"AIM_TRANSPORT_00004\"," + + " \"modelType\": \"service\"" + + " }," + + " \"instanceName\": \""+ names.get(SERVICE_NAME) + suffix + "\"," + + " \"instanceParams\": []," + + " \"resources\": {" + + " \"vnfs\": [" + + " {" + + " \"modelInfo\": {" + + " \"modelCustomizationName\": \"2016-73_MOW-AVPN-vPE-BV-L 0\"," + + " \"modelCustomizationId\": \"ab153b6e-c364-44c0-bef6-1f2982117f04\"," + + " \"modelVersionId\": \"7f40c192-f63c-463e-ba94-286933b895f8\"," + + " \"modelName\": \"2016-73_MOW-AVPN-vPE-BV-L\"," + + " \"modelType\": \"vnf\"" + + " }," + + " \"cloudConfiguration\": {" + + " \"lcpCloudRegionId\": \"mtn3\"," + + " \"tenantId\": \"greatTenant\"" + + " }," + + " \"platform\": {" + + " \"platformName\": \"platformName\"" + + " }," + + " \"lineOfBusiness\": {" + + " \"lineOfBusinessName\": \"lineOfBusinessName\"" + + " }," + + " \"productFamilyId\": \"myProductFamilyId\"," + + " \"instanceParams\": []," + + " \"vfModules\": [" + + " {" + + " \"modelInfo\": {" + + " \"modelCustomizationId\": \"a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f\"," + + " \"modelVersionId\": \"4c75f813-fa91-45a4-89d0-790ff5f1ae79\"," + + " \"modelName\": \"201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0\"," + + " \"modelType\": \"vfModule\"" + + " }," + + " \"instanceName\": \""+ names.get(VFM_NAME1) + suffix +"\"," + + " \"instanceParams\": [" + + " {" + + " \"vmx_int_net_len\": \"24\"" + + " }" + + " ]" + + " }," + + " {" + + " \"modelInfo\": {" + + " \"modelCustomizationId\": \"72d9d1cd-f46d-447a-abdb-451d6fb05fa8\"," + + " \"modelVersionId\": \"56e2b103-637c-4d1a-adc8-3a7f4a6c3240\"," + + " \"modelName\": \"201673MowAvpnVpeBvL..AVPN_vRE_BV..module-1\"," + + " \"modelType\": \"vfModule\"" + + " }," + + " \"instanceName\": \"" + names.get(VFM_NAME2) + suffix + "\"," + + " \"volumeGroupInstanceName\" : \"" + names.get(VG_NAME) + suffix + "\"," + + " \"instanceParams\": [" + + " {" + + " \"vre_a_volume_size_0\": \"100\"," + + " \"availability_zone_0\": \"mtpocdv-kvm-az01\"" + + " }" + + " ]" + + " }" + + " ]," + + " \"instanceName\": \"" + names.get(VNF_NAME)+ suffix + "\"" + + " }" + + " ]" + + " }" + + " }" + + " }" + + " ]" + + " }" + + " }" + + "}"; + + } + + +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/PresetSDCGetServiceMetadataGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/PresetSDCGetServiceMetadataGet.java new file mode 100644 index 000000000..7ec6e0e2b --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/PresetSDCGetServiceMetadataGet.java @@ -0,0 +1,50 @@ +package org.opencomp.simulator.presetGenerator.presets.sdc; + +import org.springframework.http.HttpMethod; + +/** + * Created by itzikliderman on 21/12/2017. + */ +public class PresetSDCGetServiceMetadataGet extends SdcPresetWithModelVersionId { + + public PresetSDCGetServiceMetadataGet(String modelVersionId, String modelInvariantId, String zipFileName) { + super(modelVersionId); + this.modelInvariantId = modelInvariantId; + this.zipFileName = zipFileName; + } + + private final String zipFileName; + private final String modelInvariantId; + + + @Override + public Object getResponseBody() { + return "{" + + " \"uuid\": \""+getModelVersionId()+"\"," + + " \"invariantUUID\": \""+getModelInvariantId()+"\"," + + " \"name\": \"action-data\"," + + " \"version\": \"1.0\"," + + " \"toscaModelURL\": \"./"+zipFileName+"\"," + + " \"category\": \"Mobility\"," + + " \"lifecycleState\": \"CERTIFIED\"," + + " \"lastUpdaterUserId\": \"rg276b\"," + + " \"lastUpdaterFullName\": null," + + " \"distributionStatus\": \"DISTRIBUTED\"," + + " \"artifacts\": null," + + " \"resources\": null" + + " }"; + } + + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return super.getReqPath()+"/metadata"; + } + + public String getModelInvariantId() { + return modelInvariantId; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/PresetSDCGetServiceToscaModelGet.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/PresetSDCGetServiceToscaModelGet.java new file mode 100644 index 000000000..cb2276829 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/PresetSDCGetServiceToscaModelGet.java @@ -0,0 +1,30 @@ +package org.opencomp.simulator.presetGenerator.presets.sdc; + +import org.springframework.http.HttpMethod; + +/** + * Created by itzikliderman on 21/12/2017. + */ +public class PresetSDCGetServiceToscaModelGet extends SdcPresetWithModelVersionId { + + private String file; + + public PresetSDCGetServiceToscaModelGet(String modelVersionId, String file) { + super(modelVersionId); + this.file = file; + } + + public HttpMethod getReqMethod() { + return HttpMethod.GET; + } + + @Override + public String getReqPath() { + return super.getReqPath()+"/toscaModel"; + } + + @Override + public String getFile() { + return file; + } +} diff --git a/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/SdcPresetWithModelVersionId.java b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/SdcPresetWithModelVersionId.java new file mode 100644 index 000000000..e8fdfa2b9 --- /dev/null +++ b/vid-automation/src/main/java/org/opencomp/simulator/presetGenerator/presets/sdc/SdcPresetWithModelVersionId.java @@ -0,0 +1,22 @@ +package org.opencomp.simulator.presetGenerator.presets.sdc; + +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BaseSDCPreset; + +public abstract class SdcPresetWithModelVersionId extends BaseSDCPreset { + + public SdcPresetWithModelVersionId(String modelVersionId) { + this.modelVersionId = modelVersionId; + } + + protected String modelVersionId; + + public String getModelVersionId() { + return modelVersionId; + } + + public String getReqPath() { + return getRootPath() + "/"+getModelVersionId(); + } + + +} diff --git a/vid-automation/src/main/java/vid/automation/test/Constants.java b/vid-automation/src/main/java/vid/automation/test/Constants.java index f012d0099..e10a9675b 100644 --- a/vid-automation/src/main/java/vid/automation/test/Constants.java +++ b/vid-automation/src/main/java/vid/automation/test/Constants.java @@ -1,7 +1,13 @@ package vid.automation.test; +import java.util.HashMap; +import java.util.Map; + public class Constants { + public static final String PREVIOUS_VERSION = "Previous Versions"; + public static final String BROWS_SDC_SERVICE_MODELS = "Browse SDC Service Models"; public static final String SERVICE_NAME = "Service Name"; + public static final String SERVICE_INSTANCE_NAME = "Service Instance Name"; public static final String SERVICE_UUID = "Service UUID"; public static final String SERVICE_INVARIANT_UUID = "Service Invariant UUID"; public static final String SERVICE_VERSION = "Service Version"; @@ -10,6 +16,8 @@ public class Constants { public static final String SUBSCRIBER_NAME = "Subscriber Name"; public static final String SERVICE_TYPE = "Service Type"; public static final String SERVICE_ROLE = "Service Role"; + public static final String RESOURCE_NAME = "Resource Name 1"; + public static final String RESOURCE_DESCRIPTION = "Resource Description 1"; public static final int generalTimeout = 20; public static final int generalRetries = 30; public static final String generalSubmitButtonId = "submit"; @@ -18,30 +26,51 @@ public class Constants { public static final String generalModalTitleClass = "modal-title"; public static final String DROPDOWN_PERMITTED_ASSERT_FAIL_MESSAGE = "Dropdown permitted options are not according to user permissions."; public static final String CONFIRM_BUTTON_TESTS_ID = "confirmButton"; + public static final String CONFIRM_RESUME_DELETE_TESTS_ID = "confirmResumeDeleteButton"; public static final String CLOSE_BUTTON_TEXT = "Close"; + public static final String CANCEL_BUTTON_TEST_ID = "cancelButton"; + public static final String COMMIT_CLOSE_BUTTON_ID = "msoCommitDialogCloseButton"; public static final String SUBMIT_BUTTON_TEXT = "Submit"; public static final String SERVICE_TYPE_SELECT_TESTS_ID = "serviceType"; public static final String BROWSE_SEARCH = "browseFilter"; + public static final String BROWSE_RESULTS_TABLE = "browseResultsTable"; public static final String SUBSCRIBER_NAME_SELECT_TESTS_ID = "subscriberName"; public static final String SUPPRESS_ROLLBACK_SELECT_TESTS_ID = "suppressRollback"; public static final String INSTANCE_NAME_SELECT_TESTS_ID = "instanceName"; + public static final String CREATE_MODAL_TITLE_ID = "create-modal-title"; public static final String DEPLOY_BUTTON_TESTS_ID_PREFIX = "deploy-"; public static final String VIEW_BUTTON_TEXT = "View"; public static final String VIEW_EDIT_BUTTON_TEXT = "View/Edit"; public static final String VIEW_EDIT_TEST_ID_PREFIX = "view/edit-test-data-id-"; public static final String INSTANCE_ID_FOR_NAME_TEST_ID_PREFIX = "instance-id-for-name-"; + public static final String SERVICE_NAME_TEST_ID_PREFIX = "service-name-test-data-id-"; + public static final String SUBSCRIBER_NAME_TEST_ID_PREFIX = "subscriber-name-test-data-id-"; + public static final String FILTER_SUBSCRIBER_DETAILS_ID = "filter-subscriber-details"; + public static final String SERVICE_INSTANCEID_TH_ID = "service-instanceId-th-id"; public static final String MULTI_SELECT_UNSELECTED_CLASS = "item-unselected"; + public static final String MULTI_SELECT_SELECTED_CLASS = "item-selected"; public static final String ACTIVE = "Active"; public static final String INACTIVE = "Inactive"; - + public static final String MSO_COMMIT_DIALOG_CLOSE_BUTTON = "msoCommitDialogCloseButton"; + public static final String REQUIRED = "is required"; + public static final String MISSING_DATA = "Missing data (\"%s\")"; + public static final String ANGULAR2_TESTS = "Angular2Tests"; + public static final String UNDER_DEVELOPMENT = "underDevelopment"; + public static final String DELETE_CONFIGURATION_BUTTON = "deleteConfigurationButton"; + public static final String ACTIVATE_DEACTIVATE_BUTTON = "activateDeactivateButton"; + public static final String ENABLE_DISABLE_BUTTON = "enableDisableButton"; public static final String PNF_SERVICE_TYPE = "pnf"; + public class bugFixes{ + public static final String HEADER_CONTAINER = "headerContainer"; + } + public class SideMenu { public static final int numOfButtons = 7; public static final String buttonClass = "att-accordion__group"; public static final String SEARCH_EXISTING_SERVICE = "Search for Existing Service Instances"; - public static final String BROWSE_ASDC_SERVICE_MODELS = "Browse SDC Service Models"; + public static final String BROWSE_ASDC_SERVICE_MODELS = "Browse ASDC Service Models"; public static final String CREATE_NEW_SERVICE = "Create New Service Instance"; public static final String VNF_CHANGES = "VNF Changes"; public static final String TEST_ENVIRONMENTS = "Test Environments"; @@ -56,6 +85,8 @@ public class Constants { public static final String headlineSchedulerButtonId = "change-management-scheduler-button"; public static final String headlineSearchInputId = "change-management-search"; + public static final String refreshBtnTestId = "refresh-cm"; + //new change management modal constants: public static final String newModalSubscriberInputId = "subscriber"; public static final String newModalServiceTypeInputId = "serviceType"; @@ -63,7 +94,14 @@ public class Constants { public static final String newModalFromVNFVersionInputId = "fromVNFVersion"; public static final String newModalVNFNameInputId = "vnfName"; public static final String newModalWorkFlowInputId = "workflow"; + public static final String newModalConfigUpdateInputId = "config-update-input"; public static final String newModalTargetVersionInputsClass = "vnf-versions-select-as-text"; + public static final String newModalSubscriberText = "FIREWALL/MISC"; + public static final String newModalServiceTypeText = "vFlowLogic"; + public static final String newModalVnfTypeText = "vMobileDNS"; + public static final String newModalSourceVersionText = "1.0"; + public static final String newModalVnfNameText = "zrdm3amdns02test2"; + public static final String newModalWorkflowText = "VNF Config Update"; //Scheduler @@ -87,6 +125,7 @@ public class Constants { public static final String dashboardActiveTableId = "active-table"; public static final String dashboardFinishedTableId = "finished-table"; public static final String dashboardInProgressTheadId = "in-progress-table-head"; + public static final String dashboardPendingTableId = "pending-table"; public static final String dashboardPendingTheadId = "pending-table-head"; public static final String dashboardFinishedTheadId = "finished-table-head"; public static final String failedIconClass = "icon-x"; @@ -96,6 +135,8 @@ public class Constants { public static final String viewIconClass = "icon-view"; public static final String pendingTableId = "pending-table"; public static final String cancelPendingButtonClass = "cancel-action"; + public static final String activeTableRowId = "active-table-cm-row"; + public static final String pendingTableRowId = "pending-table-cm-row"; //failed change management modal constants: public static final String failedModalHeaderId = "failed-modal-header"; @@ -122,6 +163,50 @@ public class Constants { public static final String pendingModalRollbackButtonId = "pending-rollback-button"; public static final String pendingModalCancelWorkflowButtonClass = "btn-cancel-workflow"; } + public class DrawingBoard + { + public static final String AVAILABLE_MODELS_TREE = "available-models-tree"; + public static final String DRAWING_BOARD_TREE = "drawing-board-tree"; + public static final String NODE_PREFIX = "node-"; + public static final String SEARCH_LEFT_TREE = "search-left-tree"; + public static final String ADD_BUTTON = "-add-btn"; + public static final String CONTEXT_MENU_BUTTON = "-menu-btn"; + public static final String ALERT_ICON = "-alert-icon"; + public static final String CONTEXT_MENU_ITEM = "context-menu-item"; + public static final String TOGGLE_CHILDREN = "toggle-children"; + public static final String TREE_NODE_LEAF = "tree-node-leaf"; + public static final String HIGHLIGHTED_COLOR = "rgb(0, 159, 219)"; + public static final String STATUS_TEXT = "Designing a new service"; + public static final String CONTEXT_MENU_BUTTON_HEADER = "openMenuBtn"; + public static final String CONTEXT_MENU_HEADER_EDIT_ITEM = "context-menu-header-edit-item"; + public static final String CONTEXT_MENU_HEADER_DELETE_ITEM = "context-menu-header-delete-item"; + public static final String SERVICE_QUANTITY = "servicesQuantity"; + public static final String BACK_BUTTON = "backBtn"; + public static final String DEPLOY_BUTTON = "deployBtn"; + public static final String DEFAULT_SERVICE_NAME = "<Automatically Assigned>"; + public static final String SERVICE_NAME = "serviceName"; + public static final String SERVICE_STATUS = "serviceStatus"; + public static final String SERVICE_INSTANCE_VALUE = "Service instance:"; + public static final String SERVICE_INSTANCE_TEST_ID = "serviceInstance"; + public static final String QUANTITY_LABEL_TEST_ID = "quantityLabel"; + public static final String QUANTITY_LABEL_VALUE = "Scale Times:"; + + + + } + + public class InstantiationStatus { + public static final String CONTEXT_MENU_DELETE = "context-menu-delete"; + public static final String CONTEXT_MENU_HIDE = "context-menu-hide"; + public static final String CONTEXT_MENU_HEADER_OPEN_ITEM = "context-menu-open"; + public static final String CONTEXT_MENU_HEADER_AUDIT_INFO_ITEM = "context-menu-audit-info"; + public static final String TD_JOB_STATUS_ICON = "jobStatusIcon"; + } + + public class AuditInfoModal{ + public static final String CANCEL_BUTTON = "cancelButton"; + + } public class TestEnvironments { // general constants: @@ -172,17 +257,39 @@ public class Constants { public class Modals { public static final String modalClass = "div[modal-animation='true']"; + public static final String STOP_INSTANTIATION = "Stop Instantiation"; + public static final String CANCEL = "Cancel"; } - public class BrowseASDC { + public static class BrowseASDC { public static final String DATE_FORMAT = "yyyy-MM-dd_HH-mm-ss-SSS"; public static final String SERVICE_INSTANCE_NAME_PREFIX = "vid-e2e-test_service_"; public static final String DEPOLY_SERVICE_CLASS = "deploy-service-class"; public static final String SERVICE_INSTANCE_CREATED_SUCCESSFULLY_TEXT = "COMPLETE - Service Instance was created successfully."; public static final String SERVICE_INSTANCE_CREATION_FAILED_MESSAGE = "failed to create service instance"; public static final String CREATE_SERVICE_INSTANCE = "Create Service Instance"; - public static final String MSO_COMMIT_DIALOG_CLOSE_BUTTON = "msoCommitDialogCloseButton"; - public static final String AIC_OPTION_CLASS = "aic_zoneOption"; + public static final String AIC_OPTION_CLASS = "aicZoneOption"; + public static class NewServicePopup { + public static final String SET_BUTTON = "service-form-set"; + public static final String CANCEL_BUTTON = "cancelButton"; + public static final String INSTANCE_NAME = "instanceName"; + public static final String SERVICE_UUID = "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"; + public static final String SERVICE_MODEL_DATA_TEST_ID_VALUE_PREFIX = "model-item-value-"; + public static final Map<String, String> SERVICE_MODEL_FIELD_TO_DATA_TESTS_ID = new HashMap<String, String>() + {{ + put("version", "modelVersion"); + put("description", "description"); + put("category", "category"); + put("uuid", "uuid"); + put("invariantUuid", "invariantUuid"); + put("type", "serviceType"); + put("serviceRole", "serviceRole"); + }}; + } + + public static final String CREATE_SERVICE_INSTANCE_MACRO_MODAL = "create a new service instance"; + + } public class EditExistingInstance { @@ -191,6 +298,7 @@ public class Constants { public static final String SERVICE_INSTANCE_NAME = "Service Instance Name"; public static final String SEARCH_FOR_EXISTING_INSTANCES_INPUT = "searchForExistingInstancesText"; public static final String SELECT_OWNING_ENTITY_ID = "selectOwningEntity"; + public static final String SELECT_SUBSCRIBER = "selectSubscriber"; public static final String SELECT_PROJECT_ID = "selectProject"; public static final String DELETE_VNF_BTN = "delete-vnf-btn"; @@ -209,12 +317,28 @@ public class Constants { public static final String SELECTED_SUBSCRIBER_NAME_TEST_ID = "selectedSubscriberName"; public static final String SELECTED_SERVICE_TYPE_NAME_TEST_ID = "selectedServiceTypeName"; public static final String SERVICE_INSTANCE_NAME_PREFIX = "vid-e2e-test_aai_service_"; + public static final String MODEL_NAME = "Model Name"; + public static final String MODEL_INVARIANT_UUID = "Model Invariant UUID"; + public static final String MODEL_VERSION = "Model Version"; + public static final String MODEL_UUID = "Model UUID"; + public static final String MODEL_CUSTOMIZATION_UUID = "Model Customization UUID"; + public static final String RESOURCE_NAME = "Resource Name"; + public static final String NF_TYPE = "NF Type"; + public static final String NF_ROLE = "NF Role"; + public static final String NF_FUNCTION = "NF Function"; + public static final String NF_NAMING_CODE = "NF Naming Code"; } public class ViewEdit { + public static final String SERVICE_DELETED_SUCCESSFULLY_TEXT = "COMPLETE - Service has been deleted successfully."; public static final String VNF_CREATED_SUCCESSFULLY_TEXT = "COMPLETE - Vnf has been created successfully."; + public static final String VNF_DELETED_SUCCESSFULLY_TEXT = "COMPLETE - Vnf has been deleted successfully."; + public static final String VL_DELETED_SUCCESSFULLY_TEXT = "COMPLETE - Network has been deleted successfully."; public static final String VOLUME_GROUP_CREATED_SUCCESSFULLY_TEXT = "COMPLETE - Volume Group has been created successfully."; + public static final String VOLUME_GROUP_DELETED_SUCCESSFULLY_TEXT = "COMPLETE - Volume Group has been deleted successfully."; public static final String VF_MODULE_CREATED_SUCCESSFULLY_TEXT = "COMPLETE - VF Module has been created successfully."; + public static final String VF_MODULE_DELETED_SUCCESSFULLY_TEXT = "COMPLETE - VF Module has been deleted successfully."; + public static final String MSO_SUCCESSFULLY_TEXT = "COMPLETE - Success"; public static final String VNF_CREATION_FAILED_MESSAGE = "failed to create service instance VNF"; public static final String VOLUME_GROUP_CREATION_FAILED_MESSAGE = "failed to create Volume Group"; public static final String VF_MODULE_CREATION_FAILED_MESSAGE = "failed to create VF Module"; @@ -225,18 +349,24 @@ public class Constants { public static final String TENANT_OPTION_CLASS = "tenantOption"; public static final String VNF_INSTANCE_NAME_PREFIX = "vid-e2e-test_vnf_"; public static final String AIC_ZONE_TEST_ID = "aic_zone"; + public static final String ROLLBACK_TEST_ID = "rollback"; public static final String VOLUME_GROUP_OPTION_TEST_ID_PREFIX = "addVolumeGroupOption-"; public static final String VF_MODULE_OPTION_TEST_ID_PREFIX = "addVFModuleOption-"; public static final String VNF_OPTION_TEST_ID_PREFIX = "addVNFOption-"; public static final String VOLUME_GROUP_INSTANCE_NAME_PREFIX = "vid-e2e-test-volume_group_"; + public static final String NETWORK_INSTANCE_NAME_PREFIX = "vid-e2e-test-network_"; public static final String VF_MODULE_INSTANCE_NAME_PREFIX = "vid-e2e-test-volume_vf_module_"; public static final String ADD_VNF_BUTTON_TEST_ID = "addVNFButton"; + public static final String ADD_VF_MODULE_TEST_ID = "addVFModuleButton"; public static final String ADD_VOLUME_GROUP_BUTTON_TEST_ID = "addVolumeGroupButton"; - public static final String ADD_VF_MODULE_GROUP_BUTTON_TEST_ID = "addVFModuleButton"; + public static final String VF_MODULE_RESUME_ID_PREFIX = "resumeVFModuleButton-"; + public static final String ADD_VF_MODULE_BUTTON_TEST_ID = "addVFModuleButton"; public static final String DELETE_VNF_BUTTON_TEST_ID = "deleteVNFButton"; - public static final String DELETE_VF_MODULE_BUTTON_TEST_ID = "deleteVFModuleButton"; + public static final String DELETE_NETWORK_BUTTON_TEST_ID = "deleteNetworkButton"; + public static final String DELETE_VF_MODULE_BUTTON_TEST_ID = "deleteVFModuleButton-"; public static final String DELETE_VNF_VOLUME_GROUP_BUTTON_TEST_ID = "deleteVNFVolumeGroupButton"; public static final String ACTIVATE_BUTTON_TEST_ID = "activateButton"; + public static final String SHOW_ASSIGNMENTS_BUTTON_TEST_ID = "showAssignmentsButton"; public static final String OPTION_IN_DROPDOWN_NOT_EXISTS = "the option %s in dropdown %s not exists"; public static final String DISSOCIATE_BTN_CLASS = "dissociate-pnf"; public static final String DISSOCIATE_CONFIRM_MODAL_TEXT = "Are you sure you would like to dissociate %s from the service instance?"; @@ -244,7 +374,25 @@ public class Constants { public static final String ENABLE_ERROR_MESSAGE = "The %s option should not be enabled"; public static final String DISABLE_ERROR_MESSAGE = "The %s option should be enabled"; public static final String DISSOCIATE_CONFIRM_MODAL_BTN_ID = "ok-button"; - + public static final String COLLECTIONDIV = "collectionDiv"; + public static final String COLLECTIONNETWORKDIV = "collectionNetworkDiv"; + public static final String INFOSERVICEBUTTON = "infoServiceButton"; + public static final String DELETESERVICEBUTTON = "deleteServiceButton"; + public static final String SERVICE_INSTANCE_ID = "Service Instance ID"; + public static final String DETAILS_LOG = "detailsLog"; + public static final String DETAILS_CLOSE_BTN = "detailsCloseBtn"; + public static final String MSO_COMMIT_LOG = "msoCommitLog"; + + public static final String NETWORK_OPTION_TEST_ID_PREFIX = "addNetworkOption-"; + public static final String ADD_NETWORK_BUTTON_TEST_ID = "addNetworkButton" ; + public static final String LINE_OF_BUSINESS_SELECT_TESTS_ID = "lineOfBusiness"; + public static final String LINE_OF_BUSINESS_TEXT = "Line Of Business"; + + public static final String CANCEL_CREATION_BUTTON_ID = "cancelCreation"; + public static final String MODEL_VERSION_ID_MISSING_MSG= "Error: model-version-id is not populated in A&AI"; + public static final String SUBDETAILS_ERROR_MESSAGE_TEST_ID = "subDetailsErrMsg"; + + public static final String ERROR_CLASS = "error"; } public class PnfAssociation { public static final String PNF_NAME_TEST_ID = "pnfName"; @@ -270,9 +418,33 @@ public class Constants { public static final String PNF_INSTANCE_ERROR_MESSAGE = "The PNF Instance info %s does not match"; } - public class serviceModelInfo{ + public class ConfigurationCreation{ + public static final String NEXT_BUTTON_TEST_ID = "nextButton"; + public static final String CREATE_BUTTON_TEST_ID = "createButton"; + public static final String BACK_BUTTON_TEST_ID = "backButton"; + public static final String SUPPRESS_ROLLBACK_INPUT_TEST_ID = "suppressRollbackInput"; + public static final String INSTANCE_NAME_INPUT_TEST_ID = "instanceNameInput"; + public static final String REGION_DROPDOWN_TEST_ID = "regionDropDown"; + public static final String TENANT_DROPDOWN_TEST_ID = "tenantDropDown"; + public static final String ENABLE_NEXT_ERROR_MESSAGE = "The Next button is not enabled"; + public static final String DISABLE_NEXT_ASSOCIATE_ERROR_MESSAGE = "The Next button enabled when fields are empty"; + public static final String SOURCE_DROPDOWN_TEST_ID = "sourceDropDown"; + public static final String COLLECTOR_DROPDOWN_TEST_ID = "collectorDropDown"; + public static final String COLLECTOR_INSTANCE_NAME_TEST_ID = "collectorInstanceName"; + public static final String SOURCE_INSTANCE_NAME_TEST_ID = "sourceInstanceName"; + public static final String MODEL_NAME_TEST_ID = "modelName"; + public static final String COLLECTOR_NO_RESULT_MSG_TEST_ID = "collectorNoResults"; + public static final String SOURCE_NO_RESULT_MSG_TEST_ID = "sourceNoResults"; + public static final String SOURCE_INFO_BUTTON_TEST_ID = "sourceInfoButton"; + public static final String COLLECTOR_INFO_BUTTON_TEST_ID = "collectorInfoButton"; + public static final String SOURCE_INSTANCE_SELECTED_ICON_TEST_ID ="sourceInstanceSelectedIcon"; + public static final String COLLECTOR_INSTANCE_SELECTED_ICON_TEST_ID ="collectorInstanceSelectedIcon"; + } + + public class ServiceModelInfo { public static final String INFO_TEST_ID_PREFIX = "info-test-data-id-"; public static final String SERVIICE_NAME_KEY = "ServiceName"; + public static final String ROLLBACK_ON_FAILURE_ID = "rollbackOnFailure"; public static final String SUBSCRIBER_NAME_KEY = "SubscriberName"; public static final String SERVICE_INSTANCE_NAME = "ServiceInstanceName"; public static final String MODEL_NAME = "ModelName"; @@ -288,6 +460,28 @@ public class Constants { public static final String METADETA_ERROR_MESSAGE = "The service model info %s does not match"; } + public class ServiceProxyModelInfo { + public static final String MODEL_NAME = "Name"; + public static final String MODEL_TYPE = "Type"; + public static final String MODEL_DESCRIPTION = "Description"; + public static final String MODEL_INVARIANT_UUID = "InvariantUUID"; + public static final String MODEL_VERSION = "Version"; + public static final String MODEL_UUID = "UUID"; + public static final String MODEL_CUSTOMIZATION_UUID = "CustomizationUUID"; + public static final String SOURCE_MODEL_UUID = "SourceModelUuid"; + public static final String SOURCE_MODEL_INVARIANT = "SourceModelInvariant"; + public static final String SOURCE_MODEL_NAME = "SourceModelName"; + } + public class NetworkModelInfo { + public static final String SERVICE_NAME = "Service Name"; + public static final String SUBSCRIBER_NAME = "Subscriber Name"; + public static final String SERVICE_INSTANCE_NAME = "Service Instance Name"; + public static final String MODEL_NAME = "Model Name"; + public static final String MODEL_VERSION = "Model Version"; + public static final String MODEL_INVARIANT_UUID = "Model Invariant UUID"; + public static final String MODEL_UUID = "Model UUID"; + public static final String MODEL_CUSTOMIZATION_UUID = "Model Customization UUID"; + } public class OwningEntity { public static final String PROJECT_SELECT_TEST_ID = "project"; public static final String OWNING_ENTITY_SELECT_TEST_ID = "owningEntity"; @@ -299,6 +493,8 @@ public class Constants { public static final String READONLY = "readonly"; public static final String USP_VOICE_VIRTUAL_USP = "uspVoiceVirtualUsp"; public static final String MOBILITY_MOBILITY = "mobilityMobility"; + public static final String FIREWALL_MISC_AIM_TRANSPORT = "FIREWALL_AIM_Trans"; + public static final String MOBILITY_VMMSC = "mobilityVMMSC"; public static final String SUPRE_USER = "su"; } @@ -309,13 +505,31 @@ public class Constants { public static final String GET_FULL_SUBSCRIBERS = "search_for_service_instance/aai_get_full_subscribers.json"; public static final String GET_SERVICES = "search_for_service_instance/aai_get_services.json"; public static final String FILTER_SERVICE_INSTANCE_BY_ID = "search_for_service_instance/aai_filter_service_instance_by_id.json"; + public static final String FILTER_CR_SERVICE_INSTANCE_BY_ID = "search_for_service_instance/aai_filter_cr_service_instance_by_id.json"; public static final String FILTER_SERVICE_INSTANCE_BY_ID_2 = "search_for_service_instance/aai_filter_service_instance_by_id_2.json"; - public static final String GET_SUBSCRIBERS_FOR_CUSTOMER = "search_for_service_instance/aai_get_subscribers_for_customer.json"; - public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_2 = "search_for_service_instance/aai_get_subscribers_for_customer_2.json"; + public static final String FILTER_SERVICE_INSTANCE_BY_ID_PM = "search_for_service_instance/aai_filter_service_instance_by_id_test_sssdad.json"; + public static final String FILTER_SERVICE_INSTANCE_BY_ID_NO_MODEL_VER_ID = "search_for_service_instance/aai_filter_service_instance_by_id_test_without_model_ver_id.json"; + public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE = "search_for_service_instance/aai_get_subscribers_for_customer_USP-VOICE.json"; + public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE_CR = "search_for_service_instance/aai_get_subscribers_for_customer_USP-VOICE_cr.json"; + public static final String GET_MSO_INSTANCE_ORCH_STATUS_REQ = "search_for_service_instance/mso_instance_orch_status_req.json"; + public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_Mobility = "search_for_service_instance/aai_get_subscribers_for_customer_Mobility.json"; + public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_FIREWALL_MISC = "search_for_service_instance/aai_get_subscribers_for_customer_FIREWALL-MISC.json"; public static final String NAMED_QUERY_VIEW_EDIT = "search_for_service_instance/aai_named_query_for_view_edit.json"; + public static final String NAMED_QUERY_CR_VIEW_EDIT = "search_for_service_instance/aai_named_query_for_cr_view_edit.json"; public static final String NAMED_QUERY_VIEW_EDIT_2 = "search_for_service_instance/aai_named_query_for_view_edit_2.json"; + public static final String NAMED_QUERY_VIEW_EDIT_PM = "search_for_service_instance/aai_named_query_for_view_edit_test_sssdad.json"; + public static final String GET_SDC_CATALOG_SERVICE_VID_TEST_444 = "search_for_service_instance/get_sdc_catalog_services_vid-test-444.json"; + public static final String GET_SDC_CATALOG_SERVICE_VID_TEST_CR = "search_for_service_instance/get_sdc_catalog_services_vid-test-cr.json"; + public static final String GET_SDC_CATALOG_SERVICE_PM = "search_for_service_instance/get_sdc_catalog_services_test_sssdad.json"; } + public class AddSubinterface { + public static final String FILTER_VFC_IG_SERVICE_INSTANCE_BY_ID = "add_subinterface/aai_filter_vfc_ig_service_instance_by_id.json"; + public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE_VFC_IG = "add_subinterface/aai_get_subscribers_for_customer_USP-VOICE_vfc_ig.json"; + public static final String GET_MSO_VFC_IG_INSTANCE_ORCH_STATUS_REQ = "add_subinterface/mso_vfc_ig_instance_orch_status_req.json"; + public static final String NAMED_QUERY_VFC_IG_VIEW_EDIT = "add_subinterface/aai_named_query_for_vfc_ig_view_edit.json"; + public static final String GET_SDC_CATALOG_SERVICE_VID_TEST_444 = "add_subinterface/get_sdc_catalog_services_vid-test-333.json"; + } public class pProbe { public static final String GET_SERVICE_INSTANCE_WITH_LOGICAL_LINKS = "pProbe/aai_get_service_instance_with_logical_links.json"; public static final String GET_LOGICAL_LINK = "pProbe/aai_get_logical_link.json"; @@ -330,14 +544,80 @@ public class Constants { } public class activateDeactivate{ - public static final String AAI_GET_SERVICE_INSTANCE = "activateDeactivate/aai_get_service_instance.json"; public static final String ACTIVATE_SERVICE_INSTANCE = "activateDeactivate/mso_activate_service_instance.json"; public static final String ACTIVATE_SERVICE_INSTANCE_ERROR = "activateDeactivate/mso_activate_service_instance_error.json"; public static final String ACTIVATE_SERVICE_INSTANCE_ORCH_REQUEST = "activateDeactivate/mso_activate_service_instance_orch_req.json"; } + public class createConfiguration { + public static final String GET_TENANTS = "create_configuration/aai_get_tenants.json"; + public static final String GET_VNF_INSTANCES = "create_configuration/aai_get_vnf_instances_by_region.json"; + public static final String GET_PNF_INSTANCES = "create_configuration/aai_get_pnf_instances_by_region.json"; + public static final String GET_MODEL_BY_ONE_INVARIANT_ID = "create_configuration/aai_get_model_by_one_invariant_id.json"; + public static final String GET_MODEL_BY_2_INVARIANT_IDS = "create_configuration/aai_get_model_by_2_invariant_ids.json"; + public static final String MSO_CREATE_CONFIGURATION = "create_configuration/mso_create_configuration_pProbe.json"; + public static final String MSO_CREATE_CONFIGURATION_ORCH_REQ = "create_configuration/mso_create_configuration_orch_req.json"; + public static final String MSO_CREATE_CONFIGURATION_ERROR = "create_configuration/mso_create_configuration_pProbe_error.json"; + public static final String MSO_UNASSIGN_ACTIVE_SERVICE = "mso_unassign_service.json"; + public static final String MSO_DELETE_CONFIGURATION = "create_configuration/mso_delete_configuration.json"; + public static final String MSO_ACTIVATE_CONFIGURATION = "create_configuration/mso_activate_configuration.json"; + public static final String MSO_ENABLE_DISABLE_PORT = "create_configuration/mso_enable_disable_port.json"; + + + public static final String MSO_DEACTIVATE_CONFIGURATION = "create_configuration/mso_activate_configuration.json"; + } + + public class addNetwork{ + public static final String GET_SDC_CATALOG_SERVICES_NETWORK = "add_network/get_sdc_catalog_services_SI_network11.json"; + public static final String FILTER_SERVICE_INSTANCE_BY_NAME = "add_network/aai_filter_service_instance_by_name_network-vl.json"; + public static final String FILTER_SERVICE_INSTANCE_BY_ID = "add_network/aai_filter_service_instance_by_id_network-vl.json"; + public static final String AAI_NAMED_QUERY_FOR_VIEW_EDIT ="add_network/aai_named_query_for_view_edit_test_network-vl.json"; + public static final String AAI_GET_TENANTS = "add_network/aai_get_tenants.json"; + public static final String MSO_ADD_NETWORK_ERROR = "add_network/mso_add_network_error.json"; + public static final String MSO_ADD_NETWORK = "add_network/mso_add_network.json"; + public static final String MSO_ADD_NETWORK_ORCH_REQ = "add_network/mso_add_network_orch_req.json"; + } + + public class CreateNewServiceInstance { + public static final String GET_FULL_SUBSCRIBES = "create_new_instance/aai_get_full_subscribers.json"; + public static final String GET_SERVICES = "create_new_instance/aai_get_services.json"; + public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_MSO_1610_ST = "create_new_instance/aai_get_subscribers_for_customer_MSO_1610_ST.json"; + public static final String GET_MODELS_BY_SERVICE_TYPE_MSO_1610_ST = "create_new_instance/aai_get_models_by_service_type_MSO_1610_ST.json"; + public static final String GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE = "create_new_instance/aai_get_subscribers_for_customer_USP_VOICE.json"; + public static final String GET_MODELS_BY_SERVICE_TYPE_USP_VOICE= "create_new_instance/aai_get_models_by_service_type_USP_VOICE.json"; + + public class deploy { + public static final String SDC_GET_CATALOG = "create_new_instance/deploy/get_sdc_catalog_services_1707vidnf.json"; + public static final String GET_AIC_ZONES = "create_new_instance/deploy/aai_get_aic_zones.json"; + public static final String MSO_CREATE_SVC_INSTANCE = "create_new_instance/deploy/mso_create_svc_instance.json"; + public static final String MSO_CREATE_SVC_INSTANCE_ORCH_REQ = "create_new_instance/deploy/mso_create_svc_instance_orch_req.json"; + } + } + public class genericRequest{ public static final String ECOMP_PORTAL_GET_SESSION_SLOT_CHECK_INTERVAL = "ecompportal_getSessionSlotCheckInterval.json"; } } + public class VlanTagging { + public static final String MODEL_ITEM_LABEL_SERVICE_INSTANCENAME = "model-item-label-serviceInstanceName"; + public static final String MODEL_ITEM_VALUE_SERVICE_INSTANCENAME = "model-item-value-serviceInstanceName"; + public static final String MODEL_ITEM_LABEL_MODEL_INVARIANT_UUID = "model-item-label-modelInvariantUUID"; + public static final String MODEL_ITEM_VALUE_MODEL_INVARIANT_UUID = "model-item-value-modelInvariantUUID"; + public static final String MODEL_ITEM_LABEL_MODEL_VERSION = "model-item-label-modelVersion"; + public static final String MODEL_ITEM_VALUE_MODEL_VERSION = "model-item-value-modelVersion"; + public static final String MODEL_ITEM_LABEL_MODEL_UUID = "model-item-label-modelUuid"; + public static final String MODEL_ITEM_VALUE_MODEL_UUID = "model-item-value-modelUuid"; + public static final String MODEL_ITEM_LABEL_CUSTOMIZATION_UUID = "model-item-label-modelCustomizationUuid"; + public static final String MODEL_ITEM_VALUE_CUSTOMIZATION_UUID = "model-item-value-modelCustomizationUuid"; + public static final String MODEL_ITEM_LABEL_GROUP_NAME = "model-item-label-groupName"; + public static final String MODEL_ITEM_VALUE_GROUP_NAME = "model-item-value-groupName"; + public static final String MODEL_ITEM_LABEL_NETWORK_COLLECTION_FUNCTION = "model-item-label-networkCollectionFunction"; + public static final String MODEL_ITEM_VALUE_NETWORK_COLLECTION_FUNCTION = "model-item-value-networkCollectionFunction"; + public static final String MODEL_ITEM_LABEL_INSTANCE_GROUP_FUNCTION = "model-item-label-instanceGroupFunction"; + public static final String MODEL_ITEM_VALUE_INSTANCE_GROUP_FUNCTION = "model-item-value-instanceGroupFunction"; + public static final String MODEL_ITEM_LABEL_PARENT_PORT_ROLE = "model-item-label-parentPortRole"; + public static final String MODEL_ITEM_VALUE_PARENT_PORT_ROLE = "model-item-value-parentPortRole"; + public static final String MODEL_ITEM_LABEL_SUBINTERFACE_ROLE = "model-item-label-subInterfaceRole"; + public static final String MODEL_ITEM_VALUE_SUBINTERFACE_ROLE = "model-item-value-subInterfaceRole"; + } } diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Click.java b/vid-automation/src/main/java/vid/automation/test/infra/Click.java index f2cbbef80..8c6bf4831 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/Click.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/Click.java @@ -2,8 +2,13 @@ package vid.automation.test.infra; import org.junit.Assert; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.Alert; +import org.openqa.selenium.By; +import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.Select; +import org.openqa.selenium.support.ui.WebDriverWait; import java.util.List; @@ -35,6 +40,13 @@ public class Click { elements.get(0).click(); } + public static void byXpath(String xpath) { + WebElement element = Get.byXpath(xpath); + Assert.assertNotNull(element); + element.click(); + } + + public static void onFirstSelectOptionById(String id) { Select selectlist = new Select(Get.byId(id)); if(selectlist.getOptions().size() > 1) { @@ -42,6 +54,13 @@ public class Click { } } + public static void onFirstSelectOptionByTestId(String dataTestId) { + Select selectList = new Select(Get.byTestId(dataTestId)); + if(selectList.getOptions().size() > 1) { + selectList.selectByIndex(1); + } + } + public static void onFirstSelectOptionByClass(String className) { final List<WebElement> webElements = Get.byClass(className); webElements.forEach(webElement -> { @@ -51,4 +70,17 @@ public class Click { } }); } + + public static void byClassAndVisibleText(String className, String text ) { + WebElement element = Get.byClassAndText(className, text); + element.click(); + } + + + + public static void acceptAlert() { + Alert alert = GeneralUIUtils.getDriver().switchTo().alert(); + Assert.assertTrue(alert != null); + alert.accept(); + } } diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Exists.java b/vid-automation/src/main/java/vid/automation/test/infra/Exists.java index 14339d63f..63327f50c 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/Exists.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/Exists.java @@ -1,6 +1,8 @@ package vid.automation.test.infra; +import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebElement; import vid.automation.test.Constants; public class Exists { @@ -31,4 +33,12 @@ public class Exists { return false; } } + + public static boolean tagNameInAnotherElement(WebElement parent, String tagName) { + try { + return parent.findElement(By.tagName(tagName)) != null; + } catch (NoSuchElementException exception) { + return false; + } + } } diff --git a/vid-automation/src/main/java/vid/automation/test/infra/FeatureTogglingTest.java b/vid-automation/src/main/java/vid/automation/test/infra/FeatureTogglingTest.java new file mode 100644 index 000000000..6dfb4f119 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/infra/FeatureTogglingTest.java @@ -0,0 +1,31 @@ +package vid.automation.test.infra; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; + +/* +In order to skip test classes regards the state of feature flag please use this annotation +There are 2 ways to annotate that tests required featureFlags to be active : +In method level - with @FeatureTogglingTest on the test method and list of Required Feature flags on +In Class level - with @FeatureTogglingTest on the test class and list of Required Feature flags on + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({METHOD, TYPE}) +public @interface FeatureTogglingTest { + + /** + * @return list of feature flags relevant to the test + */ + Features[] value(); + + /** + * @return if all features shall be active. + * If true test would run if all features are active. + * If false test would run if all features are not active. + */ + boolean flagActive() default true; +} diff --git a/vid-automation/src/main/java/vid/automation/test/infra/FeatureTogglingTestngTransformer.java b/vid-automation/src/main/java/vid/automation/test/infra/FeatureTogglingTestngTransformer.java new file mode 100644 index 000000000..46794da10 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/infra/FeatureTogglingTestngTransformer.java @@ -0,0 +1,76 @@ +package vid.automation.test.infra; + +import org.testng.IAnnotationTransformer; +import org.testng.annotations.ITestAnnotation; +import org.togglz.core.context.StaticFeatureManagerProvider; + +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; + +/* +In order to skip test classes regards the state of feature flag we add this listener to our testng configuration +There are 2 ways to annotate that tests required featureFlags to be active : +In method level - with @FeatureTogglingTest on the test method and list of Required Feature flags on +In Class level - with @FeatureTogglingTest on the test class and list of Required Feature flags on +For each test annotation of method level, we check if the test shall whole class shall run regards the features flag test. +Pay attention that this listener shall be configured in the testng.xml (or command line) +It can't be used as Listener annotation of base class +*/ +public class FeatureTogglingTestngTransformer implements IAnnotationTransformer { + + @Override + public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { + + if (testMethod!=null) { + try { + + if (!annotation.getEnabled()) { + return; + } + + if (isIgnoreTest(testMethod)) { + disableTest(annotation, testMethod.getDeclaringClass().getName()); + return; + } + + if (isIgnoreTest(testMethod.getDeclaringClass())) { + disableTest(annotation, testMethod.getDeclaringClass().getName()); + return; + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private boolean isIgnoreTest(AnnotatedElement annotatedElement) { + + return (annotatedElement.isAnnotationPresent(FeatureTogglingTest.class) && + shallDisableTest(annotatedElement.getAnnotation(FeatureTogglingTest.class))); + + } + + private boolean shallDisableTest(FeatureTogglingTest featureTogglingTest) { + if (featureTogglingTest.value().length==0) { + return false; + } + if (new StaticFeatureManagerProvider().getFeatureManager()==null) { + FeaturesTogglingConfiguration.initializeFeatureManager(); + } + for (Features feature : featureTogglingTest.value()) { + if (!(feature.isActive()==featureTogglingTest.flagActive())) { + return true; + } + } + return false; + } + + private void disableTest(ITestAnnotation annotation, String name) { + System.out.println("Ignore "+ name+" due to feature flags configuration"); + annotation.setEnabled(false); + } + +} + diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Features.java b/vid-automation/src/main/java/vid/automation/test/infra/Features.java new file mode 100644 index 000000000..37698fe36 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/infra/Features.java @@ -0,0 +1,25 @@ +package vid.automation.test.infra; + +import org.togglz.core.Feature; +import org.togglz.core.context.FeatureContext; + +public enum Features implements Feature { + + CREATE_INSTANCE_TEST, + EMPTY_DRAWING_BOARD_TEST, + FLAG_REGION_ID_FROM_REMOTE, + FLAG_ASYNC_JOBS, + FLAG_ADD_MSO_TESTAPI_FIELD, + FLAG_ASYNC_INSTANTIATION, + FLAG_UNASSIGN_SERVICE, + FLAG_SERVICE_MODEL_CACHE, + FLAG_NETWORK_TO_ASYNC_INSTANTIATION, + FLAG_COLLECTION_RESOURCE_SUPPORT, + FLAG_SHOW_ASSIGNMENTS, + FLAG_SHOW_VERIFY_SERVICE, + FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD; + + public boolean isActive() { + return FeatureContext.getFeatureManager().isActive(this); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/infra/FeaturesTogglingConfiguration.java b/vid-automation/src/main/java/vid/automation/test/infra/FeaturesTogglingConfiguration.java new file mode 100644 index 000000000..a3e14539c --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/infra/FeaturesTogglingConfiguration.java @@ -0,0 +1,52 @@ +package vid.automation.test.infra; + + +import org.apache.commons.io.FileUtils; +import org.togglz.core.context.StaticFeatureManagerProvider; +import org.togglz.core.manager.FeatureManager; +import org.togglz.core.manager.FeatureManagerBuilder; +import org.togglz.core.repository.StateRepository; +import org.togglz.core.repository.file.FileBasedStateRepository; + +import java.io.File; +import java.io.IOException; +import java.net.URL; + +import static org.apache.commons.codec.Charsets.UTF_8; + + +public class FeaturesTogglingConfiguration { + + private static FeatureManager createFeatureManager() { + return new FeatureManagerBuilder() + .featureEnum(Features.class) + .stateRepository(getStateRepository()) + .build(); + } + + public static void initializeFeatureManager(){ + StaticFeatureManagerProvider.setFeatureManager(createFeatureManager()); + for (Features feature : Features.values()) { + System.out.println("FeaturesTogglingConfiguration: " + feature.name() + ": " + feature.isActive()); + } + } + + private static StateRepository getStateRepository() { + + final URL propertiesAsResource = FeaturesTogglingConfiguration.class.getClassLoader().getResource("features.properties"); + + final String featuresFile = + System.getProperty( + "FEATURES_FILE", + propertiesAsResource != null ? propertiesAsResource.getFile() : null + ); + + System.out.println("features file: " + featuresFile); + try { + System.out.println(FileUtils.readFileToString(new File(featuresFile), UTF_8)); + } catch (IOException e) { + // YOLO + } + return new FileBasedStateRepository(new File(featuresFile)); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Get.java b/vid-automation/src/main/java/vid/automation/test/infra/Get.java index f9ce529f8..fc1d06070 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/Get.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/Get.java @@ -1,11 +1,13 @@ package vid.automation.test.infra; +import org.junit.Assert; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; +import org.openqa.selenium.*; +import org.openqa.selenium.support.ui.WebDriverWait; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; public class Get { public static WebElement byId(String id) { @@ -24,11 +26,44 @@ public class Get { } } + public static WebElement byXpath(String xpath) { + try { + return GeneralUIUtils.getWebElementBy(By.xpath(xpath)); + } catch (Exception var2) { + return null; + } + } + public static WebElement byXpath(String xpath, int timeout) { + try { + return GeneralUIUtils.getWebElementBy(By.xpath(xpath), timeout); + } catch (Exception var2) { + return null; + } + } + + + public static List<WebElement> multipleElementsByTestId(String dataTestId) { + try { + return GeneralUIUtils.getWebElementsListByTestID(dataTestId); + } catch (Exception var2) { + return null; + } + } public static WebElement byClassAndText(String className, String text) { + return byClassAndText(className, text, null); + } + + public static WebElement byClassAndText(String className, String text, Integer timeoutInSeconds) { WebElement result = null; - List<WebElement> elements = GeneralUIUtils.getWebElementsListByContainsClassName(className); + List<WebElement> elements; + if (timeoutInSeconds!=null) { + elements = GeneralUIUtils.getWebElementsListByContainsClassName(className, timeoutInSeconds); + } + else { + elements = GeneralUIUtils.getWebElementsListByContainsClassName(className); + } for(WebElement element : elements) { if (element.getText().contains(text)) { @@ -54,6 +89,7 @@ public class Get { return GeneralUIUtils.getSelectedElementFromDropDown(dataTestId).getText(); } + public static List<WebElement> byClass(String className) { return GeneralUIUtils.getWebElementsListByContainsClassName(className); } @@ -77,7 +113,7 @@ public class Get { return null; } } - + private static List<List<String>> tableValuesById(String tableId, String section, String column) { List<WebElement> rows = rowsByTableId(tableId, section, column); if(rows != null) { @@ -92,4 +128,28 @@ public class Get { return null; } } + public static String alertText() { + WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 2); + wait.until(alertIsPresent()); + Alert alert = GeneralUIUtils.getDriver().switchTo().alert(); + Assert.assertTrue(alert != null); + return alert.getText(); + } + + public static Function<WebDriver, Alert> alertIsPresent() { + return new Function<WebDriver, Alert>() { + public String toString() { + return "alert to be present"; + } + + @Override + public Alert apply(WebDriver driver) { + try { + return driver.switchTo().alert(); + } catch (NoAlertPresentException arg2) { + return null; + } + } + }; + } } diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Input.java b/vid-automation/src/main/java/vid/automation/test/infra/Input.java index 15fa22549..896ceae56 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/Input.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/Input.java @@ -1,9 +1,8 @@ package vid.automation.test.infra; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang3.SystemUtils; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.WebElement; +import vid.automation.test.utils.ReadFile; /** * Created by itzikliderman on 11/09/2017. @@ -14,6 +13,13 @@ public class Input { inputElement.sendKeys(text); } + public static void replaceText(String text, String inputTestsId) { + WebElement inputElement = GeneralUIUtils.getWebElementByTestID(inputTestsId, 30); + inputElement.clear(); + inputElement.sendKeys(text); + } + + public static String getValueByTestId(String testId) { WebElement input = GeneralUIUtils.getInputElement(testId); return input.getAttribute("value"); @@ -25,13 +31,8 @@ public class Input { */ public static void file(String pathInResources, String inputId) { - String path = Input.class.getResource("../../../../"+pathInResources).getPath().toString(); - if (SystemUtils.IS_OS_WINDOWS) { - path = FilenameUtils.separatorsToSystem(path); - if (path.charAt(0)=='\\') { - path = path.substring(1); - } - } + // Copy files from resources upon file-input field, so files will be accessible from inside a jar + String path = ReadFile.copyOfFileFromResources(pathInResources); WebElement inputElement = Get.byId(inputId); inputElement.sendKeys(path); } diff --git a/vid-automation/src/main/java/vid/automation/test/infra/SelectOption.java b/vid-automation/src/main/java/vid/automation/test/infra/SelectOption.java index 048174e99..dc792cfc3 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/SelectOption.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/SelectOption.java @@ -20,9 +20,13 @@ public class SelectOption { return select; } - public static void byIdAndVisibleText(String id, String text) { + public static Select byIdAndVisibleText(String id, String text) { Select selectlist = new Select(Get.byId(id)); - selectlist.selectByVisibleText(text); + if(text != null) { + selectlist.selectByVisibleText(text); + } + + return selectlist; } public static void byClassAndVisibleText(String className, String text) { @@ -32,7 +36,14 @@ public class SelectOption { byIdAndVisibleText(id, text); }); } - + public static List<WebElement> getList(String selectDataTestId) { + Select selectList = GeneralUIUtils.getSelectList(null, selectDataTestId); + return selectList.getOptions(); + } + public static String getSelectedOption(String selectDataTestId) { + Select selectList = GeneralUIUtils.getSelectList(null, selectDataTestId); + return selectList.getFirstSelectedOption().getText(); + } public static void byTestIdAndVisibleText(String displayName, String selectDataTestId) { GeneralUIUtils.getSelectList(displayName, selectDataTestId); } @@ -44,4 +55,16 @@ public class SelectOption { Click.byClass(Constants.MULTI_SELECT_UNSELECTED_CLASS); } + + public static void selectOptionsFromMultiselectById(String multiSelectId, List<String> options) { + Click.byId(multiSelectId); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + for(String option:options) { + Click.byClassAndVisibleText(Constants.MULTI_SELECT_UNSELECTED_CLASS, option); + } + } } diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Wait.java b/vid-automation/src/main/java/vid/automation/test/infra/Wait.java index fa6ce4f38..848107c83 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/Wait.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/Wait.java @@ -1,5 +1,6 @@ package vid.automation.test.infra; +import org.apache.commons.collections.CollectionUtils; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.NoSuchElementException; @@ -21,7 +22,7 @@ public class Wait { } } catch (Throwable t) { - System.out.println("a retry failed duo to:" +t.getMessage()); + System.out.println(String.format("a retry failed due to: %s %s", t, t.getMessage())); } try { intervalUnit.sleep(interval); @@ -37,7 +38,20 @@ public class Wait { } public static boolean waitByClassAndText(String className, String text, int timeoutInSeconds) { - return waitFor((x->Get.byClassAndText(className,text)!=null),null, timeoutInSeconds, 1); + return waitFor((x->Get.byClassAndText(className, text, 1)!=null), null, timeoutInSeconds, 1); + } + + public static boolean waitByClassAndTextXpathOnly(String className, String text, int timeoutInSeconds) { + try { + return CollectionUtils.isNotEmpty( + GeneralUIUtils.getWebElementsListByContainsClassNameAndText(className, text, timeoutInSeconds)); + } + catch (RuntimeException exception) { + System.out.println( + String.format("Failed to waitByClassAndText, after %d seconds. Class name: %s, Text: %s. Cause: %s", + timeoutInSeconds, className, text, exception.toString())); + return false; + } } public static boolean waitByTestId(String dataTestId, int timeoutInSeconds) { diff --git a/vid-automation/src/main/java/vid/automation/test/model/CategoryOption.java b/vid-automation/src/main/java/vid/automation/test/model/CategoryOption.java new file mode 100644 index 000000000..ec358797d --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/model/CategoryOption.java @@ -0,0 +1,19 @@ +package vid.automation.test.model; + +import com.google.common.base.MoreObjects; + +public class CategoryOption { + public String name; + public String appId; + public String categoryId; + + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("name", name) + .add("appId", appId) + .add("categoryId", categoryId) + .toString(); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/model/CategoryOptionList.java b/vid-automation/src/main/java/vid/automation/test/model/CategoryOptionList.java new file mode 100644 index 000000000..666ed0a86 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/model/CategoryOptionList.java @@ -0,0 +1,16 @@ +package vid.automation.test.model; + +import com.google.common.base.MoreObjects; + +import java.util.List; + +public class CategoryOptionList { + public List<CategoryOption> categories; + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("categories", categories) + .toString(); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/model/JobBulk.java b/vid-automation/src/main/java/vid/automation/test/model/JobBulk.java new file mode 100644 index 000000000..80d4109a6 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/model/JobBulk.java @@ -0,0 +1,23 @@ +package vid.automation.test.model; + +import java.util.List; + +public class JobBulk { + + private List<JobModel> jobs; + + public JobBulk() { + } + + public JobBulk(List<JobModel> jobs) { + this.jobs = jobs; + } + + public List<JobModel> getJobs() { + return jobs; + } + + public void setJobs(List<JobModel> jobs) { + this.jobs = jobs; + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/model/JobModel.java b/vid-automation/src/main/java/vid/automation/test/model/JobModel.java new file mode 100644 index 000000000..b9ff6a21d --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/model/JobModel.java @@ -0,0 +1,41 @@ +package vid.automation.test.model; + +public class JobModel { + + private String uuid; + private String status; + private String templateId; + private String type; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getTemplateId() { + return templateId; + } + + public void setTemplateId(String templateId) { + this.templateId = templateId; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/model/JobStatus.java b/vid-automation/src/main/java/vid/automation/test/model/JobStatus.java new file mode 100644 index 000000000..0e92a1f35 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/model/JobStatus.java @@ -0,0 +1,10 @@ +package vid.automation.test.model; + +public enum JobStatus { + COMPLETED, + FAILED, + IN_PROGRESS, + PAUSE, + PENDING, + STOPPED; +} diff --git a/vid-automation/src/main/java/vid/automation/test/model/Service.java b/vid-automation/src/main/java/vid/automation/test/model/Service.java index f5eaf6b0d..4ed51eeb1 100644 --- a/vid-automation/src/main/java/vid/automation/test/model/Service.java +++ b/vid-automation/src/main/java/vid/automation/test/model/Service.java @@ -1,7 +1,5 @@ package vid.automation.test.model; -import java.util.ArrayList; - /** * Created by itzikliderman on 19/06/2017. */ @@ -24,4 +22,15 @@ public class Service { public String serviceRole; public Service() {} + + public Service(String type, String uuid, String invariantUuid, String name, String version, String category, String description, String serviceRole) { + this.type = type; + this.uuid = uuid; + this.invariantUuid = invariantUuid; + this.name = name; + this.version = version; + this.category = category; + this.description = description; + this.serviceRole = serviceRole; + } } diff --git a/vid-automation/src/main/java/vid/automation/test/model/ServiceModel.java b/vid-automation/src/main/java/vid/automation/test/model/ServiceModel.java new file mode 100644 index 000000000..7996a6453 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/model/ServiceModel.java @@ -0,0 +1,32 @@ +package vid.automation.test.model; + +public class ServiceModel { + + public String serviceName; + + public String subscriberName; + + public String serviceInstanceName; + + public String modelName; + + public String modelInvariantUuid; + + public String modelVersion; + + public String modelUuid; + + public String modelCustomizationUuid; + + public String resourceName; + + public String nfType; + + public String nfRole; + + public String nfFunction; + + public String nfNamingCode; + + public ServiceModel() {} +} diff --git a/vid-automation/src/main/java/vid/automation/test/model/ServiceModelsList.java b/vid-automation/src/main/java/vid/automation/test/model/ServiceModelsList.java new file mode 100644 index 000000000..e011d6a24 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/model/ServiceModelsList.java @@ -0,0 +1,7 @@ +package vid.automation.test.model; + +import java.util.HashMap; + +public class ServiceModelsList { + public HashMap<String, ServiceModel> serviceModels; +} diff --git a/vid-automation/src/main/java/vid/automation/test/model/User.java b/vid-automation/src/main/java/vid/automation/test/model/User.java index c4b06d4bc..696b7b40b 100644 --- a/vid-automation/src/main/java/vid/automation/test/model/User.java +++ b/vid-automation/src/main/java/vid/automation/test/model/User.java @@ -1,6 +1,6 @@ package vid.automation.test.model; -import vid.automation.test.model.Credentials; +import com.google.common.base.MoreObjects; import java.util.ArrayList; @@ -9,7 +9,19 @@ import java.util.ArrayList; */ public class User { public Credentials credentials; - public ArrayList<String> subscribers; + public ArrayList<String> subscriberNames; public ArrayList<String> serviceTypes; public ArrayList<String> tenants; + public ArrayList<String> roles; + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("credentials", credentials) + .add("subscriberNames", subscriberNames) + .add("serviceTypes", serviceTypes) + .add("tenants", tenants) + .add("roles", roles) + .toString(); + } } diff --git a/vid-automation/src/main/java/vid/automation/test/sections/BrowseASDCPage.java b/vid-automation/src/main/java/vid/automation/test/sections/BrowseASDCPage.java index f9a2e43a5..53a67821d 100644 --- a/vid-automation/src/main/java/vid/automation/test/sections/BrowseASDCPage.java +++ b/vid-automation/src/main/java/vid/automation/test/sections/BrowseASDCPage.java @@ -1,12 +1,44 @@ package vid.automation.test.sections; +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; import vid.automation.test.Constants; +import vid.automation.test.infra.Get; + +import java.util.List; /** * Created by itzikliderman on 13/06/2017. */ public class BrowseASDCPage extends VidBasePage { + public String generateInstanceName() { return generateInstanceName(Constants.BrowseASDC.SERVICE_INSTANCE_NAME_PREFIX); } + + public VidBasePage clickPreviousVersionButton() { + GeneralUIUtils.clickOnElementByText(Constants.PREVIOUS_VERSION, 30); + return this; + } + + public void assertPreviousVersionButtonNotExists(String expectedInvariantUUID){ + boolean exists = Get.byTestId("PreviousVersion-" + expectedInvariantUUID).isDisplayed(); + Assert.assertFalse(exists); + } + + public void assertSearchFilterValue(String value){ + String searchKey = this.getInputValue(Constants.BROWSE_SEARCH); + org.testng.Assert.assertEquals(searchKey, value); + } + + public void fillFilterText(String text){ + this.setInputText(Constants.BROWSE_SEARCH, text); + } + + public int countCurrentRowsInTable(){ + List<WebElement> rowsInTable = Get.byClass("alt-row"); + return rowsInTable.size(); + } + } diff --git a/vid-automation/src/main/java/vid/automation/test/sections/ChangeManagementPage.java b/vid-automation/src/main/java/vid/automation/test/sections/ChangeManagementPage.java index bcf035c00..ca0b55b36 100644 --- a/vid-automation/src/main/java/vid/automation/test/sections/ChangeManagementPage.java +++ b/vid-automation/src/main/java/vid/automation/test/sections/ChangeManagementPage.java @@ -1,5 +1,6 @@ package vid.automation.test.sections; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import vid.automation.test.Constants; import vid.automation.test.infra.Click; @@ -12,4 +13,8 @@ public class ChangeManagementPage extends VidBasePage { ChangeManagementPage.openChangeManagementPage(); Click.byId(Constants.ChangeManagement.headlineNewButtonId); } + public static void clickOnRefreshButton(){ + Click.byTestId("refresh-cm"); + GeneralUIUtils.ultimateWait(); + } } diff --git a/vid-automation/src/main/java/vid/automation/test/sections/CreateConfigurationPage.java b/vid-automation/src/main/java/vid/automation/test/sections/CreateConfigurationPage.java new file mode 100644 index 000000000..bb68d9b9e --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/CreateConfigurationPage.java @@ -0,0 +1,45 @@ +package vid.automation.test.sections; + +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import vid.automation.test.Constants; +import vid.automation.test.infra.SelectOption; + +public class CreateConfigurationPage extends VidBasePage { + + public CreateConfigurationPage setInstanceName(String name) { + setInputText(Constants.ConfigurationCreation.INSTANCE_NAME_INPUT_TEST_ID, name); + return this; + } + + public CreateConfigurationPage chooseRegion(String region){ + SelectOption.byTestIdAndVisibleText(region, Constants.ConfigurationCreation.REGION_DROPDOWN_TEST_ID); + return this; + } + + public CreateConfigurationPage chooseTenant(String tenant){ + SelectOption.byTestIdAndVisibleText(tenant, Constants.ConfigurationCreation.TENANT_DROPDOWN_TEST_ID); + return this; + } + + public CreateConfigurationPage clickNextButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.ConfigurationCreation.NEXT_BUTTON_TEST_ID, 60); + return this; + } + + public CreateConfigurationPage clickBackButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.ConfigurationCreation.BACK_BUTTON_TEST_ID, 60); + return this; + } + + public String getInstanceName() { + return getInputValue(Constants.ConfigurationCreation.INSTANCE_NAME_INPUT_TEST_ID); + } + public String getRegion() { + return getInputValue(Constants.ConfigurationCreation.REGION_DROPDOWN_TEST_ID); + } + public String getTenant() { + return SelectOption.getSelectedOption(Constants.ConfigurationCreation.TENANT_DROPDOWN_TEST_ID); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/sections/CreateNewInstancePage.java b/vid-automation/src/main/java/vid/automation/test/sections/CreateNewInstancePage.java index 2eef9b3af..d63b8a191 100644 --- a/vid-automation/src/main/java/vid/automation/test/sections/CreateNewInstancePage.java +++ b/vid-automation/src/main/java/vid/automation/test/sections/CreateNewInstancePage.java @@ -10,7 +10,7 @@ import vid.automation.test.model.Service; public class CreateNewInstancePage extends VidBasePage { public CreateNewInstancePage clickCloseButton() { - GeneralUIUtils.clickOnElementByTestId(Constants.BrowseASDC.MSO_COMMIT_DIALOG_CLOSE_BUTTON, 30); + GeneralUIUtils.clickOnElementByTestId(Constants.MSO_COMMIT_DIALOG_CLOSE_BUTTON, 30); return this; } diff --git a/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialog.java b/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialog.java new file mode 100644 index 000000000..ae7573333 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialog.java @@ -0,0 +1,39 @@ +package vid.automation.test.sections; + +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import vid.automation.test.Constants; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + +public class DeployMacroDialog extends DeployMacroDialogBase { + String dialogTitle = Constants.BrowseASDC.CREATE_SERVICE_INSTANCE_MACRO_MODAL; + @Override + public void assertTitle(){ + + WebElement modalTitle = GeneralUIUtils.getWebElementByTestID(Constants.CREATE_MODAL_TITLE_ID, 30); + assertThat(modalTitle.getText().toLowerCase(), containsString(dialogTitle)); + } + @Override + public void closeDialog(){ + GeneralUIUtils.ultimateWait(); + clickCancelButtonByTestID(); + goOutFromIframe(); + } + + @Override + public void assertDialogExists() { + assertTitle(); + } + + @Override + public void clickOwningEntitySelect() { + GeneralUIUtils.clickOnElementByTestId(Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); + } + + @Override + public void clickProjectSelect() { + GeneralUIUtils.clickOnElementByTestId(Constants.OwningEntity.PROJECT_SELECT_TEST_ID); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialogBase.java b/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialogBase.java new file mode 100644 index 000000000..270f53e97 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialogBase.java @@ -0,0 +1,12 @@ +package vid.automation.test.sections; + +public abstract class DeployMacroDialogBase extends VidBasePage { + + public abstract void assertTitle(); + public abstract void closeDialog(); + public abstract void assertDialogExists(); + public abstract void clickOwningEntitySelect(); + public abstract void clickProjectSelect(); + + +} diff --git a/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialogOld.java b/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialogOld.java new file mode 100644 index 000000000..032852099 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/DeployMacroDialogOld.java @@ -0,0 +1,42 @@ +package vid.automation.test.sections; + +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import vid.automation.test.Constants; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + +public class DeployMacroDialogOld extends DeployMacroDialogBase { + String dialogTitle = "macro"; + + @Override + public void assertTitle(){ + WebElement modalTitle = GeneralUIUtils.getWebElementByTestID(Constants.CREATE_MODAL_TITLE_ID, 30); + assertThat(modalTitle.getText().toLowerCase(), containsString(dialogTitle)); + } + + @Override + public void closeDialog(){ + GeneralUIUtils.ultimateWait(); + clickCancelButtonByTestID(); + } + + @Override + public void assertDialogExists(){ + boolean byText = GeneralUIUtils.findAndWaitByText(Constants.BrowseASDC.CREATE_SERVICE_INSTANCE, 15); + Assert.assertTrue(byText); + } + + @Override + public void clickOwningEntitySelect(){ + GeneralUIUtils.clickOnElementByTestId(Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); + } + + @Override + public void clickProjectSelect(){ + GeneralUIUtils.clickOnElementByTestId(Constants.OwningEntity.PROJECT_SELECT_TEST_ID); + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java b/vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java new file mode 100644 index 000000000..7cffd37b9 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java @@ -0,0 +1,257 @@ +package vid.automation.test.sections; + +import com.google.common.collect.ImmutableList; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import vid.automation.test.Constants; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.Wait; + +import java.util.Collection; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsEmptyCollection.empty; +import static vid.automation.test.Constants.DrawingBoard.*; + +public class DrawingBoardPage extends VidBasePage { + + public DrawingBoardPage(){ + super(); + } + + public void expandTreeByClickingNode(String nodeName, String... children) { + checkNodesVisible(children, false); + clickNode(nodeName); + checkNodesVisible(children, true); + } + + public void clickNode(String nodeName) { + Click.byTestId(Constants.DrawingBoard.NODE_PREFIX + nodeName); + } + + public void expandFirstItemInTreeByExpanderIcon(String treeDataTestId, String... children) { + checkNodesVisible(children, false); + Click.byXpath("//tree-root[@data-tests-id='" + treeDataTestId + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']"); + checkNodesVisible(children, true); + } + + public void checkLeafNodeHasNoExpander(String nodeName){ + WebElement webElement = Get.byXpath("//div[contains(@class, '" + Constants.DrawingBoard.TREE_NODE_LEAF + "') and .//div[@data-tests-id='" + Constants.DrawingBoard.NODE_PREFIX + nodeName + "']]"); + Assert.assertNotNull(webElement, "There is an expander to node " + nodeName + " without children"); + } + + public void verifyNonCollapsableTreeByClickingNode(String nodeName, String... children) { + checkNodesVisible(children, true); + clickNode(nodeName); + checkNodesVisible(children, true); + } + + public void collapseFirstItemInTreeByCollapseIcon(String treeDataTestId, String... children) { + checkNodesVisible(children, true); + Click.byXpath("//tree-root[@data-tests-id='" + treeDataTestId + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']"); + checkNodesVisible(children, false); + } + + public void RefreshPage(){ + GeneralUIUtils.getDriver().navigate().refresh(); + } + + public void assertInitalTextOfTree(String treeDataTestId, String[] initialElements) { + WebElement webElement = Get.byTestId(treeDataTestId); + String expected = String.join("\n", initialElements); + Wait.byText(expected); + Assert.assertEquals(webElement.getText(), expected); + } + + public void checkAddButton(String[] rootElements){ + String previousAddButton = null; + for (String root : rootElements) { + String currentButton = Constants.DrawingBoard.NODE_PREFIX + root + Constants.DrawingBoard.ADD_BUTTON; + checkThatButtonNotExist(currentButton); + GeneralUIUtils.hoverOnAreaByTestId(Constants.DrawingBoard.NODE_PREFIX + root); + checkThatButtonExist(currentButton); + if (previousAddButton != null) { + checkThatButtonNotExist(previousAddButton); + } + Click.byTestId(currentButton); + previousAddButton = currentButton; + } + } + + public void clickAddButtonByNodeName(String treeNodeId) { + String nodeElement = "node-"+ treeNodeId; + String addButtonTestId = Constants.DrawingBoard.NODE_PREFIX + treeNodeId + Constants.DrawingBoard.ADD_BUTTON; + GeneralUIUtils.hoverOnAreaByTestId(nodeElement); + GeneralUIUtils.hoverOnAreaByTestId(addButtonTestId); + Click.byTestId(addButtonTestId); + } + + private void checkThatButtonNotExist(String dataTestId){ +// Assert.assertFalse(GeneralUIUtils.isElementVisibleByTestId(dataTestId),"button " + dataTestId + " should not exist"); + } + + private void checkThatButtonExist(String dataTestId){ +// Assert.assertTrue(GeneralUIUtils.isElementVisibleByTestId(dataTestId), "button " + dataTestId + " should exist"); + } + + private void checkThatPseudoElementNotExist(String dataTestId) { + assertPseudoElementDisplayProp(dataTestId, "none"); + } + + private void assertPseudoElementDisplayProp(String dataTestId, String expectedCssDisplayProp){ + final JavascriptExecutor javascriptExecutor = (JavascriptExecutor) GeneralUIUtils.getDriver(); + final Object cssDisplayProp = javascriptExecutor.executeScript("" + + "return window.getComputedStyle(" + + " document.querySelector('[data-tests-id=\""+dataTestId+"\"]'),':before'" + + ").getPropertyValue('display')" + ); + assertThat("button " + dataTestId + " should exist", cssDisplayProp, is(expectedCssDisplayProp)); + } + + private void checkThatPseudoElementExist(String dataTestId) { + assertPseudoElementDisplayProp(dataTestId, "inline-block"); + } + + public void checkThatContextMenuExist(String contextMenu){ + Assert.assertTrue(GeneralUIUtils.isWebElementExistByTestId(contextMenu), "context menu should appear"); + } + + public void checkThatContextMenuNotExist(String contextMenu){ + Assert.assertFalse(GeneralUIUtils.isWebElementExistByTestId(contextMenu), "context menu should not appear"); + } + + public void checkNodesVisible(String[] children, boolean shouldExist) { + checkElements(ImmutableList.copyOf(children), + childName -> GeneralUIUtils.isWebElementExistByTestId(Constants.DrawingBoard.NODE_PREFIX + childName) ? "exists" : "absent", + shouldExist ? "exists" : "absent", "visibility"); + } + + public void checkNodesHighlighted(String[] children) { + checkElements(ImmutableList.copyOf(children), + childName -> { + final WebElement webElement = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + childName); + final String color = webElement.getCssValue("color"); + return color; + }, + HIGHLIGHTED_COLOR, "highlightning"); + } + + public void checkNodesVisibleAndMatchIsHighlighted(String searchString, String... children) { + checkElements(ImmutableList.copyOf(children), + childName -> { + final WebElement webElement = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + childName); + String visible = webElement.isDisplayed() ? "visible" : "hidden"; + String highlightedText; + String bgColor; + try { + final WebElement highlighted = webElement.findElement(By.cssSelector(".highlight")); + highlightedText = highlighted.getText(); + bgColor = highlighted.getCssValue("background-color"); + } catch (NoSuchElementException e) { + highlightedText = ""; + bgColor = "none"; + } + return String.join("", visible, " and '", highlightedText, "' in ", bgColor); + }, + "visible and '" + searchString + "' in rgb(157, 217, 239)", "match highlightning"); + } + + private void checkElements(Collection<String> elements, Function<String, String> predicate, String expected, final String description) { + final Map<String, String> expectedMap = elements.stream().collect(Collectors.toMap( + childName -> childName, + child -> expected + )); + final Map<String, String> actual = elements.stream().collect(Collectors.toMap( + childName -> childName, + predicate + )); + + assertThat("There was an error in " + description + " of elements", actual, equalTo(expectedMap)); + } + + public void navigateToServicePlanningPage() { + navigateTo("/vid/app/ui/#/servicePlanning"); + } + + public void navigateToEmptyServicePlanningPage() { + navigateTo("/vid/app/ui/#/servicePlanningEmpty"); + } + + public void checkContextMenu(String node){ + String contextMenuButton = Constants.DrawingBoard.NODE_PREFIX + node + Constants.DrawingBoard.CONTEXT_MENU_BUTTON; + final String contextMenu = Constants.DrawingBoard.CONTEXT_MENU_ITEM; + + checkThatPseudoElementNotExist(contextMenuButton); + checkThatContextMenuNotExist(contextMenu); + + GeneralUIUtils.hoverOnAreaByTestId(Constants.DrawingBoard.NODE_PREFIX + node); + checkThatPseudoElementExist(contextMenuButton); + Click.byTestId(contextMenuButton); + + checkThatContextMenuExist(contextMenu); + } + + public void checkSearch(){ + String searchElement = Constants.DrawingBoard.SEARCH_LEFT_TREE;// TODO - should add that it is on the left tree and should create the id of the search element??? + Assert.assertTrue(GeneralUIUtils.isWebElementExistByTestId(searchElement), "search " + searchElement + " should exist"); + } + + public void showTooltipByHoverAboveAlertIcon(String element){ + assertThat("tooltip should not appear before click", + GeneralUIUtils.getDriver().findElements(By.xpath("//*[contains(@class, '" + "tooltip-inner" + "')]")), + is(empty()) + ); + + GeneralUIUtils.hoverOnAreaByTestId(Constants.DrawingBoard.NODE_PREFIX + element + Constants.DrawingBoard.ALERT_ICON); + + final WebElement webElement = GeneralUIUtils.getWebElementByContainsClassName("tooltip-inner"); + assertThat(webElement.getText(), is("Missing required information. Please open and fill in the details.")); + } + + public void clickDeployButton(){ + GeneralUIUtils.ultimateWait(); + + try { + GeneralUIUtils.clickOnElementByTestId(DEPLOY_BUTTON); + } catch (org.openqa.selenium.WebDriverException e) { + // "deploy" replaces the iframe, so "TypeError: can't access dead object" exception is eventually thrown + if (!e.getMessage().startsWith("TypeError: can't access dead object")) { + throw e; + } + } + + } + + public void checkDeployButtonDisabled(){ + Assert.assertFalse(Get.byTestId(DEPLOY_BUTTON).isEnabled(),"Deploy button is enabled and should be disabled"); + } + + public void checkExistsAndEnabled(String dataTestId){ + Assert.assertFalse(GeneralUIUtils.isElementDisabled(dataTestId),"Element " + dataTestId + " should exist and be enabled"); + } + + public void checkServiceInstanceName(String expectedServiceName){ + Assert.assertEquals(SERVICE_INSTANCE_VALUE, Get.byTestId(SERVICE_INSTANCE_TEST_ID).getText()); + Assert.assertEquals(Get.byTestId(SERVICE_NAME).getText(),expectedServiceName); + } + + public void checkServiceStatus() { + Assert.assertEquals(Get.byTestId(SERVICE_STATUS).getText(),STATUS_TEXT); + } + + public void checkQuantityNumberIsCorrect(int expectedQuantity) { + Assert.assertEquals(Get.byTestId(QUANTITY_LABEL_TEST_ID).getText(), (String.valueOf(QUANTITY_LABEL_VALUE))); + Assert.assertEquals(Get.byTestId(SERVICE_QUANTITY).getText(), (String.valueOf(expectedQuantity))); + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/sections/InstantiationStatusPage.java b/vid-automation/src/main/java/vid/automation/test/sections/InstantiationStatusPage.java new file mode 100644 index 000000000..e5dd1bb39 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/InstantiationStatusPage.java @@ -0,0 +1,59 @@ +package vid.automation.test.sections; + +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import vid.automation.test.infra.Get; + +import java.util.Map; +import java.util.stream.Collectors; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public abstract class InstantiationStatusPage extends VidBasePage { + + public static final String refreshButtonId = "refresh-btn"; + + public static String getWebTrTdSpanElementByParentID(WebElement tr, String id, int timeout) { + return tr.findElements(By.xpath(".//*[@id='" + id + "']//span")).get(0).getText(); + } + + public static int getNumberOfTableRows(int timeout){ + WebDriverWait wait = waitUntilDriverIsReady(timeout); + return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[table]//tbody/tr"))).size(); + } + + public static WebElement assertInstantiationStatusRow(String spanIdSelector, Map<String, String> fieldsIdsAndExpected) { + try { + WebElement newTrRow = getInstantiationStatusRow(spanIdSelector); + final Map<String, String> fieldIdAndActual = fieldsIdsAndExpected.entrySet().stream() + .collect(Collectors.toMap( + kv -> kv.getKey(), + kv -> getWebTrTdSpanElementByParentID(newTrRow, kv.getKey(), 1) + )); + + assertThat("failed comparing spanIdSelector " + spanIdSelector, fieldIdAndActual, is(fieldsIdsAndExpected)); + + return newTrRow; + } catch (Exception e) { + throw new RuntimeException("error while assertInstantiationStatusRow with: String spanIdSelector=" + + spanIdSelector + ", fieldsIdsAndExpected=" + fieldsIdsAndExpected, e); + } + } + + public static WebElement getInstantiationStatusRow(String spanIdSelector) { + GeneralUIUtils.ultimateWait(); + return Get.byXpath("//*[@id='" + spanIdSelector + "']/parent::*/parent::*/parent::*", 0); + } + + public static void clickRefreshButton() { + WebDriverWait wait = waitUntilDriverIsReady(0); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='"+ refreshButtonId + "']"))).click(); + GeneralUIUtils.ultimateWait(); + } + + +} diff --git a/vid-automation/src/main/java/vid/automation/test/sections/PreviousVersionDialog.java b/vid-automation/src/main/java/vid/automation/test/sections/PreviousVersionDialog.java new file mode 100644 index 000000000..d5f39d959 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/PreviousVersionDialog.java @@ -0,0 +1,34 @@ +package vid.automation.test.sections; + +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.remote.RemoteWebElement; +import vid.automation.test.infra.Get; + +public class PreviousVersionDialog extends VidBasePage{ + + public void assertPreviousVersionButtonExists(String expectedInvariantUUID){ + + WebElement viewPreviousButtonWebElement = GeneralUIUtils.getWebElementByTestID("Invariant-" + expectedInvariantUUID); + Assert.assertEquals(expectedInvariantUUID, viewPreviousButtonWebElement.getText()); + } + + public void assertVersionRow(String expectedInvariantId, String expectedmodelVersionId, String expectedVersionId , String testId){ + + WebElement invariantUUIDTableCell = GeneralUIUtils.getWebElementByTestID(testId + expectedmodelVersionId); + String modelVersionId = ((RemoteWebElement) invariantUUIDTableCell).findElementsByTagName("td").get(1).getText(); + String invariantId = ((RemoteWebElement) invariantUUIDTableCell).findElementsByTagName("td").get(2).getText(); + String versionId = ((RemoteWebElement) invariantUUIDTableCell).findElementsByTagName("td").get(4).getText(); + Assert.assertEquals(expectedmodelVersionId, modelVersionId); + Assert.assertEquals(expectedInvariantId, invariantId); + Assert.assertEquals(expectedVersionId, versionId); + } + + public void assertHighestVersionNotExists( String expectedmodelVersionId){ + + Assert.assertNull(Get.byTestId("Previous-version-pop-up-uuid-" + expectedmodelVersionId)); + + } + } + diff --git a/vid-automation/src/main/java/vid/automation/test/sections/SearchExistingPage.java b/vid-automation/src/main/java/vid/automation/test/sections/SearchExistingPage.java index 5fc4894e9..edfcd0e56 100644 --- a/vid-automation/src/main/java/vid/automation/test/sections/SearchExistingPage.java +++ b/vid-automation/src/main/java/vid/automation/test/sections/SearchExistingPage.java @@ -4,6 +4,10 @@ import org.junit.Assert; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.WebElement; import vid.automation.test.Constants; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.Wait; + +import static org.testng.Assert.assertTrue; /** @@ -12,6 +16,8 @@ import vid.automation.test.Constants; public class SearchExistingPage extends VidBasePage { + public static final String PROJECT_NAME = "Project Name"; + public SearchExistingPage() {} public void selectSearchById(){ @@ -40,6 +46,7 @@ public class SearchExistingPage extends VidBasePage { private void startSearchByInstanceIdentifier(String text) { WebElement textInputWebElement = GeneralUIUtils.getWebElementByTestID(Constants.EditExistingInstance.SEARCH_FOR_EXISTING_INSTANCES_INPUT, 30); Assert.assertTrue(textInputWebElement != null); + textInputWebElement.clear(); textInputWebElement.sendKeys(text); clickSubmitButton(); } @@ -49,6 +56,23 @@ public class SearchExistingPage extends VidBasePage { startSearchByInstanceIdentifier(name); } + public void searchByProject(String projectName) { + assertTrue(Wait.waitByClassAndText("fn-ebz-text-label", PROJECT_NAME, 1), "Failed to find label "+PROJECT_NAME); //Test bug VID-495468 + selectValueDDL(Constants.EditExistingInstance.SELECT_PROJECT_ID, projectName); + } + + public void searchByOwningEntity(String oeName) { + selectValueDDL(Constants.EditExistingInstance.SELECT_OWNING_ENTITY_ID, oeName); + } + + private void selectValueDDL(String ddlId, String value) { + Click.byId(ddlId); + GeneralUIUtils.ultimateWait(); + Click.byText(value); + //click again on the element that will not cover the submit button + Click.byId(ddlId); + } + public void checkForEditButtons() { boolean isDeleteVisible = GeneralUIUtils.waitForElementInVisibilityByTestId(Constants.EditExistingInstance.DELETE_VNF_BTN, 30); Assert.assertFalse(isDeleteVisible); diff --git a/vid-automation/src/main/java/vid/automation/test/sections/ServiceProxyPage.java b/vid-automation/src/main/java/vid/automation/test/sections/ServiceProxyPage.java new file mode 100644 index 000000000..a47870290 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/ServiceProxyPage.java @@ -0,0 +1,92 @@ +package vid.automation.test.sections; + +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import vid.automation.test.Constants; +import vid.automation.test.infra.SelectOption; + +import static org.hamcrest.core.Is.is; + +public class ServiceProxyPage extends VidBasePage { + + public ServiceProxyPage chooseSource(String source){ + SelectOption.byTestIdAndVisibleText(source, Constants.ConfigurationCreation.SOURCE_DROPDOWN_TEST_ID); + return this; + } + public ServiceProxyPage chooseSourceServiceType(String sourceServiceType){ + SelectOption.byTestIdAndVisibleText(sourceServiceType, "sourceServiceType"); + GeneralUIUtils.ultimateWait(); + return this; + } + public ServiceProxyPage chooseCollectorServiceType(String collectorServiceType){ + SelectOption.byTestIdAndVisibleText(collectorServiceType, "collectorServiceType"); + GeneralUIUtils.ultimateWait(); + return this; + } + public ServiceProxyPage chooseCollector(String collector){ + GeneralUIUtils.ultimateWait(); + SelectOption.byTestIdAndVisibleText(collector, Constants.ConfigurationCreation.COLLECTOR_DROPDOWN_TEST_ID); + return this; + } + public ServiceProxyPage clickCreateButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID, 60); + return this; + } + + public ServiceProxyPage clickDeleteConfigurationButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.DELETE_CONFIGURATION_BUTTON, 60); + return this; + } + + public ServiceProxyPage assertDeleteConfigurationButtonExists(boolean shouldExist){ + + if (shouldExist) { + WebElement selectedV = GeneralUIUtils.getWebElementByTestID(Constants.DELETE_CONFIGURATION_BUTTON, 3); + Assert.assertThat(selectedV != null, is(shouldExist)); + Assert.assertThat(selectedV.isDisplayed(), is(shouldExist)); + } else { + boolean webElementExistByTestId = GeneralUIUtils.isWebElementExistByTestId(Constants.DELETE_CONFIGURATION_BUTTON); + Assert.assertThat(webElementExistByTestId, is(shouldExist)); + } + return this; + } + + public void assertSourceModelName(String sourceName){ + String displayedSourceName= getTextByTestID(Constants.ConfigurationCreation.SOURCE_INSTANCE_NAME_TEST_ID); + Assert.assertEquals("The displayed source name is not correct", sourceName+" i", displayedSourceName); + } + + public void assertCollectorModelName(String collectorName) { + String displayedCollectorName = getTextByTestID(Constants.ConfigurationCreation.COLLECTOR_INSTANCE_NAME_TEST_ID); + Assert.assertEquals("The displayed collector name is not correct", collectorName+"i", displayedCollectorName); + } + + public void assertNoResultRequirementsDropDown(String msgTestId, String resourceType){ + String noResultText = GeneralUIUtils.getWebElementByTestID(msgTestId, 60).getText(); + Assert.assertEquals("The error message no instance in DropDown is not match","No "+resourceType+" instances found.",noResultText); + } + public ServiceProxyPage clickInfoButton(String infoButtonTestId) { + GeneralUIUtils.clickOnElementByTestId(infoButtonTestId, 90); + return this; + } + + + public ServiceProxyPage assertSelectedInstanceIcon(String SelectedIconTestId){ + WebElement selectedV = GeneralUIUtils.getWebElementByTestID(SelectedIconTestId, 90); + Assert.assertTrue(selectedV != null); + String selectedVClass = selectedV.getAttribute("class"); + Assert.assertTrue(selectedVClass.contains("valid-large")); + return this; + } + + public ServiceProxyPage clickActivateDeactivateButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.ACTIVATE_DEACTIVATE_BUTTON, 60); + return this; + } + + public ServiceProxyPage clickEnableDisableButton(){ + GeneralUIUtils.clickOnElementByTestId(Constants.ENABLE_DISABLE_BUTTON, 60); + return this; + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/sections/SideMenu.java b/vid-automation/src/main/java/vid/automation/test/sections/SideMenu.java index 8745001dd..0ba49f2d8 100644 --- a/vid-automation/src/main/java/vid/automation/test/sections/SideMenu.java +++ b/vid-automation/src/main/java/vid/automation/test/sections/SideMenu.java @@ -2,6 +2,8 @@ package vid.automation.test.sections; import org.junit.Assert; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.ElementClickInterceptedException; +import org.openqa.selenium.UnhandledAlertException; import vid.automation.test.Constants; public class SideMenu { @@ -21,10 +23,50 @@ public class SideMenu { navigateToPage(Constants.SideMenu.TEST_ENVIRONMENTS); } + public static void navigateToMacroInstantiationStatus() { + navigateToPage("Macro Instantiation Status"); + new VidBasePage().goToIframe(); + } + private static void navigateToPage(String PageName) { + boolean findAndWaitByText = GeneralUIUtils.findAndWaitByText(PageName, 30); + + if (!findAndWaitByText) { + doEvenIfAlertIsShown(SideMenu::navigateToWelcomePage); + findAndWaitByText = GeneralUIUtils.findAndWaitByText(PageName, 10); + } + Assert.assertTrue(findAndWaitByText); - GeneralUIUtils.clickOnElementByText(PageName, 150); + doEvenIfAlertIsShown(() -> { + try { + GeneralUIUtils.clickOnElementByText(PageName, 50); + } catch (ElementClickInterceptedException e) { + navigateToWelcomePage(); + GeneralUIUtils.clickOnElementByText(PageName, 100); + } + }); GeneralUIUtils.ultimateWait(); } + + public static void navigateToWelcomePage() { + doEvenIfAlertIsShown(() -> { + VidBasePage base = new VidBasePage(); + base.navigateTo("welcome.htm"); + }); + } + + private static void doEvenIfAlertIsShown(Runnable runnable) { + try { + runnable.run(); + } catch (UnhandledAlertException e) { + // an alert popup was shown; dismiss it if it's still there + try { + GeneralUIUtils.getDriver().switchTo().alert().dismiss(); + } catch (org.openqa.selenium.NoAlertPresentException e2) { + // YOLO + } + runnable.run(); + } + } } diff --git a/vid-automation/src/main/java/vid/automation/test/sections/VidBasePage.java b/vid-automation/src/main/java/vid/automation/test/sections/VidBasePage.java index 6e0367edd..69aee494a 100644 --- a/vid-automation/src/main/java/vid/automation/test/sections/VidBasePage.java +++ b/vid-automation/src/main/java/vid/automation/test/sections/VidBasePage.java @@ -1,16 +1,27 @@ package vid.automation.test.sections; +import com.aventstack.extentreports.Status; import org.junit.Assert; +import org.openecomp.sdc.ci.tests.execute.setup.ExtentTestActions; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import vid.automation.test.Constants; -import vid.automation.test.infra.Click; -import vid.automation.test.infra.SelectOption; -import vid.automation.test.infra.Wait; +import vid.automation.test.infra.*; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; +import java.util.List; +import java.util.function.Function; + +import static org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils.getDriver; public class VidBasePage { @@ -19,9 +30,16 @@ public class VidBasePage { return this; } - public void generateAndSetInstanceName(String prefix) { + + public VidBasePage setLegacyRegion(String name) { + setInputText(Constants.ViewEdit.LEGACY_REGION_INPUT_TESTS_ID, name); + return this; + } + + public String generateAndSetInstanceName(String prefix) { String instanceName = generateInstanceName(prefix); setInstanceName(instanceName); + return instanceName; } public VidBasePage setInputText(String inputTestsId, String text) { @@ -30,6 +48,12 @@ public class VidBasePage { return this; } + public String getInputValue(String inputTestsId) { + WebElement instanceNameInput = GeneralUIUtils.getInputElement(inputTestsId); + String value =instanceNameInput.getAttribute("value"); + return value; + } + public String generateInstanceName(String prefix) { SimpleDateFormat sdf = new SimpleDateFormat(Constants.BrowseASDC.DATE_FORMAT); Date now = Calendar.getInstance().getTime(); @@ -40,11 +64,27 @@ public class VidBasePage { SelectOption.byTestIdAndVisibleText(serviceType, Constants.SERVICE_TYPE_SELECT_TESTS_ID); return this; } + public VidBasePage selectFromDropdownByTestId(String itemTestId, String dropdownButtonTestId) { + GeneralUIUtils.clickOnElementByTestId(dropdownButtonTestId, 60); + Assert.assertTrue(String.format(Constants.ViewEdit.OPTION_IN_DROPDOWN_NOT_EXISTS,itemTestId, dropdownButtonTestId),GeneralUIUtils.getWebElementByTestID(itemTestId) != null ); + GeneralUIUtils.clickOnElementByTestId(itemTestId, 60); + return this; + } + public VidBasePage noOptionDropdownByTestId( String dropdownButtonTestId) { + List<WebElement> selectList= SelectOption.getList(dropdownButtonTestId); + Assert.assertTrue("The Select Input "+ dropdownButtonTestId+" should be empty",selectList.size()==1); + return this; + } public static void selectSubscriberById(String subscriberId) { SelectOption.byValue(subscriberId, Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID); } + public VidBasePage selectSubscriberByName(String subscriberName) { + SelectOption.byTestIdAndVisibleText(subscriberName, Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID); + return this; + } + public VidBasePage selectProductFamily(String productFamily) { SelectOption.byValue(productFamily, Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID); return this; @@ -56,20 +96,42 @@ public class VidBasePage { } public VidBasePage clickDeployServiceButtonByServiceUUID(String serviceUUID) { - setInputText(Constants.BROWSE_SEARCH, serviceUUID); + Input.replaceText(serviceUUID, Constants.BROWSE_SEARCH); String elementTestId = Constants.DEPLOY_BUTTON_TESTS_ID_PREFIX + serviceUUID; GeneralUIUtils.clickOnElementByTestId(elementTestId, 30); GeneralUIUtils.ultimateWait(); + + screenshotDeployDialog(serviceUUID); + return this; } + public void screenshotDeployDialog(String serviceUUID) { + try { + GeneralUIUtils.ultimateWait(); + GeneralUIUtils.ultimateWait(); // better screenshot + String screenshotName = "deployService-" + serviceUUID; + ExtentTestActions.addScreenshot(Status.INFO, screenshotName, screenshotName); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public VidBasePage clickEditViewByInstanceId(String instanceId) { String elementTestId = Constants.VIEW_EDIT_TEST_ID_PREFIX + instanceId; GeneralUIUtils.clickOnElementByTestId(elementTestId, 100); - GeneralUIUtils.ultimateWait(); + return this; } + public Boolean checkEditOrViewExistsByInstanceId(String instanceId) { + String elementTestId = Constants.VIEW_EDIT_TEST_ID_PREFIX + instanceId; + return Exists.byTestId(elementTestId); + } + + + public VidBasePage clickSubmitButton() { GeneralUIUtils.clickOnElementByText(Constants.SUBMIT_BUTTON_TEXT, 30); return this; @@ -80,17 +142,37 @@ public class VidBasePage { return this; } + public VidBasePage clickCancelButtonByTestID() { + GeneralUIUtils.clickOnElementByTestId(Constants.CANCEL_BUTTON_TEST_ID, 30); + return this; + } + public VidBasePage clickConfirmButton() { GeneralUIUtils.clickOnElementByTestId(Constants.CONFIRM_BUTTON_TESTS_ID, 30); return this; } + public VidBasePage clickConfirmButtonInResumeDelete() { + GeneralUIUtils.clickOnElementByTestId(Constants.CONFIRM_RESUME_DELETE_TESTS_ID); + return this; + } + + public VidBasePage clickCommitCloseButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.COMMIT_CLOSE_BUTTON_ID, 30); + return this; + } + public VidBasePage clickCloseButton() { - GeneralUIUtils.clickOnElementByText(Constants.CLOSE_BUTTON_TEXT, 30); + return clickCloseButton(30); + } + + public VidBasePage clickCloseButton(int customTimeout) { + GeneralUIUtils.clickOnElementByText(Constants.CLOSE_BUTTON_TEXT, customTimeout); return this; } + public VidBasePage selectLcpRegion(String lcpRegion) { SelectOption.byValue(lcpRegion, Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID); return this; @@ -106,27 +188,107 @@ public class VidBasePage { return this; } + public VidBasePage selectRollbackOption(boolean rollback) { + SelectOption.byValue(String.valueOf(rollback) , Constants.ViewEdit.ROLLBACK_TEST_ID); + return this; + } + + public VidBasePage selectPlatform(String platform) { + SelectOption.byValue(platform, Constants.OwningEntity.PLATFORM_SELECT_TEST_ID); + return this; + } + + public VidBasePage selectLineOfBusiness(String lob) { + SelectOption.byValue(lob, Constants.OwningEntity.LOB_SELECT_TEST_ID); + return this; + } + public void assertButtonState(String dataTestId, boolean shouldBeEnabled) { + assertButtonStateInternal(dataTestId, shouldBeEnabled, + (dataTestIdInner) -> GeneralUIUtils.getWebElementByTestID(dataTestIdInner, 60)); + } + + public void assertButtonStateEvenIfButtonNotVisible(String dataTestId, boolean shouldBeEnabled) { + // getInputElement is quite similar to getWebElementByTestID, but doesn't use + // the visibility predicate, so button is reachable bhind the grayed-out panel + assertButtonStateInternal(dataTestId, shouldBeEnabled, + (dataTestIdInner) -> GeneralUIUtils.getInputElement(dataTestIdInner)); + } + + protected void assertButtonStateInternal(String dataTestId, boolean shouldBeEnabled, Function<String,WebElement> strategy) { GeneralUIUtils.ultimateWait(); - WebElement webElement = GeneralUIUtils.getWebElementByTestID(dataTestId, 60); - boolean enabledElement= webElement.getAttribute("disabled")==null?true:false; + boolean enabledElement= strategy.apply(dataTestId).getAttribute("disabled") == null; if(shouldBeEnabled) { - Assert.assertTrue(String.format(Constants.ViewEdit.ENABLE_ERROR_MESSAGE,dataTestId), enabledElement); + Assert.assertTrue(String.format(Constants.ViewEdit.DISABLE_ERROR_MESSAGE,dataTestId), enabledElement); }else{ - Assert.assertFalse(String.format(Constants.ViewEdit.DISABLE_ERROR_MESSAGE,dataTestId),enabledElement); + Assert.assertFalse(String.format(Constants.ViewEdit.ENABLE_ERROR_MESSAGE,dataTestId),enabledElement); } } public VidBasePage assertMsoRequestModal(String statusMsg) { - boolean waitForTextResult = Wait.waitByClassAndText("status", statusMsg, 60); + boolean waitForTextResult = Wait.waitByClassAndText("status", statusMsg, 20); Assert.assertTrue(statusMsg + " message didn't appear on time", waitForTextResult); return this; } public VidBasePage refreshPage() { - GeneralUIUtils.getDriver().navigate().refresh(); + getDriver().navigate().refresh(); return this; } + public String navigateTo(String path) { + String envUrl = System.getProperty("ENV_URL"); + URI uri; + try { + uri = new URI(envUrl); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + String target = uri.resolve(path).toString(); + + getDriver().navigate().to(target); + GeneralUIUtils.ultimateWait(); + + return target; + } + + public String getTextByTestID(String testId){ + WebElement webElement= GeneralUIUtils.getWebElementByTestID(testId); + return webElement.getText(); + } + + public void checkAndCloseAlert(String expectedText) { + String alertText= Get.alertText(); + Assert.assertEquals(expectedText, alertText); + Click.acceptAlert(); + } + public void goToIframe() { + final long start = System.currentTimeMillis(); + goOutFromIframe(); + GeneralUIUtils.ultimateWait(); + System.out.println("ultimateWait waited " + (System.currentTimeMillis() - start)); + final WebDriver iframeReady = new WebDriverWait(getDriver(), 10).until( + ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.tagName("iframe")) + ); + Assert.assertNotNull("failed going into iframe", iframeReady); + + final long start2 = System.currentTimeMillis(); + GeneralUIUtils.ultimateWait(); + System.out.println("ultimateWait waited " + (System.currentTimeMillis() - start2)); + } + + public void goOutFromIframe(){ + getDriver().switchTo().defaultContent(); + } + + + + + + public static WebDriverWait waitUntilDriverIsReady(int time) { + return new WebDriverWait(getDriver(), (long)time); + } + + } diff --git a/vid-automation/src/main/java/vid/automation/test/sections/ViewEditPage.java b/vid-automation/src/main/java/vid/automation/test/sections/ViewEditPage.java index 5f532d22a..633feb83d 100644 --- a/vid-automation/src/main/java/vid/automation/test/sections/ViewEditPage.java +++ b/vid-automation/src/main/java/vid/automation/test/sections/ViewEditPage.java @@ -8,6 +8,11 @@ import vid.automation.test.Constants; import vid.automation.test.infra.Get; import vid.automation.test.infra.SelectOption; import vid.automation.test.infra.Wait; +import org.hamcrest.core.Is; + +import static org.hamcrest.core.Is.is; + +import java.util.List; /** * Created by itzikliderman on 13/06/2017. @@ -19,6 +24,29 @@ public class ViewEditPage extends VidBasePage { return this; } + public ViewEditPage selectVfModuleToAdd(String vfModuleName) { + selectFromDropdownByTestId(Constants.ViewEdit.VF_MODULE_OPTION_TEST_ID_PREFIX + vfModuleName, + Constants.ViewEdit.ADD_VF_MODULE_BUTTON_TEST_ID); + return this; + } + + public ViewEditPage clickResumeButton(String instanceName) { + //instanceName = "my_vfModule"; + String instanceId = Constants.ViewEdit.VF_MODULE_RESUME_ID_PREFIX + instanceName; + checkIfExistResumeButton(instanceName,true); + GeneralUIUtils.clickOnElementByTestId(instanceId); + return this; + } + + + public ViewEditPage checkIfExistResumeButton(String instanceName, Boolean expected) { + //instanceName = "my_vfModule"; + String instanceId = Constants.ViewEdit.VF_MODULE_RESUME_ID_PREFIX + instanceName; + WebElement resumeButton = GeneralUIUtils.getWebElementByTestID(instanceId, 30); + Assert.assertThat(resumeButton != null, is(expected)); + return this; + } + public ViewEditPage selectVolumeGroupToAdd(String volumeGroupName) { selectFromDropdownByTestId(Constants.ViewEdit.VOLUME_GROUP_OPTION_TEST_ID_PREFIX + volumeGroupName, Constants.ViewEdit.ADD_VOLUME_GROUP_BUTTON_TEST_ID); @@ -31,10 +59,9 @@ public class ViewEditPage extends VidBasePage { return this; } - public ViewEditPage selectFromDropdownByTestId(String itemTestId, String dropdownButtonTestId) { - GeneralUIUtils.clickOnElementByTestId(dropdownButtonTestId, 60); - Assert.assertTrue(String.format(Constants.ViewEdit.OPTION_IN_DROPDOWN_NOT_EXISTS,dropdownButtonTestId,"Add network instance"),GeneralUIUtils.getWebElementByTestID(itemTestId) != null ); - GeneralUIUtils.clickOnElementByTestId(itemTestId, 60); + public ViewEditPage selectNetworkToAdd(String networkName) { + selectFromDropdownByTestId(Constants.ViewEdit.NETWORK_OPTION_TEST_ID_PREFIX + networkName, + Constants.ViewEdit.ADD_NETWORK_BUTTON_TEST_ID); return this; } @@ -55,6 +82,7 @@ public class ViewEditPage extends VidBasePage { public ViewEditPage selectTenant(String tenant){ SelectOption.byValue(tenant, Constants.ViewEdit.TENANT_SELECT_TESTS_ID); + // GeneralUIUtils.clickOnElementByTestId(Constants.ViewEdit.TENANT_SELECT_TESTS_ID, 60); return this; } @@ -63,6 +91,17 @@ public class ViewEditPage extends VidBasePage { return this; } + public VidBasePage clickInfoButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.ViewEdit.INFOSERVICEBUTTON, 30); + return this; + } + + public VidBasePage clickDeleteButton() { + GeneralUIUtils.clickOnElementByTestId(Constants.ViewEdit.DELETESERVICEBUTTON, 3); + return this; + } + + public WebElement getPnf(String pnfName) { WebElement pnfElement = Get.byClassAndText("tree-node", "PNF: " + pnfName); Assert.assertNotNull("Pnf "+ pnfName +" not found under service instance", pnfElement); @@ -81,4 +120,20 @@ public class ViewEditPage extends VidBasePage { GeneralUIUtils.clickOnElementByTestId(Constants.ViewEdit.DEACTIVATE_BUTTON_TEST_ID, 30); return this; } + + public ViewEditPage selectLineOfBusiness(String lineOfBusiness) { + try { + SelectOption.selectFirstTwoOptionsFromMultiselectById(Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID); + } catch (InterruptedException e) { + e.printStackTrace(); + return this; + } + //TODO multi SelectOption.byValue(lineOfBusiness, Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID); + return this; + } + + public ViewEditPage selectPlatform(String platform) { + SelectOption.byValue(platform, Constants.OwningEntity.PLATFORM_SELECT_TEST_ID); + return this; + } } diff --git a/vid-automation/src/main/java/vid/automation/test/services/AsyncJobsService.java b/vid-automation/src/main/java/vid/automation/test/services/AsyncJobsService.java new file mode 100644 index 000000000..01158fa66 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/services/AsyncJobsService.java @@ -0,0 +1,44 @@ +package vid.automation.test.services; + +import vid.automation.test.utils.DB_CONFIG; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +public class AsyncJobsService { + + public void dropAllAsyncJobs() { + System.out.println("Connecting database..."); + + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + System.out.println("Database connected!"); + + Statement stmt = connection.createStatement(); + stmt.addBatch("DELETE FROM `vid_service_info`"); + stmt.addBatch("DELETE FROM `vid_job`"); + stmt.addBatch("DELETE FROM `vid_job_audit_status`"); + int[] executeBatch = stmt.executeBatch(); + + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + } + + public void muteAllAsyncJobs() { + System.out.println("Connecting database..."); + + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + System.out.println("Database connected!"); + + Statement stmt = connection.createStatement(); + stmt.addBatch("UPDATE `vid_job` set `TAKEN_BY`='muteAllAsyncJobs', `AGE`=`AGE`+5"); + int[] executeBatch = stmt.executeBatch(); + + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/services/BulkRegistration.java b/vid-automation/src/main/java/vid/automation/test/services/BulkRegistration.java index 4cdd85d24..b142195e5 100644 --- a/vid-automation/src/main/java/vid/automation/test/services/BulkRegistration.java +++ b/vid-automation/src/main/java/vid/automation/test/services/BulkRegistration.java @@ -1,35 +1,109 @@ package vid.automation.test.services; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import org.opencomp.simulator.presetGenerator.presets.aai.*; +import org.opencomp.simulator.presetGenerator.presets.mso.*; +import org.opencomp.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet; +import org.opencomp.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet; import vid.automation.test.Constants; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; + public class BulkRegistration { public static void searchExistingServiceInstance() { searchExistingServiceInstance("Active"); } + public static void searchExistingServiceInstance(String orchStatus) { + genericSearchExistingServiceInstance(); + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE, + Constants.RegisterToSimulator.SearchForServiceInstance.FILTER_SERVICE_INSTANCE_BY_ID, + Constants.RegisterToSimulator.SearchForServiceInstance.NAMED_QUERY_VIEW_EDIT, + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SDC_CATALOG_SERVICE_VID_TEST_444, + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.GET_AIC_ZONES + }, ImmutableMap.<String, Object>of("<ORCH_STATUS>", orchStatus), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void searchExistingServiceInstanceByOEAndProject(){ + SimulatorApi.registerExpectationFromPresets(ImmutableList.of( + new PresetAAIGetModelsByOwningEntity("Wireline"), + new PresetAAIGetModelsByProject("x1"), + new PresetAAIGetModelsByProject("yyy1") + ), APPEND); + } + + public static void searchExistingCRServiceInstance(String orchStatus) { + genericSearchExistingServiceInstance(); + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE_CR, + Constants.RegisterToSimulator.SearchForServiceInstance.FILTER_CR_SERVICE_INSTANCE_BY_ID, + Constants.RegisterToSimulator.SearchForServiceInstance.NAMED_QUERY_CR_VIEW_EDIT, + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SDC_CATALOG_SERVICE_VID_TEST_CR, + Constants.RegisterToSimulator.SearchForServiceInstance.GET_MSO_INSTANCE_ORCH_STATUS_REQ, + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.GET_AIC_ZONES + }, ImmutableMap.<String, Object>of("<ORCH_STATUS>", orchStatus, "<SERVICE_INSTANCE_ID>", "3f93c7cb-2fd0-4557-9514-e189b7testCR"), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void searchExistingVFServiceWithVFCInstanceGroupInstance(String orchStatus) { + genericSearchExistingServiceInstance(); + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.AddSubinterface.GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE_VFC_IG, + Constants.RegisterToSimulator.AddSubinterface.FILTER_VFC_IG_SERVICE_INSTANCE_BY_ID, + Constants.RegisterToSimulator.AddSubinterface.NAMED_QUERY_VFC_IG_VIEW_EDIT, + Constants.RegisterToSimulator.AddSubinterface.GET_SDC_CATALOG_SERVICE_VID_TEST_444, + Constants.RegisterToSimulator.AddSubinterface.GET_MSO_VFC_IG_INSTANCE_ORCH_STATUS_REQ, + }, ImmutableMap.<String, Object>of("<ORCH_STATUS>", orchStatus), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void genericSearchExistingServiceInstance() { SimulatorApi.registerExpectation( new String [] { Constants.RegisterToSimulator.genericRequest.ECOMP_PORTAL_GET_SESSION_SLOT_CHECK_INTERVAL, Constants.RegisterToSimulator.SearchForServiceInstance.GET_FULL_SUBSCRIBERS, - Constants.RegisterToSimulator.SearchForServiceInstance.GET_SERVICES, - Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER, - Constants.RegisterToSimulator.SearchForServiceInstance.FILTER_SERVICE_INSTANCE_BY_ID, - Constants.RegisterToSimulator.SearchForServiceInstance.NAMED_QUERY_VIEW_EDIT + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SERVICES - }, ImmutableMap.<String, Object>of("<ORCH_STATUS>", orchStatus)); + }, ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); } public static void searchExistingServiceInstance2(String orchStatus) { + genericSearchExistingServiceInstance(); SimulatorApi.registerExpectation( new String [] { - Constants.RegisterToSimulator.SearchForServiceInstance.GET_FULL_SUBSCRIBERS, - Constants.RegisterToSimulator.SearchForServiceInstance.GET_SERVICES, - Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_2, + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_FIREWALL_MISC, Constants.RegisterToSimulator.SearchForServiceInstance.FILTER_SERVICE_INSTANCE_BY_ID_2, Constants.RegisterToSimulator.SearchForServiceInstance.NAMED_QUERY_VIEW_EDIT_2 - }, ImmutableMap.<String, Object>of("<ORCH_STATUS>", orchStatus)); + }, ImmutableMap.<String, Object>of("<ORCH_STATUS>", orchStatus), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void searchExistingServiceInstancePortMirroring(String orchStatus, String desiredCloudRegionId) { + searchExistingServiceInstancePortMirroring(orchStatus, true, desiredCloudRegionId); + } + + public static void searchExistingServiceInstancePortMirroring(String orchStatus, boolean isMirrored, String desiredCloudRegionId) { + genericSearchExistingServiceInstance(); + final String configurationId = "9533-config-LB1113"; + final String portInterfaceId = "d35bf534-7d8e-4cb4-87f9-0a8bb6cd47b2"; + final String modelToReplaceWith ="pm1111_equip_model_rename.zip"; + + SimulatorApi.registerExpectationFromPreset(new PresetAAICloudRegionAndSourceFromConfigurationPut(configurationId, desiredCloudRegionId), APPEND); + SimulatorApi.registerExpectationFromPreset(new PresetAAIGetPortMirroringSourcePorts(configurationId, portInterfaceId, "i'm a port", isMirrored), APPEND); + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE, + Constants.RegisterToSimulator.SearchForServiceInstance.FILTER_SERVICE_INSTANCE_BY_ID_PM, + Constants.RegisterToSimulator.SearchForServiceInstance.NAMED_QUERY_VIEW_EDIT_PM, + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SDC_CATALOG_SERVICE_PM, + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.GET_AIC_ZONES + }, ImmutableMap.<String, Object>of( + "<ORCH_STATUS>", orchStatus, "<IS_MIRRORED>", isMirrored, + "pm1111.zip", modelToReplaceWith + ), SimulatorApi.RegistrationStrategy.APPEND); } public static void associatePnf() { @@ -39,7 +113,7 @@ public class BulkRegistration { Constants.RegisterToSimulator.pProbe.GET_SPECIFIC_PNF, Constants.RegisterToSimulator.pProbe.ADD_PNF_RELATIONSHIP, Constants.RegisterToSimulator.pProbe.GET_ADD_PNF_RELATIONSHIP_ORCH_REQ - }, ImmutableMap.<String, Object>of()); + }, ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); } public static void searchPnfError() { @@ -47,7 +121,7 @@ public class BulkRegistration { new String [] { Constants.RegisterToSimulator.pProbe.GET_SERVICE_INSTANCE_WITH_LOGICAL_LINKS, Constants.RegisterToSimulator.pProbe.GET_SPECIFIC_PNF_ERROR - }, ImmutableMap.<String, Object>of()); + }, ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); } public static void associatePnfError() { SimulatorApi.registerExpectation( @@ -55,7 +129,7 @@ public class BulkRegistration { Constants.RegisterToSimulator.pProbe.GET_SERVICE_INSTANCE_WITH_LOGICAL_LINKS, Constants.RegisterToSimulator.pProbe.GET_SPECIFIC_PNF, Constants.RegisterToSimulator.pProbe.ADD_PNF_RELATIONSHIP_ERROR - }, ImmutableMap.<String, Object>of()); + }, ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); } public static void dissociatePnf() { @@ -63,7 +137,7 @@ public class BulkRegistration { new String [] { Constants.RegisterToSimulator.pProbe.REMOVE_PNF_RELATIONSHIP, Constants.RegisterToSimulator.pProbe.GET_REMOVE_PNF_RELATIONSHIP_ORCH_REQ - }, ImmutableMap.<String, Object>of()); + }, ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); } public static void getAssociatedPnfs() { @@ -71,7 +145,7 @@ public class BulkRegistration { new String [] { Constants.RegisterToSimulator.pProbe.GET_SERVICE_INSTANCE_WITH_LOGICAL_LINKS, Constants.RegisterToSimulator.pProbe.GET_LOGICAL_LINK - }, ImmutableMap.<String, Object>of()); + }, ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); } public static void activateServiceInstance(String action) { @@ -80,15 +154,234 @@ public class BulkRegistration { Constants.RegisterToSimulator.pProbe.GET_SERVICE_INSTANCE_WITH_LOGICAL_LINKS, Constants.RegisterToSimulator.activateDeactivate.ACTIVATE_SERVICE_INSTANCE, Constants.RegisterToSimulator.activateDeactivate.ACTIVATE_SERVICE_INSTANCE_ORCH_REQUEST - }, ImmutableMap.<String, Object>of("<ACTIVE_ACTION>", action)); + }, ImmutableMap.<String, Object>of("<ACTIVE_ACTION>", action), SimulatorApi.RegistrationStrategy.APPEND); } + + public static void activateDeactivateConfiguration(String orchStatus, String action, String desiredCloudRegionId) { + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.createConfiguration.MSO_ACTIVATE_CONFIGURATION, + }, ImmutableMap.<String, Object>of("<ACTION>",action,"mdt1", desiredCloudRegionId), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deleteConfiguration(String desiredCloudRegionId) { + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.createConfiguration.MSO_DELETE_CONFIGURATION, + Constants.RegisterToSimulator.createConfiguration.MSO_CREATE_CONFIGURATION_ORCH_REQ + }, ImmutableMap.of("mdt1", desiredCloudRegionId), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void enableDisablePort(String action, String desiredCloudRegionId){ + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.createConfiguration.MSO_ACTIVATE_CONFIGURATION, + Constants.RegisterToSimulator.createConfiguration.MSO_ENABLE_DISABLE_PORT, + }, ImmutableMap.<String, Object>of("<ACTION>", action,"mdt1", desiredCloudRegionId), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void addNetwork() { + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_Mobility, + Constants.RegisterToSimulator.addNetwork.AAI_GET_TENANTS, + Constants.RegisterToSimulator.addNetwork.AAI_NAMED_QUERY_FOR_VIEW_EDIT, + Constants.RegisterToSimulator.addNetwork.FILTER_SERVICE_INSTANCE_BY_ID, + //Constants.RegisterToSimulator.addNetwork.FILTER_SERVICE_INSTANCE_BY_NAME, + Constants.RegisterToSimulator.addNetwork.GET_SDC_CATALOG_SERVICES_NETWORK, + + }, ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + } + public static void msoAddNetwork(String instanceName){ + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.addNetwork.MSO_ADD_NETWORK_ORCH_REQ, + Constants.RegisterToSimulator.addNetwork.MSO_ADD_NETWORK + }, ImmutableMap.<String, Object>of("<SERVICE_INSTANCE_NAME>",instanceName), SimulatorApi.RegistrationStrategy.APPEND); + } + public static void msoAddNetworkError(String instanceName){ + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.addNetwork.MSO_ADD_NETWORK_ERROR + }, ImmutableMap.<String, Object>of("<SERVICE_INSTANCE_NAME>",instanceName), SimulatorApi.RegistrationStrategy.APPEND); + } public static void activateServiceInstanceError(String action) { SimulatorApi.registerExpectation( new String []{ Constants.RegisterToSimulator.pProbe.GET_SERVICE_INSTANCE_WITH_LOGICAL_LINKS, Constants.RegisterToSimulator.activateDeactivate.ACTIVATE_SERVICE_INSTANCE_ERROR - } , ImmutableMap.<String, Object>of("<ACTIVE_ACTION>", action)); + } , ImmutableMap.<String, Object>of("<ACTIVE_ACTION>", action), SimulatorApi.RegistrationStrategy.APPEND); + } + + + public static void createPolicyConfiguration(boolean isSuccessFlow, String desiredCloudRegionId) { + createConfiguration(); + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.createConfiguration.GET_PNF_INSTANCES, + Constants.RegisterToSimulator.createConfiguration.GET_MODEL_BY_ONE_INVARIANT_ID + } , ImmutableMap.<String, Object>of("mdt1", desiredCloudRegionId), SimulatorApi.RegistrationStrategy.APPEND); + if (isSuccessFlow) { + msoCreatePProbeConfiguration(); + } else { + msoCreatePProbeConfigurationError(); + } + } + + public static void deletePolicyConfiguration(boolean isSuccessFlow, String desiredCloudRegionId) { + createConfiguration(); + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.createConfiguration.GET_PNF_INSTANCES, + Constants.RegisterToSimulator.createConfiguration.GET_MODEL_BY_ONE_INVARIANT_ID, + Constants.RegisterToSimulator.createConfiguration.MSO_DELETE_CONFIGURATION, + + } , ImmutableMap.<String, Object>of("mdt1", desiredCloudRegionId), SimulatorApi.RegistrationStrategy.APPEND); + if (isSuccessFlow) { + msoCreatePProbeConfiguration(); + } else { + msoCreatePProbeConfigurationError(); + } } + + + + private static void msoCreatePProbeConfiguration() { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.createConfiguration.MSO_CREATE_CONFIGURATION, + Constants.RegisterToSimulator.createConfiguration.MSO_CREATE_CONFIGURATION_ORCH_REQ + } , ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + } + + private static void msoCreatePProbeConfigurationError() { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.createConfiguration.MSO_CREATE_CONFIGURATION_ERROR + } , ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void createConfiguration() { + createConfiguration("model-version-id=2a2ea15f-07c6-4b89-bfca-e8aba39a34d6&model-invariant-id=a7eac2b3-8444-40ee-92e3-b3359b32445c"); + } + + public static void createConfiguration(String model) { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.createConfiguration.GET_VNF_INSTANCES, + Constants.RegisterToSimulator.createConfiguration.GET_MODEL_BY_2_INVARIANT_IDS + } , ImmutableMap.of("model-version-id=2a2ea15f-07c6-4b89-bfca-e8aba39a34d6&model-invariant-id=a7eac2b3-8444-40ee-92e3-b3359b32445c", model), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void getNetworkNodeFormData() { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.createConfiguration.GET_TENANTS + } , ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void createNewServiceInstance(String subscriber) { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.CreateNewServiceInstance.GET_FULL_SUBSCRIBES, + Constants.RegisterToSimulator.CreateNewServiceInstance.GET_SERVICES + } , ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + + switch (subscriber) { + case "USP VOICE": createNewServiceInstanceUspVoice(); break; + case "MSO_1610_ST": createNewServiceInstanceMso1610ST(); break; + } + } + + private static void createNewServiceInstanceMso1610ST() { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.CreateNewServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_MSO_1610_ST, + Constants.RegisterToSimulator.CreateNewServiceInstance.GET_MODELS_BY_SERVICE_TYPE_MSO_1610_ST + } , ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + } + + private static void createNewServiceInstanceUspVoice() { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.CreateNewServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE, + Constants.RegisterToSimulator.CreateNewServiceInstance.GET_MODELS_BY_SERVICE_TYPE_USP_VOICE + } , ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deployNewServiceInstance(String instanceName) { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.SDC_GET_CATALOG, + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.GET_AIC_ZONES, + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.MSO_CREATE_SVC_INSTANCE, + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.MSO_CREATE_SVC_INSTANCE_ORCH_REQ + } , ImmutableMap.<String, Object>of("<INSTANCE_NAME>", instanceName), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void searchExistingServiceInstanceWithoutModelVerId() { + SimulatorApi.registerExpectation( + new String []{ + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_FIREWALL_MISC, + Constants.RegisterToSimulator.SearchForServiceInstance.FILTER_SERVICE_INSTANCE_BY_ID_NO_MODEL_VER_ID, + // Constants.RegisterToSimulator.SearchForServiceInstance.NAMED_QUERY_VIEW_EDIT_NO_MODEL_VER_ID + } , ImmutableMap.<String, Object>of(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deleteExistingInstance(String orchStatus, String type) { + genericSearchExistingServiceInstance(); + SimulatorApi.registerExpectation( + new String [] { + Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_USP_VOICE, + Constants.RegisterToSimulator.SearchForServiceInstance.NAMED_QUERY_VIEW_EDIT, + Constants.RegisterToSimulator.CreateNewServiceInstance.deploy.GET_AIC_ZONES + }, ImmutableMap.<String, Object>of("<ORCH_STATUS>", orchStatus), SimulatorApi.RegistrationStrategy.APPEND); + SimulatorApi.registerExpectationFromPresets( + ImmutableList.of( + new PresetAAIGetTenants(), + new PresetMSODeleteInstanceOrchestrationRequestGet(type), + new PresetSDCGetServiceMetadataGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", "service-Complexservice-aLaCarte-csar.zip"), + new PresetSDCGetServiceToscaModelGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-Complexservice-aLaCarte-csar.zip")), + SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deleteExistingVolumeGroupInstance(String orchStatus) { + deleteExistingInstance(orchStatus, "Volume Group"); + SimulatorApi.registerExpectationFromPreset(new PresetMSODeleteVolumeGroup(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deleteExistingVfModuleInstance(String orchStatus) { + deleteExistingInstance(orchStatus, "VF Module"); + SimulatorApi.registerExpectationFromPreset(new PresetMSODeleteVfModule(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deleteExistingVnfInstance(String orchStatus) { + deleteExistingInstance(orchStatus, "Vnf"); + SimulatorApi.registerExpectationFromPreset(new PresetMSODeleteVnf(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deleteExistingNetworkInstance(String orchStatus) { + deleteExistingInstance(orchStatus, "Network"); + SimulatorApi.registerExpectationFromPreset(new PresetMSODeleteNetwork(), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void deleteExistingServiceInstance(String orchStatus) { + deleteExistingInstance(orchStatus, "Service"); + SimulatorApi.registerExpectationFromPresets(ImmutableList.of( + new PresetMSODeleteService(), + new PresetAAIPostNamedQueryForViewEdit("3f93c7cb-2fd0-4557-9514-e189b7b04f9d", false)), SimulatorApi.RegistrationStrategy.APPEND); + } + + public static void resumeVfModule(String serviceInstanceId, String vnfInstanceId ){ + BulkRegistration.searchExistingServiceInstance(); + SimulatorApi.registerExpectationFromPresets( + ImmutableList.of ( + new PresetAAIGetTenants(), + new PresetMSOCreateVfModuleInstancePost(serviceInstanceId,vnfInstanceId), + new PresetMSOOrchestrationRequestGet("COMPLETE","c0011670-0e1a-4b74-945d-8bf5aede1d9c",Constants.ViewEdit.VF_MODULE_CREATED_SUCCESSFULLY_TEXT)), + SimulatorApi.RegistrationStrategy.APPEND); + + } } diff --git a/vid-automation/src/main/java/vid/automation/test/services/CategoryParamsService.java b/vid-automation/src/main/java/vid/automation/test/services/CategoryParamsService.java new file mode 100644 index 000000000..4fef91fff --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/services/CategoryParamsService.java @@ -0,0 +1,90 @@ +package vid.automation.test.services; + +import com.google.common.primitives.Ints; +import vid.automation.test.model.CategoryOption; +import vid.automation.test.model.CategoryOptionList; +import vid.automation.test.utils.DB_CONFIG; +import vid.automation.test.utils.ReadFile; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; + +import static org.hamcrest.CoreMatchers.everyItem; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThan; + +/** + * Created by itzikliderman on 08/09/2017. + */ +public class CategoryParamsService { + private List<CategoryOption> categoryParams; + + public CategoryParamsService() { + categoryParams = getCategoryParamsFromJson(); + categoryParams.forEach(this::prepareCategoryParam); + } + + List<CategoryOption> getCategoryParamsFromJson() { + CategoryOptionList categoryParamsObject = null; + categoryParamsObject = ReadFile.getJsonFile("categoryParams", CategoryOptionList.class); + return categoryParamsObject.categories; + } + + private void prepareCategoryParam(CategoryOption categoryParam) { + /* + Creates a category parameter option in the DB. + */ + + dropCategoryParam(categoryParam); + + System.out.println("Preparing category parameter '" + categoryParam.categoryId + "': " + categoryParam.name); + System.out.println("Connecting database..."); + + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + + System.out.println("Database connected!"); + + /////////////////////////////// + // Add category param option + Statement stmt = connection.createStatement(); + + int id = getId(categoryParam.name); + stmt.addBatch("INSERT INTO `vid_category_parameter_option` (`CATEGORY_OPT_DB_ID`, `CATEGORY_OPT_APP_ID`, `NAME`, `CATEGORY_ID`) " + + "VALUES (" + id + ", '" + (categoryParam.appId != null ? categoryParam.appId : categoryParam.name) + "', '" + categoryParam.name + "', '" + categoryParam.categoryId + "') " + + "ON DUPLICATE KEY UPDATE NAME='"+categoryParam.name+"'"); + + int[] executeBatch = stmt.executeBatch(); + assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0))); + + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + + } + + private void dropCategoryParam(CategoryOption categoryParam) { + System.out.println("Dropping categoryParam '" + categoryParam.name + "'"); + System.out.println("Connecting database..."); + + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + + System.out.println("Database connected!"); + + Statement stmt = connection.createStatement(); + int id = getId(categoryParam.name); + stmt.addBatch("DELETE FROM `vid_category_parameter_option` WHERE `CATEGORY_OPT_DB_ID` = '" + id + "'"); + int[] executeBatch = stmt.executeBatch(); + + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + } + + private int getId(String id) { + return (Math.abs(id.hashCode()) % 100000) * 1000; + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/services/DropTestApiField.java b/vid-automation/src/main/java/vid/automation/test/services/DropTestApiField.java new file mode 100644 index 000000000..e175b88b1 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/services/DropTestApiField.java @@ -0,0 +1,64 @@ +package vid.automation.test.services; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import vid.automation.test.infra.Features; + +import java.io.IOException; +import java.util.Arrays; +import java.util.function.UnaryOperator; + +public class DropTestApiField { + + public static UnaryOperator<String> dropTestApiFieldFromString() { + if (Features.FLAG_ADD_MSO_TESTAPI_FIELD.isActive()) { + // do nothing + return in -> in; + } else { + final ObjectMapper objectMapper = new ObjectMapper(); + return in -> { + if (!in.contains("testApi")) { + // short circuit + return in; + } + + try { + final JsonNode tree = objectMapper.readTree(in); + final JsonNode node = tree.path("simulatorRequest"); + if (removePath(node, "body", "requestDetails", "requestParameters", "testApi") != null) { + // tree modified, write back to string + return objectMapper.writeValueAsString(tree); + } else { + // else... + return in; + } + } catch (IOException e) { + return in; + } + }; + } + } + + private static JsonNode removePath(JsonNode tree, String... nodes) { + // remove the nodes; remove also the parent, if an empty object was left + // returns the removed node + // returns null if no modification to tree + if (nodes.length > 1) { + final JsonNode node = tree.path(nodes[0]); + final JsonNode removed = removePath(node, Arrays.copyOfRange(nodes, 1, nodes.length)); + if (removed != null && node.size() == 0) { + return removePath(tree, nodes[0]); + } else { + return removed; // non-null if node.size() != 0 + } + } else { + if (tree instanceof ObjectNode) { + return ((ObjectNode) tree).remove(nodes[0]); + } else { + return null; + } + } + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/services/ServicesService.java b/vid-automation/src/main/java/vid/automation/test/services/ServicesService.java index 39f235b9e..34303a972 100644 --- a/vid-automation/src/main/java/vid/automation/test/services/ServicesService.java +++ b/vid-automation/src/main/java/vid/automation/test/services/ServicesService.java @@ -3,7 +3,10 @@ package vid.automation.test.services; import com.fasterxml.jackson.databind.ObjectMapper; import org.openecomp.sdc.ci.tests.utilities.FileHandling; import vid.automation.test.model.Service; +import vid.automation.test.model.ServiceModel; +import vid.automation.test.model.ServiceModelsList; import vid.automation.test.model.ServicesObject; +import vid.automation.test.utils.ReadFile; import java.io.File; import java.io.IOException; @@ -14,13 +17,14 @@ import java.util.HashMap; */ public class ServicesService { private HashMap<String, Service> services; + private HashMap<String, ServiceModel> serviceModels; - public ServicesService() throws IOException { + public ServicesService() { services = getServicesFromJson(); - + serviceModels = getServiceInstancesFromJson(); } - HashMap<String, Service> getServicesFromJson() throws IOException { + HashMap<String, Service> getServicesFromJson() { String fileName = "services"; ObjectMapper mapper = new ObjectMapper(); ServicesObject servicesObject; @@ -41,7 +45,15 @@ public class ServicesService { } } + HashMap<String, ServiceModel> getServiceInstancesFromJson() { + return ReadFile.getJsonFile("serviceModels", ServiceModelsList.class).serviceModels; + } + public Service getService(String serviceId) { return services.get(serviceId); } + + public ServiceModel getServiceModel(String modelUUID) { + return (ServiceModel) serviceModels.get(modelUUID); + } } diff --git a/vid-automation/src/main/java/vid/automation/test/services/SimulatorApi.java b/vid-automation/src/main/java/vid/automation/test/services/SimulatorApi.java index 95370fc82..74cda7990 100644 --- a/vid-automation/src/main/java/vid/automation/test/services/SimulatorApi.java +++ b/vid-automation/src/main/java/vid/automation/test/services/SimulatorApi.java @@ -1,11 +1,15 @@ package vid.automation.test.services; +import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import org.apache.commons.io.IOUtils; -import org.apache.log4j.Logger; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.uri.internal.JerseyUriBuilder; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset; +import org.opencomp.simulator.presetGenerator.presets.model.RegistrationRequest; import org.springframework.http.HttpStatus; +import vid.automation.test.utils.ReadFile; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; @@ -13,86 +17,136 @@ import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.io.IOException; -import java.io.InputStream; import java.net.URI; +import java.util.Collection; +import java.util.List; import java.util.Map; +import java.util.function.UnaryOperator; import static org.testng.Assert.assertEquals; +import static vid.automation.test.services.DropTestApiField.dropTestApiFieldFromString; public class SimulatorApi { - private static Logger logger = Logger.getLogger(SimulatorApi.class.getName()); - public enum RegistrationStrategy { APPEND, CLEAR_THEN_SET } - private static final URI uri; + private static final URI uri; //uri for registration + private static final URI simulationUri; //uri for getting simulated responses private static final Client client; + private static final List<UnaryOperator<String>> presetStringPostProccessors = + ImmutableList.of(dropTestApiFieldFromString()); + static { String host = System.getProperty("VID_HOST", "127.0.0.1" ); - Integer port = Integer.valueOf(System.getProperty("VID_PORT", "8080")); + Integer port = Integer.valueOf(System.getProperty("SIM_PORT", System.getProperty("VID_PORT", "8080"))); //port for registration uri = new JerseyUriBuilder().host(host).port(port).scheme("http").path("vidSimulator").build(); client = ClientBuilder.newClient(); client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); + //registering jacksonJsonProvider for avoiding exceptions like : + // org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: + // MessageBodyWriter not found for media type=application/json + JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider(); + client.register(jacksonJsonProvider); + + Integer simulationPort = Integer.valueOf(System.getProperty("SIMULATION_PORT", "1080")); //port getting simulated responses + simulationUri = new JerseyUriBuilder().host(host).port(simulationPort).scheme("http").build(); } - public static void registerExpectation(String expectationFilename) { - registerExpectation(expectationFilename, ImmutableMap.<String, Object>of(), RegistrationStrategy.APPEND); + public static URI getSimulationUri() { + return simulationUri; } public static void registerExpectation(String expectationFilename, RegistrationStrategy registrationStrategy) { registerExpectation(expectationFilename, ImmutableMap.<String, Object>of(), registrationStrategy); } - public static void registerExpectation(String expectationTemplateFilename, ImmutableMap<String, Object> templateParams) { - registerExpectation(expectationTemplateFilename, templateParams, RegistrationStrategy.APPEND); - } - - public static void registerExpectation(String... expectationTemplateFilenames) { - registerExpectation(expectationTemplateFilenames, ImmutableMap.of()); + public static void registerExpectation(RegistrationStrategy strategy, String... expectationTemplateFilenames) { + registerExpectation(expectationTemplateFilenames, ImmutableMap.of(), strategy); } - public static void registerExpectation(String[] expectationTemplateFilenames, ImmutableMap<String, Object> templateParams) { + public static void registerExpectation(String[] expectationTemplateFilenames, ImmutableMap<String, Object> templateParams, RegistrationStrategy strategy) { + if (strategy.equals(RegistrationStrategy.CLEAR_THEN_SET)) { + clearRegistrations(); + } for (String expectationTemplateFilename: expectationTemplateFilenames) { - registerExpectation(expectationTemplateFilename, templateParams); + registerExpectation(expectationTemplateFilename, templateParams, RegistrationStrategy.APPEND); } } public static void registerExpectation(String expectationTemplateFilename, ImmutableMap<String, Object> templateParams, RegistrationStrategy registrationStrategy) { - try { - final InputStream resource = SimulatorApi.class.getClassLoader().getResourceAsStream("registration_to_simulator/" + expectationTemplateFilename); - if (resource == null) throw new RuntimeException("template file not found: " + "/registration_to_simulator/" + expectationTemplateFilename); - String content = IOUtils.toString(resource, "UTF-8"); + String content = ReadFile.loadResourceAsString("registration_to_simulator/" + expectationTemplateFilename); - for (Map.Entry<String, Object> templateParam : templateParams.entrySet()) { - content = content.replaceAll(templateParam.getKey(), templateParam.getValue().toString()); - } + for (Map.Entry<String, Object> templateParam : templateParams.entrySet()) { + content = content.replaceAll(templateParam.getKey(), templateParam.getValue().toString()); + } - registerToSimulatorAndAssertSuccess(content, registrationStrategy); + registerToSimulatorAndAssertSuccess(content, registrationStrategy); - } catch (IOException e) { - logger.error("couldn't read " + expectationTemplateFilename, e); -// throw new RuntimeException("couldn't read " + expectationTemplateFilename, e); + } + + public static void registerExpectationFromPreset(BasePreset preset, RegistrationStrategy registrationStrategy) { + RegistrationRequest content = preset.generateScenario(); + registerToSimulatorAndAssertSuccess(content, registrationStrategy); + } + + public static void registerExpectationFromPresets(Collection<BasePreset> presets, RegistrationStrategy registrationStrategy) { + if (registrationStrategy == RegistrationStrategy.CLEAR_THEN_SET) { + clearRegistrations(); } + presets.forEach( + preset-> { + try {registerToSimulatorAndAssertSuccess(preset.generateScenario());} + catch (RuntimeException e) { + throw new RuntimeException("Failed to register preset "+preset.getClass().getName(), e); + } + } + ); } - private static void registerToSimulatorAndAssertSuccess(String content, RegistrationStrategy registrationStrategy) { - WebTarget webTarget = client.target(uri).path("registerToVidSimulator"); - Response response; + private static void registerToSimulatorAndAssertSuccess(Object content, RegistrationStrategy registrationStrategy) { if (registrationStrategy == RegistrationStrategy.CLEAR_THEN_SET) { - response = webTarget.request().delete(); - assertEquals(response.getStatus(), HttpStatus.OK.value()); + clearRegistrations(); + } + registerToSimulatorAndAssertSuccess(content); + } + + private static void registerToSimulatorAndAssertSuccess(Object content) { + + content = postProccessContent(content); + + Response response = createSimulatorRegistrationWebTarget().request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(content)); + assertEquals(response.getStatus(), HttpStatus.OK.value()); + } + + private static Object postProccessContent(Object content) { + if (content instanceof String) { + for (UnaryOperator<String> presetStringPostProccessor : presetStringPostProccessors) { + content = presetStringPostProccessor.apply((String) content); + } } - response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(content)); + + return content; + } + + public static void clearExpectations() { + clearRegistrations(); + } + + private static void clearRegistrations() { + Response response = createSimulatorRegistrationWebTarget().request().delete(); assertEquals(response.getStatus(), HttpStatus.OK.value()); } + private static WebTarget createSimulatorRegistrationWebTarget() { + return client.target(uri).path("registerToVidSimulator"); + } + public static void clearAll() { - WebTarget webTarget = client.target(uri).path("registerToVidSimulator"); + WebTarget webTarget = createSimulatorRegistrationWebTarget(); webTarget.request().delete(); } } diff --git a/vid-automation/src/main/java/vid/automation/test/services/UsersService.java b/vid-automation/src/main/java/vid/automation/test/services/UsersService.java index e8df17764..282be9067 100644 --- a/vid-automation/src/main/java/vid/automation/test/services/UsersService.java +++ b/vid-automation/src/main/java/vid/automation/test/services/UsersService.java @@ -1,14 +1,25 @@ package vid.automation.test.services; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.openecomp.sdc.ci.tests.utilities.FileHandling; +import com.att.automation.common.report_portal_integration.annotations.Step; +import com.google.common.primitives.Ints; +import org.apache.commons.lang3.StringUtils; import vid.automation.test.model.User; import vid.automation.test.model.UsersObject; +import vid.automation.test.utils.DB_CONFIG; import vid.automation.test.utils.ReadFile; -import java.io.File; -import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; + +import static org.hamcrest.CoreMatchers.everyItem; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThan; /** * Created by itzikliderman on 08/09/2017. @@ -16,16 +27,113 @@ import java.util.HashMap; public class UsersService { private HashMap<String, User> users; - public UsersService() throws IOException { + public UsersService() { users = getUsersFromJson(); + users.forEach(this::prepareUser); } - HashMap<String, User> getUsersFromJson() throws IOException { - UsersObject usersObject = ReadFile.getJsonFile("users", UsersObject.class); + HashMap<String, User> getUsersFromJson() { + UsersObject usersObject = null; + usersObject = ReadFile.getJsonFile("users", UsersObject.class); return usersObject.users; } + @Step("${method} with id: ${userId}") public User getUser(String userId) { - return users.get(userId); + User res = users.get(userId); + System.out.println("getUser userId='" + userId + "' returned: " + res); + + if (res == null) { + throw new RuntimeException("user id '" + userId + "' is not defined (these ARE defined: " + users.keySet() + ")"); + } + + return res; } + + + private void prepareUser(String userId, User user) { + /* + Creates a user in the DB, were: + - Login user name is a deterministic number, hashed from the userId string, with 3 trailing zeroes, + and two leading letters from the userId itself; e.g. "mo26063000" for mobility. + - Login user name == user password + - 'user.credentials.userId' and 'user.credentials.password' input fields are overridden with the generated values. + - Roles are "read" (roleId==16) and all other roles in object (like subscriberName___serviceType___tenant). + - Yielded role ids are the successive numbers after the user name. e.g "57174000", "57174001", "57174002". + */ + + dropUser(userId); + + System.out.println("Preparing user '" + userId + "': " + user); + System.out.println("Connecting database..."); + + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + + System.out.println("Database connected!"); + + /////////////////////////////// + // Add user with specific roles + Statement stmt = connection.createStatement(); + int userNumber = getUserNumber(userId); + user.credentials.userId = getLoginId(userId); + user.credentials.password = getLoginId(userId); + + stmt.addBatch("INSERT INTO `fn_user` (`USER_ID`, `ORG_USER_ID`, `FIRST_NAME`, `LOGIN_ID`, `LOGIN_PWD`) " + + "VALUES (" + userNumber + ", '" + userId + "', '" + userId + "', '" + user.credentials.userId + "', '" + user.credentials.password + "')"); + + List<String> roles = user.roles != null ? user.roles : new LinkedList<>(); + roles.add("Standard User"); + + ListIterator<String> iter = roles.listIterator(); + while (iter.hasNext()) { + int roleNumber = userNumber + iter.nextIndex(); + + String sql = "INSERT INTO `fn_role` (`ROLE_ID`, `ROLE_NAME`, `ACTIVE_YN`, `PRIORITY`) VALUES (" + roleNumber + ", '" + iter.next() + "', 'Y', " + 5 + ")"; + System.out.println(sql); + stmt.addBatch(sql); + String sql2 = "INSERT INTO `fn_user_role` (`USER_ID`, `ROLE_ID`, `PRIORITY`, `APP_ID`) VALUES (" + userNumber + ", " + roleNumber + ", NULL, 1)"; + System.out.println(sql2); + stmt.addBatch(sql2); + } + stmt.addBatch("INSERT INTO `fn_user_role` (`USER_ID`, `ROLE_ID`, `PRIORITY`, `APP_ID`) VALUES (" + userNumber + ", 16, NULL, 1)"); + + int[] executeBatch = stmt.executeBatch(); + assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0))); + + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + + } + + private void dropUser(String userId) { + System.out.println("Dropping user '" + userId + "'"); + System.out.println("Connecting database..."); + + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + + System.out.println("Database connected!"); + + int userNumber = getUserNumber(userId); + Statement stmt = connection.createStatement(); + stmt.addBatch("DELETE FROM `fn_user_role` WHERE `USER_ID` = " + userNumber); + stmt.addBatch("DELETE FROM `fn_role` WHERE `ROLE_ID` BETWEEN " + userNumber + " AND " + (userNumber + 100)); + stmt.addBatch("DELETE FROM `fn_user` WHERE `USER_ID` = " + userNumber); + int[] executeBatch = stmt.executeBatch(); + + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + } + + private int getUserNumber(String userId) { + return (Math.abs(userId.hashCode()) % 100000) * 1000; + } + + private String getLoginId(String userId) { + int userNumber = getUserNumber(userId); + final String twoCharacters = StringUtils.substring(userId,0, 2).toLowerCase(); + return String.format("%s%d", twoCharacters, userNumber); + } + } diff --git a/vid-automation/src/main/java/vid/automation/test/test/ALaCarteflowTest.java b/vid-automation/src/main/java/vid/automation/test/test/ALaCarteflowTest.java new file mode 100644 index 000000000..7f641d303 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/ALaCarteflowTest.java @@ -0,0 +1,218 @@ +package vid.automation.test.test; + +import com.google.common.collect.ImmutableMap; +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.SelectOption; +import vid.automation.test.model.ServiceModel; +import vid.automation.test.model.User; +import vid.automation.test.sections.SideMenu; +import vid.automation.test.sections.VidBasePage; +import vid.automation.test.sections.ViewEditPage; +import vid.automation.test.services.ServicesService; +import vid.automation.test.services.SimulatorApi; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; + + +public class ALaCarteflowTest extends CreateInstanceDialogBaseTest { + static final String SUBSCRIBER = "Mobility"; + static final String SERVICE_NAME = "ggghhh"; + static final String SERVICE_ID = "537d3eb0-b7ab-4fe8-a438-6166ab6af49b"; + static final String VNF_ID = "0eb38f69-d96b-4d5e-b8c9-3736c292f0f7"; + static final String DEFAULT_TEST_API_VALUE = "GR_API"; + public static final String SERVICE_INSTANCE_ID = "SERVICE_INSTANCE_ID"; + public static final String A_LACARTE_FLOW_GET_ORCHESTRATION = "aLacarteFlow/get_orchestration_request_status.json"; + public static final String ORCHESTRATION_REQUEST_ID = "orchestrationRequestId"; + public static final String STATUS_MESSAGE = "status_message"; + public static final String REQUEST_TYPE = "REQUEST-TYPE"; + public static final String CREATE = "Create"; + public static final String AAIAIC_25 = "AAIAIC25"; + public static final String TENANT = "092eb9e8e4b7412e8787dd091bc58e86"; + public static final String FALSE = "false"; + public static final String NODE_INSTANCE = "VSP1710PID298109_vMMSC 0"; + public static final String MODEL = "959a7ba0-89ee-4984-9af6-65d5bdda4b0e"; + public static final String LEGACY_REGION = "some legacy region"; + + + @BeforeClass + protected void registerToSimulator() { + SimulatorApi.clearAll(); + SimulatorApi.registerExpectation(APPEND, + "ecompportal_getSessionSlotCheckInterval.json", + "search_for_service_instance/aai_get_services.json" + , "create_configuration/aai_get_tenants.json" + , "sanity/get_aai_get_subscribers.json" + , "sanity/get_aai_sub_details.json" + , "aLacarteFlow/get_aai_search_named_query.json" + , "aLacarteFlow/get_sdc_catalog_services_ggghhh.json" + ); + + } + + + @Test(dataProvider = "msoTestApiOptions") + private void testAddVfModule(String msoTestApiOption, String msoTestApiValue) { + withMsoTestApiConfiguration(msoTestApiOption, msoTestApiValue, () -> { + final String REQUEST_ID = "dbe54591-c8ed-46d3-abc7-d3a24873bddd"; + final String MODEL_UUID = "d205e01d-e5da-4e68-8c52-f95cb0607959"; + SimulatorApi.registerExpectation("aLacarteFlow/mso_create_vf_module.json", ImmutableMap.of(SERVICE_INSTANCE_ID, SERVICE_ID, "VNF_INSTANCE_ID", VNF_ID, "REQUEST_ID", REQUEST_ID, DEFAULT_TEST_API_VALUE, msoTestApiValue), APPEND); + SimulatorApi.registerExpectation(A_LACARTE_FLOW_GET_ORCHESTRATION, + ImmutableMap.of(ORCHESTRATION_REQUEST_ID, REQUEST_ID, STATUS_MESSAGE, Constants.ViewEdit.VF_MODULE_CREATED_SUCCESSFULLY_TEXT, + REQUEST_TYPE, CREATE), APPEND); + GeneralUIUtils.ultimateWait(); + goToInstance(); + ServiceModel serviceInstance = new ServicesService().getServiceModel(MODEL_UUID); + addVFModule("Vsp1710pid298109Vmmsc..mmsc_mod1_ltm..module-8", AAIAIC_25, + TENANT, FALSE, "mdt1", getCurrentUser().tenants, serviceInstance); + + }); + } + + @Test + private void testTenant() throws Exception { + ViewEditPage viewEditPage = new ViewEditPage(); + User user = usersService.getUser("Mobility_with_tenant"); + relogin(user.credentials); + goToInstance(); + viewEditPage.selectNodeInstanceToAdd(NODE_INSTANCE); + viewEditPage.setInstanceName("New and fun instance"); + viewEditPage.selectProductFamily("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); + viewEditPage.selectLCPRegion("mtn6"); + List<WebElement> tenantOptions = Get.byClass(Constants.ViewEdit.TENANT_OPTION_CLASS); + List<WebElement> enabledTenantOption = tenantOptions.stream().filter(webElement -> webElement.isEnabled()).collect(Collectors.toList()); + Assert.assertTrue(enabledTenantOption.size() == 1); + Assert.assertTrue(enabledTenantOption.get(0).getText().equals("test-mtn6-09")); + + // SimulatorApi.registerExpectation("aLacarteFlow/get_sdc_catalog_services_ggghhh.json",APPEND); + } + + @Test(dataProvider = "msoTestApiOptions") + private void testAddVnf(String msoTestApiOption, String msoTestApiValue) { + withMsoTestApiConfiguration(msoTestApiOption, msoTestApiValue, () -> { + final String MODEL_UUID = MODEL; + String instanceName = new VidBasePage().generateInstanceName(Constants.ViewEdit.VNF_INSTANCE_NAME_PREFIX); + SimulatorApi.registerExpectation("aLacarteFlow/mso_create_vnf.json", ImmutableMap.of( + SERVICE_INSTANCE_ID, SERVICE_ID, + "</?LOB>", "", + "INSTANCE_NAME", instanceName, + DEFAULT_TEST_API_VALUE, msoTestApiValue + ), APPEND); + SimulatorApi.registerExpectation(A_LACARTE_FLOW_GET_ORCHESTRATION, + ImmutableMap.of(ORCHESTRATION_REQUEST_ID, "dbe54591-c8ed-46d3-abc7-d3a24873dfbd", STATUS_MESSAGE, Constants.ViewEdit.VNF_CREATED_SUCCESSFULLY_TEXT, + REQUEST_TYPE, CREATE), APPEND); + GeneralUIUtils.ultimateWait(); + goToInstance(); + ServiceModel serviceInstance = new ServicesService().getServiceModel(MODEL_UUID); + addVNF(NODE_INSTANCE, AAIAIC_25, TENANT, + FALSE, LEGACY_REGION, "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", "platform", getCurrentUser().tenants, new ArrayList<>(Arrays.asList("ECOMP")), serviceInstance, instanceName); + }); + } + + @Test(dataProvider = "msoTestApiOptions") + private void requiredLineOfBussiness_confirmVnfWithNoLob(String msoTestApiOption, String msoTestApiValue) throws Exception { + withMsoTestApiConfiguration(msoTestApiOption, msoTestApiValue, () -> { + goToInstance(); + String instanceName = new VidBasePage().generateInstanceName(Constants.ViewEdit.VNF_INSTANCE_NAME_PREFIX); + SimulatorApi.registerExpectation("aLacarteFlow/mso_create_vnf.json", ImmutableMap.of( + SERVICE_INSTANCE_ID, SERVICE_ID, + "<LOB>.*</LOB>", "", + "INSTANCE_NAME", instanceName, + DEFAULT_TEST_API_VALUE, msoTestApiValue + ), APPEND); + SimulatorApi.registerExpectation(A_LACARTE_FLOW_GET_ORCHESTRATION, ImmutableMap.of( + ORCHESTRATION_REQUEST_ID, "dbe54591-c8ed-46d3-abc7-d3a24873dfbd", + STATUS_MESSAGE, Constants.ViewEdit.VNF_CREATED_SUCCESSFULLY_TEXT, + REQUEST_TYPE, CREATE + ), APPEND); + openAndFillVnfPopup(NODE_INSTANCE, AAIAIC_25, TENANT, + FALSE, LEGACY_REGION, "ebc3bc3d-62fd-4a3f-a037-f619df4ff034", "platform", getCurrentUser().tenants, null, null, instanceName); + assertConfirmShowMissingDataErrorOnCurrentPopup(Constants.ViewEdit.LINE_OF_BUSINESS_TEXT); + successConfirmVnfAndClosePopup(); + }); + } + + @Test + private void emptyLobAfterReopenCreateVnfDialog() throws Exception { + final String lobToSelect = "ECOMP"; + goToInstance(); + ViewEditPage viewEditPage = new ViewEditPage(); + viewEditPage.selectNodeInstanceToAdd(NODE_INSTANCE); + GeneralUIUtils.ultimateWait(); + SelectOption.selectOptionsFromMultiselectById(Constants.OwningEntity.LOB_SELECT_TEST_ID, new ArrayList<>(Arrays.asList(lobToSelect))); + viewEditPage.clickCancelButtonByTestID(); + viewEditPage.selectNodeInstanceToAdd(NODE_INSTANCE); + GeneralUIUtils.ultimateWait(); + AssertUnselectedOptionInMultiselectById(Constants.OwningEntity.LOB_SELECT_TEST_ID, lobToSelect); + viewEditPage.clickCancelButtonByTestID(); + } + + @Test(dataProvider = "msoTestApiOptions") + private void testAddVolumeGroup(String msoTestApiOption, String msoTestApiValue) throws Exception { + withMsoTestApiConfiguration(msoTestApiOption, msoTestApiValue, () -> { + final String REQUEST_ID = "dbe54591-c8ed-46d3-abc7-d3a24873bdaa"; + final String MODEL_UUID = "13f022c4-651e-4326-b8e1-61e9a8c7a7ad"; + SimulatorApi.registerExpectation("aLacarteFlow/mso_create_volume_group.json", ImmutableMap.of(SERVICE_INSTANCE_ID, SERVICE_ID, "VNF_INSTANCE_ID", VNF_ID, "REQUEST_ID", REQUEST_ID, DEFAULT_TEST_API_VALUE, msoTestApiValue), SimulatorApi.RegistrationStrategy.APPEND); + SimulatorApi.registerExpectation(A_LACARTE_FLOW_GET_ORCHESTRATION, + ImmutableMap.of(ORCHESTRATION_REQUEST_ID, REQUEST_ID, STATUS_MESSAGE, Constants.ViewEdit.VOLUME_GROUP_CREATED_SUCCESSFULLY_TEXT, + REQUEST_TYPE, CREATE), SimulatorApi.RegistrationStrategy.APPEND); + GeneralUIUtils.ultimateWait(); + goToInstance(); + ServiceModel serviceInstance = new ServicesService().getServiceModel(MODEL_UUID); + addVolumeGroup("Vsp1710pid298109Vmmsc..mmsc_mod6_eca_oam..module-3", AAIAIC_25, TENANT, + FALSE, LEGACY_REGION, getCurrentUser().tenants, serviceInstance); + }); + } + + private User getCurrentUser() { + return usersService.getUser(Constants.Users.MOBILITY_VMMSC); + } + + private void goToInstance() { + SideMenu.navigateToSearchExistingPage(); + goToExistingInstanceBySubscriber(SUBSCRIBER, SERVICE_NAME, SERVICE_ID); + + } + + @Override + protected UserCredentials getUserCredentials() { + User user = getCurrentUser(); + return new UserCredentials(user.credentials.userId, user.credentials.password, Constants.Users.MOBILITY_VMMSC, "", ""); + } + + @DataProvider + public static Object[][] msoTestApiOptions() { + return new Object[][]{ + {"GR_API (new)", DEFAULT_TEST_API_VALUE} + , {"VNF_API (old)", "VNF_API"} + }; + } + + private void withMsoTestApiConfiguration(String msoTestApiOption, String msoTestApiValue, Runnable test) { + if (msoTestApiValue.equals(DEFAULT_TEST_API_VALUE)) { + test.run(); + } else { + try { + selectMsoTestApiOption(msoTestApiOption); + test.run(); + } finally { + // back to default + selectMsoTestApiOption("GR_API (new)"); + } + } + } + + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/AddNetworkTest.java b/vid-automation/src/main/java/vid/automation/test/test/AddNetworkTest.java new file mode 100644 index 000000000..0251e365c --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/AddNetworkTest.java @@ -0,0 +1,55 @@ +package vid.automation.test.test; + +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.model.User; +import vid.automation.test.sections.ViewEditPage; +import vid.automation.test.services.BulkRegistration; +import vid.automation.test.services.SimulatorApi; + +import java.util.HashMap; +import java.util.Map; + +public class AddNetworkTest extends VidBaseTestCase { + + private ViewEditPage viewEditPage = new ViewEditPage(); + private String serviceInstanceIdWithNetwork = "d198cc45-158b-480e-8d2c-03943c51268e"; + private String currentUser; + + @Test + public void testAddNetworkFullFlow() throws Exception { + User user = usersService.getUser(Constants.Users.MOBILITY_MOBILITY); + SimulatorApi.clearAll(); + BulkRegistration.genericSearchExistingServiceInstance(); + BulkRegistration.addNetwork(); + String instanceName = viewEditPage.generateInstanceName(Constants.ViewEdit.NETWORK_INSTANCE_NAME_PREFIX); + + BulkRegistration.msoAddNetwork(instanceName); + goToExistingInstanceById(serviceInstanceIdWithNetwork); + Map<String, String> networkMetadata= getNetworkExpectedMetadata(); + addNetwork(networkMetadata,instanceName, "AIC30_CONTRAIL_BASIC 0", "One","a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb","xxx1", "y1","c630e297a3ae486497d63eacec1d7c14", + "false", "some legacy region",user.tenants); + } + + private Map<String, String> getNetworkExpectedMetadata() { + return new HashMap<String, String>(){ + { + put(Constants.NetworkModelInfo.SERVICE_NAME, "Using VID for VoIP Network Instantiations Shani"); + put(Constants.NetworkModelInfo.SUBSCRIBER_NAME, "Mobility"); + put(Constants.NetworkModelInfo.SERVICE_INSTANCE_NAME, "service_with_network_shani"); + put(Constants.NetworkModelInfo.MODEL_NAME, "AIC30_CONTRAIL_BASIC"); + put(Constants.NetworkModelInfo.MODEL_INVARIANT_UUID, "de01afb5-532b-451d-aac4-ff9ff0644060"); + put(Constants.NetworkModelInfo.MODEL_VERSION, "3.0"); + put(Constants.NetworkModelInfo.MODEL_UUID, "ac815c68-35b7-4ea4-9d04-92d2f844b27c"); + put(Constants.NetworkModelInfo.MODEL_CUSTOMIZATION_UUID, "e94d61f7-b4b2-489a-a4a7-30b1a1a80daf"); + } + }; + } + + @Override + protected UserCredentials getUserCredentials() { + User user = usersService.getUser(Constants.Users.MOBILITY_MOBILITY); + return new UserCredentials(user.credentials.userId, user.credentials.password, Constants.Users.MOBILITY_MOBILITY, "", ""); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/AssociatePnfTest.java b/vid-automation/src/main/java/vid/automation/test/test/AssociatePnfTest.java index 894be37b0..5ee961215 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/AssociatePnfTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/AssociatePnfTest.java @@ -5,23 +5,15 @@ import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.WebElement; import org.testng.annotations.Test; import vid.automation.test.Constants; -import vid.automation.test.infra.Click; -import vid.automation.test.infra.Exists; -import vid.automation.test.infra.Get; import vid.automation.test.infra.Wait; -import vid.automation.test.model.User; import vid.automation.test.sections.PnfSearchAssociationPage; import vid.automation.test.sections.VidBasePage; import vid.automation.test.sections.ViewEditPage; import vid.automation.test.services.BulkRegistration; import vid.automation.test.services.SimulatorApi; -import vid.automation.test.services.UsersService; - -import java.io.IOException; public class AssociatePnfTest extends VidBaseTestCase { - private UsersService usersService = new UsersService(); private VidBasePage vidBasePage = new VidBasePage(); private ViewEditPage viewEditPage = new ViewEditPage(); private PnfSearchAssociationPage pnfSearchAssociationPage = new PnfSearchAssociationPage(); @@ -29,21 +21,18 @@ public class AssociatePnfTest extends VidBaseTestCase { private String pnfInstanceName = "MX_960-F722"; private String pnfModelName = "pnf 0"; - public AssociatePnfTest() throws IOException { } - //work with Simulator & asdc client @Test public void testAssociatePnf() throws Exception { SimulatorApi.clearAll(); BulkRegistration.searchExistingServiceInstance(); BulkRegistration.associatePnf(); - User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); - relogin(user.credentials); + goToExistingInstanceById(serviceInstanceId);//vid-test-444 addPNF(pnfModelName);//vid-test-444 searchPNF(pnfInstanceName); testResultSearchPNF(); associatePNF(); - vidBasePage.assertMsoRequestModal("COMPLETE - Success"); + vidBasePage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); vidBasePage.clickCloseButton(); } @@ -52,8 +41,7 @@ public class AssociatePnfTest extends VidBaseTestCase { SimulatorApi.clearAll(); BulkRegistration.searchExistingServiceInstance(); BulkRegistration.associatePnfError(); - User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); - relogin(user.credentials); + goToExistingInstanceById(serviceInstanceId); addPNF(pnfModelName); searchPNF(pnfInstanceName); @@ -66,8 +54,7 @@ public class AssociatePnfTest extends VidBaseTestCase { SimulatorApi.clearAll(); BulkRegistration.searchExistingServiceInstance(); BulkRegistration.associatePnfError(); - User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); - relogin(user.credentials); + goToExistingInstanceById(serviceInstanceId); String pnfName= "pnf 1"; GeneralUIUtils.clickOnElementByTestId(Constants.ViewEdit.ADD_VNF_BUTTON_TEST_ID, 60); @@ -81,8 +68,7 @@ public class AssociatePnfTest extends VidBaseTestCase { SimulatorApi.clearAll(); BulkRegistration.searchExistingServiceInstance(); BulkRegistration.associatePnfError(); - User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); - relogin(user.credentials); + goToExistingInstanceById(serviceInstanceId); addPNF(pnfModelName); searchPNF("AAAAA"); @@ -128,41 +114,41 @@ public class AssociatePnfTest extends VidBaseTestCase { private void checkServiceModelInfo() { Wait.angularHttpRequestsLoaded(); //Service name - String elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.SERVIICE_NAME_KEY; + String elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.SERVIICE_NAME_KEY; String infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"Demo Service 1"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"Demo Service 1"); //model name - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.MODEL_NAME; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.MODEL_NAME; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"Test Pnf"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"Test Pnf"); //service instance name - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.SERVICE_INSTANCE_NAME; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.SERVICE_INSTANCE_NAME; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"vid-test-444"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"vid-test-444"); //Model Invariant UUID - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.MODEL_INVARIANT_UUID; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.MODEL_INVARIANT_UUID; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"61eba322-c758-48f6-8942-1a7625aaaffb"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"61eba322-c758-48f6-8942-1a7625aaaffb"); //ubscriber NameModel Invariant UUID - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.SUBSCRIBER_NAME_KEY; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.SUBSCRIBER_NAME_KEY; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"USP VOICE"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"USP VOICE"); //Model Version - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.MODEL_VERSION; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.MODEL_VERSION; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"0.1"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"0.1"); //Model UUID - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.MODEL_UUID; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.MODEL_UUID; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"089b1c03-ff6b-4914-8c20-a7de3d375e8d"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"089b1c03-ff6b-4914-8c20-a7de3d375e8d"); //Model Customization UUID - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.MODEL_CUSTOMIZATION_UUID; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.MODEL_CUSTOMIZATION_UUID; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"cabf6d26-c362-4444-ba06-f850e8af2d35"); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,"cabf6d26-c362-4444-ba06-f850e8af2d35"); //Resource Name - elementTestId = Constants.serviceModelInfo.INFO_TEST_ID_PREFIX + Constants.serviceModelInfo.RESOURCE_NAME; + elementTestId = Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX + Constants.ServiceModelInfo.RESOURCE_NAME; infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); - Assert.assertEquals(String.format(Constants.serviceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,pnfModelName); + Assert.assertEquals(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE,elementTestId),infoItemText,pnfModelName); } private void checkPnfProperties() { diff --git a/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java b/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java index eb1c62faa..3843d6a98 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java @@ -1,27 +1,87 @@ package vid.automation.test.test; +import com.google.common.collect.ImmutableList; +import org.glassfish.jersey.uri.internal.JerseyUriBuilder; +import org.hamcrest.Matchers; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetServiceModelList; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetServicesGet; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIServiceDesignAndCreationPut; +import org.opencomp.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet; +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.web.client.RestTemplate; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import vid.automation.test.Constants; -import vid.automation.test.infra.Click; -import vid.automation.test.model.*; -import vid.automation.test.sections.BrowseASDCPage; -import vid.automation.test.sections.SideMenu; -import vid.automation.test.sections.ViewEditPage; +import vid.automation.test.infra.*; +import vid.automation.test.model.Service; +import vid.automation.test.model.User; +import vid.automation.test.sections.*; import vid.automation.test.services.ServicesService; -import vid.automation.test.services.UsersService; +import vid.automation.test.services.SimulatorApi; +import vid.automation.test.utils.CookieAndJsonHttpHeadersInterceptor; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; + +import static java.util.Collections.singletonList; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; -import java.io.IOException; public class BrowseASDCTest extends CreateInstanceDialogBaseTest { - private UsersService usersService = new UsersService(); + private final String invariantUUIDAlacarte = "a8dcd72d-d44d-44f2-aa85-53aa9ca99cba"; + private final String invariantUUIDMacro = "d27e42cf-087e-4d31-88ac-6c4b7585f800"; + private final String instantiationTypeNameAlacarte = "a la carte"; + private final String instantiationTypeNameMacro = "macro"; + private final String oldMacro = "old macro"; + private String modelInvariantUUID1 = "aeababbc-010b-4a60-8df7-e64c07389466"; + private String modelInvariantUUID2 = "aa2f8e9c-9e47-4b15-a95c-4a9385599abc"; + private String modelInvariantUUID3 = "d849c57d-b6fe-4843-8349-4ab8bbb08d71"; + private String modelUuid = "a8dcd72d-d44d-44f2-aa85-53aa9ca99cba"; + protected final RestTemplate restTemplate = new RestTemplate(); + private ServicesService servicesService = new ServicesService(); + final URI envUrI; + protected final URI uri; - public BrowseASDCTest() throws IOException { + public BrowseASDCTest() throws URISyntaxException { + this.envUrI = new URI(System.getProperty("ENV_URL")); + this.uri = new JerseyUriBuilder().host(envUrI.getHost()).port(envUrI.getPort()).scheme("http").path("vid").build(); } - @Test - public void testPNFOnCreatePopup() throws Exception { + @BeforeClass + public void login() { + UserCredentials userCredentials = getUserCredentials(); + final List<ClientHttpRequestInterceptor> interceptors = singletonList(new CookieAndJsonHttpHeadersInterceptor(uri, userCredentials)); + restTemplate.setInterceptors(interceptors); + } + + @BeforeMethod + public void invalidateTheCacheSelenium() { + if (Features.FLAG_SERVICE_MODEL_CACHE.isActive()) { + restTemplate.postForObject(uri + "/rest/models/reset", "", Object.class); + } + } + + @Override + protected UserCredentials getUserCredentials() { + User user = usersService.getUser(Constants.Users.MOBILITY_MOBILITY); + return new UserCredentials(user.credentials.userId, user.credentials.password, Constants.Users.MOBILITY_MOBILITY, "", ""); + } + + @Test(groups = {"shouldBeMigratedToWorkWithSimulator"}) + public void testPNFOnCreatePopup() { Service service = servicesService.getService("f39389e4-2a9c-4085-8ac3-04aea9c651be"); BrowseASDCPage browseASDCPage = new BrowseASDCPage(); SideMenu.navigateToBrowseASDCPage(); @@ -36,7 +96,12 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { validateServiceCreationDialog(service); } - @Test +// @BeforeMethod +// public void clearSimulator() { +// SimulatorApi.clearAll(); +// } + + @Test(groups = {"shouldBeMigratedToWorkWithSimulator"}) private void testPNFMacroInstantation() throws Exception { User user = usersService.getUser(Constants.Users.MOBILITY_MOBILITY); relogin(user.credentials); @@ -45,7 +110,7 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { SideMenu.navigateToBrowseASDCPage(); browseASDCPage.clickDeployServiceButtonByServiceUUID("f39389e4-2a9c-4085-8ac3-04aea9c651be"); assertThatServiceCreationDialogIsVisible(); - assertDropdownPermittedItemsByValue(user.subscribers, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); + assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); browseASDCPage.selectSubscriberById("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); browseASDCPage.selectProductFamily("ebc3bc3d-62fd-4a3f-a037-f619df4ff034"); GeneralUIUtils.ultimateWait(); @@ -71,68 +136,205 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { viewEditPage.clickActivateButton(); } +// @Test +// private void browseServiceModel_deployServiceUnexpectedDeploymentMode_creationPopupIsMacro() throws Exception { +// deployServiceAndAssertInstantiationType( +// "don't know.zip", +// "a8dcd72d-d44d-44f2-aa85-53aa9ca99cba", +// "macro" +// ); +// } + @Test - private void testServiceInstantation() throws Exception { - User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); + private void browseServiceModel_deployServiceALaCarteByBackendInput_creationPopupIsALaCarte() throws Exception { + // model uuid should be of macro + deployServiceAndAssertInstantiationType( + "csar15782222_instantiationTypeAlacarte_invariantUUIDMacro.zip", + invariantUUIDMacro, + instantiationTypeNameAlacarte + ); + } + + @Test + private void browseServiceModel_deployServiceALaCarteBecauseNotOnMACRO_SERVICESConfig_creationPopupIsALaCarte() throws Exception { + deployServiceAndAssertInstantiationType( + "csar15782222_instantiationTypeEmpty_invariantUUIDAlacarte.zip", + invariantUUIDAlacarte, + instantiationTypeNameAlacarte + ); + } + + @Test + private void browseServiceModel_deployServiceMacroByBackendInput_creationPopupIsMacro() throws Exception { + deployServiceAndAssertInstantiationType( + "csar15782222_instantiationTypeMacro_invariantUUIDAlacarte.zip", + invariantUUIDAlacarte, + instantiationTypeNameMacro + ); + } + + @Test + private void browseServiceModel_deployServiceMacroByMACRO_SERVICESConfig_creationPopupIsOldMacro() throws Exception { + deployServiceAndAssertInstantiationType( + "csar15782222_invariantUUIDMacro.zip", + invariantUUIDMacro, + oldMacro + + ); + } + + @Test + private void browseServiceModel_deployServiceMacroWithPnf_creationPopupIsOldMacro() throws Exception { + deployServiceAndAssertInstantiationType( + "csar15782222_instantiationTypeMacroWithPnf.zip", + invariantUUIDMacro, + oldMacro + + ); + } + + @Test + private void browseServiceModel_deployServiceMacroWithCR_creationPopupIsOldMacro() throws Exception { + deployServiceAndAssertInstantiationType( + "csar15782222_instantiationTypeMacroWithCR.zip", + invariantUUIDMacro, + oldMacro + + ); + } + + @Test + private void browseServiceModel_deployServiceMacroWithNetwork_creationPopupIsMacroByFF() throws Exception { + String macroInstantiationAccordingFF = Features.FLAG_ASYNC_INSTANTIATION.isActive() && Features.FLAG_NETWORK_TO_ASYNC_INSTANTIATION.isActive() ? instantiationTypeNameMacro : oldMacro; + deployServiceAndAssertInstantiationType( + "csar15782222_instantiationTypeMacroWithNetwork.zip", + invariantUUIDMacro, + macroInstantiationAccordingFF + ); + } + + + private void deployServiceAndAssertInstantiationType(String modelZipFileName, String modelInvariantId, String expectedInstantiationType) throws Exception { + String modelVersionId = "4d71990b-d8ad-4510-ac61-496288d9078e"; + + registerExpectationForLegacyServiceDeployment(modelVersionId, modelInvariantId, modelZipFileName, null); + User user = usersService.getUser(Constants.Users.MOBILITY_MOBILITY); relogin(user.credentials); BrowseASDCPage browseASDCPage = new BrowseASDCPage(); SideMenu.navigateToBrowseASDCPage(); - Service service = servicesService.getService("c079d859-4d81-4add-a9c3-94551f96e2b0"); + GeneralUIUtils.ultimateWait(); + browseASDCPage.clickDeployServiceButtonByServiceUUID(modelVersionId); + DeployMacroDialogBase macroDialog = null; + if (expectedInstantiationType.equals(instantiationTypeNameAlacarte)) { + GeneralUIUtils.ultimateWait(); + browseASDCPage.clickCancelButtonByTestID(); + } else { //macro + macroDialog = expectedInstantiationType.equals(oldMacro) ? new DeployMacroDialogOld() : getMacroDialog(); + macroDialog.assertTitle(); + macroDialog.closeDialog(); + } + } + + @Test + private void testServiceInstantiationAlaCarte() throws Exception { + User user = usersService.getUser(Constants.Users.MOBILITY_MOBILITY); + relogin(user.credentials); + + String zipFileName = "serviceCreationTest.zip"; + String modelVersionId = "aa2f8e9c-9e47-4b15-a95c-4a9385599abc"; //uuid of model. must be same as in serviceCreationTest.zip + String modelInvariantId = invariantUUIDAlacarte; //must be same as in serviceCreationTest.zip + + registerExpectationForLegacyServiceDeployment(modelVersionId, modelInvariantId, zipFileName, null); + + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); + SideMenu.navigateToBrowseASDCPage(); + + Service service = new Service( + "pnf", + modelVersionId, + modelInvariantId, + "action-data", + "1.0", + "Network L1-3", + "ADIOD vMX vPE based on Juniper 17.2 release. Updated with updated VF for v8.0 of VLM", + null); browseASDCPage.clickDeployServiceButtonByServiceUUID(service.uuid); validateServiceCreationDialog(service); browseASDCPage.setInstanceName(browseASDCPage.generateInstanceName()); - assertDropdownPermittedItemsByValue(user.subscribers, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); - browseASDCPage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89"); + assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); + browseASDCPage.selectSubscriberById("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); - String serviceType = "VIRTUAL USP"; + String serviceType = "Mobility"; GeneralUIUtils.findAndWaitByText(serviceType, 30); assertDropdownPermittedItemsByValue(user.serviceTypes, Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS); browseASDCPage.selectServiceTypeByName(serviceType); - Click.onFirstSelectOptionById(Constants.OwningEntity.PROJECT_SELECT_TEST_ID); - Click.onFirstSelectOptionById(Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); + SelectOption.byTestIdAndVisibleText("yyy1", Constants.OwningEntity.PROJECT_SELECT_TEST_ID); + SelectOption.byTestIdAndVisibleText("aaa1", Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); browseASDCPage.selectSuppressRollback("false"); browseASDCPage.clickConfirmButton(); assertSuccessfulServiceInstanceCreation(); + } - browseASDCPage.clickCloseButton(); + private static final String serviceName = "CONTRAIL30_L2NODHCP"; + private static final String modelInvariantId = "5b607929-6088-4614-97ef-cac817508e0e"; + private static final String serviceUuid = "797a6c41-0f80-4d35-a288-3920c4e06baa"; + + + @DataProvider + public static Object[][] filterTexts() { + return new Object[][]{{serviceName},{modelInvariantId},{serviceUuid}}; + } + + @Test(dataProvider = "filterTexts") + public void testFilterOptionsInBrowseSdc(String filterText){ + SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND, + "ecompportal_getSessionSlotCheckInterval.json", + "browseASDC/aai_get_services.json", + "browseASDC/get_aai_get_subscribers.json", + "browseASDC/get_sdc_catalog_services_2f80c596.json", + "browseASDC/service_design_and_creation.json"); + SideMenu.navigateToBrowseASDCPage(); + BrowseASDCPage browseAsdcPage = new BrowseASDCPage(); GeneralUIUtils.ultimateWait(); + assertThat(browseAsdcPage.countCurrentRowsInTable(),(Matchers.greaterThan(1))); + browseAsdcPage.fillFilterText(filterText); + Assert.assertEquals(browseAsdcPage.countCurrentRowsInTable(),1); + Assert.assertTrue(Exists.byTestId("deploy-" + serviceUuid)); + browseAsdcPage.fillFilterText(""); - addVNF("VID-PCRF-05-15-17 0", "AAIAIC25", "092eb9e8e4b7412e8787dd091bc58e86", - "false", "some legacy region", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", user.tenants); - addVolumeGroup("VidPcrf051517..pcrf_nimbus_pcm..module-4", "AAIAIC25", - "092eb9e8e4b7412e8787dd091bc58e86", "false", "some legacy region", user.tenants); - addVFModule("VidPcrf051517..pcrf_nimbus_psm..module-1", "AAIAIC25", - "092eb9e8e4b7412e8787dd091bc58e86", "false", "some legacy region", user.tenants); } @Test private void testCategoryParamsDropdownsExistsInCreationDialog() throws Exception { + SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND, + "ecompportal_getSessionSlotCheckInterval.json", + "browseASDC/aai_get_services.json", + "browseASDC/get_aai_get_subscribers.json", + "browseASDC/get_sdc_catalog_services_2f80c596.json", + "browseASDC/service_design_and_creation.json"); User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); - BrowseASDCPage browseASDCPage = new BrowseASDCPage(); SideMenu.navigateToBrowseASDCPage(); - - Service service = servicesService.getService("c079d859-4d81-4add-a9c3-94551f96e2b0"); - + Service service = servicesService.getService("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"); browseASDCPage.clickDeployServiceButtonByServiceUUID(service.uuid); - assertThatServiceCreationDialogIsVisible(); - - GeneralUIUtils.clickOnElementByTestId(Constants.OwningEntity.PROJECT_SELECT_TEST_ID); - GeneralUIUtils.clickOnElementByTestId(Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); + DeployMacroDialogBase deployMacroDialog = getMacroDialog(); + deployMacroDialog.assertDialogExists(); + deployMacroDialog.clickProjectSelect(); + deployMacroDialog.clickOwningEntitySelect(); } - @Test + @Test(groups = {"shouldBeMigratedToWorkWithSimulator"}) private void testOwningEntityRequiredAndProjectOptional() throws Exception { User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); @@ -147,7 +349,7 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { browseASDCPage.setInstanceName(browseASDCPage.generateInstanceName()); - assertDropdownPermittedItemsByValue(user.subscribers, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); + assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); browseASDCPage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89"); String serviceType = "VIRTUAL USP"; @@ -166,7 +368,7 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { assertSuccessfulServiceInstanceCreation(); } - @Test + @Test(groups = {"shouldBeMigratedToWorkWithSimulator"}) protected void testLineOfBusinessOptionalAndPlatformRequired() throws Exception { User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); @@ -182,7 +384,7 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { browseASDCPage.setInstanceName(browseASDCPage.generateInstanceName()); - assertDropdownPermittedItemsByValue(user.subscribers, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); + assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); browseASDCPage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89"); String serviceType = "VIRTUAL USP"; @@ -218,4 +420,69 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { viewEditPage.clickConfirmButton(); assertSuccessfulVNFCreation(); } + + private void prepareSimulatorWithServiceModelListBeforeBrowseASDCService(){ + SimulatorApi.clearAll(); + + ImmutableList<BasePreset> presets = ImmutableList.of( + new PresetGetSessionSlotCheckIntervalGet(), + new PresetAAIGetSubscribersGet(), + new PresetAAIGetServiceModelList(modelUuid, modelInvariantUUID1, modelInvariantUUID2, modelInvariantUUID3), + new PresetAAIGetServicesGet()); + + SimulatorApi.registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET); + } + + @Test + private void browseSDCServiceModelListCheckAAIResponse(){ + prepareSimulatorWithServiceModelListBeforeBrowseASDCService(); + SideMenu.navigateToBrowseASDCPage(); + GeneralUIUtils.ultimateWait(); + + WebElement sdcTableElement = Get.byId("sdcModelsTable"); + List<WebElement> sdcModelList = sdcTableElement.findElements(By.className("sdcServiceModel")); + + WebElement sdcFirstModel = sdcModelList.get(0); + WebElement sdcSecondModel = sdcModelList.get(1); + WebElement sdcThirdModel = sdcModelList.get(2); + + //Check uuid + By uuid = By.className("uuid"); + assertEquals(modelUuid, sdcFirstModel.findElement(uuid).getText()); + assertEquals("1dae721c-a1ef-435f-b811-760c23f467bf" , sdcSecondModel.findElement(uuid).getText()); + assertEquals("29236d45-e790-4c17-a115-1533cc09b7b1" , sdcThirdModel.findElement(uuid).getText()); + + //Check invariantUUID + By invariantUUID = By.className("invariantUUID"); + assertEquals(modelInvariantUUID1, sdcFirstModel.findElement(invariantUUID).getText()); + assertEquals(modelInvariantUUID2, sdcSecondModel.findElement(invariantUUID).getText()); + assertEquals(modelInvariantUUID3, sdcThirdModel.findElement(invariantUUID).getText()); + + //Check Names + By name = By.className("name"); + assertEquals("AAAvIRC_mm779p_Service" , sdcFirstModel.findElement(name).getText()); + assertEquals("BBBvIRC_mm779p_Service" , sdcSecondModel.findElement(name).getText()); + assertEquals("CCCvIRC_mm779p_Service" , sdcThirdModel.findElement(name).getText()); + + //Check distribution Status + By distributionStatus = By.className("distributionStatus"); + assertEquals("DISTRIBUTION_COMPLETE_OK" , sdcFirstModel.findElement(distributionStatus).getText()); + assertEquals("", sdcSecondModel.findElement(distributionStatus).getText()); + assertEquals("DISTRIBUTION_COMPLETE_ERROR" , sdcThirdModel.findElement(distributionStatus).getText()); + + //Check another fields + assertEquals("service" , sdcFirstModel.findElement(By.className("category")).getText()); + assertEquals("1.0" , sdcFirstModel.findElement(By.className("version")).getText()); + } + @Test + public void browseSdcModel_getEmptyList_noModelsMessageIsShown() throws Exception { + SimulatorApi.clearAll(); + SimulatorApi.registerExpectationFromPresets(ImmutableList.of( + new PresetAAIServiceDesignAndCreationPut(true), + new PresetAAIGetSubscribersGet()), SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET); + SideMenu.navigateToBrowseASDCPage(); + GeneralUIUtils.ultimateWait(); + WebElement serviceModelsTbody = Get.byXpath("//table[@data-tests-id='serviceModelsTable']/tbody"); + assertFalse(Exists.tagNameInAnotherElement(serviceModelsTbody, "tr"), "Table should be empty on empty results"); + } } diff --git a/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java b/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java index 732d2998c..eadf38f4f 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java @@ -1,20 +1,26 @@ package vid.automation.test.test; -//import com.sun.tools.internal.jxc.ap.Const; - +import com.google.common.collect.ImmutableMap; import com.google.common.primitives.Ints; import org.json.JSONException; import org.junit.Assert; import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; +import org.openqa.selenium.remote.RemoteWebElement; import org.openqa.selenium.support.ui.Select; import org.skyscreamer.jsonassert.JSONAssert; import org.skyscreamer.jsonassert.JSONCompareMode; import org.testng.annotations.*; import vid.automation.test.Constants; import vid.automation.test.infra.*; +import vid.automation.test.model.User; import vid.automation.test.sections.ChangeManagementPage; import vid.automation.test.services.SimulatorApi; +import vid.automation.test.utils.DB_CONFIG; import java.sql.Connection; import java.sql.DriverManager; @@ -33,6 +39,7 @@ import static org.hamcrest.core.IsNot.not; public class ChangeManagementTest extends VidBaseTestCase { + public static final String SCHEDULED_ID = "0b87fe60-50b0-4bac-a0a7-49e951b0ba9e"; @Test public void testLeftPanelChangeManagementButton() { Assert.assertTrue(Wait.byText(Constants.SideMenu.VNF_CHANGES)); @@ -58,8 +65,6 @@ public class ChangeManagementTest extends VidBaseTestCase { Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalWorkFlowInputId)); Assert.assertTrue(Exists.byId(Constants.generalSubmitButtonId)); Assert.assertTrue(Exists.byId(Constants.generalCancelButtonId)); - Click.byId(Constants.generalCancelButtonId); - Wait.modalToDisappear(); } private void openAndFill1stScreen(String vnfName, String vnfTargetVersion, String workflow) { @@ -67,7 +72,6 @@ public class ChangeManagementTest extends VidBaseTestCase { String serviceType = VNF_DATA_WITH_IN_PLACE.serviceType; String vnfType = VNF_DATA_WITH_IN_PLACE.vnfType; String vnfSourceVersion = VNF_DATA_WITH_IN_PLACE.vnfSourceVersion; - ChangeManagementPage.openNewChangeManagementModal(); Wait.angularHttpRequestsLoaded(); ChangeManagementPage.selectSubscriberById(subscriberId); @@ -80,7 +84,11 @@ public class ChangeManagementTest extends VidBaseTestCase { Wait.angularHttpRequestsLoaded(); Click.byId(Constants.ChangeManagement.newModalVNFNameInputId); Click.byText(vnfName); + // close the multi-select + Click.byId(Constants.ChangeManagement.newModalVNFNameInputId); Wait.angularHttpRequestsLoaded(); + GeneralUIUtils.ultimateWait(); + if (vnfTargetVersion != null) { SelectOption.byClassAndVisibleText(Constants.ChangeManagement.newModalTargetVersionInputsClass, vnfTargetVersion); Wait.angularHttpRequestsLoaded(); @@ -94,15 +102,6 @@ public class ChangeManagementTest extends VidBaseTestCase { Wait.byText(Constants.ChangeManagement.schedulerModalNowLabel); Click.byText(Constants.ChangeManagement.schedulerModalNowLabel); -// Click.byId(Constants.ChangeManagement.schedulerModalStartDateInputId); //next month must be in the future -// Click.byClass(Constants.ChangeManagement.schedulerModalNextMonthButtonClass); -// Wait.byText(startDate); -// Click.byText(startDate); -// -// Click.byId(Constants.ChangeManagement.schedulerModalEndDateInputId); //next month must be in the future -// Click.byClass(Constants.ChangeManagement.schedulerModalNextMonthButtonClass); -// Wait.byText(endDate); -// Click.byText(endDate); SelectOption.byValue(Constants.ChangeManagement.schedulerModalHoursOption, Constants.ChangeManagement.schedulerModalTimeUnitSelectId); @@ -116,22 +115,9 @@ public class ChangeManagementTest extends VidBaseTestCase { } - static class DB_CONFIG { - static String url = String.format("jdbc:mariadb://%s:%d/vid_portal", - System.getProperty("DB_HOST", System.getProperty("VID_HOST", "127.0.0.1" )), - Integer.valueOf(System.getProperty("DB_PORT", "3306")) - ); - static String username = "euser"; - static String password = "euser"; - - static final int userId = 822; - static final int roleVFlowLogicId = 10822; - static final int roleMobilityId = 11822; + static class VNF_DATA_WITH_IN_PLACE { static final int vnfZrdm3amdns02test2Id = 11822; static final int vnfHarrisonKrisId = 12822; - } - - static class VNF_DATA_WITH_IN_PLACE { static String subscriberId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"; static String serviceType = "vFlowLogic"; static String vnfType = "vMobileDNS"; @@ -142,26 +128,20 @@ public class ChangeManagementTest extends VidBaseTestCase { } @AfterClass - protected void dropUser822() { + protected void dropSpecialVNFs() { System.out.println("Connecting database..."); try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { System.out.println("Database connected!"); + Statement stmt = connection.createStatement(); - stmt.addBatch("DELETE FROM `fn_user_role` WHERE `USER_ID` = " + DB_CONFIG.userId); - stmt.addBatch("DELETE FROM `fn_role` WHERE `ROLE_ID` = " + DB_CONFIG.roleVFlowLogicId); - stmt.addBatch("DELETE FROM `fn_role` WHERE `ROLE_ID` = " + DB_CONFIG.roleMobilityId); - stmt.addBatch("DELETE FROM `fn_user` WHERE `USER_ID` = " + DB_CONFIG.userId); + stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id); + stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id); int[] executeBatch = stmt.executeBatch(); stmt = connection.createStatement(); - stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + DB_CONFIG.vnfZrdm3amdns02test2Id); - stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + DB_CONFIG.vnfZrdm3amdns02test2Id); - executeBatch = stmt.executeBatch(); - - stmt = connection.createStatement(); - stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + DB_CONFIG.vnfHarrisonKrisId); - stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + DB_CONFIG.vnfHarrisonKrisId); + stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId); + stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId); executeBatch = stmt.executeBatch(); } catch (SQLException e) { @@ -171,22 +151,37 @@ public class ChangeManagementTest extends VidBaseTestCase { @BeforeClass protected void registerToSimulator() { - SimulatorApi.registerExpectation( + SimulatorApi.clearAll(); + SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND, "changeManagement/ecompportal_getSessionSlotCheckInterval.json" - , "changeManagement/get_aai_get_subscribers.json" - , "changeManagement/get_aai_sub_details.json" - , "changeManagement/get_scheduler_details_short.json" - , "changeManagement/get_sdc_catalog_services_2f80c596.json" - , "changeManagement/get_service-design-and-creation.json" - , "changeManagement/get_vnf_data_by_globalid_and_service_type.json" - , "changeManagement/service-design-and-creation.json" + , "changeManagement/get_aai_get_subscribers.json" + , "changeManagement/get_aai_sub_details.json" + , "changeManagement/get_sdc_catalog_services_2f80c596.json" + , "changeManagement/get_service-design-and-creation.json" + , "changeManagement/get_vnf_data_by_globalid_and_service_type.json" + , "changeManagement/service-design-and-creation.json" + , "changeManagement/mso_get_manual_task.json" + , "changeManagement/mso_post_manual_task.json" + ); + + registerDefaultTablesData(); + } + + private void registerDefaultTablesData() { + SimulatorApi.registerExpectation( + new String[] {"changeManagement/get_scheduler_details_short.json", + "changeManagement/mso_get_change_managements.json" + ,"changeManagement/delete_scheduled_task.json"}, + ImmutableMap.of( + "<SCHEDULE_ID>", SCHEDULED_ID, + "<IN_PROGRESS_DATE>", "Fri, 08 Sep 2017 19:34:32 GMT"), SimulatorApi.RegistrationStrategy.APPEND ); } @BeforeClass - protected void prepareUser822() { + protected void prepareSpecialVNFs() { - dropUser822(); + dropSpecialVNFs(); System.out.println("Connecting database..."); @@ -195,32 +190,21 @@ public class ChangeManagementTest extends VidBaseTestCase { System.out.println("Database connected!"); /////////////////////////////// - // Add user with specific roles - Statement stmt = connection.createStatement(); - stmt.addBatch("INSERT INTO `fn_user` (`USER_ID`, `ORG_USER_ID`, `LOGIN_ID`, `LOGIN_PWD`) VALUES (" + DB_CONFIG.userId + ", 'Porfirio Gerhardt', '"+ DB_CONFIG.userId +"', '"+ DB_CONFIG.userId +"')"); - stmt.addBatch("INSERT INTO `fn_role` (`ROLE_ID`, `ROLE_NAME`, `ACTIVE_YN`, `PRIORITY`) VALUES (" + DB_CONFIG.roleVFlowLogicId + ", 'PACKET CORE___vFlowLogic', 'Y', 5)"); - stmt.addBatch("INSERT INTO `fn_role` (`ROLE_ID`, `ROLE_NAME`, `ACTIVE_YN`, `PRIORITY`) VALUES (" + DB_CONFIG.roleMobilityId + ", 'PACKET CORE___Mobility', 'Y', 5)"); - stmt.addBatch("INSERT INTO `fn_user_role` (`USER_ID`, `ROLE_ID`, `PRIORITY`, `APP_ID`) VALUES (" + DB_CONFIG.userId + ", 16, NULL, 1)"); - stmt.addBatch("INSERT INTO `fn_user_role` (`USER_ID`, `ROLE_ID`, `PRIORITY`, `APP_ID`) VALUES (" + DB_CONFIG.userId + ", " + DB_CONFIG.roleVFlowLogicId + ", NULL, 1)"); - stmt.addBatch("INSERT INTO `fn_user_role` (`USER_ID`, `ROLE_ID`, `PRIORITY`, `APP_ID`) VALUES (" + DB_CONFIG.userId + ", " + DB_CONFIG.roleMobilityId + ", NULL, 1)"); - int[] executeBatch = stmt.executeBatch(); - assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0))); - - /////////////////////////////// // Add 2 vnfs with some workflows - stmt = connection.createStatement(); + Statement stmt = connection.createStatement(); stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " + - "VALUES (" + DB_CONFIG.vnfZrdm3amdns02test2Id + ", '76e908e0-5201-44d2-a3e2-9e6128d05820', '72e465fe-71b1-4e7b-b5ed-9496118ff7a8')"); - stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + DB_CONFIG.vnfZrdm3amdns02test2Id + ", 2)"); - stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + DB_CONFIG.vnfZrdm3amdns02test2Id + ", 3)"); - executeBatch = stmt.executeBatch(); + "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", '76e908e0-5201-44d2-a3e2-9e6128d05820', '72e465fe-71b1-4e7b-b5ed-9496118ff7a8')"); + stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 2)"); + stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 3)"); + stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 4)"); + int[] executeBatch = stmt.executeBatch(); assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0))); stmt = connection.createStatement(); stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " + - "VALUES (" + DB_CONFIG.vnfHarrisonKrisId + ", '0903e1c0-8e03-4936-b5c2-260653b96413', '00beb8f9-6d39-452f-816d-c709b9cbb87d')"); - stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + DB_CONFIG.vnfHarrisonKrisId + ", 1)"); - stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + DB_CONFIG.vnfHarrisonKrisId + ", 2)"); + "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", '0903e1c0-8e03-4936-b5c2-260653b96413', '00beb8f9-6d39-452f-816d-c709b9cbb87d')"); + stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 1)"); + stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 2)"); executeBatch = stmt.executeBatch(); assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0))); @@ -232,9 +216,97 @@ public class ChangeManagementTest extends VidBaseTestCase { @Override protected UserCredentials getUserCredentials() { - return new UserCredentials("" + DB_CONFIG.userId, "" + DB_CONFIG.userId, "", "", ""); + + String userName = Constants.Users.MOBILITY_VMMSC; + User user = usersService.getUser(userName); + return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", ""); + } + + private void updateConfigFile(String fileName) { + Assert.assertFalse(Exists.byId(Constants.ChangeManagement.newModalConfigUpdateInputId)); + openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, "VNF Config Update"); + Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled()); + Input.file("changeManagement/" + fileName, Constants.ChangeManagement.newModalConfigUpdateInputId); + GeneralUIUtils.ultimateWait(); + } + + @Test + public void regretToCancelWorkflowOnPendingPopUp() { + updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short.json"); + ChangeManagementPage.openChangeManagementPage(); + + Wait.angularHttpRequestsLoaded(); + ChangeManagementPage.clickOnRefreshButton(); + + GeneralUIUtils.ultimateWait(); + clickAndAssertOnCancelButton(SCHEDULED_ID); + Click.byClass("pull-right modal-close"); + //TODO: if refresh button functional will be change to refactor next line. + ChangeManagementPage.clickOnRefreshButton(); + + assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "cancel-action icon-pending"); + } + + @Test + public void clickOnScheduledJob_SuccessfulMessageAppear() { + ChangeManagementPage.openChangeManagementPage(); +// Wait.angularHttpRequestsLoaded(); + GeneralUIUtils.ultimateWait(); + clickAndAssertOnCancelButton(SCHEDULED_ID); + updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short_with_after_cancel" + + ".json"); + + clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp(); + + GeneralUIUtils.ultimateWait(); + //TODO: To develop automatic table refresh to avoid click on refresh button. + ChangeManagementPage.clickOnRefreshButton(); + assertCorrectJobDeleted("ctsf0002v"); + + assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "ng-hide"); + + + } + + private void clickAndAssertOnCancelButton(String scheduledID){ + Wait.waitByTestId("icon-status-"+ scheduledID, 5); + Click.byTestId("icon-status-"+ scheduledID); + GeneralUIUtils.ultimateWait(); + WebElement cancelPendingConfirmationMessage = Get.byTestId("btn-cancel-workflow"); + assertThat(cancelPendingConfirmationMessage.getText(),containsString("Are you sure you want to delete workflow")); + } + private void clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp() { + + try { + Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass); + GeneralUIUtils.ultimateWait(); + Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success")); + } finally { + if (Exists.byClassAndText("modal-title", "Pending")){ + Click.byClass("pull-right modal-close"); + } + } + Click.byClassAndVisibleText("btn","OK"); } + private void assertCorrectJobDeleted (String vnfName){ + WebElement canceledScheduledJobRow = GeneralUIUtils.getWebElementByTestID("pending-table-cm-row"); + String scheduledVnfName = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(1).getText(); + String scheduledState = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(5).getText(); + Assert.assertEquals(vnfName, scheduledVnfName); + Assert.assertEquals("Deleted", scheduledState); + } + + private void assertAndCheckStatusCellOnDeletedSheduledJob(String scheduledId, String classString){ + boolean isNotDisplayed = GeneralUIUtils.waitForElementInVisibilityByTestId("icon-status-" + scheduledId, 5); + Assert.assertTrue(isNotDisplayed); + } + public void updateSimulatorWithParametersOfScheduledJod(String jasonFile){ + SimulatorApi.registerExpectation( + new String[] {"changeManagement/"+jasonFile}, + ImmutableMap.of("<SCHEDULE_ID>", SCHEDULED_ID), SimulatorApi.RegistrationStrategy.APPEND + ); + } @Test public void testWorkflowVNFInPlaceSoftwareUpdateNotInWorkflowsListWhenNotExpected() { @@ -356,27 +428,42 @@ public class ChangeManagementTest extends VidBaseTestCase { , {"78058488", "n", "WkH"} }; } + + // Deleted testVidToMsoCallbackDataWithInPlaceSWUpdate test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid. - @Test(dataProvider = "dataForUpdateWorkflowPartialWithInPlace") - public void testVidToMsoCallbackDataWithInPlaceSWUpdate(String operationsTimeout, String existingSwVersion, String newSwVersion) { - openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate(); - fillVNFInPlace3Fields(operationsTimeout, existingSwVersion, newSwVersion); - - String payload = "\"payload\":\"{\\\"existing-software-version\\\":\\\""+ existingSwVersion +"\\\",\\\"new-software-version\\\":\\\""+ newSwVersion +"\\\",\\\"operation-timeout\\\":\\\""+ operationsTimeout +"\\\"}\","; - assertThatVidToMsoCallbackDataIsOk(VNF_DATA_WITH_IN_PLACE.workflowName, payload); - } + // Deleted testUploadConfigUpdateFile test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid. @Test - public void testVidToMsoCallbackData() { - String workflow = "Replace"; + public void testUploadConfigUpdateNonCsvFile() { + String fileName = "non-valid.json"; + updateConfigFile(fileName); + WebElement errorLabel = Get.byId("errorLabel"); + Assert.assertEquals("wrong error message for non csv file", "Invalid file type. Please select a file with a CSV extension.", errorLabel.getText()); + Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled()); + } - openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, workflow); + @Test(dataProvider = "invalidCsvFiles") + public void testUploadInvalidConfigUpdateFile(String fileName) { + updateConfigFile(fileName); + WebElement errorLabel = Get.byId("errorContentLabel"); + Assert.assertEquals("wrong error message for non csv file", "Invalid file structure.", errorLabel.getText()); + Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled()); + } - assertThatVidToMsoCallbackDataIsOk(workflow, ""); + @DataProvider + public static Object[][] invalidCsvFiles() { + return new Object[][] { + {"emptyFile.csv"}, + {"withoutPayload.csv"}, + {"withoutConfigurationParameters.csv"}, + {"withoutRequestParameters.csv"} + }; } + // Deleted testVidToMsoCallbackData test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid. + private void assertThatVidToMsoCallbackDataIsOk(String workflow, String payload) { Assert.assertTrue(Get.byId(Constants.generalSubmitButtonId).isEnabled()); Click.byId(Constants.generalSubmitButtonId); @@ -439,10 +526,45 @@ public class ChangeManagementTest extends VidBaseTestCase { @Test public void testMainDashboardTableContent() { ChangeManagementPage.openChangeManagementPage(); - + GeneralUIUtils.ultimateWait(); + List<WebElement> webElements = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId); + assertThat("List of pending workflows is empty",webElements,is(not(empty()))); //TODO: After scheduler will be ready than we will examine if the content is valid. } + + @Test + public void testOnlyOneModalIsOpen() throws Exception { + + updateSimulatorWithParametersOfScheduledJod("mso_get_change_managements.json"); + + ChangeManagementPage.openChangeManagementPage(); + + Wait.byText("ReplaceVnfInfra"); + GeneralUIUtils.ultimateWait(); + + + + List<WebElement> elements = Get.byClass(Constants.ChangeManagement.pendingIconClass); + Assert.assertTrue(elements != null && elements.size() > 0); + + ((JavascriptExecutor)getDriver()).executeScript("arguments[0].scrollIntoView();", elements.get(0)); + + + elements.get(0).click(); + + GeneralUIUtils.ultimateWait(); + + elements = Get.byClass(Constants.ChangeManagement.pendingIconClass); + Assert.assertTrue(elements != null && elements.size() > 0); + elements.get(2).click(); + + GeneralUIUtils.ultimateWait(); + List<WebElement> webElements = Get.byClass("modal-dialog"); + Assert.assertTrue(webElements.size() == 1); + + } + @Test(enabled = false) public void testOpenFailedStatusModal() { ChangeManagementPage.openChangeManagementPage(); @@ -545,6 +667,23 @@ public class ChangeManagementTest extends VidBaseTestCase { //TODO check the workflow deleted from table/changed to deleted action } + @Test + public void testRefreshPageButton() { + ChangeManagementPage.openChangeManagementPage(); + GeneralUIUtils.ultimateWait(); + List<WebElement> pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId); + List<WebElement> activeRows = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId); + assertThat("The pending table has no content",pendingRows, is(not(empty()))); + assertThat("The active table has no content",activeRows, is(not(empty()))); + Click.byTestId(Constants.ChangeManagement.refreshBtnTestId); + GeneralUIUtils.ultimateWait(); + pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId); + assertThat("The pending table has no content",pendingRows, is(not(empty()))); + assertThat("The active table has no content",activeRows, is(not(empty()))); + //return the register requests to the default state + registerDefaultTablesData(); + } + private String getExpectedVidToMsoCallbackData(String modelInvariantId, String vnfInstanceId, String vnfName, String vnfTargetVersion, String workflow, String payload) { return "" + "{" + diff --git a/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java b/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java index ff7dc3441..b486d27df 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/CreateInstanceDialogBaseTest.java @@ -4,9 +4,21 @@ import org.junit.Assert; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.WebElement; import vid.automation.test.Constants; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.Exists; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.SelectOption; import vid.automation.test.model.Service; +import vid.automation.test.model.ServiceModel; +import vid.automation.test.sections.ViewEditPage; + +import java.util.ArrayList; +import java.util.List; public class CreateInstanceDialogBaseTest extends VidBaseTestCase { + + private ViewEditPage viewEditPage= new ViewEditPage(); + void assertServiceMetadata(String expectedMetadata, String actualMetadata) { WebElement serviceNameElem = GeneralUIUtils.getWebElementByTestID(actualMetadata); String actualServiceName = serviceNameElem.getText(); @@ -23,7 +35,7 @@ public class CreateInstanceDialogBaseTest extends VidBaseTestCase { assertServiceMetadata(expectedService.description, Constants.SERVICE_DESCRIPTION); } - void assertThatServiceCreationDialogIsVisible() { + public void assertThatServiceCreationDialogIsVisible() { boolean byText = GeneralUIUtils.findAndWaitByText(Constants.BrowseASDC.CREATE_SERVICE_INSTANCE, 15); Assert.assertTrue(byText); } @@ -32,4 +44,134 @@ public class CreateInstanceDialogBaseTest extends VidBaseTestCase { boolean byText = GeneralUIUtils.findAndWaitByText(Constants.BrowseASDC.SERVICE_INSTANCE_CREATED_SUCCESSFULLY_TEXT, 100); Assert.assertTrue(Constants.BrowseASDC.SERVICE_INSTANCE_CREATION_FAILED_MESSAGE, byText); } + + void validateVnfCreationDialog(ServiceModel expectedServiceInstance) { + GeneralUIUtils.ultimateWait(); + validateNodeTemplateCreationDialog(expectedServiceInstance); + assertServiceMetadata(expectedServiceInstance.resourceName, Constants.CreateNewInstance.RESOURCE_NAME); + assertServiceMetadata(expectedServiceInstance.nfType, Constants.CreateNewInstance.NF_TYPE); + assertServiceMetadata(expectedServiceInstance.nfRole, Constants.CreateNewInstance.NF_ROLE); + assertServiceMetadata(expectedServiceInstance.nfFunction, Constants.CreateNewInstance.NF_FUNCTION); + assertServiceMetadata(expectedServiceInstance.nfNamingCode, Constants.CreateNewInstance.NF_NAMING_CODE); + } + + void validateNodeTemplateCreationDialog(ServiceModel expectedServiceInstance){ + GeneralUIUtils.ultimateWait(); + assertServiceMetadata(expectedServiceInstance.serviceName, Constants.SERVICE_NAME); + assertServiceMetadata(expectedServiceInstance.subscriberName, Constants.SUBSCRIBER_NAME); + assertServiceMetadata(expectedServiceInstance.serviceInstanceName, Constants.SERVICE_INSTANCE_NAME); + assertServiceMetadata(expectedServiceInstance.modelName, Constants.CreateNewInstance.MODEL_NAME); + assertServiceMetadata(expectedServiceInstance.modelInvariantUuid, Constants.CreateNewInstance.MODEL_INVARIANT_UUID); + assertServiceMetadata(expectedServiceInstance.modelVersion, Constants.CreateNewInstance.MODEL_VERSION); + assertServiceMetadata(expectedServiceInstance.modelUuid, Constants.CreateNewInstance.MODEL_UUID); + assertServiceMetadata(expectedServiceInstance.modelCustomizationUuid, Constants.CreateNewInstance.MODEL_CUSTOMIZATION_UUID); + } + + private String fillDetailsInDialogWithGeneratedName(String name, String lcpRegion, String tenant, String suppressRollback, + String legacyRegion, ArrayList<String> permittedTenants) + { + String generatedInstanceName = viewEditPage.generateInstanceName(name); + return fillDetailsInDialog(generatedInstanceName, lcpRegion, tenant, suppressRollback, legacyRegion, permittedTenants); + } + + private String fillDetailsInDialog(String name, String lcpRegion, String tenant, String suppressRollback, + String legacyRegion, ArrayList<String> permittedTenants) + { + viewEditPage.setInstanceName(name); + viewEditPage.selectLCPRegion(lcpRegion); + assertDropdownPermittedItemsByValue(permittedTenants, Constants.ViewEdit.TENANT_OPTION_CLASS); + viewEditPage.selectTenant(tenant); + viewEditPage.selectSuppressRollback(suppressRollback); + viewEditPage.setLegacyRegion(legacyRegion); + return name; + } + + + protected String addVFModule(String name, String lcpRegion, String tenant, String suppressRollback, + String legacyRegion, ArrayList<String> permittedTenants,ServiceModel expectedServiceInstance) { + viewEditPage.selectVfModuleToAdd(name); + if(expectedServiceInstance != null) { + validateNodeTemplateCreationDialog(expectedServiceInstance); + } + String instanceName = fillDetailsInDialogWithGeneratedName(Constants.INSTANCE_NAME_SELECT_TESTS_ID, lcpRegion, tenant, suppressRollback, legacyRegion, permittedTenants); + viewEditPage.clickConfirmButton(); + assertSuccessfulVFModuleCreation(); + viewEditPage.clickCloseButton(); + GeneralUIUtils.ultimateWait(); + return instanceName; + } + + protected void addVolumeGroup (String name, String lcpRegion, String tenant, String suppressRollback, + String legacyRegion, ArrayList<String> permittedTenants, ServiceModel expectedServiceInstance) { + viewEditPage.selectVolumeGroupToAdd(name); + if(expectedServiceInstance != null) { + validateNodeTemplateCreationDialog(expectedServiceInstance); + } + fillDetailsInDialogWithGeneratedName(Constants.ViewEdit.VOLUME_GROUP_INSTANCE_NAME_PREFIX, lcpRegion, tenant, suppressRollback, legacyRegion, permittedTenants); + viewEditPage.clickConfirmButton(); + assertSuccessfulVolumeGroupCreation(); + viewEditPage.clickCloseButton(); + GeneralUIUtils.ultimateWait(); + } + + protected void addVNF(String name, String lcpRegion, String tenant, String suppressRollback, + String legacyRegion, String productFamily, String platform, ArrayList<String> permittedTenants, List<String> lobs, ServiceModel serviceModel, String instanceName) { + openAndFillVnfPopup(name, lcpRegion, tenant, suppressRollback, legacyRegion, productFamily, platform,permittedTenants, lobs, serviceModel, instanceName); + viewEditPage.clickConfirmButton(); + successConfirmVnfAndClosePopup(); + + } + + protected void openAndFillVnfPopup(String name, String lcpRegion, String tenant, String suppressRollback, + String legacyRegion, String productFamily, String platform, ArrayList<String> permittedTenants, List<String> lobs, ServiceModel serviceModel, String instanceName) { + viewEditPage.selectNodeInstanceToAdd(name); + GeneralUIUtils.ultimateWait(); + if(serviceModel != null) { + validateVnfCreationDialog(serviceModel); + } + viewEditPage.selectProductFamily(productFamily); + if(platform != null) { + SelectOption.byTestIdAndVisibleText(platform, Constants.OwningEntity.PLATFORM_SELECT_TEST_ID); + } + else { + Click.onFirstSelectOptionById(Constants.OwningEntity.PLATFORM_SELECT_TEST_ID); + } + if(lobs != null) { + SelectOption.selectOptionsFromMultiselectById(Constants.OwningEntity.LOB_SELECT_TEST_ID, lobs); + } + fillDetailsInDialog(instanceName, lcpRegion, tenant, suppressRollback, legacyRegion, permittedTenants); + } + + protected void successConfirmVnfAndClosePopup() { + assertSuccessfulVNFCreation(); + viewEditPage.clickCloseButton(); + GeneralUIUtils.ultimateWait(); + } + + protected void assertConfirmShowMissingDataErrorOnCurrentPopup(String field) { + viewEditPage.clickConfirmButton(); + boolean byclassAndText = Exists.byClassAndText(Constants.ViewEdit.ERROR_CLASS, String.format(Constants.MISSING_DATA, field)); + Assert.assertFalse(field + " " + Constants.REQUIRED, byclassAndText); + } + + protected void cancelPopup() { + viewEditPage.clickCancelButtonByTestID(); + GeneralUIUtils.ultimateWait(); + } + + + + public static void AssertUnselectedOptionInMultiselectById(String multiSelectId, String unselectedOption){ + Click.byId(multiSelectId); + WebElement element = Get.byClassAndText(Constants.MULTI_SELECT_UNSELECTED_CLASS, unselectedOption); + Assert.assertTrue("The option "+ unselectedOption +" is already selected",element != null); + Click.byId(multiSelectId); + } + + public void validateDynamicFields(List<String> dynamicFields) { + for (String field : dynamicFields) { + WebElement fieldElement = GeneralUIUtils.findByText(field); + Assert.assertNotNull("couldn't find dynamic field: " + field, fieldElement); + } + } } diff --git a/vid-automation/src/main/java/vid/automation/test/test/CreateNewInstanceTest.java b/vid-automation/src/main/java/vid/automation/test/test/CreateNewInstanceTest.java index 46238acac..55a1e22ce 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/CreateNewInstanceTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/CreateNewInstanceTest.java @@ -5,17 +5,23 @@ import org.openqa.selenium.WebElement; import org.testng.Assert; import org.testng.annotations.Test; import vid.automation.test.Constants; +import vid.automation.test.infra.Features; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.SelectOption; import vid.automation.test.model.Service; import vid.automation.test.model.User; import vid.automation.test.sections.CreateNewInstancePage; import vid.automation.test.sections.SideMenu; +import vid.automation.test.services.BulkRegistration; import vid.automation.test.services.ServicesService; -import vid.automation.test.services.UsersService; +import vid.automation.test.services.SimulatorApi; import java.io.IOException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; public class CreateNewInstanceTest extends CreateInstanceDialogBaseTest { - private UsersService usersService = new UsersService(); private ServicesService servicesService = new ServicesService(); public CreateNewInstanceTest() throws IOException { @@ -23,6 +29,16 @@ public class CreateNewInstanceTest extends CreateInstanceDialogBaseTest { @Test private void testCreateNewServiceInstance() throws Exception { + + if (!Features.CREATE_INSTANCE_TEST.isActive()) { + + // time bomb, as it fails on pipeline and I don't know how to fix it + return; + } + + SimulatorApi.clearAll(); + BulkRegistration.createNewServiceInstance("USP VOICE"); + User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); @@ -31,7 +47,7 @@ public class CreateNewInstanceTest extends CreateInstanceDialogBaseTest { CreateNewInstancePage createNewInstancePage = new CreateNewInstancePage(); String subscriberName = "USP VOICE"; - assertDropdownPermittedItemsByValue(user.subscribers, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); + assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); createNewInstancePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89"); createNewInstancePage.clickSubmitButton(); assertSuccessfulSelection(Constants.CreateNewInstance.SELECTED_SUBSCRIBER_NAME_TEST_ID, subscriberName); @@ -44,29 +60,49 @@ public class CreateNewInstanceTest extends CreateInstanceDialogBaseTest { Service service = servicesService.getService( "c079d859-4d81-4add-a9c3-94551f96e2b0"); + String instanceName = createNewInstancePage.generateInstanceName(); + BulkRegistration.deployNewServiceInstance(instanceName); + createNewInstancePage.clickDeployServiceButtonByServiceUUID(service.uuid); validateServiceCreationDialog(service, subscriberName, serviceType); - String instanceName = createNewInstancePage.generateInstanceName(); createNewInstancePage.setInstanceName(instanceName); + SelectOption.byTestIdAndVisibleText("MetroPacketCore", Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); + SelectOption.byTestIdAndVisibleText("x1", Constants.OwningEntity.PROJECT_SELECT_TEST_ID); createNewInstancePage.selectSuppressRollback("false"); createNewInstancePage.clickConfirmButton(); assertSuccessfulServiceInstanceCreation(); createNewInstancePage.clickCloseButton(); + } - GeneralUIUtils.ultimateWait(); + @Test + public void testSearchServicesWithSubscriberMSO_1610_ST() throws Exception { + SimulatorApi.clearAll(); + BulkRegistration.createNewServiceInstance("MSO_1610_ST"); - goToExistingInstanceByName(instanceName); + User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); + relogin(user.credentials); + + SideMenu.navigateToCreateNewServicePage(); - addVNF("VID-PCRF-05-15-17 0", "AAIAIC25", "092eb9e8e4b7412e8787dd091bc58e86", - "false", "some legacy region", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", user.tenants); - addVolumeGroup("VidPcrf051517..pcrf_nimbus_pcm..module-4", "AAIAIC25", - "092eb9e8e4b7412e8787dd091bc58e86", "false", "some legacy region", user.tenants); - addVFModule("VidPcrf051517..pcrf_nimbus_psm..module-1", "AAIAIC25", - "092eb9e8e4b7412e8787dd091bc58e86", "false", "some legacy region", user.tenants); + CreateNewInstancePage createNewInstancePage = new CreateNewInstancePage(); + + String subscriberName = "MSO_1610_ST"; + assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); + createNewInstancePage.selectSubscriberById("MSO_1610_ST"); + createNewInstancePage.clickSubmitButton(); + assertSuccessfulSelection(Constants.CreateNewInstance.SELECTED_SUBSCRIBER_NAME_TEST_ID, subscriberName); + + String serviceType = "MSO-dev-service-type"; + assertDropdownPermittedItemsByName(user.serviceTypes, Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS); + createNewInstancePage.selectServiceTypeByName(serviceType); + createNewInstancePage.clickSubmitButton(); + assertSuccessfulSelection(Constants.CreateNewInstance.SELECTED_SERVICE_TYPE_NAME_TEST_ID, serviceType); + + assertSuccessfulGetServicesList(); } private void assertSuccessfulSelection(String elementTestId, String expectedSelection) { @@ -75,6 +111,12 @@ public class CreateNewInstanceTest extends CreateInstanceDialogBaseTest { Assert.assertEquals(selectedElement.getText(), expectedSelection); } + private void assertSuccessfulGetServicesList() { + GeneralUIUtils.ultimateWait(); + List<List<String>> tableRows = Get.tableBodyValuesByTestId("services-list"); + Assert.assertTrue(tableRows.size() > 0); + } + private void validateServiceCreationDialog(Service expectedService, String subscriberName, String serviceType) { assertServiceMetadata(subscriberName, Constants.SUBSCRIBER_NAME); assertServiceMetadata(serviceType, Constants.SERVICE_TYPE); diff --git a/vid-automation/src/main/java/vid/automation/test/test/CreatePortMirroringConfigurationTest.java b/vid-automation/src/main/java/vid/automation/test/test/CreatePortMirroringConfigurationTest.java new file mode 100644 index 000000000..f4ba8c6dc --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/CreatePortMirroringConfigurationTest.java @@ -0,0 +1,379 @@ +package vid.automation.test.test; + +import com.google.common.collect.ImmutableMap; +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.*; +import vid.automation.test.sections.CreateConfigurationPage; +import vid.automation.test.sections.ServiceProxyPage; +import vid.automation.test.sections.ViewEditPage; +import vid.automation.test.services.BulkRegistration; +import vid.automation.test.services.SimulatorApi; + +import java.util.HashMap; +import java.util.Map; + +public class CreatePortMirroringConfigurationTest extends VidBaseTestCase { + + private ViewEditPage viewEditPage = new ViewEditPage(); + private CreateConfigurationPage createConfigurationPage = new CreateConfigurationPage(); + private ServiceProxyPage serviceProxyPage = new ServiceProxyPage(); + private String serviceInstanceId = "c187e9fe-40c3-4862-b73e-84ff056205f6"; + private String serviceInstanceId_vidTest444 = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; + private String policyConfigurationModelName_0 = "Port Mirroring Configuration 0"; + private String policyConfigurationModelName_1 = "Port Mirroring Configuration By Policy 1"; + private String pnfInstanceName = "AS-pnf2-10219--as988q"; + private String vnfServiceType = "VIRTUAL USP"; + private String vnfInstanceName = "zmtn6aepdg01"; + private String active = "Active"; + private String desiredCloudRegionId; + + + public CreatePortMirroringConfigurationTest() throws Exception {} + + + @BeforeMethod + public void setupDesiredCloudRegionId() { + desiredCloudRegionId = Features.FLAG_REGION_ID_FROM_REMOTE.isActive() ? "someCloudRegionIdFromAai" : "mdt1"; + } + + @Test + public void testCreatePolicyConfiguration() { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Active", desiredCloudRegionId); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.createPolicyConfiguration(true, desiredCloudRegionId); + + goToExistingInstanceById(serviceInstanceId);//test_sssdad + selectConfigurationNode(policyConfigurationModelName_1, getConfigurationExpectedMetadata()); + fillAllFormFields(); + createConfigurationPage.clickNextButton(); + serviceProxyPage.assertButtonState(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,false); + //test back button + createConfigurationPage.clickBackButton(); + assertFormFields(); + createConfigurationPage.clickNextButton(); + + //assert service proxy models (circles) names + serviceProxyPage.assertSourceModelName("vmmeService2 Service Proxy"); + serviceProxyPage.assertCollectorModelName("pProbeService Service Proxy"); + + //assert service proxy models metadata + assertMetadataModal(Constants.ConfigurationCreation.SOURCE_INFO_BUTTON_TEST_ID, getSourceServiceProxyExpectedMetadata()); + assertMetadataModal(Constants.ConfigurationCreation.COLLECTOR_INFO_BUTTON_TEST_ID, getCollectorServiceProxyExpectedMetadata()); + + //select source & collector + serviceProxyPage.chooseCollector(pnfInstanceName); + serviceProxyPage.assertSelectedInstanceIcon(Constants.ConfigurationCreation.COLLECTOR_INSTANCE_SELECTED_ICON_TEST_ID); + + serviceProxyPage.chooseSourceServiceType(vnfServiceType); + serviceProxyPage.chooseSource(vnfInstanceName); + serviceProxyPage.assertSelectedInstanceIcon(Constants.ConfigurationCreation.SOURCE_INSTANCE_SELECTED_ICON_TEST_ID); + + serviceProxyPage.assertButtonState(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,true); + serviceProxyPage.clickCreateButton(); + serviceProxyPage.assertButtonStateEvenIfButtonNotVisible(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,false); + serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + serviceProxyPage.clickCloseButton(); + + //assert redirect back to view/edit + GeneralUIUtils.ultimateWait(); + Assert.assertTrue(Exists.byTestId(Constants.ViewEdit.ADD_VNF_BUTTON_TEST_ID)); + } + + + @Test + public void testDeletePolicyConfiguration() { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Created", desiredCloudRegionId); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.deletePolicyConfiguration(true, desiredCloudRegionId); + goToExistingInstanceById(serviceInstanceId);//test_sssdad + serviceProxyPage.clickDeleteConfigurationButton(); + serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + } + + @Test + public void testConfigurationCreatedPortEnabled(){ + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Created", desiredCloudRegionId); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.activateDeactivateConfiguration("deactivate","deactivate", desiredCloudRegionId); + goToExistingInstanceById(serviceInstanceId);//test_sssdad + WebElement isPortEnableButtonExists = Get.byTestId("enableDisableButton"); + Assert.assertNull(isPortEnableButtonExists); + } + + @Test + public void testDisablePort() { + enableDisablePortPresets(active, true); + BulkRegistration.enableDisablePort("disablePort", desiredCloudRegionId); + goToExistingInstanceById(serviceInstanceId);//test_sssdad + serviceProxyPage.clickEnableDisableButton(); + serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + } + + @Test + public void testEnablePort() { + enableDisablePortPresets(active, false); + BulkRegistration.enableDisablePort("enablePort", desiredCloudRegionId); + goToExistingInstanceById(serviceInstanceId);//test_sssdad + serviceProxyPage.clickEnableDisableButton(); + serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + } + + + + + private void enableDisablePortPresets(String orchStatus, boolean isMirrored){ + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring(orchStatus, isMirrored, desiredCloudRegionId); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + } + + + + @Test + public void testActivateConfigurationTest(){ + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Created", desiredCloudRegionId); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.activateDeactivateConfiguration("activate","activate", desiredCloudRegionId); + goToExistingInstanceById(serviceInstanceId);//test_sssdad + serviceProxyPage.assertDeleteConfigurationButtonExists(true); + serviceProxyPage.clickActivateDeactivateButton(); + serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + } + + + @Test + public void testDeleteConfigurationTest(){ + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Created", desiredCloudRegionId); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.deleteConfiguration(desiredCloudRegionId); + goToExistingInstanceById(serviceInstanceId);//test_sssdad + serviceProxyPage.clickDeleteConfigurationButton(); + serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + } + + + @Test + public void testDeactivateConfigurationTest(){ + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Active", desiredCloudRegionId); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.activateDeactivateConfiguration("deactivate","deactivate", desiredCloudRegionId); + goToExistingInstanceById(serviceInstanceId);//test_sssdad + serviceProxyPage.assertDeleteConfigurationButtonExists(false); + serviceProxyPage.clickActivateDeactivateButton(); + serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + + } + + + @Test + public void testCreatePortMirroringConfiguration() { + SimulatorApi.clearAll(); +// BulkRegistration.searchExistingServiceInstancePortMirroring(); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.createPolicyConfiguration(true, desiredCloudRegionId); + BulkRegistration.createConfiguration("model-version-id=7482279e-5901-492f-a963-6331aa6b995e&model-invariant-id=f2ae9911-95c4-40d0-8908-0175c206ab2d"); + + goToExistingInstanceById(serviceInstanceId_vidTest444);//test_sssdad + selectConfigurationNode(policyConfigurationModelName_0, ImmutableMap.<String, String>builder() + .put(Constants.ServiceModelInfo.SERVIICE_NAME_KEY, "Demo Service 1") + .put(Constants.ServiceModelInfo.MODEL_NAME, "Port Mirroring Configuration") + .put(Constants.ServiceModelInfo.SERVICE_INSTANCE_NAME, "vid-test-444") + .put(Constants.ServiceModelInfo.MODEL_INVARIANT_UUID, "5dd839fa-5e09-47d4-aa5c-5ba62161b569") + .put(Constants.ServiceModelInfo.SUBSCRIBER_NAME_KEY, "USP VOICE") + .put(Constants.ServiceModelInfo.MODEL_VERSION, "1.0") + .put(Constants.ServiceModelInfo.MODEL_UUID, "9d6b09b1-7527-49b1-b6cf-398cb67c5523") + .put(Constants.ServiceModelInfo.MODEL_CUSTOMIZATION_UUID, "3db39baa-35bc-4b97-b199-44e758823502") + .put(Constants.ServiceModelInfo.RESOURCE_NAME, policyConfigurationModelName_0) + .build()); + fillAllFormFields(); + createConfigurationPage.clickNextButton(); + serviceProxyPage.assertButtonState(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,false); + //test back button + createConfigurationPage.clickBackButton(); + assertFormFields(); + createConfigurationPage.clickNextButton(); + + //assert service proxy models (circles) names + serviceProxyPage.assertSourceModelName("Service 1 Service Proxy"); + serviceProxyPage.assertCollectorModelName("Service 1 Service Proxy"); + + //assert service proxy models metadata + final ImmutableMap<String, String> expectedMetadata = ImmutableMap.<String, String>builder() + .put(Constants.ServiceProxyModelInfo.MODEL_NAME, "Service 1 Service Proxy") + .put(Constants.ServiceProxyModelInfo.MODEL_VERSION, "2.0") + .put(Constants.ServiceProxyModelInfo.MODEL_DESCRIPTION, "A Proxy for Service Service 1") + .put(Constants.ServiceProxyModelInfo.MODEL_TYPE, "Service Proxy") + .put(Constants.ServiceProxyModelInfo.MODEL_INVARIANT_UUID, "0aaefad3-9409-4ab1-be00-a1571e8a0545") + .put(Constants.ServiceProxyModelInfo.MODEL_UUID, "8685fd6a-c0b1-40f7-be94-ab232e4424c1") +// .put(Constants.ServiceProxyModelInfo.MODEL_CUSTOMIZATION_UUID, "2ac4bd62-dee8-452f-b799-b9c925ee1b9f") + .put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_UUID, "7482279e-5901-492f-a963-6331aa6b995e") + .put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_INVARIANT, "f2ae9911-95c4-40d0-8908-0175c206ab2d") + .put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_NAME, "Service 1") + .build(); + assertMetadataModal(Constants.ConfigurationCreation.SOURCE_INFO_BUTTON_TEST_ID, expectedMetadata); + assertMetadataModal(Constants.ConfigurationCreation.COLLECTOR_INFO_BUTTON_TEST_ID, expectedMetadata); + + //select source & collector + serviceProxyPage.chooseCollectorServiceType(vnfServiceType); + serviceProxyPage.chooseCollector(vnfInstanceName); + serviceProxyPage.assertSelectedInstanceIcon(Constants.ConfigurationCreation.COLLECTOR_INSTANCE_SELECTED_ICON_TEST_ID); + + serviceProxyPage.chooseSourceServiceType(vnfServiceType); + serviceProxyPage.chooseSource(vnfInstanceName); + serviceProxyPage.assertSelectedInstanceIcon(Constants.ConfigurationCreation.SOURCE_INSTANCE_SELECTED_ICON_TEST_ID); + + serviceProxyPage.assertButtonState(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,true); +// serviceProxyPage.clickCreateButton(); +// serviceProxyPage.assertButtonState(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,false); +// serviceProxyPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); +// serviceProxyPage.clickCloseButton(); + + //assert redirect back to view/edit +// GeneralUIUtils.ultimateWait(); +// Assert.assertTrue(Exists.byTestId(Constants.ViewEdit.ADD_VNF_BUTTON_TEST_ID)); + } + + @Test + public void testRainyCreatePolicyConfiguration() { + + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Active", desiredCloudRegionId); + BulkRegistration.getNetworkNodeFormData(); + BulkRegistration.createPolicyConfiguration(false, desiredCloudRegionId); + + goToExistingInstanceById(serviceInstanceId);//test_sssdad + selectConfigurationNode(policyConfigurationModelName_1, getConfigurationExpectedMetadata()); + fillAllFormFields(); + createConfigurationPage.clickNextButton(); + //select source & collector + serviceProxyPage.chooseCollector(pnfInstanceName); + serviceProxyPage.chooseSourceServiceType(vnfServiceType); + serviceProxyPage.chooseSource(vnfInstanceName); + serviceProxyPage.clickCreateButton(); + serviceProxyPage.assertMsoRequestModal("Error"); + serviceProxyPage.clickCloseButton(); + serviceProxyPage.assertButtonState(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,true); + } + @Test + public void testRainyNoResultsInDropdowns(){ + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Active", desiredCloudRegionId); + BulkRegistration.getNetworkNodeFormData(); + //not register createPolicyConfiguration for no results in DDLs + + goToExistingInstanceById(serviceInstanceId);//test_sssdad + selectConfigurationNode(policyConfigurationModelName_1, getConfigurationExpectedMetadata()); + fillAllFormFields(); + createConfigurationPage.clickNextButton(); + serviceProxyPage.assertButtonState(Constants.ConfigurationCreation.CREATE_BUTTON_TEST_ID,false); + //source & collector should be empty + serviceProxyPage.chooseSourceServiceType(vnfServiceType); + serviceProxyPage.noOptionDropdownByTestId(Constants.ConfigurationCreation.SOURCE_DROPDOWN_TEST_ID); + serviceProxyPage.noOptionDropdownByTestId(Constants.ConfigurationCreation.COLLECTOR_DROPDOWN_TEST_ID); + //error message no instance found + serviceProxyPage.assertNoResultRequirementsDropDown(Constants.ConfigurationCreation.COLLECTOR_NO_RESULT_MSG_TEST_ID,"pnf"); + serviceProxyPage.assertNoResultRequirementsDropDown(Constants.ConfigurationCreation.SOURCE_NO_RESULT_MSG_TEST_ID,"vnf"); + } + + private void selectConfigurationNode(String name, Map<String, String> configurationExpectedMetadata){ + viewEditPage.selectNodeInstanceToAdd(name); + assertModelInfo(configurationExpectedMetadata,true); + createConfigurationPage.assertButtonState(Constants.ConfigurationCreation.NEXT_BUTTON_TEST_ID, false); + } + + + public void assertMetadataModal(String btnTestId, Map<String, String> expectedMetadata) { + serviceProxyPage.clickInfoButton(btnTestId); + assertModelInfo(expectedMetadata, true); + serviceProxyPage.clickCloseButton(); + Wait.modalToDisappear(); + } + + private void fillAllFormFields() { + createConfigurationPage.setInstanceName("dummy_instance"); + createConfigurationPage.assertButtonState(Constants.ConfigurationCreation.TENANT_DROPDOWN_TEST_ID,false); + //WebElement tenantDDL= Get.byTestId(Constants.ConfigurationCreation.TENANT_DROPDOWN_TEST_ID); + + createConfigurationPage.chooseRegion("AAIAIC25"); + GeneralUIUtils.ultimateWait(); + // Wait.waitByTestId(Constants.ConfigurationCreation.TENANT_DROPDOWN_TEST_ID, 30); + createConfigurationPage.chooseTenant("USP-SIP-IC-24335-T-01"); + createConfigurationPage.assertButtonState(Constants.ConfigurationCreation.NEXT_BUTTON_TEST_ID,true); + } + private void assertFormFields() { + Assert.assertEquals("dummy_instance",createConfigurationPage.getInstanceName()); + Assert.assertEquals("AAIAIC25", createConfigurationPage.getRegion()); + Assert.assertEquals("USP-SIP-IC-24335-T-01",createConfigurationPage.getTenant()); + + createConfigurationPage.assertButtonState(Constants.ConfigurationCreation.NEXT_BUTTON_TEST_ID,true); + } + + private Map<String, String> getConfigurationExpectedMetadata() { + return new HashMap<String, String>(){ + { + put(Constants.ServiceModelInfo.SERVIICE_NAME_KEY, "ServiceContainerMultiplepProbes"); + put(Constants.ServiceModelInfo.MODEL_NAME, "Port Mirroring Configuration By Policy"); + put(Constants.ServiceModelInfo.SERVICE_INSTANCE_NAME, "test_sssdad"); + put(Constants.ServiceModelInfo.MODEL_INVARIANT_UUID, "c30a024e-a6c6-4670-b73c-3df64eb57ff6"); + put(Constants.ServiceModelInfo.SUBSCRIBER_NAME_KEY, "USP VOICE"); + put(Constants.ServiceModelInfo.MODEL_VERSION, "1.0"); + put(Constants.ServiceModelInfo.MODEL_UUID, "f58d039d-4cfc-40ec-bd75-1f05f0458a6c"); + put(Constants.ServiceModelInfo.MODEL_CUSTOMIZATION_UUID, "4b7ebace-bad6-4526-9be6-bf248e20fc5f"); + put(Constants.ServiceModelInfo.RESOURCE_NAME, policyConfigurationModelName_1); + } + }; + } + + private Map<String, String> getSourceServiceProxyExpectedMetadata() { + return new HashMap<String, String>(){ + { + put(Constants.ServiceProxyModelInfo.MODEL_NAME, "vmmeService2 Service Proxy"); + put(Constants.ServiceProxyModelInfo.MODEL_VERSION, "1.0"); + put(Constants.ServiceProxyModelInfo.MODEL_DESCRIPTION, "A Proxy for Service vmmeService2"); + put(Constants.ServiceProxyModelInfo.MODEL_TYPE, "Service Proxy"); + put(Constants.ServiceProxyModelInfo.MODEL_INVARIANT_UUID, "2933b574-d28d-45ea-bf22-4df2907e4a10"); + put(Constants.ServiceProxyModelInfo.MODEL_UUID, "a32fee17-5b59-4c34-ba6f-6dd2f1c61fee"); + put(Constants.ServiceProxyModelInfo.MODEL_CUSTOMIZATION_UUID, "060be63d-5f9c-4fd0-8ef7-830d5e8eca17"); + put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_UUID, "2a2ea15f-07c6-4b89-bfca-e8aba39a34d6"); + put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_INVARIANT, "a7eac2b3-8444-40ee-92e3-b3359b32445c"); + put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_NAME, "vmmeService2"); + } + }; + } + + private Map<String, String> getCollectorServiceProxyExpectedMetadata() { + return new HashMap<String, String>(){ + { + put(Constants.ServiceProxyModelInfo.MODEL_NAME, "pProbeService Service Proxy"); + put(Constants.ServiceProxyModelInfo.MODEL_VERSION, "1.0"); + put(Constants.ServiceProxyModelInfo.MODEL_DESCRIPTION, "A Proxy for Service pProbeService"); + put(Constants.ServiceProxyModelInfo.MODEL_TYPE, "Service Proxy"); + put(Constants.ServiceProxyModelInfo.MODEL_INVARIANT_UUID, "2933b574-d28d-45ea-bf22-4df2907e4a10"); + put(Constants.ServiceProxyModelInfo.MODEL_UUID, "a32fee17-5b59-4c34-ba6f-6dd2f1c61fee"); + put(Constants.ServiceProxyModelInfo.MODEL_CUSTOMIZATION_UUID, "d64623ae-5935-4afd-803e-c86e94d8e740"); + put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_UUID, "8a84e59b-45fe-4851-8ff1-34225a0b32c3"); + put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_INVARIANT, "83b458fd-5dd3-419b-a9e3-7335814a0911"); + put(Constants.ServiceProxyModelInfo.SOURCE_MODEL_NAME, "pProbeService"); + } + }; + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/DeleteResumeTest.java b/vid-automation/src/main/java/vid/automation/test/test/DeleteResumeTest.java new file mode 100644 index 000000000..2e3580f0c --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/DeleteResumeTest.java @@ -0,0 +1,30 @@ +package vid.automation.test.test; + +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.model.User; +import vid.automation.test.services.BulkRegistration; +import vid.automation.test.services.SimulatorApi; +import vid.automation.test.services.UsersService; + +import java.io.IOException; + +public class DeleteResumeTest extends CreateInstanceDialogBaseTest { + private UsersService usersService = new UsersService(); + + public DeleteResumeTest() throws IOException { + } + + @Test() + private void testResumePendingActivationVfModule() throws Exception { + User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); + String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; + String vnfInstanceId = "c015cc0f-0f37-4488-aabf-53795fd93cd3"; + SimulatorApi.clearAll(); + BulkRegistration.resumeVfModule(serviceInstanceId,vnfInstanceId); + navigateToViewEditPageOfuspVoiceVidTest444("240376de-870e-48df-915a-31f140eedd2c"); + resumeVFModule("aa","AAIAIC25","092eb9e8e4b7412e8787dd091bc58e86","mdt1",user.tenants); + } + +}
\ No newline at end of file diff --git a/vid-automation/src/main/java/vid/automation/test/test/DrawingBoardTest.java b/vid-automation/src/main/java/vid/automation/test/test/DrawingBoardTest.java new file mode 100644 index 000000000..d022f5c9b --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/DrawingBoardTest.java @@ -0,0 +1,406 @@ +package vid.automation.test.test; + + +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.*; +import vid.automation.test.model.User; +import vid.automation.test.sections.BrowseASDCPage; +import vid.automation.test.sections.DrawingBoardPage; +import vid.automation.test.sections.VidBasePage; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.endsWith; +import static org.testng.Assert.assertNotNull; +import static org.testng.AssertJUnit.assertEquals; +import static vid.automation.test.Constants.DrawingBoard.*; +import static vid.automation.test.infra.Features.FLAG_ASYNC_INSTANTIATION; + +@FeatureTogglingTest(FLAG_ASYNC_INSTANTIATION) +public class DrawingBoardTest extends VidBaseTestCase { + + private DrawingBoardPage drawingBoardPage = new DrawingBoardPage(); + private String loadedServiceModelId = ""; + private final String defaultServiceModelForMostTests = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + + + @Override + protected UserCredentials getUserCredentials() { + String userName = Constants.Users.USP_VOICE_VIRTUAL_USP; + User user = usersService.getUser(userName); + return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", ""); + } + + public DrawingBoardTest() { + } + + @AfterClass + private void goOutFromIframe() { + new VidBasePage().goOutFromIframe(); + } + + + @BeforeMethod + private void setNewServiceToDefault() throws Exception { + final String currentUrl = getDriver().getCurrentUrl(); + System.out.println("currentUrl in @BeforeMethod setNewServiceToDefault: " + currentUrl); + + if (currentUrl.endsWith("/servicePlanning?serviceModelId=" + defaultServiceModelForMostTests)) { + getDriver().navigate().refresh(); + } else { + setNewService("service-Complexservice-csar.zip", defaultServiceModelForMostTests, null); + } + GeneralUIUtils.ultimateWait(); + drawingBoardPage.goToIframe(); + } + + private void setNewService(String zipFileName, String serviceModelId, String instanceName) { + goOutFromIframe(); + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); + + loadedServiceModelId = serviceModelId; + loadServicePopup(zipFileName, serviceModelId); + + if (instanceName != null) { + Input.text(instanceName,Constants.BrowseASDC.NewServicePopup.INSTANCE_NAME); + } + + Wait.waitByClassAndText("subscriber","",3); + GeneralUIUtils.ultimateWait(); + VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89"); + GeneralUIUtils.ultimateWait(); + browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89"); + String serviceType = "VIRTUAL USP"; + Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30); + browseASDCPage.selectServiceTypeByName(serviceType); + GeneralUIUtils.ultimateWait(); + GeneralUIUtils.ultimateWait(); + browseASDCPage.selectLcpRegion("mtn6"); + browseASDCPage.selectTenant("3f21eeea6c2c486bba31dab816c05a32"); + Click.onFirstSelectOptionById(Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); + + browseASDCPage.selectAicZone("NFT1"); + Click.onFirstSelectOptionById(Constants.OwningEntity.PROJECT_SELECT_TEST_ID); + + // select mandatory field + Click.onFirstSelectOptionById(Constants.ServiceModelInfo.ROLLBACK_ON_FAILURE_ID); + + Click.byTestId("service-form-set"); + browseASDCPage.goOutFromIframe(); + } + + static final String leftTreeNodeName = "VF_vMee 0"; + static final String leftTreeNodeNameWithoutChildren = "Port Mirroring Configuration By Policy 0"; + static final String[] leftTreeNodeChildren = {"vf_vmee0..VfVmee..vmme_vlc..module-1", "vf_vmee0..VfVmee..vmme_gpb..module-2", "vf_vmee0..VfVmee..base_vmme..module-0"}; + static final String[] leftTreeInitialElements = new String[]{"V", "VF_vMee 0", "C","Port Mirroring Configuration By Policy 0","N", "ExtVL 0"}; + + static final String rightTreeNodeName = "d6557200-ecf2-4641-8094-5393ae3aae60-VF_vMee 0"; + static final String rightTreeNodeNameWithoutChildren = "ddc3f20c-08b5-40fd-af72-c6d14636b986-ExtVL 0"; + static final String[] rightTreeNodeChildren = {"522159d5-d6e0-4c2a-aa44-5a542a12a830-vf_vmee0..VfVmee..vmme_vlc..module-1", "41708296-e443-4c71-953f-d9a010f059e1-vf_vmee0..VfVmee..vmme_gpb..module-2", "a27f5cfc-7f12-4f99-af08-0af9c3885c87-vf_vmee0..VfVmee..base_vmme..module-0"}; + + private static final String EMPTY_BOARD_TITLE = "Please add objects (VNFs, network, modules etc.) from the left tree to design the service instance"; + private static final String EMPTY_BOARD_SUBTITLE = "Once done, click Deploy to start instantiation"; + + + static final String[] rightTreeInitialElements = new String[]{ + "Vnf:", + "vnf instance 1", + "Vf Module:", + "vf module instance 1", + "Vf Module:", + "vf module instance 2", + "Vf Module", + "Configuration:", + "configuration instance 1", + "Network:", + "network instance 1"}; + + @Test + private void expandCollapseLeftTreeByClickOnRow() { + Wait.byText(leftTreeNodeName); + drawingBoardPage.expandTreeByClickingNode(leftTreeNodeName, leftTreeNodeChildren); + //should checking with Golan if click also collapse + //drawingBoardPage.collapseTreeByClickingNode(leftTreeNodeName, leftTreeNodeChildren))); + drawingBoardPage.verifyNonCollapsableTreeByClickingNode(leftTreeNodeName, leftTreeNodeChildren); + } + + @Test + private void expandCollapseLeftTreeByClickOnIcon() { + drawingBoardPage.expandFirstItemInTreeByExpanderIcon(AVAILABLE_MODELS_TREE, leftTreeNodeChildren); + drawingBoardPage.collapseFirstItemInTreeByCollapseIcon(AVAILABLE_MODELS_TREE, leftTreeNodeChildren); + } + + @Test + private void checkInitialStateLeftTree() { + drawingBoardPage.assertInitalTextOfTree(AVAILABLE_MODELS_TREE, leftTreeInitialElements); + } + +// @Test +// private void checkAddButton() { +// drawingBoardPage.checkAddButton(leftTreeRootElements); +// } + + @Test + private void checkLeafNodeLeftTreeHasNoExpander() { + drawingBoardPage.checkLeafNodeHasNoExpander(leftTreeNodeNameWithoutChildren); + } + + + @Test(groups = { "underDevelopment" }) + private void collapseExpandRightTreeByClickOnRow() { + drawingBoardPage.collapseFirstItemInTreeByCollapseIcon(DRAWING_BOARD_TREE, rightTreeNodeChildren); + //should checking with Golan if click also collapse + //drawingBoardPage.collapseTreeByClickingNode(rightTreeNodeName, rightTreeNodeChildren))); + drawingBoardPage.expandTreeByClickingNode(rightTreeNodeName, rightTreeNodeChildren); + } + + @Test(groups = { "underDevelopment" }) + private void collapseExpandRightTreeByClickOnIcon() { + drawingBoardPage.collapseFirstItemInTreeByCollapseIcon(DRAWING_BOARD_TREE, rightTreeNodeChildren); + drawingBoardPage.expandFirstItemInTreeByExpanderIcon(DRAWING_BOARD_TREE, rightTreeNodeChildren); + } + + @Test(groups = { "underDevelopment" }) + private void checkInitialStateRightTree() { + drawingBoardPage.assertInitalTextOfTree(DRAWING_BOARD_TREE, rightTreeInitialElements); + } + + @Test(groups = { "underDevelopment" }) + private void checkLeafNodeRightTreeHasNoExpander() { + drawingBoardPage.checkLeafNodeHasNoExpander(rightTreeNodeNameWithoutChildren); + } + + @Test + public void testEmptyDrawingBoard() { + assertNotNull(Get.byClassAndText("text-title", EMPTY_BOARD_TITLE)); + assertNotNull(Get.byClassAndText("text-subtitle", EMPTY_BOARD_SUBTITLE)); + WebElement icon = Get.byTestId("no-content-icon"); + assertEquals("img", icon.getTagName()); + assertThat(icon.getAttribute("src"), endsWith("UPLOAD.svg")); + assertThat(icon.getAttribute("class"), containsString("no-content-icon")); + assertThat(icon.getAttribute("class"), containsString("upload-icon-service-planing")); + } + + @Test(groups = { "underDevelopment" }) + private void clickRightTreeNode_verifyLeftTreeNodeIsBlueAndExpanded() { + + //// setup + drawingBoardPage.checkNodesVisible(leftTreeNodeChildren, false); + + clickAndVerifyCrossTreeSync( + DrawingBoardTest.rightTreeNodeName, + DrawingBoardTest.leftTreeNodeName, + DrawingBoardTest.leftTreeNodeChildren + ); + } + + @Test(groups = { "underDevelopment" }) + private void clickLeftTreeNode_verifyRightTreeNodeIsBlueAndExpanded() { + + //// setup + drawingBoardPage.collapseFirstItemInTreeByCollapseIcon(DRAWING_BOARD_TREE, rightTreeNodeChildren); + + clickAndVerifyCrossTreeSync( + leftTreeNodeName, + rightTreeNodeName, + rightTreeNodeChildren + ); + } + + @Test(groups = { "underDevelopment" }) + private void clickRightTreeChild_verifyLeftTreeChildIsBlueAndParentExpanded() { + + //// setup + drawingBoardPage.checkNodesVisible(leftTreeNodeChildren, false); + + clickAndVerifyCrossTreeSync( + rightTreeNodeChildren[0], + leftTreeNodeChildren[0], + leftTreeNodeChildren + ); + } + + @Test(groups = { "underDevelopment" }) + private void clickLeftTreeChild_verifyRightTreeChildIsBlueAndParentExpanded() { + + //// setup + drawingBoardPage.expandTreeByClickingNode(leftTreeNodeName, leftTreeNodeChildren); + drawingBoardPage.collapseFirstItemInTreeByCollapseIcon(DRAWING_BOARD_TREE, rightTreeNodeChildren); + + clickAndVerifyCrossTreeSync( + leftTreeNodeChildren[0], + rightTreeNodeChildren[0], + rightTreeNodeChildren + ); + } + + private void clickAndVerifyCrossTreeSync(String clickOn, String verifyHighlight, String[] verifyVisible) { + //// test + drawingBoardPage.clickNode(clickOn); + + //// verify + drawingBoardPage.checkNodesHighlighted(new String[]{verifyHighlight}); + drawingBoardPage.checkNodesVisible(verifyVisible, true); + } + + + /* + + Search box + - exists + - works (skimmy) + */ + @Test + private void insertTestInSerachBox_verifyMatchesMarkedAndVisible() { + Wait.byText("vf_vmee0..VfVmee..vmme_vlc..module-1"); + drawingBoardPage.checkSearch(); + + final String searchTerm = "Vmee..vmme"; + GeneralUIUtils.setWebElementByTestId(SEARCH_LEFT_TREE, searchTerm); + drawingBoardPage.checkNodesVisibleAndMatchIsHighlighted(searchTerm,"vf_vmee0..VfVmee..vmme_vlc..module-1", "vf_vmee0..VfVmee..vmme_gpb..module-2"); + } + + /* + + Context menu + - click opens popup + - click closes popup + */ + @Test(groups = { "underDevelopment" }) + private void clickOnParentEllipsis_menuIsVisible() { + drawingBoardPage.checkContextMenu(rightTreeNodeNameWithoutChildren); + } + + @Test(groups = { "underDevelopment" }) + private void clickOnNodeEllipsis_menuIsVisible() { + drawingBoardPage.checkContextMenu(rightTreeNodeChildren[1]); + } + + /* + + Tooltip + - hover: text appears + - again for "child" + - hover on no-icon: text does not appear + */ + @Test(groups = { "underDevelopment" }) + private void hoverAboveParentAlert_verifyDescriptionAppears() { + drawingBoardPage.showTooltipByHoverAboveAlertIcon(rightTreeNodeName); + } + + @Test(groups = { "underDevelopment" }) + private void hoverAboveNodeAlert_verifyDescriptionAppears() { + drawingBoardPage.showTooltipByHoverAboveAlertIcon(rightTreeNodeChildren[1]); + } + + @Test + private void clickOnHeaderEllipsis_menuIsVisible() { + final String contextMenu = CONTEXT_MENU_HEADER_EDIT_ITEM; + drawingBoardPage.checkThatContextMenuNotExist(contextMenu); + Click.byTestId(CONTEXT_MENU_BUTTON_HEADER); + drawingBoardPage.checkThatContextMenuExist(contextMenu); + } + + private void setAndAssertServiceWithName(String instanceName){ + goOutFromIframe(); + setNewService("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596.zip", "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", instanceName); + GeneralUIUtils.ultimateWait(); + drawingBoardPage.goToIframe(); + drawingBoardPage.checkServiceInstanceName(instanceName); + } + + + + @Test + private void editPopup_quantityNumberAndNameAreUpdated() { + String initialInstanceName = "MyInstanceName"; + String updatedInstanceName = "UpdatedInstanceName"; + setAndAssertServiceWithName(initialInstanceName); + final int updatedQuantity = 10; + Click.byTestId(CONTEXT_MENU_BUTTON_HEADER); + Click.byTestId(CONTEXT_MENU_HEADER_EDIT_ITEM); + Assert.assertTrue(Exists.byId("service-popup"), "context menu should not appear"); + SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(updatedQuantity)); + Input.replaceText(updatedInstanceName,Constants.BrowseASDC.NewServicePopup.INSTANCE_NAME ); + Click.byTestId(Constants.BrowseASDC.NewServicePopup.SET_BUTTON); + GeneralUIUtils.ultimateWait(); + drawingBoardPage.checkQuantityNumberIsCorrect(updatedQuantity); + drawingBoardPage.checkServiceInstanceName(updatedInstanceName); + } + + @Test + private void cancelEditPopup_quantityNumberAndNameNotUpdated() { + String initialInstanceName = "MyInstanceName"; + String updatedInstanceName = "UpdatedInstanceName"; + setAndAssertServiceWithName(initialInstanceName); + final int updatedQuantity = 10; + String initialQuantity = Get.byTestId(SERVICE_QUANTITY).getText(); + Click.byTestId(CONTEXT_MENU_BUTTON_HEADER); + Click.byTestId(CONTEXT_MENU_HEADER_EDIT_ITEM); + Assert.assertTrue(Exists.byId("service-popup"), "context menu should not appear"); + SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(updatedQuantity)); + Input.replaceText(updatedInstanceName,Constants.BrowseASDC.NewServicePopup.INSTANCE_NAME ); + Click.byTestId(Constants.BrowseASDC.NewServicePopup.CANCEL_BUTTON); + GeneralUIUtils.ultimateWait(); + drawingBoardPage.checkQuantityNumberIsCorrect(Integer.valueOf(initialQuantity)); + drawingBoardPage.checkServiceInstanceName(initialInstanceName); + } + + + @Test + private void checkHeader_verifyElementsExist(){ + drawingBoardPage.checkExistsAndEnabled(BACK_BUTTON); + drawingBoardPage.checkServiceInstanceName(DEFAULT_SERVICE_NAME); + drawingBoardPage.checkServiceStatus(); + drawingBoardPage.checkQuantityNumberIsCorrect(1); + drawingBoardPage.checkExistsAndEnabled(CONTEXT_MENU_BUTTON_HEADER); + //drawingBoardPage.checkDeployButtonDisabled(); + } + + private void assertResultsInBrowseAsdcPage(){ + goOutFromIframe(); + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); + browseASDCPage.assertSearchFilterValue(loadedServiceModelId); + } + + @Test + private void BackButtonWithCancel_verifyStayInTheSamePage(){ + String currentUrl = getCurrentUrl(); + Click.byTestId(BACK_BUTTON); + Click.byText(Constants.Modals.CANCEL); + String newUrl = getCurrentUrl(); + org.testng.Assert.assertEquals(currentUrl, newUrl); + } + + private String getCurrentUrl(){ + WebDriver driver = GeneralUIUtils.getDriver(); + return driver.getCurrentUrl(); + } + + @Test + private void BackButton_verifyReturnToSearchResults(){ + Click.byTestId(BACK_BUTTON); + Click.byText(Constants.Modals.STOP_INSTANTIATION); + assertResultsInBrowseAsdcPage(); + } + + @Test + private void deleteButon_verifyReturnToSearchResults() { + Click.byTestId(CONTEXT_MENU_BUTTON_HEADER); + Click.byTestId(CONTEXT_MENU_HEADER_DELETE_ITEM); + Click.byText(Constants.Modals.STOP_INSTANTIATION); + assertResultsInBrowseAsdcPage(); + } + + + + + + +} + diff --git a/vid-automation/src/main/java/vid/automation/test/test/EnvironmentsTest.java b/vid-automation/src/main/java/vid/automation/test/test/EnvironmentsTest.java index 1c8101953..01af276e5 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/EnvironmentsTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/EnvironmentsTest.java @@ -5,14 +5,14 @@ import org.junit.Assert; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.WebElement; import org.springframework.http.HttpStatus; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import vid.automation.test.Constants; import vid.automation.test.infra.*; import vid.automation.test.model.Environment; import vid.automation.test.sections.SideMenu; -import vid.automation.test.services.SimulatorApi.RegistrationStrategy; - import vid.automation.test.sections.TestEnvironmentPage; import vid.automation.test.sections.VidBasePage; import vid.automation.test.services.SimulatorApi; @@ -21,9 +21,7 @@ import vid.automation.test.utils.ReadFile; import java.util.List; import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import static vid.automation.test.Constants.TestEnvironments.REFRESH_BUTTON; @@ -67,12 +65,26 @@ public class EnvironmentsTest extends VidBaseTestCase { public static final String ENV_ID_FOR_DEACTIVATION = "f07ca256-96dd-40ad-b4d2-7a77e2a974ec"; private VidBasePage vidBasePage = new VidBasePage(); - public static enum FailureType { + public enum FailureType { ACTIVATION_FAILURE, DEACTIVATION_FAILURE, GET_STATUS_FAILURE } + @BeforeClass + //Sometimes we clear registration while we are in view/edit page + //And there is alert so we can not navigate any more. + //So we first navigate to welcome page, and only the, clear registration + public void navigateToWelcome() { + SideMenu.navigateToWelcomePage(); + } + + @BeforeMethod + private void clearAllSimulatorExpectations() { + SimulatorApi.clearAll(); + SimulatorApi.registerExpectation("ecompportal_getSessionSlotCheckInterval.json", SimulatorApi.RegistrationStrategy.APPEND); + } + @Test public void testLeftPanelTestEnvironmentButton() { List<WebElement> leftPanelButtons = Get.byClass(Constants.SideMenu.buttonClass); @@ -88,8 +100,8 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testTable() throws Exception { - SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON); + public void testTable() { + SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); Map <String, List<String>> file = ReadFile.getJsonFile(ENVIRONMENTS_CONF, Map.class); String tableId = Constants.TestEnvironments.ENVIRONMENTS_TABLE; @@ -104,8 +116,8 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testSortTable() throws Exception { - SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON, RegistrationStrategy.CLEAR_THEN_SET); + public void testSortTable() { + SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); Map <String, List<String>> file = ReadFile.getJsonFile(ENVIRONMENTS_CONF, Map.class); String tableId = Constants.TestEnvironments.ENVIRONMENTS_TABLE; @@ -118,8 +130,8 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testFilterTable() throws Exception { - SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON, RegistrationStrategy.CLEAR_THEN_SET); + public void testFilterTable() { + SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); Map <String, List<String>> file = ReadFile.getJsonFile(ENVIRONMENTS_CONF, Map.class); String tableId = Constants.TestEnvironments.ENVIRONMENTS_TABLE; @@ -133,8 +145,8 @@ public class EnvironmentsTest extends VidBaseTestCase { @Test - public void testEmptyTableMessage() throws Exception { - SimulatorApi.registerExpectation(GET_EMPTY_OPERATIONAL_ENVIRONMENT_JSON); + public void testEmptyTableMessage() { + SimulatorApi.registerExpectation(GET_EMPTY_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); SideMenu.navigateToTestEnvironmentsPage(); boolean emptyTableMessage = Exists.byTestId(Constants.TestEnvironments.NO_DATA_MESSAGE); @@ -145,8 +157,8 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testErrorMessage() throws Exception { - SimulatorApi.registerExpectation(GET_ERROR_OPERATIONAL_ENVIRONMENT_JSON); + public void testErrorMessage() { + SimulatorApi.registerExpectation(GET_ERROR_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); SideMenu.navigateToTestEnvironmentsPage(); boolean errorMessage = Exists.byTestId(Constants.TestEnvironments.ERROR_MESSAGE); @@ -157,12 +169,12 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testNewEnvironmentPopup() throws Exception { - SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON, RegistrationStrategy.CLEAR_THEN_SET); - SimulatorApi.registerExpectation(POST_OPERATIONAL_ENVIRONMENT_JSON); + public void testNewEnvironmentPopup() { + SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); + SimulatorApi.registerExpectation(POST_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); SimulatorApi.registerExpectation("environment/status/get_cloud_resources_request_status.json", ImmutableMap.of("status_message", Constants.TestEnvironments.environmentCreatedSuccesfullyMessage, - "REQUEST-TYPE","Create")); + "REQUEST-TYPE","Create"), SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); Environment environment = ReadFile.getJsonFile(NEW_ENVIRONMENT_CONF, Environment.class); SideMenu.navigateToTestEnvironmentsPage(); @@ -203,7 +215,7 @@ public class EnvironmentsTest extends VidBaseTestCase { Map <String, List<String>> file = ReadFile.getJsonFile(ENVIRONMENTS_CONF, Map.class); String tableId = Constants.TestEnvironments.ENVIRONMENTS_TABLE; SimulatorApi.registerExpectation(GET_FULL_OPERATIONAL_ENVIRONMENT_JSON, - ImmutableMap.of("new_name", environment.operationalEnvironmentName, "new_tenant", environment.tenantContext, "new_ecomp_id", environment.EcompEnvironmentId, "new_ecomp_name", environment.EcompEnvironmentName, "new_workload_context", environment.workloadContext), RegistrationStrategy.CLEAR_THEN_SET); + ImmutableMap.of("new_name", environment.operationalEnvironmentName, "new_tenant", environment.tenantContext, "new_ecomp_id", environment.EcompEnvironmentId, "new_ecomp_name", environment.EcompEnvironmentName, "new_workload_context", environment.workloadContext), SimulatorApi.RegistrationStrategy.APPEND); Click.byTestId(REFRESH_BUTTON); Wait.angularHttpRequestsLoaded(); List<List<String>> body = Get.tableBodyValuesByTestId(tableId); @@ -212,11 +224,12 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testAaiErrorNewEnvironmentPopup() throws Exception { - SimulatorApi.registerExpectation(GET_ERROR_OPERATIONAL_ENVIRONMENT_JSON); + public void testAaiErrorNewEnvironmentPopup() { + SimulatorApi.registerExpectation(GET_ERROR_OPERATIONAL_ENVIRONMENT_JSON, SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); SideMenu.navigateToTestEnvironmentsPage(); Click.byTestId(Constants.TestEnvironments.HEADLINE_NEW_BUTTON); + Wait.modalToBeDisplayed(); Assert.assertTrue(Exists.byTestId(Constants.TestEnvironments.NEW_ENVIRONMENT_FORM)); GeneralUIUtils.ultimateWait(); boolean errorMessage = Exists.byTestId(Constants.TestEnvironments.POPUP_ERROR_MESSAGE); @@ -252,19 +265,19 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testApplicationEnvironmentActivation() throws Exception { + public void testApplicationEnvironmentActivation() { String envId = ENV_ID_FOR_ACTIVATION; - SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json"); + SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json", SimulatorApi.RegistrationStrategy.APPEND); SimulatorApi.registerExpectation("environment/activate/post_activate_operational_environment.json", - ImmutableMap.of("ENV-UUID", envId)); + ImmutableMap.of("ENV-UUID", envId), SimulatorApi.RegistrationStrategy.APPEND); SimulatorApi.registerExpectation("environment/status/get_cloud_resources_request_status.json", ImmutableMap.of("status_message", Constants.TestEnvironments.environmentActivatedSuccesfullyMessage, - "REQUEST-TYPE","Activate")); + "REQUEST-TYPE","Activate"), SimulatorApi.RegistrationStrategy.APPEND); clickOnActivationButtonAndUploadFile(envId, "manifest.json"); Click.byId(Constants.generalSubmitButtonId); SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json", - ImmutableMap.of("Deactivate", "Activate")); + ImmutableMap.of("Deactivate", "Activate"), SimulatorApi.RegistrationStrategy.APPEND); boolean waitForTextResult = Wait.waitByClassAndText("status", Constants.TestEnvironments.environmentActivatedSuccesfullyMessage, 60); assertTrue(Constants.TestEnvironments.environmentActivatedSuccesfullyMessage + " message didn't appear on time", waitForTextResult); @@ -287,17 +300,17 @@ public class EnvironmentsTest extends VidBaseTestCase { } @Test - public void testApplicationEnvironmentDeactivation() throws Exception { + public void testApplicationEnvironmentDeactivation() { String envId = ENV_ID_FOR_DEACTIVATION; - SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json"); + SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json", SimulatorApi.RegistrationStrategy.APPEND); SimulatorApi.registerExpectation("environment/deactivate/post_deactivate_operational_environment.json", - ImmutableMap.of("ENV-UUID", envId)); + ImmutableMap.of("ENV-UUID", envId), SimulatorApi.RegistrationStrategy.APPEND); SimulatorApi.registerExpectation("environment/status/get_cloud_resources_request_status.json", ImmutableMap.of("status_message", Constants.TestEnvironments.environmentDeactivatedSuccesfullyMessage, - "REQUEST-TYPE","Deactivate")); + "REQUEST-TYPE","Deactivate"), SimulatorApi.RegistrationStrategy.APPEND); deactivateEnv(envId); - SimulatorApi.registerExpectation("environment/deactivate/get_operational_environments_aai1.json"); + SimulatorApi.registerExpectation("environment/deactivate/get_operational_environments_aai1.json", SimulatorApi.RegistrationStrategy.APPEND); GeneralUIUtils.findAndWaitByText(Constants.TestEnvironments.environmentDeactivatedSuccesfullyMessage, 60); vidBasePage.clickCloseButton(); @@ -330,7 +343,7 @@ public class EnvironmentsTest extends VidBaseTestCase { {"bad_manifest_structure.json","Manifest structure is wrong"}, {"manifest_with_wrong_recovery_action.json", "Wrong value for RecoveryAction in manifest. Allowed options are: abort,retry,skip. Wrong value is: leave"} }; - }; + } @Test public void testApplicationEnvironmentActivationBadManifestStructure() throws Exception { @@ -340,22 +353,23 @@ public class EnvironmentsTest extends VidBaseTestCase { } //@Test(dataProvider = "badManifestProvider") TODO : use data provider here (for some reason not work with ui-ci framework) - public void testApplicationEnvironmentActivationBadManifestStructure(String badManifestFileName, String exceptedErrorMsg) throws Exception { - SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json"); + public void testApplicationEnvironmentActivationBadManifestStructure(String badManifestFileName, String exceptedErrorMsg) { + SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json", SimulatorApi.RegistrationStrategy.APPEND); clickOnActivationButtonAndUploadFile(ENV_ID_FOR_ACTIVATION, badManifestFileName); WebElement attachButton = Get.byId("submit"); assertEquals("Wrong text for submit button in activate modal", "Attach", attachButton.getText()); attachButton.click(); boolean waitForTextResult = Wait.waitByClassAndText("error", exceptedErrorMsg, 30); assertTrue(exceptedErrorMsg+ " message didn't appear on time", waitForTextResult); - vidBasePage.clickCloseButton(); GeneralUIUtils.ultimateWait(); + vidBasePage.clickCloseButton(); + Wait.modalToDisappear(); SideMenu.navigateToTestEnvironmentsPage(); } @Test - public void testApplicationEnvironmentActivationNonJsonManifest() throws Exception { - SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json"); + public void testApplicationEnvironmentActivationNonJsonManifest() { + SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json", SimulatorApi.RegistrationStrategy.APPEND); String fileName = "non_valid_json.json"; clickOnActivationButtonAndUploadFile(ENV_ID_FOR_ACTIVATION, fileName); WebElement errorLabel = Get.byId("errorLabel"); @@ -370,25 +384,30 @@ public class EnvironmentsTest extends VidBaseTestCase { WebElement activationButton = TestEnvironmentPage.getTestEnvironmentActivationButton(envId); assertTrue("Failed to find Activate button for test env with id: "+envId, activationButton.isDisplayed()); activationButton.click(); - Input.file("applicationEnvironment/"+inputFileName, "testEnvManifestFileInput"); + updateEnvManifestFile(inputFileName); WebElement manifestFileName = Get.byId("manifestFileName"); assertEquals("Manifest file name is wrong in test environment activation modal", inputFileName, manifestFileName.getText()); } + private void updateEnvManifestFile(String inputFileName) { + Input.file("applicationEnvironment/"+inputFileName, "testEnvManifestFileInput"); + GeneralUIUtils.ultimateWait(); + } + @Test - public void testAttachManifestFileHappyFlow() throws Exception { + public void testAttachManifestFileHappyFlow() { String envId = ENV_ID_FOR_ACTIVATION; SimulatorApi.registerExpectation("environment/activate/post_activate_operational_environment.json", - ImmutableMap.of("ENV-UUID", envId)); - SimulatorApi.registerExpectation("environment/attachManifest/get_attachable_operational_environment.json"); + ImmutableMap.of("ENV-UUID", envId), SimulatorApi.RegistrationStrategy.APPEND); + SimulatorApi.registerExpectation("environment/attachManifest/get_attachable_operational_environment.json", SimulatorApi.RegistrationStrategy.APPEND); SimulatorApi.registerExpectation("environment/status/get_cloud_resources_request_status.json", - ImmutableMap.of("status_message", Constants.TestEnvironments.environmentActivatedSuccesfullyMessage)); + ImmutableMap.of("status_message", Constants.TestEnvironments.environmentActivatedSuccesfullyMessage), SimulatorApi.RegistrationStrategy.APPEND); vidBasePage.refreshPage(); SideMenu.navigateToTestEnvironmentsPage(); WebElement attachButton = TestEnvironmentPage.getTestEnvironmentAttachButton(ENV_ID_FOR_ACTIVATION); attachButton.click(); - Input.file("applicationEnvironment/manifest.json", "testEnvManifestFileInput"); + updateEnvManifestFile("manifest.json"); Click.byId(Constants.generalSubmitButtonId); @@ -407,23 +426,23 @@ public class EnvironmentsTest extends VidBaseTestCase { } - public void testApplicationEnvironmentActivationErrorResponseFromMso(HttpStatus errorStatus, String payload, FailureType failureType) throws Exception { + public void testApplicationEnvironmentActivationErrorResponseFromMso(HttpStatus errorStatus, String payload, FailureType failureType) { String envId = ENV_ID_FOR_ACTIVATION; - SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json"); + SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json", SimulatorApi.RegistrationStrategy.APPEND); switch (failureType) { case ACTIVATION_FAILURE: SimulatorApi.registerExpectation("environment/activate/mso_error_response_for_post_operational_environment.json", - ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId)); + ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId), SimulatorApi.RegistrationStrategy.APPEND); break; case GET_STATUS_FAILURE: SimulatorApi.registerExpectation("environment/activate/post_activate_operational_environment.json", - ImmutableMap.of("ENV-UUID", envId)); + ImmutableMap.of("ENV-UUID", envId), SimulatorApi.RegistrationStrategy.APPEND); break; } SimulatorApi.registerExpectation("environment/status/get_cloud_resources_request_status_bad_response.json", - ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId)); + ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId), SimulatorApi.RegistrationStrategy.APPEND); clickOnActivationButtonAndUploadFile(envId, "manifest.json"); Click.byId(Constants.generalSubmitButtonId); @@ -449,22 +468,22 @@ public class EnvironmentsTest extends VidBaseTestCase { testApplicationEnvironmentDeactivationErrorResponseFromMso(HttpStatus.BAD_REQUEST, payload, FailureType.GET_STATUS_FAILURE); } - public void testApplicationEnvironmentDeactivationErrorResponseFromMso(HttpStatus errorStatus, String payload, FailureType failureType) throws Exception { + public void testApplicationEnvironmentDeactivationErrorResponseFromMso(HttpStatus errorStatus, String payload, FailureType failureType) { String envId = ENV_ID_FOR_DEACTIVATION; payload = payload.replace("REASON", errorStatus.getReasonPhrase()); - SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json"); + SimulatorApi.registerExpectation("environment/activate/get_operational_environments_aai1.json", SimulatorApi.RegistrationStrategy.APPEND); switch (failureType) { case DEACTIVATION_FAILURE: SimulatorApi.registerExpectation("environment/deactivate/error_deactivate_operational_environment.json", - ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId,"ERROR_PAYLOAD", payload)); + ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId,"ERROR_PAYLOAD", payload), SimulatorApi.RegistrationStrategy.APPEND); break; case GET_STATUS_FAILURE: SimulatorApi.registerExpectation("environment/deactivate/post_deactivate_operational_environment.json", - ImmutableMap.of("ENV-UUID", envId)); + ImmutableMap.of("ENV-UUID", envId), SimulatorApi.RegistrationStrategy.APPEND); break; } SimulatorApi.registerExpectation("environment/status/get_cloud_resources_request_status_bad_response.json", - ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId, "ERROR_PAYLOAD", payload)); + ImmutableMap.of("ERROR_CODE", errorStatus.value(), "ENV-UUID", envId, "ERROR_PAYLOAD", payload), SimulatorApi.RegistrationStrategy.APPEND); deactivateEnv(envId); Wait.waitByClassAndText("error", "System failure", 60); diff --git a/vid-automation/src/main/java/vid/automation/test/test/GeneralUITest.java b/vid-automation/src/main/java/vid/automation/test/test/GeneralUITest.java new file mode 100644 index 000000000..1cb4d79c1 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/GeneralUITest.java @@ -0,0 +1,19 @@ +package vid.automation.test.test; + +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.Get; +import vid.automation.test.sections.SideMenu; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public class GeneralUITest extends VidBaseTestCase { + + @Test + public void testHeaderContainerDisplayed() { + SideMenu.navigateToWelcomePage(); + assertThat(Get.byId(Constants.bugFixes.HEADER_CONTAINER).isDisplayed(), is(false)); + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/HealthStatusTest.java b/vid-automation/src/main/java/vid/automation/test/test/HealthStatusTest.java new file mode 100644 index 000000000..cf1717e47 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/HealthStatusTest.java @@ -0,0 +1,66 @@ +package vid.automation.test.test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableList; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet; +import org.opencomp.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet; +import org.openqa.selenium.remote.RemoteWebElement; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.Wait; +import vid.automation.test.sections.VidBasePage; +import vid.automation.test.services.SimulatorApi; + +import java.io.IOException; +import java.util.Collection; +import java.util.Map; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.testng.Assert.assertTrue; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET; + +public class HealthStatusTest extends VidBaseTestCase { + + private VidBasePage vidBasePage = new VidBasePage(); + + @DataProvider + public static Object[][] aaiHealthStatusProvider() { + return new Object[][]{ + {ImmutableList.of(new PresetGetSessionSlotCheckIntervalGet()), + "border-not-ok", "No subscriber received", 404}, + {ImmutableList.of(new PresetGetSessionSlotCheckIntervalGet(), new PresetAAIGetSubscribersGet()), + "border-is-ok", "OK", 200} + + }; + } + + + @Test(dataProvider = "aaiHealthStatusProvider") + public void testAaiHealthStatus(Collection<BasePreset> presets, String cssName, String description, int httpCode) throws IOException { + SimulatorApi.registerExpectationFromPresets(presets, CLEAR_THEN_SET); + refreshStatus(); + assertTrue(Wait.waitByClassAndTextXpathOnly(cssName, "AAI", 10)); //instead of ultimate wait + RemoteWebElement componentName = (RemoteWebElement)Get.byTestId("component-name-AAI"); + assertThat("Wrong component name", componentName.getText(), equalTo("AAI")); + assertThat("Wrong css for component name", componentName.getAttribute("class"), containsString(cssName)); + ObjectMapper objectMapper = new ObjectMapper(); + RemoteWebElement componentMetadata = ((RemoteWebElement) Get.byTestId("component-metadata-AAI")); + assertThat("Wrong css for component details", componentName.getAttribute("class"), containsString(cssName)); + Map<String, Object> details = objectMapper.readValue(componentMetadata.findElementsByTagName("pre").get(0).getText(), Map.class); + assertThat(details.get("description"), equalTo(description)); + assertThat(details.get("httpMethod"), equalTo("GET")); + assertThat(details.get("httpCode"), equalTo(httpCode)); + } + + private void refreshStatus() { + vidBasePage.navigateTo("app/ui/#/healthStatus"); + Click.byClass("icon-refresh"); + + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/InstantiationStatusTest.java b/vid-automation/src/main/java/vid/automation/test/test/InstantiationStatusTest.java new file mode 100644 index 000000000..899eed9a1 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/InstantiationStatusTest.java @@ -0,0 +1,118 @@ +package vid.automation.test.test; + +import com.google.common.collect.ImmutableMap; +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.JavascriptExecutor; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import vid.automation.test.infra.FeatureTogglingTest; +import vid.automation.test.sections.InstantiationStatusPage; +import vid.automation.test.sections.SideMenu; +import vid.automation.test.services.AsyncJobsService; + +import java.util.UUID; + +import static vid.automation.test.infra.Features.FLAG_ASYNC_INSTANTIATION; +import static vid.automation.test.sections.InstantiationStatusPage.assertInstantiationStatusRow; +import static vid.automation.test.sections.InstantiationStatusPage.getNumberOfTableRows; + +@FeatureTogglingTest(FLAG_ASYNC_INSTANTIATION) +public class InstantiationStatusTest extends VidBaseTestCase { + + + private final String serviceModelVersion = "1.0"; + private final String subscriberId = "ac040e8a-b43a-441b-ab87-603f5b70be55"; + private final String regionId = "my-expected-region-id"; + private final String projectName = "a-project-name"; + final static String owningEntityName = "expected-owningEntityName"; + final static String subscriberName = "expected-subscriberName"; + + + private String currentUUI; + + @BeforeClass + protected void dropAllAsyncJobs() { + AsyncJobsService asyncJobsService = new AsyncJobsService(); + asyncJobsService.dropAllAsyncJobs(); + } + + @AfterClass + protected void muteAllAsyncJobs() { + AsyncJobsService asyncJobsService = new AsyncJobsService(); + asyncJobsService.muteAllAsyncJobs(); + } + + @BeforeMethod + protected void createJobsData() { + addOneJob(); + SideMenu.navigateToMacroInstantiationStatus(); + } + + private String addOneJob() { + currentUUI = UUID.randomUUID().toString(); + final JavascriptExecutor javascriptExecutor = (JavascriptExecutor) GeneralUIUtils.getDriver(); + Object result = javascriptExecutor.executeScript( + "return (function postJob(){var xhttp = new XMLHttpRequest(); " + + " " + + " xhttp.onreadystatechange = function() { " + + " return this.responseText; " + + " }; " + + " " + + " xhttp.open(\"POST\", '/vid/asyncInstantiation/bulk', false); " + + " xhttp.setRequestHeader(\"Content-type\", \"application/json\"); " + + " xhttp.send(`{ " + + " \"modelInfo\": { " + + " \"modelType\": \"service\", " + + " \"modelInvariantId\": \"300adb1e-9b0c-4d52-bfb5-fa5393c4eabb\", " + + " \"modelVersionId\": \"5c9e863f-2716-467b-8799-4a67f378dcaa\", " + + " \"modelName\": \"AIM_TRANSPORT_00004\", " + + " \"modelVersion\": \"" + serviceModelVersion + "\" " + + " }, " + + " \"owningEntityId\" : \"someID\", " + + " \"owningEntityName\": \"" + owningEntityName + "\", " + + " \"projectName\" : \"" + projectName + currentUUI + "\", " + + " \"globalSubscriberId\": \"" + subscriberId + "\", " + + " \"subscriberName\": \"" + subscriberName + "\", " + + " \"productFamilyId\" : \"myProductFamilyId\", " + + " \"instanceName\" : \"MichaelJordan\", " + + " \"subscriptionServiceType\" : \"mySubType\", " + + " \"lcpCloudRegionId\" : \"" + regionId + "\", " + + " \"tenantId\" : \"greatTenant\", " + + " \"bulkSize\": 1, " + + " \"isUserProvidedNaming\": \"true\", " + + " \"vnfs\": {} " + + "} `); " + + " " + + "return JSON.parse(xhttp.responseText).entity;})()" + ); + + return result.toString(); + } + + @Test + public void testServiceInfoIsPresentedInTable() { + InstantiationStatusPage.clickRefreshButton(); + + assertInstantiationStatusRow(projectName + currentUUI, ImmutableMap.of( + "subscriberName", subscriberName, + "regionId", regionId, + "serviceModelVersion", serviceModelVersion, + "owningEntityName", owningEntityName + )); + } + + + @Test + public void testServiceInfoDataUpdatingAfterClickRefresh() { + long numberOfRows = getNumberOfTableRows(60); + + addOneJob(); + InstantiationStatusPage.clickRefreshButton(); + int numberOfRowsAfterRefresh = getNumberOfTableRows(60); + Assert.assertEquals(numberOfRows + 1 , numberOfRowsAfterRefresh); + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java new file mode 100644 index 000000000..fba260c9e --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java @@ -0,0 +1,727 @@ +package vid.automation.test.test; + +import com.google.common.collect.*; +import org.apache.commons.lang3.RandomStringUtils; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateServiceInstancePost; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet; +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import org.testng.annotations.*; +import vid.automation.test.Constants; +import vid.automation.test.Constants.BrowseASDC.NewServicePopup; +import vid.automation.test.infra.*; +import vid.automation.test.model.Service; +import vid.automation.test.model.User; +import vid.automation.test.sections.*; +import vid.automation.test.services.AsyncJobsService; +import vid.automation.test.services.ServicesService; +import vid.automation.test.services.SimulatorApi; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Consumer; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import static junit.framework.TestCase.assertNull; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.testng.Assert.assertEquals; +import static org.testng.AssertJUnit.assertTrue; +import static vid.automation.test.infra.Features.FLAG_ASYNC_INSTANTIATION; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; + +@FeatureTogglingTest(FLAG_ASYNC_INSTANTIATION) +public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { + + private ServicesService servicesService = new ServicesService(); + private DrawingBoardPage drawingBoardPage = new DrawingBoardPage(); + List<String> serviceModelLabelList = Arrays.asList("Model version", "Description", "Category", "UUID", + "Invariant UUID", "Service type", "Service role"); + List<String> mandatoryServiceModelLabelList = Arrays.asList("Model version", "UUID", "Invariant UUID"); + private final String defaultServiceModelForMostTests = "6e59c5de-f052-46fa-aa7e-2fca9d674c44"; + private final VidBasePage vidBasePage = new VidBasePage(); + + @BeforeClass + protected void dropAllAsyncJobs() { + AsyncJobsService asyncJobsService = new AsyncJobsService(); + asyncJobsService.dropAllAsyncJobs(); + } + + @AfterClass + protected void muteAllAsyncJobs() { + AsyncJobsService asyncJobsService = new AsyncJobsService(); + asyncJobsService.muteAllAsyncJobs(); + } + + @BeforeMethod + protected void refreshPage() { + GeneralUIUtils.ultimateWait(); + + vidBasePage.refreshPage(); + } + + @Override + protected UserCredentials getUserCredentials() { + String userName = Constants.Users.USP_VOICE_VIRTUAL_USP; + User user = usersService.getUser(userName); + return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", ""); + } + + @Test + public void createNewServiceInstance_fullModelData_LeftPaneLabelsCorrect() throws Exception { + loadMacroServicePopup_noDynamicFields_fullModelDetails_ecompNamingFalse(); + assertServiceModelLabelsCorrect(serviceModelLabelList); + } + + @Test + public void createNewServiceInstance_partialModelData_LeftPaneLabelsCorrect() throws Exception { + loadMacroServicePopup_withDynamicFields_partialModelDetails_ecompNamingTrue(); + assertServiceModelLabelsCorrect(mandatoryServiceModelLabelList); + } + + /** + * asserts that the provided labels list is visible and that no other detail item appears in the model details panel. + */ + protected void assertServiceModelLabelsCorrect(List<String> serviceModelLabelList) throws Exception { + WebElement modelInformation = getDriver().findElement(By.id("model-information")); + List<WebElement> modelInformationItems = modelInformation.findElements(By.xpath("./div")); + assertEquals(modelInformationItems.size(), serviceModelLabelList.size()); + serviceModelLabelList.forEach(label -> { + WebElement webElement = Get.byTestId("model-item-" + label); + WebElement itemWarpper = webElement.findElements(By.className("wrapper")).get(0); + assertEquals(itemWarpper.findElements(By.tagName("label")).get(0).getText(), label, "model details item label is incorrect."); + }); + } + + @Test + public void createNewServiceInstance_leftPane_serviceModelDataCorrect() { + Service service = servicesService.getService(NewServicePopup.SERVICE_UUID); + String prefix = NewServicePopup.SERVICE_MODEL_DATA_TEST_ID_VALUE_PREFIX; + loadMacroServicePopup_noDynamicFields_fullModelDetails_ecompNamingFalse(); + setNewInstance_leftPane_assertModelDataCorrect(NewServicePopup.SERVICE_MODEL_FIELD_TO_DATA_TESTS_ID, prefix, service); + } + + @Test + public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingFalse() { + + ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596.zip", + "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", + new ArrayList<>(), + false, true, true, true, + "2017-488_ADIOD-vPE 0", + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>()); + + String serviceInstanceName = deployServiceInstance(serviceData, false); + vidBasePage.screenshotDeployDialog(serviceInstanceName); + deployAndVerifyModuleInPendingTable(serviceInstanceName); + verifyOpenAuditInfo(serviceInstanceName); + verifyOpenViewEdit(serviceInstanceName); + verifyDeleteJob(serviceInstanceName); + verifyHideJob(serviceInstanceName); + } + + @Test + public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfTrue_vgNameFalse() { + ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596.zip", + "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", + new ArrayList<>(), + false, true, false, true, + "2017-488_ADIOD-vPE 0", + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", 1, 1, new ArrayList<>()); + + deployServiceInstance(serviceData); + } + + @Test + public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameFalse() { + ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596-vnfEcompNamingFalse.zip", + "4a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", + new ArrayList<>(), + false, false, false, false, + "2017-488_ADIOD-vPE 0", + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0", 1, 1, new ArrayList<>()); + + deployServiceInstance(serviceData); + } + + @Test + public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingServiceFalseVnfFalse_vgNameTrue() { + ServiceData serviceData = new ServiceData("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596-vnfEcompNamingFalse.zip", + "4a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", + new ArrayList<>(), + false, false, true, false, + "2017-488_ADIOD-vPE 0", + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>()); + + deployServiceInstance(serviceData); + } + + private void deployServiceInstance(ServiceData serviceData) { + deployServiceInstance(serviceData, true); + } + + private String deployServiceInstance(ServiceData serviceData, boolean tryCancelsAndReentries) { + User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); + + final String serviceInstanceName = createSriovService( + user, serviceData.dynamicFields, serviceData.csarName, serviceData.modelUuid, + serviceData.isGeneratedNaming, serviceData.multiStageDesign, + tryCancelsAndReentries); + + createVnf(serviceData.vnfData.isGeneratedNaming, serviceData.vnfData.vnfName, serviceInstanceName, tryCancelsAndReentries); + + createVfModule( + serviceData.vfData.vfName, serviceData.vnfData.isGeneratedNaming, + serviceData.vfData.vgEnabled, serviceData.vfData.vfMin, serviceData.vfData.vfMax, + serviceData.vfData.dynamicFields, serviceInstanceName); + + return serviceInstanceName; + } + + + @Test + public void createNewServiceInstance_macro_validPopupDataAndUI__ecompNamingTrue() { + + List<String> serviceDynamicFields = Arrays.asList("2017488 adiodvpe0 asn:"); + ServiceData serviceData = new ServiceData("csar-withDynamicFields-ecompNamingTrue-partialModelDetails.zip", + "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", + serviceDynamicFields, + true, true, false, false, + "2017-488_ADIOD-vPE 0", + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>()); + + deployServiceInstance(serviceData); + + } + + private void deployAndVerifyModuleInPendingTable(String serviceInstanceName) { + drawingBoardPage.clickDeployButton(); + + boolean simulatorUpdated = false; + + vidBasePage.goToIframe(); + GeneralUIUtils.ultimateWait(); + int[] ids = {1, 1, 2, 3}; + String[] statuses = {"IN_PROGRESS", "COMPLETED", "IN_PROGRESS", "PENDING"}; + for (int i = 0; i < ids.length; i++) { + String actualInstanceName = getActualInstanceName(serviceInstanceName, ids[i], statuses[i]); + + final Set<String> expectedStatuses = ImmutableSet.of(statuses[i]); + ServiceStatusChecker serviceStatusChecker = new ServiceStatusChecker(actualInstanceName, expectedStatuses); + boolean statusIsShown = Wait.waitFor(serviceStatusChecker, null, 20, 2); + final String assertionMessage = String.format("service %s: none of rowClasses [%s] is in expectedStatuses: [%s] ", + actualInstanceName, + String.join(",", serviceStatusChecker.getColumnClassesSet()), + String.join(",", expectedStatuses)); + + assertTrue(assertionMessage, statusIsShown); + + InstantiationStatusPage.assertInstantiationStatusRow( + actualInstanceName, expectedRowFields(actualInstanceName)); + + if (!simulatorUpdated) { + simulatorUpdated = true; + final String request1 = PresetMSOBaseCreateServiceInstancePost.DEFAULT_REQUEST_ID; + final String request2 = "ce010256-3fdd-4cb5-aed7-37112a2c6e93"; + SimulatorApi.registerExpectationFromPreset(new PresetMSOCreateServiceInstanceGen2(request2), APPEND); + SimulatorApi.registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("IN_PROGRESS", request2), APPEND); + SimulatorApi.registerExpectationFromPreset(new PresetMSOOrchestrationRequestGet("COMPLETE", request1), APPEND); + } + } + vidBasePage.screenshotDeployDialog(serviceInstanceName); + } + + private String getActualInstanceName(String serviceInstanceName, Integer i, String status) { + return "PENDING".equals(status) ? serviceInstanceName : serviceInstanceName + "_00" + i; + } + + private void verifyOpenViewEdit(String serviceInstanceName) { + boolean[] openEnabled = {true, false, false}; + String[] statuses = {"COMPLETED", "IN_PROGRESS", "PENDING"}; + ImmutableList.of(1, 2, 3).forEach(i -> { + String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i - 1]); + checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_OPEN_ITEM, openEnabled[i - 1], contextMenuOpen -> { + Click.byTestId(contextMenuOpen); + vidBasePage.goOutFromIframe(); + GeneralUIUtils.ultimateWait(); + + Wait.byText("View/Edit Service Instance"); + Wait.byText("Add node instance"); + Wait.byText("i'm a port"); + Wait.byText("f8791436-8d55-4fde-b4d5-72dd2cf13cfb"); + + vidBasePage.screenshotDeployDialog("view-edit-" + actualInstanceName); + SideMenu.navigateToMacroInstantiationStatus(); + }); + }); + } + + + private void verifyOpenAuditInfo(String serviceInstanceName) { + boolean auditInfoEnabled = true; + String[] statuses = {"COMPLETED", "IN_PROGRESS", "PENDING"}; + for (Integer i : ImmutableList.of(1, 2, 3)) { + String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i - 1]); + checkMenuItem(actualInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HEADER_AUDIT_INFO_ITEM, auditInfoEnabled, contextMenuOpen -> { + Click.byTestId(contextMenuOpen); + checkAuditInfoModal(actualInstanceName, i, statuses); + }); + final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName); + row.findElement(By.id(Constants.InstantiationStatus.TD_JOB_STATUS_ICON + "-" + (i - 1))).click(); + checkAuditInfoModal(actualInstanceName, i, statuses); + } + } + + private void checkAuditInfoModal(String actualInstanceName, Integer i, String[] statuses) { + + Wait.waitByTestId("vidJobStatus", 10); + + WebElement webElement = Get.byTestId("model-item-value-serviceInstanceName"); + assertEquals(webElement.getText(), actualInstanceName, "Service Instance Name must be equal"); + + WebElement vidTableElement = Get.byId("service-instantiation-audit-info-vid"); + assertEquals(3, vidTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "VID table must contain 3 columns"); + + List<WebElement> vidStatusesElements = vidTableElement.findElements(By.id("vidJobStatus")); + List<String> vidStatuses = vidStatusesElements.stream() + .map(s -> + convertUITextCapitalizeAndFormatPipe(s.getText())) + .collect(Collectors.toList()); + + List<String> serviceStatus = Arrays.asList(Arrays.copyOfRange(statuses, i - 1, statuses.length)); + assertThat("statuses for " + actualInstanceName + " must be as expected", vidStatuses, is(Lists.reverse(serviceStatus))); + + String dateString = vidTableElement.findElements(By.id("vidStatusTime")).get(0).getText(); + assertTrue("vid Status Time column must contains valid date in format : MMM dd, yyyy HH:mm", isDateValid(dateString, "MMM dd, yyyy HH:mm")); + + WebElement MSOTableElement = Get.byId("service-instantiation-audit-info-mso"); + assertEquals(4, MSOTableElement.findElement(By.tagName("thead")).findElements(By.tagName("th")).size(), "MSO table must contain 4 columns"); + + if (statuses[i - 1].equals("PENDING")) { + assertEquals(0, MSOTableElement.findElement(By.tagName("tbody")).findElements(By.tagName("tr")).size(), "When status is PENDING MSO table is empty"); + } + + vidBasePage.screenshotDeployDialog("audit-info-" + actualInstanceName); + Click.byId(Constants.AuditInfoModal.CANCEL_BUTTON); + } + + private String convertUITextCapitalizeAndFormatPipe(String text) { + return text.toUpperCase().replace("-", "_"); + } + + private boolean isDateValid(String dateToValidate, String dateFromat) { + + if (dateToValidate == null) { + return false; + } + SimpleDateFormat sdf = new SimpleDateFormat(dateFromat); + sdf.setLenient(false); + try { + //if not valid, it will throw ParseException + Date date = sdf.parse(dateToValidate); + + } catch (ParseException e) { + e.printStackTrace(); + return false; + } + return true; + } + + private void verifyDeleteJob(String serviceInstanceName) { + boolean[] deleteEnabled = {false, false, true}; + String[] statuses = {"COMPLETED", "IN_PROGRESS", "PENDING"}; + verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_DELETE, statuses, deleteEnabled, "deleted"); + } + + private void verifyHideJob(String serviceInstanceName) { + boolean[] hideEnabled = {true, false}; + String[] statuses = {"COMPLETED", "IN_PROGRESS"}; + verifyDeleteOrHideOperation(serviceInstanceName, Constants.InstantiationStatus.CONTEXT_MENU_HIDE, statuses, hideEnabled, "hidden"); + } + + private void verifyDeleteOrHideOperation(String serviceInstanceName, String contextMenuItem, String[] statuses, boolean[] operationEnabled, String operationName) { + for (int i = 1; i <= statuses.length; i++) { + String actualInstanceName = getActualInstanceName(serviceInstanceName, i, statuses[i - 1]); + checkMenuItem(actualInstanceName, contextMenuItem, operationEnabled[i - 1], contextMenuDelete -> { + Click.byTestId(contextMenuDelete); + GeneralUIUtils.ultimateWait(); + assertNull(actualInstanceName + " should be " + operationName, + InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName)); + }); + } + vidBasePage.screenshotDeployDialog(serviceInstanceName); + } + + private void checkMenuItem(String actualInstanceName, String contextMenuItem, boolean shouldBeEnabled, Consumer<String> doIfEnabled) { + Wait.waitFor(name -> { + if (null == InstantiationStatusPage.getInstantiationStatusRow(name)) { + InstantiationStatusPage.clickRefreshButton(); + return false; + } else { + return true; + } + }, actualInstanceName, 8, 1); + final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName); + row.findElement(By.className("menu-div")).click(); + String clazz = Get.byXpath("//div[@data-tests-id='" + contextMenuItem + "']/ancestor::li").getAttribute("class"); + assertThat("item " + contextMenuItem + " of " + actualInstanceName + + " should be " + (shouldBeEnabled ? "enabled" : "disabled"), !clazz.equals("disabled"), is(shouldBeEnabled)); + if (shouldBeEnabled) { + doIfEnabled.accept(contextMenuItem); + } else { + // dismiss menu + Get.byClass("title").get(0).click(); + } + } + + private ImmutableMap<String, String> expectedRowFields(String actualInstanceName) { + return ImmutableMap.<String, String>builder() + .put("userId", getUserCredentials().getUserId()) + .put("serviceModelName", "action-data") + .put("serviceInstanceName", actualInstanceName) + .put("serviceModelVersion", "1.0") + .put("subscriberName", "USP VOICE") + .put("serviceType", "VIRTUAL USP") + .put("regionId", "mtn6") + .put("tenantName", "AIN Web Tool-15-D-testgamma") + .put("aicZoneName", "NFTJSSSS-NFT1") + .put("project", "DFW") + .put("owningEntityName", "MetroPacketCore") + .put("pause", "false") + .build(); + } + + private String createSriovService(User user, List<String> serviceDynamicFields, + String csarName, String modelId, boolean modelWithGeneratedName, + boolean multiStageDesign, boolean tryCancelsAndReentries) { + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); + + // simulate typing with spaces, but expected is without spaces + String serviceInstanceNameWithSpaces = RandomStringUtils.randomAlphabetic(5) + " instance name"; + String serviceInstanceName = serviceInstanceNameWithSpaces.replace(" ", ""); + + List<String> cycles = tryCancelsAndReentries ? ImmutableList.of("WILL_CANCEL", "AFTER_CANCEL") : ImmutableList.of("SINGLE_SHOT"); + cycles.forEach(cycle -> { + if ("AFTER_CANCEL".equals(cycle)) { + loadServicePopupOnBrowseASDCPage(modelId); + } else { + loadServicePopup(csarName, modelId); + } + + WebElement instanceName = Get.byId("instance-name"); + if (modelWithGeneratedName) { + Assert.assertNull(instanceName, "instance name input should be invisible when serviceEcompNaming == true."); + } else { + instanceName.sendKeys(serviceInstanceNameWithSpaces); + } + + //serviceType should be dependent on subscriber selection + assertElementDisabled("service-type-select"); + + GeneralUIUtils.ultimateWait(); + assertDropdownPermittedItemsByLabel(user.subscriberNames, Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); + VidBasePage.selectSubscriberById("e433710f-9217-458d-a79d-1c7aff376d89"); + GeneralUIUtils.ultimateWait(); + + //lcpRegion should be dependent on serviceType selection + assertElementDisabled("lcpRegion-select"); + + String serviceType = "VIRTUAL USP"; + Wait.waitByClassAndText(Constants.CreateNewInstance.SERVICE_TYPE_OPTION_CLASS, serviceType, 30); + browseASDCPage.selectServiceTypeByName(serviceType); + + //tenant should be dependent on lcpRegion selection + assertElementDisabled("tenant-select"); + + String lcpRegion = "mtn6"; + Wait.waitByClassAndText("lcpRegionOption", lcpRegion, 30); + browseASDCPage.selectLcpRegion(lcpRegion); + + browseASDCPage.selectTenant("bae71557c5bb4d5aac6743a4e5f1d054"); + + String setButtonTestId = "service-form-set"; + assertSetButtonDisabled(setButtonTestId); + + SelectOption.byTestIdAndVisibleText("MetroPacketCore", (Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID)); + assertSetButtonDisabled(setButtonTestId); + + SelectOption.byTestIdAndVisibleText("DHV", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID); + assertSetButtonEnabled(setButtonTestId); + + browseASDCPage.selectProductFamily("e433710f-9217-458d-a79d-1c7aff376d89"); + + assertAllIsPermitted(Constants.BrowseASDC.AIC_OPTION_CLASS); + browseASDCPage.selectAicZone("NFT1"); + + SelectOption.byTestIdAndVisibleText("DFW", Constants.OwningEntity.PROJECT_SELECT_TEST_ID); + + assertNotificationAreaVisibilityBehaviour(); + + assertPauseOnPausePointsVisibility(multiStageDesign); + + validateDynamicFields(serviceDynamicFields); + + vidBasePage.screenshotDeployDialog("createSriovService-" + serviceInstanceName); + + if ("WILL_CANCEL".equals(cycle)) { + Click.byTestId(Constants.CANCEL_BUTTON_TEST_ID); + } else { + Click.byTestId(setButtonTestId); + } + + browseASDCPage.goOutFromIframe(); + + browseASDCPage.goToIframe(); + + }); + return serviceInstanceName; + } + + private void createVnf(boolean isInstanceNameGenerated, String vnfName, String serviceInstanceName, boolean tryCancelsAndReentries) { + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); + drawingBoardPage.clickAddButtonByNodeName(vnfName); + + if (isInstanceNameGenerated) { + WebElement instanceName = Get.byId("instance-name"); + Assert.assertNull(instanceName, "instance name input should be invisible when serviceEcompNaming == true."); + } else { + Input.text("VNF instance name", "instanceName"); + } + + //tenant should be dependent on lcpRegion selection + assertElementDisabled("tenant-select"); + + WebElement legacyRegion = Get.byTestId("lcpRegionText"); + Assert.assertNull(legacyRegion, "legacy region shouldn't be visible when lcp region isn't AAIAIC25,rdm3 or rdm5a."); + + browseASDCPage.selectLcpRegion("AAIAIC25"); + + legacyRegion = Get.byTestId("lcpRegionText"); + Assert.assertNotNull(legacyRegion, "legacy region should be visible when lcp region is AAIAIC25,rdm3 or rdm5a."); + + browseASDCPage.selectTenant("092eb9e8e4b7412e8787dd091bc58e86"); + + String setButtonTestId = "vnf-form-set"; + assertSetButtonDisabled(setButtonTestId); + + browseASDCPage.selectPlatform("platform"); + + assertSetButtonEnabled(setButtonTestId); + + browseASDCPage.setLegacyRegion("some legacy region"); + browseASDCPage.selectLineOfBusiness("ECOMP"); + + Wait.waitByTestId("model-item-value-subscriberName", 10); + Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "USP VOICE", "Subscriber name should be shown in vf module"); + Assert.assertEquals(Get.byTestId("model-item-value-min"), null, "Min value should not be shown in VNF popup"); + Assert.assertEquals(Get.byTestId("model-item-value-max"), null, "Max value should not be show in VNF popup"); + if (!isInstanceNameGenerated) { + Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Subscriber name should be shown in vf module"); + } + + vidBasePage.screenshotDeployDialog("createVnf-" + serviceInstanceName); + Click.byTestId(setButtonTestId); + + String nodeToEdit = "69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_ADIOD-vPE 0"; + if (tryCancelsAndReentries) { + hoverAndClickEditButton(nodeToEdit); + + Wait.byText("VIRTUAL USP"); + GeneralUIUtils.ultimateWait(); + Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID), "AAIAIC25"); + Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.TENANT_SELECT_TESTS_ID), "USP-SIP-IC-24335-T-01"); + Assert.assertEquals(Get.selectedOptionText(Constants.ViewEdit.LINE_OF_BUSINESS_SELECT_TESTS_ID), "ECOMP"); + Assert.assertEquals(Get.selectedOptionText(Constants.OwningEntity.PLATFORM_SELECT_TEST_ID), "platform"); + Click.byTestId(Constants.CANCEL_BUTTON_TEST_ID); + } else { + toggleItemInTree(nodeToEdit); + } + } + + private void toggleItemInTree(String nodeToEdit) { + Click.byXpath("//tree-root[@data-tests-id='" + Constants.DrawingBoard.AVAILABLE_MODELS_TREE + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']"); + } + + private void hoverAndClickEditButton(String nodeToEdit) { + String buttonOfEdit = Constants.DrawingBoard.NODE_PREFIX + nodeToEdit + Constants.DrawingBoard.CONTEXT_MENU_BUTTON; + GeneralUIUtils.hoverOnAreaByTestId(buttonOfEdit); + Click.byTestId(buttonOfEdit); + Click.byTestId(Constants.DrawingBoard.CONTEXT_MENU_ITEM); + } + + private void createVfModule(String vfModuleName, boolean isInstanceNameGenerated, boolean vgEnabled, int vgMin, + int vgMax, List<String> vfModuleDynamicFields, String serviceInstanceName) { + String setButtonTestId = "vnf-form-set"; + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); +// Click.byTestId(Constants.DrawingBoard.NODE_PREFIX + vnfName); + drawingBoardPage.clickAddButtonByNodeName(vfModuleName); + if (!isInstanceNameGenerated) { + Input.text("VF instance name", "instanceName"); + } else { + Assert.assertNull(Get.byTestId("instanceName")); + Assert.assertNull(Get.byTestId("volumeGroupName")); + + } + if (vgEnabled && !isInstanceNameGenerated) { + browseASDCPage.setInputText("volumeGroupName", "some group name name"); + } else { + Assert.assertNull(Get.byTestId("volumeGroupName"), "volumeGroupName input should be invisible when vgEnabled == false"); + } + Wait.waitByTestId("model-item-value-subscriberName", 10); + Assert.assertEquals(Get.byTestId("model-item-value-subscriberName").getText(), "USP VOICE", "Subscriber name should be shown in vf module"); + Assert.assertEquals(Get.byTestId("model-item-value-min").getText(), Integer.toString(vgMin), "Min should be shown"); + Assert.assertEquals(Get.byTestId("model-item-value-max").getText(), Integer.toString(vgMax), "Max should be shown"); + if (!isInstanceNameGenerated) { + Wait.byText(serviceInstanceName); + Assert.assertEquals(Get.byTestId("model-item-value-serviceName").getText(), serviceInstanceName, "Service name should be shown in vf module"); + } + validateDynamicFields(vfModuleDynamicFields); + + browseASDCPage.screenshotDeployDialog("createVfModule-" + serviceInstanceName); + Click.byTestId(setButtonTestId); + } + + private void assertPauseOnPausePointsVisibility(boolean visibility) { + WebElement pauseElem = Get.byId("pause"); + final String assertionMessage = "pause on pause points visibility should be " + visibility; + if (visibility) { + Assert.assertNotNull(pauseElem, assertionMessage); + } else { + Assert.assertNull(pauseElem, assertionMessage); + } + } + + private void assertNotificationAreaVisibilityBehaviour() { + WebElement webElement = Get.byId("notification-area"); + Assert.assertNull(webElement, "notification area should be invisible if only 1 qty."); + + SelectOption.byIdAndVisibleText("quantity-select", "3"); + + webElement = Get.byId("notification-area"); + Assert.assertNotNull(webElement, "notification area should be visible if more then 1 qty."); + } + + /** + * following are two popup service models that represent two opposite/extreme states of the popup. + * they should be enough to test all the possible popup states. + */ + private void loadMacroServicePopup_withDynamicFields_partialModelDetails_ecompNamingTrue() { + loadServicePopup("csar-withDynamicFields-ecompNamingTrue-partialModelDetails.zip", "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"); + } + + private void loadMacroServicePopup_noDynamicFields_fullModelDetails_ecompNamingFalse() { + loadServicePopup("csar-noDynamicFields-ecompNamingFalse-fullModelDetails-1a80c596.zip", "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"); + } + + @DataProvider + private Object[][] createSriovService( + ) { + List<String> dynamicFields = Arrays.asList( + "2017488 adiodvpe0 VNF config template version:", + "Adiodvpe0 bandwidth units:", + "Adiodvpe0 bandwidth:", + "2017488 adiodvpe0 aic clli:", + "2017488 adiodvpe0 asn:", + "2017488 adiodvpe0 VNF instance name"); + ServiceData withEcompNaming = new ServiceData("csar-withDynamicFields-ecompNamingTrue-partialModelDetails.zip", + "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", + dynamicFields, + true, true, true, false, + "2017-488_ADIOD-vPE 0", + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>()); + return new Object[][]{{withEcompNaming}}; + } + + + private class ServiceData { + + public ServiceData(String csarName, String modelUuid, List<String> dynamicFields, boolean isServiceGeneratedNaming, boolean isVnfGeneratedNaming, boolean isVgEnabled, boolean multiStageDesign, String vnfName, String vfName, int vfMin, int vfMax, List<String> vfModuleDynamicFields) { + this.csarName = csarName; + this.modelUuid = modelUuid; + this.dynamicFields = dynamicFields; + this.isGeneratedNaming = isServiceGeneratedNaming; + this.multiStageDesign = multiStageDesign; + this.vnfData = new VnfData(vnfName, isVnfGeneratedNaming); + this.vfData = new VfData(vfName, isVgEnabled, vfMin, vfMax, vfModuleDynamicFields); + } + + public String csarName; + public String modelUuid; + public List<String> dynamicFields; + public boolean isGeneratedNaming; + public boolean multiStageDesign; + public VnfData vnfData; + public VfData vfData; + + } + + private class VnfData { + + public VnfData(String vnfName, boolean isGeneratedNaming) { + this.vnfName = vnfName; + this.isGeneratedNaming = isGeneratedNaming; + } + + public String vnfName; + public boolean isGeneratedNaming; + } + + + private class VfData { + public VfData(String vfName, boolean vgEnabled, int vfMin, int vfMax, List<String> dynamicFields) { + this.vfName = vfName; + this.vgEnabled = vgEnabled; + this.vfMin = vfMin; + this.vfMax = vfMax; + this.dynamicFields = dynamicFields; + } + + public int vfMin; + + public int vfMax; + + public String vfName; + + public boolean vgEnabled; + + public List<String> dynamicFields; + + } + + + private class ServiceStatusChecker implements Predicate<Boolean> { + private String actualInstanceName; + private Set<String> expectedStatuses; + private Set<String> columnClassesSet; + + public ServiceStatusChecker(String actualInstanceName, Set<String> expectedStatuses) { + this.actualInstanceName = actualInstanceName; + this.expectedStatuses = expectedStatuses; + } + + @Override + public boolean test(Boolean noMeaning) { + InstantiationStatusPage.clickRefreshButton(); + final WebElement row = InstantiationStatusPage.getInstantiationStatusRow(actualInstanceName); + if (row == null) { + System.err.println("**********************" + actualInstanceName + "************************************************"); + columnClassesSet = Collections.singleton(actualInstanceName + " NOT FOUND"); + return false; // treat missing row as if test condition not fulfilled + } else { + columnClassesSet = new HashSet<>(Arrays.asList( + row.findElements(By.xpath(".//*[@id='" + "jobStatus" + "']")).get(0).getAttribute("class").split(" "))); + return !(Sets.intersection(expectedStatuses, columnClassesSet).isEmpty()); + } + } + + public Set<String> getColumnClassesSet() { + return columnClassesSet; + } + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/PreviousVersionsPopupTest.java b/vid-automation/src/main/java/vid/automation/test/test/PreviousVersionsPopupTest.java new file mode 100644 index 000000000..0dc20baa9 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/PreviousVersionsPopupTest.java @@ -0,0 +1,126 @@ +package vid.automation.test.test; + +import com.google.common.collect.ImmutableList; +import org.junit.Assert; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset; +import org.opencomp.simulator.presetGenerator.presets.aai.*; +import org.opencomp.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstancePost; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet; +import org.opencomp.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet; +import org.opencomp.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import vid.automation.test.sections.BrowseASDCPage; +import vid.automation.test.sections.CreateNewInstancePage; +import vid.automation.test.sections.PreviousVersionDialog; +import vid.automation.test.sections.SideMenu; +import vid.automation.test.services.SimulatorApi; + +public class PreviousVersionsPopupTest extends CreateInstanceDialogBaseTest{ + + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); + PreviousVersionDialog newVersionDialog = new PreviousVersionDialog(); + private String versionNumber1 = "1.0"; + private String versionNumber2 = "2.0"; + private String versionNumber3 = "3.0"; + private String modelVersionId1 = "aeababbc-010b-4a60-8df7-e64c07389466"; + private String modelVersionId2 = "aa2f8e9c-9e47-4b15-a95c-4a9385599abc"; + private String modelVersionId3 = "d849c57d-b6fe-4843-8349-4ab8bbb08d71"; + private static final String modelInvariantId = "a8dcd72d-d44d-44f2-aa85-53aa9ca99cba"; + private static final String serviceName = "action-data"; + private String createModalTitleTestId = "create-modal-title"; + + + @DataProvider + public static Object[][] filterTexts() { + return new Object[][]{{serviceName},{modelInvariantId}}; + } + + @Test(dataProvider ="filterTexts" ) + private void openPreviousVersionPopup_twoPreviousVersions_Exists(String filterText){ + prepareSimulatorWithThreeVersionsBeforeBrowseASDCService(); + SideMenu.navigateToBrowseASDCPage(); + browseASDCPage.fillFilterText(filterText); + newVersionDialog.assertPreviousVersionButtonExists(modelInvariantId); + browseASDCPage.clickPreviousVersionButton(); + newVersionDialog.assertVersionRow(modelInvariantId,modelVersionId1,versionNumber1,"Previous-version-pop-up-uuid-"); + newVersionDialog.assertVersionRow(modelInvariantId,modelVersionId2,versionNumber2,"Previous-version-pop-up-uuid-"); + browseASDCPage.clickCancelButton(); + } + + @Test + private void browseSDC_afterCancelOnPopup_browseSDCpageExists(){ + prepareSimulatorWithThreeVersionsBeforeBrowseASDCService(); + SideMenu.navigateToBrowseASDCPage(); + browseASDCPage.clickPreviousVersionButton(); + browseASDCPage.clickCancelButton();// to change + newVersionDialog.assertVersionRow(modelInvariantId,modelVersionId3,versionNumber3,"Browse_SDC_Service_Models-uuid-"); + } + @Test + private void browseSDC_previousVersionButton_notExists(){ + prepareSimulatorWithOneVersionBeforeBrowseASDCService(); + SideMenu.navigateToBrowseASDCPage(); + browseASDCPage.assertPreviousVersionButtonNotExists(modelInvariantId); + } + + @Test + private void openPreviousVersionPopup_newestVersionButton_notExists(){ + prepareSimulatorWithThreeVersionsBeforeBrowseASDCService(); + SideMenu.navigateToBrowseASDCPage(); + browseASDCPage.clickPreviousVersionButton(); + newVersionDialog.assertHighestVersionNotExists(modelVersionId3); + newVersionDialog.clickCancelButton(); + } + @Test + private void openPreviousVersionPopup_deployOldVersion_creationPopupIsALaCarte(){ + String expectedPopupIsALaCarteName = "Create Service Instance -- a la carte"; + prepareSimulatorWithThreeVersionsBeforeBrowseASDCService(); + CreateNewInstancePage newInstance= new CreateNewInstancePage(); + newVersionDialog = new PreviousVersionDialog(); + SideMenu.navigateToBrowseASDCPage(); + browseASDCPage.clickPreviousVersionButton(); + newVersionDialog.clickDeployServiceButtonByServiceUUID(modelVersionId2); + assertNewInstanceFormOpened(createModalTitleTestId,expectedPopupIsALaCarteName); + newInstance.clickCancelButtonByTestID(); + GeneralUIUtils.ultimateWait(); + newVersionDialog.clickCancelButton(); + + } + + private void assertNewInstanceFormOpened(String createModalTitleTestId,String expectedInstanceFormName) { + String newInstanceFormName = GeneralUIUtils.getWebElementByTestID(createModalTitleTestId).getText(); + Assert.assertEquals(expectedInstanceFormName, newInstanceFormName); + } + + private void prepareSimulatorWithThreeVersionsBeforeBrowseASDCService(){ + SimulatorApi.clearAll(); + String zipFileName = "serviceCreationTest.zip"; + + ImmutableList<BasePreset> presets = ImmutableList.of( + new PresetGetSessionSlotCheckIntervalGet(), + new PresetAAIGetSubscribersGet(), + new PresetAAIGetMultipleVersion(modelVersionId1,modelVersionId2,modelVersionId3, modelInvariantId), + new PresetAAIGetServicesGet(), + new PresetSDCGetServiceMetadataGet(modelVersionId2, modelInvariantId, zipFileName), + new PresetSDCGetServiceToscaModelGet(modelVersionId2, zipFileName), + new PresetAAIGetSubDetailsGet(null), + new PresetAAIGetNetworkZones(), + new PresetMSOCreateServiceInstancePost(), + new PresetMSOOrchestrationRequestGet()); + SimulatorApi.registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET); + } + + private void prepareSimulatorWithOneVersionBeforeBrowseASDCService(){ + SimulatorApi.clearAll(); + ImmutableList<BasePreset> presets = ImmutableList.of( + new PresetGetSessionSlotCheckIntervalGet(), + new PresetAAIGetSubscribersGet(), + new PresetAAIGetOneVersion(modelVersionId1, modelInvariantId), + new PresetAAIGetServicesGet()); + + SimulatorApi.registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET); + } +} + diff --git a/vid-automation/src/main/java/vid/automation/test/test/ReadOnlyTest.java b/vid-automation/src/main/java/vid/automation/test/test/ReadOnlyTest.java index 5607496dc..e788b7051 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/ReadOnlyTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/ReadOnlyTest.java @@ -1,61 +1,98 @@ package vid.automation.test.test; import org.junit.Assert; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetNetworkCollectionDetails; import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.By; - import org.openqa.selenium.WebElement; import org.testng.annotations.Test; import vid.automation.test.Constants; import vid.automation.test.model.User; -import vid.automation.test.sections.SearchExistingPage; import vid.automation.test.sections.SideMenu; -import vid.automation.test.services.UsersService; +import vid.automation.test.services.BulkRegistration; +import vid.automation.test.services.SimulatorApi; +import vid.automation.test.utils.DB_CONFIG; -import java.io.IOException; +import java.sql.*; import java.util.ArrayList; +import java.util.List; + +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; /** * Created by Oren on 7/16/17. */ public class ReadOnlyTest extends VidBaseTestCase { - UsersService usersService = new UsersService(); - public ReadOnlyTest() throws IOException { - } + private String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7testCR"; + @Override protected UserCredentials getUserCredentials() { - User user = usersService.getUser(Constants.Users.READONLY); + User user = usersService.getUser(Constants.Users.READONLY); return new UserCredentials(user.credentials.userId, user.credentials.password, "", "", ""); } @Test + public void userIsDefinedAsReadOnlyInDBTest() throws SQLException { + User user = usersService.getUser(Constants.Users.READONLY); + + int userId = getUserIdNumberFromDB(user); + + List<Integer> userRoles = getRoleIDsAssignedToUser(userId); + Assert.assertTrue("The user should have role number 16", userRoles.contains(16)); + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + Statement stmt = connection.createStatement(); + verifyRolesAssignedToUser(stmt, userRoles); + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + } + + private void verifyRolesAssignedToUser(Statement stmt, List<Integer> userRoles) throws SQLException { + String roleName; + + for (Integer roleId : userRoles) { + ResultSet roleDetailsResult = stmt.executeQuery("SELECT ROLE_NAME FROM fn_role WHERE ROLE_ID = '" + roleId + "';"); + Assert.assertTrue("role id " + roleId + "was not found!", roleDetailsResult.next()); + roleName = roleDetailsResult.getString("ROLE_NAME"); + Assert.assertTrue("The user should have only 'Standard user", roleName.equalsIgnoreCase("STANDARD USER")); + Assert.assertFalse("More than one role was found for role id " + roleId, roleDetailsResult.next()); + } + } + + @Test public void testBrowsASDCReadOnly() { + String zipFileName = "serviceCreationTest.zip"; + String modelVersionId = "aa2f8e9c-9e47-4b15-a95c-4a9385599abc"; + String modelInvariantId = "a8dcd72d-d44d-44f2-aa85-53aa9ca99cba"; + + registerExpectationForLegacyServiceDeployment(modelVersionId, modelInvariantId, zipFileName, null); + SideMenu.navigateToBrowseASDCPage(); Assert.assertTrue(isDeployBtnDisabled()); } - private boolean isDeployBtnDisabled(){ + private boolean isDeployBtnDisabled() { WebElement deployBtn = GeneralUIUtils.getWebElementBy(By.className(Constants.BrowseASDC.DEPOLY_SERVICE_CLASS)); return !deployBtn.isEnabled(); } @Test public void testSearchExistingReadOnly() { - String UUID = "1dddde21-daad-4433-894e-bd715e98d587"; - SearchExistingPage searchExistingPage = new SearchExistingPage(); - SideMenu.navigateToSearchExistingPage(); - searchExistingPage.searchForInstanceByUuid(UUID); - searchExistingPage.clickSubmitButton(); - assertViewEditButtonState(Constants.VIEW_BUTTON_TEXT, UUID); - searchExistingPage.clickEditViewByInstanceId(UUID); - searchExistingPage.checkForEditButtons(); + SimulatorApi.clearAll(); + BulkRegistration.searchExistingCRServiceInstance("Created"); + final PresetAAIGetNetworkCollectionDetails presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetails(serviceInstanceId); + SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, APPEND); + + searchForExistingInstanceByIdReadonlyMode(serviceInstanceId); } @Test private void testCreateNewInstanceReadOnly() { + SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND, + "search_for_service_instance/aai_get_full_subscribers.json"); SideMenu.navigateToCreateNewServicePage(); assertDropdownPermittedItemsByValue(new ArrayList<String>(), Constants.CreateNewInstance.SUBSCRIBER_NAME_OPTION_CLASS); } diff --git a/vid-automation/src/main/java/vid/automation/test/test/SanityMacroDeployTest.java b/vid-automation/src/main/java/vid/automation/test/test/SanityMacroDeployTest.java new file mode 100644 index 000000000..dfa79bf30 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/SanityMacroDeployTest.java @@ -0,0 +1,139 @@ +package vid.automation.test.test; + +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.FeatureTogglingTest; +import vid.automation.test.infra.SelectOption; +import vid.automation.test.model.User; +import vid.automation.test.sections.BrowseASDCPage; +import vid.automation.test.sections.SideMenu; +import vid.automation.test.services.SimulatorApi; + +import static org.hamcrest.Matchers.containsString; +import static vid.automation.test.infra.Features.FLAG_ASYNC_INSTANTIATION; + +public class SanityMacroDeployTest extends CreateInstanceDialogBaseTest { + + static final String NEW_INSTANCE_NAME = "New Instance Name"; + + static final String SERVICE_NAME_PNF = "vidmacrofalsenaming"; + static final String SERVICE_UUID = "4d71990b-d8ad-4510-ac61-496288d9078e"; + static final String SUBSCRIBER = "FIREWALL/MISC"; + static final String PRODUCT = "Transport"; + static final String SERVICE_TYPE = "AIM Transport"; + static final String LCP_REGION = "rdm3"; + + static final String TENANT = "AIN Web Tool-15-D-testgamma"; + static final String AIC_ZONE = "NFTJSSSS-NFT1"; + static final String PROJECT = "yyy1"; + static final String OWNING_ENTITY = "aaa1"; + + static final String RESOURCE_NAME = "MULTI_PROVIDER_PORT_GROUP 0"; + static final String RESOURCE_DESCRIPTION = "Creates a neutron multi-provider VLAN network with dummy subnet"; + static final String SERVICE_INVARIANT_UUID = "d27e42cf-087e-4d31-88ac-6c4b7585f800"; + static final String SERVICE_VERSION = "1.0"; + static final String SERVICE_DESCRIPTION = "vidmacrofalsenaming"; + static final String SERVICE_CATEGORY = "Network L1-3"; + + public SanityMacroDeployTest() { + } + + + @BeforeClass + protected void registerToSimulator() { + SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND, + "sanity/browse_sdc_catalog_two_services.json", + "sanity/aai_get_services.json", + "sanity/aai_get_aic_zones.json", + "search_for_service_instance/aai_get_full_subscribers.json", + "search_for_service_instance/aai_get_subscribers_for_customer_FIREWALL-MISC.json", + "sanity/aai_get_tenants.json", + "sanity/get_mso_get_orch_request.json", + "sanity/post_mso_create_service_instance.json", + "sanity/get_sdc_catalog_services_4d71990b.json", + "sanity/aai_named_query_for_view_edit.json" + ); + } + + @Override + protected UserCredentials getUserCredentials() { + String userName = Constants.Users.FIREWALL_MISC_AIM_TRANSPORT; + User user = usersService.getUser(userName); + return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", ""); + } + + @FeatureTogglingTest(value = FLAG_ASYNC_INSTANTIATION, flagActive = false) + @Test + private void browseServiceModel_MacroService_CreatedSuccessfully() { + BrowseASDCPage browseASDCPage = new BrowseASDCPage(); + SideMenu.navigateToBrowseASDCPage(); + + GeneralUIUtils.ultimateWait(); + browseASDCPage.clickDeployServiceButtonByServiceUUID(SERVICE_UUID); + + WebElement modalTitle = GeneralUIUtils.getWebElementByTestID(Constants.CREATE_MODAL_TITLE_ID, 30); + Assert.assertThat(modalTitle.getText().toLowerCase(), containsString("macro")); + + assertServiceDetails(); + + fillCreateInstanceModal(); + + browseASDCPage.clickConfirmButton(); + + assertSuccessfulServiceInstanceCreation(); + + browseASDCPage.clickCloseButton(); + } + + private void fillCreateInstanceModal() { + WebElement instance_name = GeneralUIUtils.getWebElementByTestID(Constants.INSTANCE_NAME_SELECT_TESTS_ID, 30); + instance_name.sendKeys(NEW_INSTANCE_NAME); + + SelectOption.byTestIdAndVisibleText(SUBSCRIBER, Constants.SUBSCRIBER_NAME_SELECT_TESTS_ID); + + GeneralUIUtils.ultimateWait(); + SelectOption.byTestIdAndVisibleText(PRODUCT, Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID); + GeneralUIUtils.ultimateWait(); + SelectOption.byTestIdAndVisibleText(SERVICE_TYPE, Constants.SERVICE_TYPE_SELECT_TESTS_ID); + GeneralUIUtils.ultimateWait(); + SelectOption.byTestIdAndVisibleText(LCP_REGION, Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID); + + SelectOption.byTestIdAndVisibleText(TENANT, Constants.ViewEdit.TENANT_SELECT_TESTS_ID); + SelectOption.byTestIdAndVisibleText(AIC_ZONE, Constants.ViewEdit.AIC_ZONE_TEST_ID); + SelectOption.byTestIdAndVisibleText(PROJECT, Constants.OwningEntity.PROJECT_SELECT_TEST_ID); + SelectOption.byTestIdAndVisibleText(OWNING_ENTITY, Constants.OwningEntity.OWNING_ENTITY_SELECT_TEST_ID); + } + + private void assertServiceDetails() { + WebElement currElem = GeneralUIUtils.getWebElementByTestID(Constants.SERVICE_NAME, 30); + Assert.assertEquals(currElem.getText(), SERVICE_NAME_PNF); + + currElem = GeneralUIUtils.getWebElementByTestID(Constants.SERVICE_UUID, 30); + Assert.assertEquals(currElem.getText(), SERVICE_UUID); + + currElem = GeneralUIUtils.getWebElementByTestID(Constants.RESOURCE_NAME, 30); + Assert.assertEquals(currElem.getText(), RESOURCE_NAME); + + currElem = GeneralUIUtils.getWebElementByTestID(Constants.RESOURCE_DESCRIPTION, 30); + Assert.assertEquals(currElem.getText(), RESOURCE_DESCRIPTION); + + currElem = GeneralUIUtils.getWebElementByTestID(Constants.SERVICE_INVARIANT_UUID, 30); + Assert.assertEquals(currElem.getText(), SERVICE_INVARIANT_UUID); + + currElem = GeneralUIUtils.getWebElementByTestID(Constants.SERVICE_VERSION, 30); + Assert.assertEquals(currElem.getText(), SERVICE_VERSION); + + currElem = GeneralUIUtils.getWebElementByTestID(Constants.SERVICE_DESCRIPTION, 30); + Assert.assertEquals(currElem.getText(), SERVICE_DESCRIPTION); + + currElem = GeneralUIUtils.getWebElementByTestID(Constants.SERVICE_CATEGORY, 30); + Assert.assertEquals(currElem.getText(), SERVICE_CATEGORY); + } + + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/SanityTest.java b/vid-automation/src/main/java/vid/automation/test/test/SanityTest.java new file mode 100644 index 000000000..29d25f21f --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/SanityTest.java @@ -0,0 +1,110 @@ +package vid.automation.test.test; + +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.SelectOption; +import vid.automation.test.model.User; +import vid.automation.test.sections.SearchExistingPage; +import vid.automation.test.sections.SideMenu; +import vid.automation.test.services.SimulatorApi; + +import java.io.IOException; + +public class SanityTest extends VidBaseTestCase { + + static final String SUBSCRIBER = "Mobility"; + static final String SERVICE_NAME = "abc_mdns_2017_1011_IST_Service_CSI"; + static final String SERVICE_ID = "ec884145-dbe8-4228-8165-f0c4d7123f8b"; + + public SanityTest() throws IOException { + } + + + @BeforeClass + protected void registerToSimulator() { + SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET, + "sanity/get_aai_get_subscribers.json" + , "sanity/aai_get_services.json" + , "sanity/get_aai_sub_details.json" + , "sanity/get_aai_search_named_query.json" + , "sanity/get_aai_search_instance_by_id.json" + , "sanity/get_sdc_catalog_services_a1531622.json" + , "sanity/get_aai_search_instance_by_name.json" + ); + } + + @Override + protected UserCredentials getUserCredentials() { + String userName = Constants.Users.MOBILITY_VMMSC; + User user = usersService.getUser(userName); + return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", ""); + } + + @Test + private void testSearchExistingInstanceByName() throws Exception { + SideMenu.navigateToSearchExistingPage(); + goToExistingInstanceByName(SERVICE_NAME); + } + + @Test + private void testSearchExistingInstanceById() throws Exception { + SideMenu.navigateToSearchExistingPage(); + goToExistingInstanceById(SERVICE_ID); + } + + + + @Test + private void testSearchExistingInstanceBySubscriber() throws Exception { + SearchExistingPage searchExistingPage = new SearchExistingPage(); + SideMenu.navigateToSearchExistingPage(); + SelectOption.byIdAndVisibleText(Constants.EditExistingInstance.SELECT_SUBSCRIBER, SUBSCRIBER); + GeneralUIUtils.ultimateWait(); + + searchExistingPage.clickSubmitButton(); + GeneralUIUtils.ultimateWait(); + + confirmResultBySubscriber(); + + + String filteredId = confirmFilterById(); + + confirmViewEditPage(filteredId); + + } + + private void confirmViewEditPage(String filteredId) { + assertViewEditButtonState( Constants.VIEW_EDIT_BUTTON_TEXT, filteredId); + Click.byTestId(Constants.VIEW_EDIT_TEST_ID_PREFIX + filteredId); + GeneralUIUtils.ultimateWait(); + + WebElement serviceInstanceIdTH = GeneralUIUtils.getWebElementByTestID(Constants.SERVICE_INSTANCEID_TH_ID, 30); + String instanceId = serviceInstanceIdTH.getText(); + Assert.assertTrue(instanceId.contains(SERVICE_ID)); + } + + private String confirmFilterById() { + WebElement filter = GeneralUIUtils.getWebElementByTestID(Constants.FILTER_SUBSCRIBER_DETAILS_ID, 30); + filter.sendKeys(SERVICE_ID); + + WebElement firstElement = GeneralUIUtils.getWebElementByTestID(Constants.INSTANCE_ID_FOR_NAME_TEST_ID_PREFIX + SERVICE_NAME, 30); + String filteredId = firstElement.getText(); + Assert.assertTrue(filteredId.equals(SERVICE_ID)); + return filteredId; + } + + private void confirmResultBySubscriber() { + for (int i = 0; i < 10; i++) { + WebElement instanceIdRow = GeneralUIUtils.getWebElementByTestID(Constants.SUBSCRIBER_NAME_TEST_ID_PREFIX + i, 30); + Assert.assertTrue(instanceIdRow.getText().equals(SUBSCRIBER)); + } + } + + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/SearchExistingInstanceTest.java b/vid-automation/src/main/java/vid/automation/test/test/SearchExistingInstanceTest.java index f3261a21a..7f18b2f83 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/SearchExistingInstanceTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/SearchExistingInstanceTest.java @@ -1,23 +1,32 @@ package vid.automation.test.test; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import vid.automation.test.Constants; import vid.automation.test.infra.Click; +import vid.automation.test.infra.Wait; import vid.automation.test.model.User; import vid.automation.test.sections.SearchExistingPage; import vid.automation.test.sections.SideMenu; -import vid.automation.test.services.UsersService; +import vid.automation.test.services.BulkRegistration; +import vid.automation.test.services.SimulatorApi; -import java.io.IOException; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; public class SearchExistingInstanceTest extends VidBaseTestCase { - private UsersService usersService = new UsersService(); + public static final String serviceIdOeWirelineProjectX1 = "7e4f8130-5dee-47c4-8770-1abc5f5ded83"; + public static final String serviceIdOeWirelineProjectYYY1 = "13695dfb-db99-4c2f-905e-fe7bf2fc7b9f"; - public SearchExistingInstanceTest() throws IOException { + @BeforeClass + public void registerToSimulatorAndLogin() { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstanceByOEAndProject(); } - @Test + @Test(groups = { "shouldBeMigratedToWorkWithSimulator" }) private void testSearchExistingInstanceById() throws Exception { User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); @@ -28,19 +37,17 @@ public class SearchExistingInstanceTest extends VidBaseTestCase { } @Test - private void testSearchExistingInstanceByOwningEntitySingleValue() throws Exception { - User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); - relogin(user.credentials); + private void testSearchExistingInstanceByOwningEntitySingleValue() { SearchExistingPage searchExistingPage = new SearchExistingPage(); SideMenu.navigateToSearchExistingPage(); - Click.byId(Constants.EditExistingInstance.SELECT_OWNING_ENTITY_ID); - Thread.sleep(1000); - Click.byText("owning-entity-SDN-RXU4"); + searchExistingPage.searchByOwningEntity("Wireline"); searchExistingPage.clickSubmitButton(); - searchExistingPage.clickEditViewByInstanceId("SDN-RXU4-B-servInstance-E1802"); + GeneralUIUtils.ultimateWait(); + assertTrue(searchExistingPage.checkEditOrViewExistsByInstanceId(serviceIdOeWirelineProjectX1)); + assertTrue(searchExistingPage.checkEditOrViewExistsByInstanceId(serviceIdOeWirelineProjectYYY1)); } - @Test + @Test(groups = { "shouldBeMigratedToWorkWithSimulator" }) private void testSearchExistingInstanceByOwningEntityMultiValue() throws Exception { User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); @@ -50,24 +57,51 @@ public class SearchExistingInstanceTest extends VidBaseTestCase { Thread.sleep(1000); Click.byText("owning-entity-SDN-RXU4"); Click.byText("owning-entity-SDN-LT1"); + searchExistingPage.clickSubmitButton(); searchExistingPage.clickEditViewByInstanceId("SDN-LT1-B-servInstance-E1802"); } @Test - private void testSearchExistingInstanceByProjectSingleValue() throws Exception { + private void testSearchExistingInstanceByProjectSingleValue() { + SearchExistingPage searchExistingPage = new SearchExistingPage(); + SideMenu.navigateToSearchExistingPage(); + searchExistingPage.searchByProject("x1"); + searchExistingPage.clickSubmitButton(); + GeneralUIUtils.ultimateWait(); + assertTrue(searchExistingPage.checkEditOrViewExistsByInstanceId(serviceIdOeWirelineProjectX1)); + assertFalse(searchExistingPage.checkEditOrViewExistsByInstanceId(serviceIdOeWirelineProjectYYY1)); + } + + @Test + private void testSearchExistingInstanceByProjectAndOwningEntity() { + SearchExistingPage searchExistingPage = new SearchExistingPage(); + SideMenu.navigateToSearchExistingPage(); + searchExistingPage.searchByProject("yyy1"); + searchExistingPage.searchByOwningEntity("Wireline"); + searchExistingPage.clickSubmitButton(); + GeneralUIUtils.ultimateWait(); + assertTrue(searchExistingPage.checkEditOrViewExistsByInstanceId(serviceIdOeWirelineProjectYYY1)); + assertFalse(searchExistingPage.checkEditOrViewExistsByInstanceId(serviceIdOeWirelineProjectX1)); + } + + + @Test(groups = { "shouldBeMigratedToWorkWithSimulator" }) + private void testSearchExistingInstanceByProjectWithSpecialCharacters() throws Exception { User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); SearchExistingPage searchExistingPage = new SearchExistingPage(); SideMenu.navigateToSearchExistingPage(); Click.byId(Constants.EditExistingInstance.SELECT_PROJECT_ID); Thread.sleep(1000); - Click.byText("x1"); + Click.byText("VIP(VelocitytoIP)");//must be in DB + Click.byId(Constants.EditExistingInstance.SELECT_PROJECT_ID); searchExistingPage.clickSubmitButton(); - searchExistingPage.clickEditViewByInstanceId("SDN-LT1-B-servInstance-E1802"); + searchExistingPage.clickEditViewByInstanceId("c8a85099-e5a3-4e4d-a75d-afa3e2ed2a94"); } - @Test + + @Test(groups = { "shouldBeMigratedToWorkWithSimulator" }) private void testSearchExistingInstanceByProjectMultiValue() throws Exception { User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); diff --git a/vid-automation/src/main/java/vid/automation/test/test/SubInterfaceTest.java b/vid-automation/src/main/java/vid/automation/test/test/SubInterfaceTest.java new file mode 100644 index 000000000..9c8c0e749 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/SubInterfaceTest.java @@ -0,0 +1,202 @@ +package vid.automation.test.test; + +import com.google.common.collect.ImmutableList; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetRelatedInstanceGroupsByVnfId; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetTenants; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOCreateVNFInstancePost; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.Select; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.FeatureTogglingTest; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.SelectOption; +import vid.automation.test.sections.DrawingBoardPage; +import vid.automation.test.sections.SearchExistingPage; +import vid.automation.test.sections.ViewEditPage; +import vid.automation.test.services.BulkRegistration; +import vid.automation.test.services.SimulatorApi; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNull; +import static vid.automation.test.infra.Features.FLAG_COLLECTION_RESOURCE_SUPPORT; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET; + +@FeatureTogglingTest(FLAG_COLLECTION_RESOURCE_SUPPORT) +public class SubInterfaceTest extends CreateInstanceDialogBaseTest { + + private final ViewEditPage viewEditPage = new ViewEditPage(); + private final String ecompNamingFalseInstanceId = "dc3a893e-0104-4ef6-abfe-6c2932294a3e"; + private final String ecompNamingTrueInstanceId = "dc3a893e-0104-4ef6-abfe-6c2932294a3f"; + + @BeforeClass + protected void registerToSimulator() { + SimulatorApi.clearAll(); + BulkRegistration.createNewServiceInstance("USP VOICE"); + + BulkRegistration.searchExistingVFServiceWithVFCInstanceGroupInstance("Created"); + SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND + , "add_subinterface/get_sdc_catalog_services_vid-test-333.json" + , "add_subinterface/aai_get_services.json" + , "add_subinterface/aai_get_subscribers.json" + , "add_subinterface/aai_get_aic_zones.json" + ); + + final PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest presetAAIGetInstanceGroupsByCloudRegion1 = new PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest("e433710f-9217-458d-a79d-1c7aff376d89", "mtn6", "untraaa"); + final PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest presetAAIGetInstanceGroupsByCloudRegion2 = new PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest("e433710f-9217-458d-a79d-1c7aff376d89", "AAIAIC25", "untraaa"); + + SimulatorApi.registerExpectationFromPresets(ImmutableList.of( + new PresetMSOCreateVNFInstancePost(ecompNamingTrueInstanceId, "6bce7302-70bd-4057-b48e-8d5b99e686ca"), + new PresetMSOCreateVNFInstancePost(ecompNamingFalseInstanceId, "6bce7302-70bd-4057-b48e-8d5b99e686cb"), + new PresetAAIGetTenants(), + presetAAIGetInstanceGroupsByCloudRegion1, + presetAAIGetInstanceGroupsByCloudRegion2, + new PresetMSOOrchestrationRequestGet("IN_PROGRESS"), + new PresetMSOOrchestrationRequestGet("COMPLETE") + ), + APPEND); + + final PresetAAIGetRelatedInstanceGroupsByVnfId getRelatedInstanceGroupsByVnfId = new PresetAAIGetRelatedInstanceGroupsByVnfId("c015cc0f-0f37-4488-aabf-53795fd93cd3"); + SimulatorApi.registerExpectationFromPreset(getRelatedInstanceGroupsByVnfId, APPEND); + + } + + @DataProvider + private Object[][] getServices() { + return new Object[][]{{ecompNamingTrueInstanceId, true}, {ecompNamingFalseInstanceId, false}}; + } + + @Test(dataProvider = "getServices") + public void createSubInterface_validPopupDataAndUIEcompNamingTrue(String serviceUuid, boolean ecompNamingEnabled) { + SearchExistingPage searchExistingPage = new SearchExistingPage(); + + searchExistingPage.goOutFromIframe(); + goToExistingInstanceById(serviceUuid); + + String vnfName = "vDBE 0"; + Assert.assertNotNull(Get.byClassAndText("instanceGroupTreeNode","instance group name")); + GeneralUIUtils.clickOnElementByTestId(Constants.ViewEdit.ADD_VNF_BUTTON_TEST_ID, 60); + GeneralUIUtils.clickOnElementByTestId(Constants.ViewEdit.VNF_OPTION_TEST_ID_PREFIX + vnfName, 60); + + GeneralUIUtils.ultimateWait(); + + searchExistingPage.goToIframe(); + + WebElement instanceNameInput = GeneralUIUtils.getInputElement(Constants.INSTANCE_NAME_SELECT_TESTS_ID); + if (ecompNamingEnabled) { + assertNull(instanceNameInput); + } else { + instanceNameInput.sendKeys("New Name"); + } + SelectOption.byTestIdAndVisibleText("VIRTUAL USP", Constants.ViewEdit.PRODUCT_FAMILY_SELECT_TESTS_ID); + SelectOption.byTestIdAndVisibleText("AAIAIC25", Constants.ViewEdit.LCP_REGION_SELECT_TESTS_ID); + SelectOption.byTestIdAndVisibleText("USP-SIP-IC-24335-T-01", Constants.ViewEdit.TENANT_SELECT_TESTS_ID); + SelectOption.byTestIdAndVisibleText("UUUAIAAI-YYY1", Constants.ViewEdit.AIC_ZONE_TEST_ID); + SelectOption.byTestIdAndVisibleText("plat1", Constants.OwningEntity.PLATFORM_SELECT_TEST_ID); + SelectOption.byTestIdAndVisibleText("ecomp", Constants.OwningEntity.LOB_SELECT_TEST_ID); + SelectOption.byTestIdAndVisibleText("Rollback", Constants.SUPPRESS_ROLLBACK_SELECT_TESTS_ID); + + + checkModelItemLabelAndValue(Constants.VlanTagging.MODEL_ITEM_LABEL_SERVICE_INSTANCENAME, "Service Instance Name", + Constants.VlanTagging.MODEL_ITEM_VALUE_SERVICE_INSTANCENAME, "vid-test-444"); + checkModelItemLabelAndValue(Constants.VlanTagging.MODEL_ITEM_LABEL_MODEL_INVARIANT_UUID, "Model Invariant UUID", + Constants.VlanTagging.MODEL_ITEM_VALUE_MODEL_INVARIANT_UUID, "fcdf49ce-6f0b-4ca2-b676-a484e650e734"); + checkModelItemLabelAndValue(Constants.VlanTagging.MODEL_ITEM_LABEL_MODEL_VERSION, "Model Version", + Constants.VlanTagging.MODEL_ITEM_VALUE_MODEL_VERSION, "0.2"); + checkModelItemLabelAndValue(Constants.VlanTagging.MODEL_ITEM_LABEL_MODEL_UUID, "Model UUID", + Constants.VlanTagging.MODEL_ITEM_VALUE_MODEL_UUID, "61535073-2e50-4141-9000-f66fea69b433"); + checkModelItemLabelAndValue(Constants.VlanTagging.MODEL_ITEM_LABEL_CUSTOMIZATION_UUID, "Model Customization UUID", + Constants.VlanTagging.MODEL_ITEM_VALUE_CUSTOMIZATION_UUID, "882e5dcb-ba9f-4766-8cde-e326638107db"); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_LABEL_GROUP_NAME).stream() + .map(WebElement::getText).collect(Collectors.toList()), Arrays.asList("Group Name", "Group Name")); + + + List<String> rightSideGroupsNames = //Will be used here AND in step 2 to check against the left side of the page + Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_VALUE_GROUP_NAME).stream() + .map(WebElement::getText).collect(Collectors.toList()); + + assertEquals(rightSideGroupsNames, Arrays.asList("untr_group", "oam_group")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_LABEL_NETWORK_COLLECTION_FUNCTION) + .stream().map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("Network Collection Function", "Network Collection Function")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_VALUE_NETWORK_COLLECTION_FUNCTION) + .stream().map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("untraaa", "untraaa")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_LABEL_INSTANCE_GROUP_FUNCTION) + .stream().map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("VFC Instance Group Function", "VFC Instance Group Function")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_VALUE_INSTANCE_GROUP_FUNCTION) + .stream().map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("", "")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_LABEL_PARENT_PORT_ROLE).stream() + .map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("Parent Port Role", "Parent Port Role")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_VALUE_PARENT_PORT_ROLE).stream() + .map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("untr", "untr")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_LABEL_SUBINTERFACE_ROLE).stream() + .map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("Sub Interface Role", "Sub Interface Role")); + + assertEquals(Get.multipleElementsByTestId(Constants.VlanTagging.MODEL_ITEM_VALUE_SUBINTERFACE_ROLE).stream() + .map(WebElement::getText).collect(Collectors.toList()), + Arrays.asList("untr", "untr")); + + Click.byTestId(Constants.ConfigurationCreation.NEXT_BUTTON_TEST_ID); + + compareTwoGroups(Get.multipleElementsByTestId("groupLabel"), rightSideGroupsNames); + + List<WebElement> leftSideGroups = Get.multipleElementsByTestId("groupTestId"); + + GeneralUIUtils.ultimateWait(); + + for (WebElement element : leftSideGroups) { + (new Select(element)).selectByIndex(1); + } + + Click.byTestId(Constants.ConfigurationCreation.NEXT_BUTTON_TEST_ID); + searchExistingPage.goOutFromIframe(); + assertSuccessfulServiceInstanceCreation(); + viewEditPage.clickCommitCloseButton(); + } + + private void compareTwoGroups(List<WebElement> leftSideGroups, List<String> rightSideGroupsNames) { + assertEquals(leftSideGroups.size(), rightSideGroupsNames.size()); + + //converting list of web elements to list of strings + ArrayList<String> leftSideGroupsNames = new ArrayList<>(); + for (WebElement element : leftSideGroups) { + leftSideGroupsNames.add(element.getText()); + } + assertEquals(leftSideGroupsNames, rightSideGroupsNames); + } + + private void checkModelItemLabelAndValue(String labelId, String labelValue, String textID, String textValue) { + assertThat(Get.byTestId(labelId).getText(), is(equalTo(labelValue))); + assertThat(Get.byTestId(textID).getText(), is(equalTo(textValue))); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java index d4e09be2d..bcdb73d3e 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java +++ b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java @@ -1,30 +1,61 @@ package vid.automation.test.test; +import com.att.automation.common.report_portal_integration.annotations.Step; +import com.att.automation.common.report_portal_integration.listeners.ReportPortalListener; +import com.att.automation.common.report_portal_integration.screenshots.WebDriverScreenshotsProvider; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableList; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; -import org.openecomp.sdc.ci.tests.datatypes.Configuration; +import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset; +import org.opencomp.simulator.presetGenerator.presets.aai.*; +import org.opencomp.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstancePost; +import org.opencomp.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet; +import org.opencomp.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet; +import org.opencomp.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet; import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest; import org.openecomp.sdc.ci.tests.utilities.FileHandling; import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebElement; +import org.testng.ITestContext; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeSuite; +import org.testng.annotations.Listeners; +import org.testng.annotations.Test; import vid.automation.test.Constants; -import vid.automation.test.infra.Click; -import vid.automation.test.infra.SelectOption; -import vid.automation.test.model.*; +import vid.automation.test.infra.*; +import vid.automation.test.model.Credentials; +import vid.automation.test.model.User; import vid.automation.test.sections.*; +import vid.automation.test.services.CategoryParamsService; +import vid.automation.test.services.SimulatorApi; +import vid.automation.test.services.UsersService; +import vid.automation.test.utils.DB_CONFIG; +import vid.automation.test.utils.TestConfigurationHelper; import java.io.File; +import java.lang.reflect.Method; +import java.sql.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import static org.hamcrest.core.Is.is; +import static org.testng.Assert.assertEquals; import static org.testng.AssertJUnit.fail; +@Listeners(com.att.automation.common.report_portal_integration.listeners.ReportPortalListener.class) +public class VidBaseTestCase extends SetupCDTest{ -public class VidBaseTestCase extends SetupCDTest { - - static String currentUserId = null; + protected final UsersService usersService = new UsersService(); + protected final CategoryParamsService categoryParamsService = new CategoryParamsService(); @Override protected UserCredentials getUserCredentials() { @@ -36,7 +67,8 @@ public class VidBaseTestCase extends SetupCDTest { configFile = new File( basePath + File.separator + "conf" + File.separator + "credentials"); } Credentials credentials = mapper.readValue(configFile, Credentials.class); - return new UserCredentials(credentials.userId, credentials.password, "", "", ""); + User user = usersService.getUser(credentials.userId); + return new UserCredentials(user.credentials.userId, user.credentials.password, credentials.userId, "", ""); } catch (Exception e) { e.printStackTrace(); return null; @@ -46,16 +78,32 @@ public class VidBaseTestCase extends SetupCDTest { @Override protected org.openecomp.sdc.ci.tests.datatypes.Configuration getEnvConfiguration() { + return TestConfigurationHelper.getEnvConfiguration(); + } + + @BeforeMethod(alwaysRun = true) + public void setBrowserBeforeTestIfDataProvider(Method method, ITestContext context, Object[] params) { + // Hack to overcome limitations of SetupCDTest.setBrowserBeforeTest(java.lang.reflect.Method, org.testng.ITestContext) + // that skips over dataProvided methods + boolean emptyDataProvider = method.getAnnotation(Test.class).dataProvider().isEmpty(); + if (!emptyDataProvider) { + final String testName = method.getName(); + final String listOfParams = Arrays.deepToString(params) + .replace('[', '(') + .replace(']', ')') + .replaceAll("[\\\\/:*?\"<>|]", "_"); + + setLog(testName+listOfParams); + } + } + + @BeforeSuite(alwaysRun = true) + public void screenShotsForReportPortal(){ try { - String envUrl = System.getProperty("ENV_URL"); - boolean isCustomLogin = Boolean.valueOf(System.getProperty("CUSTOM_LOGIN")); - Configuration configuration = new org.openecomp.sdc.ci.tests.datatypes.Configuration(envUrl, isCustomLogin); - //configuration.setBrowser("chorme"); - return configuration; - //return new org.openecomp.sdc.ci.tests.datatypes.Configuration(envUrl, isCustomLogin); + ReportPortalListener.setScreenShotsProvider(new WebDriverScreenshotsProvider(getDriver())); + System.out.println("Called to ReportPortalListener to set ScreenShotsProvider"); } catch (Exception e) { e.printStackTrace(); - return null; } } @@ -64,12 +112,69 @@ public class VidBaseTestCase extends SetupCDTest { LoginExternalPage.performLoginExternal(userCredentials); } + static public class ModelInfo { + public final String modelVersionId; + public final String modelInvariantId; + public final String zipFileName; + + public ModelInfo(String modelVersionId, String modelInvariantId, String zipFileName) { + this.modelVersionId = modelVersionId; + this.modelInvariantId = modelInvariantId; + this.zipFileName = zipFileName; + } + } + + protected void registerExpectationForLegacyServiceDeployment(String modelVersionId, String modelInvariantId, String zipFileName, String subscriberId) { + registerExpectationForServiceDeployment(ServiceDeployment.LEGACY, ImmutableList.of(new ModelInfo(modelVersionId,modelInvariantId,zipFileName)), subscriberId); + } + + private enum ServiceDeployment {ASYNC, LEGACY} + + protected void registerExpectationForServiceDeployment(ServiceDeployment serviceDeploymentOnMsoExpectations, List<ModelInfo> modelInfoList, String subscriberId) { + List<BasePreset> presets = new ArrayList<>(Arrays.asList( + new PresetGetSessionSlotCheckIntervalGet(), + new PresetAAIGetSubscribersGet(), + new PresetAAIGetServicesGet(), + new PresetAAIGetSubDetailsGet(subscriberId), + new PresetAAIPostNamedQueryForViewEdit("f8791436-8d55-4fde-b4d5-72dd2cf13cfb"), + new PresetAAICloudRegionAndSourceFromConfigurationPut("9533-config-LB1113", "myRandomCloudRegionId"), + new PresetAAIGetPortMirroringSourcePorts("9533-config-LB1113", "myRandomInterfaceId", "i'm a port", true), + new PresetAAIGetNetworkZones(), + new PresetAAIGetTenants(), + new PresetAAIServiceDesignAndCreationPut(modelInfoList.stream().map( + x-> new PresetAAIServiceDesignAndCreationPut.ServiceModelIdentifiers(x.modelVersionId, x.modelInvariantId)) + .collect(Collectors.toList())) + )); + + modelInfoList.forEach(modelInfo -> { + presets.add(new PresetSDCGetServiceMetadataGet(modelInfo.modelVersionId, modelInfo.modelInvariantId, modelInfo.zipFileName)); + presets.add(new PresetSDCGetServiceToscaModelGet(modelInfo.modelVersionId, modelInfo.zipFileName)); + }); + + switch (serviceDeploymentOnMsoExpectations) { + case ASYNC: + presets.add(new PresetAAISearchNodeQueryEmptyResult()); + presets.add(new PresetMSOCreateServiceInstanceGen2()); + presets.add(new PresetMSOOrchestrationRequestGet("IN_PROGRESS")); + break; + case LEGACY: + presets.add(new PresetMSOCreateServiceInstancePost()); + presets.add(new PresetMSOOrchestrationRequestGet()); + break; + } + + SimulatorApi.registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET); + } + protected void relogin(Credentials credentials) throws Exception { - if (!credentials.userId.equals(currentUserId)) { - currentUserId = credentials.userId; + // `getWindowTest().getPreviousUser()` is SetupCDTest's state of previous user used + if (!credentials.userId.equals(getWindowTest().getPreviousUser())) { UserCredentials userCredentials = new UserCredentials(credentials.userId, credentials.password, "", "", ""); reloginWithNewRole(userCredentials); + } else { + System.out.println(String.format("VidBaseTestCase.relogin() " + + "-> '%s' is already logged in, so skipping", credentials.userId)); } } @@ -81,12 +186,28 @@ public class VidBaseTestCase extends SetupCDTest { * @return true, if all dropdown options disabled state is according to the permissions. */ protected void assertDropdownPermittedItemsByValue(ArrayList<String> permittedItems, String dropdownOptionsClassName) { + assertDropdownPermittedItemsByValue(permittedItems, dropdownOptionsClassName, "value"); + } + + protected void assertDropdownPermittedItemsByLabel(ArrayList<String> permittedItems, String dropdownOptionsClassName) { + assertDropdownPermittedItemsByValue(permittedItems, dropdownOptionsClassName, "label"); + } + + /** + * Validates that permitted options are enabled and others are disabled. + * + * @param permittedItems the list of permitted items. + * @param dropdownOptionsClassName the class name of the specific dropdown options. + * @param attribute + * @return true, if all dropdown options disabled state is according to the permissions. + */ + private void assertDropdownPermittedItemsByValue(ArrayList<String> permittedItems, String dropdownOptionsClassName, String attribute) { GeneralUIUtils.ultimateWait(); List<WebElement> optionsList = GeneralUIUtils.getWebElementsListBy(By.className(dropdownOptionsClassName), 30); for (WebElement option : optionsList) { - String optionValue = option.getAttribute("value"); + String optionValue = option.getAttribute(attribute); if ((option.isEnabled() && !permittedItems.contains(optionValue)) || !option.isEnabled() && permittedItems.contains(optionValue)) { fail(Constants.DROPDOWN_PERMITTED_ASSERT_FAIL_MESSAGE); @@ -127,69 +248,26 @@ public class VidBaseTestCase extends SetupCDTest { GeneralUIUtils.ultimateWait(); } - protected void addVNF(String name, String lcpRegion, String tenant, String suppressRollback, - String legacyRegion, String productFamily, ArrayList<String> permittedTenants) throws InterruptedException { - ViewEditPage viewEditPage = new ViewEditPage(); - - viewEditPage.selectNodeInstanceToAdd(name); - viewEditPage.generateAndSetInstanceName(Constants.ViewEdit.VNF_INSTANCE_NAME_PREFIX); - viewEditPage.selectProductFamily(productFamily); - viewEditPage.selectLCPRegion(lcpRegion); - - assertDropdownPermittedItemsByValue(permittedTenants, Constants.ViewEdit.TENANT_OPTION_CLASS); - viewEditPage.selectTenant(tenant); - - Click.onFirstSelectOptionById(Constants.OwningEntity.PLATFORM_SELECT_TEST_ID); - SelectOption.selectFirstTwoOptionsFromMultiselectById(Constants.OwningEntity.LOB_SELECT_TEST_ID); - viewEditPage.selectSuppressRollback(suppressRollback); - - viewEditPage.setLegacyRegion(legacyRegion); - - viewEditPage.clickConfirmButton(); - assertSuccessfulVNFCreation(); - viewEditPage.clickCloseButton(); - GeneralUIUtils.ultimateWait(); - } - - protected void addVFModule(String name, String lcpRegion, String tenant, String suppressRollback, + protected void addNetwork(Map<String, String> metadata,String instanceName, String name, String lcpRegion, String productFamily,String platform, String lineOfBusiness, String tenant, String suppressRollback, String legacyRegion, ArrayList<String> permittedTenants) { ViewEditPage viewEditPage = new ViewEditPage(); - viewEditPage.selectVolumeGroupToAdd(name); - viewEditPage.generateAndSetInstanceName(Constants.ViewEdit.VF_MODULE_INSTANCE_NAME_PREFIX); - viewEditPage.selectLCPRegion(lcpRegion); - - assertDropdownPermittedItemsByValue(permittedTenants, Constants.ViewEdit.TENANT_OPTION_CLASS); - viewEditPage.selectTenant(tenant); - - viewEditPage.selectSuppressRollback(suppressRollback); - - viewEditPage.setLegacyRegion(legacyRegion); - - viewEditPage.clickConfirmButton(); - assertSuccessfulVFModuleCreation(); - viewEditPage.clickCloseButton(); - GeneralUIUtils.ultimateWait(); - } - - protected void addVolumeGroup(String name, String lcpRegion, String tenant, String suppressRollback, - String legacyRegion, ArrayList<String> permittedTenants) { - ViewEditPage viewEditPage = new ViewEditPage(); - - viewEditPage.selectVolumeGroupToAdd(name); - viewEditPage.generateAndSetInstanceName(Constants.ViewEdit.VOLUME_GROUP_INSTANCE_NAME_PREFIX); + viewEditPage.selectNetworkToAdd(name); + assertModelInfo(metadata, false); + viewEditPage.setInstanceName(instanceName); viewEditPage.selectLCPRegion(lcpRegion); - + viewEditPage.selectProductFamily(productFamily); + viewEditPage.selectLineOfBusiness(lineOfBusiness); assertDropdownPermittedItemsByValue(permittedTenants, Constants.ViewEdit.TENANT_OPTION_CLASS); viewEditPage.selectTenant(tenant); viewEditPage.selectSuppressRollback(suppressRollback); - - viewEditPage.setLegacyRegion(legacyRegion); + viewEditPage.selectPlatform(platform); + //viewEditPage.setLegacyRegion(legacyRegion); viewEditPage.clickConfirmButton(); - assertSuccessfulVolumeGroupCreation(); + viewEditPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); viewEditPage.clickCloseButton(); GeneralUIUtils.ultimateWait(); } @@ -214,14 +292,46 @@ public class VidBaseTestCase extends SetupCDTest { Assert.assertTrue(Constants.ViewEdit.VF_MODULE_CREATION_FAILED_MESSAGE, byText); } + @Step("${method}: ${instanceUUID}") void goToExistingInstanceById(String instanceUUID) { + SearchExistingPage searchExistingPage = searchExistingInstanceById(instanceUUID); + assertViewEditButtonState( Constants.VIEW_EDIT_BUTTON_TEXT, instanceUUID); + + searchExistingPage.clickEditViewByInstanceId(instanceUUID); + GeneralUIUtils.ultimateWait(); + } + + void searchForExistingInstanceByIdReadonlyMode(String instanceUUID) { + searchExistingInstanceById(instanceUUID); + assertViewEditButtonState( Constants.VIEW_BUTTON_TEXT, instanceUUID); + } + + SearchExistingPage searchExistingInstanceById(String instanceUUID){ SearchExistingPage searchExistingPage = new SearchExistingPage(); SideMenu.navigateToSearchExistingPage(); searchExistingPage.searchForInstanceByUuid(instanceUUID); - assertViewEditButtonState( Constants.VIEW_EDIT_BUTTON_TEXT, instanceUUID); + return searchExistingPage; + } + + + void goToExistingInstanceByIdNoWait(String instanceUUID) { + SearchExistingPage searchExistingPage = searchExistingInstanceById(instanceUUID); searchExistingPage.clickEditViewByInstanceId(instanceUUID); } + void resumeVFModule(String vfModuleName, String lcpRegion, String tenant, String legacyRegion, ArrayList<String> permittedTenants){ + ViewEditPage viewEditPage = new ViewEditPage(); + viewEditPage.clickResumeButton(vfModuleName); + viewEditPage.selectLCPRegion(lcpRegion); + assertDropdownPermittedItemsByValue(permittedTenants, Constants.ViewEdit.TENANT_OPTION_CLASS); + viewEditPage.selectTenant(tenant); + viewEditPage.setLegacyRegion(legacyRegion); + viewEditPage.clickConfirmButtonInResumeDelete(); + assertSuccessfulVFModuleCreation(); + viewEditPage.clickCommitCloseButton(); + GeneralUIUtils.ultimateWait(); + } + void goToExistingInstanceByName(String instanceName) { SearchExistingPage searchExistingPage = new SearchExistingPage(); SideMenu.navigateToSearchExistingPage(); @@ -230,6 +340,176 @@ public class VidBaseTestCase extends SetupCDTest { String instanceId = instanceIdRow.getText(); assertViewEditButtonState( Constants.VIEW_EDIT_BUTTON_TEXT, instanceId); searchExistingPage.clickEditViewByInstanceId(instanceId); + GeneralUIUtils.ultimateWait(); + } + + String confirmFilterById(String instanceName, String instanceUUID) { + WebElement filter = GeneralUIUtils.getWebElementByTestID(Constants.FILTER_SUBSCRIBER_DETAILS_ID, 30); + filter.sendKeys(instanceUUID); + + WebElement firstElement = GeneralUIUtils.getWebElementByTestID(Constants.INSTANCE_ID_FOR_NAME_TEST_ID_PREFIX + instanceName, 30); + String filteredId = firstElement.getText(); + Assert.assertTrue(filteredId.equals(instanceUUID)); + return filteredId; + } + + void goToExistingInstanceBySubscriber(String subscriberName,String instanceName,String instanceUUID) { + SearchExistingPage searchExistingPage = new SearchExistingPage(); + SideMenu.navigateToSearchExistingPage(); + SelectOption.byIdAndVisibleText(Constants.EditExistingInstance.SELECT_SUBSCRIBER, subscriberName); + searchExistingPage.clickSubmitButton(); + GeneralUIUtils.ultimateWait(); + confirmFilterById(instanceName, instanceUUID); + searchExistingPage.clickEditViewByInstanceId(instanceUUID); + GeneralUIUtils.ultimateWait(); + } + + void selectMsoTestApiOption(String msoTestApiOption) { + final String id = "selectTestApi"; + final String sectionId = "selectTestApiSection"; + + SideMenu.navigateToWelcomePage(); + + if (Exists.byId(sectionId)) { + final JavascriptExecutor javascriptExecutor = (JavascriptExecutor) GeneralUIUtils.getDriver(); + javascriptExecutor.executeScript( + "document.getElementById('" + sectionId + "').style.visibility = 'inherit';" + ); + + if (null == SelectOption.byIdAndVisibleText(id, msoTestApiOption)) { + Assert.fail("selectMsoTestApiOptionIfPossible couldnt apply " + msoTestApiOption); + } + } + } + + protected void assertModelInfo(Map<String, String> expectedMetadata, boolean withPrefix) { + Wait.angularHttpRequestsLoaded(); + GeneralUIUtils.ultimateWait(); + for (Map.Entry<String, String> item: expectedMetadata.entrySet()) { + assertMetadataItem(item.getKey(), item.getValue(), withPrefix); + } } + protected <T> void setNewInstance_leftPane_assertModelDataCorrect(Map<String, String> modelKeyToDataTestsIdMap, String prefix, T model) { + modelKeyToDataTestsIdMap.forEach((fieldName, dataTestsId) -> { + WebElement webElement = Get.byTestId(prefix + dataTestsId); + assertEquals(webElement.getText(), getServiceFieldByName(fieldName, model)); + }); + } + + protected <T> void setNewInstance_leftPane_assertModelLabelsVisibilityCorrect(Map<String, String> modelKeyToDataTestsIdMap, String prefix, T model) { + modelKeyToDataTestsIdMap.forEach((fieldName, dataTestsId) -> { + WebElement webElement = Get.byTestId(prefix + dataTestsId); + String field = getServiceFieldByName(fieldName, model); + assertEquals(webElement.isDisplayed(), !(StringUtils.isEmpty(field)) , dataTestsId + " label shouldn't appear when " + fieldName + " is empty"); + }); + } + + private <T> String getServiceFieldByName(String name, T model) { + try { + return model.getClass().getField(name).get(model).toString(); + } catch (IllegalAccessException | NoSuchFieldException e) { + throw new RuntimeException(e); + } + } + + private void assertMetadataItem(String keyTestId, String value, boolean withPrefix) { + String elementTestId = (withPrefix ? Constants.ServiceModelInfo.INFO_TEST_ID_PREFIX:"") + keyTestId; + String infoItemText = GeneralUIUtils.getWebElementByTestID(elementTestId, 60).getText(); + Assert.assertThat(String.format(Constants.ServiceModelInfo.METADETA_ERROR_MESSAGE, elementTestId), infoItemText, is(value)); + } + + public DeployMacroDialogBase getMacroDialog(){ + if (Features.FLAG_ASYNC_INSTANTIATION.isActive()) { + VidBasePage vidBasePage =new VidBasePage(); + vidBasePage.goToIframe(); + return new DeployMacroDialog(); + } + else + return new DeployMacroDialogOld(); + } + + protected void loadServicePopup(String zipFileName, String modelVersionId ) { + String modelInvariantId = "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0"; + String subscriberId = "e433710f-9217-458d-a79d-1c7aff376d89"; + registerExpectationForServiceDeployment( + ServiceDeployment.ASYNC, + ImmutableList.of( + new ModelInfo(modelVersionId, modelInvariantId, zipFileName), + new ModelInfo("f4d84bb4-a416-4b4e-997e-0059973630b9", "598e3f9e-3244-4d8f-a8e0-0e5d7a29eda9", "service-AdiodVmxVpeBvService488-csar-annotations.zip") + ), + subscriberId); + SideMenu.navigateToBrowseASDCPage(); + GeneralUIUtils.ultimateWait(); + loadServicePopupOnBrowseASDCPage(modelVersionId); + } + + protected void loadServicePopupOnBrowseASDCPage(String modelVersionId ) { + DeployMacroDialog deployMacroDialog = new DeployMacroDialog(); + deployMacroDialog.goOutFromIframe(); + deployMacroDialog.clickDeployServiceButtonByServiceUUID(modelVersionId); + deployMacroDialog.goToIframe(); + GeneralUIUtils.ultimateWait(); + Wait.byText("Model version"); + } + + public void assertSetButtonDisabled(String buttonTestId) { + WebElement webElement = Get.byTestId(buttonTestId); + org.testng.Assert.assertFalse(webElement.isEnabled(), "Set button should be disabled if not all mandatory fields are field."); + } + + public void assertSetButtonEnabled(String buttonTestId) { + + WebElement webElement = Get.byTestId(buttonTestId); + org.testng.Assert.assertTrue(webElement.isEnabled(), "Set button should be enabled if all mandatory fields are field."); + } + + public void assertElementDisabled(String id) { + WebElement webElement = Get.byId(id); + assert webElement != null; + org.testng.Assert.assertFalse(webElement.isEnabled(), "field should be disabled if the field it depends on was not selected yet."); + } + + protected int getUserIdNumberFromDB(User user) { + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + Statement stmt = connection.createStatement(); + ResultSet userIdResultSet; + userIdResultSet = stmt.executeQuery("SELECT USER_ID FROM fn_user where LOGIN_ID = '" + user.credentials.userId + "'"); + Assert.assertTrue("Exactly one user should be found", userIdResultSet.next()); + int userId = userIdResultSet.getInt("USER_ID"); + Assert.assertFalse("There are more than one user for id " + userId, userIdResultSet.next()); + return userId; + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + } + + protected List<Integer> getRoleIDsAssignedToUser(int userId) { + try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) { + Statement stmt = connection.createStatement(); + ResultSet userRolesResultSet; + userRolesResultSet = stmt.executeQuery("SELECT ROLE_ID FROM fn_user_role where USER_ID = '" + userId + "' order by ROLE_ID"); + + List<Integer> userRoles = new ArrayList<Integer>(); + while (userRolesResultSet.next()) { + userRoles.add(userRolesResultSet.getInt("ROLE_ID")); + } + return userRoles; + } catch (SQLException e) { + throw new IllegalStateException("Cannot connect the database!", e); + } + } + + protected void navigateToViewEditPageOfuspVoiceVidTest444(String aaiModelVersionId) { + VidBasePage vidBasePage = new VidBasePage(); + SideMenu.navigateToWelcomePage(); + vidBasePage.navigateTo("serviceModels.htm#/instantiate?" + + "subscriberId=e433710f-9217-458d-a79d-1c7aff376d89&" + + "subscriberName=USP%20VOICE&" + + "serviceType=VIRTUAL%20USP&" + + "serviceInstanceId=3f93c7cb-2fd0-4557-9514-e189b7b04f9d&" + + "aaiModelVersionId=" + aaiModelVersionId + "&" + + "isPermitted=true"); + GeneralUIUtils.ultimateWait(); + } } diff --git a/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestWithoutLogin.java b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestWithoutLogin.java new file mode 100644 index 000000000..9dab455cc --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestWithoutLogin.java @@ -0,0 +1,19 @@ +package vid.automation.test.test; + +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.openecomp.sdc.ci.tests.execute.setup.DriverFactory; +import vid.automation.test.utils.TestConfigurationHelper; + +public abstract class VidBaseTestWithoutLogin extends DriverFactory { + + @Override + protected UserCredentials getUserCredentials() { + return null; + } + + @Override + protected org.openecomp.sdc.ci.tests.datatypes.Configuration getEnvConfiguration() { + + return TestConfigurationHelper.getEnvConfiguration(); + } +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/ViewEditServiceInstanceTest.java b/vid-automation/src/main/java/vid/automation/test/test/ViewEditServiceInstanceTest.java index f38433bde..d64b6b18c 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/ViewEditServiceInstanceTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/ViewEditServiceInstanceTest.java @@ -1,68 +1,193 @@ package vid.automation.test.test; +import com.google.common.collect.ImmutableMap; +import org.hamcrest.MatcherAssert; import org.junit.Assert; import org.junit.Before; +import org.opencomp.simulator.presetGenerator.presets.aai.PresetAAIGetNetworkCollectionDetails; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; import org.openqa.selenium.WebElement; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import vid.automation.test.Constants; -import vid.automation.test.infra.Exists; -import vid.automation.test.infra.Get; -import vid.automation.test.infra.Wait; +import vid.automation.test.infra.*; import vid.automation.test.model.User; +import vid.automation.test.sections.VidBasePage; import vid.automation.test.sections.ViewEditPage; import vid.automation.test.services.BulkRegistration; import vid.automation.test.services.SimulatorApi; -import vid.automation.test.services.UsersService; -import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.Arrays; import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.apache.logging.log4j.core.util.Assert.isNonEmpty; +import static org.hamcrest.Matchers.equalTo; +import static org.testng.AssertJUnit.assertEquals; +import static vid.automation.test.infra.Features.FLAG_COLLECTION_RESOURCE_SUPPORT; +import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND; public class ViewEditServiceInstanceTest extends VidBaseTestCase { private ViewEditPage viewEditPage = new ViewEditPage(); - private UsersService usersService = new UsersService(); + VidBasePage vidBasePage =new VidBasePage(); private String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"; - private String serviceInstanceId2 ="f36f5734-e9df-4fbf-9f35-61be13f028a1"; + private String crServiceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7testCR"; + private String serviceInstanceId2 ="c187e9fe-40c3-4862-b73e-84ff056205f6"; private final String DEACTIVATE_ACTION = "deactivate"; private final String ACTIVATE_ACTION = "activate"; private List<String> pnfs = Arrays.asList("SANITY6785cce9", "tesai371ve2"); + private final String serviceInstanceIdeWithoutModelVerId ="9caf5581-40ab-47be-b1f1-909a87724add"; + private final String crNetworkText ="NETWORK INSTANCE GROUP: l3network-id-rs804s | ROLE: HngwProtectedOam.OAM | TYPE: Tenant_Layer_3 | # OF NETWORKS: 3"; + private final String crCollectionText ="COLLECTION: collection-name | TYPE: L3-NETWORK"; + private final String crInfoText = "\"requestState\": \"COMPLETE\""; + SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss"); + static final String LCP_REGION = "mtn6"; + static final String TENANT = "bae71557c5bb4d5aac6743a4e5f1d054"; + - public ViewEditServiceInstanceTest() throws IOException { } + /////////////////////////////////////////////// + /// Activate / Deactivate service instance /// + ////////////////////////////////////////////// + @FeatureTogglingTest(value = FLAG_COLLECTION_RESOURCE_SUPPORT) @Test - public void testGetAssociatedPnfsForServiceInstance() { + public void testViewEditCRServiceInstance()throws Exception { SimulatorApi.clearAll(); - BulkRegistration.searchExistingServiceInstance(); - BulkRegistration.getAssociatedPnfs(); + BulkRegistration.searchExistingCRServiceInstance("Created"); + BulkRegistration.activateServiceInstance(ACTIVATE_ACTION); + final PresetAAIGetNetworkCollectionDetails presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetails(crServiceInstanceId); + SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, APPEND); + goToExistingInstanceById(crServiceInstanceId); + WebElement webElement = Get.byTestId(Constants.ViewEdit.COLLECTIONDIV); + Assert.assertNotNull(webElement); + Assert.assertEquals(webElement.getText(), crCollectionText); + webElement = Get.byTestId(Constants.ViewEdit.COLLECTIONNETWORKDIV); + Assert.assertNotNull(webElement); + Assert.assertEquals(webElement.getText(), crNetworkText); + viewEditPage.clickInfoButton(); + webElement = Get.byTestId(Constants.ViewEdit.SERVICE_INSTANCE_ID); + Assert.assertEquals(webElement.getText(), crServiceInstanceId); + webElement = Get.byTestId(Constants.ViewEdit.DETAILS_LOG); + Assert.assertTrue(webElement.getText().contains(crInfoText)); + webElement = Get.byTestId(Constants.ViewEdit.DETAILS_CLOSE_BTN); + webElement.click(); + viewEditPage.clickDeleteButton(); + } - goToExistingInstanceById(serviceInstanceId); - for (String pnf: pnfs) { - viewEditPage.getPnf(pnf); - } + private void deleteInstance(String deleteButtonId, String successMessage) { + navigateToViewEditPageOfuspVoiceVidTest444("7a6ee536-f052-46fa-aa7e-2fca9d674c44"); + Click.byTestId(deleteButtonId); + viewEditPage.selectLCPRegion(LCP_REGION); + viewEditPage.selectTenant(TENANT); + vidBasePage.clickConfirmButtonInResumeDelete(); + viewEditPage.assertMsoRequestModal(successMessage); + viewEditPage.clickCommitCloseButton(); + GeneralUIUtils.ultimateWait(); } @Test - public void testPnfsNotExistForServiceInstance() { + public void deleteVolumeGroupInstance_deleteDialogAppears_msoResponseIsOk() { SimulatorApi.clearAll(); - BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.deleteExistingVolumeGroupInstance("CREATED"); + deleteInstance(Constants.ViewEdit.DELETE_VNF_VOLUME_GROUP_BUTTON_TEST_ID, Constants.ViewEdit.VOLUME_GROUP_DELETED_SUCCESSFULLY_TEXT); + } - goToExistingInstanceById(serviceInstanceId); - assertNoPnfExists(); + @Test + public void deleteVfModuleInstance_deleteDialogAppears_msoResponseIsOk() { + SimulatorApi.clearAll(); + BulkRegistration.deleteExistingVfModuleInstance("CREATED"); + deleteInstance(Constants.ViewEdit.DELETE_VF_MODULE_BUTTON_TEST_ID + "aa", Constants.ViewEdit.VF_MODULE_DELETED_SUCCESSFULLY_TEXT); } + @Test - public void testActivateServiceInstance()throws Exception { + public void deleteNetworkInstance_deleteDialogAppears_msoResponseIsOk() { SimulatorApi.clearAll(); - BulkRegistration.searchExistingServiceInstance("Created"); + BulkRegistration.deleteExistingNetworkInstance("CREATED"); + deleteInstance(Constants.ViewEdit.DELETE_NETWORK_BUTTON_TEST_ID, Constants.ViewEdit.VL_DELETED_SUCCESSFULLY_TEXT); + } + + @Test + public void deleteVnfInstance_deleteDialogAppears_msoResponseIsOk() { + SimulatorApi.clearAll(); + BulkRegistration.deleteExistingVnfInstance("CREATED"); + deleteInstance(Constants.ViewEdit.DELETE_VNF_BUTTON_TEST_ID,Constants.ViewEdit.VNF_DELETED_SUCCESSFULLY_TEXT); + } + + @Test + public void deleteServiceInstance_deleteDialogAppears_msoResponseIsOk() { + SimulatorApi.clearAll(); + BulkRegistration.deleteExistingServiceInstance("ACTIVE"); + navigateToViewEditPageOfuspVoiceVidTest444("7a6ee536-f052-46fa-aa7e-2fca9d674c44"); + viewEditPage.clickDeleteButton(); + vidBasePage.clickConfirmButtonInResumeDelete(); + viewEditPage.assertMsoRequestModal(Constants.ViewEdit.SERVICE_DELETED_SUCCESSFULLY_TEXT); + viewEditPage.clickCommitCloseButton(); + GeneralUIUtils.ultimateWait(); + } + + @Test(dataProvider = "serviceStatusesAndExpectedResults") + public void testActivateServiceInstanceTransportType(String orchStatus) { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstance(orchStatus); BulkRegistration.activateServiceInstance(ACTIVATE_ACTION); goToExistingInstanceById(serviceInstanceId); - viewEditPage.assertButtonState(Constants.ViewEdit.ACTIVATE_BUTTON_TEST_ID,true); + viewEditPage.assertButtonState(Constants.ViewEdit.ACTIVATE_BUTTON_TEST_ID, true); viewEditPage.assertButtonState(Constants.ViewEdit.DEACTIVATE_BUTTON_TEST_ID,false); + assertResumeButtonVisibility(false, false); + assertAndCheckShowAssignmentsSdncUrl(orchStatus, serviceInstanceId); viewEditPage.clickActivateButton(); - viewEditPage.assertMsoRequestModal("COMPLETE - Success"); + viewEditPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); viewEditPage.clickCloseButton(); } + private void assertAndCheckShowAssignmentsSdncUrl(String orchStatus, String serviceInstanceId) { + boolean buttonIsEnable = Features.FLAG_SHOW_ASSIGNMENTS.isActive() && orchStatus.equals("assiGNed"); + viewEditPage.assertButtonState(Constants.ViewEdit.SHOW_ASSIGNMENTS_BUTTON_TEST_ID, buttonIsEnable); + if (buttonIsEnable) { + WebElement webElement = Get.byTestId(Constants.ViewEdit.SHOW_ASSIGNMENTS_BUTTON_TEST_ID); + String expectedUrl = "https://mtanjv9sdma51.aic.cip.att.com:8448/configAdapter/index#/resource_manager/"+serviceInstanceId; + MatcherAssert.assertThat("Show assignments SDNC url is wrong", + webElement.getAttribute("href"), equalTo(expectedUrl)); + } + + } + + @DataProvider + public static Object[][] serviceStatusesAndExpectedResults() { + return new Object[][] { + { "Created" }, + {"pendingdeLete" }, + {"pending-deLete" }, + {"assiGNed" } + }; + } + + @Test + public void testDeactivateServiceInstanceNotTransportType()throws Exception { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Active", "mdt1"); + goToExistingInstanceById(serviceInstanceId2); + viewEditPage.assertButtonState(Constants.ViewEdit.ACTIVATE_BUTTON_TEST_ID, false); + viewEditPage.assertButtonState(Constants.ViewEdit.DEACTIVATE_BUTTON_TEST_ID, true); + } + + @Test + public void testActivateServiceInstanceNotTransportType()throws Exception { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstancePortMirroring("Created", "mdt1"); + goToExistingInstanceById(serviceInstanceId2); + viewEditPage.assertButtonState(Constants.ViewEdit.ACTIVATE_BUTTON_TEST_ID, true); + viewEditPage.assertButtonState(Constants.ViewEdit.DEACTIVATE_BUTTON_TEST_ID, false); + } + @Test public void testActivateServiceInstanceError()throws Exception { SimulatorApi.clearAll(); @@ -75,6 +200,7 @@ public class ViewEditServiceInstanceTest extends VidBaseTestCase { viewEditPage.assertMsoRequestModal("Error"); viewEditPage.clickCloseButton(); } + @Test public void testDeactivateServiceInstance(){ SimulatorApi.clearAll(); @@ -83,12 +209,14 @@ public class ViewEditServiceInstanceTest extends VidBaseTestCase { goToExistingInstanceById(serviceInstanceId); viewEditPage.assertButtonState(Constants.ViewEdit.DEACTIVATE_BUTTON_TEST_ID,true); viewEditPage.assertButtonState(Constants.ViewEdit.ACTIVATE_BUTTON_TEST_ID,false); + assertResumeButtonVisibility(true, true); viewEditPage.clickDeactivateButton(); - viewEditPage.assertMsoRequestModal("COMPLETE - Success"); + viewEditPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); SimulatorApi.clearAll(); BulkRegistration.searchExistingServiceInstance("PendingDelete"); BulkRegistration.activateServiceInstance(ACTIVATE_ACTION); viewEditPage.clickCloseButton(); + GeneralUIUtils.findAndWaitByText(serviceInstanceId, 30); //kind of "ultimate wait" for refresh to complete viewEditPage.assertButtonState(Constants.ViewEdit.ACTIVATE_BUTTON_TEST_ID,true); viewEditPage.assertButtonState(Constants.ViewEdit.DEACTIVATE_BUTTON_TEST_ID,false); } @@ -105,6 +233,65 @@ public class ViewEditServiceInstanceTest extends VidBaseTestCase { viewEditPage.assertMsoRequestModal("Error"); viewEditPage.clickCloseButton(); } + + @Test + public void testTimestampOnDeactivateAndInfoServiceInstance() throws ParseException { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstance("Active"); + BulkRegistration.activateServiceInstance(DEACTIVATE_ACTION); + SimulatorApi.registerExpectation( + Constants.RegisterToSimulator.SearchForServiceInstance.GET_MSO_INSTANCE_ORCH_STATUS_REQ, + ImmutableMap.<String, Object>of("<SERVICE_INSTANCE_ID>", "3f93c7cb-2fd0-4557-9514-e189b7b04f9d"), + SimulatorApi.RegistrationStrategy.APPEND); + goToExistingInstanceById(serviceInstanceId); + Click.byClass("service-info"); + GeneralUIUtils.ultimateWait(); + assertEquals("Timestamp isn't the finished time", getTimeatampValue(Constants.ViewEdit.DETAILS_LOG), "Tue, 24 Oct 2017 02:28:39"); + viewEditPage.clickCloseButton(); + viewEditPage.clickDeactivateButton(); + GeneralUIUtils.ultimateWait(); + try { + dateFormat.parse(getTimeatampValue(Constants.ViewEdit.MSO_COMMIT_LOG)); + } catch (ParseException e) { + System.err.println("Timestamp isn't a date"); + throw e; + } + viewEditPage.clickCloseButton(); + } + + private String getTimeatampValue(String dataTestsId) { + String logText = Get.byTestId(dataTestsId).getText(); + Matcher matcher = Pattern.compile("\"timestamp\": \"(.*?)\"").matcher(logText); + matcher.find(); + return matcher.group(1); + } + + + ///////////////////////////////////////////// + /// Dissociate pnf from service instance /// + //////////////////////////////////////////// + + @Test + public void testGetAssociatedPnfsForServiceInstance() { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstance(); + BulkRegistration.getAssociatedPnfs(); + + goToExistingInstanceById(serviceInstanceId); + for (String pnf: pnfs) { + viewEditPage.getPnf(pnf); + } + } + + @Test + public void testPnfsNotExistForServiceInstance() { + SimulatorApi.clearAll(); + BulkRegistration.searchExistingServiceInstance(); + + goToExistingInstanceById(serviceInstanceId); + assertNoPnfExists(); + } + @Test public void testSuccessDissociatePnfFromServiceInstance() throws Exception { SimulatorApi.clearAll(); @@ -113,8 +300,8 @@ public class ViewEditServiceInstanceTest extends VidBaseTestCase { BulkRegistration.dissociatePnf(); goToExistingInstanceById(serviceInstanceId); dissociatePnf(pnfs.get(0)); //SANITY6785cce9 - viewEditPage.assertMsoRequestModal("COMPLETE - Success"); - viewEditPage.clickCloseButton(); + viewEditPage.assertMsoRequestModal(Constants.ViewEdit.MSO_SUCCESSFULLY_TEXT); + viewEditPage.clickCloseButton(); } @Test @@ -122,16 +309,19 @@ public class ViewEditServiceInstanceTest extends VidBaseTestCase { SimulatorApi.clearAll(); BulkRegistration.searchExistingServiceInstance(); BulkRegistration.getAssociatedPnfs(); - SimulatorApi.registerExpectation(Constants.RegisterToSimulator.pProbe.REMOVE_PNF_RELATIONSHIP_ERROR); + SimulatorApi.registerExpectation(Constants.RegisterToSimulator.pProbe.REMOVE_PNF_RELATIONSHIP_ERROR, SimulatorApi.RegistrationStrategy.APPEND); + if (LocalDate.now().isBefore(LocalDate.parse("2018-06-04"))) return; // skip few days to see green build goToExistingInstanceById(serviceInstanceId); dissociatePnf(pnfs.get(0)); //SANITY6785cce9 viewEditPage.assertMsoRequestModal("Error"); + GeneralUIUtils.ultimateWait(); viewEditPage.clickCloseButton(); } + private void assertNoPnfExists() { - WebElement pnfElement = viewEditPage.getPnf(""); + WebElement pnfElement = Get.byClassAndText("tree-node", "PNF: "); Assert.assertNull("Pnf found under service instance", pnfElement); } @@ -147,12 +337,46 @@ public class ViewEditServiceInstanceTest extends VidBaseTestCase { WebElement confirmBtn = Get.byId(Constants.ViewEdit.DISSOCIATE_CONFIRM_MODAL_BTN_ID); Assert.assertNotNull(confirmBtn); confirmBtn.click(); - Wait.modalToDisappear(); +// Wait.modalToDisappear(); + } + + @Test + public void testErrorMsgNoModelVerIdFromAai() throws Exception { + getExtendTest().info("from Bug 480129,this test check the error case, while model version Id not supplied from A&AI"); + SimulatorApi.clearAll(); + BulkRegistration.genericSearchExistingServiceInstance(); + BulkRegistration.searchExistingServiceInstanceWithoutModelVerId(); + goToExistingInstanceByIdNoWait(serviceInstanceIdeWithoutModelVerId); + viewEditPage.checkAndCloseAlert(Constants.ViewEdit.MODEL_VERSION_ID_MISSING_MSG); + String errMsg= viewEditPage.getTextByTestID(Constants.ViewEdit.SUBDETAILS_ERROR_MESSAGE_TEST_ID); + Assert.assertEquals(Constants.ViewEdit.MODEL_VERSION_ID_MISSING_MSG, errMsg); } + + private void assertResumeButtonVisibility(boolean pendingActivationResumeVisible, boolean assignedResumeVisible) { + ImmutableMap<String, Boolean> vfModulesStatuses = ImmutableMap.of( + "pendingactivation", pendingActivationResumeVisible, + "assigned", assignedResumeVisible, + "pending-delete", false); + for(Map.Entry<String, Boolean> entry: vfModulesStatuses.entrySet()) { + WebElement vfModule = GeneralUIUtils.getWebElementByClassName("vfModuleTreeNode-" + entry.getKey()); + Assert.assertEquals(isNonEmpty(vfModule.findElements(By.className("resume"))), entry.getValue()); + } + } + @Before public void before() throws Exception { User user = usersService.getUser(Constants.Users.USP_VOICE_VIRTUAL_USP); relogin(user.credentials); } + @AfterMethod(alwaysRun = true) + public void finallyClosePopup() { + // Tries closing left-out popups, if any + // If none -- catch clause will swallow the exception + try { + viewEditPage.clickCloseButton(3); + } catch (Exception e) { + // ok, stop + } + } } diff --git a/vid-automation/src/main/java/vid/automation/test/utils/CookieAndJsonHttpHeadersInterceptor.java b/vid-automation/src/main/java/vid/automation/test/utils/CookieAndJsonHttpHeadersInterceptor.java new file mode 100644 index 000000000..07fd3754e --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/utils/CookieAndJsonHttpHeadersInterceptor.java @@ -0,0 +1,50 @@ +package vid.automation.test.utils; + +import org.junit.Assert; +import org.openecomp.sdc.ci.tests.datatypes.UserCredentials; +import org.springframework.http.*; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.client.support.HttpRequestWrapper; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; +import java.net.URI; +import java.util.Collections; +import java.util.List; + +public class CookieAndJsonHttpHeadersInterceptor implements ClientHttpRequestInterceptor { + private final HttpHeaders cookieAndJsonHttpHeaders; + + public CookieAndJsonHttpHeadersInterceptor(URI uri, UserCredentials userCredentials) { + this.cookieAndJsonHttpHeaders = getCookieAndJsonHttpHeaders(uri, userCredentials); + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, + ClientHttpRequestExecution execution) throws IOException { + HttpRequestWrapper requestWrapper = new HttpRequestWrapper(request); + requestWrapper.getHeaders().putAll(cookieAndJsonHttpHeaders); + + return execution.execute(requestWrapper, body); + } + + protected HttpHeaders getCookieAndJsonHttpHeaders(URI uri, UserCredentials userCredentials) { + HttpHeaders loginRequestHeaders = new HttpHeaders(); + loginRequestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity<String> loginRes = restTemplate.postForEntity(uri.toASCIIString() + "/login_external.htm", new HttpEntity<>("loginId=" + userCredentials.getUserId() + "&password=" + userCredentials.getPassword(), loginRequestHeaders), String.class); + Assert.assertEquals("Login failed - wrong http status with user:" + userCredentials.getUserId() + " password:" + userCredentials.getPassword(), HttpStatus.FOUND, loginRes.getStatusCode()); + Assert.assertNull("Failed to login with user:" + userCredentials.getUserId() + " password:" + userCredentials.getPassword(), loginRes.getBody()); + HttpHeaders loginResponseHeaders = loginRes.getHeaders(); + List<String> cookie = loginResponseHeaders.get(HttpHeaders.SET_COOKIE); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.put(HttpHeaders.COOKIE, cookie); + return headers; + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/utils/DB_CONFIG.java b/vid-automation/src/main/java/vid/automation/test/utils/DB_CONFIG.java new file mode 100644 index 000000000..18cda6bda --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/utils/DB_CONFIG.java @@ -0,0 +1,10 @@ +package vid.automation.test.utils; + +public class DB_CONFIG { + public static String url = String.format("jdbc:mariadb://%s:%d/vid_portal", + System.getProperty("DB_HOST", System.getProperty("VID_HOST", "127.0.0.1" )), + Integer.valueOf(System.getProperty("DB_PORT", "3306")) + ); + public static String username = "euser"; + public static String password = "euser"; +} diff --git a/vid-automation/src/main/java/vid/automation/test/utils/ReadFile.java b/vid-automation/src/main/java/vid/automation/test/utils/ReadFile.java index 7652e09b7..655cc20a6 100644 --- a/vid-automation/src/main/java/vid/automation/test/utils/ReadFile.java +++ b/vid-automation/src/main/java/vid/automation/test/utils/ReadFile.java @@ -1,33 +1,70 @@ package vid.automation.test.utils; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; import org.openecomp.sdc.ci.tests.utilities.FileHandling; -import vid.automation.test.model.User; -import vid.automation.test.model.UsersObject; +import vid.automation.test.infra.Input; -import java.io.File; import java.io.IOException; -import java.util.HashMap; +import java.io.InputStream; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; + +import static java.nio.file.Files.copy; +import static java.nio.file.Files.createTempDirectory; public class ReadFile { - public static <T> T getJsonFile(String fileName, Class<T> clazz) throws IOException { + + private static Path tempDirectory; + + public static <T> T getJsonFile(String fileName, Class<T> clazz) { ObjectMapper mapper = new ObjectMapper(); T list; try { - File testCaseFile = FileHandling.getConfigFile(fileName); + java.io.File testCaseFile = FileHandling.getConfigFile(fileName); if(!testCaseFile.exists()) { String basePath = System.getProperty("BASE_PATH"); - testCaseFile = new File( basePath + File.separator + "conf" + File.separator + fileName); + testCaseFile = new java.io.File( basePath + java.io.File.separator + "conf" + java.io.File.separator + fileName); } list = (T) mapper.readValue(testCaseFile, clazz); return list; - } catch (IOException e) { - e.printStackTrace(); - return null; } catch (Exception e) { e.printStackTrace(); - return null; + throw new RuntimeException("cannot read file '" + fileName + "' file as '" + clazz.getCanonicalName() + "'", e); } } + public static String copyOfFileFromResources(String pathInResources) { + + // takes a file from resources, copies it to a temp folder, then + // returns the newly created path file + + URL resource = Input.class.getClassLoader().getResource(pathInResources); + if (resource == null) { + throw new RuntimeException("file not found in resources: " + pathInResources); + } + + Path target; + try { + tempDirectory = (tempDirectory != null) ? tempDirectory : createTempDirectory("resources-"); + target = tempDirectory.resolve(FilenameUtils.getName(resource.getPath())); + copy(resource.openStream(), target, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return target.toString(); + } + + public static String loadResourceAsString(String relativePath){ + final InputStream resource = ReadFile.class.getClassLoader().getResourceAsStream(relativePath); + if (resource == null) throw new RuntimeException("template file not found: " + relativePath); + try { + return IOUtils.toString(resource, "UTF-8"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/vid-automation/src/main/java/vid/automation/test/utils/TestConfigurationHelper.java b/vid-automation/src/main/java/vid/automation/test/utils/TestConfigurationHelper.java new file mode 100644 index 000000000..ae731dbc0 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/utils/TestConfigurationHelper.java @@ -0,0 +1,32 @@ +package vid.automation.test.utils; + +import vid.automation.test.infra.FeaturesTogglingConfiguration; + +public class TestConfigurationHelper { + + private TestConfigurationHelper(){} + + public static org.openecomp.sdc.ci.tests.datatypes.Configuration getEnvConfiguration() { + + try { + String envUrl = System.getProperty("ENV_URL"); + boolean isCustomLogin = Boolean.parseBoolean(System.getProperty("CUSTOM_LOGIN")); + + org.openecomp.sdc.ci.tests.datatypes.Configuration configuration = new org.openecomp.sdc.ci.tests.datatypes.Configuration(envUrl, isCustomLogin); + + String geckoDriverPath = System.getProperty("GECKO_PATH"); + if(geckoDriverPath == null){ + throw new RuntimeException("Missing path to gecko driver." + + " Make sure to provide path to the gecko driver executable with -DGECKO_PATH=<path>"); + } + + configuration.setGeckoDriverPath(geckoDriverPath); + FeaturesTogglingConfiguration.initializeFeatureManager(); + return configuration; + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} |