LoopLog repository 11/84111/8
authorsebdet <sebastien.determe@intl.att.com>
Wed, 3 Apr 2019 15:07:34 +0000 (17:07 +0200)
committersebdet <sebastien.determe@intl.att.com>
Fri, 5 Apr 2019 12:54:32 +0000 (14:54 +0200)
Introduction of the loop log repo + refactoring

Issue-ID: CLAMP-303
Change-Id: I3e806993d35f82fd9258e55592391a48eb7e199f
Signed-off-by: sebdet <sebastien.determe@intl.att.com>
18 files changed:
src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java
src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java
src/main/java/org/onap/clamp/loop/Loop.java
src/main/java/org/onap/clamp/loop/LoopController.java
src/main/java/org/onap/clamp/loop/LoopService.java
src/main/java/org/onap/clamp/loop/log/LoopLog.java
src/main/java/org/onap/clamp/loop/log/LoopLogService.java [new file with mode: 0644]
src/main/java/org/onap/clamp/policy/Policy.java
src/main/java/org/onap/clamp/policy/PolicyService.java
src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java
src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java
src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java
src/test/java/org/onap/clamp/loop/LoopToJsonTest.java
src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java [new file with mode: 0644]
src/test/resources/tosca/micro-service-policy-payload.json [new file with mode: 0644]
src/test/resources/tosca/micro-service-policy-properties.json [new file with mode: 0644]

index 7447fba..f365459 100644 (file)
@@ -27,7 +27,6 @@ import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 
 import java.util.Collections;
 import java.util.HashSet;
@@ -124,7 +123,7 @@ public class BlueprintParser {
             if (properties.has(POLICYID)) {
                 JsonObject policyIdObj = properties.get(POLICYID).getAsJsonObject();
                 if (policyIdObj.has(POLICY_TYPEID)) {
-                   return policyIdObj.get(POLICY_TYPEID).getAsString();
+                    return policyIdObj.get(POLICY_TYPEID).getAsString();
                 }
             }
         }
index 05d5c48..9bb9e01 100644 (file)
@@ -163,8 +163,9 @@ public class CsarInstallerImpl implements CsarInstaller {
                 Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(),
                     csar.getSdcNotification().getServiceVersion(),
                     blueprintArtifact.getResourceAttached().getResourceInstanceName(),
-                    blueprintArtifact.getBlueprintArtifactName()), microService.getModelType(),
-                csar.getPolicyModelYaml().orElse(""), false, new HashSet<>(Arrays.asList(newLoop)), microService.getBlueprintName());
+                    blueprintArtifact.getBlueprintArtifactName()),
+                microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false,
+                new HashSet<>(Arrays.asList(newLoop)));
 
             newSet.add(microServicePolicy);
             microService.setMappedNameJpa(microServicePolicy.getName());
index e62874a..a24d344 100644 (file)
@@ -134,7 +134,7 @@ public class Loop implements Serializable {
         this.name = name;
     }
 
