diff options
author | rokenny <ronan.kenny@est.tech> | 2019-04-09 20:34:44 +0000 |
---|---|---|
committer | rokenny <ronan.kenny@est.tech> | 2019-04-09 20:34:44 +0000 |
commit | 1d9a4a6444f1a192ae69aa1f9c5df908c34ad164 (patch) | |
tree | 80b361948e3653557c05cfa4b62e7d81c5accbe3 /vnfm-simulator/vnf-service | |
parent | 8dae8791b36c45f6cf2124359c9055c7bee7cae2 (diff) |
Added VNFM Simulator project
Change-Id: I9b84164dc189128eed8d09b6ce69fc5d5fd78348
Issue-ID: SO-1618
Signed-off-by: rokenny <ronan.kenny@est.tech>
Diffstat (limited to 'vnfm-simulator/vnf-service')
8 files changed, 385 insertions, 0 deletions
diff --git a/vnfm-simulator/vnf-service/pom.xml b/vnfm-simulator/vnf-service/pom.xml new file mode 100644 index 0000000000..9a6825cf43 --- /dev/null +++ b/vnfm-simulator/vnf-service/pom.xml @@ -0,0 +1,78 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.onap.vnfm</groupId> + <artifactId>vnfm-simulator</artifactId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <artifactId>vnf-service</artifactId> + + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <java.version>1.8</java.version> + </properties> + + <dependencies> + + <dependency> + <groupId>org.onap.vnfm</groupId> + <artifactId>vnfm-api</artifactId> + <version>${project.version}</version> + + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>io.swagger</groupId> + <artifactId>swagger-jaxrs</artifactId> + <version>1.5.0</version> + </dependency> + <dependency> + <groupId>org.apache.directory.studio</groupId> + <artifactId>org.apache.commons.io</artifactId> + <version>2.4</version> + </dependency> + <dependency> + <groupId>com.googlecode.json-simple</groupId> + <artifactId>json-simple</artifactId> + <version>1.1.1</version> + </dependency> + + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>2.6.1</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>2.6.1</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + <version>2.9.8</version> + </dependency> + + </dependencies> +</project>
\ No newline at end of file diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java new file mode 100644 index 0000000000..b9703b3a13 --- /dev/null +++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.svnfm.simulator.controller; + +import javax.ws.rs.core.MediaType; + +import org.onap.svnfm.simulator.services.SvnfmService; +import org.onap.vnfm.v1.model.CreateVnfRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + * This class contains the VNF life cycle management operations + * + * @author ronan.kenny@est.tech + * + */ + +/** + * TO DO + * + * Implement Exception handling Implement VNFM adaptor call Identify the Create + * VNF response Test itwith the VNFM Adaptor + */ + +@RestController +@RequestMapping("/svnfm") + +public class SvnfmController { + + @Autowired + private SvnfmService svnfmService; + + private static final Logger LOGGER = LoggerFactory.getLogger(SvnfmController.class); + + @RequestMapping(method = RequestMethod.POST, value = "/vnf_instances") + public ResponseEntity<Object> createVNFInstance(@RequestBody final CreateVnfRequest createVNFRequest) { + LOGGER.info("Start createVNFInstance"); + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Type", MediaType.APPLICATION_JSON); + return new ResponseEntity<>(svnfmService.createVNF(), headers, HttpStatus.CREATED); + } +} diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmHealthcheck.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmHealthcheck.java new file mode 100644 index 0000000000..e6f55f6c5d --- /dev/null +++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmHealthcheck.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.svnfm.simulator.controller; + +import org.onap.svnfm.simulator.exception.InvalidRestRequestException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + + +/** + * TO DO + * + * Implement Exception handling + * Implement VNFM adaptor call + * Identify the Create VNF response + * Test it with the VNFM Adaptor + */ + +@RestController +@RequestMapping("/svnfm") +public class SvnfmHealthcheck { + + private static final Logger LOGGER = LoggerFactory.getLogger(SvnfmHealthcheck.class); + + @RequestMapping(method = RequestMethod.GET, value = "/healthcheck") + public ResponseEntity<String> healthCheck() { + try { + return new ResponseEntity<>(HttpStatus.OK); + } catch (final InvalidRestRequestException extensions) { + final String message = "Not Found"; + LOGGER.error(message); + return new ResponseEntity<>(message, HttpStatus.NOT_FOUND); + } + } +} diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/GlobalExceptionHandler.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000000..a06f2d22ad --- /dev/null +++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/GlobalExceptionHandler.java @@ -0,0 +1,27 @@ +package org.onap.svnfm.simulator.exception; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { + @Override + protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, + HttpHeaders headers, HttpStatus status, WebRequest request) { + String error = "Malformed JSON request"; + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } + + @Override + protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex, + HttpHeaders headers, HttpStatus status, WebRequest request) { + String error = "Media type Not Supported"; + return new ResponseEntity<>(error, HttpStatus.UNSUPPORTED_MEDIA_TYPE); + } +} diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/InvalidRestRequestException.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/InvalidRestRequestException.java new file mode 100644 index 0000000000..eabd4ec414 --- /dev/null +++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/InvalidRestRequestException.java @@ -0,0 +1,37 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.svnfm.simulator.exception; + +/** + * @author ronan.kenny@est.tech + * + */ +public class InvalidRestRequestException extends RuntimeException { + + private static final long serialVersionUID = 3977807111893986938L; + + public InvalidRestRequestException(final String message) { + super(message); + } + + public InvalidRestRequestException(final String message, final Throwable cause) { + super(message, cause); + } +} diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/RestProcessingException.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/RestProcessingException.java new file mode 100644 index 0000000000..c84416e245 --- /dev/null +++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/RestProcessingException.java @@ -0,0 +1,37 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.svnfm.simulator.exception; + +/** + * @author ronan.kenny@est.tech + * + */ +public class RestProcessingException extends RuntimeException { + + private static final long serialVersionUID = 16862313537198441L; + + public RestProcessingException(final String message) { + super(message); + } + + public RestProcessingException(final String message, final Throwable cause) { + super(message, cause); + } +} diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java new file mode 100644 index 0000000000..e2dc43a24b --- /dev/null +++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java @@ -0,0 +1,60 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Ericsson. 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.svnfm.simulator.services; + +import java.io.IOException; + +import org.apache.commons.io.IOUtils; +import org.onap.svnfm.simulator.notifications.VnfmAdapterCreationNotification; +import org.onap.vnfm.v1.model.InlineResponse201; +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * This class handles the logic of VNF lifecycle + * + * @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech) + * + */ +@Service +public class SvnfmService { + + /** + * This method read the create VNF response from the json file and return it + * to the VNFM Adaptor + * + * @return + */ + public InlineResponse201 createVNF() { + Thread creationNodtification = new Thread(new VnfmAdapterCreationNotification()); + creationNodtification.start(); + ObjectMapper mapper = new ObjectMapper(); + InlineResponse201 inlineResponse201 = null; + try { + inlineResponse201 = mapper.readValue( + IOUtils.toString(getClass().getClassLoader().getResource("json/createVNFResponse.json")), + InlineResponse201.class); + } catch (IOException e) { + e.printStackTrace(); + } + return inlineResponse201; + } +} diff --git a/vnfm-simulator/vnf-service/src/main/resources/json/createVNFResponse.json b/vnfm-simulator/vnf-service/src/main/resources/json/createVNFResponse.json new file mode 100644 index 0000000000..a66bcc1334 --- /dev/null +++ b/vnfm-simulator/vnf-service/src/main/resources/json/createVNFResponse.json @@ -0,0 +1,19 @@ +{ + "id": "147d9468-4646-11e9-80af-fa163e169afd", + "vnfInstanceName": "MME85_8.EricssonMMEVSPV2_0", + "vnfInstanceDescription": "2f3e21dd-99ba-45b1-b4da-1f71283c46f6", + "vnfdId": "sgsn-mme_onapmme01_cxp9025898_4r85d01", + "vnfProvider": "Ericsson", + "vnfProductName": "SGSN-MME", + "vnfSoftwareVersion": "1.24 (CXS101289_R85D01)", + "vnfdVersion": "onapmme01_cxp9025898_4r85d01", + "vnfPkgId": null, + "vnfConfigurableProperties": null, + "vimConnectionInfo": null, + "instantiationState": "NOT_INSTANTIATED", + "instantiatedVnfInfo": null, + "metadata": null, + "extensions": null, + "links": null + +} |