}\r
}\r
\r
+ /**\r
+ * Creates one or more new policies in one call.\r
+ *\r
+ * @param body the body of policy following TOSCA definition\r
+ *\r
+ * @return the Response object containing the results of the API operation\r
+ */\r
+ @POST\r
+ @Path("/policies")\r
+ @ApiOperation(value = "Create one or more new policies",\r
+ notes = "Client should provide TOSCA body of the new polic(ies)",\r
+ authorizations = @Authorization(value = "basicAuth"),\r
+ tags = { "Policy", },\r
+ response = ToscaServiceTemplate.class,\r
+ responseHeaders = {\r
+ @ResponseHeader(name = "X-MinorVersion",\r
+ description = "Used to request or communicate a MINOR version back from the client"\r
+ + " to the server, and from the server back to the client",\r
+ response = String.class),\r
+ @ResponseHeader(name = "X-PatchVersion",\r
+ description = "Used only to communicate a PATCH version in a response for"\r
+ + " troubleshooting purposes only, and will not be provided by"\r
+ + " the client on request",\r
+ response = String.class),\r
+ @ResponseHeader(name = "X-LatestVersion",\r
+ description = "Used only to communicate an API's latest version",\r
+ response = String.class),\r
+ @ResponseHeader(name = "X-ONAP-RequestID",\r
+ description = "Used to track REST transactions for logging purpose",\r
+ response = UUID.class)\r
+ },\r
+ extensions = {\r
+ @Extension(name = "interface info", properties = {\r
+ @ExtensionProperty(name = "api-version", value = "1.0.0"),\r
+ @ExtensionProperty(name = "last-mod-release", value = "El Alto")\r
+ })\r
+ })\r
+ @ApiResponses(value = {\r
+ @ApiResponse(code = 400, message = "Invalid Body"),\r
+ @ApiResponse(code = 401, message = "Authentication Error"),\r
+ @ApiResponse(code = 403, message = "Authorization Error"),\r
+ @ApiResponse(code = 404, message = "Resource Not Found"),\r
+ @ApiResponse(code = 500, message = "Internal Server Error")\r
+ })\r
+ public Response createPolicies(\r
+ @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId,\r
+ @ApiParam(value = "Entity body of policy", required = true) ToscaServiceTemplate body) {\r
+\r
+ if (NetLoggerUtil.getNetworkLogger().isInfoEnabled()) {\r
+ NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, "/policies", toJson(body));\r
+ }\r
+\r
+ try (PolicyProvider policyProvider = new PolicyProvider()) {\r
+ ToscaServiceTemplate serviceTemplate = policyProvider.createPolicies(body);\r
+ updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.POST);\r
+ return makeOkResponse(requestId, serviceTemplate);\r
+ } catch (PfModelException | PfModelRuntimeException pfme) {\r
+ LOGGER.error("POST /policies", pfme);\r
+ updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.POST);\r
+ return makeErrorResponse(requestId, pfme);\r
+ }\r
+ }\r
+\r
/**\r
* Deletes the specified version of a particular policy.\r
*\r
return modelsProvider.createPolicies(body);\r
}\r
\r
+ /**\r
+ * Creates one or more new policies.\r
+ *\r
+ * @param body the entity body of policy\r
+ *\r
+ * @return the ToscaServiceTemplate object\r
+ *\r
+ * @throws PfModelException the PfModel parsing exception\r
+ */\r
+ public ToscaServiceTemplate createPolicies(ToscaServiceTemplate body) throws PfModelException {\r
+\r
+ return modelsProvider.createPolicies(body);\r
+ }\r
+\r
/**\r
* Deletes the policy matching specified ID and version of both policy type and policy.\r
*\r
+ "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.scaleout/versions/1";
private static final String OPS_POLICIES_VFIREWALL_VERSION = "policytypes/"
+ "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.modifyconfig/versions/1";
+ private static final String POLICIES = "policies";
private static final String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore";
private static final CommonTestData COMMON_TEST_DATA = new CommonTestData();
"policies/vFirewall.policy.monitoring.input.tosca.yaml"
};
+ private String[] toscaPoliciesResourceNames = {
+ "policies/vCPE.policies.optimization.input.tosca.json",
+ "policies/vCPE.policies.optimization.input.tosca.yaml"
+ };
+
private String[] toscaPolicyTypeResourceNames = {
"policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
"policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
}
}
+ @Test
+ public void testCreatePoliciesPersistent() throws Exception {
+ setupParameters(); // setup DB
+ main = startApiService(true);
+ for (String resrcName : toscaPolicyResourceNames) {
+ Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
+ assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
+ assertNotNull(response);
+ assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
+ }
+ }
+
+ @Test
+ public void testSimpleCreatePolicies() throws Exception {
+ main = startApiService(true);
+ for (String resrcName : toscaPoliciesResourceNames) {
+ Response rawResponse = createResource(POLICIES, resrcName, true);
+ assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
+ ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
+ assertEquals("policy type onap.policies.optimization.AffinityPolicy:0.0.0 for "
+ + "policy OSDF_CASABLANCA.Affinity_vCPE_1:1.0.0 does not exist", error.getErrorMessage());
+ }
+ }
+
+ @Test
+ public void testSimpleCreatePoliciesPersistent() throws Exception {
+ setupParameters(); // setup DB
+ main = startApiService(true);
+ for (String resrcName : toscaPoliciesResourceNames) {
+ Response rawResponse = createResource(POLICIES, resrcName, true);
+ assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
+ assertNotNull(response);
+ assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
+ }
+ }
+
@Test
public void testCreateGuardPolicies() {
try {
}
}
+ @Test
+ public void testHttpsCreatePoliciesPersistent() throws Exception {
+ setupParameters(); // setup DB
+ main = startApiService(false);
+ for (String resrcName : toscaPolicyResourceNames) {
+ Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, false);
+ assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
+ assertNotNull(response);
+ assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
+ }
+ }
+
+ @Test
+ public void testHttpsSimpleCreatePolicies() throws Exception {
+ main = startApiService(false);
+ for (String resrcName : toscaPoliciesResourceNames) {
+ Response rawResponse = createResource(POLICIES, resrcName, false);
+ assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
+ ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
+ assertEquals("policy type onap.policies.optimization.AffinityPolicy:0.0.0 for "
+ + "policy OSDF_CASABLANCA.Affinity_vCPE_1:1.0.0 does not exist", error.getErrorMessage());
+ }
+ }
+
+ @Test
+ public void testHttpsSimpleCreatePoliciesPersistent() throws Exception {
+ setupParameters(); // setup DB
+ main = startApiService(false);
+ for (String resrcName : toscaPoliciesResourceNames) {
+ Response rawResponse = createResource(POLICIES, resrcName, false);
+ assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
+ assertNotNull(response);
+ assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
+ }
+ }
+
@Test
public void testHttpsCreateGuardPolicies() {
try {
private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID = "policies/vCPE.policy.bad.policytypeid.json";
private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION =
"policies/vCPE.policy.bad.policytypeversion.json";
+ private static final String MULTIPLE_POLICIES_RESOURCE = "policies/vCPE.policies.optimization.input.tosca.json";
+
+ // @formatter:off
+ private String[] toscaPolicyTypeResourceNames = {
+ "policytypes/onap.policies.optimization.AffinityPolicy.yaml",
+ "policytypes/onap.policies.optimization.DistancePolicy.yaml",
+ "policytypes/onap.policies.optimization.HpaPolicy.yaml",
+ "policytypes/onap.policies.optimization.QueryPolicy.yaml",
+ "policytypes/onap.policies.optimization.SubscriberPolicy.yaml",
+ "policytypes/onap.policies.optimization.Vim_fit.yaml",
+ "policytypes/onap.policies.optimization.VnfPolicy.yaml"
+ };
+ // @formatter:on
/**
* Initializes parameters.
}).doesNotThrowAnyException();
}
+ @Test
+ public void testSimpleCreatePolicy() throws Exception {
+
+ String errorMessage = "policy type onap.policies.optimization.AffinityPolicy:0.0.0 for "
+ + "policy OSDF_CASABLANCA.Affinity_vCPE_1:1.0.0 does not exist";
+ assertThatThrownBy(() -> {
+ String multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
+ ToscaServiceTemplate multiPoliciesServiceTemplate =
+ standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
+ policyProvider.createPolicies(multiPoliciesServiceTemplate);
+ }).hasMessage(errorMessage);
+
+ // Create required policy types
+ for (String policyTypeName : toscaPolicyTypeResourceNames) {
+ ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder.decode(
+ ResourceUtils.getResourceAsString(policyTypeName), ToscaServiceTemplate.class);
+ policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+ }
+
+ // Create multiple policies in one call
+ String multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
+ ToscaServiceTemplate multiPoliciesServiceTemplate =
+ standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
+ policyProvider.createPolicies(multiPoliciesServiceTemplate);
+ }
+
@Test
public void testDeletePolicy() {