-    String getDcaeDeploymentId() {
+    public String getDcaeDeploymentId() {
         return dcaeDeploymentId;
     }
 
@@ -142,7 +142,7 @@ public class Loop implements Serializable {
         this.dcaeDeploymentId = dcaeDeploymentId;
     }
 
-    String getDcaeDeploymentStatusUrl() {
+    public String getDcaeDeploymentStatusUrl() {
         return dcaeDeploymentStatusUrl;
     }
 
@@ -150,7 +150,7 @@ public class Loop implements Serializable {
         this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl;
     }
 
-    String getSvgRepresentation() {
+    public String getSvgRepresentation() {
         return svgRepresentation;
     }
 
@@ -158,7 +158,7 @@ public class Loop implements Serializable {
         this.svgRepresentation = svgRepresentation;
     }
 
-    String getBlueprint() {
+    public String getBlueprint() {
         return blueprint;
     }
 
@@ -166,7 +166,7 @@ public class Loop implements Serializable {
         this.blueprint = blueprint;
     }
 
-    LoopState getLastComputedState() {
+    public LoopState getLastComputedState() {
         return lastComputedState;
     }
 
@@ -174,7 +174,7 @@ public class Loop implements Serializable {
         this.lastComputedState = lastComputedState;
     }
 
-    Set<OperationalPolicy> getOperationalPolicies() {
+    public Set<OperationalPolicy> getOperationalPolicies() {
         return operationalPolicies;
     }
 
@@ -182,7 +182,7 @@ public class Loop implements Serializable {
         this.operationalPolicies = operationalPolicies;
     }
 
-    Set<MicroServicePolicy> getMicroServicePolicies() {
+    public Set<MicroServicePolicy> getMicroServicePolicies() {
         return microServicePolicies;
     }
 
@@ -190,7 +190,7 @@ public class Loop implements Serializable {
         this.microServicePolicies = microServicePolicies;
     }
 
-    JsonObject getGlobalPropertiesJson() {
+    public JsonObject getGlobalPropertiesJson() {
         return globalPropertiesJson;
     }
 
@@ -198,7 +198,7 @@ public class Loop implements Serializable {
         this.globalPropertiesJson = globalPropertiesJson;
     }
 
-    Set<LoopLog> getLoopLogs() {
+    public Set<LoopLog> getLoopLogs() {
         return loopLogs;
     }
 
@@ -221,7 +221,7 @@ public class Loop implements Serializable {
         log.setLoop(this);
     }
 
-    String getDcaeBlueprintId() {
+    public String getDcaeBlueprintId() {
         return dcaeBlueprintId;
     }
 
@@ -229,7 +229,7 @@ public class Loop implements Serializable {
         this.dcaeBlueprintId = dcaeBlueprintId;
     }
 
-    JsonObject getModelPropertiesJson() {
+    public JsonObject getModelPropertiesJson() {
         return modelPropertiesJson;
     }
 
index a02fa93..b862780 100644 (file)
@@ -24,7 +24,6 @@
 package org.onap.clamp.loop;
 
 import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
 
@@ -42,9 +41,9 @@ public class LoopController {
 
     private final LoopService loopService;
     private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken<List<OperationalPolicy>>() {
-       }.getType();
+    }.getType();
     private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() {
-       }.getType();
+    }.getType();
 
     @Autowired
     public LoopController(LoopService loopService) {
@@ -61,32 +60,41 @@ public class LoopController {
 
     /**
      * Update the Operational Policy properties.
-     * @param loopName The loop name
-     * @param operationalPoliciesJson The new Operational Policy properties
+     *
+     * @param loopName
+     *        The loop name
+     * @param operationalPoliciesJson
+     *        The new Operational Policy properties
      * @return The updated loop
      */
     public Loop updateOperationalPolicies(String loopName, JsonArray operationalPoliciesJson) {
-        List<OperationalPolicy> operationalPolicies = JsonUtils.GSON
-            .fromJson(operationalPoliciesJson, OPERATIONAL_POLICY_TYPE);
+        List<OperationalPolicy> operationalPolicies = JsonUtils.GSON.fromJson(operationalPoliciesJson,
+            OPERATIONAL_POLICY_TYPE);
         return loopService.updateAndSaveOperationalPolicies(loopName, operationalPolicies);
     }
 
     /**
      * Update the whole array of MicroService policies properties
-     * @param loopName The loop name
-     * @param microServicePoliciesJson The array of all MicroService policies properties
+     *
+     * @param loopName
+     *        The loop name
+     * @param microServicePoliciesJson
+     *        The array of all MicroService policies properties
      * @return The updated loop
      */
     public Loop updateMicroservicePolicies(String loopName, JsonArray microServicePoliciesJson) {
-        List<MicroServicePolicy> microservicePolicies = JsonUtils.GSON
-            .fromJson(microServicePoliciesJson, MICROSERVICE_POLICY_TYPE);
+        List<MicroServicePolicy> microservicePolicies = JsonUtils.GSON.fromJson(microServicePoliciesJson,
+            MICROSERVICE_POLICY_TYPE);
         return loopService.updateAndSaveMicroservicePolicies(loopName, microservicePolicies);
     }
 
     /**
      * Update the global properties
-     * @param loopName The loop name
-     * @param globalProperties The updated global properties
+     *
+     * @param loopName
+     *        The loop name
+     * @param globalProperties
+     *        The updated global properties
      * @return The updated loop
      */
     public Loop updateGlobalPropertiesJson(String loopName, JsonObject globalProperties) {
@@ -95,8 +103,11 @@ public class LoopController {
 
     /**
      * Update one MicroService policy properties
-     * @param loopName The loop name
-     * @param newMicroservicePolicy The new MicroService policy properties
+     *
+     * @param loopName
+     *        The loop name
+     * @param newMicroservicePolicy
+     *        The new MicroService policy properties
      * @return The updated MicroService policy
      */
     public MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) {
@@ -105,11 +116,12 @@ public class LoopController {
 
     /**
      * Get the SVG representation of the loop
-     * @param loopName The loop name
+     * 
+     * @param loopName
+     *        The loop name
      * @return The SVG representation
      */
     public String getSVGRepresentation(String loopName) {
-        return loopService.getClosedLoopModelSVG(loopName);
-
+        return loopService.getLoop(loopName).getSvgRepresentation();
     }
 }
index 34e1b4b..8d61b87 100644 (file)
 
 package org.onap.clamp.loop;
 
+import com.google.gson.JsonObject;
+
 import java.util.List;
 import java.util.Set;
 
-import com.google.gson.JsonObject;
-
 import javax.persistence.EntityNotFoundException;
 
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.clamp.policy.microservice.MicroservicePolicyService;
 import org.onap.clamp.policy.operational.OperationalPolicy;
 import org.onap.clamp.policy.operational.OperationalPolicyService;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
 @Service
+@Component
 public class LoopService {
 
     private final LoopsRepository loopsRepository;
@@ -46,15 +48,14 @@ public class LoopService {
     /**
      * Constructor.
      */
-    public LoopService(LoopsRepository loopsRepository,
-        MicroservicePolicyService microservicePolicyService,
+    public LoopService(LoopsRepository loopsRepository, MicroservicePolicyService microservicePolicyService,
         OperationalPolicyService operationalPolicyService) {
         this.loopsRepository = loopsRepository;
         this.microservicePolicyService = microservicePolicyService;
         this.operationalPolicyService = operationalPolicyService;
     }
 
-    public Loop saveOrUpdateLoop(Loop loop) {
+    Loop saveOrUpdateLoop(Loop loop) {
         return loopsRepository.save(loop);
     }
 
@@ -63,61 +64,36 @@ public class LoopService {
     }
 
     public Loop getLoop(String loopName) {
-        return loopsRepository
-            .findById(loopName)
-            .orElse(null);
-    }
-
-    String getClosedLoopModelSVG(String loopName) {
-        Loop closedLoopByName = findClosedLoopByName(loopName);
-        return closedLoopByName.getSvgRepresentation();
+        return loopsRepository.findById(loopName).orElse(null);
     }
 
     Loop updateAndSaveOperationalPolicies(String loopName, List<OperationalPolicy> newOperationalPolicies) {
         Loop loop = findClosedLoopByName(loopName);
-        updateOperationalPolicies(loop, newOperationalPolicies);
+        Set<OperationalPolicy> newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies);
+        loop.setOperationalPolicies(newPolicies);
         return loopsRepository.save(loop);
     }
 
     Loop updateAndSaveMicroservicePolicies(String loopName, List<MicroServicePolicy> newMicroservicePolicies) {
         Loop loop = findClosedLoopByName(loopName);
-        updateMicroservicePolicies(loop, newMicroservicePolicies);
+        Set<MicroServicePolicy> newPolicies = microservicePolicyService.updatePolicies(loop, newMicroservicePolicies);
+        loop.setMicroServicePolicies(newPolicies);
         return loopsRepository.save(loop);
     }
 
     Loop updateAndSaveGlobalPropertiesJson(String loopName, JsonObject newGlobalPropertiesJson) {
         Loop loop = findClosedLoopByName(loopName);
-        updateGlobalPropertiesJson(loop, newGlobalPropertiesJson);
+        loop.setGlobalPropertiesJson(newGlobalPropertiesJson);
         return loopsRepository.save(loop);
     }
 
     MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) {
         Loop loop = findClosedLoopByName(loopName);
-        MicroServicePolicy newPolicies = microservicePolicyService
-                .getAndUpdateMicroServicePolicy(loop, newMicroservicePolicy);
+        MicroServicePolicy newPolicies = microservicePolicyService.getAndUpdateMicroServicePolicy(loop,
+            newMicroservicePolicy);
         return newPolicies;
     }
 
-    private Loop updateOperationalPolicies(Loop loop, List<OperationalPolicy> newOperationalPolicies) {
-        Set<OperationalPolicy> newPolicies = operationalPolicyService
-                .updatePolicies(loop, newOperationalPolicies);
-
-        loop.setOperationalPolicies(newPolicies);
-        return loop;
-    }
-
-    private Loop updateMicroservicePolicies(Loop loop, List<MicroServicePolicy> newMicroservicePolicies) {
-        Set<MicroServicePolicy> newPolicies = microservicePolicyService
-                .updatePolicies(loop, newMicroservicePolicies);
-        loop.setMicroServicePolicies(newPolicies);
-        return loop;
-    }
-
-    private Loop updateGlobalPropertiesJson(Loop loop, JsonObject newGlobalPropertiesJson) {
-        loop.setGlobalPropertiesJson(newGlobalPropertiesJson);
-        return loop;
-    }
-
     private Loop findClosedLoopByName(String loopName) {
         return loopsRepository.findById(loopName)
             .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName));
index 0c51c0c..3edb2ee 100644 (file)
@@ -40,6 +40,7 @@ import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
+
 import org.onap.clamp.loop.Loop;
 
 /**
@@ -79,6 +80,15 @@ public class LoopLog implements Serializable {
     @Column(name = "log_instant", nullable = false)
     private Instant logInstant = Instant.now().truncatedTo(ChronoUnit.SECONDS);
 
+    public LoopLog() {
+    }
+
+    public LoopLog(String message, LogType logType, Loop loop) {
+        this.message = message;
+        this.logType = logType;
+        this.loop = loop;
+    }
+
     public Long getId() {
         return id;
     }
diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLogService.java b/src/main/java/org/onap/clamp/loop/log/LoopLogService.java
new file mode 100644 (file)
index 0000000..b593b41
--- /dev/null
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.loop.log;
+
+import org.onap.clamp.loop.Loop;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LoopLogService {
+
+    private final LoopLogRepository repository;
+
+    @Autowired
+    public LoopLogService(LoopLogRepository repository) {
+        this.repository = repository;
+    }
+
+    public void addLog(String message, String logType, Loop loop) {
+        repository.save(new LoopLog(message, LogType.valueOf(logType), loop));
+    }
+}
index 683881b..f4efab0 100644 (file)
@@ -31,13 +31,21 @@ public interface Policy {
 
     JsonObject getJsonRepresentation();
 
+    String createPolicyPayload();
+
     /**
      * Generate the policy name.
-     * @param policyType The policy type
-     * @param serviceName The service name
-     * @param serviceVersion The service version
-     * @param resourceName The resource name
-     * @param blueprintFilename The blueprint file name
+     *
+     * @param policyType
+     *        The policy type
+     * @param serviceName
+     *        The service name
+     * @param serviceVersion
+     *        The service version
+     * @param resourceName
+     *        The resource name
+     * @param blueprintFilename
+     *        The blueprint file name
      * @return The generated policy name
      */
     static String generatePolicyName(String policyType, String serviceName, String serviceVersion, String resourceName,
index 05785c0..ae15f86 100644 (file)
@@ -25,12 +25,12 @@ package org.onap.clamp.policy;
 
 import java.util.List;
 import java.util.Set;
+
 import org.onap.clamp.loop.Loop;
 
 public interface PolicyService<T extends Policy> {
 
-    Set<T> updatePolicies(Loop loop,
-        List<T> newMicroservicePolicies);
+    Set<T> updatePolicies(Loop loop, List<T> newPolicies);
 
     boolean isExisting(String policyName);
 }
index c2c60c9..332b20a 100644 (file)
 
 package org.onap.clamp.policy.microservice;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.annotations.Expose;
 
 import java.io.Serializable;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Id;
 import javax.persistence.ManyToMany;
 import javax.persistence.Table;
@@ -39,11 +44,13 @@ import javax.persistence.Table;
 import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
 import org.hibernate.annotations.TypeDefs;
+import org.json.JSONObject;
 import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor;
 import org.onap.clamp.clds.util.JsonUtils;
 import org.onap.clamp.dao.model.jsontype.StringJsonUserType;
 import org.onap.clamp.loop.Loop;
 import org.onap.clamp.policy.Policy;
+import org.yaml.snakeyaml.Yaml;
 
 @Entity
 @Table(name = "micro_service_policies")
@@ -63,10 +70,6 @@ public class MicroServicePolicy implements Serializable, Policy {
     @Column(nullable = false, name = "model_type")
     private String modelType;
 
-    @Expose
-    @Column(nullable = false, name = "blueprint_name")
-    private String blueprintName;
-
     @Expose
     @Type(type = "json")
     @Column(columnDefinition = "json", name = "properties")
@@ -84,7 +87,7 @@ public class MicroServicePolicy implements Serializable, Policy {
     @Column(columnDefinition = "json", name = "json_representation", nullable = false)
     private JsonObject jsonRepresentation;
 
-    @ManyToMany(mappedBy = "microServicePolicies")
+    @ManyToMany(mappedBy = "microServicePolicies", fetch = FetchType.EAGER)
     private Set<Loop> usedByLoops = new HashSet<>();
 
     public MicroServicePolicy() {
@@ -92,15 +95,22 @@ public class MicroServicePolicy implements Serializable, Policy {
     }
 
     /**
-     * The constructor.
-     * @param name The name of the MicroService
-     * @param type The model type of the MicroService
-     * @param blueprintName The name in the blueprint
-     * @param policyTosca The policy Tosca of the MicroService
-     * @param shared The flag indicate whether the MicroService is shared
-     * @param usedByLoops The list of loops that uses this MicroService
+     * The constructor that create the json representation from the policyTosca
+     * using the ToscaYamlToJsonConvertor.
+     *
+     * @param name
+     *        The name of the MicroService
+     * @param type
+     *        The model type of the MicroService
+     * @param policyTosca
+     *        The policy Tosca of the MicroService
+     * @param shared
+     *        The flag indicate whether the MicroService is shared
+     * @param usedByLoops
+     *        The list of loops that uses this MicroService
      */
-    public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, Set<Loop> usedByLoops, String blueprintName) {
+    public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared,
+        Set<Loop> usedByLoops) {
         this.name = name;
         this.modelType = modelType;
         this.policyTosca = policyTosca;
@@ -108,28 +118,39 @@ public class MicroServicePolicy implements Serializable, Policy {
         this.jsonRepresentation = JsonUtils.GSON_JPA_MODEL
             .fromJson(new ToscaYamlToJsonConvertor(null).parseToscaYaml(policyTosca), JsonObject.class);
         this.usedByLoops = usedByLoops;
-        this.blueprintName = blueprintName;
+    }
+
+    private JsonObject createJsonFromPolicyTosca() {
+        Map<String, Object> map = new Yaml().load(this.getPolicyTosca());
+        JSONObject jsonObject = new JSONObject(map);
+        return new Gson().fromJson(jsonObject.toString(), JsonObject.class);
     }
 
     /**
-     * The constructor.
-     * @param name The name of the MicroService
-     * @param type The model type of the MicroService
-     * @param blueprintName The name in the blueprint
-     * @param policyTosca The policy Tosca of the MicroService
-     * @param shared The flag indicate whether the MicroService is shared
-     * @param jsonRepresentation The UI representation in json format
-     * @param usedByLoops The list of loops that uses this MicroService
+     * The constructor that does not make use of ToscaYamlToJsonConvertor but take
+     * the jsonRepresentation instead.
+     *
+     * @param name
+     *        The name of the MicroService
+     * @param type
+     *        The model type of the MicroService
+     * @param policyTosca
+     *        The policy Tosca of the MicroService
+     * @param shared
+     *        The flag indicate whether the MicroService is shared
+     * @param jsonRepresentation
+     *        The UI representation in json format
+     * @param usedByLoops
+     *        The list of loops that uses this MicroService
      */
-    public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, JsonObject jsonRepresentation,
-        Set<Loop> usedByLoops, String blueprintName) {
+    public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared,
+        JsonObject jsonRepresentation, Set<Loop> usedByLoops) {
         this.name = name;
         this.modelType = modelType;
         this.policyTosca = policyTosca;
         this.shared = shared;
         this.usedByLoops = usedByLoops;
         this.jsonRepresentation = jsonRepresentation;
-        this.blueprintName = blueprintName;
     }
 
     @Override
@@ -141,8 +162,8 @@ public class MicroServicePolicy implements Serializable, Policy {
         return modelType;
     }
 
-    public String getBlueprintName() {
-        return blueprintName;
+    void setModelType(String modelType) {
+        this.modelType = modelType;
     }
 
     public JsonObject getProperties() {
@@ -157,7 +178,7 @@ public class MicroServicePolicy implements Serializable, Policy {
         return shared;
     }
 
-    public void setShared(Boolean shared) {
+    void setShared(Boolean shared) {
         this.shared = shared;
     }
 
@@ -165,7 +186,7 @@ public class MicroServicePolicy implements Serializable, Policy {
         return policyTosca;
     }
 
-    public void setPolicyTosca(String policyTosca) {
+    void setPolicyTosca(String policyTosca) {
         this.policyTosca = policyTosca;
     }
 
@@ -174,7 +195,7 @@ public class MicroServicePolicy implements Serializable, Policy {
         return jsonRepresentation;
     }
 
-    public void setJsonRepresentation(JsonObject jsonRepresentation) {
+    void setJsonRepresentation(JsonObject jsonRepresentation) {
         this.jsonRepresentation = jsonRepresentation;
     }
 
@@ -182,7 +203,7 @@ public class MicroServicePolicy implements Serializable, Policy {
         return usedByLoops;
     }
 
-    public void setUsedByLoops(Set<Loop> usedBy) {
+    void setUsedByLoops(Set<Loop> usedBy) {
         this.usedByLoops = usedBy;
     }
 
@@ -216,4 +237,41 @@ public class MicroServicePolicy implements Serializable, Policy {
         return true;
     }
 
+    private String getMicroServicePropertyNameFromTosca(JsonObject object) {
+        return object.getAsJsonObject("policy_types").getAsJsonObject(this.modelType).getAsJsonObject("properties")
+            .keySet().toArray(new String[1])[0];
+    }
+
+    @Override
+    public String createPolicyPayload() {
+        JsonObject toscaJson = createJsonFromPolicyTosca();
+
+        JsonObject policyPayloadResult = new JsonObject();
+
+        policyPayloadResult.add("tosca_definitions_version", toscaJson.get("tosca_definitions_version"));
+
+        JsonObject topologyTemplateNode = new JsonObject();
+        policyPayloadResult.add("topology_template", topologyTemplateNode);
+
+        JsonArray policiesArray = new JsonArray();
+        topologyTemplateNode.add("policies", policiesArray);
+
+        JsonObject thisPolicy = new JsonObject();
+        policiesArray.add(thisPolicy);
+
+        JsonObject policyDetails = new JsonObject();
+        thisPolicy.add(this.getName(), policyDetails);
+        policyDetails.addProperty("type", this.getModelType());
+        policyDetails.addProperty("version", "1.0.0");
+
+        JsonObject policyMetadata = new JsonObject();
+        policyDetails.add("metadata", policyMetadata);
+        policyMetadata.addProperty("policy-id", this.getName());
+
+        JsonObject policyProperties = new JsonObject();
+        policyDetails.add("properties", policyProperties);
+        policyProperties.add(this.getMicroServicePropertyNameFromTosca(toscaJson), this.getProperties());
+        return new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult);
+    }
+
 }
index f95ad3b..b14e145 100644 (file)
@@ -33,7 +33,6 @@ import org.onap.clamp.loop.Loop;
 import org.onap.clamp.policy.PolicyService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class MicroservicePolicyService implements PolicyService<MicroServicePolicy> {
@@ -46,7 +45,6 @@ public class MicroservicePolicyService implements PolicyService<MicroServicePoli
     }
 
     @Override
-    @Transactional
     public Set<MicroServicePolicy> updatePolicies(Loop loop, List<MicroServicePolicy> newMicroservicePolicies) {
         return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy))
             .collect(Collectors.toSet());
@@ -59,21 +57,23 @@ public class MicroservicePolicyService implements PolicyService<MicroServicePoli
 
     /**
      * Get and update the MicroService policy properties.
-     * @param loop The loop
-     * @param policy The new MicroService policy
+     *
+     * @param loop
+     *        The loop
+     * @param policy
+     *        The new MicroService policy
      * @return The updated MicroService policy
      */
-    @Transactional
     public MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) {
         return repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop))
-            .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), policy.getShared(),
-                policy.getJsonRepresentation(), Sets.newHashSet(loop), policy.getBlueprintName()));
+            .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(),
+                policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop)));
     }
 
     private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy,
         MicroServicePolicy newPolicy, Loop loop) {
         oldPolicy.setProperties(newPolicy.getProperties());
-        if (oldPolicy.getUsedByLoops().contains(loop)) {
+        if (!oldPolicy.getUsedByLoops().contains(loop)) {
             oldPolicy.getUsedByLoops().add(loop);
         }
         return oldPolicy;
index c1e075d..674bd71 100644 (file)
 
 package org.onap.clamp.policy.operational;
 
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.annotations.Expose;
+
 import java.io.Serializable;
 
 import javax.persistence.Column;
-import javax.persistence.Convert;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
+
 import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
 import org.hibernate.annotations.TypeDefs;
@@ -66,14 +69,18 @@ public class OperationalPolicy implements Serializable, Policy {
     private Loop loop;
 
     public OperationalPolicy() {
-        //Serialization
+        // Serialization
     }
 
     /**
      * The constructor.
-     * @param name The name of the operational policy
-     * @param loop The loop that uses this operational policy
-     * @param configurationsJson The operational policy property in the format of json
+     *
+     * @param name
+     *        The name of the operational policy
+     * @param loop
+     *        The loop that uses this operational policy
+     * @param configurationsJson
+     *        The operational policy property in the format of json
      */
     public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson) {
         this.name = name;
@@ -81,6 +88,7 @@ public class OperationalPolicy implements Serializable, Policy {
         this.configurationsJson = configurationsJson;
     }
 
+    @Override
     public String getName() {
         return name;
     }
@@ -136,4 +144,23 @@ public class OperationalPolicy implements Serializable, Policy {
         return true;
     }
 
+    @Override
+    public String createPolicyPayload() {
+        JsonObject policyPayloadResult = new JsonObject();
+
+        policyPayloadResult.addProperty("tosca_definitions_version", "tosca_simple_yaml_1_0_0");
+
+        JsonObject topologyTemplateNode = new JsonObject();
+        policyPayloadResult.add("topology_template", topologyTemplateNode);
+
+        JsonArray policiesArray = new JsonArray();
+        topologyTemplateNode.add("policies", policiesArray);
+
+        return new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult);
+    }
+
+    public String createGuardPolicyPayload() {
+        return null;
+    }
+
 }
index 9d07415..a935808 100644 (file)
@@ -30,8 +30,8 @@ import com.google.gson.GsonBuilder;
 import com.google.gson.JsonObject;
 
 import java.time.Instant;
-
 import java.util.HashSet;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.onap.clamp.clds.Application;
@@ -83,19 +83,16 @@ public class LoopRepositoriesItCase {
         return loop;
     }
 
-    private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, String policyTosca,
-        String jsonProperties, boolean shared) {
+    private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation,
+        String policyTosca, String jsonProperties, boolean shared) {
         MicroServicePolicy µService = new MicroServicePolicy(name, modelType, policyTosca, shared,
-            gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>(), "");
+            gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
         µService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class));
         return µService;
     }
 
-    private LoopLog getLoopLog(LogType type, String message) {
-        LoopLog log = new LoopLog();
-        log.setLogType(type);
-        log.setMessage(message);
-        return log;
+    private LoopLog getLoopLog(LogType type, String message, Loop loop) {
+        return new LoopLog(message, type, loop);
     }
 
     @Test
@@ -105,10 +102,11 @@ public class LoopRepositoriesItCase {
             "123456789", "https://dcaetest.org", "UUID-blueprint");
         OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest");
         loopTest.addOperationalPolicy(opPolicy);
-        MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", "{\"configtype\":\"json\"}",
-            "YamlContent", "{\"param1\":\"value1\"}", true);
+        MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
+            "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+            "{\"param1\":\"value1\"}", true);
         loopTest.addMicroServicePolicy(microServicePolicy);
-        LoopLog loopLog = getLoopLog(LogType.INFO, "test message");
+        LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest);
         loopTest.addLog(loopLog);
 
         // Attemp to save into the database the entire loop
index 9a44d41..2372338 100644 (file)
  *
  */
 
-
 package org.onap.clamp.loop;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 import com.google.gson.JsonObject;
+
 import java.util.Set;
 import java.util.stream.Collectors;
+
+import javax.transaction.Transactional;
+
 import org.assertj.core.util.Lists;
 import org.junit.After;
 import org.junit.Test;
@@ -39,10 +42,9 @@ import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.clamp.policy.operational.OperationalPolicy;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.transaction.annotation.Transactional;
+import org.springframework.test.context.junit4.SpringRunner;
 
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
 @SpringBootTest(classes = Application.class)
 public class LoopServiceTestItCase {
 
@@ -61,18 +63,19 @@ public class LoopServiceTestItCase {
     }
 
     @Test
+    @Transactional
     public void shouldCreateEmptyLoop() {
-        //given
+        // given
         String loopBlueprint = "blueprint";
         String loopSvg = "representation";
         Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, loopBlueprint, loopSvg);
         testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
         testLoop.setLastComputedState(LoopState.DESIGN);
 
-        //when
+        // when
         Loop actualLoop = loopService.saveOrUpdateLoop(testLoop);
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop).isEqualTo(loopsRepository.findById(actualLoop.getName()).get());
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
@@ -83,81 +86,77 @@ public class LoopServiceTestItCase {
     }
 
     @Test
+    @Transactional
     public void shouldAddOperationalPolicyToLoop() {
-        //given
+        // given
         saveTestLoopToDb();
-        JsonObject confJson = JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class);
-        String policyName = "policyName";
-        OperationalPolicy operationalPolicy = new OperationalPolicy(policyName, null, confJson);
+        OperationalPolicy operationalPolicy = new OperationalPolicy("policyName", null,
+            JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
 
-        //when
-        Loop actualLoop = loopService
-            .updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(operationalPolicy));
+        // when
+        Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME,
+            Lists.newArrayList(operationalPolicy));
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
         Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
         assertThat(savedPolicies).hasSize(1);
-        assertThat(savedPolicies)
-            .usingElementComparatorIgnoringFields("loop")
-            .contains(operationalPolicy);
+        assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop").contains(operationalPolicy);
         OperationalPolicy savedPolicy = savedPolicies.iterator().next();
         assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME);
 
     }
 
     @Test
+    @Transactional
     public void shouldAddMicroservicePolicyToLoop() {
-        //given
+        // given
         saveTestLoopToDb();
-        JsonObject confJson = JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class);
-        String policyName = "policyName";
-        String policyTosca = "policyTosca";
-        MicroServicePolicy microServicePolicy = new MicroServicePolicy(policyName, "", policyTosca, false, confJson, null, "");
+        MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "",
+            "tosca_definitions_version: tosca_simple_yaml_1_0_0", false,
+            JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
 
-        //when
-        Loop actualLoop = loopService
-            .updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(microServicePolicy));
+        // when
+        Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME,
+            Lists.newArrayList(microServicePolicy));
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
         Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
         assertThat(savedPolicies).hasSize(1);
         assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
             .containsExactly(microServicePolicy);
-        assertThat(savedPolicies).extracting("usedByLoops")
-            .hasSize(1);
+        assertThat(savedPolicies).extracting("usedByLoops").hasSize(1);
 
     }
 
     @Test
     @Transactional
     public void shouldCreateNewMicroservicePolicyAndUpdateJsonRepresentationOfOldOne() {
-        //given
+        // given
         saveTestLoopToDb();
-        String firstPolicyName = "firstPolicyName";
-        JsonObject newJsonRepresentation = JsonUtils.GSON.fromJson("{}", JsonObject.class);
-        String secondPolicyName = "secondPolicyName";
-        String secondPolicyTosca = "secondPolicyTosca";
-        MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "", "policyTosca",
-            false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, "");
-        loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy));
 
-        MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, "", secondPolicyTosca, true,
-            newJsonRepresentation, null, "");
+        MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "", "", false,
+            JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
+        loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy));
+        MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", "",
+            "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, JsonUtils.GSON.fromJson("{}", JsonObject.class),
+            null);
 
