diff options
24 files changed, 121 insertions, 530 deletions
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp index 4808ccd43..50a10d607 100644 --- a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp +++ b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp @@ -644,28 +644,7 @@ } $scope.createFavoriteErrorMenu=function() { - $scope.favoritesMenuItems = [ -// { -// "menuId": "93", -// "text": "JSONLint", -// "url": "http://http://jsonlint.com" -// }, -// { -// "menuId": "22", -// "text": "ECOMP Wasteland", -// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" -// }, -// { -// "menuId": "94", -// "text": "HROneStop", -// "url": "http://ebiz.sbc.com/hronestop" -// }, -// { -// "menuId": "91", -// "text": "Andy and his Astrophotgraphy", -// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" -// } - ]; + $scope.favoritesMenuItems = []; $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); } @@ -737,20 +716,6 @@ "url": "http://http://jsonlint.com" }, { - "menuId": 94, - "column": 2, - "text": "HROneStop", - "parentMenuId": 4, - "url": "http://ebiz.sbc.com/hronestop" - }, - { - "menuId": 95, - "column": 2, - "text": "4th Level App4a R16", - "parentMenuId": 4, - "url": "http://www.e-access.att.com/ecomp_portal_ist/ecompportal/widgets" - }, - { "menuId": 96, "column": 3, "text": "3rd Level App1c R200", diff --git a/features.properties.md b/features.properties.md index e8dbeccb4..edf162d74 100644 --- a/features.properties.md +++ b/features.properties.md @@ -176,4 +176,8 @@ * FLAG_SHOW_ORCHESTRATION_TYPE enables showing/hiding (true/false) column with orchestration type in Service Model browser. - The types are fetched from aai.
\ No newline at end of file + The types are fetched from aai. + +* FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE + Let the user set the order of resource instantiation with the button (Move up / Move down) while using drawing board (new view edit) + for a-la-carte instantiation.
\ No newline at end of file diff --git a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java index a3343d36b..abee30025 100644 --- a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java +++ b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java @@ -80,6 +80,7 @@ public enum Features implements Feature { FLAG_FLASH_MORE_ACTIONS_BUTTON_IN_OLD_VIEW_EDIT, FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH, FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE, + FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE ; diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AAITreeNodeBuilder.java b/vid-app-common/src/main/java/org/onap/vid/services/AAITreeNodeBuilder.java index d53eba8d3..c8434609e 100644 --- a/vid-app-common/src/main/java/org/onap/vid/services/AAITreeNodeBuilder.java +++ b/vid-app-common/src/main/java/org/onap/vid/services/AAITreeNodeBuilder.java @@ -20,8 +20,28 @@ package org.onap.vid.services; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; +import static java.util.stream.Collectors.toSet; +import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER; +import static org.onap.vid.utils.Streams.not; + import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.ImmutableList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentSkipListSet; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -42,19 +62,10 @@ import org.onap.vid.properties.VidProperties; import org.onap.vid.utils.Streams; import org.onap.vid.utils.Tree; import org.onap.vid.utils.Unchecked; +import org.slf4j.MDC; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Component; -import javax.inject.Inject; -import java.util.*; -import java.util.concurrent.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static java.util.stream.Collectors.*; -import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER; -import static org.onap.vid.utils.Streams.not; - @Component public class AAITreeNodeBuilder { @@ -205,7 +216,7 @@ public class AAITreeNodeBuilder { directly fetching a resource URI. */ - threadPool.execute(() -> { + Future<?> vfModulesTask = threadPool.submit(withCopyOfMDC(() -> { // the response is an array of vf-modules final JsonNode jsonNode; try { @@ -214,29 +225,40 @@ public class AAITreeNodeBuilder { if (e.getHttpCode().equals(404)) { // it's ok, as we're just optimistically fetching // the /vf-modules uri; 404 says this time it was a bad guess - return; + return true; } else { throw e; } } if (isArray(jsonNode, NodeType.VF_MODULE)) { - //create list of AAITreeNode represent the VfModules from AAI result List<AAITreeNode> vfModules = Streams.fromIterable(jsonNode.get(NodeType.VF_MODULE.getType())) - .map(vfModuleNode -> createAaiNode(NodeType.VF_MODULE, vfModuleNode, nodesAccumulator)) - .collect(toList()); + .map(vfModuleNode -> createAaiNode(NodeType.VF_MODULE, vfModuleNode, nodesAccumulator)) + .collect(toList()); //enrich each of the VfModule with placement info - vfModules.forEach(vfModule-> enrichPlacementDataUsingTenantInfo( - vfModule, - AAITreeNodeUtils.findFirstRelationshipByRelatedTo(vfModule.getRelationshipList(), "vserver") + vfModules.forEach(vfModule -> enrichPlacementDataUsingTenantInfo( + vfModule, + AAITreeNodeUtils.findFirstRelationshipByRelatedTo(vfModule.getRelationshipList(), "vserver") )); //add all VfModules to children list of parent node parentNode.getChildren().addAll(vfModules); } else { LOGGER.error(EELFLoggerDelegate.errorLogger, "Failed to get vf-modules for vnf " + parentNode.getId()); } - }); + + return true; // the Callable<> contract requires a return value + })); + + waitForCompletion(vfModulesTask); + } + + private void waitForCompletion(Future<?> future) { + try { + future.get(); + } catch (Exception e) { + throw new GenericUncheckedException(e); + } } List<Relationship> getFilteredRelationships(JsonNode json, Tree<AAIServiceTree.AaiRelationship> pathsTree) { @@ -256,24 +278,33 @@ public class AAITreeNodeBuilder { if (!relationships.isEmpty()) { List<Callable<List<AAITreeNode>>> tasks = relationships.stream() - .map(relationship -> - (Callable<List<AAITreeNode>>) () -> - getChildNode(threadPool, nodesAccumulator, relationship.getRelatedTo(), - relationship.getRelatedLink(), pathsTree)) - .collect(Collectors.toList()); + .map(relationship -> + withCopyOfMDC(() -> getChildNode(threadPool, nodesAccumulator, relationship.getRelatedTo(), + relationship.getRelatedLink(), pathsTree))) + .collect(Collectors.toList()); try { int depth = pathsTree.getChildrenDepth(); threadPool.invokeAll(tasks, timeout * depth, TimeUnit.SECONDS) - .forEach(future -> - addChildren(node, future) - ); + .forEach(future -> + addChildren(node, future) + ); } catch (Exception e) { throw new GenericUncheckedException(e); } } } + private <V> Callable<V> withCopyOfMDC(Callable<V> callable) { + //in order to be able to write the correct data while creating the node on a new thread + // save a copy of the current thread's context map, with keys and values of type String. + final Map<String, String> copyOfParentMDC = MDC.getCopyOfContextMap(); + return () -> { + MDC.setContextMap(copyOfParentMDC); + return callable.call(); + }; + } + private List<AAITreeNode> getChildNode(ExecutorService threadPool, ConcurrentSkipListSet<AAITreeNode> nodesAccumulator, String childNodeType, String childNodeUrl, Tree<AAIServiceTree.AaiRelationship> pathsTree) { diff --git a/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties b/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties index d4910bf25..6ed0c7bcd 100644 --- a/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties +++ b/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties @@ -36,4 +36,5 @@ FLAG_DISABLE_HOMING = true FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH=false FLAG_FLASH_REDUCED_RESPONSE_CHANGEMG = false FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE = false -FLAG_SHOW_ORCHESTRATION_TYPE = false +FLAG_SHOW_ORCHESTRATION_TYPE = false, +FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE = false diff --git a/vid-app-common/src/test/resources/WEB-INF/conf/asdc.properties b/vid-app-common/src/test/resources/WEB-INF/conf/asdc.properties deleted file mode 100644 index c16d3f5d3..000000000 --- a/vid-app-common/src/test/resources/WEB-INF/conf/asdc.properties +++ /dev/null @@ -1,17 +0,0 @@ -asdc.client.type=REST -# -#asdc.client.rest.protocol=http -#asdc.client.rest.host=135.21.125.36 -#asdc.client.rest.port=8080 -#asdc.client.rest.auth=Basic VklEOnZpbjNSaXBlbmVkSnVtYjBKZXRTcHJpbmtsZXM= -# -#dev -#asdc.client.rest.protocol=http -#asdc.client.rest.host=135.21.125.105 -#asdc.client.rest.port=8080 -#asdc.client.rest.auth=Basic VGVzdDoxMjM0NTY= -#IST -asdc.client.rest.protocol=https -asdc.client.rest.host=asdcbe.mtsnjpw1.aic.cip.att.com -asdc.client.rest.port=8443 -asdc.client.rest.auth=Basic dmlkOnZpZGlzdA== diff --git a/vid-app-common/src/test/resources/WEB-INF/conf/raptor_app_fusion.properties b/vid-app-common/src/test/resources/WEB-INF/conf/raptor_app_fusion.properties index 4006c166d..b5ee2710e 100644 --- a/vid-app-common/src/test/resources/WEB-INF/conf/raptor_app_fusion.properties +++ b/vid-app-common/src/test/resources/WEB-INF/conf/raptor_app_fusion.properties @@ -3,8 +3,8 @@ upload_folder_path=/demeter/WebApps/dev/ECOMP_PORTAL/files/ excel_template_path=/demeter/WebApps/dev/ECOMP_PORTAL/files/raptor_template/ temp_folder_url=temp/ upload_folder_url=upload/ -smtp_server=zeus.homer.att.com -default_email_sender=dev-local@homer.att.com +smtp_server=todo.smtp.server +default_email_sender=email-name@email.com error_page=error_page.jsp jsp_context_path=raptor/ img_folder_url=static/fusion/raptor/images/ diff --git a/vid-app-common/src/test/resources/WEB-INF/conf/system.properties b/vid-app-common/src/test/resources/WEB-INF/conf/system.properties index 0fb8b1ca7..9c73e4cdd 100644 --- a/vid-app-common/src/test/resources/WEB-INF/conf/system.properties +++ b/vid-app-common/src/test/resources/WEB-INF/conf/system.properties @@ -19,7 +19,6 @@ #Mysql db.driver = com.mysql.jdbc.Driver -#db.connectionURL = jdbc:mysql://demeter.homer.att.com:3306/ecomp_sdk_1707_att db.connectionURL = jdbc:mysql://localhost:3306/vid_portal db.userName = euser db.password = euser @@ -100,14 +99,14 @@ mylogins_feed_cron = 0 0/60 * * * ?; my_login_feed_output_dir = /tmp/MyLogins # ECOMP Portal Shared Context REST API URL -ecomp_shared_context_rest_url= https://www.ecomp.att.com:8080/ecompportal/context +ecomp_shared_context_rest_url= https://shared.context.rest.url:8080/ecompportal/context # Link shown in Help menu -contact_us_link = https://wiki.web.att.com/display/EcompPortal/ECOMP+Portal+Home +contact_us_link = https://todo.contact.us.link homepage_contact_us_url = mailto:portal@lists.onap.org # Camunda cockpit link -camunda_cockpit_link = https://cloopwf.client.research.att.com:8443/camunda/app/cockpit/default/#/dashboard +camunda_cockpit_link = https://camunda.cockpit.link/ # An Unique 128-bit value defined to identify a specific version # of an application deployed on a specific virtual machine. # This value must be generated and updated by the application @@ -116,16 +115,7 @@ camunda_cockpit_link = https://cloopwf.client.research.att.com:8443/camunda/app/ instance_uuid=8da691c9-987d-43ed-a358-00ac2f35685d # R Cloud feature -guard_notebook_url=https://rcloud.research.att.com/mini.html?notebook=a06a9cf14211012e221bf842c168849d& - -#ECOMP redirect url -#ecomp_redirect_url = https://webtest.csp.att.com/ecomp_portal_dev_n1/ecompui/process_csp -#ecomp_rest_url = https://webtest.csp.att.com/ecomp_portal_dev_n1/ecompui/auxapi -# Replace these default values with the ones for your specific App. Ecomp Portal admin obtains from EP website. -#ueb_app_mailbox_name = ECOMP-PORTAL-OUTBOX-90 -#ueb_app_key = sYH0NJnsKmJC1B2A -#ueb_app_secret = YOtknsT2wVFz9WISlSPDaAtd - +guard_notebook_url=https://todo.guard.notebook.url #Policy related properties #simulator @@ -140,14 +130,6 @@ policy.Authorization= policy.environment= #MSO related properties -#simulator -#mso.server.url=http://localhost:8089 -#mso.server.url=https://msoapih-app.mtsnj.aic.cip.att.com:8443/ecomp/mso/infra -#dev2dev -#good -#dev -#mso.server.url=http://mtanjv9moah10-eth0.aic.cip.att.com:8080/ecomp/mso/infra -#istScrum-Master mso.restapi.svc.e2einstance=/e2eServiceInstances/v3 mso.client.type=LOCAL mso.server.url=http://vm1.mso.simpledemo.openecomp.org:8080 @@ -203,9 +185,7 @@ scheduler.get.time.slots=/v1/ChangeManagement/schedules/ scheduler.get.schedules=/v1/ChangeManagement/schedules/scheduleDetails/ vid.truststore.passwd.x=OBF:1wgg1wfq1uus1uui1x131x0r1x1v1x1j1uvo1uve1wg81wfi -#mso.dme2.server.url=http://mso-api-handler-anap-v1.mso.ecomp.att.com/services/ecomp/mso? -mso.dme2.server.url=http://mso-api-handler-anap-v1.mso.ecomp.att.com/services/ecomp/mso?version=1607&envContext=TEST&routeOffer=st_mtsnj -#mso.dme2.server.url=https://ActiveAndAvailableInventory-CloudNetwork-v1.aai.att.com/aai?version=1&envContext=DEV&routeOffer=devINT1 +mso.dme2.server.url=http://mso.dme2.server.url/services/ecomp/mso?version=1607&envContext=TEST&routeOffer=st_mtsnj mso.dme2.enabled=false asdc.model.namespace=org.openecomp. sdc.svc.api.path=sdc/v1/catalog/services @@ -215,10 +195,6 @@ sdc.resource.api.path=sdc/v1/catalog/resource mso.maxOpenedInstantiationRequests=200 mso.asyncPollingIntervalSeconds=0 -# Application base URL has the host and app context only; a proper prefix of the on-boarded URL. -# Only required for applications using WebJunction or FE/BE separation. For example: -# app_base_url = https://www.e-access.att.com/app_junction/app_context/ - features.set.filename=onap.features.properties vid.asyncJob.howLongToKeepOldJobsInDays=7 diff --git a/vid-app-common/src/test/resources/WEB-INF/conf/system.properties.cml b/vid-app-common/src/test/resources/WEB-INF/conf/system.properties.cml deleted file mode 100644 index 9c8b03caf..000000000 --- a/vid-app-common/src/test/resources/WEB-INF/conf/system.properties.cml +++ /dev/null @@ -1,93 +0,0 @@ -# Properties read by ECOMP Core library, epsdk-core.jar - -########################################################################## -# The following properties should NOT be changed by partner applications. -########################################################################## - -application_user_id = 30000 -post_default_role_id = 16 -clustered = true - -#Enable Fusion Mobile capabilities for the application -mobile_enable = false - -# Cache config file is needed on the classpath -cache_config_file_path = /WEB-INF/classes/cache.ccf -cache_switch = 199 -cache_load_on_startup = false - -user_name = fullName -decryption_key = AGLDdG4D04BKm2IxIWEr8o== - -########################################################################## -# The following properties REQUIRE changes by partner applications. -########################################################################## - -#Oracle -#db.userName=quantumbd -#db.password=c1syn2yhmr -#db.connectionURL=jdbc:oracle:thin:@dbhost.yourcompany.com:1527:mod112a -#db.hib.dialect=org.hibernate.dialect.Oracle10gDialect -#db.driver=oracle.jdbc.driver.OracleDriver -#Hibernate -#hb.dialect=org.hibernate.dialect.Oracle10gDialect -#hb.show_sql=true - -#Postgres -#db.userName=quantumbd -#db.password=c1syn2yhmr -#db.connectionURL=jdbc:postgresql://dbhost.yourcompany.com:61382/quantum -#db.hib.dialect=org.hibernate.dialect.PostgreSQLDialect -#db.driver=org.postgresql.Driver -#hb.dialect=org.hibernate.dialect.PostgreSQLDialect -#hb.show_sql=true - - - -#Mysql -db.driver = org.mariadb.jdbc.Driver -#db.connectionURL = jdbc:mariadb://localhost:3306/vid_openecomp_epsdk -#db.userName = ecomp_sdk_user -#db.password = ecomp_sdk_pass -db.hib.dialect = org.hibernate.dialect.MySQLDialect -db.min_pool_size = 5 -db.max_pool_size = 10 -hb.dialect = org.hibernate.dialect.MySQLDialect -# SQL statements are logged to stdout -hb.show_sql = true -hb.idle_connection_test_period = 3600 - -app_display_name = EPSDK App ATT -# license file area -files_path = /tmp - -#element map files -element_map_file_path = app/fusionapp/files/ -element_map_icon_path = app/fusionapp/icons/ - -#Cron Schedules have 6 required fields and 1 optional field: -# Seconds Minutes Hours Day-of-Month Month Day-of-Week Year -log_cron = 0 0/1 * * * ?; - -# ECOMP Portal Shared Context REST API URL -ecomp_shared_context_rest_url= https://www.ecomp.att.com:8080/ecompportal/context - -# Link shown in Help menu -contact_us_link = https://wiki.web.att.com/display/EcompPortal/ECOMP+Portal+Home - -# Camunda cockpit link -camunda_cockpit_link = https://cloopwf.client.research.att.com:8443/camunda/app/cockpit/default/#/dashboard - -# An Unique 128-bit value defined to identify a specific version -# of an application deployed on a specific virtual machine. -# This value must be generated and updated by the application -# which is using the ECOMP SDK at the time of its deployment. -# Online Unique UUID generator - https://www.uuidgenerator.net/ -instance_uuid=8da691c9-987d-43ed-a358-00ac2f35685d - -# R Cloud feature -guard_notebook_url=https://rcloud.research.att.com/mini.html?notebook=a06a9cf14211012e221bf842c168849d& - -# Application base URL has the host and app context only; a proper prefix of the on-boarded URL. -# Only required for applications using WebJunction or FE/BE separation. For example: -# app_base_url = https://www.e-access.att.com/app_junction/app_context/ diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/left-menu.jsp b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/left-menu.jsp index 8f6b5c2a8..afaf8b1ac 100644 --- a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/left-menu.jsp +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ds2/left-menu.jsp @@ -579,28 +579,7 @@ } $scope.createFavoriteErrorMenu=function() { - $scope.favoritesMenuItems = [ -// { -// "menuId": "93", -// "text": "JSONLint", -// "url": "http://http://jsonlint.com" -// }, -// { -// "menuId": "22", -// "text": "ECOMP Wasteland", -// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" -// }, -// { -// "menuId": "94", -// "text": "HROneStop", -// "url": "http://ebiz.sbc.com/hronestop" -// }, -// { -// "menuId": "91", -// "text": "Andy and his Astrophotgraphy", -// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" -// } - ]; + $scope.favoritesMenuItems = []; $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); } @@ -672,20 +651,6 @@ "url": "http://http://jsonlint.com" }, { - "menuId": 94, - "column": 2, - "text": "HROneStop", - "parentMenuId": 4, - "url": "http://ebiz.sbc.com/hronestop" - }, - { - "menuId": 95, - "column": 2, - "text": "4th Level App4a R16", - "parentMenuId": 4, - "url": "http://www.e-access.att.com/ecomp_portal_ist/ecompportal/widgets" - }, - { "menuId": 96, "column": 3, "text": "3rd Level App1c R200", diff --git a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ebz/ebz_header.jsp b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ebz/ebz_header.jsp index 067fce329..6ef2ea975 100644 --- a/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ebz/ebz_header.jsp +++ b/vid-app-common/src/test/resources/WEB-INF/fusion/jsp/ebz/ebz_header.jsp @@ -608,28 +608,7 @@ } $scope.createFavoriteErrorMenu=function() { - $scope.favoritesMenuItems = [ -// { -// "menuId": "93", -// "text": "JSONLint", -// "url": "http://http://jsonlint.com" -// }, -// { -// "menuId": "22", -// "text": "ECOMP Wasteland", -// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" -// }, -// { -// "menuId": "94", -// "text": "HROneStop", -// "url": "http://ebiz.sbc.com/hronestop" -// }, -// { -// "menuId": "91", -// "text": "Andy and his Astrophotgraphy", -// "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome" -// } - ]; + $scope.favoritesMenuItems = []; $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); } @@ -701,20 +680,6 @@ "url": "http://http://jsonlint.com" }, { - "menuId": 94, - "column": 2, - "text": "HROneStop", - "parentMenuId": 4, - "url": "http://ebiz.sbc.com/hronestop" - }, - { - "menuId": 95, - "column": 2, - "text": "4th Level App4a R16", - "parentMenuId": 4, - "url": "http://www.e-access.att.com/ecomp_portal_ist/ecompportal/widgets" - }, - { "menuId": 96, "column": 3, "text": "3rd Level App1c R200", 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 index 312c3fd99..329bb4a89 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/Features.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/Features.java @@ -55,6 +55,7 @@ public enum Features implements Feature { FLAG_FLASH_REDUCED_RESPONSE_CHANGEMG, FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH, FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE, + FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE ; public boolean isActive() { diff --git a/vid-automation/src/main/resources/ci/scripts/copyToStorage.sh b/vid-automation/src/main/resources/ci/scripts/copyToStorage.sh deleted file mode 100644 index 86fcadfef..000000000 --- a/vid-automation/src/main/resources/ci/scripts/copyToStorage.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -REPORT_NAME=$1 -VERSION=$2 -ENV=$3 - -if [ -z "$REPORT_NAME" ] - then - source ExtentReport/versions.info - now=$(date +'%Y-%m-%d_%H_%M') - REPORT_NAME="${now}" - VERSION="${osVersion}" - if [[ $env == *"DEV20"* ]] - then - ENV="Nightly" - else - ENV="" - fi - - fi - -/usr/bin/expect << EOF -spawn ssh admin@135.76.210.45 mkdir -p -m 775 /home/admin/reports/${ENV}/${VERSION}/UI/ - -expect { - -re ".*es.*o.*" { - exp_send "yes\r" - exp_continue - } - -re ".*sword.*" { - exp_send "Aa123456\r" - } -} - -expect eof - -spawn scp -pr ExtentReport admin@135.76.210.45:/home/admin/reports/${ENV}/${VERSION}/UI/${REPORT_NAME}/ - -expect { - -re ".*es.*o.*" { - exp_send "yes\r" - exp_continue - } - -re ".*sword.*" { - exp_send "Aa123456\r" - } -} - -expect eof -EOF diff --git a/vid-automation/src/main/resources/ci/scripts/sendMail.sh b/vid-automation/src/main/resources/ci/scripts/sendMail.sh deleted file mode 100644 index 794534fc8..000000000 --- a/vid-automation/src/main/resources/ci/scripts/sendMail.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -now=$(date +'%Y%-m%d%H%M') - -REPORT_NAME=$1 -VERSION=$2 -ENV=$3 - -RECIPIENTS1="dl-sdcqa@intl.att.com,ml636r@intl.att.com,bl5783intl.att.com,ak314p@intl.att.com,el489u@intl.att.com,hk096q@intl.att.com,bs5719@intl.att.com" -RECIPIENTS2="dl-asdcqa@intl.att.com" - -source ExtentReport/versions.info -if [ -z "$REPORT_NAME" ] - then - source ExtentReport/versions.info - now=$(date +'%Y-%m-%d_%H_%M') - REPORT_NAME="${now}" - VERSION="${osVersion}" - - -fi - -if [[ $env == *"DEV20"* ]] - then - ENV="Nightly" - RECIPIENTS=$RECIPIENTS1 - else - ENV="" - RECIPIENTS=$RECIPIENTS2 -fi - -#REPORT_ZIP_FILE=ExtentReport_${now}.zip -REPORT_FOLDER='ExtentReport' -REPORT_HTML_FILE=${REPORT_FOLDER}/*Report.html -BODY_MESSAGE='Hello, \n\n Please find automation results on following link: \n\n http://asdc-srv-210-45.tlv.intl.att.com/'${ENV}'/'${VERSION}'/UI/'${REPORT_NAME}'/SDC_UI_Extent_Report.html \n\nThanks, \nASDC QA Team\n\n ' - -#OLD_FILE=$(find ./ -type f -name ${REPORT_ZIP_FILE} -print) -#if [ ! -z ${OLD_FILE} ] -#then -# rm -f ${REPORT_ZIP_FILE} -# echo "Removing old zip file............" -#fi - -#echo "Creating new zip file" -#zip -r ${REPORT_ZIP_FILE} ./${REPORT_FOLDER} - - - -echo -e ${BODY_MESSAGE} | mail -s 'E2E Automation '$ENV' results - SDC '$VERSION -r 'ASDC@Automation.team' $RECIPIENTS diff --git a/vid-automation/src/main/resources/ci/scripts/startTest.sh b/vid-automation/src/main/resources/ci/scripts/startTest.sh deleted file mode 100644 index e4c1a0995..000000000 --- a/vid-automation/src/main/resources/ci/scripts/startTest.sh +++ /dev/null @@ -1,141 +0,0 @@ -#!/bin/bash -REMOTE_DEBUG=false -RERUN=true -JAVA_OPTION="" -debug_port=8000 -TEST_SUITES=testSuites -fileName=testng-failed.xml - -function help_usage () -{ - echo - echo "$0 (<jar_file_name> <suite file name>) [-r/rerun <true/false> -d/debug <true/false>]" - echo "nohup ./startTest.sh ui-ci-1707.0.5-SNAPSHOT-jar-with-dependencies.jar extendedSanity.xml -r false -d true &" - echo "by default rerun is true and remote debug is false." - echo - exit 2 -} - -function isBoolean () -{ - PARAM_NAME=$1 - VALUE=$2 - if [[ ${VALUE} != "true" ]] && [[ ${VALUE} != "false" ]]; then - echo "Valid parameter" ${PARAM_NAME} "values are: true/false" - help_usage - fi -} - -function prepareFailedXmlFile () -{ - echo "1="$1 "2="$2 "fileName="${fileName} - PATTERN=`grep -w "test name=" ${FULL_PATH}/${TEST_SUITES}/$2 | awk -F'"' '{print $2}'` - sed '/<test name="'${PATTERN}'"/,/<!-- '${PATTERN}' --/d' $1 > ${FULL_PATH}/${TEST_SUITES}/${fileName} - sed -i 's/thread-count="[0-9]\+"/thread-count="1"/g' ${FULL_PATH}/${TEST_SUITES}/${fileName} -} - -#main -[ $# -lt 2 ] && help_usage - -JAR_FILE=$1 -SUITE_FILE=$2 - -while [ $# -ne 0 ]; do - case $1 in - -r|rerun) - RERUN=$2 - isBoolean $1 ${RERUN} - shift 1 - shift 1 - ;; - -d|debug) - REMOTE_DEBUG=$2 - isBoolean $1 ${REMOTE_DEBUG} - shift 1 - shift 1 - ;; - *) - shift 1 - ;; - esac -done - -CURRENT_DIR=`pwd` -BASEDIR=$(dirname $0) - -if [ ${BASEDIR:0:1} = "/" ] -then - FULL_PATH=$BASEDIR -else - FULL_PATH=$CURRENT_DIR/$BASEDIR -fi -LOGS_PROP_FILE=file:${FULL_PATH}/conf/log4j.properties -############################################# -TARGET_DIR=${FULL_PATH}/target -CONF_FILE=${FULL_PATH}/conf/attsdc.yaml - -DEBUG=true -MainClass=org.onap.sdc.ci.tests.run.StartTest - -TESTS_DIR=/opt/app/sdc/ci/resources/tests -COMPONENTS_DIR=/opt/app/sdc/ci/resources/components - - -TARGET_LOG_DIR="${TARGET_DIR}/" - -if [ ${REMOTE_DEBUG} == "true" ]; then - echo "Debug mode, Listen on port $debug_port"; - JAVA_OPTION="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${debug_port}" ; -fi - -cmd="java -Xmx2048m -Xms1024m $JAVA_OPTION -DdisplayException=true -Dtargetlog=${TARGET_LOG_DIR} -Dfilepath=${FILES_TEST} -Dconfig.resource=${CONF_FILE} -Ddebug=${DEBUG} -Dlog4j.configuration=${LOGS_PROP_FILE} -cp $JAR_FILE ${MainClass} $SUITE_FILE &" - - -if [ $DEBUG == "true" ] -then - $cmd -else - $cmd >> /dev/null -fi - -if [ ${RERUN} == "true" ]; then - if [ -f ${TARGET_DIR}/${fileName} ]; then - echo "Prepare" ${TARGET_DIR}/${fileName} "file to rerun all failed tests ..."; - prepareFailedXmlFile ${TARGET_DIR}/${fileName} $SUITE_FILE; - SUITE_FILE=${fileName}; - cmd="java -Xmx2048m -Xms1024m $JAVA_OPTION -DdisplayException=true -Dtargetlog=${TARGET_LOG_DIR} -Dfilepath=${FILES_TEST} -Dconfig.resource=${CONF_FILE} -Ddebug=${DEBUG} -Dlog4j.configuration=${LOGS_PROP_FILE} -cp $JAR_FILE ${MainClass} $SUITE_FILE &" - $cmd; - fi -fi - -status=`echo $?` - -source ExtentReport/versions.info -now=$(date +'%Y-%m-%d_%H_%M') -REPORT_NAME=${now} -VERSION=${osVersion} - -if [[ $env == *"DEV20"* ]] -then - MYENV="Nightly" -else - MYENV="" -fi - -COPY_REPORT_SCRIPT="copyToStorage.sh" -chmod +x ${COPY_REPORT_SCRIPT} -echo "copy report to storage..." -sh ./${COPY_REPORT_SCRIPT} ${REPORT_NAME} ${VERSION} ${MYENV} - - -MAILING_SCRIPT_NAME="sendMail.sh" -chmod +x ${MAILING_SCRIPT_NAME} -echo "Sending report via mail..." -`./${MAILING_SCRIPT_NAME} ${REPORT_NAME} ${VERSION} ${MYENV}` - - -echo "##################################################" -echo "################# status is ${status} #################" -echo "##################################################" - -exit $status diff --git a/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java index 39110c550..05d73a619 100644 --- a/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java +++ b/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java @@ -774,11 +774,12 @@ public class AaiApiTest extends BaseApiAaiTest { new PresetAAIGetVpnsByType(), new PresetAAIGetSubscribersGet() ),CLEAR_THEN_SET); - - String url = uri + "/aai_get_vpn_list"; + String internalPath = "/aai_get_vpn_list"; + String url = uri + internalPath; ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); final String requestId = response.getHeaders().getFirst("X-ECOMP-RequestID-echo"); LoggerFormatTest.assertHeadersAndMetricLogs(restTemplate, uri, requestId,"/network/vpn-bindings" , 1); + LoggerFormatTest.verifyExistenceOfIncomingReqsInAuditLogs(restTemplate, uri, requestId, internalPath); } @Test diff --git a/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java index f22b6de65..858b2f8ef 100644 --- a/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java +++ b/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java @@ -220,7 +220,7 @@ public class SdcApiTest extends BaseApiTest { public void whenCallSdc_thenRequestRecordedInMetricsLog() { ModelInfo modelInfo = ModelInfo.transportWithPnfsService; - + String internalPath = SDC_GET_SERVICE_MODEL + modelInfo.modelVersionId; registerExpectationFromPresets(ImmutableList.of( new PresetSDCGetServiceToscaModelGet(modelInfo), new PresetSDCGetServiceMetadataGet(modelInfo), @@ -228,11 +228,12 @@ public class SdcApiTest extends BaseApiTest { ), CLEAR_THEN_SET); ResponseEntity<String> response = restTemplate.getForEntity( - buildUri(SDC_GET_SERVICE_MODEL + modelInfo.modelVersionId), String.class); + buildUri(internalPath), String.class); final String requestId = response.getHeaders().getFirst("X-ECOMP-RequestID-echo"); LoggerFormatTest.assertHeadersAndMetricLogs(restTemplate, uri, requestId, SDC_ROOT_PATH, 2); + LoggerFormatTest.verifyExistenceOfIncomingReqsInAuditLogs(restTemplate, uri, requestId, internalPath); } } diff --git a/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java index 28b407697..8bc2a7390 100644 --- a/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java +++ b/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java @@ -139,6 +139,7 @@ public class ServiceInstanceMsoApiTest extends BaseMsoApiTest{ ResponseEntity<String> responseEntity = restTemplate.postForEntity(buildUri(MSO_ACTIVATE_FABRIC_CONFIGURATION), requestBody, String.class); String requestId = responseEntity.getHeaders().getFirst("X-ECOMP-RequestID-echo"); LoggerFormatTest.assertHeadersAndMetricLogs(restTemplate, uri, requestId, msoRootPath, 1); + LoggerFormatTest.verifyExistenceOfIncomingReqsInAuditLogs(restTemplate, uri, requestId, MSO_ACTIVATE_FABRIC_CONFIGURATION); } @Test(dataProvider = "errorCodes") diff --git a/vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java index e5a2a739b..f8bdc97e2 100644 --- a/vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java +++ b/vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java @@ -31,6 +31,7 @@ import org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet; import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet; import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet; import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet; +import org.onap.vid.more.LoggerFormatTest; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.testng.ITestResult; @@ -150,13 +151,15 @@ public class ServiceTreeApiTest extends BaseApiTest { new PresetAAIGetCloudRegionFromVnf(vnfPreset1.getInstanceId()), new PresetAAIGetCloudRegionFromVnf(vnfPreset2.getInstanceId()), new PresetAAIGetCloudRegionFromVnf(vnfPreset3.getInstanceId()), - new PresetAAIGetCloudRegionFromVnf(vnfPreset4.getInstanceId()) + new PresetAAIGetCloudRegionFromVnf(vnfPreset4.getInstanceId()), + new PresetAAIGetSubscribersGet() ), CLEAR_THEN_SET); String api_url = "aai_search_group_members?subscriberId={subscriberId}&serviceType={serviceType}&serviceInvariantId={serviceInvariantId}" + "&groupType={groupType}&groupRole={groupRole}"; - final String response = restTemplate.getForObject(buildUri(api_url), String.class, "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14", "LOAD-GROUP", "SERVICE-ACCESS"); + final ResponseEntity<String> responseEntity = restTemplate.getForEntity(buildUri(api_url), String.class, "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14", "LOAD-GROUP", "SERVICE-ACCESS"); + String response = responseEntity.getBody(); LOGGER.info(response); @@ -176,6 +179,7 @@ public class ServiceTreeApiTest extends BaseApiTest { .replace("VNF4_INSTANCE_TYPE", vnfPreset4.getInstanceType()); assertJsonEquals(response, expected); + LoggerFormatTest.assertHeadersAndMetricLogs(restTemplate, uri, echoedRequestId(responseEntity), "/network/generic-vnfs/generic-vnf/", 5); } @Test @@ -287,9 +291,14 @@ public class ServiceTreeApiTest extends BaseApiTest { .replace("NETWORK4_INSTANCE_NAME", l3NetworkPreset4.getInstanceName()) .replace("NETWORK4_INSTANCE_ID", l3NetworkPreset4.getInstanceId()); - String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id"); + ResponseEntity<String> response = restTemplate.getForEntity(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id"); - assertJsonEquals(response, expected); + assertJsonEquals(response.getBody(), expected); + LoggerFormatTest.assertHeadersAndMetricLogs(restTemplate, uri, echoedRequestId(response), "/vf-modules", 2); + } + + private String echoedRequestId(ResponseEntity<?> response) { + return response.getHeaders().getFirst("X-ECOMP-RequestID-echo"); } @Override diff --git a/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java b/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java index 6638a0e23..7a4eedfa9 100644 --- a/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java +++ b/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java @@ -131,6 +131,23 @@ public class LoggerFormatTest extends BaseApiTest { return lines; } + public static void verifyExistenceOfIncomingReqsInAuditLogs(RestTemplate restTemplate, URI uri, String requestId, + String path){ + List<String> logLines = getRequestLogLines(requestId, LogName.audit2019, restTemplate, uri); + String requestIdPrefix = "RequestID="; + assertThat("request id must be found in exactly two rows - entry & exit message in audit log, and include the req path", + logLines, + containsInRelativeOrder( + allOf( + containsString(requestIdPrefix+requestId), + containsString("ENTRY"), + containsString(path)), + allOf( + containsString(requestIdPrefix+requestId), + containsString("EXIT"), + containsString(path)) + )); + } public static void assertHeadersAndMetricLogs(RestTemplate restTemplate, URI uri, String requestId, String path, int requestsSize) { List<String> logLines = @@ -167,7 +184,7 @@ public class LoggerFormatTest extends BaseApiTest { } public static void assertIdsInMetricsLog(List<String> logLines, String requestId, String invocationId) { - assertThat("request id and invocation id must be found in exactly two rows", + assertThat("request id and invocation id must be found in exactly two rows in: \n" + String.join("\n", logLines), logLines, containsInRelativeOrder( allOf( diff --git a/vid-automation/src/test/resources/features.properties b/vid-automation/src/test/resources/features.properties index 63b9fc61b..08edbbe75 100644 --- a/vid-automation/src/test/resources/features.properties +++ b/vid-automation/src/test/resources/features.properties @@ -35,4 +35,5 @@ FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT = true FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH = false FLAG_FLASH_REDUCED_RESPONSE_CHANGEMG = true FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE = false -FLAG_SHOW_ORCHESTRATION_TYPE = false +FLAG_SHOW_ORCHESTRATION_TYPE = false, +FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE = false diff --git a/vid-ext-services-simulator/README.txt b/vid-ext-services-simulator/README.txt index 033210309..c46a5679a 100644 --- a/vid-ext-services-simulator/README.txt +++ b/vid-ext-services-simulator/README.txt @@ -137,7 +137,6 @@ Usage: Example of mocking the scheduler: -#scheduler.server.url=http://mtanjv9sdlg10.aic.cip.att.com:8989/scheduler scheduler.server.url=http://localhost:7080/vidSimulator/scheduler diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json index d1d23869f..dc14736cf 100644 --- a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json +++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json @@ -18,5 +18,7 @@ "FLAG_1908_RESUME_MACRO_SERVICE": true, "FLAG_ENABLE_WEBPACK_MODERN_UI": true, "FLAG_FLASH_REPLACE_VF_MODULE": true, - "FLAG_FLASH_MORE_ACTIONS_BUTTON_IN_OLD_VIEW_EDIT": true + "FLAG_FLASH_MORE_ACTIONS_BUTTON_IN_OLD_VIEW_EDIT": true, + "FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE": false, + "FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE": false } diff --git a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts index 689465c69..d6c37c936 100644 --- a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts +++ b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts @@ -8,6 +8,7 @@ export enum Features { FLAG_1902_VNF_GROUPING='FLAG_1902_VNF_GROUPING', FLAG_VF_MODULE_RESUME_STATUS_CREATE = 'FLAG_VF_MODULE_RESUME_STATUS_CREATE', FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE = 'FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE', + FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE = 'FLAG_1911_INSTANTIATION_ORDER_BUTTON_IN_ASYNC_ALACARTE', FLAG_1906_COMPONENT_INFO = 'FLAG_1906_COMPONENT_INFO', FLAG_1908_RESUME_MACRO_SERVICE = 'FLAG_1908_RESUME_MACRO_SERVICE', FLAG_FLASH_REPLACE_VF_MODULE ='FLAG_FLASH_REPLACE_VF_MODULE', |