diff options
Diffstat (limited to 'vid-automation/src/main/java/vid')
70 files changed, 6741 insertions, 490 deletions
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 f012d009..e10a9675 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 f2cbbef8..8c6bf483 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 14339d63..63327f50 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 00000000..6dfb4f11 --- /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 00000000..46794da1 --- /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 00000000..37698fe3 --- /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 00000000..a3e14539 --- /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 f9ce529f..fc1d0607 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 15fa2254..896ceae5 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 048174e9..dc792cfc 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 fa6ce4f3..848107c8 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 00000000..ec358797 --- /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 00000000..666ed0a8 --- /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 00000000..80d4109a --- /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 00000000..b9ff6a21 --- /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 00000000..0e92a1f3 --- /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 f5eaf6b0..4ed51eeb 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 00000000..7996a645 --- /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 00000000..e011d6a2 --- /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 c4b06d4b..696b7b40 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 f9a2e43a..53a67821 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 bcf035c0..ca0b55b3 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 00000000..bb68d9b9 --- /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 2eef9b3a..d63b8a19 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 00000000..ae757333 --- /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 00000000..270f53e9 --- /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 00000000..03285209 --- /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 00000000..7cffd37b --- /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 00000000..e5dd1bb3 --- /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 00000000..d5f39d95 --- /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 5fc4894e..edfcd0e5 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 00000000..a4787029 --- /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 8745001d..0ba49f2d 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 6e0367ed..69aee494 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 5f532d22..633feb83 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 00000000..01158fa6 --- /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 4cdd85d2..b142195e 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 00000000..4fef91ff --- /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 00000000..e175b88b --- /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 39f235b9..34303a97 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 95370fc8..74cda799 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 e8df1776..282be906 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 00000000..7f641d30 --- /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 00000000..0251e365 --- /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 894be37b..5ee96121 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 eb1c62fa..3843d6a9 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 732d2998..eadf38f4 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 ff7dc344..b486d27d 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 46238aca..55a1e22c 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 00000000..f4ba8c6d --- /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 00000000..2e3580f0 --- /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 00000000..d022f5c9 --- /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 1c810195..01af276e 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 00000000..1cb4d79c --- /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 00000000..cf1717e4 --- /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 00000000..899eed9a --- /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 00000000..fba260c9 --- /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 00000000..0dc20baa --- /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 5607496d..e788b705 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 00000000..dfa79bf3 --- /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 00000000..29d25f21 --- /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 f3261a21..7f18b2f8 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 00000000..9c8c0e74 --- /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 d4e09be2..bcdb73d3 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 00000000..9dab455c --- /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 f38433bd..d64b6b18 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 00000000..07fd3754 --- /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 00000000..18cda6bd --- /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 7652e09b..655cc20a 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 00000000..ae731dbc --- /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; + } + } +} |