-        //when
+        // when
         firstMicroServicePolicy.setProperties(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class));
         Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME,
             Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy));
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
         Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
         assertThat(savedPolicies).hasSize(2);
+        assertThat(savedPolicies).contains(firstMicroServicePolicy);
+        assertThat(savedPolicies).contains(secondMicroServicePolicy);
         assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
             .containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy);
 
@@ -170,26 +169,24 @@ public class LoopServiceTestItCase {
     }
 
     @Test
+    @Transactional
     public void shouldRemoveOldMicroservicePolicyIfNotInUpdatedList() {
-        //given
+        // given
         saveTestLoopToDb();
 
-        JsonObject jsonRepresentation = JsonUtils.GSON.fromJson("{}", JsonObject.class);
-        String firstPolicyName = "firstPolicyName";
-        String secondPolicyName = "policyName";
-        String secondPolicyTosca = "secondPolicyTosca";
-        MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "", "policyTosca",
-            false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, "");
+        MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "",
+            "\"tosca_definitions_version: tosca_simple_yaml_1_0_0\"", false,
+            JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
         loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy));
 
-        MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, "", secondPolicyTosca, true,
-            jsonRepresentation, null, "");
+        MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("policyName", "", "secondPolicyTosca",
+            true, JsonUtils.GSON.fromJson("{}", JsonObject.class), null);
 
