summaryrefslogtreecommitdiffstats
path: root/cps-rest/src/test/groovy/org/onap/cps/rest/utils/MultipartFileUtilSpec.groovy
diff options
context:
space:
mode:
Diffstat (limited to 'cps-rest/src/test/groovy/org/onap/cps/rest/utils/MultipartFileUtilSpec.groovy')
-rw-r--r--cps-rest/src/test/groovy/org/onap/cps/rest/utils/MultipartFileUtilSpec.groovy67
1 files changed, 58 insertions, 9 deletions
diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/utils/MultipartFileUtilSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/utils/MultipartFileUtilSpec.groovy
index ba5aa4cac..3e2bdec37 100644
--- a/cps-rest/src/test/groovy/org/onap/cps/rest/utils/MultipartFileUtilSpec.groovy
+++ b/cps-rest/src/test/groovy/org/onap/cps/rest/utils/MultipartFileUtilSpec.groovy
@@ -19,30 +19,79 @@
package org.onap.cps.rest.utils
+import org.onap.cps.spi.exceptions.CpsException
import org.onap.cps.spi.exceptions.ModelValidationException
import org.springframework.mock.web.MockMultipartFile
+import org.springframework.web.multipart.MultipartFile
import spock.lang.Specification
+import spock.lang.Unroll
class MultipartFileUtilSpec extends Specification {
- def 'Extract yang resource from multipart file'() {
- given:
+ def 'Extract yang resource from yang file.'() {
+ given: 'uploaded yang file'
def multipartFile = new MockMultipartFile("file", "filename.yang", "text/plain", "content".getBytes())
- when:
+ when: 'resources are extracted from the file'
def result = MultipartFileUtil.extractYangResourcesMap(multipartFile)
- then:
- assert result != null
+ then: 'the expected name and content are extracted as result'
assert result.size() == 1
assert result.get("filename.yang") == "content"
}
- def 'Extract yang resource from file with invalid filename extension'() {
- given:
+ def 'Extract yang resources from zip archive.'() {
+ given: 'uploaded zip archive containing 2 yang files and 1 not yang (json) file'
+ def multipartFile = new MockMultipartFile("file", "TEST.ZIP", "application/zip",
+ getClass().getResource("/yang-files-set.zip").getBytes())
+ when: 'resources are extracted from zip file'
+ def result = MultipartFileUtil.extractYangResourcesMap(multipartFile)
+ then: 'information from yang files is extracted, not yang file (json) is ignored'
+ assert result.size() == 2
+ assert result["assembly.yang"] == "fake assembly content 1\n"
+ assert result["component.yang"] == "fake component content 1\n"
+ }
+
+ @Unroll
+ def 'Extract resources from zip archive having #caseDescriptor.'() {
+ when: 'attempt to extract resources from zip file is performed'
+ MultipartFileUtil.extractYangResourcesMap(multipartFile)
+ then: 'the validation exception is thrown indicating invalid zip file content'
+ thrown(ModelValidationException)
+ where: 'following cases are tested'
+ caseDescriptor | multipartFile
+ 'text files only' | multipartZipFileFromResource("/no-yang-files.zip")
+ 'multiple yang file with same name' | multipartZipFileFromResource("/yang-files-multiple-sets.zip")
+ }
+
+ def 'Extract yang resource from a file with invalid filename extension.'() {
+ given: 'uploaded file with unsupported (.doc) exception'
def multipartFile = new MockMultipartFile("file", "filename.doc", "text/plain", "content".getBytes())
- when:
+ when: 'attempt to extract resources from the file is performed'
MultipartFileUtil.extractYangResourcesMap(multipartFile)
- then:
+ then: 'validation exception is thrown indicating the file type is not supported'
thrown(ModelValidationException)
}
+ @Unroll
+ def 'IOException thrown during yang resources extraction from #fileType file.'() {
+ when: 'attempt to extract resources from the file is performed'
+ MultipartFileUtil.extractYangResourcesMap(multipartFileForIOException(fileType))
+ then: 'CpsException is thrown indicating the internal error occurrence'
+ thrown(CpsException)
+ where: 'following file types are used'
+ fileType << ['YANG', 'ZIP']
+ }
+
+ def multipartZipFileFromResource(resourcePath) {
+ return new MockMultipartFile("file", "TEST.ZIP", "application/zip",
+ getClass().getResource(resourcePath).getBytes())
+ }
+
+ def multipartFileForIOException(extension) {
+ def multipartFile = Mock(MultipartFile)
+ multipartFile.getOriginalFilename() >> "TEST." + extension
+ multipartFile.getBytes() >> { throw new IOException() }
+ multipartFile.getInputStream() >> { throw new IOException() }
+ return multipartFile
+ }
+
}