diff options
52 files changed, 5449 insertions, 3688 deletions
diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/Authorizer.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/Authorizer.java deleted file mode 100644 index 27b887a..0000000 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/Authorizer.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ -package org.onap.ccsdk.dashboard.controller; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.Properties; -import java.util.Set; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - -import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; -import org.onap.portalsdk.core.web.support.AppUtils; - -public class Authorizer { - - private static Authorizer authorizer = new Authorizer(); - private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(Authorizer.class); - private static final String AUTH_PROP_FILE_NAME = "authorizer.properties"; - private static final String DCAE_ROLES_KEY = "dcae_roles"; - - public static Authorizer getAuthorizer() { - return authorizer; - } - - public boolean isAuthorized(HttpServletRequest request) { - final String method = request.getMethod(); - final String resource = request.getRequestURI(); - - final Set<Authorizer.Role> authorizedRoles = getAuthorizedRoles(method, resource); - - // Anybody can access this page, no need to check - if (authorizedRoles.contains(Role.ANY)) { - return true; - } - - final Set<Authorizer.Role> roles = getRoles(request); - final Set<Authorizer.Role> intersection = new HashSet<>(roles); - - intersection.retainAll(authorizedRoles); // Removes all roles in roles that aren't contained in authorizedRoles. - - return !intersection.isEmpty(); // If the intersection is not empty, then this user is authorized - } - - // Helper method to set roles - public void putRoles(HttpServletRequest request, Set<Role> roles) { - request.getSession().setAttribute(DCAE_ROLES_KEY, roles); - } - - // Returns roles for the current user making the request - @SuppressWarnings("unchecked") - private Set<Authorizer.Role> getRoles(HttpServletRequest request) { - - // If roles is empty, then write the user's roles to the session - if (request.getSession().getAttribute(DCAE_ROLES_KEY) == null) { - - // HashSet to be used to for putRoles - HashSet<Role> roles = new HashSet<>(); - roles.add(Role.READER); - - // Get roles and turn into list of role objects - HttpSession session = AppUtils.getSession(request); - String roleType = (String) session.getAttribute("auth_role"); - if (roleType != null) { - switch (roleType) { - case "ADMIN": - roles.add(Role.ADMIN); - break; - case "WRITE": - roles.add(Role.WRITER); - break; - case "READ": - roles.add(Role.READER); - break; - default: - roles.add(Role.READER); - break; - } - } - // Write user roles - putRoles(request, roles); - } - - // Check if attribute DCAE_ROLES_KEY is valid - final Object rawRoles = request.getSession().getAttribute(DCAE_ROLES_KEY); - - if (!(rawRoles instanceof Set<?>)) { - throw new RuntimeException("Unrecognized object found in session for key=" + DCAE_ROLES_KEY); - } - - return (Set<Authorizer.Role>) request.getSession().getAttribute(DCAE_ROLES_KEY); - } - - // Returns roles authorized to perform the requested method (i.e. - // getAuthorizedRoles("POST", "/ecd-app-att/deployments")) - private Set<Authorizer.Role> getAuthorizedRoles(String method, String resource) { - final Properties resourceRoles = new Properties(); - - try { - resourceRoles.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(AUTH_PROP_FILE_NAME)); - - final String[] splitMethodResourceKey = (method + resource.replace("/", ".")).split("\\.", 0); - final String methodResourceKey = splitMethodResourceKey[0] + "." + splitMethodResourceKey[2]; - - if (!resourceRoles.containsKey(methodResourceKey)) { - LOGGER.warn(AUTH_PROP_FILE_NAME + " does not contain roles for " + methodResourceKey + "; defaulting " - + Authorizer.Role.ANY); - return new HashSet<>(Collections.singleton(Role.ANY)); - } - - final String[] rawAuthorizedRoles = ((String) resourceRoles.get(methodResourceKey)).split(","); - final Set<Authorizer.Role> authorizedRoles = new HashSet<>(); - - for (String rawAuthorizedRole : rawAuthorizedRoles) { - authorizedRoles.add(Authorizer.Role.valueOf(rawAuthorizedRole)); - } - - return authorizedRoles; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public enum Role { - ADMIN, READER, WRITER, ANY, NONE; - } - -}
\ No newline at end of file diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CloudifyController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CloudifyController.java index 06ca980..16949cd 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CloudifyController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CloudifyController.java @@ -33,14 +33,11 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprint; import org.onap.ccsdk.dashboard.model.CloudifyBlueprintList; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintUpload; import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenant; import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; import org.onap.ccsdk.dashboard.model.CloudifyDeployment; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentList; -import org.onap.ccsdk.dashboard.model.CloudifyDeploymentRequest; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateRequest; import org.onap.ccsdk.dashboard.model.CloudifyEvent; import org.onap.ccsdk.dashboard.model.CloudifyEventList; @@ -53,12 +50,12 @@ import org.onap.ccsdk.dashboard.model.ECTransportModel; import org.onap.ccsdk.dashboard.model.RestResponseError; import org.onap.ccsdk.dashboard.model.RestResponsePage; import org.onap.ccsdk.dashboard.rest.CloudifyClient; -import org.onap.ccsdk.dashboard.util.DashboardProperties; import org.onap.portalsdk.core.domain.User; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.portalsdk.core.web.support.UserUtils; import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; @@ -81,8 +78,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; @RequestMapping("/") public class CloudifyController extends DashboardRestrictedBaseController { - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CloudifyController.class); - private CloudifyClient restClient; + private static EELFLoggerDelegate logger = + EELFLoggerDelegate.getLogger(CloudifyController.class); + + @Autowired + CloudifyClient cloudifyClient; /** * Enum for selecting an item type. @@ -94,37 +94,15 @@ public class CloudifyController extends DashboardRestrictedBaseController { private static Date begin; private static Date end; private static final String BLUEPRINTS_PATH = "blueprints"; - private static final String VIEW_BLUEPRINTS_PATH = "viewblueprints"; private static final String DEPLOYMENTS_PATH = "deployments"; private static final String EXECUTIONS_PATH = "executions"; private static final String TENANTS_PATH = "tenants"; private static final String NODE_INSTANCES_PATH = "node-instances"; private static final String UPDATE_DEPLOYMENT_PATH = "update-deployment"; - private static final String SECRETS_PATH = "secrets"; private static final String EVENTS_PATH = "events"; private static final String DEP_TENANT_STATUS = "deployment-status"; /** - * Supports sorting blueprints by ID - */ - private static Comparator<CloudifyBlueprint> blueprintComparator = new Comparator<CloudifyBlueprint>() { - @Override - public int compare(CloudifyBlueprint o1, CloudifyBlueprint o2) { - return o1.id.compareTo(o2.id); - } - }; - - /** - * Supports sorting deployments by ID - */ - private static Comparator<CloudifyDeployment> deploymentComparator = new Comparator<CloudifyDeployment>() { - @Override - public int compare(CloudifyDeployment o1, CloudifyDeployment o2) { - return o1.id.compareTo(o2.id); - } - }; - - /** * Supports sorting events by timestamp */ private static Comparator<CloudifyEvent> eventComparator = new Comparator<CloudifyEvent>() { @@ -148,49 +126,41 @@ public class CloudifyController extends DashboardRestrictedBaseController { * Gets one page of objects and supporting information via the REST client. On * success, returns a PaginatedRestResponse object as String. * - * @param option Specifies which item list type to get - * @param pageNum Page number of results + * @param option Specifies which item list type to get + * @param pageNum Page number of results * @param pageSize Number of items per browser page * @return JSON block as String, see above. * @throws Exception On any error; e.g., Network failure. */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - private String getItemListForPage(long userId, CloudifyDataItem option, int pageNum, int pageSize) - throws Exception { - if (this.restClient == null) { - this.restClient = getCloudifyRestClient(userId); - } - List itemList = null; - switch (option) { + @SuppressWarnings({"rawtypes"}) + private String getItemListForPage(long userId, CloudifyDataItem option, int pageNum, + int pageSize) throws Exception { /* - * case BLUEPRINT: itemList = restClient.getBlueprints().items; - * Collections.sort(itemList, blueprintComparator); break; case DEPLOYMENT: - * itemList = restClient.getDeployments().items; Collections.sort(itemList, - * deploymentComparator); break; + * if (this.restClient == null) { this.restClient = + * getCloudifyRestClient(userId); } */ - case TENANT: - itemList = restClient.getTenants().items; - break; - default: - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting page of items failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getItemListForPage caught exception"); - throw new Exception("getItemListForPage failed: unimplemented case: " + option.name()); + List itemList = null; + switch (option) { + /* + * case BLUEPRINT: itemList = restClient.getBlueprints().items; + * Collections.sort(itemList, blueprintComparator); break; case DEPLOYMENT: + * itemList = restClient.getDeployments().items; Collections.sort(itemList, + * deploymentComparator); break; + */ + case TENANT: + itemList = cloudifyClient.getTenants().items; + break; + default: + MDC.put(SystemProperties.STATUS_CODE, "ERROR"); + MDC.put("TargetEntity", "Cloudify Manager"); + MDC.put("TargetServiceName", "Cloudify Manager"); + MDC.put("ErrorCode", "300"); + MDC.put("ErrorCategory", "ERROR"); + MDC.put("ErrorDescription", "Getting page of items failed!"); + logger.error(EELFLoggerDelegate.errorLogger, "getItemListForPage caught exception"); + throw new Exception( + "getItemListForPage failed: unimplemented case: " + option.name()); } - /* - * String cloudPrimTenant = - * getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); - * String aicPrimTenant = - * getAppProperties().getProperty(DashboardProperties.AIC_TENANT_PRIM); - * - * for (CloudifyTenant ct: (List<CloudifyTenant>)itemList) { if ( - * ct.name.equals(cloudPrimTenant) ) { ct.dName = aicPrimTenant; } else { - * ct.dName = ct.name; } } - */ // Shrink if needed final int totalItems = itemList.size(); final int pageCount = (int) Math.ceil((double) totalItems / pageSize); @@ -247,30 +217,29 @@ public class CloudifyController extends DashboardRestrictedBaseController { * @param request HttpServletRequest * @return List of CloudifyBlueprint objects */ - @RequestMapping(value = { BLUEPRINTS_PATH }, method = RequestMethod.GET, produces = "application/json") - @ResponseBody - public String getBlueprintsByPage(HttpServletRequest request) { - preLogAudit(request); - String json = getItemListForPageWrapper(request, CloudifyDataItem.BLUEPRINT); - postLogAudit(request); - return json; - } - + /* + * @RequestMapping(value = { BLUEPRINTS_PATH }, method = RequestMethod.GET, + * produces = "application/json") + * + * @ResponseBody public String getBlueprintsByPage(HttpServletRequest request) { + * preLogAudit(request); String json = getItemListForPageWrapper(request, + * CloudifyDataItem.BLUEPRINT); postLogAudit(request); return json; } + */ /** * Serves one page of deployments * * @param request HttpServletRequest * @return List of CloudifyDeployment objects */ - @RequestMapping(value = { DEPLOYMENTS_PATH }, method = RequestMethod.GET, produces = "application/json") - @ResponseBody - public String getDeploymentsByPage(HttpServletRequest request) { - preLogAudit(request); - String json = getItemListForPageWrapper(request, CloudifyDataItem.DEPLOYMENT); - postLogAudit(request); - return json; - } + /* + * @RequestMapping(value = { DEPLOYMENTS_PATH }, method = RequestMethod.GET, + * produces = "application/json") + * + * @ResponseBody public String getDeploymentsByPage(HttpServletRequest request) + * { preLogAudit(request); String json = getItemListForPageWrapper(request, + * CloudifyDataItem.DEPLOYMENT); postLogAudit(request); return json; } + */ /** * gets the tenants list * @@ -303,8 +272,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - restClient = getCloudifyRestClient(request); - result = restClient.getBlueprint(id, tenant); + result = cloudifyClient.getBlueprint(id, tenant); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -314,7 +282,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Getting blueprint " + id + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getBlueprintById caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -338,39 +306,30 @@ public class CloudifyController extends DashboardRestrictedBaseController { * @throws Exception on serialization error * */ - @RequestMapping(value = { - VIEW_BLUEPRINTS_PATH + "/{id}" }, method = RequestMethod.GET, produces = "application/yaml") - @ResponseBody - public String viewBlueprintContentById(@PathVariable("id") String id, HttpServletRequest request) throws Exception { - preLogAudit(request); - ECTransportModel result = null; - try { - restClient = getCloudifyRestClient(request); - result = restClient.viewBlueprint(id); - } catch (HttpStatusCodeException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Viewing blueprint " + id + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "viewBlueprintContentById caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Viewing blueprint " + id + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "viewBlueprintContentById caught exception"); - result = new RestResponseError("getBlueprintContentById failed", t); - } finally { - postLogAudit(request); - } - return objectMapper.writeValueAsString(result); - } - + /* + * @RequestMapping(value = { VIEW_BLUEPRINTS_PATH + "/{id}" }, method = + * RequestMethod.GET, produces = "application/yaml") + * + * @ResponseBody public String viewBlueprintContentById(@PathVariable("id") + * String id, HttpServletRequest request) throws Exception { + * preLogAudit(request); ECTransportModel result = null; try { result = + * cloudifyClient.viewBlueprint(id); } catch (HttpStatusCodeException e) { + * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); + * MDC.put("ErrorDescription", "Viewing blueprint " + id + " failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "viewBlueprintContentById caught exception"); result = new + * RestResponseError(e.getResponseBodyAsString()); } catch (Throwable t) { + * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); + * MDC.put("ErrorDescription", "Viewing blueprint " + id + " failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "viewBlueprintContentById caught exception"); result = new + * RestResponseError("getBlueprintContentById failed", t); } finally { + * postLogAudit(request); } return objectMapper.writeValueAsString(result); } + */ /** * Processes request to upload a blueprint from a remote server. * @@ -379,39 +338,30 @@ public class CloudifyController extends DashboardRestrictedBaseController { * @return Blueprint as uploaded; or error. * @throws Exception on serialization error */ - @RequestMapping(value = { BLUEPRINTS_PATH }, method = RequestMethod.POST, produces = "application/json") - @ResponseBody - public String uploadBlueprint(HttpServletRequest request, @RequestBody CloudifyBlueprintUpload blueprint) - throws Exception { - preLogAudit(request); - ECTransportModel result = null; - try { - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.uploadBlueprint(blueprint); - } catch (HttpStatusCodeException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Uploading blueprint failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "uploadBlueprint caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Uploading blueprint failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "uploadBlueprint caught exception"); - result = new RestResponseError("uploadBlueprint failed", t); - } finally { - postLogAudit(request); - } - return objectMapper.writeValueAsString(result); - } - + /* + * @RequestMapping(value = { BLUEPRINTS_PATH }, method = RequestMethod.POST, + * produces = "application/json") + * + * @ResponseBody public String uploadBlueprint(HttpServletRequest + * request, @RequestBody CloudifyBlueprintUpload blueprint) throws Exception { + * preLogAudit(request); ECTransportModel result = null; try { result = + * cloudifyClient.uploadBlueprint(blueprint); } catch (HttpStatusCodeException + * e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); + * MDC.put("ErrorDescription", "Uploading blueprint failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "uploadBlueprint caught exception"); result = new + * RestResponseError(e.getResponseBodyAsString()); } catch (Throwable t) { + * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); + * MDC.put("ErrorDescription", "Uploading blueprint failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "uploadBlueprint caught exception"); result = new + * RestResponseError("uploadBlueprint failed", t); } finally { + * postLogAudit(request); } return objectMapper.writeValueAsString(result); } + */ /** * Deletes the specified blueprint. * @@ -421,43 +371,32 @@ public class CloudifyController extends DashboardRestrictedBaseController { * @return No content on success; error on failure. * @throws Exception On serialization failure */ - @RequestMapping(value = { BLUEPRINTS_PATH + "/{id}" }, method = RequestMethod.DELETE, produces = "application/json") - @ResponseBody - public String deleteBlueprint(@PathVariable("id") String id, HttpServletRequest request, - HttpServletResponse response) throws Exception { - preLogAudit(request); - ECTransportModel result = null; - try { - CloudifyClient restClient = getCloudifyRestClient(request); - int code = restClient.deleteBlueprint(id); - response.setStatus(code); - } catch (HttpStatusCodeException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting blueprint " + id + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteBlueprint caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting blueprint " + id + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteBlueprint caught exception"); - result = new RestResponseError("deleteBlueprint failed on ID " + id, t); - } finally { - postLogAudit(request); - } - if (result == null) - return null; - else - return objectMapper.writeValueAsString(result); - } + /* + * @RequestMapping(value = { BLUEPRINTS_PATH + "/{id}" }, method = + * RequestMethod.DELETE, produces = "application/json") + * + * @ResponseBody public String deleteBlueprint(@PathVariable("id") String id, + * HttpServletRequest request, HttpServletResponse response) throws Exception { + * preLogAudit(request); ECTransportModel result = null; try { int code = + * cloudifyClient.deleteBlueprint(id); response.setStatus(code); } catch + * (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); + * MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", + * "Cloudify Manager"); MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", + * "ERROR"); MDC.put("ErrorDescription", "Deleting blueprint " + id + + * " failed!"); logger.error(EELFLoggerDelegate.errorLogger, + * "deleteBlueprint caught exception"); result = new + * RestResponseError(e.getResponseBodyAsString()); } catch (Throwable t) { + * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); + * MDC.put("ErrorDescription", "Deleting blueprint " + id + " failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "deleteBlueprint caught exception"); result = new + * RestResponseError("deleteBlueprint failed on ID " + id, t); } finally { + * postLogAudit(request); } if (result == null) return null; else return + * objectMapper.writeValueAsString(result); } + */ /** * Gets the specified deployment. * @@ -475,11 +414,10 @@ public class CloudifyController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - CloudifyClient restClient = getCloudifyRestClient(request); if (tenant != null && tenant.length() > 0) { - result = restClient.getDeployment(id, tenant); + result = cloudifyClient.getDeployment(id, tenant); } else { - result = restClient.getDeployment(id); + result = cloudifyClient.getDeployment(id); } } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); @@ -490,7 +428,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Getting deployment " + id + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getDeploymentById caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -515,9 +453,6 @@ public class CloudifyController extends DashboardRestrictedBaseController { public String getTenantStatusForService(HttpServletRequest request, @RequestBody String[] serviceList) throws Exception { preLogAudit(request); - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getControllerRestClient: Failed to get application user"); /* * 1) Get all the tenant names 2) Get the deployment IDs per tenant for all the * tenants, aggregate the deployments list 3) Get the input deployments list @@ -525,18 +460,17 @@ public class CloudifyController extends DashboardRestrictedBaseController { * the list from step#3, get the execution status info and generate the final * response */ - ECTransportModel result = null; - HashMap<String, Object> resultMap = new HashMap<String, Object>(); + String outboundJson = ""; + CloudifyDeployedTenantList cfyTenantDeployMapList = null; + new HashMap<String, Object>(); List<CloudifyDeployedTenant> tenantList = new ArrayList<CloudifyDeployedTenant>(); List<CloudifyExecution> cfyExecList = new ArrayList<CloudifyExecution>(); try { - CloudifyClient restClient = getCloudifyRestClient(request); - List<CloudifyTenant> cldfyTen = restClient.getTenants().items; + List<CloudifyTenant> cldfyTen = cloudifyClient.getTenants().items; for (CloudifyTenant ct : (List<CloudifyTenant>) cldfyTen) { - result = restClient.getTenantInfoFromDeploy(ct.name); - tenantList.addAll(((CloudifyDeployedTenantList) result).items); + cfyTenantDeployMapList = cloudifyClient.getTenantInfoFromDeploy(ct.name); + tenantList.addAll(((CloudifyDeployedTenantList) cfyTenantDeployMapList).items); } - result = null; List<CloudifyDeployedTenant> currSrvcTenants = new ArrayList<CloudifyDeployedTenant>(); for (String serviceId : serviceList) { @@ -551,27 +485,23 @@ public class CloudifyController extends DashboardRestrictedBaseController { boolean isHelmType = false; boolean helmStatus = false; for (CloudifyDeployedTenant deplItem : currSrvcTenants) { - CloudifyExecutionList execResults = restClient.getExecutionsSummary(deplItem.id, deplItem.tenant_name); + CloudifyExecutionList execResults = + cloudifyClient.getExecutionsSummary(deplItem.id, deplItem.tenant_name); isHelmType = false; helmStatus = false; - CloudifyBlueprintList bpList = restClient.getBlueprint(deplItem.id, deplItem.tenant_name); + CloudifyBlueprintList bpList = + cloudifyClient.getBlueprint(deplItem.id, deplItem.tenant_name); Map<String, Object> bpPlan = bpList.items.get(0).plan; Map<String, String> workflows = (Map<String, String>) bpPlan.get("workflows"); - Map<String, String> pluginInfo = ((List<Map<String, String>>) bpPlan - .get("deployment_plugins_to_install")).get(0); + Map<String, String> pluginInfo = + ((List<Map<String, String>>) bpPlan.get("deployment_plugins_to_install")) + .get(0); if (pluginInfo.get("name").equals("helm-plugin")) { isHelmType = true; } if (workflows.containsKey("status")) { helmStatus = true; } - /* - * for (CloudifyExecution cfyExec: execResults.items) { if - * (cfyExec.workflow_id.equalsIgnoreCase("create_deployment_environment")) { - * Map<String, String> pluginInfo = ((List<Map<String, - * String>>)cfyExec.parameters.get("deployment_plugins_to_install")).get(0); if - * (pluginInfo.get("name").equals("helm-plugin") ) { isHelmType = true; } } } - */ for (CloudifyExecution cfyExec : execResults.items) { if (cfyExec.workflow_id.equalsIgnoreCase("install")) { cfyExec.is_helm = isHelmType; @@ -580,6 +510,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { } } } + outboundJson = objectMapper.writeValueAsString(cfyExecList); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -587,8 +518,17 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Getting deployments failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getTenantStatusForService caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); + logger.error(EELFLoggerDelegate.errorLogger, + "getTenantStatusForService caught exception"); + RestResponseError result = null; + result = new RestResponseError( + "getTenantStatusForService failed" + e.getResponseBodyAsString()); + try { + outboundJson = objectMapper.writeValueAsString(result); + } catch (JsonProcessingException jpe) { + // Should never, ever happen + outboundJson = "{ \"error\" : \"" + jpe.toString() + "\"}"; + } } catch (Throwable t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -596,13 +536,21 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Getting deployments failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getTenantStatusForService caught exception"); - result = new RestResponseError("getTenantStatusForService failed", t); + logger.error(EELFLoggerDelegate.errorLogger, + "getTenantStatusForService caught exception"); + RestResponseError result = null; + result = new RestResponseError("getTenantStatusForService failed"); + try { + outboundJson = objectMapper.writeValueAsString(result); + } catch (JsonProcessingException jpe) { + // Should never, ever happen + outboundJson = "{ \"error\" : \"" + jpe.toString() + "\"}"; + } } finally { postLogAudit(request); } - return objectMapper.writeValueAsString(cfyExecList); + return outboundJson; } /** @@ -613,39 +561,30 @@ public class CloudifyController extends DashboardRestrictedBaseController { * @return Body of deployment; error on failure * @throws Exception On serialization failure */ - @RequestMapping(value = { DEPLOYMENTS_PATH }, method = RequestMethod.POST, produces = "application/json") - @ResponseBody - public String createDeployment(HttpServletRequest request, @RequestBody CloudifyDeploymentRequest deployment) - throws Exception { - preLogAudit(request); - ECTransportModel result = null; - try { - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.createDeployment(deployment); - } catch (HttpStatusCodeException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Creating deployment failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "createDeployment caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Creating deployment failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "createDeployment caught exception"); - result = new RestResponseError("createDeployment failed", t); - } finally { - postLogAudit(request); - } - return objectMapper.writeValueAsString(result); - } - + /* + * @RequestMapping(value = { DEPLOYMENTS_PATH }, method = RequestMethod.POST, + * produces = "application/json") + * + * @ResponseBody public String createDeployment(HttpServletRequest + * request, @RequestBody CloudifyDeploymentRequest deployment) throws Exception + * { preLogAudit(request); ECTransportModel result = null; try { result = + * cloudifyClient.createDeployment(deployment); } catch (HttpStatusCodeException + * e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); + * MDC.put("ErrorDescription", "Creating deployment failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "createDeployment caught exception"); result = new + * RestResponseError(e.getResponseBodyAsString()); } catch (Throwable t) { + * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); + * MDC.put("ErrorDescription", "Creating deployment failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "createDeployment caught exception"); result = new + * RestResponseError("createDeployment failed", t); } finally { + * postLogAudit(request); } return objectMapper.writeValueAsString(result); } + */ /** * Deletes the specified deployment. * @@ -657,44 +596,35 @@ public class CloudifyController extends DashboardRestrictedBaseController { * @return Passes thru HTTP status code from remote endpoint; no body on success * @throws Exception on serialization failure */ - @RequestMapping(value = { - DEPLOYMENTS_PATH + "/{id}" }, method = RequestMethod.DELETE, produces = "application/json") - @ResponseBody - public String deleteDeployment(@PathVariable("id") String id, - @RequestParam(value = "ignore_live_nodes", required = false) Boolean ignoreLiveNodes, - HttpServletRequest request, HttpServletResponse response) throws Exception { - preLogAudit(request); - ECTransportModel result = null; - try { - CloudifyClient restClient = getCloudifyRestClient(request); - int code = restClient.deleteDeployment(id, ignoreLiveNodes == null ? false : ignoreLiveNodes); - response.setStatus(code); - } catch (HttpStatusCodeException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting deployment " + id + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteDeployment caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting deployment " + id + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteDeployment caught exception"); - result = new RestResponseError("deleteDeployment failed on ID " + id, t); - } finally { - postLogAudit(request); - } - if (result == null) - return null; - else - return objectMapper.writeValueAsString(result); - } + /* + * @RequestMapping(value = { DEPLOYMENTS_PATH + "/{id}" }, method = + * RequestMethod.DELETE, produces = "application/json") + * + * @ResponseBody public String deleteDeployment(@PathVariable("id") String id, + * + * @RequestParam(value = "ignore_live_nodes", required = false) Boolean + * ignoreLiveNodes, HttpServletRequest request, HttpServletResponse response) + * throws Exception { preLogAudit(request); ECTransportModel result = null; try + * { int code = cloudifyClient.deleteDeployment(id, ignoreLiveNodes == null ? + * false : ignoreLiveNodes); response.setStatus(code); } catch + * (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); + * MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", + * "Cloudify Manager"); MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", + * "ERROR"); MDC.put("ErrorDescription", "Deleting deployment " + id + + * " failed!"); logger.error(EELFLoggerDelegate.errorLogger, + * "deleteDeployment caught exception"); result = new + * RestResponseError(e.getResponseBodyAsString()); } catch (Throwable t) { + * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", + * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); + * MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", + * "Deleting deployment " + id + " failed!"); + * logger.error(EELFLoggerDelegate.errorLogger, + * "deleteDeployment caught exception"); result = new + * RestResponseError("deleteDeployment failed on ID " + id, t); } finally { + * postLogAudit(request); } if (result == null) return null; else return + * objectMapper.writeValueAsString(result); } + */ /** * Gets and serves one page of executions: * <OL> @@ -719,28 +649,26 @@ public class CloudifyController extends DashboardRestrictedBaseController { @RequestMapping(value = { EXECUTIONS_PATH }, method = RequestMethod.GET, produces = "application/json") @ResponseBody public String getExecutionsByPage(HttpServletRequest request, - @RequestParam(value = "deployment_id", required = false) String deployment_id, - @RequestParam(value = "status", required = false) String status, - @RequestParam(value = "tenant", required = false) String tenant) throws Exception { + @RequestParam(value = "deployment_id", required = false) String deployment_id, + @RequestParam(value = "status", required = false) String status, + @RequestParam(value = "tenant", required = true) String tenant) throws Exception { preLogAudit(request); ECTransportModel result = null; try { + if (tenant == null) { + throw new Exception("required tenant input missing"); + } List<CloudifyExecution> itemList = new ArrayList<CloudifyExecution>(); - CloudifyClient restClient = getCloudifyRestClient(request); List<String> depIds = new ArrayList<>(); if (deployment_id == null) { - CloudifyDeploymentList depList = restClient.getDeployments(); + CloudifyDeploymentList depList = cloudifyClient.getDeployments(); for (CloudifyDeployment cd : depList.items) depIds.add(cd.id); } else { depIds.add(deployment_id); } - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); - if (tenant == null) { - tenant = cloudPrimTenant; - } for (String depId : depIds) { - CloudifyExecutionList exeList = restClient.getExecutions(depId, tenant); + CloudifyExecutionList exeList = cloudifyClient.getExecutions(depId, tenant); itemList.addAll(exeList.items); } // Filter down to specified status as needed @@ -763,7 +691,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { if (totalItems > pageSize) itemList = getPageOfList(pageNum, pageSize, itemList); result = new RestResponsePage<>(totalItems, pageCount, itemList); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -798,12 +726,10 @@ public class CloudifyController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); if (tenant == null) { - tenant = cloudPrimTenant; + throw new Exception("required tenant input missing"); } - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.getExecutions(deployment_id, tenant); + result = cloudifyClient.getExecutions(deployment_id, tenant); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -814,7 +740,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { "Getting executions " + execution_id + " for deployment " + deployment_id + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getExecutionByIdAndDeploymentId caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -843,20 +769,19 @@ public class CloudifyController extends DashboardRestrictedBaseController { @SuppressWarnings("unchecked") @RequestMapping(value = { EVENTS_PATH }, method = RequestMethod.GET, produces = "application/json") @ResponseBody - public String getExecutionEventsById(@RequestParam(value = "execution_id", required = false) String execution_id, - @RequestParam(value = "logType", required = false) String isLogEvent, - @RequestParam(value = "tenant", required = false) String tenant, HttpServletRequest request) - throws Exception { + public String getExecutionEventsById( + @RequestParam(value = "execution_id", required = false) String execution_id, + @RequestParam(value = "logType", required = false) String isLogEvent, + @RequestParam(value = "tenant", required = true) String tenant, HttpServletRequest request) + throws Exception { preLogAudit(request); CloudifyEventList eventsList = null; ECTransportModel result = null; try { - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); if (tenant == null) { - tenant = cloudPrimTenant; + throw new Exception("required tenant input missing"); } - CloudifyClient restClient = getCloudifyRestClient(request); - eventsList = restClient.getEventlogs(execution_id, tenant); + eventsList = cloudifyClient.getEventlogs(execution_id, tenant); // Filter down to specified event type as needed List<CloudifyEvent> itemList = eventsList.items; if (!isLogEvent.isEmpty() && isLogEvent.equals("false")) { @@ -887,7 +812,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Getting executions " + execution_id + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getExecutionEventsById caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -903,124 +828,6 @@ public class CloudifyController extends DashboardRestrictedBaseController { } /** - * Gets the cloudify secret data for the specified secret name. - * - * - * @param secret_name Secret name (path variable) - * @param request HttpServletRequest - * @return CloudifySecret - * @throws Exception on serialization failure - */ - /* - * @RequestMapping(value = { SECRETS_PATH }, method = RequestMethod.GET, - * produces = "application/json") - * - * @ResponseBody public String getSecrets( - * - * @RequestParam(value = "tenant") String tenant, HttpServletRequest request) - * throws Exception { preLogAudit(request); ECTransportModel result = null; try - * { String cloudPrimTenant = - * getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); if - * (tenant == null) { tenant = cloudPrimTenant; } IControllerRestClient - * restClient = getControllerRestClient(); result = - * restClient.getSecrets(tenant); } catch (HttpStatusCodeException e) { - * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", - * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); - * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); - * MDC.put("ErrorDescription", "Getting secrets failed!"); - * logger.error(EELFLoggerDelegate.errorLogger, "getSecret caught exception"); - * result = new RestResponseError(e.getResponseBodyAsString()); } catch - * (Throwable t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - * MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", - * "Cloudify Manager"); MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", - * "ERROR"); MDC.put("ErrorDescription", "Getting secrets failed!"); - * logger.error(EELFLoggerDelegate.errorLogger, "getSecret caught exception"); - * result = new RestResponseError("getSecret failed", t); } finally { - * postLogAudit(request); } return objectMapper.writeValueAsString(result); } - * - * /** Gets the cloudify secret data for the specified secret name. - * - * - * @param secret_name Secret name (path variable) - * - * @param request HttpServletRequest - * - * @return CloudifySecret - * - * @throws Exception on serialization failure - */ - @RequestMapping(value = { - SECRETS_PATH + "/{secret_name}" }, method = RequestMethod.GET, produces = "application/json") - @ResponseBody - public String getSecret(@PathVariable("secret_name") String secret_name, - @RequestParam(value = "tenant") String tenant, HttpServletRequest request) throws Exception { - preLogAudit(request); - ECTransportModel result = null; - try { - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); - if (tenant == null) { - tenant = cloudPrimTenant; - } - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.getSecret(secret_name, tenant); - } catch (HttpStatusCodeException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting secret for name " + secret_name + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getSecret caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting secret for name " + secret_name + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getSecret caught exception"); - result = new RestResponseError("getSecret failed", t); - } finally { - postLogAudit(request); - } - return objectMapper.writeValueAsString(result); - } - - /** - * Processes request to create secrets in cloudify manager. - * - * @param request HttpServletRequest - * @param execution Execution model - * @return Information about the execution - * @throws Exception on serialization failure - */ - /* - * @RequestMapping(value = { SECRETS_PATH }, method = RequestMethod.POST, - * produces = "application/json") - * - * @ResponseBody public String createSecret(HttpServletRequest - * request, @RequestBody CloudifySecretUpload secret) throws Exception { - * preLogAudit(request); ECTransportModel result = null; try { - * IControllerRestClient restClient = getControllerRestClient(request); result = - * restClient.createSecret(secret); } catch (HttpStatusCodeException e) { - * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", - * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); - * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); - * MDC.put("ErrorDescription", "Starting execution failed!"); - * logger.error(EELFLoggerDelegate.errorLogger, - * "startExecution caught exception"); result = new - * RestResponseError(e.getResponseBodyAsString()); } catch (Throwable t) { - * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", - * "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); - * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); - * MDC.put("ErrorDescription", "Starting execution failed!"); - * logger.error(EELFLoggerDelegate.errorLogger, - * "startExecution caught exception"); result = new - * RestResponseError("startExecution failed", t); } finally { - * postLogAudit(request); } return objectMapper.writeValueAsString(result); } - */ - /** * Processes request to create an execution based on a deployment. * * @param request HttpServletRequest @@ -1035,12 +842,12 @@ public class CloudifyController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - CloudifyClient restClient = getCloudifyRestClient(request); - if (!execution.workflow_id.equals("status") && !execution.getParameters().containsKey("node_instance_id")) { + if (!execution.workflow_id.equals("status") + && !execution.getParameters().containsKey("node_instance_id")) { // get the node instance ID for the deployment String nodeInstId = ""; - CloudifyNodeInstanceIdList nodeInstList = restClient.getNodeInstanceId(execution.getDeployment_id(), - execution.getTenant()); + CloudifyNodeInstanceIdList nodeInstList = cloudifyClient + .getNodeInstanceId(execution.getDeployment_id(), execution.getTenant()); if (nodeInstList != null) { nodeInstId = nodeInstList.items.get(0).id; } @@ -1048,7 +855,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { inParms.put("node_instance_id", nodeInstId); execution.setParameters(inParms); } - result = restClient.startExecution(execution); + result = cloudifyClient.startExecution(execution); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -1058,7 +865,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Starting execution failed!"); logger.error(EELFLoggerDelegate.errorLogger, "startExecution caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -1088,8 +895,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.updateDeployment(execution); + result = cloudifyClient.updateDeployment(execution); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -1099,7 +905,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Updating deployment failed!"); logger.error(EELFLoggerDelegate.errorLogger, "updateDeployment caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -1135,8 +941,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { List<String> tenant = null; try { tenant = headers.get("tenant"); - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.cancelExecution(id, parameters, tenant.get(0)); + result = cloudifyClient.cancelExecution(id, parameters, tenant.get(0)); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -1146,7 +951,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Cancelling execution " + id + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "cancelExecution caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -1183,8 +988,10 @@ public class CloudifyController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.getNodeInstanceId(deploymentId, nodeId, tenant); + if (tenant == null) { + throw new Exception("required tenant input missing"); + } + result = cloudifyClient.getNodeInstanceId(deploymentId, nodeId, tenant); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -1195,7 +1002,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { + nodeId + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getNodeInstanceId caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -1219,12 +1026,10 @@ public class CloudifyController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); if (tenant == null) { - tenant = cloudPrimTenant; + throw new Exception("required tenant input missing"); } - CloudifyClient restClient = getCloudifyRestClient(request); - result = restClient.getNodeInstanceVersion(deploymentId, tenant); + result = cloudifyClient.getNodeInstanceVersion(deploymentId, tenant); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -1234,7 +1039,7 @@ public class CloudifyController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Getting executions for deployment " + deploymentId + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getExecutionByIdAndDeploymentId caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CommonApiController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CommonApiController.java index efe2ab7..c50fcec 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CommonApiController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/CommonApiController.java @@ -26,11 +26,9 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Scanner; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -77,7 +75,6 @@ import org.onap.ccsdk.dashboard.rest.CloudifyClient; import org.onap.ccsdk.dashboard.rest.DeploymentHandlerClient; import org.onap.ccsdk.dashboard.rest.InventoryClient; import org.onap.ccsdk.dashboard.service.ControllerEndpointService; -import org.onap.ccsdk.dashboard.util.DashboardProperties; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SystemProperties; import org.slf4j.MDC; @@ -97,27 +94,31 @@ import org.springframework.web.client.HttpStatusCodeException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; @RestController @RequestMapping("/ecomp-api") public class CommonApiController extends DashboardRestrictedBaseController { - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(DeploymentHandlerController.class); + private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CommonApiController.class); private static final String COMPONENTS_PATH = "components"; private static final String DEPLOYMENTS_PATH = "deployments"; private static final String SERVICE_TYPES_PATH = "blueprints"; private static final String EXECUTIONS_PATH = "executions"; - private static final String API_HELP = "docs"; - private static final String DOCS_FILE_NAME = "ecompApiHelp.txt"; - private static final String DEP_IDS_FOR_TYPE = "deployments/typeIds"; private static final String DEP_TENANT_STATUS = "deployment-status"; private static final String TENANTS_PATH = "tenants"; @Autowired private ControllerEndpointService controllerEndpointService; + @Autowired + InventoryClient inventoryClient; + + @Autowired + DeploymentHandlerClient deploymentHandlerClient; + + @Autowired + CloudifyClient cloudifyClient; + /** * Enum for selecting an item type. */ @@ -160,8 +161,7 @@ public class CommonApiController extends DashboardRestrictedBaseController { @ResponseBody public String getTenants(HttpServletRequest request) throws Exception { preLogAudit(request); - CloudifyClient restClient = getCloudifyRestClient(); - List itemList = restClient.getTenants().items; + List itemList = cloudifyClient.getTenants().items; final int totalItems = itemList.size(); final int pageSize = 20; final int pageNum = 1; @@ -189,15 +189,14 @@ public class CommonApiController extends DashboardRestrictedBaseController { * the list from step#3, get the execution status info and generate the final * response */ + String outboundJson = ""; ECTransportModel result = null; - HashMap<String, Object> resultMap = new HashMap<String, Object>(); List<CloudifyDeployedTenant> tenantList = new ArrayList<CloudifyDeployedTenant>(); List<CloudifyExecution> cfyExecList = new ArrayList<CloudifyExecution>(); try { - CloudifyClient restClient = getCloudifyRestClient(); - List<CloudifyTenant> cldfyTen = restClient.getTenants().items; + List<CloudifyTenant> cldfyTen = cloudifyClient.getTenants().items; for (CloudifyTenant ct : (List<CloudifyTenant>) cldfyTen) { - result = restClient.getTenantInfoFromDeploy(ct.name); + result = cloudifyClient.getTenantInfoFromDeploy(ct.name); tenantList.addAll(((CloudifyDeployedTenantList) result).items); } result = null; @@ -213,13 +212,15 @@ public class CommonApiController extends DashboardRestrictedBaseController { } // Get concise execution status for each of the tenant deployment items for (CloudifyDeployedTenant deplItem : currSrvcTenants) { - CloudifyExecutionList execResults = restClient.getExecutionsSummary(deplItem.id, deplItem.tenant_name); + CloudifyExecutionList execResults = + cloudifyClient.getExecutionsSummary(deplItem.id, deplItem.tenant_name); for (CloudifyExecution cfyExec : execResults.items) { if (cfyExec.workflow_id.equalsIgnoreCase("install")) { cfyExecList.add(cfyExec); } } } + outboundJson = objectMapper.writeValueAsString(cfyExecList); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -229,7 +230,13 @@ public class CommonApiController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Getting deployments failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getTenantStatusForService caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + try { + outboundJson = objectMapper.writeValueAsString(result); + } catch (JsonProcessingException jpe) { + // Should never, ever happen + outboundJson = "{ \"error\" : \"" + jpe.toString() + "\"}"; + } + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); MDC.put("TargetServiceName", "Cloudify Manager"); @@ -238,11 +245,17 @@ public class CommonApiController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Getting deployments failed!"); logger.error(EELFLoggerDelegate.errorLogger, "getTenantStatusForService caught exception"); result = new RestResponseError("getTenantStatusForService failed", t); + try { + outboundJson = objectMapper.writeValueAsString(result); + } catch (JsonProcessingException jpe) { + // Should never, ever happen + outboundJson = "{ \"error\" : \"" + jpe.toString() + "\"}"; + } } finally { postLogAudit(request); } - return objectMapper.writeValueAsString(cfyExecList); + return outboundJson; } @RequestMapping(value = { SERVICE_TYPES_PATH }, method = RequestMethod.POST, produces = "application/json") @@ -251,7 +264,7 @@ public class CommonApiController extends DashboardRestrictedBaseController { String json = null; try { Blueprint.parse(serviceTypeUplReq.getBlueprintTemplate()); - InventoryClient inventoryClient = getInventoryClient(); + // InventoryClient inventoryClient = getInventoryClient(); Collection<String> serviceIds = new ArrayList<String>(); Collection<String> vnfTypes = new ArrayList<String>(); Collection<String> serviceLocations = new ArrayList<String>(); @@ -397,47 +410,46 @@ public class CommonApiController extends DashboardRestrictedBaseController { @SuppressWarnings({ "rawtypes", "unchecked" }) private String getItemListForPage(InventoryDataItem option, int pageNum, int pageSize, String searchBy, String filters) throws Exception { - - InventoryClient inventoryClient = getInventoryClient(); String outboundJson = ""; List itemList = null; switch (option) { - case SERVICES: - itemList = inventoryClient.getServices().collect(Collectors.toList()); - if (searchBy != null) { - itemList = (List) itemList.stream().filter(s -> ((Service) s).contains(searchBy)) - .collect(Collectors.toList()); - } - // Get the tenant names for all the deployments from Cloudify/API handler - ECTransportModel result = null; - List<CloudifyDeployedTenant> tenantList = new ArrayList<CloudifyDeployedTenant>(); - try { - CloudifyClient restClient = getCloudifyRestClient(); - List<CloudifyTenant> cldfyTen = restClient.getTenants().items; - for (CloudifyTenant ct : (List<CloudifyTenant>) cldfyTen) { - result = restClient.getTenantInfoFromDeploy(ct.name); - tenantList.addAll(((CloudifyDeployedTenantList) result).items); + case SERVICES: + itemList = inventoryClient.getServices().collect(Collectors.toList()); + if (searchBy != null) { + itemList = (List) itemList.stream() + .filter(s -> ((Service) s).contains(searchBy)).collect(Collectors.toList()); } - } catch (HttpStatusCodeException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting deployments failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getTenantInfoFromDeploy caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting deployments failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getDeploymentById caught exception"); - result = new RestResponseError("getTenantInfoFromDeploy failed", t); - } finally { + // Get the tenant names for all the deployments from Cloudify/API handler + ECTransportModel result = null; + List<CloudifyDeployedTenant> tenantList = new ArrayList<CloudifyDeployedTenant>(); + try { + List<CloudifyTenant> cldfyTen = cloudifyClient.getTenants().items; + for (CloudifyTenant ct : (List<CloudifyTenant>) cldfyTen) { + result = cloudifyClient.getTenantInfoFromDeploy(ct.name); + tenantList.addAll(((CloudifyDeployedTenantList) result).items); + } + } catch (HttpStatusCodeException e) { + MDC.put(SystemProperties.STATUS_CODE, "ERROR"); + MDC.put("TargetEntity", "Cloudify Manager"); + MDC.put("TargetServiceName", "Cloudify Manager"); + MDC.put("ErrorCode", "300"); + MDC.put("ErrorCategory", "ERROR"); + MDC.put("ErrorDescription", "Getting deployments failed!"); + logger.error(EELFLoggerDelegate.errorLogger, + "getTenantInfoFromDeploy caught exception"); + //result = new RestResponseError(e.getResponseBodyAsString()); + } catch (Throwable t) { + MDC.put(SystemProperties.STATUS_CODE, "ERROR"); + MDC.put("TargetEntity", "Cloudify Manager"); + MDC.put("TargetServiceName", "Cloudify Manager"); + MDC.put("ErrorCode", "300"); + MDC.put("ErrorCategory", "ERROR"); + MDC.put("ErrorDescription", "Getting deployments failed!"); + logger.error(EELFLoggerDelegate.errorLogger, + "getDeploymentById caught exception"); + //result = new RestResponseError("getTenantInfoFromDeploy failed", t); + } finally { } @@ -471,7 +483,9 @@ public class CommonApiController extends DashboardRestrictedBaseController { bpOut.setTypeName(bp.getTypeName()); break; case "typeId": + if (bp.getTypeId().isPresent()) { bpOut.setTypeId(bp.getTypeId().get()); + } break; case "typeVersion": bpOut.setTypeVersion(bp.getTypeVersion()); @@ -512,7 +526,7 @@ public class CommonApiController extends DashboardRestrictedBaseController { @SuppressWarnings({ "rawtypes", "unchecked" }) private String getBlueprintTypeId(String searchBy, Optional<Integer> version, String typeId) throws Exception { - InventoryClient inventoryClient = getInventoryClient(); + // InventoryClient inventoryClient = getInventoryClient(); ServiceTypeQueryParams serviceQueryParams = null; if (version.isPresent()) { @@ -551,12 +565,10 @@ public class CommonApiController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); if (tenant == null) { - tenant = cloudPrimTenant; + throw new Exception("tenant name is missing"); } - CloudifyClient restClient = getCloudifyRestClient(); - result = restClient.getNodeInstanceVersion(deploymentId, tenant); + result = cloudifyClient.getNodeInstanceVersion(deploymentId, tenant); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -593,16 +605,15 @@ public class CommonApiController extends DashboardRestrictedBaseController { @RequestMapping(value = { DEPLOYMENTS_PATH + "/{deploymentId}/inputs" }, method = RequestMethod.GET, produces = "application/json") public String getDeploymentInputs(@PathVariable("deploymentId") String deploymentId, - @RequestParam(value = "tenant") String tenant, HttpServletRequest request) throws Exception { + @RequestParam(value = "tenant", required = true) String tenant, HttpServletRequest request) + throws Exception { preLogAudit(request); ECTransportModel result = null; try { - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); if (tenant == null) { - tenant = cloudPrimTenant; + throw new Exception("tenant name is missing"); } - CloudifyClient restClient = getCloudifyRestClient(); - result = restClient.getDeploymentInputs(deploymentId, tenant); + result = cloudifyClient.getDeploymentInputs(deploymentId, tenant); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -642,7 +653,6 @@ public class CommonApiController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - CloudifyClient restClient = getCloudifyRestClient(); String nodeInstId = ""; Map<String, Object> parameters = objectMapper.readValue(upgParams, new TypeReference<Map<String, Object>>() { @@ -652,14 +662,15 @@ public class CommonApiController extends DashboardRestrictedBaseController { parameters.remove("tenant"); parameters.remove("workflow"); // get the node instance ID for the deployment - CloudifyNodeInstanceIdList nodeInstList = restClient.getNodeInstanceId(deploymentId, tenant); + CloudifyNodeInstanceIdList nodeInstList = + cloudifyClient.getNodeInstanceId(deploymentId, tenant); if (nodeInstList != null) { nodeInstId = nodeInstList.items.get(0).id; } parameters.put("node_instance_id", nodeInstId); - CloudifyExecutionRequest execution = new CloudifyExecutionRequest(deploymentId, workflow, false, false, - tenant, parameters); - result = restClient.startExecution(execution); + CloudifyExecutionRequest execution = new CloudifyExecutionRequest(deploymentId, + workflow, false, false, tenant, parameters); + result = cloudifyClient.startExecution(execution); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -690,7 +701,7 @@ public class CommonApiController extends DashboardRestrictedBaseController { throws Exception { preLogAudit(request); List<ServiceTypeServiceMap> result = new ArrayList<ServiceTypeServiceMap>(); - InventoryClient inventoryClient = getInventoryClient(); + // InventoryClient inventoryClient = getInventoryClient(); ServiceQueryParams qryParams = new ServiceQueryParams.Builder().typeId(typeId).build(); ServiceRefList srvcRefs = inventoryClient.getServicesForType(qryParams); ServiceTypeServiceMap srvcMap = new ServiceTypeServiceMap(typeId, srvcRefs); @@ -747,11 +758,9 @@ public class CommonApiController extends DashboardRestrictedBaseController { postLogAudit(request); } } - DeploymentHandlerClient deploymentHandlerClient = null; try { - deploymentHandlerClient = getDeploymentHandlerClient(); - DeploymentResponse resp = deploymentHandlerClient.putDeployment(depName, - deploymentRequestObject.getTenant(), + DeploymentResponse resp = + deploymentHandlerClient.putDeployment(depName, deploymentRequestObject.getTenant(), new DeploymentRequest(srvcTypeId, deploymentRequestObject.getInputs())); DeploymentResponseLinks deplLinks = resp.getLinks(); String deplStatus = deplLinks.getStatus(); @@ -800,16 +809,6 @@ public class CommonApiController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Deployment failed!"); logger.error(EELFLoggerDelegate.errorLogger, "putDeployment caught exception"); json = objectMapper.writeValueAsString(new RestResponseError(e.getMessage())); - } catch (JsonProcessingException jpe) { - // Should never, ever happen - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Deployment Handler"); - MDC.put("TargetServiceName", "Deployment Handler"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deployment failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "putDeployment caught exception"); - json = "{ \"error\" : \"" + jpe.toString() + "\"}"; } catch (Throwable t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Deployment Handler"); @@ -863,12 +862,10 @@ public class CommonApiController extends DashboardRestrictedBaseController { } finally { postLogAudit(request); } - DeploymentHandlerClient deploymentHandlerClient = null; try { - deploymentHandlerClient = getDeploymentHandlerClient(); - json = objectMapper.writeValueAsString( - deploymentHandlerClient.updateDeployment(deploymentId, deploymentRequestObject.getTenant(), - new DeploymentRequest(srvcTypeId, deploymentRequestObject.getInputs()))); + json = objectMapper.writeValueAsString(deploymentHandlerClient.updateDeployment( + deploymentId, deploymentRequestObject.getTenant(), + new DeploymentRequest(srvcTypeId, deploymentRequestObject.getInputs()))); } catch (BadRequestException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Deployment Handler"); @@ -948,12 +945,10 @@ public class CommonApiController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - String cloudPrimTenant = getAppProperties().getProperty(DashboardProperties.CLOUDIFY_TENANT_PRIM); if (tenant == null) { - tenant = cloudPrimTenant; + throw new Exception("tenant name is missing"); } - CloudifyClient restClient = getCloudifyRestClient(); - result = restClient.getExecutionsSummary(deploymentId, tenant); + result = cloudifyClient.getExecutionsSummary(deploymentId, tenant); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -995,7 +990,7 @@ public class CommonApiController extends DashboardRestrictedBaseController { preLogAudit(request); String json = "{\"202\": \"OK\"}"; try { - InventoryClient inventoryClient = getInventoryClient(); + // InventoryClient inventoryClient = getInventoryClient(); ServiceQueryParams qryParams = new ServiceQueryParams.Builder().typeId(typeId).build(); ServiceRefList srvcRefs = inventoryClient.getServicesForType(qryParams); if (srvcRefs != null && srvcRefs.totalCount > 0) { @@ -1045,15 +1040,20 @@ public class CommonApiController extends DashboardRestrictedBaseController { * @return * @throws Exception */ - @RequestMapping(value = { - DEPLOYMENTS_PATH + "/{deploymentId}" }, method = RequestMethod.DELETE, produces = "application/json") - public String deleteDeployment(@PathVariable("deploymentId") String deploymentId, HttpServletRequest request, - @RequestParam("tenant") String tenant, HttpServletResponse response) throws Exception { + @RequestMapping( + value = {DEPLOYMENTS_PATH + "/{deploymentId}"}, + method = RequestMethod.DELETE, + produces = "application/json") + public String deleteDeployment(@PathVariable("deploymentId") String deploymentId, + HttpServletRequest request, @RequestParam(value = "tenant", required = true) String tenant, + HttpServletResponse response) throws Exception { preLogAudit(request); String json = null; StringBuffer status = new StringBuffer(); try { - DeploymentHandlerClient deploymentHandlerClient = getDeploymentHandlerClient(); + if (tenant == null) { + throw new Exception("tenant name is missing"); + } deploymentHandlerClient.deleteDeployment(deploymentId, tenant); String self = request.getRequestURL().toString().split("\\?")[0]; status.append(self).append("/executions?tenant=").append(tenant); @@ -1097,16 +1097,6 @@ public class CommonApiController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Deleting deployment " + deploymentId + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "deleteDeployment caught exception"); json = objectMapper.writeValueAsString(new RestResponseError(e.getMessage())); - } catch (JsonProcessingException jpe) { - // Should never, ever happen - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Deployment Handler"); - MDC.put("TargetServiceName", "Deployment Handler"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting deployment " + deploymentId + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteDeployment caught exception"); - json = "{ \"error\" : \"" + jpe.toString() + "\"}"; } catch (Throwable t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Deployment Handler"); @@ -1143,8 +1133,7 @@ public class CommonApiController extends DashboardRestrictedBaseController { List<String> tenant = null; try { tenant = headers.get("tenant"); - CloudifyClient restClient = getCloudifyRestClient(); - result = restClient.cancelExecution(id, parameters, tenant.get(0)); + result = cloudifyClient.cancelExecution(id, parameters, tenant.get(0)); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Cloudify Manager"); @@ -1177,8 +1166,6 @@ public class CommonApiController extends DashboardRestrictedBaseController { MDC.put(SystemProperties.AUDITLOG_BEGIN_TIMESTAMP, logDateFormat.format(begin)); MDC.put(SystemProperties.METRICSLOG_BEGIN_TIMESTAMP, logDateFormat.format(begin)); MDC.put(SystemProperties.STATUS_CODE, "COMPLETE"); - // logger.setRequestBasedDefaultsIntoGlobalLoggingContext(request, - // APP_NAME); } private void postLogAudit(HttpServletRequest request) { @@ -1188,7 +1175,7 @@ public class CommonApiController extends DashboardRestrictedBaseController { MDC.put("TargetServiceName", "Deployment Handler"); MDC.put(SystemProperties.AUDITLOG_END_TIMESTAMP, logDateFormat.format(end)); MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, logDateFormat.format(end)); - MDC.put(SystemProperties.MDC_TIMER, Long.toString((end.getTime() - begin.getTime()))); + //MDC.put(SystemProperties.MDC_TIMER, Long.toString((end.getTime() - begin.getTime()))); logger.info(EELFLoggerDelegate.auditLogger, request.getMethod() + request.getRequestURI()); logger.info(EELFLoggerDelegate.metricsLogger, request.getMethod() + request.getRequestURI()); } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ConsulController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ConsulController.java index feb8dc5..28f7520 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ConsulController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ConsulController.java @@ -21,7 +21,6 @@ *******************************************************************************/ package org.onap.ccsdk.dashboard.controller; -import java.time.Instant; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -45,6 +44,7 @@ import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.portalsdk.core.web.support.UserUtils; import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -67,6 +67,9 @@ public class ConsulController extends DashboardRestrictedBaseController { private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ConsulController.class); + @Autowired + ConsulClient consulClient; + /** * Enum for selecting an item type. */ @@ -118,28 +121,28 @@ public class ConsulController extends DashboardRestrictedBaseController { * @return JSON block as String, see above. * @throws Exception On any error; e.g., Network failure. */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - private String getItemListForPage(long userId, ConsulDataItem option, int pageNum, int pageSize, String dc) - throws Exception { - ConsulClient restClient = getConsulRestClient(userId); + @SuppressWarnings({"unchecked", "rawtypes"}) + private String getItemListForPage(long userId, ConsulDataItem option, int pageNum, int pageSize, + String dc) throws Exception { List itemList = null; switch (option) { - case NODES: - itemList = restClient.getNodes(dc); - Collections.sort(itemList, nodeHealthComparator); - break; - case DATACENTERS: - itemList = restClient.getDatacenters(); - break; - default: - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Consul"); - MDC.put("TargetServiceName", "Consul"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting page of items failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getItemListForPage caught exception"); - throw new Exception("getItemListForPage failed: unimplemented case: " + option.name()); + case NODES: + itemList = consulClient.getNodes(dc); + Collections.sort(itemList, nodeHealthComparator); + break; + case DATACENTERS: + itemList = consulClient.getDatacenters(); + break; + default: + MDC.put(SystemProperties.STATUS_CODE, "ERROR"); + MDC.put("TargetEntity", "Consul"); + MDC.put("TargetServiceName", "Consul"); + MDC.put("ErrorCode", "300"); + MDC.put("ErrorCategory", "ERROR"); + MDC.put("ErrorDescription", "Getting page of items failed!"); + logger.error(EELFLoggerDelegate.errorLogger, "getItemListForPage caught exception"); + throw new Exception( + "getItemListForPage failed: unimplemented case: " + option.name()); } final int totalItems = itemList.size(); // Shrink if needed @@ -204,9 +207,8 @@ public class ConsulController extends DashboardRestrictedBaseController { preLogAudit(request); Object result = null; try { - ConsulClient restClient = getConsulRestClient(request); - result = restClient.getServiceHealth(dc, serviceId); - } catch (Throwable t) { + result = consulClient.getServiceHealth(dc, serviceId); + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Consul"); MDC.put("TargetServiceName", "Consul"); @@ -240,10 +242,9 @@ public class ConsulController extends DashboardRestrictedBaseController { ECTransportModel result = null; try { List<ConsulServiceHealth> itemList = new ArrayList<>(); - ConsulClient restClient = getConsulRestClient(request); - List<ConsulServiceInfo> svcInfoList = restClient.getServices(dc); + List<ConsulServiceInfo> svcInfoList = consulClient.getServices(dc); for (ConsulServiceInfo csi : svcInfoList) { - List<ConsulServiceHealth> csh = restClient.getServiceHealth(dc, csi.name); + List<ConsulServiceHealth> csh = consulClient.getServiceHealth(dc, csi.name); itemList.addAll(csh); } Collections.sort(itemList, serviceHealthComparator); @@ -256,7 +257,7 @@ public class ConsulController extends DashboardRestrictedBaseController { if (totalItems > pageSize) itemList = getPageOfList(pageNum, pageSize, itemList); result = new RestResponsePage<>(totalItems, pageCount, itemList); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Consul"); MDC.put("TargetServiceName", "Consul"); @@ -301,9 +302,8 @@ public class ConsulController extends DashboardRestrictedBaseController { preLogAudit(request); Object result = null; try { - ConsulClient restClient = getConsulRestClient(request); - result = restClient.getNodeServicesHealth(dc, nodeName); - } catch (Throwable t) { + result = consulClient.getNodeServicesHealth(dc, nodeName); + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Consul"); MDC.put("TargetServiceName", "Consul"); @@ -365,8 +365,7 @@ public class ConsulController extends DashboardRestrictedBaseController { throw new Exception("Required fields : [endpoint, interval] in checks"); } } - ConsulClient restClient = getConsulRestClient(request); - result = new RestResponseSuccess(restClient.registerService(registration)); + result = new RestResponseSuccess(consulClient.registerService(registration)); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Consul"); @@ -376,7 +375,7 @@ public class ConsulController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Registering service failed!"); logger.error(EELFLoggerDelegate.errorLogger, "registerService caught exception"); result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Consul"); MDC.put("TargetServiceName", "Consul"); @@ -406,9 +405,9 @@ public class ConsulController extends DashboardRestrictedBaseController { preLogAudit(request); ECTransportModel result = null; try { - ConsulClient restClient = getConsulRestClient(request); - int code = restClient.deregisterService(serviceName); - result = new RestResponseSuccess("Deregistration yielded code " + Integer.toString(code)); + int code = consulClient.deregisterService(serviceName); + result = + new RestResponseSuccess("Deregistration yielded code " + Integer.toString(code)); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Consul"); diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardHomeController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardHomeController.java index c5a624e..2b50b5b 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardHomeController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardHomeController.java @@ -2,22 +2,22 @@ * =============LICENSE_START========================================================= * * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. * ============LICENSE_END========================================================= * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ECOMP is a trademark and service mark of AT&T Intellectual Property. *******************************************************************************/ package org.onap.ccsdk.dashboard.controller; @@ -31,19 +31,14 @@ import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; -import org.onap.ccsdk.dashboard.domain.ControllerEndpoint; import org.onap.ccsdk.dashboard.domain.EcdComponent; -import org.onap.ccsdk.dashboard.model.ControllerEndpointCredentials; -import org.onap.ccsdk.dashboard.model.ControllerEndpointTransport; -import org.onap.ccsdk.dashboard.model.ControllerOpsTools; import org.onap.ccsdk.dashboard.model.EcdAppComponent; import org.onap.ccsdk.dashboard.model.RestResponseError; import org.onap.ccsdk.dashboard.model.RestResponseSuccess; import org.onap.ccsdk.dashboard.service.ControllerEndpointService; -import org.onap.portalsdk.core.domain.User; +import org.onap.ccsdk.dashboard.util.DashboardProperties; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SystemProperties; -import org.onap.portalsdk.core.web.support.UserUtils; import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -75,10 +70,8 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { private final ObjectMapper mapper; private static Date begin, end; - private static final String CONTROLLERS_PATH = "controllers"; private static final String COMPONENTS_PATH = "components"; private static final String USER_APPS_PATH = "user-apps"; - private static final String OPS_PATH = "ops"; private static final String APP_LABEL = "app-label"; /** @@ -94,7 +87,7 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { * @return View name key, which is resolved to a file using an Apache tiles * "definitions.xml" file. */ - @RequestMapping(value = { "/ecd" }, method = RequestMethod.GET) + @RequestMapping(value = {"/ecd"}, method = RequestMethod.GET) public ModelAndView dbcDefaultController() { // a model is only useful for JSP; this app is angular. return new ModelAndView("ecd_home_tdkey"); @@ -106,13 +99,17 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { * @param request HttpServletRequest * @return List of component name strings, or an error on failure */ - @RequestMapping(value = { COMPONENTS_PATH }, method = RequestMethod.GET, produces = "application/json") + @RequestMapping( + value = {COMPONENTS_PATH}, + method = RequestMethod.GET, + produces = "application/json") @ResponseBody public String getComponents(HttpServletRequest request) { preLogAudit(request); - String outboundJson = ""; // "['MSO','CLAMP','APPC','ECOMPSCHEDULER','POLICY']"; + String outboundJson = ""; try { HttpSession session = request.getSession(true); + @SuppressWarnings("unchecked") Set<String> userApps = (Set<String>) session.getAttribute("authComponents"); if (userApps == null) { userApps = new TreeSet<String>(); @@ -122,19 +119,21 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { List<EcdComponent> dbResult = controllerEndpointService.getComponents(); - List dcaeCompList = (List) dbResult.stream().filter(s -> ((EcdComponent) s).contains("dcae")) - .collect(Collectors.toList()); + List dcaeCompList = (List) dbResult.stream() + .filter(s -> ((EcdComponent) s).contains("dcae")).collect(Collectors.toList()); if (!userApps.isEmpty()) { // non-admin role level for (String userRole : userApps) { if (userRole.equalsIgnoreCase("dcae")) { if (dcaeCompList != null && !dcaeCompList.isEmpty()) { - EcdAppComponent dcaeAppComponent = new EcdAppComponent("DCAE", dcaeCompList); + EcdAppComponent dcaeAppComponent = + new EcdAppComponent("DCAE", dcaeCompList); ecdApps.add(dcaeAppComponent); } } else { - List tmpItemList = (List) dbResult.stream().filter(s -> ((EcdComponent) s).contains(userRole)) - .collect(Collectors.toList()); + List tmpItemList = (List) dbResult.stream() + .filter(s -> ((EcdComponent) s).contains(userRole)) + .collect(Collectors.toList()); if (tmpItemList != null) { logger.debug(">>>> adding filtered items"); filterList.addAll(tmpItemList); @@ -177,11 +176,11 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { * Get the application label - name + environment * */ - @RequestMapping(value = { APP_LABEL }, method = RequestMethod.GET, produces = "application/json") + @RequestMapping(value = {APP_LABEL}, method = RequestMethod.GET, produces = "application/json") @ResponseBody public String getAppLabel(HttpServletRequest request) throws Exception { - return mapper.writeValueAsString(appProperties.getPropertyDef(appProperties.CONTROLLER_IN_ENV, "NA")); - // return mapper.writeValueAsString(systemProperties.getAppDisplayName()); + return mapper.writeValueAsString( + DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_IN_ENV, "NA")); } /** @@ -191,11 +190,14 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { * @return List of component name strings, or an error on failure */ @SuppressWarnings("unchecked") - @RequestMapping(value = { USER_APPS_PATH }, method = RequestMethod.GET, produces = "application/json") + @RequestMapping( + value = {USER_APPS_PATH}, + method = RequestMethod.GET, + produces = "application/json") @ResponseBody public String getUserApps(HttpServletRequest request) { preLogAudit(request); - String outboundJson = ""; // "['MSO','CLAMP','APPC','ECOMPSCHEDULER','POLICY']"; + String outboundJson = ""; try { HttpSession session = request.getSession(true); Set<String> userApps = (Set<String>) session.getAttribute("authComponents"); @@ -222,146 +224,23 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { /** * Sets the controller endpoint selection for the user. * - * @param request HttpServletRequest - * @param endpoint Body with endpoint details - * @return Result indicating success or failure - * @throws Exception if application user is not found - */ - @RequestMapping(value = { COMPONENTS_PATH }, method = RequestMethod.POST, produces = "application/json") - @ResponseBody - public String insertComponent(HttpServletRequest request, @RequestBody EcdComponent newComponent) throws Exception { - preLogAudit(request); - String outboundJson = null; - controllerEndpointService.insertComponent(newComponent); - RestResponseSuccess success = new RestResponseSuccess( - "Inserted new component with name " + newComponent.getCname()); - outboundJson = mapper.writeValueAsString(success); - postLogAudit(request); - return outboundJson; - } - - /** - * Gets the OPS Tools URLs from dashboard properties - * - * @param request HttpServletRequest - * @return List of ControllerOpsTools objects, or an error on failure - * @throws Exception - */ - @RequestMapping(value = { OPS_PATH }, method = RequestMethod.GET, produces = "application/json") - @ResponseBody - public String getOpsToolUrls(HttpServletRequest request) { - preLogAudit(request); - String outboundJson = null; - try { - List<ControllerOpsTools> opsList = getControllerOpsTools(); - outboundJson = mapper.writeValueAsString(opsList); - } catch (Exception ex) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DashboardHomeController"); - MDC.put("TargetServiceName", "DashboardHomeController"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Get Ops Tools URLs failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to get Ops Tools URL list"); - RestResponseError response = new RestResponseError("Failed to get Ops Tools URL list", ex); - outboundJson = response.toJson(); - } finally { - postLogAudit(request); - } - return outboundJson; - } - - // get sites - // get cfy, cnsl URLs - // get cfy tenants - // get cfy secret value for k8s ip per tenant - // construct models TenantOpsCluster, SiteOpsToolLinks - // return final model - /** - * Gets the available controller endpoints. - * * @param request HttpServletRequest - * @return List of ControllerEndpointTransport objects, or an error on failure - * @throws Exception if application user is not found - */ - @RequestMapping(value = { CONTROLLERS_PATH }, method = RequestMethod.GET, produces = "application/json") - @ResponseBody - public String getControllers(HttpServletRequest request) { - preLogAudit(request); - String outboundJson = null; - // Static data - ControllerEndpointCredentials[] configured = getControllerEndpoints(); - try { - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getLoginId() == null || appUser.getLoginId().length() == 0) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DashboardHomeController"); - MDC.put("TargetServiceName", "DashboardHomeController"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Get controllers failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to get application user"); - throw new Exception("getControllers: Failed to get application user"); - } - ControllerEndpointCredentials selectedInDb = getOrSetControllerEndpointSelection(appUser.getId()); - // Built result from properties - ArrayList<ControllerEndpointTransport> list = new ArrayList<>(); - for (ControllerEndpointCredentials ctrl : configured) { - // Check if this is the selected endpoint in DB - boolean selected = (selectedInDb != null && selectedInDb.getUrl() != null - && selectedInDb.getUrl().equals(ctrl.getUrl())); - // Result has no privileged information - ControllerEndpointTransport transport = new ControllerEndpointTransport(selected, ctrl.getName(), - ctrl.getUrl(), ctrl.getInventoryUrl(), ctrl.getDhandlerUrl(), ctrl.getConsulUrl()); - list.add(transport); - } - outboundJson = mapper.writeValueAsString(list); - } catch (Exception ex) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DashboardHomeController"); - MDC.put("TargetServiceName", "DashboardHomeController"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Get controllers failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to get controller endpoint list"); - RestResponseError response = new RestResponseError("Failed to get controller endpoint list", ex); - outboundJson = response.toJson(); - } finally { - postLogAudit(request); - } - return outboundJson; - } - - /** - * Sets the controller endpoint selection for the user. - * - * @param request HttpServletRequest * @param endpoint Body with endpoint details * @return Result indicating success or failure * @throws Exception if application user is not found */ - @RequestMapping(value = { CONTROLLERS_PATH }, method = RequestMethod.POST, produces = "application/json") + @RequestMapping( + value = {COMPONENTS_PATH}, + method = RequestMethod.POST, + produces = "application/json") @ResponseBody - public String setControllerSelection(HttpServletRequest request, @RequestBody ControllerEndpointTransport endpoint) - throws Exception { + public String insertComponent(HttpServletRequest request, + @RequestBody EcdComponent newComponent) throws Exception { preLogAudit(request); String outboundJson = null; - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getLoginId() == null || appUser.getLoginId().length() == 0) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DashboardHomeController"); - MDC.put("TargetServiceName", "DashboardHomeController"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Set controllers failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to get application user"); - postLogAudit(request); - throw new Exception("setControllerSelection: Failed to get application user"); - } - ControllerEndpoint dbEntry = new ControllerEndpoint(appUser.getId(), endpoint.getName(), endpoint.getUrl(), - endpoint.getInventoryUrl(), endpoint.getDhandlerUrl()); - controllerEndpointService.updateControllerEndpointSelection(dbEntry); - RestResponseSuccess success = new RestResponseSuccess("Updated selection to " + endpoint.getName()); + controllerEndpointService.insertComponent(newComponent); + RestResponseSuccess success = + new RestResponseSuccess("Inserted new component with name " + newComponent.getCname()); outboundJson = mapper.writeValueAsString(success); postLogAudit(request); return outboundJson; @@ -372,7 +251,6 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { MDC.put(SystemProperties.AUDITLOG_BEGIN_TIMESTAMP, logDateFormat.format(begin)); MDC.put(SystemProperties.METRICSLOG_BEGIN_TIMESTAMP, logDateFormat.format(begin)); MDC.put(SystemProperties.STATUS_CODE, "COMPLETE"); - // logger.setRequestBasedDefaultsIntoGlobalLoggingContext(request, APP_NAME); } public void postLogAudit(HttpServletRequest request) { @@ -384,6 +262,7 @@ public class DashboardHomeController extends DashboardRestrictedBaseController { MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, logDateFormat.format(end)); MDC.put(SystemProperties.MDC_TIMER, Long.toString((end.getTime() - begin.getTime()))); logger.info(EELFLoggerDelegate.auditLogger, request.getMethod() + request.getRequestURI()); - logger.info(EELFLoggerDelegate.metricsLogger, request.getMethod() + request.getRequestURI()); + logger.info(EELFLoggerDelegate.metricsLogger, + request.getMethod() + request.getRequestURI()); } } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardRestrictedBaseController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardRestrictedBaseController.java index 441b529..f3b6147 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardRestrictedBaseController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DashboardRestrictedBaseController.java @@ -23,30 +23,13 @@ package org.onap.ccsdk.dashboard.controller; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; -import org.onap.ccsdk.dashboard.domain.ControllerEndpoint; -import org.onap.ccsdk.dashboard.model.ControllerEndpointCredentials; -import org.onap.ccsdk.dashboard.model.ControllerOpsTools; -import org.onap.ccsdk.dashboard.rest.CloudifyClient; -import org.onap.ccsdk.dashboard.rest.CloudifyMockClientImpl; -import org.onap.ccsdk.dashboard.rest.CloudifyRestClientImpl; -import org.onap.ccsdk.dashboard.rest.ConsulClient; -import org.onap.ccsdk.dashboard.rest.ConsulMockClientImpl; -import org.onap.ccsdk.dashboard.rest.ConsulRestClientImpl; -import org.onap.ccsdk.dashboard.rest.DeploymentHandlerClient; -import org.onap.ccsdk.dashboard.rest.DeploymentHandlerClientImpl; -import org.onap.ccsdk.dashboard.rest.InventoryClient; -import org.onap.ccsdk.dashboard.rest.RestInventoryClientImpl; -import org.onap.ccsdk.dashboard.rest.RestInventoryClientMockImpl; import org.onap.ccsdk.dashboard.service.ControllerEndpointService; import org.onap.ccsdk.dashboard.util.DashboardProperties; import org.onap.portalsdk.core.controller.RestrictedBaseController; -import org.onap.portalsdk.core.domain.User; -import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.annotation.JsonInclude; @@ -164,306 +147,4 @@ public class DashboardRestrictedBaseController extends RestrictedBaseController int toIndex = firstIndexOnNextPage < itemList.size() ? firstIndexOnNextPage : itemList.size(); return itemList.subList(fromIndex, toIndex); } - - /** - * Gets all configured controllers from properties. - * - * @return Array of ControllerEndpointRestricted objects - * @throws IllegalStateException if a required property is not found - */ - protected ControllerEndpointCredentials[] getControllerEndpoints() { - final String[] controllerKeys = DashboardProperties.getCsvListProperty(DashboardProperties.CONTROLLER_KEY_LIST); - ControllerEndpointCredentials[] controllers = new ControllerEndpointCredentials[controllerKeys.length]; - for (int i = 0; i < controllerKeys.length; ++i) { - String key = controllerKeys[i]; - final String name = DashboardProperties.getControllerProperty(key, - DashboardProperties.CONTROLLER_SUBKEY_NAME); - final String url = DashboardProperties.getControllerProperty(key, - DashboardProperties.CONTROLLER_SUBKEY_URL); - final String inventoryUrl = DashboardProperties.getControllerProperty(key, - DashboardProperties.CONTROLLER_SUBKEY_INVENTORY_URL); - final String dhandlerUrl = DashboardProperties.getControllerProperty(key, - DashboardProperties.CONTROLLER_SUBKEY_DHANDLER_URL); - final String consulUrl = DashboardProperties.getControllerProperty(key, - DashboardProperties.CONTROLLER_SUBKEY_CONSUL_URL); - final String user = DashboardProperties.getControllerProperty(key, - DashboardProperties.CONTROLLER_SUBKEY_USERNAME); - final String pass = DashboardProperties.getControllerProperty(key, - DashboardProperties.CONTROLLER_SUBKEY_PASS); - final boolean encr = Boolean.parseBoolean( - DashboardProperties.getControllerProperty(key, DashboardProperties.CONTROLLER_SUBKEY_ENCRYPTED)); - controllers[i] = new ControllerEndpointCredentials(false, name, url, inventoryUrl, dhandlerUrl, consulUrl, - user, pass, encr); - } - return controllers; - } - - /** - * Get the list of configured OPS Tools URLs from dashboard properties - * - * @return Array of ControllerOpsTools objects - * @throws IllegalStateException if a required property is not found - */ - protected List<ControllerOpsTools> getControllerOpsTools() { - List<ControllerOpsTools> opsList = new ArrayList<>(); - final String[] controllerKeys = DashboardProperties.getCsvListProperty(DashboardProperties.CONTROLLER_KEY_LIST); - String key = controllerKeys[0]; - final String cfyId = DashboardProperties.OPS_CLOUDIFY_URL.split("\\.")[1]; - final String cfyUrl = DashboardProperties.getControllerProperty(key, DashboardProperties.OPS_CLOUDIFY_URL); - final String k8Id = DashboardProperties.OPS_K8S_URL.split("\\.")[1]; - final String k8Url = DashboardProperties.getControllerProperty(key, DashboardProperties.OPS_K8S_URL); - final String grfId = DashboardProperties.OPS_GRAFANA_URL.split("\\.")[1]; - final String grfUrl = DashboardProperties.getControllerProperty(key, DashboardProperties.OPS_GRAFANA_URL); - final String cnslId = DashboardProperties.OPS_CONSUL_URL.split("\\.")[1]; - final String cnslUrl = DashboardProperties.getControllerProperty(key, DashboardProperties.OPS_CONSUL_URL); - final String promId = DashboardProperties.OPS_PROMETHEUS_URL.split("\\.")[1]; - final String promUrl = DashboardProperties.getControllerProperty(key, DashboardProperties.OPS_PROMETHEUS_URL); - final String dbclId = DashboardProperties.OPS_DBCL_URL.split("\\.")[1]; - final String dbclUrl = DashboardProperties.getControllerProperty(key, DashboardProperties.OPS_DBCL_URL); - opsList.add(new ControllerOpsTools(cfyId, cfyUrl)); - opsList.add(new ControllerOpsTools(k8Id, k8Url)); - opsList.add(new ControllerOpsTools(grfId, grfUrl)); - opsList.add(new ControllerOpsTools(cnslId, cnslUrl)); - opsList.add(new ControllerOpsTools(promId, promUrl)); - opsList.add(new ControllerOpsTools(dbclId, dbclUrl)); - - return opsList; - } - - /** - * Gets the controller endpoint for the specified user ID. Chooses the first one - * from properties if the user has not selected one previously. - * - * @param userId Database User ID - * @return ControllerEndpointCredentials for the specified user - */ - protected ControllerEndpointCredentials getOrSetControllerEndpointSelection(long userId) { - // Always need the complete list from properties - ControllerEndpointCredentials[] configured = getControllerEndpoints(); - // See if the database has an entry for this user - ControllerEndpoint dbEntry = controllerEndpointService.getControllerEndpointSelection(userId); - // If no row found DAO returns an object with null entries. - if (dbEntry == null || dbEntry.getName() == null) { - // Arbitrarily choose the first one - ControllerEndpointCredentials first = configured[0]; - dbEntry = new ControllerEndpoint(userId, first.getName(), first.getUrl(), first.getInventoryUrl(), - first.getDhandlerUrl()); - controllerEndpointService.updateControllerEndpointSelection(dbEntry); - } - // Fetch complete details for the selected item - ControllerEndpointCredentials selected = null; - for (ControllerEndpointCredentials cec : configured) { - if (dbEntry.getUrl().equals(cec.getUrl())) { - selected = cec; - break; - } - } - // Defend against a stale database entry. - if (selected == null) { - selected = configured[0]; - dbEntry = new ControllerEndpoint(userId, selected.getName(), selected.getUrl(), selected.getInventoryUrl(), - selected.getDhandlerUrl()); - controllerEndpointService.updateControllerEndpointSelection(dbEntry); - } - return selected; - } - - protected ControllerEndpointCredentials getOrSetControllerEndpointSelection() { - ControllerEndpointCredentials[] configured = getControllerEndpoints(); - return configured[0]; - } - - /** - * Convenience method that gets the user ID from the session and fetches the - * REST client. Factors code out of subclass methods. - * - * @param request HttpServletRequest - * @return REST client appropriate for the user - */ - protected CloudifyClient getCloudifyRestClient(HttpServletRequest request) throws Exception { - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getCloudifyRestClient: Failed to get application user"); - return getCloudifyRestClient(appUser.getId()); - } - - /** - * Gets a REST client; either a mock client (returns canned data), or a real - * client with appropriate credentials from properties. - * - * @return REST client. - */ - protected CloudifyClient getCloudifyRestClient(long userId) throws Exception { - CloudifyClient result = null; - // Be robust to missing development-only property - boolean mock = false; - if (DashboardProperties.containsProperty(DashboardProperties.CONTROLLER_MOCK_DATA)) - mock = DashboardProperties.getBooleanProperty(DashboardProperties.CONTROLLER_MOCK_DATA); - if (mock) { - result = new CloudifyMockClientImpl(); - } else { - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(userId); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new CloudifyRestClientImpl(details.getUrl(), details.getUsername(), clearText); - } - return result; - } - - /** - * Gets a REST client; either a mock client (returns canned data), or a real - * client with appropriate credentials from properties. - * - * @return REST client. - */ - protected CloudifyClient getCloudifyRestClient() throws Exception { - CloudifyClient result = null; - // Be robust to missing development-only property - boolean mock = false; - if (DashboardProperties.containsProperty(DashboardProperties.CONTROLLER_MOCK_DATA)) - mock = DashboardProperties.getBooleanProperty(DashboardProperties.CONTROLLER_MOCK_DATA); - if (mock) { - result = new CloudifyMockClientImpl(); - } else { - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new CloudifyRestClientImpl(details.getUrl(), details.getUsername(), clearText); - } - return result; - } - - /** - * Convenience method that gets the user ID from the session and fetches the - * REST client. Factors code out of subclass methods. - * - * @param request HttpServletRequest - * @return REST client appropriate for the user - */ - protected ConsulClient getConsulRestClient(HttpServletRequest request) throws Exception { - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getControllerRestClient: Failed to get application user"); - return getConsulRestClient(appUser.getId()); - } - - /** - * Gets a REST client; either a mock client (returns canned data), or a real - * client with appropriate credentials from properties. - * - * @return REST client. - */ - protected ConsulClient getConsulRestClient(long userId) throws Exception { - ConsulClient result = null; - // Be robust to missing development-only property - boolean mock = false; - if (DashboardProperties.containsProperty(DashboardProperties.CONTROLLER_MOCK_DATA)) - mock = DashboardProperties.getBooleanProperty(DashboardProperties.CONTROLLER_MOCK_DATA); - if (mock) { - result = new ConsulMockClientImpl(); - } else { - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new ConsulRestClientImpl(details.getConsulUrl(), details.getUsername(), clearText); - } - return result; - } - - /** - * Gets a REST client; either a mock client (returns canned data), or a real - * client with appropriate credentials from properties. - * - * @return REST client. - */ - protected ConsulClient getConsulRestClient() throws Exception { - ConsulClient result = null; - // Be robust to missing development-only property - boolean mock = false; - if (DashboardProperties.containsProperty(DashboardProperties.CONTROLLER_MOCK_DATA)) - mock = DashboardProperties.getBooleanProperty(DashboardProperties.CONTROLLER_MOCK_DATA); - if (mock) { - result = new ConsulMockClientImpl(); - } else { - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new ConsulRestClientImpl(details.getConsulUrl(), details.getUsername(), clearText); - } - return result; - } - - /** - * Convenience method that gets the user ID from the session and fetches the - * Inventory client. Factors code out of subclass methods. - * - * @param request HttpServletRequest - * @return Inventory client appropriate for the user - */ - protected InventoryClient getInventoryClient(HttpServletRequest request) throws Exception { - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getControllerRestClient: Failed to get application user"); - return getInventoryClient(appUser.getId()); - } - - /** - * Gets an Inventory client with appropriate credentials from properties. - * - * @return Inventory Client. - */ - protected InventoryClient getInventoryClient(long userId) throws Exception { - InventoryClient result = null; - boolean mock = false; - if (DashboardProperties.containsProperty(DashboardProperties.CONTROLLER_MOCK_DATA)) - mock = DashboardProperties.getBooleanProperty(DashboardProperties.CONTROLLER_MOCK_DATA); - if (mock) { - result = new RestInventoryClientMockImpl(); - } else { - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(userId); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new RestInventoryClientImpl(details.getInventoryUrl(), details.getUsername(), clearText); - } - return result; - } - - protected InventoryClient getInventoryClient() throws Exception { - InventoryClient result = null; - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new RestInventoryClientImpl(details.getInventoryUrl(), details.getUsername(), clearText); - return result; - } - - /** - * Convenience method that gets the user ID from the session and fetches the - * Deployment Handler client. Factors code out of subclass methods. - * - * @param request HttpServletRequest - * @return Deployment Handler client appropriate for the user - */ - protected DeploymentHandlerClient getDeploymentHandlerClient(HttpServletRequest request) throws Exception { - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getControllerRestClient: Failed to get application user"); - return getDeploymentHandlerClient(appUser.getId()); - } - - /** - * Gets a Deployment Handler client with appropriate credentials from - * properties. - * - * @return Deployment Handler Client. - */ - protected DeploymentHandlerClient getDeploymentHandlerClient(long userId) throws Exception { - DeploymentHandlerClient result = null; - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(userId); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new DeploymentHandlerClientImpl(details.getDhandlerUrl(), details.getUsername(), clearText); - return result; - } - - protected DeploymentHandlerClient getDeploymentHandlerClient() throws Exception { - DeploymentHandlerClient result = null; - ControllerEndpointCredentials details = getOrSetControllerEndpointSelection(); - final String clearText = details.getEncryptedPassword() ? details.decryptPassword() : details.getPassword(); - result = new DeploymentHandlerClientImpl(details.getDhandlerUrl(), details.getUsername(), clearText); - return result; - } } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DeploymentHandlerController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DeploymentHandlerController.java index 1c3ac8f..0346ad7 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DeploymentHandlerController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/DeploymentHandlerController.java @@ -41,6 +41,7 @@ import org.onap.ccsdk.dashboard.rest.DeploymentHandlerClient; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SystemProperties; import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -60,7 +61,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; @RequestMapping("/deploymenthandler") public class DeploymentHandlerController extends DashboardRestrictedBaseController { - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(DeploymentHandlerController.class); + private static EELFLoggerDelegate logger = + EELFLoggerDelegate.getLogger(DeploymentHandlerController.class); + + @Autowired + DeploymentHandlerClient deploymentHandlerClient; private static final String DEPLOYMENTS_PATH = "dcae-deployments"; @@ -74,7 +79,6 @@ public class DeploymentHandlerController extends DashboardRestrictedBaseControll preLogAudit(request); String json = null; try { - DeploymentHandlerClient deploymentHandlerClient = getDeploymentHandlerClient(request); if (deploymentRequestObject.getMethod().equals("create")) { json = objectMapper.writeValueAsString(deploymentHandlerClient.putDeployment( deploymentRequestObject.getDeploymentId(), deploymentRequestObject.getTenant(), @@ -121,18 +125,9 @@ public class DeploymentHandlerController extends DashboardRestrictedBaseControll MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Deployment failed! Downstream Exception"); logger.error(EELFLoggerDelegate.errorLogger, "putDeployment caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("Downstream Exception " + e.getMessage())); - } catch (JsonProcessingException jpe) { - // Should never, ever happen - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Deployment Handler"); - MDC.put("TargetServiceName", "Deployment Handler"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deployment failed! Json Processing Exception"); - logger.error(EELFLoggerDelegate.errorLogger, "putDeployment caught exception"); - json = "{ \"error\" : \"" + jpe.toString() + "\"}"; - } catch (Throwable t) { + json = objectMapper.writeValueAsString( + new RestResponseError("Downstream Exception " + e.getMessage())); + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Deployment Handler"); MDC.put("TargetServiceName", "Deployment Handler"); @@ -156,7 +151,8 @@ public class DeploymentHandlerController extends DashboardRestrictedBaseControll String json = null; StringBuffer status = new StringBuffer(); try { - DeploymentHandlerClient deploymentHandlerClient = getDeploymentHandlerClient(request); + // DeploymentHandlerClient deploymentHandlerClient = + // getDeploymentHandlerClient(request); deploymentHandlerClient.deleteDeployment(deploymentId, tenant); String self = request.getRequestURL().toString().split("\\?")[0]; status.append(self).append("/executions?tenant=").append(tenant); @@ -200,17 +196,7 @@ public class DeploymentHandlerController extends DashboardRestrictedBaseControll MDC.put("ErrorDescription", "Deleting deployment " + deploymentId + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "deleteDeployment caught exception"); json = objectMapper.writeValueAsString(new RestResponseError(e.getMessage())); - } catch (JsonProcessingException jpe) { - // Should never, ever happen - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Deployment Handler"); - MDC.put("TargetServiceName", "Deployment Handler"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting deployment " + deploymentId + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteDeployment caught exception"); - json = "{ \"error\" : \"" + jpe.toString() + "\"}"; - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "Deployment Handler"); MDC.put("TargetServiceName", "Deployment Handler"); diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ECDSingleSignOnController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ECDSingleSignOnController.java index c2330f4..9d28be7 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ECDSingleSignOnController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/ECDSingleSignOnController.java @@ -244,6 +244,9 @@ public class ECDSingleSignOnController extends UnRestrictedBaseController { } catch (RestClientException ex) { logger.debug("isPortalAvailable failed", ex); avail = false; + } catch (Exception e) { + logger.debug("isPortalAvailable failed", e); + avail = false; } return avail; } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/HealthCheckController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/HealthCheckController.java index df5ec64..5087ad1 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/HealthCheckController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/HealthCheckController.java @@ -22,26 +22,11 @@ package org.onap.ccsdk.dashboard.controller; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.UnknownHostException; -import java.util.Date; -import java.util.List; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.http.HttpStatus; -import org.onap.ccsdk.dashboard.model.ControllerEndpointCredentials; import org.onap.ccsdk.dashboard.model.HealthStatus; -import org.onap.portalsdk.core.domain.App; -import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; -import org.onap.portalsdk.core.objectcache.AbstractCacheManager; -import org.onap.portalsdk.core.service.DataAccessService; import org.onap.portalsdk.core.util.SystemProperties; -import org.slf4j.MDC; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.web.bind.annotation.RequestMapping; @@ -58,24 +43,12 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/") public class HealthCheckController extends DashboardRestrictedBaseController { - private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthCheckController.class); - /** * Application name */ protected static final String APP_NAME = "ecd-app"; - private static Date begin, end; private static final String APP_HEALTH_CHECK_PATH = "/health"; - private static final String APP_SRVC_HEALTH_CHECK_PATH = "/health-info"; - - private static final String APP_DB_QRY = "from App where id = 1"; - public static final String APP_METADATA = "APP.METADATA"; - - @Autowired - private DataAccessService dataAccessService; - - private AbstractCacheManager cacheManager; /** * application health by simply responding with a JSON object indicating status @@ -85,187 +58,7 @@ public class HealthCheckController extends DashboardRestrictedBaseController { */ @RequestMapping(value = { APP_HEALTH_CHECK_PATH }, method = RequestMethod.GET, produces = "application/json") public HealthStatus healthCheck(HttpServletRequest request, HttpServletResponse response) { - return new HealthStatus(200, - SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + " health check passed "); - } - - /** - * Checks application health by executing a sample query with local DB - * - * @param request HttpServletRequest - * @return 200 if database access succeeds, 500 if it fails. - */ - /* - * public HealthStatus healthCheck(HttpServletRequest request, - * HttpServletResponse response) { //preLogAudit(request); HealthStatus - * healthStatus = new HealthStatus(200, - * SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + - * " health check passed "); try { logger.debug(EELFLoggerDelegate.debugLogger, - * "Performing health check"); App app; Object appObj = - * getCacheManager().getObject(APP_METADATA); if (appObj == null) { app = - * findApp(); if (app != null) { getCacheManager().putObject(APP_METADATA, app); - * } else { healthStatus = new HealthStatus(503, - * SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + - * " health check failed to query App from database"); } } - * - * if (isDbConnUp()) { healthStatus = new HealthStatus(200, - * SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + - * " health check passed "); } else { healthStatus = new HealthStatus(503, - * SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + - * " health check failed to run db query"); } } catch (Exception ex) { - * MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", - * "Health Check"); MDC.put("TargetServiceName", "Health Check"); - * MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); - * MDC.put("ErrorDescription", "Health check failed!"); - * logger.error(EELFLoggerDelegate.errorLogger, - * "Failed to perform health check"); healthStatus = new HealthStatus(503, - * "health check failed: " + ex.toString()); } finally { postLogAudit(request); - * } if (healthStatus.getStatusCode() != 200) { - * response.setStatus(HttpStatus.SC_SERVICE_UNAVAILABLE); - * response.sendError(HttpStatus.SC_SERVICE_UNAVAILABLE, - * objectMapper.writeValueAsString(healthStatus)); } - * - * return healthStatus; } - */ - /** - * Checks application health and availability of dependent services - * - * @param request HttpServletRequest - * @return 200 if database access succeeds, 500 if it fails. - */ - @RequestMapping(value = { APP_SRVC_HEALTH_CHECK_PATH }, method = RequestMethod.GET, produces = "application/json") - public HealthStatus srvcHealthCheck(HttpServletRequest request, HttpServletResponse response) throws Exception { - preLogAudit(request); - HealthStatus healthStatus = null; - StringBuffer sb = new StringBuffer(); - try { - logger.debug(EELFLoggerDelegate.debugLogger, "Performing health check"); - if (isDbConnUp()) { - sb.append(SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME)) - .append(" health check passed; "); - healthStatus = new HealthStatus(200, - SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + sb.toString()); - } else { - sb.append(SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME)) - .append(" health check failed to run db query; "); - healthStatus = new HealthStatus(503, - SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + sb.toString()); - } - ControllerEndpointCredentials[] cec = getControllerEndpoints(); - - for (int i = 0; i < cec.length; ++i) { - // Check if API Handler is reachable - if (!isServiceReachable(cec[i].getUrl())) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "API Handler"); - MDC.put("TargetServiceName", "API Handler"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "API Handler unreachable!"); - sb.append(" API Handler unreachable; "); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to ping API Handler"); - } - // Check if Inventory is reachable - if (!isServiceReachable(cec[i].getInventoryUrl() + "/dcae-services")) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DCAE Inventory"); - MDC.put("TargetServiceName", "DCAE Inventory"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "DCAE Inventory unreachable!"); - sb.append(" DCAE Inventory unreachable; "); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to ping DCAE Inventory"); - } - // Check if Deployment Handler is reachable - if (!isServiceReachable(cec[i].getDhandlerUrl())) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Deployment Handler"); - MDC.put("TargetServiceName", "Deployment Handler"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deployment Handler unreachable!"); - sb.append(" Deployment Handler unreachable; "); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to ping Deployment Handler"); - } - } - } catch (Exception ex) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Health Check"); - MDC.put("TargetServiceName", "Health Check"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Health check failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "Failed to perform health check"); - sb.append(" "); - sb.append(ex.toString()); - healthStatus = new HealthStatus(503, SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) - + " health check failed: " + sb.toString()); - } finally { - postLogAudit(request); - } - if (healthStatus.getStatusCode() != 200) { - response.setStatus(HttpStatus.SC_SERVICE_UNAVAILABLE); - response.sendError(HttpStatus.SC_SERVICE_UNAVAILABLE, objectMapper.writeValueAsString(healthStatus)); - } - return healthStatus; - } - - private boolean isDbConnUp() { - @SuppressWarnings("unchecked") - List<App> list = dataAccessService.executeQuery(APP_DB_QRY, null); - if (list.size() > 0) { - return true; - } else { - return false; - } - } - - private App findApp() { - @SuppressWarnings("unchecked") - List<App> list = dataAccessService.executeQuery(APP_DB_QRY, null); - return (list == null || list.isEmpty()) ? null : (App) list.get(0); - } - - public static boolean isServiceReachable(String targetUrl) throws IOException { - HttpURLConnection httpUrlConnection = (HttpURLConnection) new URL(targetUrl).openConnection(); - httpUrlConnection.setRequestMethod("HEAD"); - - try { - int responseCode = httpUrlConnection.getResponseCode(); - return responseCode == HttpURLConnection.HTTP_OK; - } catch (UnknownHostException noInternetConnection) { - return false; - } - } - - @Autowired - public void setCacheManager(AbstractCacheManager cacheManager) { - this.cacheManager = cacheManager; - } - - public AbstractCacheManager getCacheManager() { - return cacheManager; - } - - public void preLogAudit(HttpServletRequest request) { - begin = new Date(); - MDC.put(SystemProperties.AUDITLOG_BEGIN_TIMESTAMP, - DashboardRestrictedBaseController.logDateFormat.format(begin)); - MDC.put(SystemProperties.METRICSLOG_BEGIN_TIMESTAMP, - DashboardRestrictedBaseController.logDateFormat.format(begin)); - MDC.put(SystemProperties.STATUS_CODE, "COMPLETE"); - // logger.setRequestBasedDefaultsIntoGlobalLoggingContext(request, APP_NAME); - } - - public void postLogAudit(HttpServletRequest request) { - end = new Date(); - MDC.put("AlertSeverity", "0"); - MDC.put("TargetEntity", "Health Check"); - MDC.put("TargetServiceName", "Health Check"); - MDC.put(SystemProperties.AUDITLOG_END_TIMESTAMP, DashboardRestrictedBaseController.logDateFormat.format(end)); - MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, DashboardRestrictedBaseController.logDateFormat.format(end)); - MDC.put(SystemProperties.MDC_TIMER, Long.toString((end.getTime() - begin.getTime()))); - logger.info(EELFLoggerDelegate.auditLogger, request.getMethod() + request.getRequestURI()); - logger.info(EELFLoggerDelegate.metricsLogger, request.getMethod() + request.getRequestURI()); + return new HealthStatus(200, SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + + " health check passed "); } } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/InventoryController.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/InventoryController.java index 135b650..4251212 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/InventoryController.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/controller/InventoryController.java @@ -2,27 +2,26 @@ * =============LICENSE_START========================================================= * * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. * ============LICENSE_END========================================================= * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ECOMP is a trademark and service mark of AT&T Intellectual Property. *******************************************************************************/ package org.onap.ccsdk.dashboard.controller; -import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -30,7 +29,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Optional; -import java.util.Scanner; import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; @@ -40,12 +38,10 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.onap.ccsdk.dashboard.exceptions.inventory.BlueprintParseException; +import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceAlreadyDeactivatedException; +import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceNotFoundException; import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeAlreadyDeactivatedException; import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeNotFoundException; -import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenant; -import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; -import org.onap.ccsdk.dashboard.model.CloudifyTenant; -import org.onap.ccsdk.dashboard.model.ECTransportModel; import org.onap.ccsdk.dashboard.model.RestResponseError; import org.onap.ccsdk.dashboard.model.RestResponsePage; import org.onap.ccsdk.dashboard.model.inventory.Blueprint; @@ -56,15 +52,14 @@ import org.onap.ccsdk.dashboard.model.inventory.ServiceType; import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeQueryParams; import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeRequest; import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeServiceMap; -import org.onap.ccsdk.dashboard.rest.CloudifyClient; import org.onap.ccsdk.dashboard.rest.InventoryClient; -import org.onap.ccsdk.dashboard.util.DashboardProperties; -import org.onap.portalsdk.core.domain.User; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.portalsdk.core.web.support.AppUtils; -import org.onap.portalsdk.core.web.support.UserUtils; +import org.onap.ccsdk.dashboard.util.DashboardProperties; + import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -84,7 +79,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; @RequestMapping("/inventory") public class InventoryController extends DashboardRestrictedBaseController { - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(InventoryController.class); + private static EELFLoggerDelegate logger = + EELFLoggerDelegate.getLogger(InventoryController.class); + + @Autowired + InventoryClient inventoryClient; /** * Enum for selecting an item type. @@ -97,34 +96,115 @@ public class InventoryController extends DashboardRestrictedBaseController { private static final String SERVICES_PATH = "dcae-services"; private static final String SERVICE_TYPES_PATH = "dcae-service-types"; private static final String VIEW_SERVICE_TYPE_BLUEPRINT_PATH = "dcae-service-type-blueprint"; - private static final String DEPLOY_ROLE = ".k8.dev"; private static final String DEP_IDS_FOR_TYPE = "dcae-services/typeIds"; /** - * ATT version with user role auth Gets one page of objects and supporting + * Gets one page of objects and supporting information via the REST client. On + * success, returns a PaginatedRestResponse object as String. + * + * @param option Specifies which item list type to get + * @param pageNum Page number of results + * @param pageSize Number of items per browser page + * @return JSON block as String, see above. + * @throws Exception On any error; e.g., Network failure. + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + private String getItemListForPage(HttpServletRequest request, InventoryDataItem option, + int pageNum, int pageSize, String sortBy, String searchBy) throws Exception { + List itemList = null; + switch (option) { + case SERVICES: + itemList = inventoryClient.getServices().collect(Collectors.toList()); + if (searchBy != null) { + itemList = (List) itemList.stream() + .filter(s -> ((Service) s).contains(searchBy)).collect(Collectors.toList()); + } + for (Service bp : (List<Service>) itemList) { + bp.setCanDeploy(Optional.of(true)); + } + if (sortBy != null) { + if (sortBy.equals("deploymentRef")) { + Collections.sort(itemList, serviceDeploymentRefComparator); + } else if (sortBy.equals("serviceId")) { + Collections.sort(itemList, serviceIdComparator); + } else if (sortBy.equals("created")) { + Collections.sort(itemList, serviceCreatedComparator); + } else if (sortBy.equals("modified")) { + Collections.sort(itemList, serviceModifiedComparator); + } + } + break; + case SERVICE_TYPES: + itemList = inventoryClient.getServiceTypes().collect(Collectors.toList()); + if (searchBy != null) { + itemList = + (List) itemList.stream().filter(s -> ((ServiceType) s).contains(searchBy)) + .collect(Collectors.toList()); + } + for (ServiceType bp : (List<ServiceType>) itemList) { + bp.setCanDeploy(Optional.of(true)); + } + if (sortBy != null) { + if (sortBy.equals("owner")) { + Collections.sort(itemList, serviceTypeOwnerComparator); + } else if (sortBy.equals("typeId")) { + Collections.sort(itemList, serviceTypeIdComparator); + } else if (sortBy.equals("typeName")) { + Collections.sort(itemList, serviceTypeNameComparator); + } else if (sortBy.equals("typeVersion")) { + Collections.sort(itemList, serviceTypeVersionComparator); + } else if (sortBy.equals("created")) { + Collections.sort(itemList, serviceTypeCreatedComparator); + } else if (sortBy.equals("application")) { + Collections.sort(itemList, serviceTypeApplComparator); + } else if (sortBy.equals("component")) { + Collections.sort(itemList, serviceTypeCompComparator); + } + } + break; + default: + MDC.put(SystemProperties.STATUS_CODE, "ERROR"); + MDC.put("TargetEntity", "DCAE Inventory"); + MDC.put("TargetServiceName", "DCAE Inventory"); + MDC.put("ErrorCode", "300"); + MDC.put("ErrorCategory", "ERROR"); + MDC.put("ErrorDescription", "Getting page of items failed!"); + throw new Exception( + "getItemListForPage failed: unimplemented case: " + option.name()); + } + + // Shrink if needed + final int totalItems = itemList.size(); + final int pageCount = (int) Math.ceil((double) totalItems / pageSize); + if (totalItems > pageSize) + itemList = getPageOfList(pageNum, pageSize, itemList); + + RestResponsePage<List> model = new RestResponsePage<>(totalItems, pageCount, itemList); + String outboundJson = objectMapper.writeValueAsString(model); + return outboundJson; + } + + /** + * version with user role auth Gets one page of objects and supporting * information via the REST client. On success, returns a PaginatedRestResponse * object as String. * - * @param option Specifies which item list type to get - * @param pageNum Page number of results + * @param option Specifies which item list type to get + * @param pageNum Page number of results * @param pageSize Number of items per browser page * @return JSON block as String, see above. * @throws Exception On any error; e.g., Network failure. */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - private String getItemListForPageAuth(HttpServletRequest request, InventoryDataItem option, int pageNum, - int pageSize, String sortBy, String searchBy) throws Exception { - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getControllerRestClient: Failed to get application user"); - InventoryClient inventoryClient = getInventoryClient(appUser.getId()); - + @SuppressWarnings({"rawtypes", "unchecked"}) + private String getItemListForPageAuth(HttpServletRequest request, InventoryDataItem option, + int pageNum, int pageSize, String sortBy, String searchBy) throws Exception { HttpSession session = AppUtils.getSession(request); - HashMap<String, Boolean> comp_deploy_tab = (HashMap<String, Boolean>) session.getAttribute("comp_access"); + HashMap<String, Boolean> comp_deploy_tab = + (HashMap<String, Boolean>) session.getAttribute("comp_access"); String roleLevel = (String) session.getAttribute("role_level"); if (roleLevel == null) { - roleLevel = "app"; + roleLevel = "dev"; } if (comp_deploy_tab == null) { comp_deploy_tab = new HashMap<String, Boolean>(); @@ -139,287 +219,166 @@ public class InventoryController extends DashboardRestrictedBaseController { List<ServiceType> filterList = new ArrayList<ServiceType>(); List<Service> authDepList = new ArrayList<Service>(); switch (option) { - case SERVICES: - itemList = inventoryClient.getServices().collect(Collectors.toList()); - if (roleLevel.equals("app")) { - for (String userRole : userApps) { - logger.debug(">>>> check component type from deployment: " + userRole); - for (Service cont : (List<Service>) itemList) { - String deplRef = cont.getDeploymentRef().toLowerCase(); - logger.debug(">>>> container deployment name: " + deplRef); - if (deplRef.contains(userRole)) { - logger.debug(">>>> adding deployment item to filtered subset"); - authDepList.add(cont); + case SERVICES: + itemList = inventoryClient.getServices().collect(Collectors.toList()); + if (roleLevel.equals("app")) { + for (String userRole : userApps) { + logger.debug(">>>> check component type from deployment: " + userRole); + for (Service cont : (List<Service>) itemList) { + String deplRef = cont.getDeploymentRef().toLowerCase(); + logger.debug(">>>> container deployment name: " + deplRef); + if (deplRef.contains(userRole)) { + logger.debug(">>>> adding deployment item to filtered subset"); + authDepList.add(cont); + } } } } - } - if (searchBy != null) { - if (!roleLevel.equals("app")) { - itemList = (List) itemList.stream().filter(s -> ((Service) s).contains(searchBy)) - .collect(Collectors.toList()); - } else { - if (!authDepList.isEmpty()) { - authDepList = (List) authDepList.stream().filter(s -> ((Service) s).contains(searchBy)) + if (searchBy != null) { + if (!roleLevel.equals("app")) { + itemList = + (List) itemList.stream().filter(s -> ((Service) s).contains(searchBy)) .collect(Collectors.toList()); - } - } - } - if (roleLevel.equals("app")) { - logger.debug(">>>> update response with authorized content"); - itemList.clear(); - itemList.addAll(authDepList); - } - - // check for authorization to perform delete deployed blueprints - - if (!roleLevel.equals("ops")) { - for (Service bp : (List<Service>) itemList) { - String deplRef = bp.getDeploymentRef().split("_")[0].toLowerCase(); - logger.debug(">>>> deployment reference: " + deplRef); - if (comp_deploy_tab.containsKey(deplRef)) { - boolean enableDeploy = comp_deploy_tab.get(deplRef); - logger.debug(">>>> enable deploy button: " + enableDeploy); - bp.setCanDeploy(Optional.of(enableDeploy)); } else { - bp.setCanDeploy(Optional.of(false)); + if (!authDepList.isEmpty()) { + authDepList = (List) authDepList.stream() + .filter(s -> ((Service) s).contains(searchBy)) + .collect(Collectors.toList()); + } } } - } else { - for (Service bp : (List<Service>) itemList) { - bp.setCanDeploy(Optional.of(true)); + if (roleLevel.equals("app")) { + logger.debug(">>>> update response with authorized content"); + itemList.clear(); + itemList.addAll(authDepList); } - } - if (sortBy != null) { - if (sortBy.equals("deploymentRef")) { - Collections.sort(itemList, serviceDeploymentRefComparator); - } else if (sortBy.equals("serviceId")) { - Collections.sort(itemList, serviceIdComparator); - } else if (sortBy.equals("created")) { - Collections.sort(itemList, serviceCreatedComparator); - } else if (sortBy.equals("modified")) { - Collections.sort(itemList, serviceModifiedComparator); - } - } - break; - case SERVICE_TYPES: - ServiceTypeQueryParams serviceQueryParams = null; - serviceQueryParams = new ServiceTypeQueryParams.Builder().onlyLatest(false).build(); - itemList = inventoryClient.getServiceTypes(serviceQueryParams).collect(Collectors.toList()); - if (roleLevel.equals("app")) { - for (String userApp : userApps) { - logger.debug(">>>> check component type from BP: " + userApp); - for (ServiceType bp : (List<ServiceType>) itemList) { - String bpComp = bp.getComponent(); - String bpOwner = bp.getOwner(); // for backward compatibility - logger.debug(">>>> BP component name: " + bpComp); - if ((bpComp != null && bpComp.equalsIgnoreCase(userApp)) || bpOwner.contains(userApp)) { - logger.debug(">>>> adding item to filtered subset"); - filterList.add(bp); + // check for authorization to perform delete deployed blueprints + + if (!roleLevel.equals("ops")) { + for (Service bp : (List<Service>) itemList) { + String deplRef = bp.getDeploymentRef().split("_")[0].toLowerCase(); + logger.debug(">>>> deployment reference: " + deplRef); + if (comp_deploy_tab.containsKey(deplRef)) { + boolean enableDeploy = comp_deploy_tab.get(deplRef); + logger.debug(">>>> enable deploy button: " + enableDeploy); + bp.setCanDeploy(Optional.of(enableDeploy)); + } else { + bp.setCanDeploy(Optional.of(false)); } } - } - } - if (searchBy != null) { - if (!roleLevel.equals("app")) { - itemList = (List) itemList.stream().filter(s -> ((ServiceType) s).contains(searchBy)) - .collect(Collectors.toList()); } else { - if (!filterList.isEmpty()) { - filterList = (List) filterList.stream().filter(s -> ((ServiceType) s).contains(searchBy)) - .collect(Collectors.toList()); + for (Service bp : (List<Service>) itemList) { + bp.setCanDeploy(Optional.of(true)); } } - } - if (roleLevel.equals("app")) { - logger.debug(">>>> update response with authorized content"); - itemList.clear(); - itemList.addAll(filterList); - } - // check for authorization to perform update/delete/deploy blueprints - if (!roleLevel.equals("ops")) { - for (ServiceType bp : (List<ServiceType>) itemList) { - String bpComp = bp.getComponent(); - if (bpComp != null && bpComp.length() > 0) { - bpComp = bpComp.toLowerCase(); - } else { - String bpOwner = bp.getOwner(); // for backward compatibility - if (bpOwner != null && bpOwner.contains(":")) { - bpComp = bp.getOwner().split(":")[0].toLowerCase(); + if (sortBy != null) { + if (sortBy.equals("deploymentRef")) { + Collections.sort(itemList, serviceDeploymentRefComparator); + } else if (sortBy.equals("serviceId")) { + Collections.sort(itemList, serviceIdComparator); + } else if (sortBy.equals("created")) { + Collections.sort(itemList, serviceCreatedComparator); + } else if (sortBy.equals("modified")) { + Collections.sort(itemList, serviceModifiedComparator); + } + } + break; + case SERVICE_TYPES: + ServiceTypeQueryParams serviceQueryParams = + new ServiceTypeQueryParams.Builder().onlyLatest(false).build(); + itemList = inventoryClient.getServiceTypes(serviceQueryParams) + .collect(Collectors.toList()); + if (roleLevel.equals("app")) { + for (String userApp : userApps) { + logger.debug(">>>> check component type from BP: " + userApp); + for (ServiceType bp : (List<ServiceType>) itemList) { + String bpComp = bp.getComponent(); + String bpOwner = bp.getOwner(); // for backward compatibility + logger.debug(">>>> BP component name: " + bpComp); + if ((bpComp != null && bpComp.equalsIgnoreCase(userApp)) + || bpOwner.contains(userApp)) { + logger.debug(">>>> adding item to filtered subset"); + filterList.add(bp); + } } } - logger.debug(">>>> BP component name: " + bpComp); - if (comp_deploy_tab.containsKey(bpComp)) { - boolean enableDeploy = comp_deploy_tab.get(bpComp); - logger.debug(">>>> enable deploy button: " + enableDeploy); - bp.setCanDeploy(Optional.of(enableDeploy)); + } + if (searchBy != null) { + if (!roleLevel.equals("app")) { + itemList = (List) itemList.stream() + .filter(s -> ((ServiceType) s).contains(searchBy)) + .collect(Collectors.toList()); } else { - bp.setCanDeploy(Optional.of(false)); + if (!filterList.isEmpty()) { + filterList = (List) filterList.stream() + .filter(s -> ((ServiceType) s).contains(searchBy)) + .collect(Collectors.toList()); + } } } - } else { - for (ServiceType bp : (List<ServiceType>) itemList) { - bp.setCanDeploy(Optional.of(true)); + if (roleLevel.equals("app")) { + logger.debug(">>>> update response with authorized content"); + itemList.clear(); + itemList.addAll(filterList); } - } - if (sortBy != null) { - if (sortBy.equals("owner")) { - Collections.sort(itemList, serviceTypeOwnerComparator); - } else if (sortBy.equals("typeId")) { - Collections.sort(itemList, serviceTypeIdComparator); - } else if (sortBy.equals("typeName")) { - Collections.sort(itemList, serviceTypeNameComparator); - } else if (sortBy.equals("typeVersion")) { - Collections.sort(itemList, serviceTypeVersionComparator); - } else if (sortBy.equals("created")) { - Collections.sort(itemList, serviceTypeCreatedComparator); - } else if (sortBy.equals("application")) { - Collections.sort(itemList, serviceTypeApplComparator); - } else if (sortBy.equals("component")) { - Collections.sort(itemList, serviceTypeCompComparator); + // check for authorization to perform update/delete/deploy blueprints + if (!roleLevel.equals("ops")) { + for (ServiceType bp : (List<ServiceType>) itemList) { + String bpComp = bp.getComponent(); + if (bpComp != null && bpComp.length() > 0) { + bpComp = bpComp.toLowerCase(); + } else { + String bpOwner = bp.getOwner(); // for backward compatibility + if (bpOwner != null && bpOwner.contains(":")) { + bpComp = bp.getOwner().split(":")[0].toLowerCase(); + } + } + logger.debug(">>>> BP component name: " + bpComp); + if (comp_deploy_tab.containsKey(bpComp)) { + boolean enableDeploy = comp_deploy_tab.get(bpComp); + logger.debug(">>>> enable deploy button: " + enableDeploy); + bp.setCanDeploy(Optional.of(enableDeploy)); + } else { + bp.setCanDeploy(Optional.of(false)); + } + } + } else { + for (ServiceType bp : (List<ServiceType>) itemList) { + bp.setCanDeploy(Optional.of(true)); + } } - } - break; - default: - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DCAE Inventory"); - MDC.put("TargetServiceName", "DCAE Inventory"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting page of items failed!"); - throw new Exception("getItemListForPage failed: unimplemented case: " + option.name()); - } - // Shrink if needed - final int totalItems = itemList.size(); - final int pageCount = (int) Math.ceil((double) totalItems / pageSize); - if (totalItems > pageSize) - itemList = getPageOfList(pageNum, pageSize, itemList); - - RestResponsePage<List> model = new RestResponsePage<>(totalItems, pageCount, itemList); - String outboundJson = objectMapper.writeValueAsString(model); - return outboundJson; - } - - /** - * Gets one page of objects and supporting information via the REST client. On - * success, returns a PaginatedRestResponse object as String. - * - * @param option Specifies which item list type to get - * @param pageNum Page number of results - * @param pageSize Number of items per browser page - * @return JSON block as String, see above. - * @throws Exception On any error; e.g., Network failure. - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - private String getItemListForPage(HttpServletRequest request, InventoryDataItem option, int pageNum, int pageSize, - String sortBy, String searchBy) throws Exception { - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getControllerRestClient: Failed to get application user"); - InventoryClient inventoryClient = getInventoryClient(appUser.getId()); - - List itemList = null; - switch (option) { - case SERVICES: - itemList = inventoryClient.getServices().collect(Collectors.toList()); - // Get the tenant names for all the deployments from Cloudify/API handler - ECTransportModel result = null; - List<CloudifyDeployedTenant> tenantList = new ArrayList<CloudifyDeployedTenant>(); - try { - CloudifyClient restClient = getCloudifyRestClient(request); - List<CloudifyTenant> cldfyTen = restClient.getTenants().items; - for (CloudifyTenant ct : (List<CloudifyTenant>) cldfyTen) { - result = restClient.getTenantInfoFromDeploy(ct.name); - tenantList.addAll(((CloudifyDeployedTenantList) result).items); + if (sortBy != null) { + if (sortBy.equals("owner")) { + Collections.sort(itemList, serviceTypeOwnerComparator); + } else if (sortBy.equals("typeId")) { + Collections.sort(itemList, serviceTypeIdComparator); + } else if (sortBy.equals("typeName")) { + Collections.sort(itemList, serviceTypeNameComparator); + } else if (sortBy.equals("typeVersion")) { + Collections.sort(itemList, serviceTypeVersionComparator); + } else if (sortBy.equals("created")) { + Collections.sort(itemList, serviceTypeCreatedComparator); + } else if (sortBy.equals("application")) { + Collections.sort(itemList, serviceTypeApplComparator); + } else if (sortBy.equals("component")) { + Collections.sort(itemList, serviceTypeCompComparator); + } } - } catch (HttpStatusCodeException e) { + break; + default: MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); + MDC.put("TargetEntity", "DCAE Inventory"); + MDC.put("TargetServiceName", "DCAE Inventory"); MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting deployments failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getTenantInfoFromDeploy caught exception"); - result = new RestResponseError(e.getResponseBodyAsString()); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "Cloudify Manager"); - MDC.put("TargetServiceName", "Cloudify Manager"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting deployments failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getDeploymentById caught exception"); - result = new RestResponseError("getTenantInfoFromDeploy failed", t); - } finally { - postLogAudit(request); - } - for (Service depl : (List<Service>) itemList) { - for (CloudifyDeployedTenant deplTen : tenantList) { - if (depl.getDeploymentRef().equals(deplTen.id)) { - depl.setTenant(deplTen.tenant_name); - break; - } - } - } - if (searchBy != null) { - itemList = (List) itemList.stream().filter(s -> ((Service) s).contains(searchBy)) - .collect(Collectors.toList()); - } - for (Service bp : (List<Service>) itemList) { - bp.setCanDeploy(Optional.of(true)); - } - if (sortBy != null) { - if (sortBy.equals("deploymentRef")) { - Collections.sort(itemList, serviceDeploymentRefComparator); - } else if (sortBy.equals("serviceId")) { - Collections.sort(itemList, serviceIdComparator); - } else if (sortBy.equals("created")) { - Collections.sort(itemList, serviceCreatedComparator); - } else if (sortBy.equals("modified")) { - Collections.sort(itemList, serviceModifiedComparator); - } - } - break; - case SERVICE_TYPES: - itemList = inventoryClient.getServiceTypes().collect(Collectors.toList()); - if (searchBy != null) { - itemList = (List) itemList.stream().filter(s -> ((ServiceType) s).contains(searchBy)) - .collect(Collectors.toList()); - } - for (ServiceType bp : (List<ServiceType>) itemList) { - bp.setCanDeploy(Optional.of(true)); - } - if (sortBy != null) { - if (sortBy.equals("owner")) { - Collections.sort(itemList, serviceTypeOwnerComparator); - } else if (sortBy.equals("typeId")) { - Collections.sort(itemList, serviceTypeIdComparator); - } else if (sortBy.equals("typeName")) { - Collections.sort(itemList, serviceTypeNameComparator); - } else if (sortBy.equals("typeVersion")) { - Collections.sort(itemList, serviceTypeVersionComparator); - } else if (sortBy.equals("created")) { - Collections.sort(itemList, serviceTypeCreatedComparator); - } else if (sortBy.equals("application")) { - Collections.sort(itemList, serviceTypeApplComparator); - } else if (sortBy.equals("component")) { - Collections.sort(itemList, serviceTypeCompComparator); - } - } - break; - default: - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DCAE Inventory"); - MDC.put("TargetServiceName", "DCAE Inventory"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Getting page of items failed!"); - throw new Exception("getItemListForPage failed: unimplemented case: " + option.name()); + MDC.put("ErrorDescription", "Getting page of items failed!"); + throw new Exception( + "getItemListForPage failed: unimplemented case: " + option.name()); } // Shrink if needed @@ -438,22 +397,25 @@ public class InventoryController extends DashboardRestrictedBaseController { * constructs an appropriate JSON block to report errors. * * @param request Inbound request - * @param option Item type to get + * @param option Item type to get * @return JSON with one page of objects; or an error. */ - protected String getItemListForPageWrapper(HttpServletRequest request, InventoryDataItem option, String sortBy, - String searchBy) { + protected String getItemListForPageWrapper(HttpServletRequest request, InventoryDataItem option, + String sortBy, String searchBy) { preLogAudit(request); String outboundJson = null; try { int pageNum = getRequestPageNumber(request); int pageSize = getRequestPageSize(request); String appEnv = "os"; - appEnv = getAppProperties().getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "att"); + appEnv = + DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth"); if (appEnv.equals("os")) { - outboundJson = getItemListForPage(request, option, pageNum, pageSize, sortBy, searchBy); + outboundJson = + getItemListForPage(request, option, pageNum, pageSize, sortBy, searchBy); } else { - outboundJson = getItemListForPageAuth(request, option, pageNum, pageSize, sortBy, searchBy); + outboundJson = + getItemListForPageAuth(request, option, pageNum, pageSize, sortBy, searchBy); } } catch (Exception ex) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); @@ -462,10 +424,12 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Getting page of items failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "getItemListForPageWrapper caught exception"); + logger.error(EELFLoggerDelegate.errorLogger, + "getItemListForPageWrapper caught exception"); RestResponseError result = null; if (ex instanceof HttpStatusCodeException) - result = new RestResponseError(((HttpStatusCodeException) ex).getResponseBodyAsString()); + result = + new RestResponseError(((HttpStatusCodeException) ex).getResponseBodyAsString()); else result = new RestResponseError("Failed to get " + option.name(), ex); try { @@ -483,32 +447,35 @@ public class InventoryController extends DashboardRestrictedBaseController { /** * Supports sorting service types by owner */ - private static Comparator<ServiceType> serviceTypeOwnerComparator = new Comparator<ServiceType>() { - @Override - public int compare(ServiceType o1, ServiceType o2) { - return o1.getOwner().compareToIgnoreCase(o2.getOwner()); - } - }; + private static Comparator<ServiceType> serviceTypeOwnerComparator = + new Comparator<ServiceType>() { + @Override + public int compare(ServiceType o1, ServiceType o2) { + return o1.getOwner().compareToIgnoreCase(o2.getOwner()); + } + }; /** * Supports sorting service types by application */ - private static Comparator<ServiceType> serviceTypeApplComparator = new Comparator<ServiceType>() { - @Override - public int compare(ServiceType o1, ServiceType o2) { - return o1.getApplication().compareToIgnoreCase(o2.getApplication()); - } - }; + private static Comparator<ServiceType> serviceTypeApplComparator = + new Comparator<ServiceType>() { + @Override + public int compare(ServiceType o1, ServiceType o2) { + return o1.getApplication().compareToIgnoreCase(o2.getApplication()); + } + }; /** * Supports sorting service types by component */ - private static Comparator<ServiceType> serviceTypeCompComparator = new Comparator<ServiceType>() { - @Override - public int compare(ServiceType o1, ServiceType o2) { - return o1.getComponent().compareToIgnoreCase(o2.getComponent()); - } - }; + private static Comparator<ServiceType> serviceTypeCompComparator = + new Comparator<ServiceType>() { + @Override + public int compare(ServiceType o1, ServiceType o2) { + return o1.getComponent().compareToIgnoreCase(o2.getComponent()); + } + }; /** * Supports sorting service types by type id @@ -523,32 +490,35 @@ public class InventoryController extends DashboardRestrictedBaseController { /** * Supports sorting service types by type name */ - private static Comparator<ServiceType> serviceTypeNameComparator = new Comparator<ServiceType>() { - @Override - public int compare(ServiceType o1, ServiceType o2) { - return o1.getTypeName().compareToIgnoreCase(o2.getTypeName()); - } - }; + private static Comparator<ServiceType> serviceTypeNameComparator = + new Comparator<ServiceType>() { + @Override + public int compare(ServiceType o1, ServiceType o2) { + return o1.getTypeName().compareToIgnoreCase(o2.getTypeName()); + } + }; /** * Supports sorting service types by type version */ - private static Comparator<ServiceType> serviceTypeVersionComparator = new Comparator<ServiceType>() { - @Override - public int compare(ServiceType o1, ServiceType o2) { - return o1.getTypeVersion().compareTo(o2.getTypeVersion()); - } - }; + private static Comparator<ServiceType> serviceTypeVersionComparator = + new Comparator<ServiceType>() { + @Override + public int compare(ServiceType o1, ServiceType o2) { + return o1.getTypeVersion().compareTo(o2.getTypeVersion()); + } + }; /** * Supports sorting service types by created date */ - private static Comparator<ServiceType> serviceTypeCreatedComparator = new Comparator<ServiceType>() { - @Override - public int compare(ServiceType o1, ServiceType o2) { - return o1.getCreated().get().compareToIgnoreCase(o2.getCreated().get()); - } - }; + private static Comparator<ServiceType> serviceTypeCreatedComparator = + new Comparator<ServiceType>() { + @Override + public int compare(ServiceType o1, ServiceType o2) { + return o1.getCreated().get().compareToIgnoreCase(o2.getCreated().get()); + } + }; /** * Supports sorting services by deploymentRef @@ -596,46 +566,30 @@ public class InventoryController extends DashboardRestrictedBaseController { * @param request HttpServletRequest * @return List of ServiceTypes objects */ - @RequestMapping(value = { SERVICE_TYPES_PATH }, method = RequestMethod.GET, produces = "application/json") + @RequestMapping( + value = {SERVICE_TYPES_PATH}, + method = RequestMethod.GET, + produces = "application/json") @ResponseBody public String getServiceTypesByPage(HttpServletRequest request) { preLogAudit(request); - String json = null; - // json = getMockDataContent("/serviceTypesList.json"); - json = getItemListForPageWrapper(request, InventoryDataItem.SERVICE_TYPES, request.getParameter("sortBy"), - request.getParameter("searchBy")); + String json = getItemListForPageWrapper(request, InventoryDataItem.SERVICE_TYPES, + request.getParameter("sortBy"), request.getParameter("searchBy")); postLogAudit(request); return json; } - private String getMockDataContent(final String path) { - String result = null; - try { - InputStream is = getClass().getResourceAsStream(path); - if (is == null) - throw new Exception("Failed to find resource at path " + path); - Scanner scanner = new Scanner(is, "UTF-8"); - result = scanner.useDelimiter("\\A").next(); - scanner.close(); - is.close(); - } catch (Exception ex) { - logger.error("getMockDataContent failed", ex); - throw new RuntimeException(ex); - } - return result; - } - /** * Query Service objects matching a service type ID * */ - @RequestMapping(value = { DEP_IDS_FOR_TYPE }, method = RequestMethod.POST, produces = "application/json") - public String getServicesForType(HttpServletRequest request, @RequestBody String[] typeList) throws Exception { + @RequestMapping( + value = {DEP_IDS_FOR_TYPE}, + method = RequestMethod.POST, + produces = "application/json") + public String getServicesForType(HttpServletRequest request, @RequestBody String[] typeList) + throws Exception { preLogAudit(request); - User appUser = UserUtils.getUserSession(request); - if (appUser == null || appUser.getId() == null) - throw new Exception("getControllerRestClient: Failed to get application user"); - InventoryClient inventoryClient = getInventoryClient(appUser.getId()); List<ServiceTypeServiceMap> result = new ArrayList<ServiceTypeServiceMap>(); for (String typeId : typeList) { ServiceQueryParams qryParams = new ServiceQueryParams.Builder().typeId(typeId).build(); @@ -653,13 +607,16 @@ public class InventoryController extends DashboardRestrictedBaseController { * * @return List of Service objects */ - @RequestMapping(value = { SERVICES_PATH }, method = RequestMethod.GET, produces = "application/json") + @RequestMapping( + value = {SERVICES_PATH}, + method = RequestMethod.GET, + produces = "application/json") @ResponseBody public String getServicesByPage(HttpServletRequest request) { // preLogAudit(request); String json = null; - json = getItemListForPageWrapper(request, InventoryDataItem.SERVICES, request.getParameter("sortBy"), - request.getParameter("searchBy")); + json = getItemListForPageWrapper(request, InventoryDataItem.SERVICES, + request.getParameter("sortBy"), request.getParameter("searchBy")); postLogAudit(request); return json; } @@ -667,21 +624,22 @@ public class InventoryController extends DashboardRestrictedBaseController { /** * Gets the specified blueprint content for viewing. * - * @param id Blueprint ID + * @param id Blueprint ID * @param request HttpServletRequest * @return Blueprint as YAML; or error. * @throws Exception on serialization error * */ - @RequestMapping(value = { - VIEW_SERVICE_TYPE_BLUEPRINT_PATH + "/{typeid}" }, method = RequestMethod.GET, produces = "application/yaml") + @RequestMapping( + value = {VIEW_SERVICE_TYPE_BLUEPRINT_PATH + "/{typeid}"}, + method = RequestMethod.GET, + produces = "application/yaml") @ResponseBody - public String viewServiceTypeBlueprintContentById(@PathVariable("typeid") String typeId, HttpServletRequest request) - throws Exception { + public String viewServiceTypeBlueprintContentById(@PathVariable("typeid") String typeId, + HttpServletRequest request) throws Exception { preLogAudit(request); String json = null; try { - InventoryClient inventoryClient = getInventoryClient(request); json = objectMapper.writeValueAsString(inventoryClient.getServiceType(typeId).get()); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); @@ -690,27 +648,21 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Viewing service type " + typeId + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "viewServiceTypeBlueprintContentById caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError(e.getResponseBodyAsString())); - } catch (JsonProcessingException jpe) { - // Should never, ever happen + logger.error(EELFLoggerDelegate.errorLogger, + "viewServiceTypeBlueprintContentById caught exception"); + json = + objectMapper.writeValueAsString(new RestResponseError(e.getResponseBodyAsString())); + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); MDC.put("TargetServiceName", "DCAE Inventory"); MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Viewing service type " + typeId + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "viewServiceTypeBlueprintContentById caught exception"); - json = "{ \"error\" : \"" + jpe.toString() + "\"}"; - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DCAE Inventory"); - MDC.put("TargetServiceName", "DCAE Inventory"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Viewing service type " + typeId + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "viewServiceTypeBlueprintContentById caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("getBlueprintContentById failed", t)); + logger.error(EELFLoggerDelegate.errorLogger, + "viewServiceTypeBlueprintContentById caught exception"); + json = objectMapper + .writeValueAsString(new RestResponseError("getBlueprintContentById failed", t)); } finally { postLogAudit(request); } @@ -720,23 +672,24 @@ public class InventoryController extends DashboardRestrictedBaseController { /** * Deletes the specified blueprint. * - * @param id Blueprint ID - * @param request HttpServletRequest + * @param id Blueprint ID + * @param request HttpServletRequest * @param response HttpServletResponse * @return status code on success; error on failure. * @throws Exception On serialization failure */ - @RequestMapping(value = { - SERVICE_TYPES_PATH + "/{typeid}" }, method = RequestMethod.DELETE, produces = "application/json") + @RequestMapping( + value = {SERVICE_TYPES_PATH + "/{typeid}"}, + method = RequestMethod.DELETE, + produces = "application/json") @ResponseBody - public String deleteServiceType(@PathVariable("typeid") String typeid, HttpServletRequest request, - HttpServletResponse response) throws Exception { + public String deleteServiceType(@PathVariable("typeid") String typeid, + HttpServletRequest request, HttpServletResponse response) throws Exception { preLogAudit(request); String json = "{\"202\": \"OK\"}"; try { - InventoryClient inventoryClient = getInventoryClient(request); inventoryClient.deleteServiceType(typeid); - } catch (ServiceTypeNotFoundException e) { + } catch (ServiceTypeNotFoundException | ServiceTypeAlreadyDeactivatedException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); MDC.put("TargetServiceName", "DCAE Inventory"); @@ -745,7 +698,7 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Deleting service type " + typeid + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "deleteServiceType caught exception"); json = objectMapper.writeValueAsString(new RestResponseError(e.getMessage())); - } catch (ServiceTypeAlreadyDeactivatedException e) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); MDC.put("TargetServiceName", "DCAE Inventory"); @@ -753,16 +706,8 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Deleting service type " + typeid + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "deleteServiceType caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError(e.getMessage())); - } catch (Throwable t) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DCAE Inventory"); - MDC.put("TargetServiceName", "DCAE Inventory"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting service type " + typeid + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteServiceType caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("deleteDeployment failed", t)); + json = objectMapper + .writeValueAsString(new RestResponseError("deleteDeployment failed", t)); } finally { postLogAudit(request); } @@ -772,32 +717,24 @@ public class InventoryController extends DashboardRestrictedBaseController { /** * Deletes the specified service i.e. deployment from inventory * - * @param id Service ID - * @param request HttpServletRequest + * @param id Service ID + * @param request HttpServletRequest * @param response HttpServletResponse * @return status code on success; error on failure. * @throws Exception On serialization failure */ - @RequestMapping(value = { - SERVICES_PATH + "/{serviceId}" }, method = RequestMethod.DELETE, produces = "application/json") + @RequestMapping( + value = {SERVICES_PATH + "/{serviceId}"}, + method = RequestMethod.DELETE, + produces = "application/json") @ResponseBody - public String deleteService(@PathVariable("serviceId") String serviceId, HttpServletRequest request, - HttpServletResponse response) throws Exception { + public String deleteService(@PathVariable("serviceId") String serviceId, + HttpServletRequest request, HttpServletResponse response) throws Exception { preLogAudit(request); String json = "{\"202\": \"OK\"}"; try { - InventoryClient inventoryClient = getInventoryClient(request); inventoryClient.deleteService(serviceId); - } catch (ServiceTypeNotFoundException e) { - MDC.put(SystemProperties.STATUS_CODE, "ERROR"); - MDC.put("TargetEntity", "DCAE Inventory"); - MDC.put("TargetServiceName", "DCAE Inventory"); - MDC.put("ErrorCode", "300"); - MDC.put("ErrorCategory", "ERROR"); - MDC.put("ErrorDescription", "Deleting service " + serviceId + " failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "deleteServiceType caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError(e.getMessage())); - } catch (ServiceTypeAlreadyDeactivatedException e) { + } catch (ServiceNotFoundException | ServiceAlreadyDeactivatedException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); MDC.put("TargetServiceName", "DCAE Inventory"); @@ -806,7 +743,7 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorDescription", "Deleting service " + serviceId + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "deleteServiceType caught exception"); json = objectMapper.writeValueAsString(new RestResponseError(e.getMessage())); - } catch (Throwable t) { + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); MDC.put("TargetServiceName", "DCAE Inventory"); @@ -814,7 +751,8 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Deleting service " + serviceId + " failed!"); logger.error(EELFLoggerDelegate.errorLogger, "deleteServiceType caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("deleteDeployment failed", t)); + json = objectMapper + .writeValueAsString(new RestResponseError("deleteDeployment failed", t)); } finally { postLogAudit(request); } @@ -824,22 +762,24 @@ public class InventoryController extends DashboardRestrictedBaseController { /** * Processes request to update a blueprint currently existing in DCAE Inventory. * - * @param request HttpServletRequest + * @param request HttpServletRequest * @param blueprint Cloudify blueprint * @return Blueprint as uploaded; or error. * @throws Exception on serialization error */ - @RequestMapping(value = { - SERVICE_TYPES_PATH + "/update" }, method = RequestMethod.POST, produces = "application/json") + @RequestMapping( + value = {SERVICE_TYPES_PATH + "/update"}, + method = RequestMethod.POST, + produces = "application/json") @ResponseBody - public String updateServiceTypeBlueprint(HttpServletRequest request, @RequestBody ServiceType serviceType) - throws Exception { + public String updateServiceTypeBlueprint(HttpServletRequest request, + @RequestBody ServiceType serviceType) throws Exception { preLogAudit(request); String json = "{\"201\": \"OK\"}"; try { // Verify that the Service Type can be parsed for inputs. Blueprint.parse(serviceType.getBlueprintTemplate()); - InventoryClient inventoryClient = getInventoryClient(request); + // InventoryClient inventoryClient = getInventoryClient(request); inventoryClient.addServiceType(serviceType); } catch (BlueprintParseException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); @@ -848,8 +788,10 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Updating service type failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "updateServiceTypeBlueprint caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("Invalid blueprint format.", e)); + logger.error(EELFLoggerDelegate.errorLogger, + "updateServiceTypeBlueprint caught exception"); + json = objectMapper + .writeValueAsString(new RestResponseError("Invalid blueprint format.", e)); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); @@ -857,17 +799,21 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Updating service type failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "updateServiceTypeBlueprint caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError(e.getResponseBodyAsString())); - } catch (Throwable t) { + logger.error(EELFLoggerDelegate.errorLogger, + "updateServiceTypeBlueprint caught exception"); + json = + objectMapper.writeValueAsString(new RestResponseError(e.getResponseBodyAsString())); + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); MDC.put("TargetServiceName", "DCAE Inventory"); MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Updating service type failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "updateServiceTypeBlueprint caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("updateServiceTypeBlueprint failed", t)); + logger.error(EELFLoggerDelegate.errorLogger, + "updateServiceTypeBlueprint caught exception"); + json = objectMapper + .writeValueAsString(new RestResponseError("updateServiceTypeBlueprint failed", t)); } finally { postLogAudit(request); } @@ -877,21 +823,23 @@ public class InventoryController extends DashboardRestrictedBaseController { /** * Processes request to update a blueprint currently existing in DCAE Inventory. * - * @param request HttpServletRequest + * @param request HttpServletRequest * @param blueprint Cloudify blueprint * @return Blueprint as uploaded; or error. * @throws Exception on serialization error */ - @RequestMapping(value = { - SERVICE_TYPES_PATH + "/upload" }, method = RequestMethod.POST, produces = "application/json") + @RequestMapping( + value = {SERVICE_TYPES_PATH + "/upload"}, + method = RequestMethod.POST, + produces = "application/json") @ResponseBody public String uploadServiceTypeBlueprint(HttpServletRequest request, - @RequestBody ServiceTypeRequest serviceTypeRequest) throws Exception { + @RequestBody ServiceTypeRequest serviceTypeRequest) throws Exception { preLogAudit(request); String json = "{\"201\": \"OK\"}"; try { Blueprint.parse(serviceTypeRequest.getBlueprintTemplate()); - InventoryClient inventoryClient = getInventoryClient(request); + // InventoryClient inventoryClient = getInventoryClient(request); inventoryClient.addServiceType(serviceTypeRequest); } catch (BlueprintParseException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); @@ -900,8 +848,10 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Updating service type failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "updateServiceTypeBlueprint caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("Invalid blueprint format.", e)); + logger.error(EELFLoggerDelegate.errorLogger, + "updateServiceTypeBlueprint caught exception"); + json = objectMapper + .writeValueAsString(new RestResponseError("Invalid blueprint format.", e)); } catch (HttpStatusCodeException e) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); @@ -909,17 +859,21 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Updating service type failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "updateServiceTypeBlueprint caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError(e.getResponseBodyAsString())); - } catch (Throwable t) { + logger.error(EELFLoggerDelegate.errorLogger, + "updateServiceTypeBlueprint caught exception"); + json = + objectMapper.writeValueAsString(new RestResponseError(e.getResponseBodyAsString())); + } catch (Exception t) { MDC.put(SystemProperties.STATUS_CODE, "ERROR"); MDC.put("TargetEntity", "DCAE Inventory"); MDC.put("TargetServiceName", "DCAE Inventory"); MDC.put("ErrorCode", "300"); MDC.put("ErrorCategory", "ERROR"); MDC.put("ErrorDescription", "Updating service type failed!"); - logger.error(EELFLoggerDelegate.errorLogger, "updateServiceTypeBlueprint caught exception"); - json = objectMapper.writeValueAsString(new RestResponseError("updateServiceTypeBlueprint failed", t)); + logger.error(EELFLoggerDelegate.errorLogger, + "updateServiceTypeBlueprint caught exception"); + json = objectMapper + .writeValueAsString(new RestResponseError("updateServiceTypeBlueprint failed", t)); } finally { postLogAudit(request); } @@ -943,6 +897,7 @@ public class InventoryController extends DashboardRestrictedBaseController { MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, logDateFormat.format(end)); MDC.put(SystemProperties.MDC_TIMER, Long.toString((end.getTime() - begin.getTime()))); logger.info(EELFLoggerDelegate.auditLogger, request.getMethod() + request.getRequestURI()); - logger.info(EELFLoggerDelegate.metricsLogger, request.getMethod() + request.getRequestURI()); + logger.info(EELFLoggerDelegate.metricsLogger, + request.getMethod() + request.getRequestURI()); } } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/model/inventory/ServiceRequest.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/model/inventory/ServiceRequest.java index ecb1da0..46b3351 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/model/inventory/ServiceRequest.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/model/inventory/ServiceRequest.java @@ -65,8 +65,10 @@ public class ServiceRequest { final Collection<ServiceComponent> serviceComponents = service.getComponents(); final Collection<ServiceComponentRequest> serviceComponentRequests = new ArrayList<ServiceComponentRequest>(); - for (ServiceComponent sc : serviceComponents) { - serviceComponentRequests.add(ServiceComponentRequest.from(sc)); + if (serviceComponents != null) { + for (ServiceComponent sc : serviceComponents) { + serviceComponentRequests.add(ServiceComponentRequest.from(sc)); + } } return new ServiceRequest(typeId, service.getVnfId(), service.getVnfType(), service.getVnfLocation(), diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyClient.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyClient.java index 4173f5e..1ffab54 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyClient.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyClient.java @@ -23,12 +23,9 @@ package org.onap.ccsdk.dashboard.rest; import java.util.Map; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintContent; import org.onap.ccsdk.dashboard.model.CloudifyBlueprintList; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintUpload; import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentList; -import org.onap.ccsdk.dashboard.model.CloudifyDeploymentRequest; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateRequest; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateResponse; import org.onap.ccsdk.dashboard.model.CloudifyEventList; @@ -37,7 +34,6 @@ import org.onap.ccsdk.dashboard.model.CloudifyExecutionList; import org.onap.ccsdk.dashboard.model.CloudifyExecutionRequest; import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceIdList; import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceList; -import org.onap.ccsdk.dashboard.model.CloudifySecret; import org.onap.ccsdk.dashboard.model.CloudifyTenantList; /** @@ -106,16 +102,6 @@ public interface CloudifyClient { public CloudifyNodeInstanceIdList getNodeInstanceId(String id, String tenant); /** - * Query execution information for a deployment ID and execution ID passed as - * inputs - * - * @param executionId - * @param deploymentId - * @return - */ - public CloudifyExecutionList getExecution(String executionId, String deploymentId); - - /** * Initiate a deployment update in cloudify * * @param execution @@ -161,23 +147,6 @@ public interface CloudifyClient { public CloudifyNodeInstanceList getNodeInstanceVersion(String bp_id, String tenant); /** - * Start Uninstall execution workflow in cloudify - * - * @param id - * @param ignoreLiveNodes - * @return - */ - public int deleteDeployment(String id, boolean ignoreLiveNodes); - - /** - * Start install execution workflow in cloudify - * - * @param deployment - * @return - */ - public CloudifyDeploymentList createDeployment(CloudifyDeploymentRequest deployment); - - /** * Query deployment object from cloudify * * @param id @@ -201,30 +170,6 @@ public interface CloudifyClient { public CloudifyDeploymentList getDeployments(); /** - * Remove blueprint referred by ID from cloudify - * - * @param id - * @return - */ - public int deleteBlueprint(String id); - - /** - * Upload blueprint into cloudify - * - * @param blueprint - * @return - */ - public CloudifyBlueprintList uploadBlueprint(CloudifyBlueprintUpload blueprint); - - /** - * View blueprint YAML text - * - * @param id - * @return - */ - public CloudifyBlueprintContent viewBlueprint(String id); - - /** * Query a blueprint object matching the blueprint ID in cloudify * * @param id @@ -234,13 +179,6 @@ public interface CloudifyClient { public CloudifyBlueprintList getBlueprint(String id, String tenant); /** - * Query all the blueprints in cloudify - * - * @return - */ - public CloudifyBlueprintList getBlueprints(); - - /** * Query deployment inputs for a deployment ID in the cloudify tenant * * @param id @@ -248,13 +186,4 @@ public interface CloudifyClient { * @return */ public CloudifyDeploymentList getDeploymentInputs(String id, String tenant); - - /** - * Query a secret object matching the input secret name in the cloudify tenant - * - * @param secretName - * @param tenant - * @return - */ - public CloudifySecret getSecret(String secretName, String tenant); } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyMockClientImpl.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyMockClientImpl.java deleted file mode 100644 index bd9100e..0000000 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyMockClientImpl.java +++ /dev/null @@ -1,233 +0,0 @@ -/******************************************************************************* -* =============LICENSE_START========================================================= -* -* ================================================================================= -* Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. -* ================================================================================ -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* ============LICENSE_END========================================================= -* -* ECOMP is a trademark and service mark of AT&T Intellectual Property. -*******************************************************************************/ -package org.onap.ccsdk.dashboard.rest; - -import java.io.InputStream; -import java.util.Map; -import java.util.Scanner; - -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintContent; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintList; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintUpload; -import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; -import org.onap.ccsdk.dashboard.model.CloudifyDeploymentList; -import org.onap.ccsdk.dashboard.model.CloudifyDeploymentRequest; -import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateRequest; -import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateResponse; -import org.onap.ccsdk.dashboard.model.CloudifyEventList; -import org.onap.ccsdk.dashboard.model.CloudifyExecution; -import org.onap.ccsdk.dashboard.model.CloudifyExecutionList; -import org.onap.ccsdk.dashboard.model.CloudifyExecutionRequest; -import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceIdList; -import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceList; -import org.onap.ccsdk.dashboard.model.CloudifySecret; -import org.onap.ccsdk.dashboard.model.CloudifyTenantList; -import org.onap.ccsdk.dashboard.model.ECTransportModel; -import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; - -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * Provides mock implementations that return contents of files on the classpath. - */ -public class CloudifyMockClientImpl implements CloudifyClient { - - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CloudifyMockClientImpl.class); - - /** - * For mock outputs - */ - private final ObjectMapper objectMapper = new ObjectMapper(); - - private String getMockDataContent(final String path) { - String result = null; - try { - InputStream is = getClass().getResourceAsStream(path); - if (is == null) - throw new Exception("Failed to find resource at path " + path); - Scanner scanner = new Scanner(is, "UTF-8"); - result = scanner.useDelimiter("\\A").next(); - scanner.close(); - is.close(); - } catch (Exception ex) { - logger.error("getMockDataContent failed", ex); - throw new RuntimeException(ex); - } - return result; - } - - /** - * Creates an input stream using the specified path and requests the mapper - * create an object of the specified type. - * - * @param modelClass Model class - * @param path Path to classpath resource - * @return Instance of modelClass - */ - private ECTransportModel getMockData(final Class<? extends ECTransportModel> modelClass, final String path) { - ECTransportModel result = null; - String json = getMockDataContent(path); - try { - result = (ECTransportModel) objectMapper.readValue(json, modelClass); - } catch (Exception ex) { - logger.error("getMockData failed", ex); - throw new RuntimeException(ex); - } - return result; - } - - @Override - public CloudifyTenantList getTenants() { - return (CloudifyTenantList) getMockData(CloudifyTenantList.class, "/tenantsList.json"); - } - - @Override - public CloudifyDeployedTenantList getTenantInfoFromDeploy(String tenant) { - return (CloudifyDeployedTenantList) getMockData(CloudifyDeployedTenantList.class, "/serviceTenantList.json"); - - } - - @Override - public CloudifyNodeInstanceIdList getNodeInstanceId(String deploymentId, String nodeId, String tenant) { - return null; - } - - @Override - public CloudifyNodeInstanceIdList getNodeInstanceId(String deploymentId, String tenant) { - return null; - } - - @Override - public CloudifyNodeInstanceList getNodeInstanceVersion(String bpId, String tenant) { - return null; - } - - @Override - public CloudifyNodeInstanceList getNodeInstanceVersion(String deploymentId, String nodeId, String tenant) { - return null; - } - - @Override - public CloudifyDeploymentUpdateResponse updateDeployment(CloudifyDeploymentUpdateRequest execution) { - return null; - } - - @Override - public CloudifyEventList getEventlogs(String executionId, String tenant) { - return null; - } - - public CloudifyDeploymentList createDeployment(CloudifyDeploymentRequest deployment) { - logger.debug(EELFLoggerDelegate.debugLogger, "createDeployment: {}", deployment.toString()); - return new CloudifyDeploymentList(null, null); - } - - @Override - public CloudifyExecutionList getExecutions(final String deploymentId, final String tenant) { - return (CloudifyExecutionList) getMockData(CloudifyExecutionList.class, "/listExecutionForDeploymentID.json"); - } - - @Override - public CloudifyExecutionList getExecutionsSummary(final String deploymentId, final String tenant) { - return (CloudifyExecutionList) getMockData(CloudifyExecutionList.class, "/listExecutionForDeploymentID.json"); - } - - @Override - public CloudifyExecutionList getExecution(String executionId, String deploymentId) { - return (CloudifyExecutionList) getMockData(CloudifyExecutionList.class, "/listExecutionForDeploymentID.json"); - } - - @Override - public CloudifyExecution startExecution(CloudifyExecutionRequest execution) { - logger.debug(EELFLoggerDelegate.debugLogger, "startExecution: {}", execution.toString()); - return new CloudifyExecution(null, null, null, null, null, null, null, null, null, null, null, null); - } - - @Override - public CloudifyExecution cancelExecution(final String executionId, Map<String, String> parameters, - final String tenant) { - return null; - } - - public int deleteDeployment(String id, boolean ignoreLiveNodes) { - return 0; - } - - public CloudifyDeploymentList getDeployment(String id, String tenant) { - return null; - } - - public CloudifyDeploymentList getDeployment(String id) { - return null; - } - - public CloudifyDeploymentList getDeployments() { - return null; - } - - public int deleteBlueprint(String id) { - return 0; - } - - public CloudifyBlueprintList uploadBlueprint(CloudifyBlueprintUpload blueprint) { - return null; - } - - public CloudifyBlueprintContent viewBlueprint(String id) { - return null; - } - - public CloudifyBlueprintList getBlueprint(String id, String tenant) { - return null; - } - - public CloudifyBlueprintList getBlueprints() { - return null; - } - - /** - * Get the a cloudify secret - * - * @return CloudifySecret - */ - @Override - public CloudifySecret getSecret(String secretName, String tenant) { - return null; - } - - /** - * Simple test - * - * @param args blueprint ID - * @throws Exception On any failure - */ - public static void main(String[] args) throws Exception { - System.out.println("Testing paths and parsing mock data"); - } - - @Override - public CloudifyDeploymentList getDeploymentInputs(String id, String tenant) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImpl.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImpl.java index 3a4f2b1..28bd87c 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImpl.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImpl.java @@ -25,13 +25,12 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Map; +import javax.annotation.PostConstruct; + import org.json.JSONObject; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintContent; import org.onap.ccsdk.dashboard.model.CloudifyBlueprintList; -import org.onap.ccsdk.dashboard.model.CloudifyBlueprintUpload; import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentList; -import org.onap.ccsdk.dashboard.model.CloudifyDeploymentRequest; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateRequest; import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateResponse; import org.onap.ccsdk.dashboard.model.CloudifyEventList; @@ -41,8 +40,8 @@ import org.onap.ccsdk.dashboard.model.CloudifyExecutionRequest; import org.onap.ccsdk.dashboard.model.CloudifyNodeIdList; import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceIdList; import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceList; -import org.onap.ccsdk.dashboard.model.CloudifySecret; import org.onap.ccsdk.dashboard.model.CloudifyTenantList; +import org.onap.ccsdk.dashboard.util.DashboardProperties; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; @@ -50,44 +49,45 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.client.RestTemplate; - -import com.fasterxml.jackson.databind.ObjectMapper; +@org.springframework.stereotype.Service public class CloudifyRestClientImpl extends RestClientBase implements CloudifyClient { - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CloudifyRestClientImpl.class); - private final String baseUrl; - private final ObjectMapper objectMapper = new ObjectMapper(); - + private static EELFLoggerDelegate logger = + EELFLoggerDelegate.getLogger(CloudifyRestClientImpl.class); + private String baseUrl; private static final String BLUEPRINTS = "blueprints"; - private static final String VIEW_BLUEPRINTS = "viewblueprints"; private static final String DEPLOYMENTS = "deployments"; private static final String EXECUTIONS = "executions"; private static final String TENANTS = "tenants"; private static final String NODES = "nodes"; private static final String NODE_INSTANCES = "node-instances"; private static final String UPDATE_DEPLOYMENT = "update-deployment"; - private static final String SECRETS = "secrets"; private static final String EVENTS = "events"; private static final String TENANT = "tenant_name"; - public CloudifyRestClientImpl(String webapiUrl, String user, String pass) { - super(); - if (webapiUrl == null) + @PostConstruct + public void init() { + String webapiUrl = DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_URL); + if (webapiUrl == null) { throw new IllegalArgumentException("Null URL not permitted"); - + } + String user = DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_USERNAME); + String pass = DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_PASS); URL url = null; - String urlScheme = "http"; try { url = new URL(webapiUrl); baseUrl = url.toExternalForm(); } catch (MalformedURLException ex) { throw new RuntimeException("Failed to parse URL", ex); } - - urlScheme = webapiUrl.split(":")[0]; - createRestTemplate(url, user, pass, urlScheme); + String urlScheme = webapiUrl.split(":")[0]; + if (restTemplate == null) { + createRestTemplate(url, user, pass, urlScheme); + } } @Override @@ -151,10 +151,8 @@ public class CloudifyRestClientImpl extends RestClientBase implements CloudifyCl @Override public CloudifyNodeInstanceIdList getNodeInstanceId(final String bpId, String tenant) { - // GET - // /api/v3.1/nodes?deployment_id=clamp_967&type=onap.nodes.component&_include=id - String url = buildUrl(new String[] { baseUrl, NODES }, - new String[] { "deployment_id", bpId, "type", "onap.nodes.component", "_include", "id" }); + String url = buildUrl(new String[] {baseUrl, NODES}, + new String[] {"deployment_id", bpId, "type", "onap.nodes.component", "_include", "id"}); logger.debug(EELFLoggerDelegate.debugLogger, "getNodeInstanceId: url {}", url); HttpEntity<String> entity = getTenantHeader(tenant); ResponseEntity<CloudifyNodeIdList> response = restTemplate.exchange(url, HttpMethod.GET, entity, @@ -202,18 +200,6 @@ public class CloudifyRestClientImpl extends RestClientBase implements CloudifyCl } @Override - public CloudifyExecutionList getExecution(String executionId, String deploymentId) { - String url = buildUrl(new String[] { baseUrl, EXECUTIONS, executionId }, - new String[] { "deployment_id", deploymentId }); - logger.debug(EELFLoggerDelegate.debugLogger, "getExecution: url {}", url); - - ResponseEntity<CloudifyExecutionList> response = restTemplate.exchange(url, HttpMethod.GET, null, - new ParameterizedTypeReference<CloudifyExecutionList>() { - }); - return response.getBody(); - } - - @Override public CloudifyExecution startExecution(CloudifyExecutionRequest execution) { String url = buildUrl(new String[] { baseUrl, EXECUTIONS }, null); logger.debug(EELFLoggerDelegate.debugLogger, "startExecution: url {}", url); @@ -243,19 +229,8 @@ public class CloudifyRestClientImpl extends RestClientBase implements CloudifyCl headers.set("Tenant", tenant); headers.set("Content-Type", "application/json"); HttpEntity<String> entity = new HttpEntity<String>(requestJson.toString(), headers); - ResponseEntity<CloudifyExecution> response = restTemplate.exchange(url, HttpMethod.POST, entity, - new ParameterizedTypeReference<CloudifyExecution>() { - }); - return response.getBody(); // getStatusCode().value(); - } - - @Override - public CloudifyBlueprintList getBlueprints() { - String url = buildUrl(new String[] { baseUrl, BLUEPRINTS }, null); - logger.debug(EELFLoggerDelegate.debugLogger, "getBlueprints: url {}", url); - ResponseEntity<CloudifyBlueprintList> response = restTemplate.exchange(url, HttpMethod.GET, null, - new ParameterizedTypeReference<CloudifyBlueprintList>() { - }); + ResponseEntity<CloudifyExecution> response = restTemplate.exchange(url, HttpMethod.POST, + entity, new ParameterizedTypeReference<CloudifyExecution>() {}); return response.getBody(); } @@ -271,32 +246,6 @@ public class CloudifyRestClientImpl extends RestClientBase implements CloudifyCl } @Override - public CloudifyBlueprintContent viewBlueprint(final String id) { - String url = buildUrl(new String[] { baseUrl, VIEW_BLUEPRINTS }, new String[] { "id", id }); - logger.debug(EELFLoggerDelegate.debugLogger, "viewBlueprint: url {}", url); - ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, null, String.class); - String yaml = response.getBody(); - return new CloudifyBlueprintContent(id, yaml); - } - - @Override - public CloudifyBlueprintList uploadBlueprint(CloudifyBlueprintUpload blueprint) { - String url = buildUrl(new String[] { baseUrl, BLUEPRINTS }, null); - logger.debug(EELFLoggerDelegate.debugLogger, "uploadBlueprint: url {}", url); - return restTemplate.postForObject(url, blueprint, CloudifyBlueprintList.class); - } - - @Override - public int deleteBlueprint(final String id) { - String url = buildUrl(new String[] { baseUrl, BLUEPRINTS, id }, null); - logger.debug(EELFLoggerDelegate.debugLogger, "deleteBlueprint: url {}", url); - ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.DELETE, null, - new ParameterizedTypeReference<String>() { - }); - return response.getStatusCode().value(); - } - - @Override public CloudifyDeploymentList getDeployments() { String url = buildUrl(new String[] { baseUrl, DEPLOYMENTS }, null); logger.debug(EELFLoggerDelegate.debugLogger, "getDeployments: url {}", url); @@ -332,43 +281,8 @@ public class CloudifyRestClientImpl extends RestClientBase implements CloudifyCl String url = buildUrl(new String[] { baseUrl, DEPLOYMENTS }, new String[] { "id", id, "_include", "inputs" }); logger.debug(EELFLoggerDelegate.debugLogger, "getDeployment: url {}", url); HttpEntity<String> entity = getTenantHeader(tenant); - ResponseEntity<CloudifyDeploymentList> response = restTemplate.exchange(url, HttpMethod.GET, entity, - new ParameterizedTypeReference<CloudifyDeploymentList>() { - }); - return response.getBody(); - } - - @Override - public CloudifyDeploymentList createDeployment(CloudifyDeploymentRequest deployment) { - String url = buildUrl(new String[] { baseUrl, DEPLOYMENTS }, null); - logger.debug(EELFLoggerDelegate.debugLogger, "createDeployment: url {}", url); - return restTemplate.postForObject(url, deployment, CloudifyDeploymentList.class); - } - - @Override - public int deleteDeployment(final String id, boolean ignoreLiveNodes) { - String url = buildUrl(new String[] { baseUrl, DEPLOYMENTS, id }, - new String[] { "ignore_live_nodes", Boolean.toString(ignoreLiveNodes) }); - logger.debug(EELFLoggerDelegate.debugLogger, "deleteDeployment: url {}", url); - ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.DELETE, null, - new ParameterizedTypeReference<String>() { - }); - return response.getStatusCode().value(); - } - - /** - * Get a cloudify secret - * - * @return CloudifySecret - */ - @Override - public CloudifySecret getSecret(String secretName, String tenant) { - String url = buildUrl(new String[] { baseUrl, SECRETS, secretName }, new String[] { TENANT, tenant }); - logger.debug(EELFLoggerDelegate.debugLogger, "getSecrets: url {}", url); - ResponseEntity<CloudifySecret> response = restTemplate.exchange(url, HttpMethod.GET, null, - new ParameterizedTypeReference<CloudifySecret>() { - }); + ResponseEntity<CloudifyDeploymentList> response = restTemplate.exchange(url, HttpMethod.GET, + entity, new ParameterizedTypeReference<CloudifyDeploymentList>() {}); return response.getBody(); } - } diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/ConsulMockClientImpl.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/ConsulMockClientImpl.java deleted file mode 100644 index 30b1f30..0000000 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/ConsulMockClientImpl.java +++ /dev/null @@ -1,126 +0,0 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ -package org.onap.ccsdk.dashboard.rest; - -import java.io.InputStream; -import java.util.List; -import java.util.Scanner; - -import org.onap.ccsdk.dashboard.model.ConsulDatacenter; -import org.onap.ccsdk.dashboard.model.ConsulHealthServiceRegistration; -import org.onap.ccsdk.dashboard.model.ConsulNodeInfo; -import org.onap.ccsdk.dashboard.model.ConsulServiceHealth; -import org.onap.ccsdk.dashboard.model.ConsulServiceInfo; -import org.onap.ccsdk.dashboard.model.ECTransportModel; -import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class ConsulMockClientImpl implements ConsulClient { - - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ConsulMockClientImpl.class); - - /** - * For mock outputs - */ - private final ObjectMapper objectMapper = new ObjectMapper(); - - private String getMockDataContent(final String path) { - String result = null; - try { - InputStream is = getClass().getResourceAsStream(path); - if (is == null) - throw new Exception("Failed to find resource at path " + path); - Scanner scanner = new Scanner(is, "UTF-8"); - result = scanner.useDelimiter("\\A").next(); - scanner.close(); - is.close(); - } catch (Exception ex) { - logger.error("getMockDataContent failed", ex); - throw new RuntimeException(ex); - } - return result; - } - - /** - * Creates an input stream using the specified path and requests the mapper - * create an object of the specified type. - * - * @param modelClass Model class - * @param path Path to classpath resource - * @return Instance of modelClass - */ - private ECTransportModel getMockData(final Class<? extends ECTransportModel> modelClass, final String path) { - ECTransportModel result = null; - String json = getMockDataContent(path); - try { - result = (ECTransportModel) objectMapper.readValue(json, modelClass); - } catch (Exception ex) { - logger.error("getMockData failed", ex); - throw new RuntimeException(ex); - } - return result; - } - - @Override - public List<ConsulServiceInfo> getServices(String datacenter) { - - return null; - } - - @Override - public List<ConsulServiceHealth> getServiceHealth(String datacenter, String srvcName) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List<ConsulNodeInfo> getNodes(String datacenter) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List<ConsulServiceHealth> getNodeServicesHealth(String datacenter, String nodeId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List<ConsulDatacenter> getDatacenters() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String registerService(ConsulHealthServiceRegistration registration) { - // TODO Auto-generated method stub - return null; - } - - @Override - public int deregisterService(String serviceName) { - // TODO Auto-generated method stub - return 0; - } - -} diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/ConsulRestClientImpl.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/ConsulRestClientImpl.java index b48b8d4..2567577 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/ConsulRestClientImpl.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/ConsulRestClientImpl.java @@ -27,11 +27,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import javax.annotation.PostConstruct; + import org.json.JSONArray; import org.json.JSONObject; import org.onap.ccsdk.dashboard.model.ConsulDatacenter; import org.onap.ccsdk.dashboard.model.ConsulHealthServiceRegistration; import org.onap.ccsdk.dashboard.model.ConsulHealthServiceRegistration.EndpointCheck; +import org.onap.ccsdk.dashboard.util.DashboardProperties; import org.onap.ccsdk.dashboard.model.ConsulNodeInfo; import org.onap.ccsdk.dashboard.model.ConsulServiceHealth; import org.onap.ccsdk.dashboard.model.ConsulServiceInfo; @@ -46,10 +49,12 @@ import org.springframework.http.ResponseEntity; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +@org.springframework.stereotype.Service public class ConsulRestClientImpl extends RestClientBase implements ConsulClient { - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ConsulRestClientImpl.class); - private final String baseUrl; + private static EELFLoggerDelegate logger = + EELFLoggerDelegate.getLogger(ConsulRestClientImpl.class); + private String baseUrl; private final ObjectMapper objectMapper = new ObjectMapper(); private static final String API_VER = "v1"; @@ -57,24 +62,24 @@ public class ConsulRestClientImpl extends RestClientBase implements ConsulClient private static final String SERVICES = "services"; private static final String HEALTH = "health"; private static final String CHECKS = "checks"; - private static final String HEALTH_SERVICES = "healthservices"; - public ConsulRestClientImpl(String webapiUrl, String user, String pass) { - super(); + @PostConstruct + public void init() { + String webapiUrl = DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_CONSUL_URL); if (webapiUrl == null) throw new IllegalArgumentException("Null URL not permitted"); - URL url = null; - String urlScheme = "http"; try { url = new URL(webapiUrl); baseUrl = url.toExternalForm(); } catch (MalformedURLException ex) { throw new RuntimeException("Failed to parse URL", ex); } - - urlScheme = webapiUrl.split(":")[0]; - createRestTemplate(url, user, pass, urlScheme); + String urlScheme = webapiUrl.split(":")[0]; + if (restTemplate == null) { + createRestTemplate(url, null, null, urlScheme); + } } @Override diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/DeploymentHandlerClientImpl.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/DeploymentHandlerClientImpl.java index c03dff6..6e9ecb4 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/DeploymentHandlerClientImpl.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/DeploymentHandlerClientImpl.java @@ -26,6 +26,8 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.stream.Stream; +import javax.annotation.PostConstruct; + import org.onap.ccsdk.dashboard.exceptions.BadRequestException; import org.onap.ccsdk.dashboard.exceptions.DeploymentNotFoundException; import org.onap.ccsdk.dashboard.exceptions.DownstreamException; @@ -36,6 +38,7 @@ import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentLink; import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentRequest; import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentResponse; import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentsListResponse; +import org.onap.ccsdk.dashboard.util.DashboardProperties; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -49,45 +52,34 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +@org.springframework.stereotype.Service public class DeploymentHandlerClientImpl extends RestClientBase implements DeploymentHandlerClient { - private final String baseUrl; - // private final RestTemplate restTemplate; + private String baseUrl; + private static final String DEPLOYMENTS = "dcae-deployments"; private static final String UPDATE_PATH = "dcae-deployment-update"; protected final ObjectMapper objectMapper = new ObjectMapper(); - public DeploymentHandlerClientImpl(String webapiUrl) { - this(webapiUrl, null, null); - } - - /** - * Builds a restTemplate. If username and password are supplied, uses basic HTTP - * authentication. - * - * @param webapiUrl URL of the web endpoint - * @param user user name; ignored if null - * @param pass password - */ - public DeploymentHandlerClientImpl(String webapiUrl, String user, String pass) { - super(); + @PostConstruct + public void init() { + String webapiUrl = DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_DHANDLER_URL); if (webapiUrl == null) throw new IllegalArgumentException("Null URL not permitted"); URL url = null; - String urlScheme = "http"; try { url = new URL(webapiUrl); baseUrl = url.toExternalForm(); } catch (MalformedURLException ex) { throw new RuntimeException("Failed to parse URL", ex); } - urlScheme = webapiUrl.split(":")[0]; - createRestTemplate(url, user, pass, urlScheme); - // Do not serialize null values - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - // Register Jdk8Module() for Stream and Optional types - objectMapper.registerModule(new Jdk8Module()); + String urlScheme = webapiUrl.split(":")[0]; + if (restTemplate == null) { + createRestTemplate(url, null, null, urlScheme); + } + } public Stream<DeploymentLink> getDeployments() { diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/InventoryClient.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/InventoryClient.java index 0e93a39..1b93bc7 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/InventoryClient.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/InventoryClient.java @@ -148,9 +148,9 @@ public interface InventoryClient { * * @return Set<InventoryProperty> */ - - public Set<InventoryProperty> getPropertiesOfServices(String propertyName); - + /* + * public Set<InventoryProperty> getPropertiesOfServices(String propertyName); + */ /** * Gets a single DCAE Service object corresponding to the specified serviceId. * diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientImpl.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientImpl.java index ebe7e4f..c1296f0 100644 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientImpl.java +++ b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientImpl.java @@ -33,6 +33,8 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.annotation.PostConstruct; + import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceAlreadyDeactivatedException; import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceNotFoundException; import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeAlreadyDeactivatedException; @@ -51,34 +53,26 @@ import org.onap.ccsdk.dashboard.model.inventory.ServiceType; import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeList; import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeQueryParams; import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeRequest; +import org.onap.ccsdk.dashboard.util.DashboardProperties; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.HttpClientErrorException; +@org.springframework.stereotype.Service public class RestInventoryClientImpl extends RestClientBase implements InventoryClient { - private final String baseUrl; - // private final RestTemplate restTemplate; + private String baseUrl; public static final String SERVICE_TYPES = "dcae-service-types"; public static final String SERVICES = "dcae-services"; public static final String SERVICES_GROUPBY = "dcae-services-groupby"; - public RestInventoryClientImpl(String webapiUrl) { - this(webapiUrl, null, null); - } - - /** - * Builds a restTemplate. If username and password are supplied, uses basic HTTP - * authentication. - * - * @param webapiUrl URL of the web endpoint - * @param user user name; ignored if null - * @param pass password - */ - public RestInventoryClientImpl(String webapiUrl, String user, String pass) { - super(); + @PostConstruct + public void init() { + String webapiUrl = DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_INVENTORY_URL); if (webapiUrl == null) throw new IllegalArgumentException("Null URL not permitted"); URL url = null; @@ -90,7 +84,10 @@ public class RestInventoryClientImpl extends RestClientBase implements Inventory throw new RuntimeException("Failed to parse URL", ex); } urlScheme = webapiUrl.split(":")[0]; - createRestTemplate(url, user, pass, urlScheme); + if (restTemplate == null) { + createRestTemplate(url, null, null, urlScheme); + } + } public Stream<ServiceType> getServiceTypes() { @@ -311,14 +308,14 @@ public class RestInventoryClientImpl extends RestClientBase implements Inventory return collection.stream(); } - public Set<InventoryProperty> getPropertiesOfServices(String propertyName) { - String url = buildUrl(new String[] { baseUrl, SERVICES_GROUPBY, propertyName }, null); - ResponseEntity<ServiceGroupByResults> response = restTemplate.exchange(url, HttpMethod.GET, null, - new ParameterizedTypeReference<ServiceGroupByResults>() { - }); - return response.getBody().propertyValues; - } - + /* + * public Set<InventoryProperty> getPropertiesOfServices(String propertyName) { + * String url = buildUrl(new String[] {baseUrl, SERVICES_GROUPBY, propertyName}, + * null); ResponseEntity<ServiceGroupByResults> response = + * restTemplate.exchange(url, HttpMethod.GET, null, new + * ParameterizedTypeReference<ServiceGroupByResults>() { }); return + * response.getBody().propertyValues; } + */ public Optional<Service> getService(String serviceId) { String url = buildUrl(new String[] { baseUrl, SERVICES, serviceId }, null); ResponseEntity<Service> response = restTemplate.exchange(url, HttpMethod.GET, null, diff --git a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientMockImpl.java b/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientMockImpl.java deleted file mode 100644 index 5a422c0..0000000 --- a/ccsdk-app-common/src/main/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientMockImpl.java +++ /dev/null @@ -1,189 +0,0 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ -package org.onap.ccsdk.dashboard.rest; - -import java.io.InputStream; -import java.util.Collection; -import java.util.Optional; -import java.util.Scanner; -import java.util.Set; -import java.util.stream.Stream; - -import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceAlreadyDeactivatedException; -import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceNotFoundException; -import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeActiveException; -import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeAlreadyDeactivatedException; -import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeNotFoundException; -import org.onap.ccsdk.dashboard.model.ECTransportModel; -import org.onap.ccsdk.dashboard.model.inventory.InventoryProperty; -import org.onap.ccsdk.dashboard.model.inventory.Service; -import org.onap.ccsdk.dashboard.model.inventory.ServiceList; -import org.onap.ccsdk.dashboard.model.inventory.ServiceQueryParams; -import org.onap.ccsdk.dashboard.model.inventory.ServiceRefList; -import org.onap.ccsdk.dashboard.model.inventory.ServiceType; -import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeList; -import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeQueryParams; -import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeRequest; -import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; - -public class RestInventoryClientMockImpl implements InventoryClient { - - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RestInventoryClientMockImpl.class); - /** - * For mock outputs - */ - private final ObjectMapper objectMapper = new ObjectMapper(); - - public RestInventoryClientMockImpl() { - // Do not serialize null values - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - // Register Jdk8Module() for Stream and Optional types - objectMapper.registerModule(new Jdk8Module()); - } - - private String getMockDataContent(final String path) { - String result = null; - try { - InputStream is = getClass().getResourceAsStream(path); - if (is == null) - throw new Exception("Failed to find resource at path " + path); - Scanner scanner = new Scanner(is, "UTF-8"); - result = scanner.useDelimiter("\\A").next(); - scanner.close(); - is.close(); - } catch (Exception ex) { - logger.error("getMockDataContent failed", ex); - throw new RuntimeException(ex); - } - return result; - } - - /** - * Creates an input stream using the specified path and requests the mapper - * create an object of the specified type. - * - * @param modelClass Model class - * @param path Path to classpath resource - * @return Instance of modelClass - */ - private ECTransportModel getMockData(final Class<? extends ECTransportModel> modelClass, final String path) { - ECTransportModel result = null; - String json = getMockDataContent(path); - try { - result = (ECTransportModel) objectMapper.readValue(json, modelClass); - } catch (Exception ex) { - logger.error("getMockData failed", ex); - throw new RuntimeException(ex); - } - return result; - } - - @Override - public Stream<ServiceType> getServiceTypes() { - ServiceTypeList mockData = (ServiceTypeList) getMockData(ServiceTypeList.class, "/serviceTypesList.json"); - Collection<ServiceType> collection = mockData.items; - - return collection.stream(); - } - - @Override - public Stream<ServiceType> getServiceTypes(ServiceTypeQueryParams serviceTypeQueryParams) { - ServiceTypeList mockData = (ServiceTypeList) getMockData(ServiceTypeList.class, "/serviceTypesList.json"); - Collection<ServiceType> collection = mockData.items; - - return collection.stream(); - } - - @Override - public ServiceRefList getServicesForType(ServiceQueryParams serviceQueryParams) { - return null; - } - - @Override - public ServiceType addServiceType(ServiceType serviceType) throws ServiceTypeActiveException { - // TODO Auto-generated method stub - return null; - } - - @Override - public ServiceType addServiceType(ServiceTypeRequest serviceTypeRequest) throws ServiceTypeActiveException { - // TODO Auto-generated method stub - return null; - } - - @Override - public Optional<ServiceType> getServiceType(String typeId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void deleteServiceType(String typeId) - throws ServiceTypeNotFoundException, ServiceTypeAlreadyDeactivatedException { - // TODO Auto-generated method stub - - } - - @Override - public Stream<Service> getServices() { - ServiceList mockData = (ServiceList) getMockData(ServiceList.class, "/serviceList.json"); - Collection<Service> collection = mockData.items; - - return collection.stream(); - } - - @Override - public Stream<Service> getServices(ServiceQueryParams serviceQueryParams) { - ServiceList mockData = (ServiceList) getMockData(ServiceList.class, "/serviceList.json"); - Collection<Service> collection = mockData.items; - - return collection.stream(); - } - - @Override - public Set<InventoryProperty> getPropertiesOfServices(String propertyName) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Optional<Service> getService(String serviceId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void putService(String typeId, Service service) { - // TODO Auto-generated method stub - - } - - @Override - public void deleteService(String serviceId) throws ServiceNotFoundException, ServiceAlreadyDeactivatedException { - // TODO Auto-generated method stub - - } -} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/CloudifyControllerTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/CloudifyControllerTest.java index 0a5fe93..d6e1fb0 100644 --- a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/CloudifyControllerTest.java +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/CloudifyControllerTest.java @@ -2,110 +2,526 @@ * =============LICENSE_START========================================================= * * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. * ============LICENSE_END========================================================= * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ECOMP is a trademark and service mark of AT&T Intellectual Property. *******************************************************************************/ + package org.onap.ccsdk.dashboard.controller; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; +import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.onap.ccsdk.dashboard.core.MockUser; +import org.onap.ccsdk.dashboard.core.MockitoTestSuite; +import org.onap.ccsdk.dashboard.model.CloudifyBlueprint; +import org.onap.ccsdk.dashboard.model.CloudifyBlueprintList; +import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenant; +import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; +import org.onap.ccsdk.dashboard.model.CloudifyDeployment; +import org.onap.ccsdk.dashboard.model.CloudifyDeploymentList; +import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateRequest; +import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateResponse; +import org.onap.ccsdk.dashboard.model.CloudifyEvent; +import org.onap.ccsdk.dashboard.model.CloudifyEventList; +import org.onap.ccsdk.dashboard.model.CloudifyExecution; +import org.onap.ccsdk.dashboard.model.CloudifyExecutionList; +import org.onap.ccsdk.dashboard.model.CloudifyExecutionRequest; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstance; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceId; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceIdList; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceList; +import org.onap.ccsdk.dashboard.model.CloudifyTenant; import org.onap.ccsdk.dashboard.model.CloudifyTenantList; import org.onap.ccsdk.dashboard.rest.CloudifyClient; -import org.onap.ccsdk.dashboard.core.MockitoTestSuite; import org.onap.portalsdk.core.domain.User; import org.onap.portalsdk.core.web.support.UserUtils; -import org.springframework.test.web.servlet.RequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpClientErrorException; + import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.springframework.http.MediaType; +public class CloudifyControllerTest extends MockitoTestSuite { + @Mock + private CloudifyClient restClient; -public class CloudifyControllerTest extends MockitoTestSuite { + @InjectMocks + private CloudifyController subject = new CloudifyController(); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + + @Mock + UserUtils userUtils = new UserUtils(); + + @Mock + User epuser; + + MockUser mockUser = new MockUser(); + + HttpClientErrorException httpException; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + httpException = new HttpClientErrorException(HttpStatus.BAD_REQUEST, "statusText"); + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetTenants() throws Exception { + String tenantsList = + "{\"items\": [{\"id\": 1, \"name\": \"default_tenant\", \"dName\": \"default_tenant\" }, " + + "{\"id\": 2, \"name\": \"dyh1b1902\", \"dName\": \"dyh1b1902\"}], " + + "\"metadata\": {\"pagination\": {\"total\": 2, \"offset\": 0, \"size\": 0}}}"; + CloudifyTenantList sampleData = null; + try { + sampleData = objectMapper.readValue(tenantsList, CloudifyTenantList.class); + } catch (Exception e) { + } + + User user = mockUser.mockUser(); + user.setLoginId("tester"); + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + + Mockito.when(UserUtils.getUserSession(mockedRequest)).thenReturn(user); + Mockito.when(restClient.getTenants()).thenReturn(sampleData).thenThrow(Exception.class); + /* + * RequestBuilder request = MockMvcRequestBuilders. get("/tenants"). + * accept(MediaType.APPLICATION_JSON); + */ + String tenantStr = subject.getTenants(mockedRequest); + assertTrue(tenantStr.contains("dyh1b")); + + tenantStr = subject.getTenants(mockedRequest); + assertTrue(tenantStr.contains("error")); + } + + @SuppressWarnings({"unchecked", "unchecked"}) + @Test + public final void testGetBlueprintById() throws Exception { + + CloudifyBlueprint cldBp = + new CloudifyBlueprint("file1", "description1", "343242", "3423423", "id1", null); + + List<CloudifyBlueprint> items = new ArrayList<CloudifyBlueprint>(); + items.add(cldBp); + + CloudifyBlueprintList.Metadata.Pagination pageObj = + new CloudifyBlueprintList.Metadata.Pagination(1, 0, 1); + + CloudifyBlueprintList.Metadata metadata = new CloudifyBlueprintList.Metadata(pageObj); + + CloudifyBlueprintList cldBpList = new CloudifyBlueprintList(items, metadata); + + when(restClient.getBlueprint(Mockito.any(), Mockito.any())).thenReturn(cldBpList) + .thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.getBlueprintById("id1", "tenant1", mockedRequest); + assertTrue(actualResult.contains("id1")); + + actualResult = subject.getBlueprintById("id1", "tenant1", mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getBlueprintById("id1", "tenant1", mockedRequest); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testGetDeploymentById() throws Exception { + + CloudifyDeployment cldDepl = new CloudifyDeployment("description", "blueprint_id", + "created_at", "updated_at", "id1", null, null, null, null, null, null, null, "tenant1"); + + List<CloudifyDeployment> items = new ArrayList<CloudifyDeployment>(); + items.add(cldDepl); + + CloudifyDeploymentList.Metadata.Pagination pageObj = + new CloudifyDeploymentList.Metadata.Pagination(1, 0, 1); + + CloudifyDeploymentList.Metadata metadata = new CloudifyDeploymentList.Metadata(pageObj); + + CloudifyDeploymentList cldDeplList = new CloudifyDeploymentList(items, metadata); + + when(restClient.getDeployment(Mockito.any(), Mockito.any())).thenReturn(cldDeplList) + .thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.getDeploymentById("id1", "tenant1", mockedRequest); + assertTrue(actualResult.contains("id1")); + + actualResult = subject.getDeploymentById("id1", "tenant1", mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getDeploymentById("id1", "tenant1", mockedRequest); + assertTrue(actualResult.contains("error")); + + when(restClient.getDeployment(Mockito.any())).thenReturn(cldDeplList) + .thenThrow(Exception.class).thenThrow(httpException); + + actualResult = subject.getDeploymentById("id1", "", mockedRequest); + assertTrue(actualResult.contains("id1")); + + actualResult = subject.getDeploymentById("id1", null, mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getDeploymentById("id1", null, mockedRequest); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testGetTenantStatusForService() throws Exception { + + String[] deplIds = {"id1", "id2"}; + + CloudifyDeployedTenant cldDeplTenant = new CloudifyDeployedTenant("id1", "bp1", "tenant1"); + + List<CloudifyDeployedTenant> cldDeplTenantList = new ArrayList<CloudifyDeployedTenant>(); + + cldDeplTenantList.add(cldDeplTenant); + + CloudifyDeployedTenantList cldDeployedTenantList = + new CloudifyDeployedTenantList(cldDeplTenantList, null); + + CloudifyTenant cldTenant = new CloudifyTenant("tenant1", "tenant1", "tenant_id1"); + + List<CloudifyTenant> cldfyTenantList = new ArrayList<CloudifyTenant>(); + cldfyTenantList.add(cldTenant); + + CloudifyTenantList cloudifyTenantList = new CloudifyTenantList(cldfyTenantList, null); + + CloudifyExecution cldExecution = + new CloudifyExecution("successful", "created_at", "install", false, "bp1", "id1", + "tenant1", "error", "execution_id1", null, false, false); + + List<CloudifyExecution> cldExecutionList = new ArrayList<CloudifyExecution>(); + + cldExecutionList.add(cldExecution); + + CloudifyExecutionList cloudifyExecutionList = + new CloudifyExecutionList(cldExecutionList, null); + + Map<String, Object> plan = new HashMap<String, Object>(); + HashMap<String, String> plugins_to_install = new HashMap<String, String>(); + plugins_to_install.put("name", "helm-plugin"); + ArrayList<HashMap<String, String>> deployment_plugins_to_install = + new ArrayList<HashMap<String, String>>(); + + deployment_plugins_to_install.add(plugins_to_install); + plan.put("deployment_plugins_to_install", deployment_plugins_to_install); + + Map<String, String> workflows = new HashMap<String, String>(); + workflows.put("status", "workflowshelm"); + plan.put("workflows", workflows); + + CloudifyBlueprint cldBp = + new CloudifyBlueprint("file1", "description1", "343242", "3423423", "id1", plan); + + List<CloudifyBlueprint> items = new ArrayList<CloudifyBlueprint>(); + items.add(cldBp); + + CloudifyBlueprintList.Metadata.Pagination pageObj = + new CloudifyBlueprintList.Metadata.Pagination(1, 0, 1); + + CloudifyBlueprintList.Metadata metadata = new CloudifyBlueprintList.Metadata(pageObj); + + CloudifyBlueprintList cldBpList = new CloudifyBlueprintList(items, metadata); + + when(restClient.getTenants()).thenReturn(cloudifyTenantList); + + when(restClient.getTenantInfoFromDeploy(Mockito.any())).thenReturn(cldDeployedTenantList); + + when(restClient.getExecutionsSummary(Mockito.any(), Mockito.any())) + .thenReturn(cloudifyExecutionList); + + when(restClient.getBlueprint(Mockito.any(), Mockito.any())).thenReturn(cldBpList) + .thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.getTenantStatusForService(mockedRequest, deplIds); + assertTrue(actualResult.contains("successful")); + + actualResult = subject.getTenantStatusForService(mockedRequest, deplIds); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getTenantStatusForService(mockedRequest, deplIds); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testGetExecutionsByPage() throws Exception { + CloudifyExecution cldExecution = + new CloudifyExecution("successful", "created_at", "install", false, "bp1", "id1", + "tenant1", "error", "execution_id1", null, false, false); + + List<CloudifyExecution> cldExecutionList = new ArrayList<CloudifyExecution>(); + + cldExecutionList.add(cldExecution); + + CloudifyExecutionList cloudifyExecutionList = + new CloudifyExecutionList(cldExecutionList, null); + + CloudifyDeployment cldDeployment = new CloudifyDeployment("description", "blueprint_id", + "created_at", "updated_at", "id", null, null, null, null, null, null, null, "tenant"); + + List<CloudifyDeployment> cfyDeployItems = new ArrayList<CloudifyDeployment>(); + cfyDeployItems.add(cldDeployment); + + CloudifyDeploymentList.Metadata.Pagination pageObj = + new CloudifyDeploymentList.Metadata.Pagination(1, 0, 1); + CloudifyDeploymentList.Metadata metadata = new CloudifyDeploymentList.Metadata(pageObj); + + CloudifyDeploymentList cldDeployList = new CloudifyDeploymentList(cfyDeployItems, metadata); + + when(restClient.getDeployments()).thenReturn(cldDeployList); + when(restClient.getExecutions(Mockito.any(), Mockito.any())) + .thenReturn(cloudifyExecutionList).thenThrow(Exception.class) + .thenReturn(cloudifyExecutionList); + + String actualResult = + subject.getExecutionsByPage(mockedRequest, "id1", "successful", "tenant1"); + assertTrue(actualResult.contains("successful")); + + actualResult = subject.getExecutionsByPage(mockedRequest, "id1", "successful", "tenant1"); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getExecutionsByPage(mockedRequest, null, "successful", "tenant1"); + assertTrue(actualResult.contains("successful")); + } + + @SuppressWarnings("unchecked") + @Test + public void testGetExecutionByIdAndDeploymentId() throws Exception { + CloudifyExecution cldExecution = + new CloudifyExecution("successful", "created_at", "install", false, "bp1", "id1", + "tenant1", "error", "execution_id1", null, false, false); + + List<CloudifyExecution> cldExecutionList = new ArrayList<CloudifyExecution>(); + + cldExecutionList.add(cldExecution); + + CloudifyExecutionList cloudifyExecutionList = + new CloudifyExecutionList(cldExecutionList, null); + + when(restClient.getExecutions(Mockito.any(), Mockito.any())) + .thenReturn(cloudifyExecutionList).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.getExecutionByIdAndDeploymentId("execution_id", + "deployment_id", "tenant", mockedRequest); + assertTrue(actualResult.contains("successful")); + + actualResult = subject.getExecutionByIdAndDeploymentId("execution_id", "deployment_id", + "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getExecutionByIdAndDeploymentId("execution_id", "deployment_id", + "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testGetExecutionEventsById() throws Exception { + + CloudifyEvent cfyEvent1 = new CloudifyEvent("blueprint_id", "deployment_id", null, "log", + "execution_id", "debug", "logger", "message", "node_instance_id", "node_name", + "operation", "reported_timestamp", "timestamp", "cloudify_log", "workflow_id"); + CloudifyEvent cfyEvent2 = new CloudifyEvent("blueprint_id", "deployment_id", null, "log", + "execution_id", "debug", "logger", "message", "node_instance_id", "node_name", + "operation", "reported_timestamp", "timestamp", "type2", "workflow_id"); + + List<CloudifyEvent> cfyEventItems = new ArrayList<CloudifyEvent>(); + cfyEventItems.add(cfyEvent1); + cfyEventItems.add(cfyEvent2); + + CloudifyEventList cfyEventsList = new CloudifyEventList(cfyEventItems, null); + + when(restClient.getEventlogs(Mockito.any(), Mockito.any())).thenReturn(cfyEventsList) + .thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = + subject.getExecutionEventsById("execution1", "false", "tenant", mockedRequest); + assertTrue(actualResult.contains("execution_id")); + + actualResult = + subject.getExecutionEventsById("execution1", "false", "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = + subject.getExecutionEventsById("execution1", "false", "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testStartExecution() throws Exception { + CloudifyExecution cfyExecObj = new CloudifyExecution("successful", "created_at", "install", + false, "bp1", "id1", "tenant1", "error", "execution_id1", null, false, false); + + Map<String, Object> params = new HashMap<String, Object>(); + params.put("key1", "value1"); + + CloudifyExecutionRequest cfyExecReq = new CloudifyExecutionRequest("deployment_id", + "upgrade", false, false, "tenant1", params); + + CloudifyNodeInstanceId cfyNodeInst = new CloudifyNodeInstanceId("node_instance_id1"); + + List<CloudifyNodeInstanceId> cfyNodeInstItems = new ArrayList<CloudifyNodeInstanceId>(); + + cfyNodeInstItems.add(cfyNodeInst); + + CloudifyNodeInstanceIdList cfyNodeInstList = + new CloudifyNodeInstanceIdList(cfyNodeInstItems, null); + + when(restClient.getNodeInstanceId(Mockito.any(), Mockito.any())) + .thenReturn(cfyNodeInstList); + + when(restClient.startExecution(Matchers.<CloudifyExecutionRequest>any())) + .thenReturn(cfyExecObj).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.startExecution(mockedRequest, cfyExecReq); + assertTrue(actualResult.contains("execution_id1")); + + actualResult = subject.startExecution(mockedRequest, cfyExecReq); + assertTrue(actualResult.contains("error")); + + actualResult = subject.startExecution(mockedRequest, cfyExecReq); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testUpdateDeployment() throws Exception { + + CloudifyDeploymentUpdateRequest cfyDeployUpdateReq = + new CloudifyDeploymentUpdateRequest("deployment_id", "update", false, false, + "node_instance_id1", "4", "1000", "image", 2, "my_container"); + + CloudifyDeploymentUpdateResponse cfyDeployUpdateResp = new CloudifyDeploymentUpdateResponse( + "terminated", "created_at", "update", false, "blueprint_id", "deployment_id", "", "id1", + null, "tenant1", "junit", false, "resource_availability"); + + when(restClient.updateDeployment(Matchers.<CloudifyDeploymentUpdateRequest>any())) + .thenReturn(cfyDeployUpdateResp).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.updateDeployment(mockedRequest, cfyDeployUpdateReq); + assertTrue(actualResult.contains("terminated")); + + actualResult = subject.updateDeployment(mockedRequest, cfyDeployUpdateReq); + assertTrue(actualResult.contains("error")); + + actualResult = subject.updateDeployment(mockedRequest, cfyDeployUpdateReq); + assertTrue(actualResult.contains("error")); + + } + + @SuppressWarnings("unchecked") + @Test + public void testGetNodeInstanceId() throws Exception { + + CloudifyNodeInstanceId cfyNodeInst = new CloudifyNodeInstanceId("node_instance_id1"); + + List<CloudifyNodeInstanceId> cfyNodeInstItems = new ArrayList<CloudifyNodeInstanceId>(); + + cfyNodeInstItems.add(cfyNodeInst); + + CloudifyNodeInstanceIdList cfyNodeInstList = + new CloudifyNodeInstanceIdList(cfyNodeInstItems, null); + + when(restClient.getNodeInstanceId(Mockito.any(), Mockito.any(), Mockito.any())) + .thenReturn(cfyNodeInstList).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = + subject.getNodeInstanceId("deploymentId", "tenant", "nodeId", mockedRequest); + assertTrue(actualResult.contains("node_instance_id1")); + + actualResult = subject.getNodeInstanceId("deploymentId", "tenant", "nodeId", mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getNodeInstanceId("deploymentId", "tenant", "nodeId", mockedRequest); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testGetDeploymentRevisions() throws Exception { + + CloudifyNodeInstance cfyNodeInstance = new CloudifyNodeInstance("id1", null); + + List<CloudifyNodeInstance> cfyNodeInstanceItems = new ArrayList<CloudifyNodeInstance>(); + cfyNodeInstanceItems.add(cfyNodeInstance); + + CloudifyNodeInstanceList cfyNodeInstList = + new CloudifyNodeInstanceList(cfyNodeInstanceItems, null); + + when(restClient.getNodeInstanceVersion(Mockito.any(), Mockito.any())) + .thenReturn(cfyNodeInstList).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = + subject.getDeploymentRevisions("deploymentId", "tenant", mockedRequest); + assertTrue(actualResult.contains("id1")); + + actualResult = subject.getDeploymentRevisions("deploymentId", "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getDeploymentRevisions("deploymentId", "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public void testCancelExecution() throws Exception { + List<String> tenants = new ArrayList<String>(); + tenants.add("tenant1"); + + HttpHeaders httpHeader = new HttpHeaders(); + httpHeader.put("tenant", tenants); + + CloudifyExecution cfyExecObj = new CloudifyExecution("successful", "created_at", "cancel", + false, "bp1", "id1", "tenant1", "error", "execution_id1", null, false, false); + + when(restClient.cancelExecution(Mockito.any(), Mockito.any(), Mockito.any())) + .thenReturn(cfyExecObj).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = + subject.cancelExecution(httpHeader, "id1", null, mockedRequest, mockedResponse); + assertTrue(actualResult.contains("execution_id1")); - @Mock - private CloudifyClient restClient; - - @InjectMocks - private CloudifyController subject = new CloudifyController(); - - protected final ObjectMapper objectMapper = new ObjectMapper(); - - @Mock - UserUtils userUtils = new UserUtils(); - - @Mock - User epuser; - - MockUser mockUser = new MockUser(); - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - objectMapper.registerModule(new Jdk8Module()); - } - - @Test - public final void testGetControllerEndpoints_stubbed() { - - } - - @Test - public final void testGetTenants_stubbed() throws Exception { - - String tenantsList = - "{\"items\": [{\"id\": 1, \"name\": \"default_tenant\", \"dName\": \"default_tenant\" }, " - + "{\"id\": 2, \"name\": \"dyh1b1902\", \"dName\": \"dyh1b1902\"}], " - + "\"metadata\": {\"pagination\": {\"total\": 2, \"offset\": 0, \"size\": 0}}}"; - CloudifyTenantList sampleData = null; - try { - sampleData = objectMapper.readValue(tenantsList, CloudifyTenantList.class); - } catch (Exception e) { - } - - User user = mockUser.mockUser(); - user.setLoginId("tester"); - MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); - - Mockito.when(UserUtils.getUserSession(mockedRequest)).thenReturn(user); - Mockito.when(restClient.getTenants()).thenReturn(sampleData); - - RequestBuilder request = MockMvcRequestBuilders. - get("/tenants"). - accept(MediaType.APPLICATION_JSON); - - String tenantStr = - subject.getTenants(mockedRequest); - - assertNotNull(tenantStr); - assertTrue(tenantStr.contains("dyh1b")); - - - } + actualResult = + subject.cancelExecution(httpHeader, "id1", null, mockedRequest, mockedResponse); + assertTrue(actualResult.contains("error")); + actualResult = + subject.cancelExecution(httpHeader, "id1", null, mockedRequest, mockedResponse); + assertTrue(actualResult.contains("error")); + } } diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/CommonApiControllerTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/CommonApiControllerTest.java new file mode 100644 index 0000000..7097275 --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/CommonApiControllerTest.java @@ -0,0 +1,791 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.controller; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.ccsdk.dashboard.core.MockUser; +import org.onap.ccsdk.dashboard.core.MockitoTestSuite; +import org.onap.ccsdk.dashboard.domain.EcdComponent; +import org.onap.ccsdk.dashboard.exceptions.BadRequestException; +import org.onap.ccsdk.dashboard.exceptions.DeploymentNotFoundException; +import org.onap.ccsdk.dashboard.exceptions.DownstreamException; +import org.onap.ccsdk.dashboard.exceptions.ServerErrorException; +import org.onap.ccsdk.dashboard.exceptions.ServiceAlreadyExistsException; +import org.onap.ccsdk.dashboard.exceptions.inventory.BlueprintParseException; +import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeNotFoundException; +import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenant; +import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; +import org.onap.ccsdk.dashboard.model.CloudifyDeployment; +import org.onap.ccsdk.dashboard.model.CloudifyDeploymentList; +import org.onap.ccsdk.dashboard.model.CloudifyExecution; +import org.onap.ccsdk.dashboard.model.CloudifyExecutionList; +import org.onap.ccsdk.dashboard.model.CloudifyExecutionRequest; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstance; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceId; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceIdList; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceList; +import org.onap.ccsdk.dashboard.model.CloudifyTenant; +import org.onap.ccsdk.dashboard.model.CloudifyTenantList; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentInput; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentRequest; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentResponse; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentResponseLinks; +import org.onap.ccsdk.dashboard.model.inventory.Service; +import org.onap.ccsdk.dashboard.model.inventory.ServiceList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceQueryParams; +import org.onap.ccsdk.dashboard.model.inventory.ServiceRef; +import org.onap.ccsdk.dashboard.model.inventory.ServiceRefList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceType; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeQueryParams; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeRequest; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeUploadRequest; +import org.onap.ccsdk.dashboard.rest.CloudifyClient; +import org.onap.ccsdk.dashboard.rest.DeploymentHandlerClient; +import org.onap.ccsdk.dashboard.rest.InventoryClient; +import org.onap.ccsdk.dashboard.service.ControllerEndpointService; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.HttpStatusCodeException; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +public class CommonApiControllerTest extends MockitoTestSuite { + + @Mock + private CloudifyClient cfyClient; + + @Mock + private InventoryClient inventoryClient; + + @Mock + DeploymentHandlerClient deploymentHandlerClient; + + @Mock + ControllerEndpointService controllerEndpointService; + + @InjectMocks + CommonApiController subject = new CommonApiController(); + + private HttpStatusCodeException httpException = + new HttpServerErrorException(HttpStatus.BAD_GATEWAY); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + + HttpServletRequest mockedRequest; + HttpServletResponse mockedResponse; + + MockUser mockUser = new MockUser(); + ServiceList deplList = null; + Service deplItem = null; + + ServiceType bpItem = null; + ServiceType bpItem2 = null; + ServiceTypeList bpList = null; + ServiceTypeList bpList2 = null; + + ServiceTypeRequest bpUploadItem = null; + + BadRequestException badReqError; + ServiceAlreadyExistsException srvcExistError; + ServerErrorException serverError; + DownstreamException downStrmError; + JsonProcessingException jsonError; + DeploymentNotFoundException notFoundError; + private ServiceTypeNotFoundException serviceTypeException = + new ServiceTypeNotFoundException("Invalid blueprint"); + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + getExpectedDeployments(); + getExpectedBueprints(); + createBpUploadItem(); + mockedRequest = getMockedRequest(); + mockedResponse = getMockedResponse(); + badReqError = new BadRequestException("bad request"); + srvcExistError = new ServiceAlreadyExistsException("service already exists"); + serverError = new ServerErrorException("Error occured in server"); + downStrmError = new DownstreamException("error occured in downstream"); + notFoundError = new DeploymentNotFoundException("item not found"); + } + + public void getExpectedDeployments() + throws JsonParseException, JsonMappingException, IOException { + + deplItem = new Service("dcae_dtiapi_1902", null, "1552335532348", "1552335532348", null, + "dummyVnfId", null, "dummyVnfType", "dummyLocation", "dcae_dtiapi_1902", null); + Collection<Service> items = new ArrayList<Service>(); + items.add(deplItem); + + String pageLinks = + "{\"previousLink\":null,\"nextLink\":{\"rel\":\"next\",\"href\":\"https://invt.com:30123/dcae-services/?offset=25\"}}"; + ServiceList.PaginationLinks paginationLinks = + objectMapper.readValue(pageLinks, ServiceList.PaginationLinks.class); + int totalCount = 1; + deplList = new ServiceList(items, totalCount, paginationLinks); + + } + + public void getExpectedBueprints() + throws JsonParseException, JsonMappingException, IOException { + bpItem = new ServiceType.Builder("xyz1731", "xyz1731-helm-1906", 1906, + "tosca_definitions_version: cloudify_dsl_1_3", "", "app1", "comp1").build(); + + Collection<ServiceType> items = new ArrayList<ServiceType>(); + items.add(bpItem); + + String pageLinks2 = + "{\"previousLink\":null,\"nextLink\":{\"rel\":\"next\",\"href\":\"https://invt.com:30123/dcae-services/?offset=25\"}}"; + ServiceTypeList.PaginationLinks paginationLinks = + objectMapper.readValue(pageLinks2, ServiceTypeList.PaginationLinks.class); + int totalCount = 1; + bpList = new ServiceTypeList(items, totalCount, paginationLinks); + + bpItem2 = new ServiceType("xyz1731", "xyz1731-helm-1907", 1906, + "tosca_definitions_version: cloudify_dsl_1_3\\r\\nimports:\\r\\n - http://www.getcloudify.org/spec/cloudify/4.2/types.yaml\\r\\n", + "app1", "comp1", null, null, null, null, null, null, "typeId", null, "created", null, + true); + + Collection<ServiceType> items2 = new ArrayList<ServiceType>(); + items2.add(bpItem2); + + bpList2 = new ServiceTypeList(items2, totalCount, paginationLinks); + } + + public void createBpUploadItem() { + bpUploadItem = ServiceTypeRequest.from(bpItem); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public final void testInsertComponent() throws Exception { + EcdComponent component1 = new EcdComponent(); + + component1.setCname("comp1"); + component1.setCompId(100L); + component1.setDname("COMP1"); + + doNothing().when(controllerEndpointService).insertComponent(component1); + + String actualResult = subject.insertComponent(mockedRequest, component1); + assertTrue(actualResult.contains("Inserted")); + } + + @Test + public final void testGetComponents() throws Exception { + EcdComponent component1 = new EcdComponent(); + EcdComponent component2 = new EcdComponent(); + + component1.setCname("comp1"); + component1.setCompId(100L); + component1.setDname("COMP1"); + + component2.setCname("comp2"); + component2.setCompId(200L); + component2.setDname("COMP2"); + + List<EcdComponent> compsList = new ArrayList<EcdComponent>(); + compsList.add(component1); + compsList.add(component2); + + when(controllerEndpointService.getComponents()).thenReturn(compsList); + + String actualResult = subject.getComponents(mockedRequest); + assertTrue(actualResult.contains("comp1")); + } + + @Test + public final void testGetTenants() throws Exception { + String tenantsList = + "{\"items\": [{\"id\": 1, \"name\": \"default_tenant\", \"dName\": \"default_tenant\" }, " + + "{\"id\": 2, \"name\": \"dyh1b1902\", \"dName\": \"dyh1b1902\"}], " + + "\"metadata\": {\"pagination\": {\"total\": 2, \"offset\": 0, \"size\": 0}}}"; + CloudifyTenantList sampleData = null; + try { + sampleData = objectMapper.readValue(tenantsList, CloudifyTenantList.class); + } catch (Exception e) { + } + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + + Mockito.when(cfyClient.getTenants()).thenReturn(sampleData); + + String tenantStr = subject.getTenants(mockedRequest); + assertTrue(tenantStr.contains("dyh1b")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetTenantStatusForService() throws Exception { + String[] deplIds = {"id1", "id2"}; + + CloudifyDeployedTenant cldDeplTenant = new CloudifyDeployedTenant("id1", "bp1", "tenant1"); + + List<CloudifyDeployedTenant> cldDeplTenantList = new ArrayList<CloudifyDeployedTenant>(); + + cldDeplTenantList.add(cldDeplTenant); + + CloudifyDeployedTenantList cldDeployedTenantList = + new CloudifyDeployedTenantList(cldDeplTenantList, null); + + CloudifyTenant cldTenant = new CloudifyTenant("tenant1", "tenant1", "tenant_id1"); + + List<CloudifyTenant> cldfyTenantList = new ArrayList<CloudifyTenant>(); + cldfyTenantList.add(cldTenant); + + CloudifyTenantList cloudifyTenantList = new CloudifyTenantList(cldfyTenantList, null); + + CloudifyExecution cldExecution = + new CloudifyExecution("successful", "created_at", "install", false, "bp1", "id1", + "tenant1", "error", "execution_id1", null, false, false); + + List<CloudifyExecution> cldExecutionList = new ArrayList<CloudifyExecution>(); + + cldExecutionList.add(cldExecution); + + CloudifyExecutionList cloudifyExecutionList = + new CloudifyExecutionList(cldExecutionList, null); + + when(cfyClient.getTenants()).thenReturn(cloudifyTenantList); + + when(cfyClient.getTenantInfoFromDeploy(Mockito.any())).thenReturn(cldDeployedTenantList); + + when(cfyClient.getExecutionsSummary(Mockito.any(), Mockito.any())) + .thenReturn(cloudifyExecutionList).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.getTenantStatusForService(mockedRequest, deplIds); + assertTrue(actualResult.contains("successful")); + + actualResult = subject.getTenantStatusForService(mockedRequest, deplIds); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getTenantStatusForService(mockedRequest, deplIds); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testCreateBlueprint() throws Exception { + ServiceTypeUploadRequest bpUploadReq = ServiceTypeUploadRequest.from(bpItem); + + when(inventoryClient.addServiceType(Matchers.<ServiceTypeRequest>any())) + .thenThrow(BlueprintParseException.class).thenThrow(httpException) + .thenThrow(Exception.class).thenReturn(bpItem); + + String actual1 = subject.createBlueprint(mockedRequest, bpUploadReq); + assertTrue(actual1.contains("error")); + + String actual2 = subject.createBlueprint(mockedRequest, bpUploadReq); + assertTrue(actual2.contains("error")); + + String actual3 = subject.createBlueprint(mockedRequest, bpUploadReq); + assertTrue(actual3.contains("error")); + + String actual = subject.createBlueprint(mockedRequest, bpUploadReq); + assertTrue(actual.contains("app1")); + + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetBlueprintsByPage() { + MockHttpServletRequestWrapper mockedRequest1 = getMockedRequest(); + mockedRequest1.addParameter("_include", "typeName,typeId,typeVersion"); + mockedRequest1.addParameter("name", "xyz"); + + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream1).thenThrow(Exception.class).thenThrow(httpException); + + String result = subject.getBlueprintsByPage(mockedRequest1); + assertTrue(result.contains("xyz")); + + result = subject.getBlueprintsByPage(mockedRequest1); + assertTrue(result.contains("error")); + + result = subject.getBlueprintsByPage(mockedRequest1); + assertTrue(result.contains("error")); + + } + + @SuppressWarnings("unchecked") + @Test + public final void testQueryBlueprintFilter() { + MockHttpServletRequestWrapper mockedRequest1 = getMockedRequest(); + mockedRequest1.addParameter("_include", "typeName,typeId,typeVersion"); + mockedRequest1.addParameter("name", "xyz"); + + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream1).thenThrow(Exception.class).thenThrow(httpException); + + String result = subject.queryBlueprintFilter(mockedRequest1); + assertTrue(result.contains("xyz")); + + result = subject.queryBlueprintFilter(mockedRequest1); + assertTrue(result.contains("error")); + + result = subject.queryBlueprintFilter(mockedRequest1); + assertTrue(result.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetDeploymentsByPage() { + CloudifyDeployedTenant cldDeplTenant = + new CloudifyDeployedTenant("dcae_dtiapi_1902", "dcae_dtiapi_1902", "tenant1"); + + List<CloudifyDeployedTenant> cldDeplTenantList = new ArrayList<CloudifyDeployedTenant>(); + + cldDeplTenantList.add(cldDeplTenant); + + CloudifyDeployedTenantList cldDeployedTenantList = + new CloudifyDeployedTenantList(cldDeplTenantList, null); + + CloudifyTenant cldTenant = new CloudifyTenant("tenant1", "tenant1", "tenant_id1"); + + List<CloudifyTenant> cldfyTenantList = new ArrayList<CloudifyTenant>(); + cldfyTenantList.add(cldTenant); + + CloudifyTenantList cloudifyTenantList = new CloudifyTenantList(cldfyTenantList, null); + + MockHttpServletRequestWrapper mockedRequest1 = getMockedRequest(); + mockedRequest1.addParameter("_include", "id"); + mockedRequest1.addParameter("searchBy", "dti"); + + Collection<Service> items = deplList.items; + + when(cfyClient.getTenants()).thenReturn(cloudifyTenantList); + + when(cfyClient.getTenantInfoFromDeploy(Mockito.any())).thenReturn(cldDeployedTenantList) + .thenThrow(Exception.class).thenThrow(httpException).thenReturn(cldDeployedTenantList) + .thenReturn(cldDeployedTenantList); + + Stream<Service> sampleStream1 = items.stream(); + Stream<Service> sampleStream2 = items.stream(); + Stream<Service> sampleStream3 = items.stream(); + + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream1) + .thenReturn(sampleStream2).thenReturn(sampleStream3).thenThrow(Exception.class) + .thenThrow(httpException); + + String result = subject.getDeploymentsByPage("dcae_dtiapi_1902", mockedRequest1); + assertTrue(result.contains("dti")); + + result = subject.getDeploymentsByPage("dcae_dtiapi_1902", mockedRequest1); + assertTrue(result.contains("dti")); + + result = subject.getDeploymentsByPage("dcae_dtiapi_1902", mockedRequest1); + assertTrue(result.contains("dti")); + + result = subject.getDeploymentsByPage("dcae_dtiapi_1902", mockedRequest1); + assertTrue(result.contains("error")); + + result = subject.getDeploymentsByPage("dcae_dtiapi_1902", mockedRequest1); + assertTrue(result.contains("error")); + + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetAllDeploymentsByPage() { + CloudifyDeployedTenant cldDeplTenant = + new CloudifyDeployedTenant("dcae_dtiapi_1902", "dcae_dtiapi_1902", "tenant1"); + + List<CloudifyDeployedTenant> cldDeplTenantList = new ArrayList<CloudifyDeployedTenant>(); + + cldDeplTenantList.add(cldDeplTenant); + + CloudifyDeployedTenantList cldDeployedTenantList = + new CloudifyDeployedTenantList(cldDeplTenantList, null); + + CloudifyTenant cldTenant = new CloudifyTenant("tenant1", "tenant1", "tenant_id1"); + + List<CloudifyTenant> cldfyTenantList = new ArrayList<CloudifyTenant>(); + cldfyTenantList.add(cldTenant); + + CloudifyTenantList cloudifyTenantList = new CloudifyTenantList(cldfyTenantList, null); + + MockHttpServletRequestWrapper mockedRequest1 = getMockedRequest(); + mockedRequest1.addParameter("_include", "id"); + mockedRequest1.addParameter("searchBy", "dti"); + + Collection<Service> items = deplList.items; + + when(cfyClient.getTenants()).thenReturn(cloudifyTenantList); + + when(cfyClient.getTenantInfoFromDeploy(Mockito.any())).thenReturn(cldDeployedTenantList) + .thenThrow(Exception.class).thenThrow(httpException).thenReturn(cldDeployedTenantList) + .thenReturn(cldDeployedTenantList); + + Stream<Service> sampleStream1 = items.stream(); + Stream<Service> sampleStream2 = items.stream(); + Stream<Service> sampleStream3 = items.stream(); + + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream1) + .thenReturn(sampleStream2).thenReturn(sampleStream3).thenThrow(Exception.class) + .thenThrow(httpException); + + String result = subject.getAllDeploymentsByPage(mockedRequest1); + assertTrue(result.contains("dti")); + + result = subject.getAllDeploymentsByPage(mockedRequest1); + assertTrue(result.contains("dti")); + + result = subject.getAllDeploymentsByPage(mockedRequest1); + assertTrue(result.contains("dti")); + + result = subject.getAllDeploymentsByPage(mockedRequest1); + assertTrue(result.contains("error")); + + result = subject.getAllDeploymentsByPage(mockedRequest1); + assertTrue(result.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetDeploymentRevisions() throws Exception { + CloudifyNodeInstance cfyNodeInstance = new CloudifyNodeInstance("id1", null); + + List<CloudifyNodeInstance> cfyNodeInstanceItems = new ArrayList<CloudifyNodeInstance>(); + cfyNodeInstanceItems.add(cfyNodeInstance); + + CloudifyNodeInstanceList cfyNodeInstList = + new CloudifyNodeInstanceList(cfyNodeInstanceItems, null); + + when(cfyClient.getNodeInstanceVersion(Mockito.any(), Mockito.any())) + .thenReturn(cfyNodeInstList).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = + subject.getDeploymentRevisions("deploymentId", "tenant", mockedRequest); + assertTrue(actualResult.contains("id1")); + + actualResult = subject.getDeploymentRevisions("deploymentId", "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + + actualResult = subject.getDeploymentRevisions("deploymentId", "tenant", mockedRequest); + assertTrue(actualResult.contains("error")); + } + + @Test + public final void testGetDeploymentInputs() throws Exception { + + Map<String, Object> inputHash = new HashMap<String, Object>(); + inputHash.put("key1", "value1"); + + CloudifyDeployment cldDeployment = + new CloudifyDeployment("description", "blueprint_id", "created_at", "updated_at", "id", + inputHash, null, null, null, null, null, null, "tenant"); + + List<CloudifyDeployment> cfyDeployItems = new ArrayList<CloudifyDeployment>(); + cfyDeployItems.add(cldDeployment); + + CloudifyDeploymentList.Metadata.Pagination pageObj = + new CloudifyDeploymentList.Metadata.Pagination(1, 0, 1); + CloudifyDeploymentList.Metadata metadata = new CloudifyDeploymentList.Metadata(pageObj); + + CloudifyDeploymentList cldDeployList = new CloudifyDeploymentList(cfyDeployItems, metadata); + + when(cfyClient.getDeploymentInputs(Matchers.any(), Matchers.any())) + .thenReturn(cldDeployList); + + String actualResult = subject.getDeploymentInputs("deploymentId", "tenant", mockedRequest); + assertTrue(actualResult.contains("blueprint_id")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testModifyDeployment() throws Exception { + CloudifyExecution cfyExecObj = new CloudifyExecution("successful", "created_at", "install", + false, "bp1", "id1", "tenant1", "error", "execution_id1", null, false, false); + + Map<String, Object> params = new HashMap<String, Object>(); + params.put("tenant", "tenant1"); + params.put("workflow", "upgrade"); + + CloudifyExecutionRequest cfyExecReq = new CloudifyExecutionRequest("deployment_id", + "upgrade", false, false, "tenant1", params); + + CloudifyNodeInstanceId cfyNodeInst = new CloudifyNodeInstanceId("node_instance_id1"); + + List<CloudifyNodeInstanceId> cfyNodeInstItems = new ArrayList<CloudifyNodeInstanceId>(); + + cfyNodeInstItems.add(cfyNodeInst); + + CloudifyNodeInstanceIdList cfyNodeInstList = + new CloudifyNodeInstanceIdList(cfyNodeInstItems, null); + + when(cfyClient.getNodeInstanceId(Mockito.any(), Mockito.any())).thenReturn(cfyNodeInstList); + + when(cfyClient.startExecution(Matchers.<CloudifyExecutionRequest>any())) + .thenReturn(cfyExecObj).thenThrow(Exception.class).thenThrow(httpException); + + String inputParamStr = "{\"tenant\": \"tenant1\", \"workflow\":\"upgrade\"}"; + + InputStream is = new ByteArrayInputStream(inputParamStr.getBytes()); + + String actualResult = subject.modifyDeployment("depId", mockedRequest, is); + assertTrue(actualResult.contains("execution_id1")); + + actualResult = subject.modifyDeployment("depId", mockedRequest, is); + assertTrue(actualResult.contains("error")); + + actualResult = subject.modifyDeployment("depId", mockedRequest, is); + assertTrue(actualResult.contains("error")); + + } + + @Test + public final void testGetServicesForType() throws Exception { + ServiceRef expectedSrvc = new ServiceRef("dcae_dtiapi_1902", "432423", "433434"); + Collection<ServiceRef> expectedSrvcIds = new ArrayList<ServiceRef>(); + expectedSrvcIds.add(expectedSrvc); + ServiceRefList expectedSrvcRefList = new ServiceRefList(expectedSrvcIds, 1); + + when(inventoryClient.getServicesForType(Matchers.<ServiceQueryParams>any())) + .thenReturn(expectedSrvcRefList); + String actual = subject.getServicesForType(mockedRequest, "typeId1"); + assertTrue(actual.contains("typeId1")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testCreateDeployment() throws Exception { + DeploymentInput deployInput1 = new DeploymentInput("component1", "tag1", + "xyz1731-helm-1906", 1906, "blueprintId", null, "tenant1"); + + DeploymentInput deployInput2 = new DeploymentInput("component1", "tag1", + "xyz1731-helm-1906", 1906, null, null, "tenant1"); + + DeploymentResponseLinks expectLink = new DeploymentResponseLinks("self", "status"); + DeploymentResponse expectResp = new DeploymentResponse("req1", expectLink); + + Collection<ServiceType> items = bpList2.items; + Stream<ServiceType> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream1); + + String actualResp0 = subject.createDeployment(mockedRequest, deployInput2); + assertTrue(actualResp0.contains("error")); + + StringBuffer expectedStrBuff = new StringBuffer(); + expectedStrBuff.append("http://oom.s2.com"); + when(mockedRequest.getRequestURL()).thenReturn(expectedStrBuff); + + when(deploymentHandlerClient.putDeployment(Matchers.anyString(), Matchers.anyString(), + Matchers.<DeploymentRequest>any())).thenReturn(expectResp).thenThrow(badReqError) + .thenThrow(srvcExistError).thenThrow(serverError).thenThrow(downStrmError) + .thenThrow(Exception.class); + + String actualResp = subject.createDeployment(mockedRequest, deployInput1); + assertTrue(actualResp.contains("component1")); + + actualResp = subject.createDeployment(mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.createDeployment(mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.createDeployment(mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.createDeployment(mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.createDeployment(mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + } + + @SuppressWarnings("unchecked") + @Test + public final void testUpdateDeployment() throws Exception { + + DeploymentInput deployInput1 = new DeploymentInput("component1", "tag1", + "xyz1731-helm-1906", 1906, "blueprintId", null, "tenant1"); + + DeploymentResponseLinks expectLink = new DeploymentResponseLinks("self", "status"); + DeploymentResponse expectResp = new DeploymentResponse("req1", expectLink); + + Collection<ServiceType> items = bpList2.items; + Stream<ServiceType> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream1); + + when(deploymentHandlerClient.updateDeployment(Matchers.anyString(), Matchers.anyString(), + Matchers.<DeploymentRequest>any())).thenReturn(expectResp).thenThrow(badReqError) + .thenThrow(srvcExistError).thenThrow(serverError).thenThrow(downStrmError) + .thenThrow(Exception.class); + + String actualResp = subject.updateDeployment("id1", mockedRequest, deployInput1); + assertTrue(actualResp.contains("req1")); + + actualResp = subject.updateDeployment("id1", mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.updateDeployment("id1", mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.updateDeployment("id1", mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.updateDeployment("id1", mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + + actualResp = subject.updateDeployment("id1", mockedRequest, deployInput1); + assertTrue(actualResp.contains("error")); + } + + @Test + public final void testGetExecutionByDeploymentId() throws Exception { + + CloudifyExecution cldExecution = + new CloudifyExecution("successful", "created_at", "install", false, "bp1", "id1", + "tenant1", "error", "execution_id1", null, false, false); + + List<CloudifyExecution> cldExecutionList = new ArrayList<CloudifyExecution>(); + + cldExecutionList.add(cldExecution); + + CloudifyExecutionList cloudifyExecutionList = + new CloudifyExecutionList(cldExecutionList, null); + + when(cfyClient.getExecutionsSummary(Mockito.any(), Mockito.any())) + .thenReturn(cloudifyExecutionList); + + String actualResult = + subject.getExecutionByDeploymentId("dep_id", "tenant1", mockedRequest); + assertTrue(actualResult.contains("execution_id1")); + } + + @Test + public final void testDeleteBlueprint() throws Exception { + String expected = "{\"202\": \"OK\"}"; + doNothing().doThrow(serviceTypeException).doThrow(Exception.class).when(inventoryClient) + .deleteServiceType(Matchers.anyString()); + + String actual = subject.deleteBlueprint("srvcId", mockedRequest, mockedResponse); + assertEquals(expected, actual); + + actual = subject.deleteBlueprint("srvcId", mockedRequest, mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteBlueprint("srvcId", mockedRequest, mockedResponse); + assertTrue(actual.contains("error")); + } + + @Test + public final void testDeleteDeployment() throws Exception { + doNothing().doThrow(badReqError).doThrow(serverError).doThrow(downStrmError) + .doThrow(notFoundError).doThrow(Exception.class).when(deploymentHandlerClient) + .deleteDeployment(Matchers.anyString(), Matchers.anyString()); + + StringBuffer expectedStrBuff = new StringBuffer(); + expectedStrBuff.append("http://oom.s2.com"); + when(mockedRequest.getRequestURL()).thenReturn(expectedStrBuff); + + String actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertFalse(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testCancelExecution() throws Exception { + List<String> tenants = new ArrayList<String>(); + tenants.add("tenant1"); + + HttpHeaders httpHeader = new HttpHeaders(); + httpHeader.put("tenant", tenants); + + CloudifyExecution cfyExecObj = new CloudifyExecution("successful", "created_at", "cancel", + false, "bp1", "id1", "tenant1", "error", "execution_id1", null, false, false); + + when(cfyClient.cancelExecution(Mockito.any(), Mockito.any(), Mockito.any())) + .thenReturn(cfyExecObj).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = + subject.cancelExecution(httpHeader, "id1", null, mockedRequest, mockedResponse); + assertTrue(actualResult.contains("execution_id1")); + + actualResult = + subject.cancelExecution(httpHeader, "id1", null, mockedRequest, mockedResponse); + assertTrue(actualResult.contains("error")); + + actualResult = + subject.cancelExecution(httpHeader, "id1", null, mockedRequest, mockedResponse); + assertTrue(actualResult.contains("error")); + } + +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/ConsulControllerTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/ConsulControllerTest.java new file mode 100644 index 0000000..3d71a2e --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/ConsulControllerTest.java @@ -0,0 +1,315 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.controller; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.ccsdk.dashboard.core.MockUser; +import org.onap.ccsdk.dashboard.core.MockitoTestSuite; +import org.onap.ccsdk.dashboard.model.ConsulDatacenter; +import org.onap.ccsdk.dashboard.model.ConsulHealthServiceRegistration; +import org.onap.ccsdk.dashboard.model.ConsulNodeInfo; +import org.onap.ccsdk.dashboard.model.ConsulServiceHealth; +import org.onap.ccsdk.dashboard.model.ConsulServiceInfo; +import org.onap.ccsdk.dashboard.model.RestResponseSuccess; +import org.onap.ccsdk.dashboard.rest.ConsulClient; +import org.onap.portalsdk.core.domain.User; +import org.onap.portalsdk.core.web.support.UserUtils; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpClientErrorException; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +public class ConsulControllerTest extends MockitoTestSuite { + + @Mock + ConsulClient consulClient; + + @InjectMocks + ConsulController subject = new ConsulController(); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + + MockUser mockUser = new MockUser(); + HttpClientErrorException httpException; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + mockedRequest = getMockedRequest(); + mockedResponse = getMockedResponse(); + httpException = new HttpClientErrorException(HttpStatus.BAD_REQUEST, "statusText"); + } + + @After + public void tearDown() throws Exception { + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetServiceHealthDetails() throws Exception { + ConsulServiceHealth consulSrvcHlth = new ConsulServiceHealth("cjlvmcnsl00", + "service:pgaas1_Service_ID", "Service 'pgaasServer1' check", "passing", + "This is a pgaas1_Service_ID health check", + "HTTP GET http://srvc.com:8000/healthcheck/status: 200 OK Output: { \"output\": \"Thu Apr 20 19:53:01 UTC 2017|INFO|masters=1 pgaas1.com|secondaries=0 |maintenance= |down=1 pgaas2.com| \" }\n", + "pgaas1_Service_ID", "pgaasServer1", 190199, 199395); + + List<ConsulServiceHealth> expectedCnslSrvcHlth = new ArrayList<ConsulServiceHealth>(); + expectedCnslSrvcHlth.add(consulSrvcHlth); + + when(consulClient.getServiceHealth(Matchers.anyString(), Matchers.anyString())) + .thenReturn(expectedCnslSrvcHlth).thenThrow(Exception.class); + + String actualResult = subject.getServiceHealthDetails(mockedRequest, "dc1", "srvc1"); + assertTrue(actualResult.contains("pgaasServer1")); + + actualResult = subject.getServiceHealthDetails(mockedRequest, "dc1", "srvc1"); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetServicesHealth() throws Exception { + + List<String> srvcIps = new ArrayList<String>(); + srvcIps.add("135.91.224.136"); + srvcIps.add("135.91.224.138"); + ConsulServiceInfo consulSrvcInfo = new ConsulServiceInfo("pgaasServer1", srvcIps); + + List<ConsulServiceInfo> expectedCnslSrvcs = new ArrayList<ConsulServiceInfo>(); + expectedCnslSrvcs.add(consulSrvcInfo); + + ConsulServiceHealth consulSrvcHlth = new ConsulServiceHealth("cjlvmcnsl00", + "service:pgaas1_Service_ID", "Service 'pgaasServer1' check", "passing", + "This is a pgaas1_Service_ID health check", + "HTTP GET http://srvc.com:8000/healthcheck/status: 200 OK Output: { \"output\": \"Thu Apr 20 19:53:01 UTC 2017|INFO|masters=1 pgaas1.com|secondaries=0 |maintenance= |down=1 pgaas2.com| \" }\n", + "pgaas1_Service_ID", "pgaasServer1", 190199, 199395); + + List<ConsulServiceHealth> expectedCnslSrvcHlth = new ArrayList<ConsulServiceHealth>(); + expectedCnslSrvcHlth.add(consulSrvcHlth); + + when(consulClient.getServices(Matchers.anyString())).thenReturn(expectedCnslSrvcs); + when(consulClient.getServiceHealth(Matchers.anyString(), Matchers.anyString())) + .thenReturn(expectedCnslSrvcHlth).thenThrow(Exception.class); + + String actualResult = subject.getServicesHealth(mockedRequest, "dc1"); + assertTrue(actualResult.contains("pgaasServer1")); + + actualResult = subject.getServicesHealth(mockedRequest, "dc1"); + assertTrue(actualResult.contains("error")); + } + + @Test + public final void testGetNodesInfo() { + User user = mockUser.mockUser(); + user.setLoginId("tester"); + user.setId(1000L); + Mockito.when(UserUtils.getUserSession(mockedRequest)).thenReturn(user); + + ConsulNodeInfo cnslNode = new ConsulNodeInfo("a2788806-6e2e-423e-8ee7-6cad6f3d3de6", + "cjlvmcnsl00", "10.170.8.13", null, null, 6, 17980); + + List<ConsulNodeInfo> cnslNodeList = new ArrayList<ConsulNodeInfo>(); + cnslNodeList.add(cnslNode); + + when(consulClient.getNodes(Matchers.anyString())).thenReturn(cnslNodeList); + + String actualResult = subject.getNodesInfo(mockedRequest, "dc1"); + assertTrue(actualResult.contains("cjlvmcnsl00")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetNodeServicesHealth() throws Exception { + ConsulServiceHealth consulSrvcHlth = new ConsulServiceHealth("cjlvmcnsl00", + "service:pgaas1_Service_ID", "Service 'pgaasServer1' check", "passing", + "This is a pgaas1_Service_ID health check", + "HTTP GET http://srvc.com:8000/healthcheck/status: 200 OK Output: { \"output\": \"Thu Apr 20 19:53:01 UTC 2017|INFO|masters=1 pgaas1.com|secondaries=0 |maintenance= |down=1 pgaas2.com| \" }\n", + "pgaas1_Service_ID", "pgaasServer1", 190199, 199395); + + List<ConsulServiceHealth> expectedCnslSrvcHlth = new ArrayList<ConsulServiceHealth>(); + expectedCnslSrvcHlth.add(consulSrvcHlth); + + when(consulClient.getNodeServicesHealth(Matchers.anyString(), Matchers.anyString())) + .thenReturn(expectedCnslSrvcHlth).thenThrow(Exception.class); + + String actualResult = subject.getNodeServicesHealth(mockedRequest, "dc1", "node1"); + assertTrue(actualResult.contains("pgaasServer1")); + + actualResult = subject.getNodeServicesHealth(mockedRequest, "dc1", "node1"); + assertTrue(actualResult.contains("error")); + } + + @Test + public final void testGetDatacentersHealth() { + User user = mockUser.mockUser(); + user.setLoginId("tester"); + user.setId(1000L); + Mockito.when(UserUtils.getUserSession(mockedRequest)).thenReturn(user); + + ConsulDatacenter cnslDc = new ConsulDatacenter("dc1"); + + List<ConsulDatacenter> cnslDcList = new ArrayList<ConsulDatacenter>(); + cnslDcList.add(cnslDc); + + when(consulClient.getDatacenters()).thenReturn(cnslDcList); + + String actualResult = subject.getDatacentersHealth(mockedRequest); + assertTrue(actualResult.contains("dc1")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testRegisterService() throws Exception { + ConsulHealthServiceRegistration.EndpointCheck endPoint = + new ConsulHealthServiceRegistration.EndpointCheck("endpoint1", "interval1", + "description1", "name1"); + List<ConsulHealthServiceRegistration.EndpointCheck> endPointList = + new ArrayList<ConsulHealthServiceRegistration.EndpointCheck>(); + endPointList.add(endPoint); + + List<String> tagList = new ArrayList<String>(); + tagList.add("tag1"); + tagList.add("tag2"); + + ConsulHealthServiceRegistration.ConsulServiceRegistration servcReg = + new ConsulHealthServiceRegistration.ConsulServiceRegistration("id1", "name1", + "address1", "port1", tagList, endPointList); + List<ConsulHealthServiceRegistration.ConsulServiceRegistration> servcRegList = + new ArrayList<ConsulHealthServiceRegistration.ConsulServiceRegistration>(); + servcRegList.add(servcReg); + + ConsulHealthServiceRegistration chsrObj = new ConsulHealthServiceRegistration(servcRegList); + + RestResponseSuccess expectedResp = new RestResponseSuccess("Registration yielded code 0"); + String expectedResult = objectMapper.writeValueAsString(expectedResp); + + String expectedStr = "Registration yielded code 0"; + when(consulClient.registerService(Matchers.<ConsulHealthServiceRegistration>any())) + .thenReturn(expectedStr).thenThrow(Exception.class).thenThrow(httpException); + + String actualResult = subject.registerService(mockedRequest, chsrObj); + assertTrue(actualResult.equals(expectedResult)); + + actualResult = subject.registerService(mockedRequest, chsrObj); + assertTrue(actualResult.contains("error")); + + actualResult = subject.registerService(mockedRequest, chsrObj); + assertTrue(actualResult.contains("error")); + } + + @Test + public final void testRegisterService_SrvcError() throws Exception { + ConsulHealthServiceRegistration chsrObj = new ConsulHealthServiceRegistration(null); + + String actualResult = subject.registerService(mockedRequest, chsrObj); + assertTrue(actualResult.contains("error")); + } + + @Test + @Ignore + public final void testRegisterService_invalidSrvcError() throws Exception { + ConsulHealthServiceRegistration.EndpointCheck endPoint = + new ConsulHealthServiceRegistration.EndpointCheck("endpoint1", "interval1", + "description1", "name1"); + List<ConsulHealthServiceRegistration.EndpointCheck> endPointList = + new ArrayList<ConsulHealthServiceRegistration.EndpointCheck>(); + endPointList.add(endPoint); + + List<String> tagList = new ArrayList<String>(); + tagList.add("tag1"); + tagList.add("tag2"); + + ConsulHealthServiceRegistration.ConsulServiceRegistration servcReg = + new ConsulHealthServiceRegistration.ConsulServiceRegistration("id1", "name2", + "address2", "port1", tagList, endPointList); + List<ConsulHealthServiceRegistration.ConsulServiceRegistration> servcRegList = + new ArrayList<ConsulHealthServiceRegistration.ConsulServiceRegistration>(); + servcRegList.add(servcReg); + + ConsulHealthServiceRegistration chsrObj = new ConsulHealthServiceRegistration(servcRegList); + + String actualResult = subject.registerService(mockedRequest, chsrObj); + assertTrue(actualResult.contains("error")); + } + + @Test + public final void testRegisterService_invalidEndptError() throws Exception { + ConsulHealthServiceRegistration.EndpointCheck endPoint = + new ConsulHealthServiceRegistration.EndpointCheck("", "", "description1", "name1"); + List<ConsulHealthServiceRegistration.EndpointCheck> endPointList = + new ArrayList<ConsulHealthServiceRegistration.EndpointCheck>(); + endPointList.add(endPoint); + + List<String> tagList = new ArrayList<String>(); + tagList.add("tag1"); + tagList.add("tag2"); + + ConsulHealthServiceRegistration.ConsulServiceRegistration servcReg = + new ConsulHealthServiceRegistration.ConsulServiceRegistration("id1", "", "", "port1", + tagList, endPointList); + List<ConsulHealthServiceRegistration.ConsulServiceRegistration> servcRegList = + new ArrayList<ConsulHealthServiceRegistration.ConsulServiceRegistration>(); + servcRegList.add(servcReg); + + ConsulHealthServiceRegistration chsrObj = new ConsulHealthServiceRegistration(servcRegList); + + String actualResult = subject.registerService(mockedRequest, chsrObj); + assertTrue(actualResult.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testDeregisterService() throws Exception { + RestResponseSuccess expectedResp = new RestResponseSuccess("Deregistration yielded code 0"); + String expectedResult = objectMapper.writeValueAsString(expectedResp); + + when(consulClient.deregisterService(Mockito.any())).thenReturn(0).thenThrow(Exception.class) + .thenThrow(httpException); + + String actualResult = subject.deregisterService(mockedRequest, "srvc1"); + assertTrue(actualResult.equals(expectedResult)); + + actualResult = subject.deregisterService(mockedRequest, "srvc1"); + assertTrue(actualResult.contains("error")); + + actualResult = subject.deregisterService(mockedRequest, "srvc1"); + assertTrue(actualResult.contains("error")); + } + +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/DeploymentHandlerControllerTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/DeploymentHandlerControllerTest.java new file mode 100644 index 0000000..6517b68 --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/DeploymentHandlerControllerTest.java @@ -0,0 +1,184 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.controller; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.ccsdk.dashboard.core.MockitoTestSuite; +import org.onap.ccsdk.dashboard.exceptions.BadRequestException; +import org.onap.ccsdk.dashboard.exceptions.DeploymentNotFoundException; +import org.onap.ccsdk.dashboard.exceptions.DownstreamException; +import org.onap.ccsdk.dashboard.exceptions.ServerErrorException; +import org.onap.ccsdk.dashboard.exceptions.ServiceAlreadyExistsException; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentRequest; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentRequestObject; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentResponse; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentResponseLinks; +import org.onap.ccsdk.dashboard.rest.DeploymentHandlerClient; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +public class DeploymentHandlerControllerTest extends MockitoTestSuite { + + @Mock + DeploymentHandlerClient restClient; + + @InjectMocks + DeploymentHandlerController subject = new DeploymentHandlerController(); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + + BadRequestException badReqError; + ServiceAlreadyExistsException srvcExistError; + ServerErrorException serverError; + DownstreamException downStrmError; + JsonProcessingException jsonError; + DeploymentNotFoundException notFoundError; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + mockedRequest = getMockedRequest(); + mockedResponse = getMockedResponse(); + badReqError = new BadRequestException("bad request"); + srvcExistError = new ServiceAlreadyExistsException("service already exists"); + serverError = new ServerErrorException("Error occured in server"); + downStrmError = new DownstreamException("error occured in downstream"); + notFoundError = new DeploymentNotFoundException("item not found"); + } + + @After + public void tearDown() throws Exception { + } + + @SuppressWarnings("unchecked") + @Test + public final void testPutDeployment_create() throws Exception { + DeploymentRequestObject expectReq = + new DeploymentRequestObject("dep1", "dep1", null, "tenant1", "create"); + + DeploymentResponseLinks expectLink = new DeploymentResponseLinks("self", "status"); + DeploymentResponse expectResp = new DeploymentResponse("req1", expectLink); + + when(restClient.putDeployment(Matchers.anyString(), Matchers.anyString(), + Matchers.<DeploymentRequest>any())).thenReturn(expectResp).thenThrow(badReqError) + .thenThrow(srvcExistError).thenThrow(serverError).thenThrow(downStrmError) + .thenThrow(Exception.class); + + String actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("req1")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testPutDeployment_update() throws Exception { + DeploymentRequestObject expectReq = + new DeploymentRequestObject("dep1", "dep1", null, "tenant1", "update"); + + DeploymentResponseLinks expectLink = new DeploymentResponseLinks("self", "status"); + DeploymentResponse expectResp = new DeploymentResponse("req1", expectLink); + + when(restClient.updateDeployment(Matchers.anyString(), Matchers.anyString(), + Matchers.<DeploymentRequest>any())).thenReturn(expectResp).thenThrow(badReqError) + .thenThrow(srvcExistError).thenThrow(serverError).thenThrow(downStrmError) + .thenThrow(Exception.class); + + String actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("req1")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + + actualResp = subject.putDeployment(mockedRequest, expectReq); + assertTrue(actualResp.contains("error")); + } + + @Test + public final void testDeleteDeployment() throws Exception { + + doNothing().doThrow(badReqError).doThrow(serverError).doThrow(downStrmError) + .doThrow(notFoundError).doThrow(Exception.class).when(restClient) + .deleteDeployment(Matchers.anyString(), Matchers.anyString()); + + StringBuffer expectedStrBuff = new StringBuffer(); + expectedStrBuff.append("http://oom.s2.com"); + when(mockedRequest.getRequestURL()).thenReturn(expectedStrBuff); + + String actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertFalse(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteDeployment("dep1", mockedRequest, "tenant1", mockedResponse); + assertTrue(actual.contains("error")); + + } + +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/ECDSingleSignOnControllerTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/ECDSingleSignOnControllerTest.java new file mode 100644 index 0000000..771c085 --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/ECDSingleSignOnControllerTest.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.controller; + +import static org.junit.Assert.assertTrue; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.onap.ccsdk.dashboard.core.MockitoTestSuite; +import org.springframework.web.servlet.ModelAndView; + +public class ECDSingleSignOnControllerTest extends MockitoTestSuite { + + @InjectMocks + ECDSingleSignOnController subject = new ECDSingleSignOnController(); + + @Before + public void setUp() throws Exception { + + } + + @After + public void tearDown() throws Exception { + } + + @Test + public final void testSingleSignOnLogin() throws Exception { + + mockedRequest.addParameter("forwardURL", "ecd#"); + ModelAndView actualResult = subject.singleSignOnLogin(mockedRequest, mockedResponse); + assertTrue(actualResult.getViewName().contains("login")); + + } + +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/HealthCheckControllerTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/HealthCheckControllerTest.java new file mode 100644 index 0000000..4e44c39 --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/HealthCheckControllerTest.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.controller; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; +import org.onap.ccsdk.dashboard.core.MockitoTestSuite; +import org.onap.ccsdk.dashboard.model.HealthStatus; +import org.onap.portalsdk.core.util.SystemProperties; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({SystemProperties.class}) +public class HealthCheckControllerTest extends MockitoTestSuite { + + @InjectMocks + HealthCheckController subject = new HealthCheckController(); + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + mockedRequest = getMockedRequest(); + mockedResponse = getMockedResponse(); + PowerMockito.mockStatic(SystemProperties.class); + when(SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME)) + .thenReturn("oom-dash"); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public final void testHealthCheck() { + String messg = "oom-dash health check passed"; + HealthStatus actualResult = subject.healthCheck(mockedRequest, mockedResponse); + assertTrue(actualResult.statusCode == 200); + } + +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/InventoryControllerTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/InventoryControllerTest.java new file mode 100644 index 0000000..01858ed --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/controller/InventoryControllerTest.java @@ -0,0 +1,788 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.controller; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Optional; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Stream; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.ccsdk.dashboard.core.MockUser; +import org.onap.ccsdk.dashboard.core.MockitoTestSuite; +import org.onap.ccsdk.dashboard.exceptions.inventory.BlueprintParseException; +import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceNotFoundException; +import org.onap.ccsdk.dashboard.exceptions.inventory.ServiceTypeNotFoundException; +import org.onap.ccsdk.dashboard.model.inventory.Service; +import org.onap.ccsdk.dashboard.model.inventory.ServiceList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceQueryParams; +import org.onap.ccsdk.dashboard.model.inventory.ServiceRef; +import org.onap.ccsdk.dashboard.model.inventory.ServiceRefList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceType; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeQueryParams; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeRequest; +import org.onap.ccsdk.dashboard.rest.CloudifyClient; +import org.onap.ccsdk.dashboard.rest.InventoryClient; +import org.onap.ccsdk.dashboard.util.DashboardProperties; +import org.onap.portalsdk.core.domain.User; +import org.onap.portalsdk.core.web.support.AppUtils; +import org.onap.portalsdk.core.web.support.UserUtils; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestClientException; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({DashboardProperties.class}) +public class InventoryControllerTest extends MockitoTestSuite { + + @Mock + private CloudifyClient restClient; + + @Mock + private InventoryClient inventoryClient; + + @InjectMocks + private InventoryController subject = new InventoryController(); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + + private HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.BAD_GATEWAY); + + private ServiceNotFoundException serviceException = + new ServiceNotFoundException("Invalid deployment"); + + private ServiceTypeNotFoundException serviceTypeException = + new ServiceTypeNotFoundException("Invalid blueprint"); + + @Mock + UserUtils userUtils = new UserUtils(); + + @Mock + User epuser; + + @Mock + AppUtils appUtils = new AppUtils(); + + HttpServletRequest mockedRequest; + HttpServletResponse mockedResponse; + + MockUser mockUser = new MockUser(); + ServiceList deplList = null; + Service deplItem = null; + + ServiceType bpItem = null; + ServiceTypeList bpList = null; + + ServiceTypeRequest bpUploadItem = null; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + getExpectedDeployments(); + getExpectedBueprints(); + createBpUploadItem(); + mockedRequest = getMockedRequest(); + mockedResponse = getMockedResponse(); + } + + public void getExpectedDeployments() + throws JsonParseException, JsonMappingException, IOException { + + deplItem = new Service("dcae_dtiapi_1902", null, "1552335532348", "1552335532348", null, + "dummyVnfId", null, "dummyVnfType", "dummyLocation", "dcae_dtiapi_1902", null); + Collection<Service> items = new ArrayList<Service>(); + items.add(deplItem); + + String pageLinks = + "{\"previousLink\":null,\"nextLink\":{\"rel\":\"next\",\"href\":\"https://invt.com:30123/dcae-services/?offset=25\"}}"; + ServiceList.PaginationLinks paginationLinks = + objectMapper.readValue(pageLinks, ServiceList.PaginationLinks.class); + int totalCount = 1; + deplList = new ServiceList(items, totalCount, paginationLinks); + + } + + public void getExpectedBueprints() + throws JsonParseException, JsonMappingException, IOException { + bpItem = new ServiceType.Builder("xyz1731", "xyz1731-helm-1906", 1906, + "tosca_definitions_version: cloudify_dsl_1_3", "", "app1", "comp1").build(); + Collection<ServiceType> items = new ArrayList<ServiceType>(); + items.add(bpItem); + + String pageLinks2 = + "{\"previousLink\":null,\"nextLink\":{\"rel\":\"next\",\"href\":\"https://invt.com:30123/dcae-services/?offset=25\"}}"; + ServiceTypeList.PaginationLinks paginationLinks = + objectMapper.readValue(pageLinks2, ServiceTypeList.PaginationLinks.class); + int totalCount = 1; + bpList = new ServiceTypeList(items, totalCount, paginationLinks); + } + + public void createBpUploadItem() { + bpUploadItem = ServiceTypeRequest.from(bpItem); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public final void testGetServiceTypesByPage() { + User user = mockUser.mockUser(); + user.setLoginId("tester"); + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("searchBy", "xyz"); + mockedRequest.addParameter("sortBy", "owner"); + + Mockito.when(UserUtils.getUserSession(mockedRequest)).thenReturn(user); + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Collection<ServiceType> items = bpList.items; + + Stream<ServiceType> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream1); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + HttpSession session = mockedRequest.getSession(); + HashMap<String, Boolean> comp_deploy_tab = new HashMap<String, Boolean>(); + comp_deploy_tab.put("comp1", true); + + Set<String> userApps = new TreeSet<String>(); + userApps.add("comp1"); + + when(session.getAttribute("comp_access")).thenReturn(comp_deploy_tab); + when(session.getAttribute("role_level")).thenReturn("app"); + when(session.getAttribute("authComponents")).thenReturn(userApps); + + Stream<ServiceType> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream2); + String result2 = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result2.contains("xyz")); + } + + @Test + public final void testGetServiceTypesByPage_appl() { + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "application"); + + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream1); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<ServiceType> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream2); + String result2 = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result2.contains("xyz")); + } + + @Test + public final void testGetServiceTypesByPage_comp() { + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "component"); + + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream1); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<ServiceType> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream2); + String result2 = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result2.contains("xyz")); + } + + @Test + public final void testGetServiceTypesByPage_typeId() { + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "typeId"); + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream1); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<ServiceType> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream2); + String result2 = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result2.contains("xyz")); + } + + @Test + public final void testGetServiceTypesByPage_typeName() { + + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "typeName"); + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream1); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<ServiceType> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream2); + String result2 = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result2.contains("xyz")); + + } + + @Test + public final void testGetServiceTypesByPage_typeVer() { + + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "typeVersion"); + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream1); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<ServiceType> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream2); + String result2 = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result2.contains("xyz")); + + } + + @Test + public final void testGetServiceTypesByPage_created() { + + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "created"); + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream1 = items.stream(); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream1); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<ServiceType> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream2); + String result2 = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result2.contains("xyz")); + } + + @Test + public final void testGetServiceTypesByPage_Auth() { + + User user = mockUser.mockUser(); + user.setLoginId("tester"); + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("searchBy", "xyz"); + + Mockito.when(UserUtils.getUserSession(mockedRequest)).thenReturn(user); + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream = items.stream(); + + HttpSession session = mockedRequest.getSession(); + HashMap<String, Boolean> comp_deploy_tab = new HashMap<String, Boolean>(); + comp_deploy_tab.put("comp1", true); + + Set<String> userApps = new TreeSet<String>(); + userApps.add("comp1"); + + when(session.getAttribute("comp_access")).thenReturn(comp_deploy_tab); + when(session.getAttribute("role_level")).thenReturn("ops"); + when(session.getAttribute("authComponents")).thenReturn(userApps); + + Mockito.when(inventoryClient.getServiceTypes(Matchers.<ServiceTypeQueryParams>any())) + .thenReturn(sampleStream); + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testGetServiceTypesByPage_Exception() { + PowerMockito.mockStatic(DashboardProperties.class); + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream = items.stream(); + when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + when(inventoryClient.getServiceTypes()).thenThrow(RestClientException.class) + .thenThrow(httpException).thenReturn(sampleStream); + + String errResp = subject.getServiceTypesByPage(mockedRequest); + assertTrue(errResp.contains("error")); + + errResp = subject.getServiceTypesByPage(mockedRequest); + assertTrue(errResp.contains("error")); + + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + } + + @Test + public final void testGetServiceTypesByPage_Filter() { + User user = mockUser.mockUser(); + user.setLoginId("tester"); + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("searchBy", "xyz"); + PowerMockito.mockStatic(DashboardProperties.class); + Mockito.when(UserUtils.getUserSession(mockedRequest)).thenReturn(user); + + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> sampleStream = items.stream(); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + Mockito.when(inventoryClient.getServiceTypes()).thenReturn(sampleStream); + + String result = subject.getServiceTypesByPage(mockedRequest); + assertTrue(result.contains("xyz")); + } + + @Test + public final void testGetServicesByPage_auth() throws IOException { + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + MockHttpServletRequestWrapper mockedRequest1 = getMockedRequest(); + mockedRequest1.addParameter("searchBy", "dti"); + + Collection<Service> items = deplList.items; + + HttpSession session = mockedRequest1.getSession(); + HashMap<String, Boolean> comp_deploy_tab = new HashMap<String, Boolean>(); + comp_deploy_tab.put("dcae", true); + + Set<String> userApps = new TreeSet<String>(); + userApps.add("dcae"); + + when(session.getAttribute("comp_access")).thenReturn(comp_deploy_tab); + when(session.getAttribute("role_level")).thenReturn("app"); + when(session.getAttribute("authComponents")).thenReturn(userApps); + + Stream<Service> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream1); + + String result1 = subject.getServicesByPage(mockedRequest1); + assertTrue(result1.contains("dti")); + + } + + @Test + public final void testGetServicesByPage_auth_ops() throws IOException { + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + MockHttpServletRequestWrapper mockedRequest1 = getMockedRequest(); + mockedRequest1.addParameter("searchBy", "dti"); + + Collection<Service> items = deplList.items; + + HttpSession session = mockedRequest1.getSession(); + HashMap<String, Boolean> comp_deploy_tab = new HashMap<String, Boolean>(); + comp_deploy_tab.put("dcae", true); + + Set<String> userApps = new TreeSet<String>(); + userApps.add("dcae"); + + when(session.getAttribute("comp_access")).thenReturn(comp_deploy_tab); + when(session.getAttribute("role_level")).thenReturn("ops"); + when(session.getAttribute("authComponents")).thenReturn(userApps); + + Stream<Service> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream1); + + String result1 = subject.getServicesByPage(mockedRequest1); + assertTrue(result1.contains("dti")); + + } + + @Test + public final void testGetServicesByPage() throws IOException { + /* + * User user = mockUser.mockUser(); user.setLoginId("tester"); + */ + MockHttpServletRequestWrapper mockedRequest1 = getMockedRequest(); + mockedRequest1.addParameter("searchBy", "dti"); + mockedRequest1.addParameter("sortBy", "deploymentRef"); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Collection<Service> items = deplList.items; + + Stream<Service> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream1); + + String result1 = subject.getServicesByPage(mockedRequest1); + assertTrue(result1.contains("dti")); + } + + @Test + public final void testGetServicesByPage_sort_serviceId() throws IOException { + + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "serviceId"); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Collection<Service> items = deplList.items; + + Stream<Service> sampleStream1 = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream1); + + String result = subject.getServicesByPage(mockedRequest); + assertTrue(result.contains("dti")); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<Service> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream2); + + String result2 = subject.getServicesByPage(mockedRequest); + assertTrue(result2.contains("dti")); + } + + @Test + public final void testGetServicesByPage_sort_created() throws IOException { + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "created"); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Collection<Service> items = deplList.items; + + Stream<Service> sampleStream = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream); + + String result = subject.getServicesByPage(mockedRequest); + assertTrue(result.contains("dti")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<Service> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream2); + + String result2 = subject.getServicesByPage(mockedRequest); + assertTrue(result2.contains("dti")); + + } + + @Test + public final void testGetServicesByPage_sort_modified() throws IOException { + + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + mockedRequest.addParameter("sortBy", "modified"); + + PowerMockito.mockStatic(DashboardProperties.class); + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("os"); + + Collection<Service> items = deplList.items; + + Stream<Service> sampleStream = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream); + + String result = subject.getServicesByPage(mockedRequest); + assertTrue(result.contains("dti")); + + Mockito + .when(DashboardProperties.getPropertyDef(DashboardProperties.CONTROLLER_TYPE, "auth")) + .thenReturn("auth"); + + Stream<Service> sampleStream2 = items.stream(); + Mockito.when(inventoryClient.getServices()).thenReturn(sampleStream2); + + String result2 = subject.getServicesByPage(mockedRequest); + assertTrue(result2.contains("dti")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testUploadServiceTypeBlueprint() throws Exception { + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + String expected = "{\"201\": \"OK\"}"; + when(inventoryClient.addServiceType(Matchers.<ServiceTypeRequest>any())) + .thenThrow(BlueprintParseException.class).thenThrow(httpException) + .thenThrow(Exception.class).thenReturn(null); + + String actual1 = subject.uploadServiceTypeBlueprint(mockedRequest, bpUploadItem); + assertTrue(actual1.contains("error")); + + String actual2 = subject.uploadServiceTypeBlueprint(mockedRequest, bpUploadItem); + assertTrue(actual2.contains("error")); + + String actual3 = subject.uploadServiceTypeBlueprint(mockedRequest, bpUploadItem); + assertTrue(actual3.contains("error")); + + String actual = subject.uploadServiceTypeBlueprint(mockedRequest, bpUploadItem); + assertEquals(expected, actual); + + } + + @SuppressWarnings("unchecked") + @Test + public final void testUpdateServiceTypeBlueprint() throws Exception { + MockHttpServletRequestWrapper mockedRequest = getMockedRequest(); + String expected = "{\"201\": \"OK\"}"; + Mockito.when(inventoryClient.addServiceType(Matchers.<ServiceType>any())) + .thenThrow(BlueprintParseException.class).thenThrow(httpException) + .thenThrow(Exception.class).thenReturn(null); + + String actual1 = subject.updateServiceTypeBlueprint(mockedRequest, bpItem); + assertTrue(actual1.contains("error")); + + String actual2 = subject.updateServiceTypeBlueprint(mockedRequest, bpItem); + assertTrue(actual2.contains("error")); + + String actual3 = subject.updateServiceTypeBlueprint(mockedRequest, bpItem); + assertTrue(actual3.contains("error")); + + String actual = subject.updateServiceTypeBlueprint(mockedRequest, bpItem); + assertEquals(expected, actual); + } + + @Test + public final void testDeleteService() throws Exception { + String expected = "{\"202\": \"OK\"}"; + doNothing().doThrow(serviceException).doThrow(Exception.class).when(inventoryClient) + .deleteService(Matchers.anyString()); + + String actual = subject.deleteService("srvcId", mockedRequest, mockedResponse); + assertEquals(expected, actual); + + actual = subject.deleteService("srvcId", mockedRequest, mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteService("srvcId", mockedRequest, mockedResponse); + assertTrue(actual.contains("error")); + } + + @Test + public final void testDeleteServiceType() throws Exception { + String expected = "{\"202\": \"OK\"}"; + doNothing().doThrow(serviceTypeException).doThrow(Exception.class).when(inventoryClient) + .deleteServiceType(Matchers.anyString()); + + String actual = subject.deleteServiceType("srvcId", mockedRequest, mockedResponse); + assertEquals(expected, actual); + + actual = subject.deleteServiceType("srvcId", mockedRequest, mockedResponse); + assertTrue(actual.contains("error")); + + actual = subject.deleteServiceType("srvcId", mockedRequest, mockedResponse); + assertTrue(actual.contains("error")); + } + + @SuppressWarnings("unchecked") + @Test + public final void testViewServiceTypeBlueprintContentById() throws Exception { + Optional<ServiceType> expected = Optional.of(bpItem); + when(inventoryClient.getServiceType(Matchers.anyString())).thenReturn(expected) + .thenThrow(httpException).thenThrow(Exception.class); + + String result = subject.viewServiceTypeBlueprintContentById("typeId", mockedRequest); + assertTrue(result.contains("xyz")); + + result = subject.viewServiceTypeBlueprintContentById("typeId", mockedRequest); + assertTrue(result.contains("error")); + + result = subject.viewServiceTypeBlueprintContentById("typeId", mockedRequest); + assertTrue(result.contains("error")); + } + + @Test + public final void testGetServicesForType() throws Exception { + String[] testTypeIds = {"44234234"}; + ServiceRef expectedSrvc = new ServiceRef("dcae_dtiapi_1902", "432423", "433434"); + Collection<ServiceRef> expectedSrvcIds = new ArrayList<ServiceRef>(); + expectedSrvcIds.add(expectedSrvc); + ServiceRefList expectedSrvcRefList = new ServiceRefList(expectedSrvcIds, 1); + + when(inventoryClient.getServicesForType(Matchers.<ServiceQueryParams>any())) + .thenReturn(expectedSrvcRefList); + String actual = subject.getServicesForType(mockedRequest, testTypeIds); + assertTrue(actual.contains(testTypeIds[0])); + } + + /* + * @Test public final void testGetItemListForPageWrapper() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testGetServicesForType() { + * fail("Not yet implemented"); // TODO } + * + * + * + * @Test public final void testViewServiceTypeBlueprintContentById() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testDeleteServiceType() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testDeleteService() { fail("Not yet implemented"); // + * TODO } + * + * @Test public final void testUpdateServiceTypeBlueprint() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testUploadServiceTypeBlueprint() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testGetAppProperties() { fail("Not yet implemented"); + * // TODO } + * + * @Test public final void testGetOrSetControllerEndpointSelectionLong() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testGetOrSetControllerEndpointSelection() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testGetInventoryClientHttpServletRequest() { + * fail("Not yet implemented"); // TODO } + * + * @Test public final void testGetInventoryClientLong() { + * fail("Not yet implemented"); // TODO } + */ +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockUser.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockUser.java index 0a331e0..050e3eb 100644 --- a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockUser.java +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockUser.java @@ -2,23 +2,24 @@ * =============LICENSE_START========================================================= * * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. * ============LICENSE_END========================================================= * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ECOMP is a trademark and service mark of AT&T Intellectual Property. *******************************************************************************/ + package org.onap.ccsdk.dashboard.core; import java.util.Date; @@ -27,60 +28,60 @@ import org.onap.portalsdk.core.domain.User; public class MockUser { - public User mockUser() { + public User mockUser() { - User ePUser = new User(); - ePUser.setOrgId(null); - ePUser.setManagerId(null); - ePUser.setFirstName("test"); - ePUser.setLastName("test"); - ePUser.setMiddleInitial(null); - ePUser.setPhone(null); - ePUser.setFax(null); - ePUser.setCellular(null); - ePUser.setEmail(null); - ePUser.setAddressId(null); - ePUser.setAlertMethodCd(null); - ePUser.setHrid(null); - ePUser.setOrgUserId("guestT"); - ePUser.setOrgCode(null); - ePUser.setAddress1(null); - ePUser.setAddress2(null); - ePUser.setCity(null); - ePUser.setState(null); - ePUser.setZipCode(null); - ePUser.setCountry(null); - ePUser.setOrgManagerUserId(null); - ePUser.setLocationClli(null); - ePUser.setBusinessCountryCode(null); - ePUser.setBusinessCountryName(null); - ePUser.setBusinessUnit(null); - ePUser.setBusinessUnitName(null); - ePUser.setDepartment(null); - ePUser.setDepartmentName(null); - ePUser.setCompanyCode(null); - ePUser.setCompany(null); - ePUser.setZipCodeSuffix(null); - ePUser.setJobTitle(null); - ePUser.setCommandChain(null); - ePUser.setSiloStatus(null); - ePUser.setCostCenter(null); - ePUser.setFinancialLocCode(null); + User ePUser = new User(); + ePUser.setOrgId(null); + ePUser.setManagerId(null); + ePUser.setFirstName("test"); + ePUser.setLastName("test"); + ePUser.setMiddleInitial(null); + ePUser.setPhone(null); + ePUser.setFax(null); + ePUser.setCellular(null); + ePUser.setEmail(null); + ePUser.setAddressId(null); + ePUser.setAlertMethodCd(null); + ePUser.setHrid(null); + ePUser.setOrgUserId("guestT"); + ePUser.setOrgCode(null); + ePUser.setAddress1(null); + ePUser.setAddress2(null); + ePUser.setCity(null); + ePUser.setState(null); + ePUser.setZipCode(null); + ePUser.setCountry(null); + ePUser.setOrgManagerUserId(null); + ePUser.setLocationClli(null); + ePUser.setBusinessCountryCode(null); + ePUser.setBusinessCountryName(null); + ePUser.setBusinessUnit(null); + ePUser.setBusinessUnitName(null); + ePUser.setDepartment(null); + ePUser.setDepartmentName(null); + ePUser.setCompanyCode(null); + ePUser.setCompany(null); + ePUser.setZipCodeSuffix(null); + ePUser.setJobTitle(null); + ePUser.setCommandChain(null); + ePUser.setSiloStatus(null); + ePUser.setCostCenter(null); + ePUser.setFinancialLocCode(null); - ePUser.setLoginId(null); - ePUser.setLoginPwd(null); - Date date = new Date(); - ePUser.setLastLoginDate(date); - ePUser.setActive(true); - ePUser.setInternal(false); - ePUser.setSelectedProfileId(null); - ePUser.setTimeZoneId(null); - ePUser.setOnline(true); - ePUser.setChatId(null); - ePUser.setUserApps(null); - ePUser.setPseudoRoles(null); + ePUser.setLoginId(null); + ePUser.setLoginPwd(null); + Date date = new Date(); + ePUser.setLastLoginDate(date); + ePUser.setActive(true); + ePUser.setInternal(false); + ePUser.setSelectedProfileId(null); + ePUser.setTimeZoneId(null); + ePUser.setOnline(true); + ePUser.setChatId(null); + ePUser.setUserApps(null); + ePUser.setPseudoRoles(null); - ePUser.setId((long) -1); - return ePUser; - } + ePUser.setId((long) -1); + return ePUser; + } } diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockitoTestSuite.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockitoTestSuite.java index c251a5c..e211b35 100644 --- a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockitoTestSuite.java +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/core/MockitoTestSuite.java @@ -3,7 +3,7 @@ * ============LICENSE_START========================================== * ONAP Portal * =================================================================== - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * =================================================================== * * Unless otherwise specified, all software contained herein is licensed @@ -38,6 +38,10 @@ */ package org.onap.ccsdk.dashboard.core; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; @@ -51,45 +55,77 @@ import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class MockitoTestSuite { - - public MockHttpServletRequestWrapper mockedRequest = new MockHttpServletRequestWrapper( - Mockito.mock(HttpServletRequest.class)); - public HttpServletResponse mockedResponse = Mockito.mock(HttpServletResponse.class); - - public MockHttpServletRequestWrapper getMockedRequest() { - return mockedRequest; - } - - public HttpServletResponse getMockedResponse() { - return mockedResponse; - } - - public class MockHttpServletRequestWrapper extends HttpServletRequestWrapper { - - HttpSession session = Mockito.mock(HttpSession.class); - - public MockHttpServletRequestWrapper(HttpServletRequest request) { - super(request); - - } - - @Override - public HttpSession getSession() { - - return session; - } - - @Override - public HttpSession getSession(boolean create) { - - return session; - } - - } - - @Test - public void test() - { - assert(true); - } -}
\ No newline at end of file + public MockHttpServletRequestWrapper mockedRequest = + new MockHttpServletRequestWrapper(Mockito.mock(HttpServletRequest.class)); + public HttpServletResponse mockedResponse = Mockito.mock(HttpServletResponse.class); + + public MockHttpServletRequestWrapper getMockedRequest() { + return mockedRequest; + } + + public HttpServletResponse getMockedResponse() { + return mockedResponse; + } + + public class MockHttpServletRequestWrapper extends HttpServletRequestWrapper { + + HashMap<String, String> params = new HashMap<>(); + + HttpSession session = Mockito.mock(HttpSession.class); + + public MockHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + + } + + @Override + public HttpSession getSession() { + return session; + } + + @Override + public HttpSession getSession(boolean create) { + + return session; + } + + @Override + public String getParameter(final String name) { + // if we added one with the given name, return that one + if (params.get(name) != null) { + return (String) params.get(name); + } else { + // otherwise return what's in the original request + return super.getParameter(name); + } + } + + public void addParameter(String name, String value) { + params.put(name, value); + } + + @Override + public Map<String, String[]> getParameterMap() { + return super.getParameterMap(); + } + + @Override + public Enumeration<String> getParameterNames() { + // defaulf impl, should be overridden for an approprivate map of request params + // names + return super.getParameterNames(); + } + + @Override + public String[] getParameterValues(final String name) { + // defaulf impl, should be overridden for an approprivate map of request params + // values + return super.getParameterValues(name); + } + } + + @Test + public void test() { + assert (true); + } +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImplTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImplTest.java index 5f4f737..a5c5cf8 100644 --- a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImplTest.java +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/CloudifyRestClientImplTest.java @@ -2,38 +2,39 @@ * =============LICENSE_START========================================================= * * ================================================================================= - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. * ============LICENSE_END========================================================= * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ECOMP is a trademark and service mark of AT&T Intellectual Property. *******************************************************************************/ package org.onap.ccsdk.dashboard.rest; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -42,11 +43,31 @@ import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.onap.ccsdk.dashboard.model.CloudifyErrorCause; +import org.onap.ccsdk.dashboard.model.CloudifyBlueprint; +import org.onap.ccsdk.dashboard.model.CloudifyBlueprintList; +import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenant; +import org.onap.ccsdk.dashboard.model.CloudifyDeployedTenantList; +import org.onap.ccsdk.dashboard.model.CloudifyDeployment; +import org.onap.ccsdk.dashboard.model.CloudifyDeploymentList; +import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateRequest; +import org.onap.ccsdk.dashboard.model.CloudifyDeploymentUpdateResponse; import org.onap.ccsdk.dashboard.model.CloudifyEvent; import org.onap.ccsdk.dashboard.model.CloudifyEventList; import org.onap.ccsdk.dashboard.model.CloudifyEventList.Metadata; +import org.onap.ccsdk.dashboard.model.CloudifyExecution; +import org.onap.ccsdk.dashboard.model.CloudifyExecutionList; +import org.onap.ccsdk.dashboard.model.CloudifyExecutionRequest; +import org.onap.ccsdk.dashboard.model.CloudifyNodeId; +import org.onap.ccsdk.dashboard.model.CloudifyNodeIdList; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstance; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceId; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceIdList; +import org.onap.ccsdk.dashboard.model.CloudifyNodeInstanceList; import org.onap.ccsdk.dashboard.model.CloudifyTenantList; +import org.onap.ccsdk.dashboard.util.DashboardProperties; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; @@ -60,81 +81,396 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +@RunWith(PowerMockRunner.class) +@PrepareForTest({DashboardProperties.class}) public class CloudifyRestClientImplTest { - @Mock - RestTemplate mockRest; - - @InjectMocks - CloudifyRestClientImpl subject = - new CloudifyRestClientImpl("https://www.orcl.com/v3.1", "", ""); - - protected final ObjectMapper objectMapper = new ObjectMapper(); - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - objectMapper.registerModule(new Jdk8Module()); - } - - @Test - public final void getEventlogsTest() throws JsonParseException, JsonMappingException, IOException { - String executionId = "123a123a"; - String tenant = "thisTenant"; - List<CloudifyEvent> items = new ArrayList<CloudifyEvent>(); - CloudifyEvent aMockEvent = new CloudifyEvent("dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", "dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", - null, "workflow_succeeded", "5f8a2e05-e187-4925-90de-ece9160aa517", "warning", "ctx.7a10e191-f12b-4142-aa5d-6e5766ebb1d4", - "install workflow execution succeeded", "publish_l36bhr", "publish", "cloudify.interfaces.lifecycle.create", - "2019-02-28T23:17:49.228Z", "2019-02-28T23:17:49.700Z", "cloudify_event", "install"); - items.add(aMockEvent); - items.add( - new CloudifyEvent("dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", "dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", - null, "workflow_node_event", "5f8a2e05-e187-4925-90de-ece9160aa517", "warning", "ctx.7a10e191-f12b-4142-aa5d-6e5766ebb1d4", - "Starting node", "publish_l36bhr", "publish", "cloudify.interfaces.lifecycle.create", - "2019-02-28T23:17:48.391Z", "2019-02-28T23:17:48.516Z", "cloudify_event", "install")); - - String metaInfo = "metadata\": {\"pagination\": {\"total\": 2, \"offset\": 0, \"size\": 0}}"; - Metadata metadata = null; - //metadata = objectMapper.readValue(metaInfo, Metadata.class); - - CloudifyEventList expected = new CloudifyEventList(items, metadata); - - ResponseEntity<CloudifyEventList> response = new ResponseEntity<CloudifyEventList>(expected, HttpStatus.OK); - Mockito.when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), Matchers.<HttpEntity<?>>any(), - Matchers.<ParameterizedTypeReference<CloudifyEventList>>any())).thenReturn(response); - CloudifyEventList actual = subject.getEventlogs(executionId, tenant); - - assertTrue(actual.items.size() == 2); - - } - @Test - public final void testGetTenants_GetData() { - // define the entity you want the exchange to return - String tenantsList = "{\"items\": [{\"id\": 1, \"dName\": null, \"name\": \"default_tenant\"}, {\"id\": 2, \"dName\": null, \"name\": \"dyh1b1902\"}], \"metadata\": {\"pagination\": {\"total\": 2, \"offset\": 0, \"size\": 0}}}"; - CloudifyTenantList sampleData = null; - try { - sampleData = objectMapper.readValue(tenantsList, CloudifyTenantList.class); - } catch (Exception e) { - } - - ResponseEntity<CloudifyTenantList> response = new ResponseEntity<CloudifyTenantList>(sampleData, HttpStatus.OK); - Mockito.when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), Matchers.<HttpEntity<?>>any(), - Matchers.<ParameterizedTypeReference<CloudifyTenantList>>any())).thenReturn(response); - - CloudifyTenantList res = subject.getTenants(); - assertNotNull(res); - assertThat(res.items.get(1).name, is("dyh1b1902")); - // Assert.assertEquals(myobjectA, res.get(0)); - } - - @Test(expected = RestClientException.class) - public final void testGetTenants_withException() { - // define the entity you want the exchange to return - Mockito.when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), Matchers.<HttpEntity<?>>any(), - Matchers.<ParameterizedTypeReference<CloudifyTenantList>>any())).thenThrow(RestClientException.class); - - subject.getTenants(); - - - } + @Mock + RestTemplate mockRest; + + @InjectMocks + CloudifyRestClientImpl subject = new CloudifyRestClientImpl(); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + PowerMockito.mockStatic(DashboardProperties.class); + when(DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_URL)).thenReturn("https://orcl.com"); + this.subject.init(); + } + + @Test + public final void getEventlogsTest() + throws JsonParseException, JsonMappingException, IOException { + String executionId = "123a123a"; + String tenant = "thisTenant"; + List<CloudifyEvent> items = new ArrayList<CloudifyEvent>(); + CloudifyEvent aMockEvent = new CloudifyEvent( + "dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", + "dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", null, "workflow_succeeded", + "5f8a2e05-e187-4925-90de-ece9160aa517", "warning", + "ctx.7a10e191-f12b-4142-aa5d-6e5766ebb1d4", "install workflow execution succeeded", + "publish_l36bhr", "publish", "cloudify.interfaces.lifecycle.create", + "2019-02-28T23:17:49.228Z", "2019-02-28T23:17:49.700Z", "cloudify_event", "install"); + items.add(aMockEvent); + items.add(new CloudifyEvent("dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", + "dcae_dtieventproc_idns-k8s-svc-blueprint_02_28_02", null, "workflow_node_event", + "5f8a2e05-e187-4925-90de-ece9160aa517", "warning", + "ctx.7a10e191-f12b-4142-aa5d-6e5766ebb1d4", "Starting node", "publish_l36bhr", + "publish", "cloudify.interfaces.lifecycle.create", "2019-02-28T23:17:48.391Z", + "2019-02-28T23:17:48.516Z", "cloudify_event", "install")); + + String metaInfo = + "metadata\": {\"pagination\": {\"total\": 2, \"offset\": 0, \"size\": 0}}"; + Metadata metadata = null; + + CloudifyEventList expected = new CloudifyEventList(items, metadata); + + ResponseEntity<CloudifyEventList> response = + new ResponseEntity<CloudifyEventList>(expected, HttpStatus.OK); + Mockito + .when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyEventList>>any())) + .thenReturn(response); + CloudifyEventList actual = subject.getEventlogs(executionId, tenant); + assertTrue(actual.items.size() == 2); + + } + + @Test + public final void testGetTenants_GetData() { + // define the entity you want the exchange to return + String tenantsList = + "{\"items\": [{\"id\": 1, \"dName\": null, \"name\": \"default_tenant\"}, {\"id\": 2, \"dName\": null, \"name\": \"dyh1b1902\"}], \"metadata\": {\"pagination\": {\"total\": 2, \"offset\": 0, \"size\": 0}}}"; + CloudifyTenantList sampleData = null; + try { + sampleData = objectMapper.readValue(tenantsList, CloudifyTenantList.class); + } catch (Exception e) { + } + + ResponseEntity<CloudifyTenantList> response = + new ResponseEntity<CloudifyTenantList>(sampleData, HttpStatus.OK); + Mockito + .when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyTenantList>>any())) + .thenReturn(response); + + CloudifyTenantList res = subject.getTenants(); + assertNotNull(res); + assertThat(res.items.get(1).name, is("dyh1b1902")); + } + + @SuppressWarnings("unchecked") + @Test(expected = RestClientException.class) + public final void testGetTenants_withException() { + // define the entity you want the exchange to return + Mockito + .when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyTenantList>>any())) + .thenThrow(RestClientException.class); + subject.getTenants(); + } + + @Test + public final void testGetNodeInstanceId() { + CloudifyNodeInstanceId cfyNodeInst = new CloudifyNodeInstanceId("node_instance_id1"); + List<CloudifyNodeInstanceId> cfyNodeInstItems = new ArrayList<CloudifyNodeInstanceId>(); + cfyNodeInstItems.add(cfyNodeInst); + CloudifyNodeInstanceIdList cfyNodeInstList = + new CloudifyNodeInstanceIdList(cfyNodeInstItems, null); + + ResponseEntity<CloudifyNodeInstanceIdList> response = + new ResponseEntity<CloudifyNodeInstanceIdList>(cfyNodeInstList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyNodeInstanceIdList>>any())) + .thenReturn(response); + + CloudifyNodeInstanceIdList actualResult = + subject.getNodeInstanceId("deploymentId", "nodeId", "tenant"); + assertTrue(actualResult.items.get(0).id.equals("node_instance_id1")); + } + + @Test + public final void testGetNodeInstanceVersion() { + CloudifyNodeInstance cfyNodeInstance = new CloudifyNodeInstance("id1", null); + + List<CloudifyNodeInstance> cfyNodeInstanceItems = new ArrayList<CloudifyNodeInstance>(); + cfyNodeInstanceItems.add(cfyNodeInstance); + + CloudifyNodeInstanceList cfyNodeInstList = + new CloudifyNodeInstanceList(cfyNodeInstanceItems, null); + + ResponseEntity<CloudifyNodeInstanceList> response = + new ResponseEntity<CloudifyNodeInstanceList>(cfyNodeInstList, HttpStatus.OK); + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyNodeInstanceList>>any())) + .thenReturn(response); + + CloudifyNodeInstanceList actualResult = + subject.getNodeInstanceVersion("deploymentId", "nodeId", "tenant"); + assertTrue(actualResult.items.get(0).id.equals("id1")); + } + + @Test + public final void testGetNodeInstanceVersion_blueprint() { + CloudifyNodeId cfyNodeId = new CloudifyNodeId("node_id"); + List<CloudifyNodeId> cfyNodeIdItems = new ArrayList<CloudifyNodeId>(); + cfyNodeIdItems.add(cfyNodeId); + CloudifyNodeIdList cfyNodeIdList = new CloudifyNodeIdList(cfyNodeIdItems, null); + + ResponseEntity<CloudifyNodeIdList> response1 = + new ResponseEntity<CloudifyNodeIdList>(cfyNodeIdList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("nodes"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyNodeIdList>>any())).thenReturn(response1); + + CloudifyNodeInstance cfyNodeInstance = new CloudifyNodeInstance("id1", null); + + List<CloudifyNodeInstance> cfyNodeInstanceItems = new ArrayList<CloudifyNodeInstance>(); + cfyNodeInstanceItems.add(cfyNodeInstance); + + CloudifyNodeInstanceList cfyNodeInstList = + new CloudifyNodeInstanceList(cfyNodeInstanceItems, null); + + ResponseEntity<CloudifyNodeInstanceList> response2 = + new ResponseEntity<CloudifyNodeInstanceList>(cfyNodeInstList, HttpStatus.OK); + when(mockRest.exchange(Matchers.contains("node-instances"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyNodeInstanceList>>any())) + .thenReturn(response2); + + CloudifyNodeInstanceList actualResult = + subject.getNodeInstanceVersion("blueprintId", "tenant"); + assertTrue(actualResult.items.get(0).id.equals("id1")); + } + + @Test + public final void testGetNodeInstanceId_blueprint() { + CloudifyNodeId cfyNodeId = new CloudifyNodeId("node_id"); + List<CloudifyNodeId> cfyNodeIdItems = new ArrayList<CloudifyNodeId>(); + cfyNodeIdItems.add(cfyNodeId); + CloudifyNodeIdList cfyNodeIdList = new CloudifyNodeIdList(cfyNodeIdItems, null); + + ResponseEntity<CloudifyNodeIdList> response1 = + new ResponseEntity<CloudifyNodeIdList>(cfyNodeIdList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("nodes"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyNodeIdList>>any())).thenReturn(response1); + + CloudifyNodeInstanceId cfyNodeInst = new CloudifyNodeInstanceId("node_instance_id1"); + List<CloudifyNodeInstanceId> cfyNodeInstItems = new ArrayList<CloudifyNodeInstanceId>(); + cfyNodeInstItems.add(cfyNodeInst); + CloudifyNodeInstanceIdList cfyNodeInstList = + new CloudifyNodeInstanceIdList(cfyNodeInstItems, null); + + ResponseEntity<CloudifyNodeInstanceIdList> response = + new ResponseEntity<CloudifyNodeInstanceIdList>(cfyNodeInstList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("node-instances"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyNodeInstanceIdList>>any())) + .thenReturn(response); + + CloudifyNodeInstanceIdList actualResult = subject.getNodeInstanceId("bpId", "tenant"); + assertTrue(actualResult.items.get(0).id.equals("node_instance_id1")); + } + + @Test + public final void testGetTenantInfoFromDeploy() { + + CloudifyDeployedTenant cldDeplTenant = new CloudifyDeployedTenant("id1", "bp1", "tenant1"); + List<CloudifyDeployedTenant> cldDeplTenantItems = new ArrayList<CloudifyDeployedTenant>(); + cldDeplTenantItems.add(cldDeplTenant); + CloudifyDeployedTenantList cldDeployedTenantList = + new CloudifyDeployedTenantList(cldDeplTenantItems, null); + + ResponseEntity<CloudifyDeployedTenantList> response = + new ResponseEntity<CloudifyDeployedTenantList>(cldDeployedTenantList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("deployments"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyDeployedTenantList>>any())) + .thenReturn(response); + + CloudifyDeployedTenantList actualResults = subject.getTenantInfoFromDeploy("tenant1"); + assertTrue(actualResults.items.get(0).blueprint_id.equals("bp1")); + } + + @Test + public void testGetExecutions() { + CloudifyExecution cldExecution = + new CloudifyExecution("successful", "created_at", "install", false, "bp1", "id1", + "tenant1", "error", "execution_id1", null, false, false); + + List<CloudifyExecution> cldExecutionList = new ArrayList<CloudifyExecution>(); + + cldExecutionList.add(cldExecution); + + CloudifyExecutionList cloudifyExecutionList = + new CloudifyExecutionList(cldExecutionList, null); + + ResponseEntity<CloudifyExecutionList> response = + new ResponseEntity<CloudifyExecutionList>(cloudifyExecutionList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("deployment_id"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyExecutionList>>any())) + .thenReturn(response); + + CloudifyExecutionList actualResult = subject.getExecutions("deploymentId1", "tenant1"); + assertTrue(actualResult.items.get(0).id.contains("id1")); + } + + @Test + public void testGetExecutionsSummary() { + CloudifyExecution cldExecution = + new CloudifyExecution("successful", "created_at", "install", false, "bp1", "id1", + "tenant1", "error", "execution_id1", null, false, false); + + List<CloudifyExecution> cldExecutionList = new ArrayList<CloudifyExecution>(); + + cldExecutionList.add(cldExecution); + + CloudifyExecutionList cloudifyExecutionList = + new CloudifyExecutionList(cldExecutionList, null); + + ResponseEntity<CloudifyExecutionList> response = + new ResponseEntity<CloudifyExecutionList>(cloudifyExecutionList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("include"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<CloudifyExecutionList>>any())) + .thenReturn(response); + + CloudifyExecutionList actualResult = + subject.getExecutionsSummary("deploymentId1", "tenant1"); + assertTrue(actualResult.items.get(0).id.contains("id1")); + } + + @Test + public void testStartExecution() { + CloudifyExecution cfyExecObj = new CloudifyExecution("successful", "created_at", "install", + false, "bp1", "id1", "tenant1", "error", "execution_id1", null, false, false); + + Map<String, Object> params = new HashMap<String, Object>(); + params.put("key1", "value1"); + + CloudifyExecutionRequest cfyExecReq = new CloudifyExecutionRequest("deployment_id", + "upgrade", false, false, "tenant1", params); + + when(mockRest.postForObject(Matchers.anyString(), Matchers.<HttpEntity<?>>any(), + Matchers.<Class<CloudifyExecution>>any())).thenReturn(cfyExecObj); + + CloudifyExecution actualResult = subject.startExecution(cfyExecReq); + assertTrue(actualResult.status.equals("successful")); + } + + @Test + public void testUpdateDeployment() { + CloudifyDeploymentUpdateRequest cfyDeployUpdateReq = + new CloudifyDeploymentUpdateRequest("deployment_id", "update", false, false, + "node_instance_id1", "4", "1000", "image", 2, "my_container"); + + CloudifyDeploymentUpdateResponse cfyDeployUpdateResp = new CloudifyDeploymentUpdateResponse( + "terminated", "created_at", "update", false, "blueprint_id", "deployment_id", "", "id1", + null, "tenant1", "junit", false, "resource_availability"); + + when(mockRest.postForObject(Matchers.anyString(), Matchers.<HttpEntity<?>>any(), + Matchers.<Class<CloudifyDeploymentUpdateResponse>>any())) + .thenReturn(cfyDeployUpdateResp); + + CloudifyDeploymentUpdateResponse actualResult = + subject.updateDeployment(cfyDeployUpdateReq); + assertTrue(actualResult.status.equals("terminated")); + } + + @Test + @Ignore + public void testCancelExecution() { + CloudifyExecution cfyExecObj = new CloudifyExecution("successful", "created_at", "install", + false, "bp1", "id1", "tenant1", "error", "execution_id1", null, false, false); + + Map<String, Object> params = new HashMap<String, Object>(); + params.put("key1", "value1"); + + ResponseEntity<CloudifyExecution> response = + new ResponseEntity<CloudifyExecution>(cfyExecObj, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("executions"), Matchers.eq(HttpMethod.POST), + Matchers.<HttpEntity<?>>any(), Matchers.<Class<CloudifyExecution>>any())) + .thenReturn(response); + + Map<String, String> parameters = new HashMap<String, String>(); + parameters.put("key1", "value1"); + + CloudifyExecution actualResult = + subject.cancelExecution("executionId", parameters, "tenant"); + assertTrue(actualResult.id.equals("execution_id1")); + } + + @Test + @Ignore + public void testGetBlueprint() { + CloudifyBlueprint cldBp = + new CloudifyBlueprint("file1", "description1", "343242", "3423423", "id1", null); + + List<CloudifyBlueprint> items = new ArrayList<CloudifyBlueprint>(); + items.add(cldBp); + + CloudifyBlueprintList.Metadata.Pagination pageObj = + new CloudifyBlueprintList.Metadata.Pagination(1, 0, 1); + + CloudifyBlueprintList.Metadata metadata = new CloudifyBlueprintList.Metadata(pageObj); + + CloudifyBlueprintList cldBpList = new CloudifyBlueprintList(items, metadata); + + ResponseEntity<CloudifyBlueprintList> response = + new ResponseEntity<CloudifyBlueprintList>(cldBpList, HttpStatus.OK); + + doReturn(response).when(mockRest).exchange(Matchers.anyString(), + Matchers.eq(HttpMethod.GET), Matchers.<HttpEntity<?>>any(), + Matchers.<Class<CloudifyBlueprintList>>any()); + + CloudifyBlueprintList actualResult = subject.getBlueprint("id1", "tenant1"); + assertTrue(actualResult.items.get(0).id.equals("id1")); + } + + @Test + @Ignore + public void testGetDeployments() { + + CloudifyDeployment cldDeployment = new CloudifyDeployment("description", "blueprint_id", + "created_at", "updated_at", "id", null, null, null, null, null, null, null, "tenant"); + + List<CloudifyDeployment> cfyDeployItems = new ArrayList<CloudifyDeployment>(); + cfyDeployItems.add(cldDeployment); + + CloudifyDeploymentList.Metadata.Pagination pageObj = + new CloudifyDeploymentList.Metadata.Pagination(1, 0, 1); + CloudifyDeploymentList.Metadata metadata = new CloudifyDeploymentList.Metadata(pageObj); + + CloudifyDeploymentList cldDeployList = new CloudifyDeploymentList(cfyDeployItems, metadata); + + ResponseEntity<CloudifyDeploymentList> response = + new ResponseEntity<CloudifyDeploymentList>(cldDeployList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.contains("deploy"), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), Matchers.<Class<CloudifyDeploymentList>>any())) + .thenReturn(response); + + CloudifyDeploymentList actualResult = subject.getDeployments(); + assertTrue(actualResult.items.get(0).id.equals("id")); + } } diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/ConsulRestClientImplTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/ConsulRestClientImplTest.java new file mode 100644 index 0000000..f90afa9 --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/ConsulRestClientImplTest.java @@ -0,0 +1,212 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.rest; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONObject; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.ccsdk.dashboard.model.ConsulDatacenter; +import org.onap.ccsdk.dashboard.model.ConsulNodeInfo; +import org.onap.ccsdk.dashboard.model.ConsulServiceHealth; +import org.onap.ccsdk.dashboard.model.ConsulServiceInfo; +import org.onap.ccsdk.dashboard.util.DashboardProperties; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({DashboardProperties.class}) +public class ConsulRestClientImplTest { + + @Mock + RestTemplate mockRest; + + @InjectMocks + ConsulRestClientImpl subject = new ConsulRestClientImpl(); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + HttpClientErrorException httpException; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + httpException = new HttpClientErrorException(HttpStatus.BAD_REQUEST, "statusText"); + PowerMockito.mockStatic(DashboardProperties.class); + when(DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_CONSUL_URL)).thenReturn("https://invt.com"); + this.subject.init(); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public final void testGetServiceHealth() { + ConsulServiceHealth consulSrvcHlth = new ConsulServiceHealth("cjlvmcnsl00", + "service:pgaas1_Service_ID", "Service 'pgaasServer1' check", "passing", + "This is a pgaas1_Service_ID health check", + "HTTP GET http://srvc.com:8000/healthcheck/status: 200 OK Output: { \"output\": \"Thu Apr 20 19:53:01 UTC 2017|INFO|masters=1 pgaas1.com|secondaries=0 |maintenance= |down=1 pgaas2.com| \" }\n", + "pgaas1_Service_ID", "pgaasServer1", 190199, 199395); + + List<ConsulServiceHealth> expectedCnslSrvcHlth = new ArrayList<ConsulServiceHealth>(); + expectedCnslSrvcHlth.add(consulSrvcHlth); + + ResponseEntity<List<ConsulServiceHealth>> response = + new ResponseEntity<List<ConsulServiceHealth>>(expectedCnslSrvcHlth, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<List<ConsulServiceHealth>>>any())) + .thenReturn(response); + + List<ConsulServiceHealth> actualCnslSrvcHlth = subject.getServiceHealth("dc1", "srvc1"); + assertTrue(actualCnslSrvcHlth.get(0).node.equals("cjlvmcnsl00")); + } + + @Test + @Ignore + public final void testGetServices() { + List<String> srvcIps = new ArrayList<String>(); + srvcIps.add("135.91.224.136"); + srvcIps.add("135.91.224.138"); + ConsulServiceInfo consulSrvcInfo = new ConsulServiceInfo("pgaasServer1", srvcIps); + + List<ConsulServiceInfo> expectedCnslSrvcs = new ArrayList<ConsulServiceInfo>(); + expectedCnslSrvcs.add(consulSrvcInfo); + + // ResponseEntity<Map<String, Object>> response = new ResponseEntity<Map<String, + // Object>>(consulSrvcInfo); + + subject.getServices("dc1"); + } + + @Test + public final void testGetNodes() { + ConsulNodeInfo cnslNode = new ConsulNodeInfo("a2788806-6e2e-423e-8ee7-6cad6f3d3de6", + "cjlvmcnsl00", "10.170.8.13", null, null, 6, 17980); + + List<ConsulNodeInfo> cnslNodeList = new ArrayList<ConsulNodeInfo>(); + cnslNodeList.add(cnslNode); + + ResponseEntity<List<ConsulNodeInfo>> response = + new ResponseEntity<List<ConsulNodeInfo>>(cnslNodeList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<List<ConsulNodeInfo>>>any())).thenReturn(response); + + List<ConsulNodeInfo> actualNodeList = subject.getNodes("dc1"); + assertTrue(actualNodeList.get(0).node.equals("cjlvmcnsl00")); + + } + + @Test + public final void testGetNodeServicesHealth() { + ConsulServiceHealth consulSrvcHlth = new ConsulServiceHealth("cjlvmcnsl00", + "service:pgaas1_Service_ID", "Service 'pgaasServer1' check", "passing", + "This is a pgaas1_Service_ID health check", + "HTTP GET http://srvc.com:8000/healthcheck/status: 200 OK Output: { \"output\": \"Thu Apr 20 19:53:01 UTC 2017|INFO|masters=1 pgaas1.com|secondaries=0 |maintenance= |down=1 pgaas2.com| \" }\n", + "pgaas1_Service_ID", "pgaasServer1", 190199, 199395); + + List<ConsulServiceHealth> expectedCnslSrvcHlth = new ArrayList<ConsulServiceHealth>(); + expectedCnslSrvcHlth.add(consulSrvcHlth); + + ResponseEntity<List<ConsulServiceHealth>> response = + new ResponseEntity<List<ConsulServiceHealth>>(expectedCnslSrvcHlth, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<List<ConsulServiceHealth>>>any())) + .thenReturn(response); + + List<ConsulServiceHealth> actualNodeHlthList = + subject.getNodeServicesHealth("dc1", "nodeId1"); + assertTrue(actualNodeHlthList.get(0).node.equals("cjlvmcnsl00")); + } + + @Test + public final void testGetDatacenters() { + ConsulDatacenter cnslDc = new ConsulDatacenter("dc1"); + + List<ConsulDatacenter> cnslDcList = new ArrayList<ConsulDatacenter>(); + cnslDcList.add(cnslDc); + List<String> dcItems = new ArrayList<String>(); + dcItems.add("dc1"); + + ResponseEntity<List<String>> response = + new ResponseEntity<List<String>>(dcItems, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<List<String>>>any())).thenReturn(response); + List<ConsulDatacenter> actualDcList = subject.getDatacenters(); + assertTrue(actualDcList.get(0).name.equals("dc1")); + } + + @Test + @Ignore + public final void testRegisterService() { + fail("Not yet implemented"); // TODO + } + + @Test + public final void testDeregisterService() { + + JSONObject jsonResp = new JSONObject(); + + ResponseEntity<JSONObject> result = new ResponseEntity<JSONObject>(jsonResp, HttpStatus.OK); + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), Matchers.<ParameterizedTypeReference<JSONObject>>any())) + .thenReturn(result); + + int actualCode = subject.deregisterService("service1"); + assertTrue(actualCode == 200); + } + +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/DeploymentHandlerClientImplTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/DeploymentHandlerClientImplTest.java new file mode 100644 index 0000000..7bd085b --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/DeploymentHandlerClientImplTest.java @@ -0,0 +1,366 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.rest; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.stream.Stream; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.onap.ccsdk.dashboard.exceptions.BadRequestException; +import org.onap.ccsdk.dashboard.exceptions.DeploymentNotFoundException; +import org.onap.ccsdk.dashboard.exceptions.DownstreamException; +import org.onap.ccsdk.dashboard.exceptions.ServerErrorException; +import org.onap.ccsdk.dashboard.exceptions.ServiceAlreadyExistsException; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentLink; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentRequest; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentResponse; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentResponseLinks; +import org.onap.ccsdk.dashboard.model.deploymenthandler.DeploymentsListResponse; +import org.onap.ccsdk.dashboard.util.DashboardProperties; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestTemplate; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({DashboardProperties.class}) +public class DeploymentHandlerClientImplTest { + + @Mock + RestTemplate mockRest; + + @InjectMocks + DeploymentHandlerClientImpl subject; + + @Before + public void setUp() throws Exception { + PowerMockito.mockStatic(DashboardProperties.class); + when(DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_DHANDLER_URL)).thenReturn("https://dplh.com"); + this.subject.init(); + + } + + @After + public void tearDown() throws Exception { + } + + @Test + public final void testGetDeployments() { + Collection<DeploymentLink> expectedDeplRefs = new ArrayList<DeploymentLink>(); + expectedDeplRefs.add(new DeploymentLink("http://dplh.com/dpl1")); + expectedDeplRefs.add(new DeploymentLink("http://dplh.com/dpl11")); + + DeploymentsListResponse expectedDeplList = + new DeploymentsListResponse("req1", expectedDeplRefs); + + ResponseEntity<DeploymentsListResponse> response = + new ResponseEntity<DeploymentsListResponse>(expectedDeplList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentsListResponse>>any())) + .thenReturn(response); + + Stream<DeploymentLink> actualResult = subject.getDeployments(); + assertTrue(actualResult.findFirst().get().getHref().contains("dpl1")); + } + + @Test + public final void testGetDeploymentsString() { + Collection<DeploymentLink> expectedDeplRefs = new ArrayList<DeploymentLink>(); + expectedDeplRefs.add(new DeploymentLink("http://dplh.com/dpl1")); + expectedDeplRefs.add(new DeploymentLink("http://dplh.com/dpl11")); + + DeploymentsListResponse expectedDeplList = + new DeploymentsListResponse("req1", expectedDeplRefs); + + ResponseEntity<DeploymentsListResponse> response = + new ResponseEntity<DeploymentsListResponse>(expectedDeplList, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentsListResponse>>any())) + .thenReturn(response); + + Stream<DeploymentLink> actualResult = subject.getDeployments("serviceTypeId"); + assertTrue(actualResult.findFirst().get().getHref().contains("dpl1")); + } + + @Test + public final void testPutDeployment() throws Exception { + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + DeploymentResponseLinks newDeplItemLink = + new DeploymentResponseLinks("selfUrl", "statusUrl"); + DeploymentResponse expectedDeplItem = new DeploymentResponse("req1", newDeplItemLink); + + ResponseEntity<DeploymentResponse> response = + new ResponseEntity<DeploymentResponse>(expectedDeplItem, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())).thenReturn(response); + + DeploymentResponse actualResponse = subject.putDeployment("dpl12", "tenant12", deplReq); + assertTrue(actualResponse.getRequestId().equals("req1")); + } + + @Test(expected = DownstreamException.class) + public final void testPutDeployment_downstreamError() throws Exception { + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.BAD_GATEWAY, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.putDeployment("dpl12", "tenant12", deplReq); + } + + @Test(expected = BadRequestException.class) + public final void testPutDeployment_badReqError() throws Exception { + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpClientErrorException httpException = + new HttpClientErrorException(HttpStatus.UNSUPPORTED_MEDIA_TYPE, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.putDeployment("dpl12", "tenant12", deplReq); + } + + @Test(expected = ServiceAlreadyExistsException.class) + public final void testPutDeployment_srvcExistError() throws Exception { + + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpClientErrorException httpException = + new HttpClientErrorException(HttpStatus.CONFLICT, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.putDeployment("dpl12", "tenant12", deplReq); + } + + @Test(expected = ServerErrorException.class) + public final void testPutDeployment_srvcError() throws Exception { + + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.putDeployment("dpl12", "tenant12", deplReq); + } + + @Test + public final void testUpdateDeployment() throws Exception { + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + DeploymentResponseLinks newDeplItemLink = + new DeploymentResponseLinks("selfUrl", "statusUrl"); + DeploymentResponse expectedDeplItem = new DeploymentResponse("req1", newDeplItemLink); + + ResponseEntity<DeploymentResponse> response = + new ResponseEntity<DeploymentResponse>(expectedDeplItem, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())).thenReturn(response); + + DeploymentResponse actualResponse = subject.updateDeployment("dpl12", "tenant12", deplReq); + assertTrue(actualResponse.getRequestId().equals("req1")); + } + + @Test(expected = DownstreamException.class) + public final void testUpdateDeployment_downstreamError() throws Exception { + + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.BAD_GATEWAY, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.updateDeployment("dpl12", "tenant12", deplReq); + + } + + @Test(expected = BadRequestException.class) + public final void testUpdateDeployment_badReqError() throws Exception { + + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpClientErrorException httpException = + new HttpClientErrorException(HttpStatus.UNSUPPORTED_MEDIA_TYPE, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.updateDeployment("dpl12", "tenant12", deplReq); + + } + + @Test(expected = ServiceAlreadyExistsException.class) + public final void testUpdateDeployment_srvcExistError() throws Exception { + + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpClientErrorException httpException = + new HttpClientErrorException(HttpStatus.CONFLICT, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.updateDeployment("dpl12", "tenant12", deplReq); + + } + + @Test(expected = ServerErrorException.class) + public final void testUpdateDeployment_srvcError() throws Exception { + + DeploymentRequest deplReq = new DeploymentRequest("serviceTypeId", null); + + HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.updateDeployment("dpl12", "tenant12", deplReq); + + } + + @Test + public final void testDeleteDeployment() throws Exception { + DeploymentResponseLinks newDeplItemLink = + new DeploymentResponseLinks("selfUrl", "statusUrl"); + DeploymentResponse expectedDeplItem = new DeploymentResponse("req1", newDeplItemLink); + + ResponseEntity<DeploymentResponse> response = + new ResponseEntity<DeploymentResponse>(expectedDeplItem, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.DELETE), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())).thenReturn(response); + + subject.deleteDeployment("deploymentId", "tenant"); + } + + @Test(expected = ServerErrorException.class) + public final void testDeleteDeployment_serverError() throws Exception { + HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.DELETE), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.deleteDeployment("deploymentId", "tenant"); + } + + @Test(expected = DeploymentNotFoundException.class) + public final void testDeleteDeployment_notFoundError() throws Exception { + + HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.NOT_FOUND, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.DELETE), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.deleteDeployment("deploymentId", "tenant"); + } + + @Test(expected = BadRequestException.class) + public final void testDeleteDeployment_badReqError() throws Exception { + + HttpClientErrorException httpException = + new HttpClientErrorException(HttpStatus.UNSUPPORTED_MEDIA_TYPE, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.DELETE), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.deleteDeployment("deploymentId", "tenant"); + } + + @Test(expected = DownstreamException.class) + public final void testDeleteDeployment_downstreamError() throws Exception { + + HttpServerErrorException httpException = + new HttpServerErrorException(HttpStatus.BAD_GATEWAY, "statusText"); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.DELETE), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<DeploymentResponse>>any())) + .thenThrow(httpException); + + subject.deleteDeployment("deploymentId", "tenant"); + } + +} diff --git a/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientImplTest.java b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientImplTest.java new file mode 100644 index 0000000..d4c5e14 --- /dev/null +++ b/ccsdk-app-common/src/test/java/org/onap/ccsdk/dashboard/rest/RestInventoryClientImplTest.java @@ -0,0 +1,361 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ + +package org.onap.ccsdk.dashboard.rest; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Optional; +import java.util.stream.Stream; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.ccsdk.dashboard.model.inventory.ApiResponseMessage; +import org.onap.ccsdk.dashboard.model.inventory.Service; +import org.onap.ccsdk.dashboard.model.inventory.ServiceList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceQueryParams; +import org.onap.ccsdk.dashboard.model.inventory.ServiceRef; +import org.onap.ccsdk.dashboard.model.inventory.ServiceRefList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceType; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeList; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeQueryParams; +import org.onap.ccsdk.dashboard.model.inventory.ServiceTypeRequest; +import org.onap.ccsdk.dashboard.util.DashboardProperties; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({DashboardProperties.class}) +public class RestInventoryClientImplTest { + + @Mock + RestTemplate mockRest; + + @InjectMocks + RestInventoryClientImpl subject = new RestInventoryClientImpl(); + + protected final ObjectMapper objectMapper = new ObjectMapper(); + + ServiceList deplList = null; + ServiceList deplListNext = null; + Service deplItem = null; + + ServiceType bpItem = null; + ServiceTypeList bpList = null; + ServiceTypeList bpListNext = null; + + ServiceTypeRequest bpUploadItem = null; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + objectMapper.registerModule(new Jdk8Module()); + getExpectedBueprints(); + getExpectedDeployments(); + PowerMockito.mockStatic(DashboardProperties.class); + when(DashboardProperties.getControllerProperty("dev", + DashboardProperties.CONTROLLER_SUBKEY_INVENTORY_URL)).thenReturn("https://invt.com"); + this.subject.init(); + } + + @After + public void tearDown() throws Exception { + } + + public void getExpectedDeployments() + throws JsonParseException, JsonMappingException, IOException { + deplItem = new Service("dcae_dtiapi_1902", null, "1552335532348", "1552335532348", null, + "dummyVnfId", null, "dummyVnfType", "dummyLocation", "dcae_dtiapi_1902", null); + Collection<Service> items = new ArrayList<Service>(); + items.add(deplItem); + + String pageLinks = + "{\"previousLink\":null,\"nextLink\":{\"rel\":\"next\",\"href\":\"https://invt.com:30123/dcae-services/?offset=25\"}}"; + String pageLinks2 = "{\"previousLink\":null,\"nextLink\":null}"; + + ServiceList.PaginationLinks paginationLinks = + objectMapper.readValue(pageLinks, ServiceList.PaginationLinks.class); + ServiceList.PaginationLinks paginationLinks2 = + objectMapper.readValue(pageLinks2, ServiceList.PaginationLinks.class); + + int totalCount = 2; + deplList = new ServiceList(items, totalCount, paginationLinks); + deplListNext = new ServiceList(items, totalCount, paginationLinks2); + } + + public void getExpectedBueprints() + throws JsonParseException, JsonMappingException, IOException { + bpItem = new ServiceType.Builder("xyz1731", "xyz1731-helm-1906", 1906, + "tosca_definitions_version: cloudify_dsl_1_3", "", "app1", "comp1").build(); + Collection<ServiceType> items = new ArrayList<ServiceType>(); + items.add(bpItem); + + String pageLinks = + "{\"previousLink\":null,\"nextLink\":{\"rel\":\"next\",\"href\":\"https://invt.com:30123/dcae-services/?offset=25\"}}"; + String pageLinks2 = "{\"previousLink\":null,\"nextLink\":null}"; + ServiceTypeList.PaginationLinks paginationLinks = + objectMapper.readValue(pageLinks, ServiceTypeList.PaginationLinks.class); + ServiceTypeList.PaginationLinks paginationLinks2 = + objectMapper.readValue(pageLinks2, ServiceTypeList.PaginationLinks.class); + + int totalCount = 2; + bpList = new ServiceTypeList(items, totalCount, paginationLinks); + bpListNext = new ServiceTypeList(items, totalCount, paginationLinks2); + } + + @Test + @Ignore + public final void testInit() { + fail("Not yet implemented"); // TODO + } + + @Test + public final void testGetServiceTypes() { + /* + * String serviceTypeStr = + * "{\"paginationLinks\":{\"previousLink\":null,\"nextLink\":null}},\"totalCount\":32,\"items\":[{\"owner\":\"xyz1731\",\"typeName\":\"xyz1731-helm-1906\",\"typeVersion\":1906,\"blueprintTemplate\":\"tosca_definitions_version: cloudify_dsl_1_3\\nimports:\\n - http://www.getcloudify.org/spec/cloudify/4.2/types.yaml\\n - http://dockercentral.it.att.com:8093/nexus/repository/rawcentral/com.att.dcae.controller/type_files/helm/3.0.1/helm-type.yaml\\ninputs:\\n deployment-description:\\n default: ''\\n chart-name:\\n default: ''\\n tiller-server:\\n default: ''\\n tiller-server-port:\\n default: ''\\n namespace:\\n default: ''\\n chart-repo-url:\\n default: http://32.68.14.161/charts\\n chart-version :\\n default: ''\\n config-url:\\n default: ''\\n config-format:\\n default: ''\\n tls-enable:\\n description: enable helm TSL\\n type: boolean\\n default: false\\n config-dir:\\n description: config dir\\n type: string\\n default: '/opt/manager/resources/'\\n stable-repo-url:\\n description: URL for stable repository\\n type: string\\n default: 'http://32.68.14.161/stable'\\nnode_templates:\\n ecompcomponent:\\n type: onap.nodes.component\\n properties:\\n tiller-server-ip: { get_input: tiller-server }\\n tiller-server-port: { get_input: tiller-server-port }\\n component-name: { get_input: chart-name }\\n chart-repo-url: { concat: [ 'http://', { get_secret: controller_helm_user }, ':', { get_secret: controller_helm_password }, '@', { get_input: chart-repo-url } ] }\\n chart-version: { get_input: chart-version }\\n namespace: { get_input: namespace }\\n config-url: { concat: [ 'http://', { get_secret: controller_helm_user }, ':', { get_secret: controller_helm_password }, '@', { get_input: config-url } ] }\\n config-format: { get_input: config-format}\\n tls-enable: { get_input: tls-enable}\\n ca: { get_secret: ca_value}\\n cert: { get_secret: cert_value}\\n key: { get_secret: key_value}\\n config-dir: { get_input: config-dir}\\n stable-repo-url: { concat: [ 'http://', { get_secret: controller_helm_user }, ':', { get_secret: controller_helm_password }, '@', { get_input: stable-repo-url } ] }\\noutputs:\\n ecompcomponent-helm-output:\\n description: helm value and helm history\\n value:\\n helm-value: { get_attribute: [ecompcomponent, current-helm-value] }\\n helm-history: { get_attribute: [ecompcomponent, helm-history] }\",\"serviceIds\":[],\"vnfTypes\":[],\"serviceLocations\":[],\"asdcServiceId\":\"\",\"asdcResourceId\":\"\",\"asdcServiceURL\":null,\"application\":\"ECOMP\",\"component\":\"controller\",\"typeId\":\"72b8577a-5043-43ab-9aa5-6808b8f53967\",\"selfLink\":{\"rel\":\"self\",\"href\":\"https://ecompc-invt-dev-s5.ecomp.idns.cip.att.com:30123/dcae-service-types/72b8577a-5043-43ab-9aa5-6808b8f53967\"},\"created\":1551214264536,\"deactivated\":null}]" + * ; ServiceTypeList sampleData = null; try { sampleData = + * objectMapper.readValue(serviceTypeStr, ServiceTypeList.class); } catch + * (Exception e) { } + */ + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> expectedResult = items.stream(); + + ResponseEntity<ServiceTypeList> response = + new ResponseEntity<ServiceTypeList>(bpList, HttpStatus.OK); + + ResponseEntity<ServiceTypeList> response2 = + new ResponseEntity<ServiceTypeList>(bpListNext, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<ServiceTypeList>>any())).thenReturn(response) + .thenReturn(response2); + + Stream<ServiceType> actualResult = subject.getServiceTypes(); + assertNotNull(actualResult); + assertTrue(expectedResult.count() == actualResult.count()); + } + + @Test + public final void testGetServiceTypesServiceTypeQueryParams() { + ServiceTypeQueryParams qryParms = new ServiceTypeQueryParams.Builder() + .asdcResourceId("asdcResourceId").asdcServiceId("asdcServiceId").onlyActive(true) + .onlyLatest(false).serviceId("serviceId").serviceLocation("serviceLocation") + .typeName("typeName").vnfType("vnfType").build(); + Collection<ServiceType> items = bpList.items; + Stream<ServiceType> expectedResult = items.stream(); + + ResponseEntity<ServiceTypeList> response = + new ResponseEntity<ServiceTypeList>(bpList, HttpStatus.OK); + + ResponseEntity<ServiceTypeList> response2 = + new ResponseEntity<ServiceTypeList>(bpListNext, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<ServiceTypeList>>any())).thenReturn(response) + .thenReturn(response2); + + Stream<ServiceType> actualResult = subject.getServiceTypes(qryParms); + assertNotNull(actualResult); + assertTrue(expectedResult.count() == actualResult.count()); + } + + @Test + public final void testGetServiceType() { + Optional<ServiceType> expectedResult = Optional.of(bpItem); + + ResponseEntity<ServiceType> response = + new ResponseEntity<ServiceType>(bpItem, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), Matchers.<ParameterizedTypeReference<ServiceType>>any())) + .thenReturn(response); + + Optional<ServiceType> actualResult = subject.getServiceType("432432423"); + assertTrue(expectedResult.get().getTypeName().equals(actualResult.get().getTypeName())); + } + + @Test + public final void testAddServiceTypeServiceType() { + + when(mockRest.postForObject(Matchers.anyString(), Matchers.<HttpEntity<?>>any(), + Matchers.<Class<ServiceType>>any())).thenReturn(bpItem); + + ServiceType actualResult = subject.addServiceType(bpItem); + assertTrue(actualResult.getTypeName().contains("xyz")); + } + + @Test + public final void testAddServiceTypeServiceTypeRequest() { + ServiceTypeRequest srvcReq = ServiceTypeRequest.from(bpItem); + + when(mockRest.postForObject(Matchers.anyString(), Matchers.<HttpEntity<?>>any(), + Matchers.<Class<ServiceType>>any())).thenReturn(bpItem); + + ServiceType actualResult = subject.addServiceType(srvcReq); + assertTrue(actualResult.getTypeName().contains("xyz")); + } + + @Test + public final void testDeleteServiceType() throws Exception { + ResponseEntity<ApiResponseMessage> response = + new ResponseEntity<ApiResponseMessage>(HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.DELETE), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<ApiResponseMessage>>any())).thenReturn(response); + + subject.deleteServiceType("4243234"); + } + + @Test + public final void testGetServices() { + + Collection<Service> items = deplList.items; + Stream<Service> expectedResult = items.stream(); + + ResponseEntity<ServiceList> response = + new ResponseEntity<ServiceList>(deplList, HttpStatus.OK); + + ResponseEntity<ServiceList> response2 = + new ResponseEntity<ServiceList>(deplListNext, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), Matchers.<ParameterizedTypeReference<ServiceList>>any())) + .thenReturn(response).thenReturn(response2); + + Stream<Service> actualResult = subject.getServices(); + assertNotNull(actualResult); + assertTrue(expectedResult.count() == actualResult.count()); + + } + + @Test + public final void testGetServicesForType() { + ResponseEntity<ServiceList> response = + new ResponseEntity<ServiceList>(deplList, HttpStatus.OK); + + ResponseEntity<ServiceList> response2 = + new ResponseEntity<ServiceList>(deplListNext, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), Matchers.<ParameterizedTypeReference<ServiceList>>any())) + .thenReturn(response).thenReturn(response2); + ServiceQueryParams qryParms = new ServiceQueryParams.Builder().typeId("typeId").build(); + + ServiceRefList actualResult = subject.getServicesForType(qryParms); + assertTrue(actualResult.items.size() == 2); + ServiceRef actualSrvcItem = (ServiceRef) actualResult.items.toArray()[0]; + assertTrue(actualSrvcItem.getServiceId().contains("dtiapi")); + + } + + @Test + public final void testGetServicesServiceQueryParams() { + ServiceQueryParams qryParms = new ServiceQueryParams.Builder().typeId("typeId") + .vnfId("vnfId").vnfLocation("vnfLocation").vnfType("vnfType") + .componentType("componentType").shareable(false).created("43443423").build(); + + Collection<Service> items = deplList.items; + Stream<Service> expectedResult = items.stream(); + + ResponseEntity<ServiceList> response = + new ResponseEntity<ServiceList>(deplList, HttpStatus.OK); + + ResponseEntity<ServiceList> response2 = + new ResponseEntity<ServiceList>(deplListNext, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), Matchers.<ParameterizedTypeReference<ServiceList>>any())) + .thenReturn(response).thenReturn(response2); + + Stream<Service> actualResult = subject.getServices(qryParms); + assertTrue(expectedResult.count() == actualResult.count()); + } + + @Test + public final void testGetService() { + Optional<Service> expectedResult = Optional.of(deplItem); + + ResponseEntity<Service> response = new ResponseEntity<Service>(deplItem, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.GET), + Matchers.<HttpEntity<?>>any(), Matchers.<ParameterizedTypeReference<Service>>any())) + .thenReturn(response); + + Optional<Service> actualResult = subject.getService("432432423"); + assertTrue( + expectedResult.get().getDeploymentRef().equals(actualResult.get().getDeploymentRef())); + } + + @Test + public final void testPutService() { + + ResponseEntity<Service> response = new ResponseEntity<Service>(deplItem, HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.PUT), + Matchers.<HttpEntity<?>>any(), Matchers.<ParameterizedTypeReference<Service>>any())) + .thenReturn(response); + + subject.putService("423423", deplItem); + } + + @Test + public final void testDeleteService() throws Exception { + ResponseEntity<ApiResponseMessage> response = + new ResponseEntity<ApiResponseMessage>(HttpStatus.OK); + + when(mockRest.exchange(Matchers.anyString(), Matchers.eq(HttpMethod.DELETE), + Matchers.<HttpEntity<?>>any(), + Matchers.<ParameterizedTypeReference<ApiResponseMessage>>any())).thenReturn(response); + + subject.deleteService("4243234"); + } + +} diff --git a/ccsdk-app-os/src/main/webapp/static/fusion/images/active.png b/ccsdk-app-os/src/main/webapp/static/fusion/images/active.png Binary files differnew file mode 100644 index 0000000..4524177 --- /dev/null +++ b/ccsdk-app-os/src/main/webapp/static/fusion/images/active.png diff --git a/ccsdk-app-os/src/main/webapp/static/fusion/images/inactive.png b/ccsdk-app-os/src/main/webapp/static/fusion/images/inactive.png Binary files differnew file mode 100644 index 0000000..e9920bf --- /dev/null +++ b/ccsdk-app-os/src/main/webapp/static/fusion/images/inactive.png diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-health-service.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-health-service.js index 64618c1..20fe6d3 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-health-service.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-health-service.js @@ -1,24 +1,3 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ appDS2.factory('DatacenterHealthService', function ($http, $q, $log) { return { /** @@ -45,7 +24,7 @@ appDS2.factory('DatacenterHealthService', function ($http, $q, $log) { $log.error('DatacenterService.getDatacentersHealth failed: ' + JSON.stringify(error)); return $q.reject(error.statusText); }); - } + }, }; }); diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-table-controller.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-table-controller.js index f1c8820..9ac13c2 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-table-controller.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter-table-controller.js @@ -1,24 +1,3 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ appDS2.controller('datacenterTableController', function($scope, $log, $modal, DatacenterHealthService) { 'use strict'; diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter_table.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter_table.html index 73a1b82..cb8e95a 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter_table.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/datacenter_table.html @@ -5,7 +5,7 @@ <!-- show progress indicator --> <div ng-show="ecdapp.isDataLoading"> <div class="span" style="margin-bottom:20px;"> - <i class="icon-primary-spinner small" role="img" aria-label="Please wait while the content loads"></i> + <i class="icon-spinner small" role="img" aria-label="Please wait while the content loads"></i> Please wait while the content loads. </div> </div> diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-health-service.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-health-service.js index 18fc30b..ae1dbb5 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-health-service.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-health-service.js @@ -1,36 +1,38 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ appDS2.factory('NodeHealthService', function ($http, $q, $log) { return { /** + * Get all the datacenter names + */ + getDatacentersHealth: function(pageNum,viewPerPage) { + // cache control for IE + var cc = "&cc=" + new Date().getTime().toString(); + return $http({ + method: 'GET', + url: 'healthservices/datacenters', + cache: false, + responseType: 'json' + }).then(function(response) { + if (response.data == null || typeof response.data != 'object') + return $q.reject('DatacentersService.getDatacentersHealth: response.data null or not object'); + else + return response.data; + }, + function(error) { + $log.error('DatacenterService.getDatacentersHealth failed: ' + JSON.stringify(error)); + return $q.reject(error.statusText); + }); + }, + /** * Gets one page of objects. * @param {Number} pageNum - page number; e.g., 1 * @param {Number} viewPerPage - number of items per page; e.g., 25 * @return {JSON} Response object from remote side */ - getNodesHealth: function(pageNum,viewPerPage) { + getNodesHealth: function(pageNum,viewPerPage, dc) { // cache control for IE let cc = "&cc=" + new Date().getTime().toString(); - let url = 'healthservices/nodes?pageNum=' + pageNum + '&viewPerPage=' + viewPerPage + cc; + let url = 'healthservices/nodes?pageNum=' + pageNum + '&viewPerPage=' + viewPerPage + + '&dc=' + dc +cc; return $http({ method: 'GET', url: url, @@ -53,10 +55,8 @@ appDS2.factory('NodeHealthService', function ($http, $q, $log) { * @param {nodeName} node name (not the UUID) * @return {JSON} Response object from remote side */ - getNodeServicesHealth: function(nodeName) { - // cache control for IE - let cc = "?cc=" + new Date().getTime().toString(); - let url = 'healthservices/nodes/' + nodeName + cc; + getNodeServicesHealth: function(nodeName, dc) { + let url = 'healthservices/nodes/' + nodeName + '?dc=' + dc; return $http({ method: 'GET', url: url, @@ -72,7 +72,7 @@ appDS2.factory('NodeHealthService', function ($http, $q, $log) { $log.error('serviceHealthService.getNodeServicesHealth failed: ' + JSON.stringify(error)); return $q.reject(error.statusText); }); - } + }, }; }); diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-services-controller.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-services-controller.js index b82ba40..f0820be 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-services-controller.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-services-controller.js @@ -1,24 +1,3 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ appDS2.controller('nodeServicesCtrl', function($scope, $log, message, NodeHealthService) { 'use strict'; @@ -32,15 +11,16 @@ appDS2.controller('nodeServicesCtrl', function($scope, $log, message, NodeHealth // this object holds all app data and functions $scope.ecdapp = {}; $scope.ecdapp.label = 'Services on Node ' + message.node; - + $scope.ecdapp.activeImg = "static/fusion/images/active.png"; + $scope.ecdapp.inactiveImg = "static/fusion/images/inactive.png"; /** * Loads the table of services for the specified node. */ - $scope.ecdapp.loadTable = function(nodeName) { + $scope.ecdapp.loadTable = function(nodeName, dc) { $scope.ecdapp.isDataLoading = true; if (debug) $log.debug('nodeServicesCtrl: loading data for ' + nodeName); - NodeHealthService.getNodeServicesHealth(nodeName).then( + NodeHealthService.getNodeServicesHealth(nodeName, dc).then( function(jsonObj) { if (debug) $log.debug('nodeServicesCtrl: response is ' + JSON.stringify(jsonObj)); @@ -72,6 +52,7 @@ appDS2.controller('nodeServicesCtrl', function($scope, $log, message, NodeHealth // Show services for the requested node if (debug) $log.debug('nodeServicesCtrl: requesting services for node ' + message.node); - $scope.ecdapp.loadTable(message.node); + $scope.ecdapp.loadTable(message.node, message.dc); + }); diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-table-controller.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-table-controller.js index 61ececb..992caeb 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-table-controller.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node-table-controller.js @@ -1,24 +1,3 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ appDS2.controller('nodeTableController', function($scope, $log, $modal, NodeHealthService) { 'use strict'; @@ -31,9 +10,42 @@ appDS2.controller('nodeTableController', function($scope, $log, $modal, NodeHeal $scope.ecdapp.viewPerPage = 10; // other $scope.ecdapp.errMsg = null; - $scope.ecdapp.isDataLoading = true; + $scope.ecdapp.isDataLoading = false; $scope.ecdapp.isRequestFailed = false; + $scope.ecdapp.isDcLoaded = false; + $scope.ecdapp.activeImg = "static/fusion/images/active.png"; + $scope.ecdapp.inactiveImg = "static/fusion/images/inactive.png"; + $scope.ecdapp.datacenter = ""; + $scope.ecdapp.datacenters = []; + var getDataCenters = function() { + NodeHealthService.getDatacentersHealth().then( + function(jsonObj) { + if (jsonObj.error) { + $log.error("datacentersController.loadTable failed: " + + jsonObj.error); + $scope.ecdapp.isRequestFailed = true; + $scope.ecdapp.errMsg = jsonObj.error; + $scope.ecdapp.tableData = []; + } else { + // $log.debug("datacentersController.loadTable + // succeeded, size " + jsonObj.data.length); + $scope.ecdapp.errMsg = null; + $scope.ecdapp.datacenters = jsonObj.items; + $scope.ecdapp.datacenter = $scope.ecdapp.datacenters[0].name; + $scope.ecdapp.isDcLoaded = true; + $scope.ecdapp.isRequestFailed = false; + $scope.pageChangeHandler(1); + } + }, + function(error) { + $log.error("datacentersController.loadTable failed: " + + error); + $scope.ecdapp.isRequestFailed = true; + $scope.ecdapp.errMsg = error; + $scope.ecdapp.tableData = []; + }); + }; /** * Answers an array of the specified size - makes Angular iteration easy. */ @@ -48,9 +60,10 @@ appDS2.controller('nodeTableController', function($scope, $log, $modal, NodeHeal * tableData, or an error to be shown. */ $scope.ecdapp.loadTable = function() { + if ($scope.ecdapp.datacenter != 'Select Datacenter') { $scope.ecdapp.isDataLoading = true; NodeHealthService.getNodesHealth($scope.ecdapp.currentPageNum, - $scope.ecdapp.viewPerPage).then( + $scope.ecdapp.viewPerPage, $scope.ecdapp.datacenter).then( function(jsonObj) { if (jsonObj.error) { $log.error("nodeHealthController.loadTable failed: " @@ -76,6 +89,7 @@ appDS2.controller('nodeTableController', function($scope, $log, $modal, NodeHeal $scope.ecdapp.tableData = []; $scope.ecdapp.isDataLoading = false; }); + } }; /** @@ -86,19 +100,22 @@ appDS2.controller('nodeTableController', function($scope, $log, $modal, NodeHeal // console.log('pageChangeHandler: current is ' + // $scope.ecdapp.currentPageNum + ' new is ' + page); $scope.ecdapp.currentPageNum = page; - $scope.ecdapp.loadTable(); + if ($scope.ecdapp.isDcLoaded) { + $scope.ecdapp.loadTable(); + } } /** * Shows a modal pop-up with services on this node. */ - $scope.ecdapp.viewServicesModalPopup = function(nodeInfo) { + $scope.ecdapp.viewServicesModalPopup = function(nodeInfo, dc) { + nodeInfo.dc = dc; var modalInstance = $modal.open({ templateUrl : 'node_services_popup.html', controller : 'nodeServicesCtrl', windowClass: 'modal-docked', - sizeClass: 'modal-large', + sizeClass: 'modal-jumbo', resolve : { message : function() { return nodeInfo ; @@ -115,4 +132,5 @@ appDS2.controller('nodeTableController', function($scope, $log, $modal, NodeHeal // Do not call this here to avoid double load: // $scope.ecdapp.loadTable(); + getDataCenters(); }); diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_popups.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_popups.html index 63b5e5f..6148f8c 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_popups.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_popups.html @@ -7,11 +7,13 @@ ng-click="$dismiss('cancel')"></button> </div> </div> + <div class="b2b-modal-body ng-scope ng-isolate-scope" tabindex="0" + role="region" aria-label="Modal body content"> <!-- show progress indicator --> <div ng-show="ecdapp.isDataLoading"> <div class="span" style="margin-bottom: 20px;"> - <i class="icon-primary-spinner small" role="img" + <i class="icon-spinner small" role="img" aria-label="Please wait while the content loads"></i> Please wait while the content loads. </div> @@ -54,6 +56,7 @@ </div> <!--table--> </div> <!--failed--> </div> <!--hide--> + </div> <div class="b2b-modal-footer ng-scope ng-isolate-scope"> <div class="cta-button-group in"> diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_table.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_table.html index 231d331..670fa6a 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_table.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/node_table.html @@ -1,11 +1,18 @@ <div id="page-content"> - + <div style="float: right;" ng-show="ecdapp.isDcLoaded"> + <div class="field-group span10"> + <label for="dc">*Datacenters</label> + <select id="dc" name="dc" b2b-dropdown class="span8" placeholder-text="Select Datacenter" data-ng-model="ecdapp.datacenter" ng-change="ecdapp.loadTable()" required> + <option b2b-dropdown-list option-repeat="d in ecdapp.datacenters" value="{{d.name}}">{{d.name}}</option> + </select> + </div> + </div> <h1 class="heading-page" id="consul_nodes">Monitored Nodes</h1> <!-- show progress indicator --> <div ng-show="ecdapp.isDataLoading"> <div class="span" style="margin-bottom: 20px;"> - <i class="icon-primary-spinner small" role="img" + <i class="icon-spinner small" role="img" aria-label="Please wait while the content loads"></i> Please wait while the content loads. </div> @@ -40,7 +47,7 @@ <th b2b-table-header key="node">Node Name</th> <th b2b-table-header key="id">Node ID</th> <th b2b-table-header key="address">Address</th> - <th b2b-table-header sortable="false"><i class="icon-controls-gear ecd-icon-display"></i></th> + <th b2b-table-header sortable="false"><i class="icon-settings ecd-icon-display"></i></th> </tr> </thead> @@ -51,8 +58,8 @@ <td b2b-table-body ng-bind="rowData.id" /> <td b2b-table-body ng-bind="rowData.address" /> <td b2b-table-body> - <div ng-click="ecdapp.viewServicesModalPopup(rowData);"> - <a href="" title="View node services" class="icon-people-preview ecd-icon-action"></a> + <div ng-click="ecdapp.viewServicesModalPopup(rowData, ecdapp.datacenter);"> + <a href="" title="View node services" class="icon-overview ecd-icon-action"></a> </div> </td> </tr> diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-controllers.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-controllers.js index 339c436..6463bac 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-controllers.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-controllers.js @@ -1,24 +1,3 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ appDS2.controller('serviceHealthTableController', function($scope, $log, $modal, modalService, ServiceHealthService) { 'use strict'; @@ -31,18 +10,55 @@ appDS2.controller('serviceHealthTableController', function($scope, $log, $modal, $scope.ecdapp.viewPerPage = 100; // other $scope.ecdapp.errMsg = null; - $scope.ecdapp.isDataLoading = true; + $scope.ecdapp.isDataLoading = false; + $scope.ecdapp.isDcLoaded = false; + $scope.ecdapp.isDcAvail = false; $scope.ecdapp.isRequestFailed = false; + $scope.ecdapp.activeImg = "static/fusion/images/active.png"; + $scope.ecdapp.inactiveImg = "static/fusion/images/inactive.png"; + $scope.ecdapp.datacenter = ""; + $scope.ecdapp.datacenters = []; + + var getDataCenters = function() { + ServiceHealthService.getDatacentersHealth().then( + function(jsonObj) { + if (jsonObj.error) { + $log.error("datacentersController.loadTable failed: " + + jsonObj.error); + $scope.ecdapp.isRequestFailed = true; + $scope.ecdapp.errMsg = jsonObj.error; + $scope.ecdapp.tableData = []; + } else { + // $log.debug("datacentersController.loadTable + // succeeded, size " + jsonObj.data.length); + $scope.ecdapp.errMsg = null; + //$scope.ecdapp.totalPages = jsonObj.totalPages; + $scope.ecdapp.datacenters = jsonObj.items; + $scope.ecdapp.datacenter = $scope.ecdapp.datacenters[0].name; + $scope.ecdapp.isDcLoaded = true; + $scope.ecdapp.isRequestFailed = false; + $scope.pageChangeHandler(1); + } + }, + function(error) { + $log.error("datacentersController.loadTable failed: " + + error); + $scope.ecdapp.isRequestFailed = true; + $scope.ecdapp.errMsg = error; + $scope.ecdapp.tableData = []; + }); + }; /** * Loads the table. Interprets the remote controller's response and copies * to scope variables. The response is either list to be assigned to * tableData, or an error to be shown. */ $scope.ecdapp.loadTable = function() { + if ($scope.ecdapp.datacenter != 'Select Datacenter') { $scope.ecdapp.isDataLoading = true; ServiceHealthService.getServicesHealth($scope.ecdapp.currentPageNum, - $scope.ecdapp.viewPerPage).then( + $scope.ecdapp.viewPerPage, $scope.ecdapp.datacenter).then( function(jsonObj) { if (jsonObj.error) { $log.error("serviceHealthTableController.loadTable failed: " @@ -68,6 +84,7 @@ appDS2.controller('serviceHealthTableController', function($scope, $log, $modal, $scope.ecdapp.tableData = []; $scope.ecdapp.isDataLoading = false; }); + } }; /** @@ -78,7 +95,9 @@ appDS2.controller('serviceHealthTableController', function($scope, $log, $modal, // console.log('pageChangeHandler: current is ' + // $scope.ecdapp.currentPageNum + ' new is ' + page); $scope.ecdapp.currentPageNum = page; + if ($scope.ecdapp.isDcLoaded) { $scope.ecdapp.loadTable(); + } } /** @@ -103,8 +122,8 @@ appDS2.controller('serviceHealthTableController', function($scope, $log, $modal, } else { if (response.error != null) { - $log.error('uploadBlueprintModalPopup failed: ' + response.error); - alert('Failed to upload blueprint:\n' + response.error); + $log.error('registerServiceModalPopup failed: ' + response.error); + alert('Failed to register service:\n' + response.error); } else { // success, get the updated list. @@ -172,6 +191,7 @@ appDS2.controller('serviceHealthTableController', function($scope, $log, $modal, }) }; + getDataCenters(); // Populate the table on load. Note that the b2b selector code // sets the page-number value, and the change event calls load table. // Do not call this here to avoid double load: @@ -180,13 +200,13 @@ appDS2.controller('serviceHealthTableController', function($scope, $log, $modal, }); -appDS2.controller('serviceRegisterCtrl', function($scope, $log, message, ServiceHealthService) { +appDS2.controller('serviceRegisterCtrl', function($scope, $log, $modalInstance, message, ServiceHealthService) { 'use strict'; // this object holds all app data and functions $scope.ecdapp = {}; - + $scope.ecdapp.uploadInProgress = false; $scope.ecdapp.label = 'Register Service'; // Model the data simply here. // Build the complex request later. @@ -228,6 +248,7 @@ appDS2.controller('serviceRegisterCtrl', function($scope, $log, message, Service } $scope.ecdapp.registerService = function(edit_req) { + $scope.ecdapp.uploadInProgress = true; var validateMsg = $scope.ecdapp.validateRequest(edit_req); if (validateMsg != null) { alert('Invalid registration request:\n' + validateMsg); @@ -244,9 +265,9 @@ appDS2.controller('serviceRegisterCtrl', function($scope, $log, message, Service tags: [ ], checks : [ { - endpoint : edit_req.check_endoint, + endpoint : edit_req.check_endpoint, interval : edit_req.check_interval, - description : edit_req.description, + description : edit_req.check_description, name : edit_req.check_name } ] @@ -256,11 +277,16 @@ appDS2.controller('serviceRegisterCtrl', function($scope, $log, message, Service ServiceHealthService.registerService(request) .then(function(response) { - if (response.error) + if (response && response.error) { alert('Failed to register service:\n' + response.error); + } else { + $modalInstance.close("success"); + } + $scope.ecdapp.uploadInProgress = false; }, function (error) { $log.error('serviceRegisterCtrl: error while registering: ' + error); + $scope.ecdapp.uploadInProgress = false; alert('Server rejected registration request:\n' + error); } ); @@ -363,4 +389,5 @@ appDS2.controller('serviceHistoryCtlr', function($scope, $log, $modal, message, }); }; + }); diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-health-service.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-health-service.js index 1a60b21..f87d1b3 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-health-service.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service-health-service.js @@ -1,27 +1,27 @@ -/******************************************************************************* - * =============LICENSE_START========================================================= - * - * ================================================================================= - * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - *******************************************************************************/ appDS2.factory('ServiceHealthService', function ($http, $q, $log) { return { - + /** + * Get all the datacenter names + */ + getDatacentersHealth: function() { + // cache control for IE + var cc = "&cc=" + new Date().getTime().toString(); + return $http({ + method: 'GET', + url: 'healthservices/datacenters', + cache: false, + responseType: 'json' + }).then(function(response) { + if (response.data == null || typeof response.data != 'object') + return $q.reject('DatacentersService.getDatacentersHealth: response.data null or not object'); + else + return response.data; + }, + function(error) { + $log.error('DatacenterService.getDatacentersHealth failed: ' + JSON.stringify(error)); + return $q.reject(error.statusText); + }); + }, /** * Gets information on all services. */ @@ -51,10 +51,11 @@ appDS2.factory('ServiceHealthService', function ($http, $q, $log) { * @param {Number} viewPerPage - number of items per page; e.g., 25 * @return {JSON} Response object from remote side */ - getServicesHealth: function(pageNum, viewPerPage) { + getServicesHealth: function(pageNum, viewPerPage, dc) { // cache control for IE let cc = "&cc=" + new Date().getTime().toString(); - let url = 'healthservices/serviceshealth?pageNum=' + pageNum + '&viewPerPage=' + viewPerPage + cc; + let url = 'healthservices/serviceshealth?pageNum=' + pageNum + '&viewPerPage=' + viewPerPage + + '&dc=' + dc + cc; return $http({ method: 'GET', url: url, @@ -139,7 +140,7 @@ appDS2.factory('ServiceHealthService', function ($http, $q, $log) { $log.error('ServiceHealthService.deregisterService failed: ' + JSON.stringify(error)); return $q.reject(error.statusText); }); - } + }, }; }); diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_health_table.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_health_table.html index b6a4557..40e8d95 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_health_table.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_health_table.html @@ -1,18 +1,27 @@ <div id="page-content"> + <div style="float: right;" ng-show="ecdapp.isDcLoaded"> + <div class="field-group span10"> + <label for="dc">*Datacenters</label> + <select id="dc" name="dc" b2b-dropdown class="span8" placeholder-text="Select Datacenter" data-ng-model="ecdapp.datacenter" ng-change="ecdapp.loadTable()" required> + <option b2b-dropdown-list option-repeat="d in ecdapp.datacenters" value="{{d.name}}">{{d.name}}</option> + </select> + </div> + </div> <h1 class="heading-page" id="consul_services">Monitored Services</h1> <!-- show progress indicator --> <div ng-show="ecdapp.isDataLoading"> <div class="span" style="margin-bottom: 20px;"> - <i class="icon-primary-spinner small" role="img" + <i class="icon-spinner small" role="img" aria-label="Please wait while the content loads"></i> Please wait while the content loads. </div> </div> - - <div ng-hide="ecdapp.isDataLoading"> - + <div ng-show="ecdapp.isRequestFailed"> + <span class="ecd-error-message">{{ecdapp.errMsg}}</span> + </div> + <div ng-hide="ecdapp.isDataLoading" style="margin-top: 10px;"> <div id="button-search-row"> <button class="btn btn-alt btn-small" type="submit" @@ -27,10 +36,6 @@ </div> </div> - <div ng-show="ecdapp.isRequestFailed"> - <span class="ecd-error-message">{{ecdapp.errMsg}}</span> - </div> - <div ng-hide="ecdapp.isRequestFailed"> <div b2b-table id="consul-services-table" class="b2b-table-div" @@ -39,16 +44,15 @@ next-sort="ecdapp.nextSortIgnored"> <table> - <thead b2b-table-row type="header"> <tr id="th-header-row"> <th b2b-table-header key="serviceName">Service Name</th> - <th b2b-table-header key="serviceID">Service ID</th> - <th b2b-table-header key="node">Node Name</th> <th b2b-table-header key="status">Status</th> + <th b2b-table-header key="node">Node Name</th> + <th b2b-table-header key="serviceID">Service ID</th> <th b2b-table-header key="notes">Notes</th> <th b2b-table-header key="output">Output</th> - <th b2b-table-header sortable="false"><i class="icon-controls-gear ecd-icon-display"></i></th> + <th b2b-table-header sortable="false"><i class="icon-settings ecd-icon-display"></i></th> </tr> </thead> @@ -56,14 +60,20 @@ row-repeat="rowData in ecdapp.tableData"> <tr id="tr-rowData"> <td b2b-table-body ng-bind="rowData.serviceName" /> - <td b2b-table-body ng-bind="rowData.serviceID" /> + <td b2b-table-body> + <!-- <span>{{rowData.status}}</span> --> + <span ng-if="rowData.status === 'passing'"><img ng-src="{{ecdapp.activeImg}}" title="{{rowData.status}}"/> + </span> + <span ng-if="rowData.status != 'passing'"><img ng-src="{{ecdapp.inactiveImg}}" title="{{rowData.status}}"/> + </span> + </td> <td b2b-table-body ng-bind="rowData.node" /> - <td b2b-table-body ng-bind="rowData.status" /> + <td b2b-table-body ng-bind="rowData.serviceID" /> <td b2b-table-body ng-bind="rowData.notes" /> <td b2b-table-body ng-bind="rowData.output" /> <td b2b-table-body> <div ng-click="ecdapp.viewHealthHistoryModalPopup(rowData);"> - <a href="" title="View history" class="icon-datanetwork-history ecd-icon-action"></a> + <a href="" title="View history" class="icoDocuments-bookmarks ecd-icon-action"></a> </div> <div ng-click="ecdapp.deregisterServiceModalPopup(rowData);"> <a href="" title="Deregister service" class="icon-misc-trash ecd-icon-action"></a> diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_popups.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_popups.html index 8fd92b3..0453f8b 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_popups.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/consul/service_popups.html @@ -10,7 +10,11 @@ <div class="b2b-modal-body ng-scope ng-isolate-scope" tabindex="0" role="region" aria-label="Modal body content"> - + <div ng-show="ecdapp.uploadInProgress" class="row-nowrap"> + <div class="span" style="margin-bottom:10px;"> + <i class="icon-spinner small" role="img" aria-label="Please wait while request is in progress"></i> + </div> + </div> <div class="row-nowrap"> <div class="span12"> <div class="form-row"> @@ -86,7 +90,11 @@ </div> </div> </div> - + <div ng-show="ecdapp.uploadInProgress" class="row-nowrap"> + <div class="span" style="margin-bottom:10px;"> + <i class="icon-spinner small" role="img" aria-label="Please wait while request is in progress"></i> + </div> + </div> </div> <div class="b2b-modal-footer ng-scope ng-isolate-scope"> @@ -157,7 +165,7 @@ <!-- show progress indicator --> <div ng-show="ecdapp.isDataLoading"> <div class="span" style="margin-bottom: 20px;"> - <i class="icon-primary-spinner small" role="img" + <i class="icon-spinner small" role="img" aria-label="Please wait while the content loads"></i> Please wait while the content loads. </div> diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/home/executions-view-controller.js b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/home/executions-view-controller.js index f3d5393..2491e50 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/home/executions-view-controller.js +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/home/executions-view-controller.js @@ -4,289 +4,10 @@ appDS2.controller('executionsViewController', function($scope, $rootScope, Contr $scope.ecdapp = {}; $scope.ecdapp.isDataLoading = false; $scope.ecdapp.appLabel = ""; - $scope.controllersList = []; - $scope.controllerCall; $rootScope.tenantList = { tenant: '', data: {} }; - $rootScope.cardData = [ - { - "cardHeading": "Applications", - "cardContent": "Applications managed by ECOMP Controller", - "cardFooterFlyout": "Some Flyout Content", - "flyout":"false" - }, - { - "cardHeading": "Tenants", - "cardContent": "Tenants where applications are deployed ", - "cardFooterFlyout": "Some Flyout Content", - "flyout":"false" - }, - { - "cardHeading": "Blueprints", - "cardContent": "Blueprints data from ECOMPC Inventory", - "cardFooterFlyout": "Some Flyout Content", - "flyout":"false" - }, - { - "cardHeading": "Deployments", - "cardContent": "Deployments done using the blueprints", - "cardFooterFlyout": "Some Flyout Content", - "flyout":"false" - } - ]; - /* events fired on the drop targets */ - document.addEventListener("dragover", function( event ) { - // prevent default to allow drop - event.preventDefault(); - }, false); - - - - $scope.horizontalPositions = [ - { value: 'center', text: 'Center' }, - { value: 'left', text: 'Left' }, - { value: 'right', text: 'Right' }, - ]; - $scope.horizontalPosition = $scope.horizontalPositions[0]; - $scope.verticalPositions = [ - { value: 'below', text: 'Below' }, - { value: 'above', text: 'Above' }, - ]; - $scope.ddOption1 = [ - { value: '', text: 'Actions' }, - { value: '1', text: 'Option 1' }, - { value: '2', text: 'Option 2' }, - { value: '3', text: 'Option 3' } - ]; - - $scope.ddOptionValue1 = {}; - $scope.ddOptionValue1.value = $scope.ddOption1[0].value; - - /* This showcases having an expander default expanded */ - $scope.testmpc = true; - $scope.testmpc6 = true; - $scope.testmpc14 = true; - $scope.verticalPosition = $scope.verticalPositions[0]; - - $scope.concurrent = [10, 20, 30]; - $scope.concurrentValue = $scope.concurrent[0]; - - $scope.flyoutContent = {}; - $scope.flyoutContent.contentUpdated = false; - $scope.flyoutContent.enableSave = false; - $scope.flyoutContent.concurrentCalls = 0; - $scope.enableSaveFun = function () { - if ($scope.flyoutContent.concurrentCalls !== 0 || $scope.concurrentValue != $scope.concurrent[0]) { - $scope.flyoutContent.enableSave = true; - $scope.flyoutContent.contentUpdated = true; - } else { - $scope.flyoutContent.enableSave = false; - $scope.flyoutContent.contentUpdated = true; - } - }; - - $scope.ecdapp.opsUrls = []; - $rootScope.gTabs = []; - $rootScope.menuKeys = []; - $rootScope.opsMenu = [ - { - title: 'Cloudify', - id: 'cfy', - uniqueId: 'uniqueTab1x', - tabPanelId: 'threetab1x', - url: '' - }, { - title: 'Grafana', - id: 'grf', - uniqueId: 'uniqueTab2x', - tabPanelId: 'threetab2x', - url: '' - }, { - title: 'Consul', - id: 'cnsl', - uniqueId: 'uniqueTab3x', - tabPanelId: 'threetab3x', - url: '' - }, { - title: 'Kubernetes', - id: 'k8s', - uniqueId: 'uniqueTab4x', - tabPanelId: 'threetab4x', - url: '' - }, { - title: 'Prometheus', - id: 'prom', - uniqueId: 'uniqueTab5x', - tabPanelId: 'threetab5x', - url: '' - }, { - title: 'DBCL', - id: 'dbcl', - uniqueId: '', - tabPanelId: '', - url: '' - } - ]; - - $rootScope.tenant_cluster_map = - [ - { - tenant: 'dyh1b1902', - cluster: ['platform', 'component'] - }, - { - tenant: 'DCAE-24256-D-04Central', - cluster: ['component'] - }, - { - tenant: 'DCAE-24256-D-04Edge', - cluster: ['component'] - } - ]; - - $rootScope.site_tenant_cluster_list = - [ - {site: 'dyh1b1902', - cfy_url: 'https://ecompc-orcl-dev-s1.ecomp.idns.cip.att.com/console/login', - cnsl_url: 'https://http://ecompc-cnsl-dev-s5.ecomp.idns.cip.att.com:8500/ui/', - tenant_cluster_map: - [ - { - tenant: 'dyh1b1902', - k8_ip: '32.68.214.62', - cluster: 'platform', - k8_url: 'https://32.68.214.62:6443/ui', - prom_url: 'https://32.68.214.62:30102/graph', - grf_url: 'https://32.68.214.62:30101/login' - }, - { - tenant: 'dyh1b1902', - k8_ip: '32.68.214.62', - cluster: 'component', - k8_url: 'https://32.68.214.62:6443/ui', - prom_url: 'https://32.68.214.62:30102/graph', - grf_url: 'https://32.68.214.62:30101/login' - }, - { - tenant: 'DCAE-24256-D-04Central', - k8_ip: '32.68.192.81', - cluster: 'component', - k8_url: 'https://32.68.192.81:6443/ui', - prom_url: 'https://32.68.192.81:30102/graph', - grf_url: 'https://32.68.192.81:30101/login' - }, - { - tenant: 'DCAE-24256-D-04Edge', - k8_ip: '32.68.194.92', - cluster: 'component', - k8_url: 'https://32.68.194.92:6443/ui', - prom_url: 'https://32.68.194.92:30102/graph', - grf_url: 'https://32.68.194.92:30101/login' - } - ] - }, - {site: 'mtn23b', - cfy_url: 'https://ecompc-orcl-dev-s2.ecomp.idns.cip.att.com/console/login', - cnsl_url: 'https://ecompc-cnsl-dev-s2.ecomp.idns.cip.att.com:8500/ui/', - tenant_cluster_map: - [ - { - tenant: 'mtn23b', - k8_ip: '32.68.214.62', - cluster: 'platform', - k8: 'https://32.68.214.62:6443/ui', - prom: 'https://32.68.214.62:30102/graph', - grf: 'https://32.68.214.62:30101/login' - }, - { - tenant: 'mtn23b', - k8_ip: '32.68.214.62', - cluster: 'component', - k8: 'https://32.68.214.62:6443/ui', - prom: 'https://32.68.214.62:30102/graph', - grf: 'https://32.68.214.62:30101/login' - }, - { - tenant: 'DCAE-24256-D-04Central', - k8_ip: '32.68.192.81', - cluster: 'component', - k8: 'https://32.68.192.81:6443/ui', - prom: 'https://32.68.192.81:30102/graph', - grf: 'https://32.68.192.81:30101/login' - }, - { - tenant: 'DCAE-24256-D-04Edge', - k8_ip: '32.68.194.92', - cluster: 'component', - k8: 'https://32.68.194.92:6443/ui', - prom: 'https://32.68.194.92:30102/graph', - grf: 'https://32.68.194.92:30101/login' - } - ] - } - ]; - - $rootScope.tenant_cluster_apps_map = - [ - { - tenant: 'dyh1b1902', - k8_ip: '32.68.214.62', - cluster: 'platform', - k8: 'https://32.68.214.62:6443/ui', - prom: 'https://32.68.214.62:30102/graph', - grf: 'https://32.68.214.62:30101/login' - }, - { - tenant: 'dyh1b1902', - k8_ip: '32.68.214.62', - cluster: 'component', - k8: 'https://32.68.214.62:6443/ui', - prom: 'https://32.68.214.62:30102/graph', - grf: 'https://32.68.214.62:30101/login' - }, - { - tenant: 'DCAE-24256-D-04Central', - k8_ip: '32.68.192.81', - cluster: 'component', - k8: 'https://32.68.192.81:6443/ui', - prom: 'https://32.68.192.81:30102/graph', - grf: 'https://32.68.192.81:30101/login' - }, - { - tenant: 'DCAE-24256-D-04Edge', - k8_ip: '32.68.194.92', - cluster: 'component', - k8: 'https://32.68.194.92:6443/ui', - prom: 'https://32.68.194.92:30102/graph', - grf: 'https://32.68.194.92:30101/login' - } - ]; - - $rootScope.site_cfy_cnsl_map = - [ - {site: 'dyh1b1902', - cfy: 'https://ecompc-orcl-dev-s1.ecomp.idns.cip.att.com/console/login', - cnsl: 'https://http://ecompc-cnsl-dev-s5.ecomp.idns.cip.att.com:8500/ui/' - }, - {site: 'mtn23b', - cfy: 'https://ecompc-orcl-dev-s2.ecomp.idns.cip.att.com/console/login', - cnsl: 'https://ecompc-cnsl-dev-s2.ecomp.idns.cip.att.com:8500/ui/' - } - ] - - //$rootScope.cfyUrl = $rootScope.site_cfy_map[1].cfy; - - $rootScope.site_tenant_map = - [ - {site: 'dyh1b1902', - tenant: ['dyh1b1902','DCAE-24256-D-04Central','DCAE-24256-D-04Edge'] - }, - {site: 'mtn23b', - tenant: ['MTN23b-ECOMP-DEV-S1','DYH1b-FTL3F-DCAE-24256-D-03Central','DYH1b-FTL3F-DCAE-24256-D-03Edge'] - } - ] var debug = false; var getTenants = function() { @@ -308,124 +29,6 @@ appDS2.controller('executionsViewController', function($scope, $rootScope, Contr }); }; - var getControllers = function(){ - $scope.ecdapp.isDataLoading = true; - ControllerService.getControllers().then(function(jsonObj) { - if (debug) - $log.debug("verticalComponentController.getControllers succeeded: " + JSON.stringify(jsonObj)); - // Empty - $scope.controllersList.length = 0; - // Refill - jsonObj.filter(function(d) { - $scope.controllersList.push(d); - if (d.selected){ - $scope.parent.blueprint_id = d.name; - $scope.controllerCallDone = true; - } - return; - }); - $scope.ecdapp.isDataLoading = false; - }, function(error) { - $scope.ecdapp.isDataLoading = false; - alert('Failed to load controllers. Please retry.'); - $log.error("verticalComponentController.getControllers failed: " + error); - }); - }; - - $rootScope.$on('controllerChange', function(e, d){ - $scope.parent.blueprint_id = d.name; - }); - - $scope.ecdapp.loadTable = function(status) { - $scope.ecdapp.isDataLoading = true; - - // Empty list and create the root controller item - $scope.orgChartData = []; - - ExecutionService.getExecutionsByStatus(status).then( - function(jsonObj) { - if (jsonObj.error) { - $log.error("verticalComponentController.loadTable failed: " - + jsonObj.error); - $scope.ecdapp.isRequestFailed = true; - $scope.ecdapp.errMsg = jsonObj.error; - } else { - $scope.ecdapp.isRequestFailed = false; - $scope.ecdapp.errMsg = null; - for (var i=0; i < jsonObj.items.length; i++) { - $scope.orgChartData.push(jsonObj.items[i]); - } - $scope.$broadcast('listenEvent', {data: $scope.orgChartData} ); - setTimeout(function(){$('.child-item').popover()}, 0); - } - $scope.status = status; - $scope.ecdapp.isDataLoading = false; - }, - function(error) { - $log.error("verticalComponentController.loadTable failed: " - + error); - $scope.ecdapp.isRequestFailed = true; - $scope.ecdapp.errMsg = error; - $scope.ecdapp.isDataLoading = false; - }); - }; - - $scope.showEcompCInstancesModalPopup = function() { - var modalInstance = $modal.open({ - templateUrl : 'ecompc_instances_popup.html', - controller : 'selectEcompcController', - windowClass: 'modal-docked', - sizeClass: 'modal-medium', - resolve : { - message : function() { - return { items: $scope.controllersList } - } - } - }); - }; - - $scope.showsubDropdown = function(e){ - $('#submenu').toggle(); - e.stopPropagation(); - e.preventDefault(); - } - - $scope.closeSubMenu = function(){ - $('#submenu').css({display:'none'}) - } - - var getOpsUrls = function() { - ControllerService.getOpsUrls().then(function(jsonObj) { - if (jsonObj.error) { - $log.error("executionsViewController.getOpsUrls failed: " + jsonObj.error); - } else { - //$scope.ecdapp.opsUrls = jsonObj; - angular.forEach(jsonObj, function(value, key) { - var found = false; - angular.forEach($rootScope.opsMenu, function(val2, key2, item) { - if (!found) { - if (val2.id === value.id) { - val2.url = value.url; - found = true; - } - } - }); - }); - } - }, function(error) { - $log.error("executionsViewController.getOpsUrls failed: " + error); - }); - /* - $scope.ecdapp.opsUrls = [ - {id: 'cfy', url: 'https://ecompc-orcl-dev-s1.ecomp.idns.cip.att.com/console/login'}, - {id: 'grf', url: 'http://ecompc-grfn-dev-s1.ecomp.idns.cip.att.com:30101/login'}, - {id: 'cnsl', url: 'http://ecompc-cnsl-dev-s1.ecomp.idns.cip.att.com:8500/ui/'}, - {id: 'k8s', url: 'https://zldcmtn23aecc1kpma00.809a89.mtn23a.tci.att.com:6443/ui'}, - {id: 'prom', url: 'http://zldcmtn23aecc1kpma00.809a89.mtn23a.tci.att.com:30102/graph'}, - {id: 'dbcl', url: 'http://zldcdyh1bdcc2dokr04.707507.dyh1b.tci.att.com:8080/dmaap-bc-app/login.htm'}]; - */ - }; - var getAppLabel = function() { ControllerService.getAppLabel().then(function(jsonObj) { if (debug) @@ -438,10 +41,5 @@ appDS2.controller('executionsViewController', function($scope, $rootScope, Contr // Initialize the page getAppLabel(); getTenants(); - //getControllers(); - getOpsUrls(); - //$scope.ecdapp.loadTable('active'); - //$scope.showOrgTable = true; - //$rootScope.activeTabsId = 'cfy'; }); diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_blueprint_table.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_blueprint_table.html index 687c304..3c09687 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_blueprint_table.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_blueprint_table.html @@ -1,6 +1,6 @@ <div id="page-content"> - <h1 class="heading-page" id="blueprints">EOM Inventory > Blueprints</h1> + <h1 class="heading-page" id="blueprints">Inventory > Blueprints</h1> <!-- show progress indicator --> <div ng-show="ecdapp.isDataLoading"> <div class="span" style="margin-bottom:20px;"> @@ -17,13 +17,6 @@ Create <span class="arrow"></span> </a> - <!-- - <button class="btn btn-alt btn-small tooltip-element" data-placement="right" - type="submit" - ng-click="ecdapp.uploadBlueprintModalPopup();"> - Create - <span class="arrow"></span> - </button>--> <span class="tooltip-wrapper"> <span class="tooltip-size-control"> <span id="tooltiptextBtn" role="tooltip" aria-live="polite" aria-hidden="true" class="helpertext" tabindex="-1"> @@ -38,9 +31,9 @@ </span> <div style="float:right;"> <div class="group"> - <button tabindex="-1" class="btn btn-small" title="Reset Filters" type="button" ng-click="ecdapp.loadTable()"><i class="icon-arrows-update-refresh-sync"></i></button> + <button tabindex="-1" class="btn btn-small" title="Reset Filters" type="button" ng-click="ecdapp.loadTable()"><i class="icon-arrows-replay-restart"></i></button> <input tabindex="0" class="btn btn-small" type="text" placeholder="Search Blueprints" ng-model="ecdapp.searchBy"></input> - <button tabindex="1" class="btn btn-small" title="Search" type="button" ng-click="ecdapp.searchTable(ecdapp.searchBy)"><i class="icon-controls-magnifyingglass"></i></button> + <button tabindex="1" class="btn btn-small" title="Search" type="button" ng-click="ecdapp.searchTable(ecdapp.searchBy)"><i class="ion-search"></i></button> </div> </div> </div> @@ -70,7 +63,7 @@ <th b2b-table-header sortable="false" key="created_at" ng-click="ecdapp.sortTable('created')">Created Date</th> <th b2b-table-header sortable="false" key="deployment_ref">Deployments <button style="margin-bottom:-5px; box-shadow:0 0 0 0 rgba(0, 0, 0, 0.15); min-width:0;" tabindex="1" class="btn btn-small" title="Refresh Deployments" type="button" ng-click="ecdapp.updateTable()"> - <i class="icon-arrows-update-refresh-sync"></i> + <i class="icon-arrows-replay-restart"></i> </button> <div ng-show="ecdapp.isSrvcDataLoading"> <div class="span" style="margin-bottom:5px;"> @@ -79,13 +72,6 @@ </div> </div> </th> - <!-- - <th b2b-table-header sortable="false" key="deployment_info" style="margin-left:-10px;">Deployments - <button style="margin-bottom:-5px; box-shadow:0 0 0 0 rgba(0, 0, 0, 0.15); min-width:0;" tabindex="1" class="btn btn-small" title="Refresh Deployments" type="button" ng-click="ecdapp.updateTable()"> - <i class="icon-arrows-update-refresh-sync"></i> - </button> - </th> - --> <th b2b-table-header sortable="false">Actions</th> <th b2b-table-header sortable="false" key="owner" ng-click="ecdapp.sortTable('owner')">Owner</th> <th b2b-table-header sortable="false" key="type_id" ng-click="ecdapp.sortTable('typeId')">ID</th> @@ -114,26 +100,26 @@ </td> <td b2b-table-body > <div class="btn-group btn-actions" style="margin-bottom:0;box-shadow:none;"> - <button type="button" class="btn dropdown-toggle" data-toggle="dropdown" title="More Actions"><i class="icon-controls-moreapplications"></i></button> + <button type="button" class="btn dropdown-toggle" data-toggle="dropdown" title="More Actions"><i class="icon-apps-marketplace"></i></button> <ul class="dropdown-menu"> <li> <div ng-click="ecdapp.viewBlueprintModalPopup(rowData);"> - <i class="icon-people-preview ecd-icon-action"></i><a href="">View</a> + <i class="icon-documents-book ecd-icon-action"></i><a href="">View</a> </div> </li> <li> <div ng-click="ecdapp.exportJson(rowData);"> - <i class="icon-people-preview ecd-icon-action"></i><a href="">Export</a> + <i class="icon-documents-copy ecd-icon-action"></i><a href="">Export</a> </div> </li> <li> <div ng-show="rowData.canDeploy && rowData.deployments.totalCount === 0" ng-click="ecdapp.updateBlueprintModalPopup(rowData);"> - <i class="icon-misc-trash ecd-icon-action"></i><a href="">Update</a> + <i class="icon-misc-pen ecd-icon-action"></i><a href="">Update</a> </div> </li> <li> <div ng-show="rowData.canDeploy" ng-click="ecdapp.deployBlueprintModalPopup(rowData);"> - <i class="icon-datanetwork-cloudupload ecd-icon-action"></i><a href="">Deploy</a> + <i class="icon-arrows-download ecd-icon-action"></i><a href="">Deploy</a> </div> </li> <li> diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_deployment_table.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_deployment_table.html index 3e404b5..5d76bb4 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_deployment_table.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_deployment_table.html @@ -1,6 +1,6 @@ <div id="page-content"> - <h1 class="heading-page" id="deployments-page">EOM Inventory > Deployments</h1> + <h1 class="heading-page" id="deployments-page">Inventory > Deployments</h1> <!-- show progress indicator --> <div ng-show="ecdapp.isDataLoading"> @@ -14,9 +14,9 @@ <div id="button-search-row"> <div style="float:right;"> <div class="group"> - <button tabindex="-1" class="btn btn-small" title="Reset Filters" type="button" ng-click="ecdapp.loadTable()"><i class="icon-arrows-update-refresh-sync"></i></button> + <button tabindex="-1" class="btn btn-small" title="Reset Filters" type="button" ng-click="ecdapp.loadTable()"><i class="icon-arrows-replay-restart"></i></button> <input tabindex="0" class="btn btn-small" type="text" placeholder="Search Deployments" ng-model="ecdapp.searchBy"></input> - <button tabindex="1" class="btn btn-small" type="button" ng-click="ecdapp.searchTable(ecdapp.searchBy)"><i class="icon-controls-magnifyingglass"></i></button> + <button tabindex="1" class="btn btn-small" type="button" ng-click="ecdapp.searchTable(ecdapp.searchBy)"><i class="ion-search"></i></button> </div> </div> </div> @@ -41,7 +41,7 @@ <th b2b-table-header sortable="false" key="updated" ng-click="ecdapp.sortTable('modified')">Modified</th> <th b2b-table-header sortable="false" key="tenant" style="background-color:#dbefef;">Tenant <button style="margin-bottom:-5px; box-shadow:0 0 0 0 rgba(0, 0, 0, 0.15); min-width:0;" tabindex="1" class="btn btn-small" title="Refresh Tenant and Status" type="button" ng-click="ecdapp.updateTable()"> - <i class="icon-arrows-update-refresh-sync"></i> + <i class="icon-arrows-replay-restart"></i> </button> <div ng-show="ecdapp.isSrvcDataLoading"> <div class="span" style="margin-bottom:5px;"> @@ -76,26 +76,26 @@ </td> <td b2b-table-body ng-class="{'td-error' : rowData.statusInfo === undefined}"> <div class="btn-group btn-actions" style="margin-bottom:0;box-shadow:none;"> - <button type="button" class="btn dropdown-toggle" data-toggle="dropdown" title="More Actions"><i class="icon-controls-moreapplications"></i></button> + <button type="button" class="btn dropdown-toggle" data-toggle="dropdown" title="More Actions"><i class="icon-apps-marketplace"></i></button> <ul class="dropdown-menu"> <li> <div ng-click="ecdapp.viewBlueprintDataModal(rowData);"> - <i class="icon-documents-document ecd-icon-action"></i><a href="">View blueprint</a> + <i class="icon-documents-book ecd-icon-action"></i><a href="">View blueprint</a> </div> </li> <li> <div ng-click="ecdapp.viewDeploymentInputsModalPopup(rowData);"> - <i class="icon-misc-operations ecd-icon-action"></i><a href="">View Inputs</a> + <i class="icoDocuments-report ecd-icon-action"></i><a href="">View Inputs</a> </div> </li> <li> <div ng-click="ecdapp.viewDeploymentExecutionsModalPopup(rowData);"> - <i class="icon-people-preview ecd-icon-action"></i><a href="">View executions</a> + <i class="icon-overview ecd-icon-action"></i><a href="">View executions</a> </div> </li> <li> <div ng-show="rowData.canDeploy && rowData.statusInfo.status === 'completed'" ng-click="ecdapp.updateDeploymentModalPopup(rowData);"> - <i class="icon-misc-operations ecd-icon-action"></i><a href="">Update deployment</a> + <i class="icon-misc-pen ecd-icon-action"></i><a href="">Update deployment</a> </div> </li> <li> @@ -105,17 +105,17 @@ </li> <li> <div ng-show="rowData.statusInfo.is_helm && rowData.statusInfo.helm_status && rowData.statusInfo.status === 'completed'" ng-click="ecdapp.checkHelmStatus(rowData);"> - <i class="icon-misc-operations ecd-icon-action"></i><a href="">Helm Status</a> + <i class="icoDocuments-report ecd-icon-action"></i><a href="">Helm Status</a> </div> </li> <li> <div ng-show="rowData.canDeploy && rowData.statusInfo.is_helm && rowData.statusInfo.status === 'completed'" ng-click="ecdapp.upgradeDeploymentModalPopup(rowData);"> - <i class="icon-datanetwork-contentdelivery ecd-icon-action"></i><a href="#">Helm upgrade deployment</a> + <i class="icon-controls-down ecd-icon-action"></i><a href="#">Helm upgrade deployment</a> </div> </li> <li> <div ng-show="rowData.canDeploy && rowData.statusInfo.is_helm && rowData.statusInfo.status === 'completed'" ng-click="ecdapp.rollbackDeploymentModalPopup(rowData);"> - <i class="icon-datanetwork-software ecd-icon-action"></i><a href="#">Helm rollback deployment</a> + <i class="icon-controls-up"></i><a href="#">Helm rollback deployment</a> </div> </li> <li> diff --git a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_execution_popups.html b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_execution_popups.html index 7fa380c..4b870dc 100644 --- a/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_execution_popups.html +++ b/ccsdk-app-overlay/src/main/webapp/app/ccsdk/inventory/inventory_execution_popups.html @@ -123,7 +123,7 @@ <th b2b-table-header key="workflow_id">Workflow ID</th> <th b2b-table-header key="id">ID</th> <th b2b-table-header key="status">Status</th> - <th b2b-table-header sortable="false"><i class="icon-controls-gear ecd-icon-display"></i></th> + <th b2b-table-header sortable="false"><i class="icon-settings ecd-icon-display"></i></th> </tr> </thead> @@ -175,7 +175,7 @@ </td> <td b2b-table-body ng-if="rowData.status == 'started'"> <div ng-click="ecdapp.cancelExecutionModalPopup(rowData, ecdapp.ui_tenant);"> - <a href="" title="Cancel execution" class="icon-controls-stop ecd-icon-action"></a> + <a href="" title="Cancel execution" class="ion-stop ecd-icon-action"></a> </div> </td> </tr> @@ -1,48 +1,50 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <!-- Add oparent parent -->
- <parent>
- <groupId>org.onap.oparent</groupId>
- <artifactId>oparent</artifactId>
- <version>1.2.3</version>
- </parent>
- <!-- Maven parent project for convenience of building and cleaning -->
- <groupId>org.onap.ccsdk.dashboard</groupId>
- <artifactId>ccsdk-app-parent</artifactId>
- <version>1.1.0-SNAPSHOT</version>
- <packaging>pom</packaging>
- <name>ccsdk-dashboard</name>
-
- <modules>
- <module>ccsdk-app-common</module>
- <module>ccsdk-app-overlay</module>
- <!-- <module>ccsdk-app-os</module> -->
- </modules>
- <distributionManagement>
- <repository>
- <id>ecomp-releases</id>
- <url>${onap.nexus.url}/content/repositories/releases</url>
- </repository>
- <snapshotRepository>
- <id>ecomp-snapshots</id>
- <url>${onap.nexus.url}/content/repositories/snapshots</url>
- </snapshotRepository>
- </distributionManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>2.8</version>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
-</project>
+<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <!-- Add oparent parent --> + + <parent> + <groupId>org.onap.oparent</groupId> + <artifactId>oparent</artifactId> + <version>1.2.3</version> + </parent> + + <!-- Maven parent project for convenience of building and cleaning --> + <groupId>org.onap.ccsdk.dashboard</groupId> + <artifactId>ccsdk-app-parent</artifactId> + <version>1.1.0-SNAPSHOT</version> + <packaging>pom</packaging> + <name>ccsdk-dashboard</name> + + <modules> + <module>ccsdk-app-common</module> + <module>ccsdk-app-overlay</module> + <module>ccsdk-app-os</module> + </modules> + <distributionManagement> + <repository> + <id>ecomp-releases</id> + <url>${onap.nexus.url}/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>ecomp-snapshots</id> + <url>${onap.nexus.url}/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <version>2.8</version> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + </plugins> + </build> + +</project> |