-        //when
-        Loop actualLoop = loopService
-            .updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(secondMicroServicePolicy));
+        // when
+        Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME,
+            Lists.newArrayList(secondMicroServicePolicy));
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
         Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
@@ -202,82 +199,77 @@ public class LoopServiceTestItCase {
     @Test
     @Transactional
     public void shouldCreateNewOperationalPolicyAndUpdateJsonRepresentationOfOldOne() {
-        //given
+        // given
         saveTestLoopToDb();
 
-        String firstPolicyName = "firstPolicyName";
         JsonObject newJsonConfiguration = JsonUtils.GSON.fromJson("{}", JsonObject.class);
-        String secondPolicyName = "secondPolicyName";
-        OperationalPolicy firstOperationalPolicy = new OperationalPolicy(firstPolicyName, null,
+
+        OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null,
             JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
         loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy));
 
-        OperationalPolicy secondOperationalPolicy = new OperationalPolicy(secondPolicyName, null, newJsonConfiguration);
+        OperationalPolicy secondOperationalPolicy = new OperationalPolicy("secondPolicyName", null,
+            newJsonConfiguration);
 
-        //when
+        // when
         firstOperationalPolicy.setConfigurationsJson(newJsonConfiguration);
         Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME,
             Lists.newArrayList(firstOperationalPolicy, secondOperationalPolicy));
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
         Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
         assertThat(savedPolicies).hasSize(2);
         assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop")
             .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy);
