diff options
author | Michael Mokry <michael.mokry@att.com> | 2019-02-20 10:13:53 -0600 |
---|---|---|
committer | Michael Mokry <michael.mokry@att.com> | 2019-02-26 14:55:57 -0600 |
commit | 64ee4aa0f333947317bcb97a96e08e7bdc60f162 (patch) | |
tree | ef07d799d088002967cf283bcc1415c24eba59ac | |
parent | ab1824d122b50d29e000bb58521d8dace9cba2b6 (diff) |
Stubbed endpoints for Decision API and swagger
Includes:
1) Decision API endpoint with Swagger annotations
2) Provider class for Decision added to new provider package
3) Moved other provider classes to provider package
4) Decision model class added to new model package
Note: This is just a draft and still needs a lot of work, please do not
merge. Thanks in advance for the review comments.
Issue-ID: POLICY-1516
Change-Id: Id7414b6cb3eee1b877a0c11521babbef4938a68f
Signed-off-by: Michael Mokry <michael.mokry@att.com>
9 files changed, 120 insertions, 15 deletions
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpRestController.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpRestController.java index b061c96d..dc091f03 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpRestController.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpRestController.java @@ -22,44 +22,80 @@ package org.onap.policy.pdpx.main.rest; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Authorization; +import io.swagger.annotations.BasicAuthDefinition; import io.swagger.annotations.Info; +import io.swagger.annotations.SecurityDefinition; import io.swagger.annotations.SwaggerDefinition; import io.swagger.annotations.Tag; +import javax.ws.rs.Consumes; import javax.ws.rs.GET; +import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.onap.policy.common.endpoints.report.HealthCheckReport; - - +import org.onap.policy.pdpx.main.rest.model.Decision; +import org.onap.policy.pdpx.main.rest.model.StatisticsReport; +import org.onap.policy.pdpx.main.rest.provider.DecisionProvider; +import org.onap.policy.pdpx.main.rest.provider.HealthCheckProvider; +import org.onap.policy.pdpx.main.rest.provider.StatisticsProvider; /** * Class to provide xacml pdp REST services. * */ -@Path("/") +@Path("/policy/pdpx/v1") @Api @Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) @SwaggerDefinition(info = @Info(description = "Policy Xacml PDP Service", version = "v1.0", title = "Policy Xacml PDP"), consumes = {MediaType.APPLICATION_JSON}, produces = {MediaType.APPLICATION_JSON}, - schemes = {SwaggerDefinition.Scheme.HTTP}, - tags = {@Tag(name = "policy-pdpx", description = "Policy Xacml PDP Service Operations")}) + schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS}, + tags = {@Tag(name = "policy-pdpx", description = "Policy Xacml PDP Service Operations")}, + securityDefinition = @SecurityDefinition(basicAuthDefinitions = {@BasicAuthDefinition(key = "basicAuth")})) public class XacmlPdpRestController { @GET - @Path("healthcheck") + @Path("/healthcheck") @ApiOperation(value = "Perform a system healthcheck", - notes = "Provides healthy status of the Policy Xacml PDP component", response = HealthCheckReport.class) + notes = "Provides healthy status of the Policy Xacml PDP component", response = HealthCheckReport.class, + authorizations = @Authorization(value = "basicAuth")) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 500, message = "Internal Server Error")}) public Response healthcheck() { return Response.status(Response.Status.OK).entity(new HealthCheckProvider().performHealthCheck()).build(); } @GET - @Path("statistics") + @Path("/statistics") @ApiOperation(value = "Fetch current statistics", - notes = "Provides current statistics of the Policy Xacml PDP component", response = StatisticsReport.class) + notes = "Provides current statistics of the Policy Xacml PDP component", response = StatisticsReport.class, + authorizations = @Authorization(value = "basicAuth")) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 500, message = "Internal Server Error")}) public Response statistics() { return Response.status(Response.Status.OK).entity(new StatisticsProvider().fetchCurrentStatistics()).build(); } + + @POST + @Path("/decision") + @ApiOperation(value = "Fetch the decision using specified decision parameters", + notes = "Returns the policy decision from Policy Xacml PDP", response = Decision.class, + authorizations = @Authorization(value = "basicAuth"), + tags = {"Decision",}) + @ApiResponses(value = {@ApiResponse(code = 400, message = "Bad Request"), + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 500, message = "Internal Server Error")}) + public Response decision(Decision body) { + return Response.status(Response.Status.OK).entity(new DecisionProvider().fetchDecision()).build(); + } } diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/model/Decision.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/model/Decision.java new file mode 100644 index 00000000..d09dac9c --- /dev/null +++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/model/Decision.java @@ -0,0 +1,27 @@ +/*- + * ============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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.pdpx.main.rest.model; + +public class Decision { + + //TODO + +} diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/StatisticsReport.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/model/StatisticsReport.java index f37b1d36..36177034 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/rest/StatisticsReport.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/model/StatisticsReport.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.policy.pdpx.main.rest; +package org.onap.policy.pdpx.main.rest.model; /** * Class to represent statistics report of xacmlPdp service. diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java new file mode 100644 index 00000000..62190043 --- /dev/null +++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java @@ -0,0 +1,38 @@ +/*- + * ============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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.pdpx.main.rest.provider; + +import org.onap.policy.pdpx.main.rest.model.Decision; + + +public class DecisionProvider { + + /** + * Retrieves the policy decision for the specified parameters. + * + * @return the Decision object + */ + public Decision fetchDecision() { + // placeholder + return new Decision(); + } + +} diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/HealthCheckProvider.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/HealthCheckProvider.java index e57ba180..1c77d552 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/rest/HealthCheckProvider.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/HealthCheckProvider.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.policy.pdpx.main.rest; +package org.onap.policy.pdpx.main.rest.provider; import org.onap.policy.common.endpoints.report.HealthCheckReport; import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator; diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/StatisticsProvider.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/StatisticsProvider.java index f3580531..7b883280 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/rest/StatisticsProvider.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/StatisticsProvider.java @@ -18,9 +18,10 @@ * ============LICENSE_END========================================================= */ -package org.onap.policy.pdpx.main.rest; +package org.onap.policy.pdpx.main.rest.provider; import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager; +import org.onap.policy.pdpx.main.rest.model.StatisticsReport; import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator; /** diff --git a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestStatisticsReport.java b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestStatisticsReport.java index a116a154..eca28d0b 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestStatisticsReport.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestStatisticsReport.java @@ -23,12 +23,14 @@ package org.onap.policy.pdpx.main.rest; import com.openpojo.reflection.filters.FilterClassName; import com.openpojo.validation.Validator; import com.openpojo.validation.ValidatorBuilder; +import com.openpojo.validation.rule.impl.GetterMustExistRule; import com.openpojo.validation.rule.impl.SetterMustExistRule; import com.openpojo.validation.test.impl.GetterTester; import com.openpojo.validation.test.impl.SetterTester; import org.junit.Test; import org.onap.policy.common.utils.validation.ToStringTester; +import org.onap.policy.pdpx.main.rest.model.StatisticsReport; /** * Class to perform unit testing of {@link StatisticsReport}. @@ -39,7 +41,7 @@ public class TestStatisticsReport { @Test public void testStatisticsReport() { final Validator validator = ValidatorBuilder.create().with(new ToStringTester()).with(new SetterMustExistRule()) - .with(new SetterTester()).with(new GetterTester()).build(); + .with(new GetterMustExistRule()).with(new SetterTester()).with(new GetterTester()).build(); validator.validate(StatisticsReport.class.getPackage().getName(), new FilterClassName(StatisticsReport.class.getName())); } diff --git a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java index d9a0e9b0..2170c8a3 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java @@ -109,7 +109,7 @@ public class TestXacmlPdpRestServer { clientConfig.register(feature); final Client client = ClientBuilder.newClient(clientConfig); - final WebTarget webTarget = client.target("http://localhost:6969/healthcheck"); + final WebTarget webTarget = client.target("http://localhost:6969/policy/pdpx/v1/healthcheck"); final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); diff --git a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java index b38e92d2..ee05ff06 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java @@ -38,6 +38,7 @@ import org.onap.policy.pdpx.main.PolicyXacmlPdpException; import org.onap.policy.pdpx.main.parameters.CommonTestData; import org.onap.policy.pdpx.main.parameters.RestServerParameters; import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager; +import org.onap.policy.pdpx.main.rest.model.StatisticsReport; import org.onap.policy.pdpx.main.startstop.Main; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,7 +104,7 @@ public class TestXacmlPdpStatistics { clientConfig.register(feature); final Client client = ClientBuilder.newClient(clientConfig); - final WebTarget webTarget = client.target("http://localhost:6969/statistics"); + final WebTarget webTarget = client.target("http://localhost:6969/policy/pdpx/v1/statistics"); final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); |