* ============LICENSE_START=======================================================
* ONAP PAP
* ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019-2020, 2022 Nordix Foundation.
+ * Modifications Copyright (C) 2021-2022 Bell Canada. 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.
package org.onap.policy.pap.main.rest.e2e;
+import io.micrometer.core.instrument.MeterRegistry;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
-
+import java.util.Map;
+import java.util.Optional;
+import lombok.Getter;
import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
import org.onap.policy.common.parameters.ValidationResult;
import org.onap.policy.common.utils.coder.Coder;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.PrometheusUtils;
import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.base.PfConceptKey;
import org.onap.policy.models.pdp.concepts.PdpGroup;
import org.onap.policy.models.pdp.concepts.PdpGroups;
+import org.onap.policy.models.pdp.concepts.PdpPolicyStatus;
+import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.State;
import org.onap.policy.models.pdp.concepts.PdpStatistics;
-import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
import org.onap.policy.pap.main.PolicyPapRuntimeException;
-import org.onap.policy.pap.main.parameters.PapParameterGroup;
+import org.onap.policy.pap.main.repository.ToscaServiceTemplateRepository;
import org.onap.policy.pap.main.rest.CommonPapRestServer;
+import org.onap.policy.pap.main.service.PdpGroupService;
+import org.onap.policy.pap.main.service.PdpStatisticsService;
+import org.onap.policy.pap.main.service.PolicyStatusService;
+import org.onap.policy.pap.main.service.ToscaServiceTemplateService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ActiveProfiles;
import org.yaml.snakeyaml.Yaml;
-public class End2EndBase extends CommonPapRestServer {
+@ActiveProfiles({ "test-e2e", "default" })
+public abstract class End2EndBase extends CommonPapRestServer {
private static final Logger logger = LoggerFactory.getLogger(End2EndBase.class);
private static final Coder coder = new StandardCoder();
private static final Yaml yaml = new Yaml();
- /**
- * DB connection. This is kept open until {@link #stop()} is invoked so that the in-memory DB is not destroyed.
- */
- private static PolicyModelsProvider dbConn;
-
- /**
- * DAO provider factory.
- */
- private static PolicyModelsProviderFactoryWrapper daoFactory;
-
/**
* Context - should be initialized by setUp() method.
*/
protected End2EndContext context = null;
+ @Autowired
+ public PdpGroupService pdpGroupService;
- /**
- * Starts Main and connects to the DB.
- *
- * @throws Exception if an error occurs
- */
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- setUpBeforeClass(true);
- }
+ @Autowired
+ public PdpStatisticsService pdpStatisticsService;
- /**
- * Starts Main, if specified, and connects to the DB.
- *
- * @param shouldStart {@code true} if Main should be started, {@code false} otherwise
- * @throws Exception if an error occurs
- */
- public static void setUpBeforeClass(final boolean shouldStart) throws Exception {
- CommonPapRestServer.setUpBeforeClass(shouldStart);
+ @Autowired
+ private ToscaServiceTemplateRepository serviceTemplateRepository;
- final PapParameterGroup params = new StandardCoder().decode(new File(CONFIG_FILE), PapParameterGroup.class);
- daoFactory = new PolicyModelsProviderFactoryWrapper(params.getDatabaseProviderParameters());
- dbConn = daoFactory.create();
- }
+ @Autowired
+ public PolicyStatusService policyStatusService;
- /**
- * Tears down.
- */
- @AfterClass
- public static void tearDownAfterClass() {
- try {
- dbConn.close();
- } catch (final PfModelException e) {
- logger.warn("failed to close the DB", e);
- }
+ @Autowired
+ public ToscaServiceTemplateService toscaService;
- try {
- daoFactory.close();
- } catch (final Exception e) {
- logger.warn("failed to close DAO factory", e);
- }
+ @Autowired
+ public MeterRegistry meterRegistry;
- CommonPapRestServer.teardownAfterClass();
- }
+ @Getter
+ private final String topicPolicyPdpPap = "pdp-pap-topic";
+
+ @Getter
+ private final String topicPolicyNotification = "notification-topic";
+
+ public String deploymentsCounterName = "pap_" + PrometheusUtils.POLICY_DEPLOYMENTS_METRIC;
+ public String[] deploymentSuccessTag = {PrometheusUtils.OPERATION_METRIC_LABEL, PrometheusUtils.DEPLOY_OPERATION,
+ PrometheusUtils.STATUS_METRIC_LABEL, State.SUCCESS.name()};
+ public String[] unDeploymentSuccessTag = {PrometheusUtils.OPERATION_METRIC_LABEL,
+ PrometheusUtils.UNDEPLOY_OPERATION, PrometheusUtils.STATUS_METRIC_LABEL, State.SUCCESS.name()};
/**
* Tears down.
}
context = null;
}
-
+ meterRegistry.clear();
super.tearDown();
}
* Adds Tosca Policy Types to the DB.
*
* @param yamlFile name of the YAML file specifying the data to be loaded
- * @throws PfModelException if a DAO error occurs
*/
- public static void addToscaPolicyTypes(final String yamlFile) throws PfModelException {
+ public void addToscaPolicyTypes(final String yamlFile) {
final ToscaServiceTemplate serviceTemplate = loadYamlFile(yamlFile, ToscaServiceTemplate.class);
- dbConn.createPolicyTypes(serviceTemplate);
+ JpaToscaServiceTemplate jpaToscaServiceTemplate = mergeWithExistingTemplate(serviceTemplate);
+ serviceTemplateRepository.save(jpaToscaServiceTemplate);
}
/**
* Adds Tosca Policies to the DB.
*
* @param yamlFile name of the YAML file specifying the data to be loaded
- * @throws PfModelException if a DAO error occurs
*/
- public static void addToscaPolicies(final String yamlFile) throws PfModelException {
+ public void addToscaPolicies(final String yamlFile) {
final ToscaServiceTemplate serviceTemplate = loadYamlFile(yamlFile, ToscaServiceTemplate.class);
- dbConn.createPolicies(serviceTemplate);
+ JpaToscaServiceTemplate jpaToscaServiceTemplate = mergeWithExistingTemplate(serviceTemplate);
+ serviceTemplateRepository.save(jpaToscaServiceTemplate);
+ }
+
+ private JpaToscaServiceTemplate mergeWithExistingTemplate(ToscaServiceTemplate serviceTemplate) {
+ JpaToscaServiceTemplate jpaToscaServiceTemplate = new JpaToscaServiceTemplate(serviceTemplate);
+ Optional<JpaToscaServiceTemplate> dbServiceTemplateOpt = serviceTemplateRepository
+ .findById(new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME, JpaToscaServiceTemplate.DEFAULT_VERSION));
+ if (dbServiceTemplateOpt.isPresent()) {
+ JpaToscaServiceTemplate dbServiceTemplate = dbServiceTemplateOpt.get();
+ if (dbServiceTemplate.getPolicyTypes() != null) {
+ jpaToscaServiceTemplate.setPolicyTypes(dbServiceTemplate.getPolicyTypes());
+ }
+ if (dbServiceTemplate.getDataTypes() != null) {
+ jpaToscaServiceTemplate.setDataTypes(dbServiceTemplate.getDataTypes());
+ }
+ if (dbServiceTemplate.getTopologyTemplate() != null) {
+ jpaToscaServiceTemplate.setTopologyTemplate(dbServiceTemplate.getTopologyTemplate());
+ }
+ }
+
+ return jpaToscaServiceTemplate;
}
/**
* Adds PDP groups to the DB.
*
* @param jsonFile name of the JSON file specifying the data to be loaded
- * @throws PfModelException if a DAO error occurs
*/
- public static void addGroups(final String jsonFile) throws PfModelException {
+ public void addGroups(final String jsonFile) {
final PdpGroups groups = loadJsonFile(jsonFile, PdpGroups.class);
final ValidationResult result = groups.validatePapRest();
throw new PolicyPapRuntimeException("cannot init DB groups from " + jsonFile + ":\n" + result.getResult());
}
- dbConn.createPdpGroups(groups.getGroups());
+ pdpGroupService.createPdpGroups(groups.getGroups());
}
/**
* Fetch PDP groups from the DB.
*
* @param name name of the pdpGroup
- * @throws PfModelException if a DAO error occurs
*/
- public static List<PdpGroup> fetchGroups(final String name) throws PfModelException {
- return dbConn.getPdpGroups(name);
+ public List<PdpGroup> fetchGroups(final String name) {
+ return pdpGroupService.getPdpGroups(name);
}
/**
* @param instanceId name of the pdpStatistics
* @param groupName name of the pdpGroup
* @param subGroupName name of the pdpSubGroup
- * @throws PfModelException if a DAO error occurs
*/
- public static List<PdpStatistics> fetchPdpStatistics(final String instanceId, final String groupName,
- final String subGroupName) throws PfModelException {
- return dbConn.getFilteredPdpStatistics(instanceId, groupName, subGroupName, null, null, null, 0);
+ public Map<String, Map<String, List<PdpStatistics>>> fetchPdpStatistics(final String instanceId,
+ final String groupName, final String subGroupName) {
+ return pdpStatisticsService.fetchDatabaseStatistics(groupName, subGroupName, instanceId, 100, null, null);
+ }
+
+ /**
+ * Adds PdpPolicyStatus records to the DB.
+ *
+ * @param jsonFile name of the JSON file specifying the data to be loaded
+ */
+ public void addPdpPolicyStatus(final String jsonFile) {
+ final PolicyStatusRecords data = loadJsonFile(jsonFile, PolicyStatusRecords.class);
+ policyStatusService.cudPolicyStatus(data.records, null, null);
}
/**
throw new RuntimeException(e);
}
}
+
+ public class PolicyStatusRecords {
+ private List<PdpPolicyStatus> records;
+ }
}