-        Set<String> policiesLoops = Lists.newArrayList(savedPolicies).stream()
-            .map(OperationalPolicy::getLoop)
-            .map(Loop::getName)
-            .collect(Collectors.toSet());
-        assertThat(policiesLoops)
-            .containsExactly(EXAMPLE_LOOP_NAME);
+        Set<String> policiesLoops = Lists.newArrayList(savedPolicies).stream().map(OperationalPolicy::getLoop)
+            .map(Loop::getName).collect(Collectors.toSet());
+        assertThat(policiesLoops).containsExactly(EXAMPLE_LOOP_NAME);
     }
 
     @Test
+    @Transactional
     public void shouldRemoveOldOperationalPolicyIfNotInUpdatedList() {
-        //given
+        // given
         saveTestLoopToDb();
 
-        JsonObject jsonRepresentation = JsonUtils.GSON.fromJson("{}", JsonObject.class);
-        String firstPolicyName = "firstPolicyName";
-        String secondPolicyName = "policyName";
-        OperationalPolicy firstOperationalPolicy = new OperationalPolicy(firstPolicyName, null,
+        OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null,
             JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
         loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy));
 
-        OperationalPolicy secondOperationalPolicy = new OperationalPolicy(secondPolicyName, null, jsonRepresentation);
+        OperationalPolicy secondOperationalPolicy = new OperationalPolicy("policyName", null,
+            JsonUtils.GSON.fromJson("{}", JsonObject.class));
 
