From a0da7f6b3e04ee6f06f4580f8a14e60f3438d5e7 Mon Sep 17 00:00:00 2001 From: niamhcore Date: Fri, 11 Dec 2020 12:37:35 +0000 Subject: [PATCH] Remove depredcated code/classes Issue-ID: CPS-93 Signed-off-by: niamhcore Change-Id: I49db5244400d5eb4206d59e73aaf801b7f90c61c --- cps-rest/docs/api/swagger/openapi.yml | 43 --------- .../cps/rest/controller/CpsRestController.java | 104 --------------------- .../exceptions/CpsRestExceptionHandlerSpec.groovy | 10 +- .../src/main/java/org/onap/cps/api/CpService.java | 51 ---------- .../java/org/onap/cps/api/CpsModuleService.java | 17 ---- .../java/org/onap/cps/api/impl/CpServiceImpl.java | 49 ---------- .../onap/cps/api/impl/CpsModuleServiceImpl.java | 32 ------- .../org/onap/cps/api/impl/CpServiceImplSpec.groovy | 75 --------------- .../CpsModulePersistenceServiceImplSpec.groovy | 28 ------ 9 files changed, 5 insertions(+), 404 deletions(-) delete mode 100755 cps-service/src/main/java/org/onap/cps/api/CpService.java delete mode 100755 cps-service/src/main/java/org/onap/cps/api/impl/CpServiceImpl.java delete mode 100755 cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy diff --git a/cps-rest/docs/api/swagger/openapi.yml b/cps-rest/docs/api/swagger/openapi.yml index 441d5e52cd..2eed7e633d 100755 --- a/cps-rest/docs/api/swagger/openapi.yml +++ b/cps-rest/docs/api/swagger/openapi.yml @@ -252,49 +252,6 @@ paths: 404: description: Not Found content: {} - post: - tags: - - cps-rest - summary: Create modules for the given dataspace - operationId: createModules - parameters: - - name: dataspace-name - in: path - description: dataspace-name - required: true - schema: - type: string - requestBody: - content: - multipart/form-data: - schema: - required: - - file - properties: - multipartFile: - type: string - description: multipartFile - format: binary - required: true - responses: - 200: - description: OK - content: - application/json: - schema: - type: object - 201: - description: Created - content: {} - 401: - description: Unauthorized - content: {} - 403: - description: Forbidden - content: {} - 404: - description: Not Found - content: {} /v1/dataspaces/{dataspace-name}/nodes: get: tags: diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/CpsRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/CpsRestController.java index 32ea35c5e0..1802ce7a79 100755 --- a/cps-rest/src/main/java/org/onap/cps/rest/controller/CpsRestController.java +++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/CpsRestController.java @@ -20,43 +20,21 @@ package org.onap.cps.rest.controller; -import com.google.gson.Gson; -import com.google.gson.JsonSyntaxException; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; import java.util.Collection; import javax.validation.Valid; import org.modelmapper.ModelMapper; -import org.onap.cps.api.CpService; import org.onap.cps.api.CpsAdminService; -import org.onap.cps.api.CpsModuleService; import org.onap.cps.rest.api.CpsRestApi; -import org.onap.cps.spi.exceptions.CpsException; -import org.onap.cps.spi.exceptions.DataValidationException; import org.onap.cps.spi.model.Anchor; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @RestController public class CpsRestController implements CpsRestApi { - @Autowired - private CpService cpService; - - @Autowired - private CpsModuleService cpsModuleService; - @Autowired private CpsAdminService cpsAdminService; @@ -79,14 +57,6 @@ public class CpsRestController implements CpsRestApi { return new ResponseEntity<>(anchorName, HttpStatus.CREATED); } - @Override - public ResponseEntity createModules(@Valid final MultipartFile multipartFile, final String dataspaceName) { - final File fileToParse = saveToFile(multipartFile); - final SchemaContext schemaContext = cpsModuleService.parseAndValidateModel(fileToParse); - cpsModuleService.storeSchemaContext(schemaContext, dataspaceName); - return new ResponseEntity<>("Resource successfully created", HttpStatus.CREATED); - } - @Override public ResponseEntity createNode(@Valid final MultipartFile multipartFile, final String dataspaceName) { return null; @@ -129,78 +99,4 @@ public class CpsRestController implements CpsRestApi { public ResponseEntity getNodeByDataspaceAndAnchor(final String dataspaceName, final String anchorName) { return null; } - - /* - Old rest endpoints before contract first approach (Need to be removed). - */ - - /** - * Upload a JSON file. - * - * @param uploadedFile the JSON Multipart file. - * @return a ResponseEntity. - */ - @PostMapping("/upload-yang-json-data-file") - public final ResponseEntity uploadYangJsonDataFile(@RequestParam("file") final MultipartFile uploadedFile) { - validateJsonStructure(uploadedFile); - final int persistenceObjectId = cpService.storeJsonStructure(getJsonString(uploadedFile)); - return new ResponseEntity<>( - "Object stored in CPS with identity: " + persistenceObjectId, HttpStatus.OK); - } - - /** - * Read a JSON Object using the object identifier. - * - * @param jsonObjectId the JSON object identifier. - * @return a ResponseEntity. - */ - @GetMapping("/json-object/{id}") - public final ResponseEntity getJsonObjectById( - @PathVariable("id") final int jsonObjectId) { - return new ResponseEntity<>(cpService.getJsonById(jsonObjectId), HttpStatus.OK); - } - - /** - * Delete a JSON Object using the object identifier. - * - * @param jsonObjectId the JSON object identifier. - * @return a ResponseEntity. - */ - @DeleteMapping("json-object/{id}") - public final ResponseEntity deleteJsonObjectById( - @PathVariable("id") final int jsonObjectId) { - cpService.deleteJsonById(jsonObjectId); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - private static void validateJsonStructure(final MultipartFile multipartFile) { - try { - final Gson gson = new Gson(); - gson.fromJson(getJsonString(multipartFile), Object.class); - } catch (final JsonSyntaxException e) { - throw new DataValidationException("Not a valid JSON file.", e.getMessage(), e); - } - } - - private static File saveToFile(final MultipartFile multipartFile) { - try { - final File file = File.createTempFile("tempFile", ".yang"); - file.deleteOnExit(); - try (final OutputStream outputStream = new FileOutputStream(file)) { - outputStream.write(multipartFile.getBytes()); - } - return file; - - } catch (final IOException e) { - throw new CpsException(e); - } - } - - private static String getJsonString(final MultipartFile multipartFile) { - try { - return new String(multipartFile.getBytes()); - } catch (final IOException e) { - throw new CpsException(e); - } - } } diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy index d951cbeb69..e427c6063e 100644 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy @@ -20,7 +20,7 @@ package org.onap.cps.rest.exceptions import groovy.json.JsonSlurper -import org.onap.cps.api.CpService +import org.onap.cps.api.CpsAdminService import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException import org.onap.cps.spi.exceptions.CpsException import org.onap.cps.spi.exceptions.DataValidationException @@ -50,12 +50,12 @@ class CpsRestExceptionHandlerSpec extends Specification { def existingObjectName = 'MyAdminObject' def cpsRestController = new CpsRestController() - def mockCpService = Mock(CpService.class) + def mockCpsAdminService = Mock(CpsAdminService.class) def objectUnderTest = new CpsRestExceptionHandler() def mockMvc = standaloneSetup(cpsRestController).setControllerAdvice(objectUnderTest).build() def setup() { - cpsRestController.cpService = mockCpService + cpsRestController.cpsAdminService = mockCpsAdminService } def 'Get request with runtime exception returns HTTP Status Internal Server Error'() { @@ -130,11 +130,11 @@ class CpsRestExceptionHandlerSpec extends Specification { */ def setupTestException(exception) { - mockCpService.getJsonById(_) >> { throw exception } + mockCpsAdminService.getAnchors(_) >> { throw exception} } def performTestRequest() { - return mockMvc.perform(get('/json-object/1')).andReturn().response + return mockMvc.perform(get('/v1/dataspaces/dataspace-name/anchors')).andReturn().response } void assertTestResponse(response, expectedStatus, expectedErrorMessage, expectedErrorDetails) { diff --git a/cps-service/src/main/java/org/onap/cps/api/CpService.java b/cps-service/src/main/java/org/onap/cps/api/CpService.java deleted file mode 100755 index 29e164d621..0000000000 --- a/cps-service/src/main/java/org/onap/cps/api/CpService.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 Nordix Foundation - * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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.cps.api; - -/** - * Configuration and persistency service interface which holds methods for parsing and storing yang models and data. - */ -public interface CpService { - - /** - * Store the JSON structure in the database. - * - * @param jsonStructure the JSON structure. - * @return entity ID. - */ - Integer storeJsonStructure(String jsonStructure); - - /** - * Read a JSON Object using the object identifier. - * - * @param jsonObjectId the JSON object identifier. - * @return the JSON structure. - */ - String getJsonById(int jsonObjectId); - - /** - * Delete a JSON Object using the object identifier. - * - * @param jsonObjectId the JSON object identifier. - */ - void deleteJsonById(int jsonObjectId); - -} diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java b/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java index 94ebea2fc2..325893d6fd 100644 --- a/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java +++ b/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java @@ -19,7 +19,6 @@ package org.onap.cps.api; -import java.io.File; import org.onap.cps.spi.exceptions.CpsException; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -28,22 +27,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; */ public interface CpsModuleService { - /** - * Parse and validate a string representing a yang model to generate a schema context. - * - * @param yangModelContent the input stream - * @return the schema context - */ - SchemaContext parseAndValidateModel(String yangModelContent); - - /** - * Parse and validate a file representing a yang model to generate a schema context. - * - * @param yangModelFile the yang file - * @return the schema context - */ - SchemaContext parseAndValidateModel(File yangModelFile); - /** * Store schema context for a yang model. * diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpServiceImpl.java deleted file mode 100755 index 3ec08cd733..0000000000 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpServiceImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 Nordix Foundation - * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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.cps.api.impl; - -import org.onap.cps.api.CpService; -import org.onap.cps.spi.DataPersistenceService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class CpServiceImpl implements CpService { - - @Autowired - private DataPersistenceService dataPersistenceService; - - - @Override - public final Integer storeJsonStructure(final String jsonStructure) { - return dataPersistenceService.storeJsonStructure(jsonStructure); - } - - @Override - public final String getJsonById(final int jsonObjectId) { - return dataPersistenceService.getJsonById(jsonObjectId); - } - - @Override - public void deleteJsonById(final int jsonObjectId) { - dataPersistenceService.deleteJsonById(jsonObjectId); - } -} \ No newline at end of file diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java index c7fa04759a..2c600b5571 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java @@ -20,20 +20,12 @@ package org.onap.cps.api.impl; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; import java.util.Optional; import org.onap.cps.api.CpsModuleService; import org.onap.cps.spi.CpsModulePersistenceService; -import org.onap.cps.spi.exceptions.CpsException; -import org.onap.cps.spi.exceptions.ModelValidationException; -import org.onap.cps.utils.YangUtils; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -43,30 +35,6 @@ public class CpsModuleServiceImpl implements CpsModuleService { @Autowired private CpsModulePersistenceService cpsModulePersistenceService; - @Override - public SchemaContext parseAndValidateModel(final String yangModelContent) { - try { - final File tempFile = File.createTempFile("yang", ".yang"); - try (final BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile))) { - writer.write(yangModelContent); - } - return parseAndValidateModel(tempFile); - } catch (final IOException e) { - throw new CpsException(e); - } - } - - @Override - public SchemaContext parseAndValidateModel(final File yangModelFile) { - try { - return YangUtils.parseYangModelFile(yangModelFile); - } catch (final YangParserException e) { - throw new ModelValidationException("Yang file validation failed", e.getMessage(), e); - } catch (final IOException e) { - throw new CpsException(e); - } - } - @Override public void storeSchemaContext(final SchemaContext schemaContext, final String dataspaceName) { for (final Module module : schemaContext.getModules()) { diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy deleted file mode 100755 index 873aba78ab..0000000000 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpServiceImplSpec.groovy +++ /dev/null @@ -1,75 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 Nordix Foundation - * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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.cps.api.impl - - -import org.onap.cps.spi.DataPersistenceService -import spock.lang.Specification - -class CpServiceImplSpec extends Specification { - - def mockDataPersistenceService = Mock(DataPersistenceService) - def objectUnderTest = new CpServiceImpl() - - def setup() { - objectUnderTest.dataPersistenceService = mockDataPersistenceService - } - - def 'Cps Service provides to its client the id assigned by the system when storing a data structure'() { - given: 'that data persistence service is giving id 123 to a data structure it is asked to store' - mockDataPersistenceService.storeJsonStructure(_) >> 123 - expect: 'Cps service returns the same id when storing data structure' - objectUnderTest.storeJsonStructure('') == 123 - } - - def 'Read a JSON object with a valid identifier'(){ - given: 'that the data persistence service returns a JSON structure for identifier 1' - mockDataPersistenceService.getJsonById(1) >> '{name : hello}' - expect: 'that the same JSON structure is returned by CPS' - objectUnderTest.getJsonById(1) == '{name : hello}' - } - - def 'Read a JSON object with an identifier that does not exist'(){ - given: 'that the data persistence service throws an exception' - def exceptionThrownByPersistenceService = new IllegalStateException() - mockDataPersistenceService.getJsonById(_) >> {throw exceptionThrownByPersistenceService} - when: 'we try to get the JSON structure' - objectUnderTest.getJsonById(1); - then: 'the same exception is thrown by CPS' - thrown(IllegalStateException) - } - - def 'Delete a JSON object with a valid identifier'(){ - given: 'that the data persistence service can delete a JSON structure for identifier 1' - mockDataPersistenceService.deleteJsonById(1) - expect: 'No exception is thrown when we delete a JSON structure with identifier 1' - objectUnderTest.deleteJsonById(1) - } - - def 'Delete a JSON object with an identifier that does not exist'(){ - given: 'that the data persistence service throws an exception' - mockDataPersistenceService.deleteJsonById(_) >> {throw new IllegalStateException()} - when: 'we try to delete a JSON structure' - objectUnderTest.deleteJsonById(100); - then: 'the same exception is thrown by CPS' - thrown(IllegalStateException) - } -} diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy index da2df404eb..d2a69d6552 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy @@ -35,39 +35,11 @@ class CpsModulePersistenceServiceImplSpec extends Specification { objectUnderTest.cpsModulePersistenceService = mockModuleStoreService } - def 'Parse and Validate a Yang Model with a Valid Yang Model'() { - given: 'a yang model (file)' - def yangModel = TestUtils.getResourceFileContent('bookstore.yang') - when: 'a valid model is parsed and validated' - def result = objectUnderTest.parseAndValidateModel(yangModel) - then: 'Verify a schema context for that model is created with the correct identity' - assertModule(result) - } - - def 'Parse and Validate a Yang Model Using a File'() { - given: 'a yang file that contains a yang model' - File file = new File(ClassLoader.getSystemClassLoader().getResource('bookstore.yang').getFile()) - when: 'a model is parsed and validated' - def result = objectUnderTest.parseAndValidateModel(file) - then: 'Verify a schema context for that model is created with the correct identity' - assertModule(result) - - } - def assertModule(SchemaContext schemaContext) { def optionalModule = schemaContext.findModule('stores', Revision.of('2020-09-15')) return schemaContext.modules.size() == 1 && optionalModule.isPresent() } - def 'Parse and Validate an Invalid Model'() { - given: 'a yang file that contains a invalid yang model' - File file = new File(ClassLoader.getSystemClassLoader().getResource('invalid.yang').getFile()) - when: 'the model is parsed and validated' - objectUnderTest.parseAndValidateModel(file) - then: 'a CpsValidationException is thrown' - thrown(CpsException) - } - def 'Store a SchemaContext'() { expect: 'No exception to be thrown when a valid model (schema) is stored' objectUnderTest.storeSchemaContext(Stub(SchemaContext.class), "sampleDataspace") -- 2.16.6