1 package vid.automation.test.test;
4 import static org.hamcrest.CoreMatchers.containsString;
5 import static org.hamcrest.CoreMatchers.everyItem;
6 import static org.hamcrest.CoreMatchers.hasItem;
7 import static org.hamcrest.CoreMatchers.is;
8 import static org.hamcrest.CoreMatchers.notNullValue;
9 import static org.hamcrest.MatcherAssert.assertThat;
10 import static org.hamcrest.Matchers.greaterThan;
11 import static org.hamcrest.collection.IsEmptyCollection.empty;
12 import static org.hamcrest.core.IsNot.not;
14 import com.google.common.collect.ImmutableMap;
15 import com.google.common.primitives.Ints;
16 import java.sql.Connection;
17 import java.sql.DriverManager;
18 import java.sql.SQLException;
19 import java.sql.Statement;
20 import java.util.Arrays;
21 import java.util.List;
22 import java.util.stream.Collectors;
23 import java.util.stream.Stream;
24 import org.json.JSONException;
25 import org.junit.Assert;
26 import org.onap.sdc.ci.tests.datatypes.UserCredentials;
27 import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
28 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
29 import org.openqa.selenium.JavascriptExecutor;
30 import org.openqa.selenium.WebElement;
31 import org.openqa.selenium.remote.RemoteWebElement;
32 import org.openqa.selenium.support.ui.Select;
33 import org.skyscreamer.jsonassert.JSONAssert;
34 import org.skyscreamer.jsonassert.JSONCompareMode;
35 import org.testng.annotations.AfterClass;
36 import org.testng.annotations.AfterMethod;
37 import org.testng.annotations.BeforeClass;
38 import org.testng.annotations.DataProvider;
39 import org.testng.annotations.Test;
40 import vid.automation.test.Constants;
41 import vid.automation.test.infra.Click;
42 import vid.automation.test.infra.Exists;
43 import vid.automation.test.infra.Get;
44 import vid.automation.test.infra.Input;
45 import vid.automation.test.infra.SelectOption;
46 import vid.automation.test.infra.Wait;
47 import vid.automation.test.model.User;
48 import vid.automation.test.sections.ChangeManagementPage;
49 import vid.automation.test.services.SimulatorApi;
50 import vid.automation.test.utils.DB_CONFIG;
52 public class ChangeManagementTest extends VidBaseTestCase {
54 public static final String SCHEDULED_ID = "0b87fe60-50b0-4bac-a0a7-49e951b0ba9e";
56 public void testLeftPanelChangeManagementButton() {
57 Assert.assertTrue(Wait.byText(Constants.SideMenu.VNF_CHANGES));
61 public void testChangeManagementHeaderLine() {
62 ChangeManagementPage.openChangeManagementPage();
63 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pageHeadlineId));
64 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.headlineNewButtonId));
65 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.headlineSearchInputId));
69 public void testOpenNewChangeManagementModal() {
70 ChangeManagementPage.openNewChangeManagementModal();
71 Assert.assertTrue(Exists.modal());
72 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalSubscriberInputId));
73 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalServiceTypeInputId));
74 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFNameInputId));
75 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFTypeInputId));
76 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalFromVNFVersionInputId));
77 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalWorkFlowInputId));
78 Assert.assertTrue(Exists.byId(Constants.generalSubmitButtonId));
79 Assert.assertTrue(Exists.byId(Constants.generalCancelButtonId));
82 private void openAndFill1stScreen(String vnfName, String vnfTargetVersion, String workflow) {
83 String subscriberId = VNF_DATA_WITH_IN_PLACE.subscriberId;
84 String serviceType = VNF_DATA_WITH_IN_PLACE.serviceType;
85 String vnfType = VNF_DATA_WITH_IN_PLACE.vnfType;
86 String vnfSourceVersion = VNF_DATA_WITH_IN_PLACE.vnfSourceVersion;
87 ChangeManagementPage.openNewChangeManagementModal();
88 Wait.angularHttpRequestsLoaded();
89 ChangeManagementPage.selectSubscriberById(subscriberId);
90 Wait.angularHttpRequestsLoaded();
91 SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalServiceTypeInputId, serviceType);
92 Wait.angularHttpRequestsLoaded();
93 SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalVNFTypeInputId, vnfType);
94 Wait.angularHttpRequestsLoaded();
95 SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalFromVNFVersionInputId, vnfSourceVersion);
96 Wait.angularHttpRequestsLoaded();
97 Click.byId(Constants.ChangeManagement.newModalVNFNameInputId);
98 Click.byText(vnfName);
99 // close the multi-select
100 Click.byId(Constants.ChangeManagement.newModalVNFNameInputId);
101 Wait.angularHttpRequestsLoaded();
102 GeneralUIUtils.ultimateWait();
104 if (vnfTargetVersion != null) {
105 SelectOption.byClassAndVisibleText(Constants.ChangeManagement.newModalTargetVersionInputsClass, vnfTargetVersion);
106 Wait.angularHttpRequestsLoaded();
108 SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalWorkFlowInputId, workflow);
112 public void scheduleChange2ndScreen(String duration, String fallback, String concurrencyLimit, String policy) {
114 Wait.byText(Constants.ChangeManagement.schedulerModalNowLabel);
115 Click.byText(Constants.ChangeManagement.schedulerModalNowLabel);
118 SelectOption.byValue(Constants.ChangeManagement.schedulerModalHoursOption, Constants.ChangeManagement.schedulerModalTimeUnitSelectId);
120 Input.text(duration, Constants.ChangeManagement.schedulerModalDurationInputTestId);
121 Input.text(fallback, Constants.ChangeManagement.schedulerModalFallbackInputTestId);
122 Input.text(concurrencyLimit, Constants.ChangeManagement.schedulerModalConcurrencyLimitInputTestId);
123 Wait.angularHttpRequestsLoaded();
124 SelectOption.byIdAndVisibleText(Constants.ChangeManagement.schedulerModalPolicySelectId, policy);
126 Click.byText(Constants.ChangeManagement.schedulerModalScheduleButtonText);
130 static class VNF_DATA_WITH_IN_PLACE {
131 static final int vnfZrdm3amdns02test2Id = 11822;
132 static final int vnfHarrisonKrisId = 12822;
133 static String subscriberId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
134 static String serviceType = "vRichardson";
135 static String vnfType = "vMobileDNS";
136 static String vnfSourceVersion = "1.0";
137 static String vnfName = "zolson3amdns02test2";
138 static String vnfTargetVersion = "5.0";
139 static String workflowName = "VNF In Place Software Update";
143 protected void dropSpecialVNFs() {
145 resetGetServicesCache();
147 System.out.println("Connecting database...");
149 try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
150 System.out.println("Database connected!");
152 Statement stmt = connection.createStatement();
153 stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id);
154 stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id);
155 int[] executeBatch = stmt.executeBatch();
157 stmt = connection.createStatement();
158 stmt.addBatch("DELETE FROM `vid_vnf_workflow` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId);
159 stmt.addBatch("DELETE FROM `vid_vnf` WHERE `VNF_DB_ID` = " + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId);
160 executeBatch = stmt.executeBatch();
162 } catch (SQLException e) {
163 throw new IllegalStateException("Cannot connect the database!", e);
168 protected void registerToSimulator() {
169 SimulatorApi.clearAll();
170 SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.APPEND,
171 "changeManagement/ecompportal_getSessionSlotCheckInterval.json"
172 , "changeManagement/get_aai_sub_details.json"
173 , "changeManagement/get_sdc_catalog_services_2f80c596.json"
174 , "changeManagement/get_service-design-and-creation.json"
175 , "changeManagement/get_vnf_data_by_globalid_and_service_type.json"
176 , "changeManagement/service-design-and-creation.json"
177 , "changeManagement/mso_get_manual_task.json"
178 , "changeManagement/mso_post_manual_task.json"
180 SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(),SimulatorApi.RegistrationStrategy.APPEND);
182 registerDefaultTablesData();
183 resetGetServicesCache();
186 private void registerDefaultTablesData() {
187 SimulatorApi.registerExpectation(
188 new String[] {"changeManagement/get_scheduler_details_short.json",
189 "changeManagement/mso_get_change_managements.json"
190 ,"changeManagement/delete_scheduled_task.json"},
192 "<SCHEDULE_ID>", SCHEDULED_ID,
193 "<IN_PROGRESS_DATE>", "Fri, 08 Sep 2017 19:34:32 GMT"), SimulatorApi.RegistrationStrategy.APPEND
198 protected void prepareSpecialVNFs() {
202 System.out.println("Connecting database...");
204 try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
206 System.out.println("Database connected!");
208 ///////////////////////////////
209 // Add 2 vnfs with some workflows
210 Statement stmt = connection.createStatement();
211 stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " +
212 "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", '76e908e0-5201-44d2-a3e2-9e6128d05820', '72e465fe-71b1-4e7b-b5ed-9496118ff7a8')");
213 stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 2)");
214 stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 3)");
215 stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfZrdm3amdns02test2Id + ", 4)");
216 int[] executeBatch = stmt.executeBatch();
217 assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
219 stmt = connection.createStatement();
220 stmt.addBatch("INSERT INTO `vid_vnf` (`VNF_DB_ID`, `VNF_APP_UUID`, `VNF_APP_INVARIANT_UUID`) " +
221 "VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", '0903e1c0-8e03-4936-b5c2-260653b96413', '00beb8f9-6d39-452f-816d-c709b9cbb87d')");
222 stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 1)");
223 stmt.addBatch("INSERT INTO `vid_vnf_workflow` (`VNF_DB_ID`, `WORKFLOW_DB_ID`) VALUES (" + VNF_DATA_WITH_IN_PLACE.vnfHarrisonKrisId + ", 2)");
224 executeBatch = stmt.executeBatch();
225 assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
227 } catch (SQLException e) {
228 throw new IllegalStateException("Cannot connect the database!", e);
234 protected UserCredentials getUserCredentials() {
236 String userName = Constants.Users.EMANUEL_vWINIFRED;
237 User user = usersService.getUser(userName);
238 return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
241 private void updateConfigFile(String fileName) {
242 Assert.assertFalse(Exists.byId(Constants.ChangeManagement.newModalConfigUpdateInputId));
243 openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, "VNF Config Update");
244 Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled());
245 Input.file("changeManagement/" + fileName, Constants.ChangeManagement.newModalConfigUpdateInputId);
246 GeneralUIUtils.ultimateWait();
250 public void regretToCancelWorkflowOnPendingPopUp() {
251 updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short.json");
252 ChangeManagementPage.openChangeManagementPage();
254 Wait.angularHttpRequestsLoaded();
255 ChangeManagementPage.clickOnRefreshButton();
257 GeneralUIUtils.ultimateWait();
258 clickAndAssertOnCancelButton(SCHEDULED_ID);
259 Click.byClass("pull-right modal-close");
260 //TODO: if refresh button functional will be change to refactor next line.
261 ChangeManagementPage.clickOnRefreshButton();
263 assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "cancel-action icon-pending");
267 public void clickOnScheduledJob_SuccessfulMessageAppear() {
268 ChangeManagementPage.openChangeManagementPage();
269 // Wait.angularHttpRequestsLoaded();
270 GeneralUIUtils.ultimateWait();
271 clickAndAssertOnCancelButton(SCHEDULED_ID);
272 updateSimulatorWithParametersOfScheduledJod("get_scheduler_details_short_with_after_cancel" +
275 clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp();
277 GeneralUIUtils.ultimateWait();
278 //TODO: To develop automatic table refresh to avoid click on refresh button.
279 ChangeManagementPage.clickOnRefreshButton();
280 assertCorrectJobDeleted("ctsf0002v");
282 assertAndCheckStatusCellOnDeletedSheduledJob(SCHEDULED_ID, "ng-hide");
287 private void clickAndAssertOnCancelButton(String scheduledID){
288 Wait.waitByTestId("icon-status-"+ scheduledID, 5);
289 Click.byTestId("icon-status-"+ scheduledID);
290 GeneralUIUtils.ultimateWait();
291 WebElement cancelPendingConfirmationMessage = Get.byTestId("btn-cancel-workflow");
292 assertThat(cancelPendingConfirmationMessage.getText(),containsString("Are you sure you want to delete workflow"));
294 private void clickAndAssertClickOnCancelWorkflowButtonOnPendingPopUp() {
297 Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass);
298 GeneralUIUtils.ultimateWait();
299 Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success"));
301 if (Exists.byClassAndText("modal-title", "Pending")){
302 Click.byClass("pull-right modal-close");
305 Click.byClassAndVisibleText("btn","OK");
308 private void assertCorrectJobDeleted (String vnfName){
309 WebElement canceledScheduledJobRow = GeneralUIUtils.getWebElementByTestID("pending-table-cm-row");
310 String scheduledVnfName = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(1).getText();
311 String scheduledState = ((RemoteWebElement) canceledScheduledJobRow).findElementsByTagName("td").get(5).getText();
312 Assert.assertEquals(vnfName, scheduledVnfName);
313 Assert.assertEquals("Deleted", scheduledState);
316 private void assertAndCheckStatusCellOnDeletedSheduledJob(String scheduledId, String classString){
317 boolean isNotDisplayed = GeneralUIUtils.waitForElementInVisibilityByTestId("icon-status-" + scheduledId, 5);
318 Assert.assertTrue(isNotDisplayed);
320 public void updateSimulatorWithParametersOfScheduledJod(String jasonFile){
321 SimulatorApi.registerExpectation(
322 new String[] {"changeManagement/"+jasonFile},
323 ImmutableMap.of("<SCHEDULE_ID>", SCHEDULED_ID), SimulatorApi.RegistrationStrategy.APPEND
328 public void testWorkflowVNFInPlaceSoftwareUpdateNotInWorkflowsListWhenNotExpected() {
329 List<String> workflows = getListOfWorkflowsFor("Harrison Kris");
330 assertThat(workflows, not(hasItem(VNF_DATA_WITH_IN_PLACE.workflowName)));
334 public void testWorkflowVNFInPlaceSoftwareUpdateInWorkflowsListWhenExpected() {
335 List<String> workflows = getListOfWorkflowsFor(VNF_DATA_WITH_IN_PLACE.vnfName);
336 assertThat(workflows, hasItem(VNF_DATA_WITH_IN_PLACE.workflowName));
339 public void openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate() {
340 openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, VNF_DATA_WITH_IN_PLACE.workflowName);
343 @AfterMethod(alwaysRun = true)
344 public void closeForm() {
345 // Tries closing left-out popups, if any
346 // If none -- catch clause will swallow the exception
348 Click.byId(Constants.generalCancelButtonId);
349 Click.byId(Constants.generalCancelButtonId);
350 Click.byId(Constants.generalCancelButtonId);
351 } catch (Exception | Error e) {
354 Wait.modalToDisappear();
358 public void testWorkflowVNFInPlaceSoftwareUpdateShows3Fields() {
359 openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate();
361 List<String> idsWithoutMatchingElement =
363 "operations-timeout",
364 "existing-software-version",
365 "new-software-version")
366 .filter(id -> Get.byId(id) == null)
367 .collect(Collectors.toList());
368 assertThat("all three special VNFInPlace fields should appear", idsWithoutMatchingElement, is(empty()));
370 assertThat(Get.byId(Constants.generalSubmitButtonId).isEnabled(), is(false));
374 public void testWorkflowVNFInPlaceSoftwareUpdate3ValidValues() {
375 openAndFill1stScreenWithWorkflowVNFInPlaceSoftwareUpdate();
377 final String[][] options = {
378 {"true", "111", "222", "333"}
379 , {"true", "14710454", "Cz-Ou0EK5eH9.gAK1", "G9bUiFX3QM8xpxF8TlZ7b5T0"}
380 , {"true", "25316893", "fMx9V5kp.5.JGtYRhNGVTPoJ", "Jv5IieY0kTNjkfZ64bHXngR6"}
381 , {"true", "8", "3t3MhTRqkyjB85o5NC9OacAw", "B.bJ6f7KYI6WzDMR0fyNM9r4"}
382 , {"true", "3176", "ZlRS7tczf0cbMxQbBfyc6AP5", "1G1"}
383 , {"true", "78058488", "n", "WkH"}
384 , {"true", "501778", "1.d74LrJbBmcR.7bfvH.UZMX", "tFTAel7PS4RKEJeJ0b6mTeVT"}
385 , {"true", "76639623", "m2.EhbBxRE.rJj3j6qDtMxGR", "Rgkm-EPM1K0KAWm43Ex1wwjj"}
386 , {"true", "91244280", "zPDHRrXW65xR6GV.gVZND8C0", "mkrqFG26m7Vmv-28etQVyp04"}
387 , {"true", "8966", "7k2sRK2qSFRVCFpEvrlbmxAL", "IlvfmWTqzpF0Jo3elpZPHXx"}
388 , {"true", "01303495", "G26yl8B0NbLIKxu23h86QbZz", "vSou1seqCrcv9KoVbhlj4Wa4"}
389 , {"true", "787", "ce7joKCHYowpM2PtCb53Zs2v", ".qw1oY9HKjfAF2Yt05JNgib9"}
390 , {"true", "40116583", "-3bDEzEn.RbNnT2hWKQqf2HL", "QzlKlKZiIpc7sQ.EzO"}
391 , {"false", "", "222", "333"}
392 , {"false", "111", "", "333"}
393 , {"false", "111", "222", ""}
394 , {"false", "111a", "222", "333"}
395 , {"false", "aaa", "222", "333"}
396 , {"false", "111-", "222", "333"}
397 // , {"false", " 111", "222", "333"}
398 // , {"false", "111", "222 ", "333"}
399 // , {"false", "111", "222", " 333"}
400 , {"false", "111", "222", "3 33"}
401 , {"false", "111", "22,2", "333"}
402 , {"false", "111", "222~", "333"}
403 , {"false", "111", "222", "333&"}
404 , {"false", "$", "222", "333"}
405 , {"false", "111", "@", "333"}
406 , {"false", "111", "222", "^^^^^^"}
409 for (String[] option : options) {
410 fillVNFInPlace3Fields(option[1], option[2], option[3]);
411 assertThat("failed for set: " + Arrays.toString(option),
412 Get.byId(Constants.generalSubmitButtonId).isEnabled(), is(Boolean.parseBoolean(option[0])));
417 private void fillVNFInPlace3Fields(String operationsTimeout, String existingSwVersion, String newSwVersion) {
418 Get.byId("operations-timeout").clear();
419 Get.byId("existing-software-version").clear();
420 Get.byId("new-software-version").clear();
422 Get.byId("operations-timeout").sendKeys(operationsTimeout);
423 Get.byId("existing-software-version").sendKeys(existingSwVersion);
424 Get.byId("new-software-version").sendKeys(newSwVersion);
427 private List<String> getListOfWorkflowsFor(String vnfName) {
429 openAndFill1stScreen(vnfName, null /*no matter*/, "Replace");
431 Select selectlist = new Select(Get.byId("workflow"));
432 List<String> workflows = selectlist.getOptions().stream().map(we -> we.getText()).collect(Collectors.toList());
434 Click.byId(Constants.generalCancelButtonId);
440 public static Object[][] dataForUpdateWorkflowPartialWithInPlace() {
441 return new Object[][] {
442 { "1111", "22222", "33333" }
443 , {"8", "3t3MhTRqkyjB85o5NC9OacAw", "B.bJ6f7KYI6Wz-----DMR0.fyNM9r4"}
444 , {"78058488", "n", "WkH"}
448 // Deleted testVidToMsoCallbackDataWithInPlaceSWUpdate test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
452 // Deleted testUploadConfigUpdateFile test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
455 public void testUploadConfigUpdateNonCsvFile() {
456 String fileName = "non-valid.json";
457 updateConfigFile(fileName);
458 WebElement errorLabel = Get.byId("errorLabel");
459 Assert.assertEquals("wrong error message for non csv file", "Invalid file type. Please select a file with a CSV extension.", errorLabel.getText());
460 Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled());
463 @Test(dataProvider = "invalidCsvFiles")
464 public void testUploadInvalidConfigUpdateFile(String fileName) {
465 updateConfigFile(fileName);
466 WebElement errorLabel = Get.byId("errorContentLabel");
467 Assert.assertEquals("wrong error message for non csv file", "Invalid file structure.", errorLabel.getText());
468 Assert.assertFalse(Get.byId(Constants.generalSubmitButtonId).isEnabled());
472 public static Object[][] invalidCsvFiles() {
473 return new Object[][] {
475 {"withoutPayload.csv"},
476 {"withoutConfigurationParameters.csv"},
477 {"withoutRequestParameters.csv"}
481 // Deleted testVidToMsoCallbackData test. It was using assertThatVidToMsoCallbackDataIsOk which is no longer valid.
483 private void assertThatVidToMsoCallbackDataIsOk(String workflow, String payload) {
484 Assert.assertTrue(Get.byId(Constants.generalSubmitButtonId).isEnabled());
485 Click.byId(Constants.generalSubmitButtonId);
487 String vidToMsoCallbackData = Input.getValueByTestId("vidToMsoCallbackData");
489 String modelInvariantId = "72e465fe-71b1-4e7b-b5ed-9496118ff7a8";
490 String vnfInstanceId = "8e5e3ba1-3fe6-4d86-966e-f9f03dab4855";
491 String expected = getExpectedVidToMsoCallbackData(modelInvariantId, vnfInstanceId, VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, workflow, payload);
494 JSONAssert.assertEquals("built mso request is not ok", expected, vidToMsoCallbackData, JSONCompareMode.STRICT);
495 } catch (JSONException e) {
496 throw new RuntimeException(e);
499 Click.byId(Constants.generalCancelButtonId);
502 @Test(enabled = false)
503 public void testUpdateWorkflowNow() {
505 String workflow = "Update";
507 String duration = "1";
508 String fallback = "1";
509 String concurrencyLimit = "1";
510 String policy = "SNIRO_1710.Config_MS_PlacementOptimizationPolicy_dhv_v1.1.xml";
512 openAndFill1stScreen(VNF_DATA_WITH_IN_PLACE.vnfName, VNF_DATA_WITH_IN_PLACE.vnfTargetVersion, workflow);
513 Assert.assertTrue(Get.byId(Constants.generalSubmitButtonId).isEnabled());
514 Click.byId(Constants.generalSubmitButtonId);
516 scheduleChange2ndScreen(duration, fallback, concurrencyLimit, policy);
520 public void testNewChangeManagementCreation() {
521 ChangeManagementPage.openChangeManagementPage();
523 //TODO: After scheduler will be ready than we will examine if the creation working fine.
527 public void testMainDashboardTable() {
528 ChangeManagementPage.openChangeManagementPage();
529 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardActiveTabId));
530 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTabId));
532 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardActiveTableId));
533 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardInProgressTheadId));
534 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardPendingTheadId));
536 Click.byId(Constants.ChangeManagement.dashboardFinishedTabId);
537 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTableId));
538 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.dashboardFinishedTheadId));
540 Click.byId(Constants.ChangeManagement.dashboardActiveTabId);
544 public void testFinishedSectionIncludeUnlockedItem() {
545 ChangeManagementPage.openChangeManagementPage();
546 Click.byId(Constants.ChangeManagement.dashboardFinishedTabId);
547 Assert.assertThat(Get.byClassAndText("vnf-name","Unlocked instance"),is(notNullValue()));
556 public void testMainDashboardTableContent () {
557 ChangeManagementPage.openChangeManagementPage();
558 GeneralUIUtils.ultimateWait();
559 List<WebElement> webElements = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId);
560 assertThat("List of pending workflows is empty",webElements,is(not(empty())));
561 //TODO: After scheduler will be ready than we will examine if the content is valid.
566 public void testOnlyOneModalIsOpen() throws Exception {
568 updateSimulatorWithParametersOfScheduledJod("mso_get_change_managements.json");
570 ChangeManagementPage.openChangeManagementPage();
572 Wait.byText("ReplaceVnfInfra");
573 GeneralUIUtils.ultimateWait();
577 List<WebElement> elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
578 Assert.assertTrue(elements != null && elements.size() > 0);
580 ((JavascriptExecutor)getDriver()).executeScript("arguments[0].scrollIntoView();", elements.get(0));
583 elements.get(0).click();
585 GeneralUIUtils.ultimateWait();
587 elements = Get.byClass(Constants.ChangeManagement.pendingIconClass);
588 Assert.assertTrue(elements != null && elements.size() > 0);
589 elements.get(2).click();
591 GeneralUIUtils.ultimateWait();
592 List<WebElement> webElements = Get.byClass("modal-dialog");
593 Assert.assertTrue(webElements.size() == 1);
597 @Test(enabled = false)
598 public void testOpenFailedStatusModal() {
599 ChangeManagementPage.openChangeManagementPage();
601 if(!Exists.byClass(Constants.ChangeManagement.failedIconClass)) {
602 //TODO: Create a job which will shown with status fail.
605 Click.byClass(Constants.ChangeManagement.failedIconClass);
606 Wait.modalToBeDisplayed();
607 Assert.assertTrue(Exists.modal());
608 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalHeaderId));
609 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalContentId));
610 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalRetryButtonId));
611 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.failedModalRollbackButtonId));
613 Click.byClass(Constants.generalCloseModalButtonClass);
614 Wait.modalToDisappear();
617 @Test(enabled = false)
618 public void testOpenInProgressStatusModal() {
619 ChangeManagementPage.openChangeManagementPage();
621 if(!Exists.byClass(Constants.ChangeManagement.processIconClass)) {
622 //TODO: Create a job which will shown with status in-progress.
625 Click.byClass(Constants.ChangeManagement.processIconClass);
626 Wait.modalToBeDisplayed();
627 Assert.assertTrue(Exists.modal());
628 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalHeaderId));
629 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalContentId));
630 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalStopButtonId));
631 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.inProgressModalRollbackButtonId));
633 Click.byClass(Constants.generalCloseModalButtonClass);
634 Wait.modalToDisappear();
637 @Test(enabled = false)
638 public void testOpenAlertStatusModal() {
639 ChangeManagementPage.openChangeManagementPage();
641 if(!Exists.byClass(Constants.ChangeManagement.alertIconClass)) {
642 //TODO: Create a job which will shown with status alert.
645 Click.byClass(Constants.ChangeManagement.alertIconClass);
646 Wait.modalToBeDisplayed();
647 Assert.assertTrue(Exists.modal());
648 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalHeaderId));
649 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalContentId));
650 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalContinueButtonId));
651 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalRollbackButtonId));
653 Click.byClass(Constants.generalCloseModalButtonClass);
654 Wait.modalToDisappear();
657 @Test(enabled = false)
658 public void testOpenPendingStatusModal() {
659 ChangeManagementPage.openChangeManagementPage();
661 if(!Exists.byClass(Constants.ChangeManagement.pendingIconClass)) {
662 //TODO: Create a job which will shown with status pending.
665 Click.byClass(Constants.ChangeManagement.pendingIconClass);
666 Wait.modalToBeDisplayed();
667 Assert.assertTrue(Exists.modal());
668 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalHeaderId));
669 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalContentId));
670 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalRescheduleButtonId));
671 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalRollbackButtonId));
673 Click.byClass(Constants.generalCloseModalButtonClass);
674 Wait.modalToDisappear();
677 @Test(enabled = false)
678 public void testSuccessCancelPendingWorkflow() {
679 ChangeManagementPage.openChangeManagementPage();
680 Wait.angularHttpRequestsLoaded();
682 Click.byClass(Constants.ChangeManagement.cancelPendingButtonClass); //cancel pending workflow modal
683 Wait.modalToBeDisplayed();
684 Assert.assertTrue(Exists.modal());
685 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.pendingModalHeaderId));
686 Assert.assertTrue(Exists.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass));
687 Click.byClass(Constants.ChangeManagement.pendingModalCancelWorkflowButtonClass);
688 Wait.angularHttpRequestsLoaded();
690 Wait.modalToBeDisplayed(); //success alert modal should appear
691 Assert.assertTrue(Exists.modal());
692 Assert.assertTrue(Exists.byId(Constants.ChangeManagement.alertModalHeaderId));
693 Assert.assertTrue(Exists.byClassAndText(Constants.generalModalTitleClass, "Success"));
694 Click.byClass(Constants.generalCloseModalButtonClass);
695 Wait.modalToDisappear();
696 //TODO check the workflow deleted from table/changed to deleted action
700 public void testRefreshPageButton() {
701 ChangeManagementPage.openChangeManagementPage();
702 GeneralUIUtils.ultimateWait();
703 List<WebElement> pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId);
704 List<WebElement> activeRows = Get.multipleElementsByTestId(Constants.ChangeManagement.activeTableRowId);
705 assertThat("The pending table has no content",pendingRows, is(not(empty())));
706 assertThat("The active table has no content",activeRows, is(not(empty())));
707 Click.byTestId(Constants.ChangeManagement.refreshBtnTestId);
708 GeneralUIUtils.ultimateWait();
709 pendingRows = Get.multipleElementsByTestId(Constants.ChangeManagement.pendingTableRowId);
710 assertThat("The pending table has no content",pendingRows, is(not(empty())));
711 assertThat("The active table has no content",activeRows, is(not(empty())));
712 //return the register requests to the default state
713 registerDefaultTablesData();
716 private String getExpectedVidToMsoCallbackData(String modelInvariantId, String vnfInstanceId, String vnfName, String vnfTargetVersion, String workflow, String payload) {
719 " \"requestType\": \"" + workflow + "\"," +
720 " \"requestDetails\": [" +
722 " \"vnfName\": \"" + vnfName + "\"," +
723 " \"vnfInstanceId\": \"" + vnfInstanceId + "\"," +
724 " \"modelInfo\": {" +
725 " \"modelType\": \"vnf\"," +
726 " \"modelInvariantId\": \"" + modelInvariantId + "\"," +
727 " \"modelVersionId\": \"76e908e0-5201-44d2-a3e2-9e6128d05820\"," +
728 " \"modelName\": \"" + vnfName + "\"," +
729 " \"modelVersion\": \"" + vnfTargetVersion + "\"," +
730 " \"modelCustomizationId\": \"c00e8fc8-af39-4da8-8c78-a7efc2fe5994\"" +
732 " \"cloudConfiguration\": {" +
733 " \"lcpCloudRegionId\": \"mdt1\"," +
734 " \"tenantId\": \"88a6ca3ee0394ade9403f075db23167e\"" +
736 " \"requestInfo\": {" +
737 " \"source\": \"VID\"," +
738 " \"suppressRollback\": false," +
739 " \"requestorId\": \"az2016\"" +
741 " \"relatedInstanceList\": [" +
743 " \"relatedInstance\": {" +
744 " \"instanceId\": \"97315a05-e6f3-4c47-ae7e-d850c327aa08\"," +
745 " \"modelInfo\": {" +
746 " \"modelType\": \"service\"," +
747 " \"modelInvariantId\": \"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0\"," +
748 " \"modelVersionId\": \"76e908e0-5201-44d2-a3e2-9e6128d05820\"," +
749 " \"modelName\": \"action-data\"," +
750 " \"modelVersion\": \"1.0\"" +
755 " \"requestParameters\": {" +
757 " \"usePreload\": true" +