-        //when
-        Loop actualLoop = loopService
-            .updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(secondOperationalPolicy));
+        // when
+        Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME,
+            Lists.newArrayList(secondOperationalPolicy));
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
         Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
         assertThat(savedPolicies).hasSize(1);
-        assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop")
-            .containsExactly(secondOperationalPolicy);
+        assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop").containsExactly(secondOperationalPolicy);
         OperationalPolicy savedPolicy = savedPolicies.iterator().next();
         assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME);
 
     }
 
     @Test
+    @Transactional
     public void shouldCreateModelPropertiesAndUpdateJsonRepresentationOfOldOne() {
-        //given
+        // given
         saveTestLoopToDb();
         String expectedJson = "{\"test\":\"test\"}";
         JsonObject baseGlobalProperites = JsonUtils.GSON.fromJson("{}", JsonObject.class);
         JsonObject updatedGlobalProperites = JsonUtils.GSON.fromJson(expectedJson, JsonObject.class);
         loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, baseGlobalProperites);
 
-        //when
-        Loop actualLoop = loopService
-                .updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, updatedGlobalProperites);
+        // when
+        Loop actualLoop = loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, updatedGlobalProperites);
 
-        //then
+        // then
         assertThat(actualLoop).isNotNull();
         assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
         JsonObject returnedGlobalProperties = actualLoop.getGlobalPropertiesJson();
index 1c21897..0e03e1b 100644 (file)
@@ -33,11 +33,11 @@ import java.util.HashSet;
 import java.util.Random;
 
 import org.junit.Test;
+import org.onap.clamp.clds.util.JsonUtils;
 import org.onap.clamp.loop.log.LogType;
 import org.onap.clamp.loop.log.LoopLog;
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.clamp.policy.operational.OperationalPolicy;
-import org.onap.clamp.clds.util.JsonUtils;
 
 public class LoopToJsonTest {
 
@@ -58,19 +58,17 @@ public class LoopToJsonTest {
         return loop;
     }
 
-    private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, String policyTosca,
-        String jsonProperties, boolean shared) {
+    private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation,
+        String policyTosca, String jsonProperties, boolean shared) {
         MicroServicePolicy µService = new MicroServicePolicy(name, modelType, policyTosca, shared,
-            gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>(), "");
+            gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
         µService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class));
 
         return µService;
     }
 
-    private LoopLog getLoopLog(LogType type, String message) {
-        LoopLog log = new LoopLog();
-        log.setLogType(type);
-        log.setMessage(message);
+    private LoopLog getLoopLog(LogType type, String message, Loop loop) {
+        LoopLog log = new LoopLog(message, type, loop);
         log.setId(Long.valueOf(new Random().nextInt()));
         return log;
     }
@@ -81,10 +79,11 @@ public class LoopToJsonTest {
             "123456789", "https://dcaetest.org", "UUID-blueprint");
         OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest");
         loopTest.addOperationalPolicy(opPolicy);
-        MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", "{\"configtype\":\"json\"}",
-            "YamlContent", "{\"param1\":\"value1\"}", true);
+        MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
+            "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+            "{\"param1\":\"value1\"}", true);
         loopTest.addMicroServicePolicy(microServicePolicy);
-        LoopLog loopLog = getLoopLog(LogType.INFO, "test message");
+        LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest);
         loopTest.addLog(loopLog);
 
         String jsonSerialized = JsonUtils.GSON_JPA_MODEL.toJson(loopTest);
@@ -94,7 +93,7 @@ public class LoopToJsonTest {
         assertNotNull(loopTestDeserialized);
         assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest, "svgRepresentation", "blueprint");
 
-        //svg and blueprint not exposed so wont be deserialized
+        // svg and blueprint not exposed so wont be deserialized
         assertThat(loopTestDeserialized.getBlueprint()).isEqualTo(null);
         assertThat(loopTestDeserialized.getSvgRepresentation()).isEqualTo(null);
 
diff --git a/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java b/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java
new file mode 100644 (file)
index 0000000..c511f34
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.policy.microservice;
+
+import com.google.gson.JsonObject;
+
+import java.io.IOException;
+import java.util.HashSet;
+
+import org.junit.Test;
+import org.onap.clamp.clds.util.JsonUtils;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.skyscreamer.jsonassert.JSONAssert;
+
+public class MicroServicePayloadTest {
+
+    @Test
+    public void testPayloadConstruction() throws IOException {
+        MicroServicePolicy policy = new MicroServicePolicy("testPolicy", "onap.policy.monitoring.cdap.tca.hi.lo.app",
+            ResourceFileUtil.getResourceAsString("tosca/tosca_example.yaml"), false, new HashSet<>());
+        policy.setProperties(JsonUtils.GSON.fromJson(
+            ResourceFileUtil.getResourceAsString("tosca/micro-service-policy-properties.json"), JsonObject.class));
+        JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/micro-service-policy-payload.json"),
+            policy.createPolicyPayload(), false);
+    }
+}
diff --git a/src/test/resources/tosca/micro-service-policy-payload.json b/src/test/resources/tosca/micro-service-policy-payload.json
new file mode 100644 (file)
index 0000000..01d6d27
--- /dev/null
@@ -0,0 +1,41 @@
+{
+       "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+       "topology_template": {
+               "policies": [
+                       {
+                               "testPolicy": {
+                                       "type": "onap.policy.monitoring.cdap.tca.hi.lo.app",
+                                       "version": "1.0.0",
+                                       "metadata": {
+                                               "policy-id": "testPolicy"
+                                       },
+                                       "properties": {
+                                               "tca_policy": {
+                                                       "domain": "measurementsForVfScaling",
+                                                       "metricsPerEventName": [
+                                                               {
+                                                                       "policyVersion": "1.0.0",
+                                                                       "thresholds": [
+                                                                               {
+                                                                                       "severity": "CRITICAL",
+                                                                                       "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta",
+                                                                                       "thresholdValue": 1,
+                                                                                       "closedLoopEventStatus": "ONSET",
+                                                                                       "closedLoopControlName": "test",
+                                                                                       "version": "1.0.0",
+                                                                                       "direction": "LESS"
+                                                                               }
+                                                                       ],
+                                                                       "policyName": "test",
+                                                                       "controlLoopSchemaType": "VM",
+                                                                       "policyScope": "test",
+                                                                       "eventName": "test"
+                                                               }
+                                                       ]
+                                               }
+                                       }
+                               }
+                       }
+               ]
+       }
+}
\ No newline at end of file
diff --git a/src/test/resources/tosca/micro-service-policy-properties.json b/src/test/resources/tosca/micro-service-policy-properties.json
new file mode 100644 (file)
index 0000000..6baa329
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "domain": "measurementsForVfScaling",
+  "metricsPerEventName": [
+    {
+      "policyVersion": "1.0.0",
+      "thresholds": [
+        {
+          "severity": "CRITICAL",
+          "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta",
+          "thresholdValue": 1,
+          "closedLoopEventStatus": "ONSET",
+          "closedLoopControlName": "test",
+          "version": "1.0.0",
+          "direction": "LESS"
+        }
+      ],
+      "policyName": "test",
+      "controlLoopSchemaType": "VM",
+      "policyScope": "test",
+      "eventName": "test"
+    }
+  ]
+}