diff --git a/spring-integration-zip/build.gradle b/spring-integration-zip/build.gradle index 45c323c..a1d098a 100644 --- a/spring-integration-zip/build.gradle +++ b/spring-integration-zip/build.gradle @@ -1,10 +1,18 @@ +buildscript { + repositories { + mavenCentral() + maven { url 'https://plugins.gradle.org/m2' } + maven { url 'https://repo.spring.io/plugins-release-local' } + } +} + plugins { id 'java-library' id 'eclipse' id 'idea' id 'jacoco' id 'org.sonarqube' version '2.8' - id 'com.jfrog.artifactory' version '4.19.0' + id 'com.jfrog.artifactory' version '4.21.0' } description = 'Spring Integration Zip Adapter' @@ -13,10 +21,11 @@ group = 'org.springframework.integration' repositories { mavenCentral() - if (version.endsWith('BUILD-SNAPSHOT')) { - maven { url 'https://repo.spring.io/libs-snapshot' } + maven { url 'https://repo.spring.io/release' } + maven { url 'https://repo.spring.io/milestone' } + if (version.endsWith('SNAPSHOT')) { + maven { url 'https://repo.spring.io/snapshot' } } - maven { url 'https://repo.spring.io/libs-milestone' } } java { @@ -24,8 +33,8 @@ java { withSourcesJar() } -sourceCompatibility=1.6 -targetCompatibility=1.6 +sourceCompatibility=1.8 +targetCompatibility=1.8 ext { @@ -36,8 +45,10 @@ ext { linkScmConnection = 'https://github.com/spring-projects/spring-integration-extensions.git' linkScmDevConnection = 'git@github.com:spring-projects/spring-integration-extensions.git' - slf4jVersion = '1.7.30' - springIntegrationVersion = '4.3.24.RELEASE' + assertjVersion = '3.20.2' + junitVersion = '5.7.2' + log4jVersion = '2.14.1' + springIntegrationVersion = '5.5.1' ztZipVersion = '1.14' idPrefix = 'zip' @@ -58,7 +69,7 @@ sourceSets { } jacoco { - toolVersion = '0.8.6' + toolVersion = '0.8.7' } dependencies { @@ -66,7 +77,13 @@ dependencies { api "org.zeroturnaround:zt-zip:$ztZipVersion" testImplementation "org.springframework.integration:spring-integration-test:$springIntegrationVersion" - testRuntimeOnly "org.slf4j:slf4j-log4j12:$slf4jVersion" + testImplementation "org.assertj:assertj-core:$assertjVersion" + testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion" + + testRuntimeOnly "org.apache.logging.log4j:log4j-jcl:$log4jVersion" + testRuntimeOnly "org.apache.logging.log4j:log4j-slf4j-impl:$log4jVersion" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.7.2" } @@ -81,7 +98,7 @@ test { jacoco { destinationFile = file("$buildDir/jacoco.exec") } - + useJUnitPlatform() if (System.properties['sonar.host.url']) { finalizedBy jacocoTestReport } @@ -119,7 +136,7 @@ task api(type: Javadoc) { source = sourceSets.main.allJava classpath = project.sourceSets.main.compileClasspath - destinationDir = new File(buildDir, "api") + destinationDir = new File(buildDir, 'api') } task schemaZip(type: Zip) { @@ -168,7 +185,7 @@ task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) { description = "Builds -${archiveClassifier} archive, containing all jars and docs, " + "suitable for community download page." - ext.baseDir = "${project.name}-${project.version}"; + ext.baseDir = "${project.name}-${project.version}" from('src/dist') { include 'readme.txt' @@ -177,11 +194,11 @@ task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) { into "${baseDir}" } - from(zipTree(docsZip.archivePath)) { + from(zipTree(docsZip.archiveFile)) { into "${baseDir}/docs" } - from(zipTree(schemaZip.archivePath)) { + from(zipTree(schemaZip.archiveFile)) { into "${baseDir}/schema" } @@ -200,7 +217,7 @@ task depsZip(type: Zip, dependsOn: distZip) { zipTask -> description = "Builds -${archiveClassifier} archive, containing everything " + "in the -${distZip.archiveClassifier} archive plus all dependencies." - from zipTree(distZip.archivePath) + from zipTree(distZip.archiveFile) gradle.taskGraph.whenReady { taskGraph -> if (taskGraph.hasTask(":${zipTask.name}")) { @@ -209,7 +226,7 @@ task depsZip(type: Zip, dependsOn: distZip) { zipTask -> rootProject.configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { artifact -> def dependency = artifact.moduleVersion.id - if (!projectName.equals(dependency.name)) { + if (projectName != dependency.name) { artifacts << artifact.file } } diff --git a/spring-integration-zip/gradle.properties b/spring-integration-zip/gradle.properties index d845ba3..07ff68b 100644 --- a/spring-integration-zip/gradle.properties +++ b/spring-integration-zip/gradle.properties @@ -1 +1 @@ -version=1.0.5.BUILD-SNAPSHOT +version=2.0.0-SNAPSHOT diff --git a/spring-integration-zip/publish-maven.gradle b/spring-integration-zip/publish-maven.gradle index e903381..794dd4c 100644 --- a/spring-integration-zip/publish-maven.gradle +++ b/spring-integration-zip/publish-maven.gradle @@ -1,5 +1,9 @@ apply plugin: 'maven-publish' +tasks.withType(GenerateModuleMetadata) { + enabled = false +} + publishing { publications { mavenJava(MavenPublication) { diff --git a/spring-integration-zip/src/main/java/org/springframework/integration/zip/ZipHeaders.java b/spring-integration-zip/src/main/java/org/springframework/integration/zip/ZipHeaders.java index 332c465..c325098 100644 --- a/spring-integration-zip/src/main/java/org/springframework/integration/zip/ZipHeaders.java +++ b/spring-integration-zip/src/main/java/org/springframework/integration/zip/ZipHeaders.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,12 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.zip; /** * Zip adapter specific message headers. + * * @author Gunnar Hillert - * @since 1.0 + * */ public abstract class ZipHeaders { diff --git a/spring-integration-zip/src/main/java/org/springframework/integration/zip/splitter/UnZipResultSplitter.java b/spring-integration-zip/src/main/java/org/springframework/integration/zip/splitter/UnZipResultSplitter.java index d068632..de5d236 100644 --- a/spring-integration-zip/src/main/java/org/springframework/integration/zip/splitter/UnZipResultSplitter.java +++ b/spring-integration-zip/src/main/java/org/springframework/integration/zip/splitter/UnZipResultSplitter.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,8 +35,6 @@ import org.springframework.util.Assert; * @author Gunnar Hillert * @author Andriy Kryvtsun * @author Artem Bilan - * - * @since 1.0 */ public class UnZipResultSplitter extends AbstractMessageSplitter { @@ -48,7 +46,7 @@ public class UnZipResultSplitter extends AbstractMessageSplitter { Map unzippedEntries = (Map) message.getPayload(); MessageHeaders headers = message.getHeaders(); - List> messageBuilders = new ArrayList>(unzippedEntries.size()); + List> messageBuilders = new ArrayList<>(unzippedEntries.size()); for (Map.Entry entry : unzippedEntries.entrySet()) { String path = FilenameUtils.getPath(entry.getKey()); diff --git a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/AbstractZipTransformer.java b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/AbstractZipTransformer.java index dd8afce..1f87ac3 100644 --- a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/AbstractZipTransformer.java +++ b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/AbstractZipTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,8 +19,6 @@ package org.springframework.integration.zip.transformer; import java.io.File; import java.nio.charset.Charset; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.integration.file.DefaultFileNameGenerator; import org.springframework.integration.file.FileNameGenerator; import org.springframework.integration.transformer.AbstractTransformer; @@ -32,28 +30,25 @@ import org.springframework.util.Assert; * * @author Gunnar Hillert * @author Artem Bilan - * @since 1.0 + * */ public abstract class AbstractZipTransformer extends AbstractTransformer { - private static final Log logger = LogFactory.getLog(ZipTransformer.class); + protected Charset charset = Charset.defaultCharset(); - protected volatile Charset charset = Charset.defaultCharset(); - - protected volatile FileNameGenerator fileNameGenerator; + protected FileNameGenerator fileNameGenerator; protected ZipResultType zipResultType = ZipResultType.FILE; - protected volatile File workDirectory = + protected File workDirectory = new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer"); - protected volatile boolean deleteFiles; + protected boolean deleteFiles; /** * If the payload is an instance of {@link File}, this property specifies * whether to delete the {@link File} after transformation. * Default is false. - * * @param deleteFiles Defaults to false if not set */ public void setDeleteFiles(boolean deleteFiles) { @@ -64,26 +59,22 @@ public abstract class AbstractZipTransformer extends AbstractTransformer { * Set the work-directory. The work directory is used when the {@link ZipResultType} * is set to {@link ZipResultType#FILE}. By default this property is set to * the System temporary directory containing a sub-directory "ziptransformer". - * * @param workDirectory Must not be null and must not represent a file. */ public void setWorkDirectory(File workDirectory) { Assert.notNull(workDirectory, "workDirectory must not be null."); - Assert.isTrue(!workDirectory.isFile(), "The workDirectory specified must not point to a file"); + Assert.isTrue(workDirectory.isDirectory(), "The workDirectory specified must be a directory."); this.workDirectory = workDirectory; } /** * Defines the format of the data returned after transformation. Available * options are: - * *
    *
  • File
  • *
  • Byte Array
  • *
- * * Defaults to {@link ZipResultType#FILE}. - * * @param zipResultType Must not be null */ public void setZipResultType(ZipResultType zipResultType) { @@ -92,16 +83,14 @@ public abstract class AbstractZipTransformer extends AbstractTransformer { } @Override - protected void onInit() throws Exception { + protected void onInit() { super.onInit(); if (!this.workDirectory.exists()) { - if (logger.isInfoEnabled()) { - logger.info(String.format("Creating work directory '%s'.", this.workDirectory)); - } - Assert.isTrue(this.workDirectory.mkdirs(), "Can't create the 'workDirectory': " + this.workDirectory); + logger.info(() -> "Creating work directory: " + this.workDirectory); + Assert.isTrue(this.workDirectory.mkdirs(), () -> "Can't create the 'workDirectory': " + this.workDirectory); } - final DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator(); + DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator(); defaultFileNameGenerator.setBeanFactory(getBeanFactory()); defaultFileNameGenerator.setConversionService(getConversionService()); this.fileNameGenerator = defaultFileNameGenerator; @@ -112,22 +101,16 @@ public abstract class AbstractZipTransformer extends AbstractTransformer { * @param message the message and its payload must not be null. */ @Override - protected Object doTransform(Message message) throws Exception { - Assert.notNull(message, "message must not be null"); - final Object payload = message.getPayload(); - Assert.notNull(payload, "payload must not be null"); - + protected Object doTransform(Message message) { return doZipTransform(message); } /** * Subclasses must implement this method to provide the Zip transformation * logic. - * * @param message The message will never be null. * @return The result of the Zip transformation. - * @throws Exception Any exception. */ - protected abstract Object doZipTransform(Message message) throws Exception; + protected abstract Object doZipTransform(Message message); } diff --git a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/SpringZipUtils.java b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/SpringZipUtils.java index 99b0e3e..bb057b2 100644 --- a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/SpringZipUtils.java +++ b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/SpringZipUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,49 +29,38 @@ import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.zeroturnaround.zip.ZipEntrySource; import org.zeroturnaround.zip.ZipException; +import org.springframework.core.log.LogAccessor; + /** * Once the Spring Integration Zip support matures, we need to contribute the * methods in this utility class back to the ZT Zip project. + * * @author Gunnar Hillert - * @since 1.0 */ public class SpringZipUtils { - private static final Log logger = LogFactory.getLog(SpringZipUtils.class); + private static final LogAccessor logger = new LogAccessor(SpringZipUtils.class); public static byte[] pack(Collection entries, int compressionLevel) { - - if (logger.isDebugEnabled()) { - logger.debug(String.format("Creating byte array from '%s'.", - entries)); - } - - final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - + logger.debug(() -> "Creating byte array from: " + entries); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); pack(entries, outputStream, compressionLevel); - return outputStream.toByteArray(); } public static void pack(Collection entries, File zip, int compressionLevel) { + logger.debug(() -> "Creating '" + zip + "' from " + entries + "."); - if (logger.isDebugEnabled()) { - logger.debug("Creating '" + zip + "' from " + entries + "."); - } - - final FileOutputStream outputStream; + FileOutputStream outputStream; try { outputStream = new FileOutputStream(zip); } catch (FileNotFoundException e) { throw new IllegalStateException(String.format("File '%s' not found.", zip.getAbsolutePath()), e); } - pack(entries, outputStream, compressionLevel); } diff --git a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/UnZipTransformer.java b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/UnZipTransformer.java index 1dee188..b6987e1 100644 --- a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/UnZipTransformer.java +++ b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/UnZipTransformer.java @@ -26,8 +26,6 @@ import java.util.TreeMap; import java.util.zip.ZipEntry; import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.zeroturnaround.zip.ZipEntryCallback; import org.zeroturnaround.zip.ZipException; import org.zeroturnaround.zip.ZipUtil; @@ -44,13 +42,9 @@ import org.springframework.messaging.MessagingException; * @author Artem Bilan * @author Ingo Dueppe * - * @since 1.0 - * */ public class UnZipTransformer extends AbstractZipTransformer { - private static final Log logger = LogFactory.getLog(UnZipTransformer.class); - private volatile boolean expectSingleResult = false; /** @@ -73,8 +67,8 @@ public class UnZipTransformer extends AbstractZipTransformer { @Override protected Object doZipTransform(final Message message) { try { - final Object payload = message.getPayload(); - final Object unzippedData; + Object payload = message.getPayload(); + Object unzippedData; InputStream inputStream = null; @@ -83,13 +77,12 @@ public class UnZipTransformer extends AbstractZipTransformer { final File filePayload = (File) payload; if (filePayload.isDirectory()) { - throw new UnsupportedOperationException(String.format("Cannot unzip a directory: '%s'", - filePayload.getAbsolutePath())); + throw new UnsupportedOperationException("Cannot unzip a directory: " + + filePayload.getAbsolutePath()); } if (!SpringZipUtils.isValid(filePayload)) { - throw new IllegalStateException(String.format("Not a zip file: '%s'.", - filePayload.getAbsolutePath())); + throw new IllegalStateException("Not a zip file: " + filePayload.getAbsolutePath()); } inputStream = new FileInputStream(filePayload); @@ -101,12 +94,11 @@ public class UnZipTransformer extends AbstractZipTransformer { inputStream = new ByteArrayInputStream((byte[]) payload); } else { - throw new IllegalArgumentException(String.format("Unsupported payload type '%s'. " + - "The only supported payload types are java.io.File, byte[] and java.io.InputStream", - payload.getClass().getSimpleName())); + throw new IllegalArgumentException("Unsupported payload type '" + payload.getClass().getSimpleName() + + "'. The only supported payload types are java.io.File, byte[] and java.io.InputStream"); } - final SortedMap uncompressedData = new TreeMap(); + final SortedMap uncompressedData = new TreeMap<>(); ZipUtil.iterate(inputStream, new ZipEntryCallback() { @@ -118,11 +110,9 @@ public class UnZipTransformer extends AbstractZipTransformer { final long zipEntryCompressedSize = zipEntry.getCompressedSize(); final String type = zipEntry.isDirectory() ? "directory" : "file"; - if (logger.isInfoEnabled()) { - logger.info(String.format("Unpacking Zip Entry - Name: '%s',Time: '%s', " + - "Compressed Size: '%s', Type: '%s'", - zipEntryName, zipEntryTime, zipEntryCompressedSize, type)); - } + logger.info(() -> String.format("Unpacking Zip Entry - Name: '%s',Time: '%s', " + + "Compressed Size: '%s', Type: '%s'", + zipEntryName, zipEntryTime, zipEntryCompressedSize, type)); if (ZipResultType.FILE.equals(zipResultType)) { final File destinationFile = checkPath(message, zipEntryName); @@ -167,9 +157,7 @@ public class UnZipTransformer extends AbstractZipTransformer { }); if (uncompressedData.isEmpty()) { - if (logger.isWarnEnabled()) { - logger.warn("No data unzipped from payload with message Id " + message.getHeaders().getId()); - } + logger.warn(() -> "No data unzipped from payload with message Id " + message.getHeaders().getId()); unzippedData = null; } else { @@ -195,9 +183,7 @@ public class UnZipTransformer extends AbstractZipTransformer { if (payload instanceof File && this.deleteFiles) { final File filePayload = (File) payload; if (!filePayload.delete() && logger.isWarnEnabled()) { - if (logger.isWarnEnabled()) { - logger.warn("failed to delete File '" + filePayload + "'"); - } + logger.warn(() -> "failed to delete File '" + filePayload + "'"); } } } diff --git a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipResultType.java b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipResultType.java index 7c1dffa..c8b401e 100644 --- a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipResultType.java +++ b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipResultType.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.zip.transformer; /** * @author Gunnar Hillert - * @since 1.0 */ public enum ZipResultType { diff --git a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipTransformer.java b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipTransformer.java index 79059d0..a2c73f7 100644 --- a/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipTransformer.java +++ b/spring-integration-zip/src/main/java/org/springframework/integration/zip/transformer/ZipTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,13 +17,13 @@ package org.springframework.integration.zip.transformer; import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; import java.util.ArrayList; import java.util.Date; import java.util.zip.Deflater; import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.zeroturnaround.zip.ByteSource; import org.zeroturnaround.zip.FileSource; import org.zeroturnaround.zip.ZipEntrySource; @@ -49,13 +49,10 @@ import org.springframework.util.StringUtils; * * @author Gunnar Hillert * @author Artem Bilan - * @since 1.0 * */ public class ZipTransformer extends AbstractZipTransformer { - private static final Log logger = LogFactory.getLog(ZipTransformer.class); - private static final String ZIP_EXTENSION = ".zip"; private volatile int compressionLevel = Deflater.DEFAULT_COMPRESSION; @@ -63,8 +60,7 @@ public class ZipTransformer extends AbstractZipTransformer { private volatile boolean useFileAttributes = true; /** - * Sets the compression level. Default is {@link Deflater#DEFAULT_COMPRESSION}. - * + * Set the compression level. Default is {@link Deflater#DEFAULT_COMPRESSION}. * @param compressionLevel Must be an integer value from 0-9. */ public void setCompressionLevel(int compressionLevel) { @@ -73,9 +69,7 @@ public class ZipTransformer extends AbstractZipTransformer { } /** - * Specifies whether the name of the file shall be used for the - * zip entry. - * + * Specify whether the name of the file shall be used for the zip entry. * @param useFileAttributes Defaults to true if not set explicitly */ public void setUseFileAttributes(boolean useFileAttributes) { @@ -84,20 +78,17 @@ public class ZipTransformer extends AbstractZipTransformer { /** * The payload may encompass the following types: - * *
    *
  • {@link File} *...
  • {@link String} *...
  • byte[] *...
  • {@link Iterable} *
- * * When providing an {@link Iterable}, nested Iterables are not supported. However, * payloads can be of of any of the other supported types. - * */ @Override - protected Object doZipTransform(Message message) throws Exception { + protected Object doZipTransform(Message message) { final Object payload = message.getPayload(); final Object zippedData; final String baseFileName = this.fileNameGenerator.generateFileName(message); @@ -128,7 +119,7 @@ public class ZipTransformer extends AbstractZipTransformer { lastModifiedDate = new Date(); } - java.util.List entries = new ArrayList(); + java.util.List entries = new ArrayList<>(); if (payload instanceof Iterable) { int counter = 1; @@ -144,9 +135,7 @@ public class ZipTransformer extends AbstractZipTransformer { final ZipEntrySource zipEntrySource = createZipEntrySource(item, lastModifiedDate, baseName + "_" + counter + fileExtension, this.useFileAttributes); - if (logger.isDebugEnabled()) { - logger.debug("ZipEntrySource path: '" + zipEntrySource.getPath() + "'"); - } + logger.debug(() -> "ZipEntrySource path: '" + zipEntrySource.getPath() + "'"); entries.add(zipEntrySource); counter++; } @@ -161,7 +150,12 @@ public class ZipTransformer extends AbstractZipTransformer { if (ZipResultType.FILE.equals(this.zipResultType)) { final File zippedFile = new File(this.workDirectory, zipFileName); - FileCopyUtils.copy(zippedBytes, zippedFile); + try { + FileCopyUtils.copy(zippedBytes, zippedFile); + } + catch (IOException ex) { + throw new UncheckedIOException(ex); + } zippedData = zippedFile; } else if (ZipResultType.BYTE_ARRAY.equals(this.zipResultType)) { @@ -189,8 +183,8 @@ public class ZipTransformer extends AbstractZipTransformer { } private void deleteFile(Object fileToDelete) { - if (fileToDelete instanceof File && !((File) fileToDelete).delete() && logger.isWarnEnabled()) { - logger.warn("Failed to delete File '" + fileToDelete + "'"); + if (fileToDelete instanceof File && !((File) fileToDelete).delete()) { + logger.warn(() -> "Failed to delete File '" + fileToDelete + "'"); } } @@ -210,8 +204,7 @@ public class ZipTransformer extends AbstractZipTransformer { } else if (item instanceof byte[] || item instanceof String) { - - byte[] bytesToCompress = null; + byte[] bytesToCompress; if (item instanceof String) { bytesToCompress = ((String) item).getBytes(this.charset); diff --git a/spring-integration-zip/src/main/resources/META-INF/spring.schemas b/spring-integration-zip/src/main/resources/META-INF/spring.schemas index 361a924..72c60f8 100644 --- a/spring-integration-zip/src/main/resources/META-INF/spring.schemas +++ b/spring-integration-zip/src/main/resources/META-INF/spring.schemas @@ -1,4 +1,4 @@ -http\://www.springframework.org/schema/integration/zip/spring-integration-zip-1.0.xsd=org/springframework/integration/zip/config/spring-integration-zip-1.0.xsd -http\://www.springframework.org/schema/integration/zip/spring-integration-zip.xsd=org/springframework/integration/zip/config/spring-integration-zip-1.0.xsd -https\://www.springframework.org/schema/integration/zip/spring-integration-zip-1.0.xsd=org/springframework/integration/zip/config/spring-integration-zip-1.0.xsd -https\://www.springframework.org/schema/integration/zip/spring-integration-zip.xsd=org/springframework/integration/zip/config/spring-integration-zip-1.0.xsd +http\://www.springframework.org/schema/integration/zip/spring-integration-zip-1.0.xsd=org/springframework/integration/zip/config/spring-integration-zip.xsd +http\://www.springframework.org/schema/integration/zip/spring-integration-zip.xsd=org/springframework/integration/zip/config/spring-integration-zip.xsd +https\://www.springframework.org/schema/integration/zip/spring-integration-zip-1.0.xsd=org/springframework/integration/zip/config/spring-integration-zip.xsd +https\://www.springframework.org/schema/integration/zip/spring-integration-zip.xsd=org/springframework/integration/zip/config/spring-integration-zip.xsd diff --git a/spring-integration-zip/src/main/resources/org/springframework/integration/zip/config/spring-integration-zip-1.0.xsd b/spring-integration-zip/src/main/resources/org/springframework/integration/zip/config/spring-integration-zip.xsd similarity index 100% rename from spring-integration-zip/src/main/resources/org/springframework/integration/zip/config/spring-integration-zip-1.0.xsd rename to spring-integration-zip/src/main/resources/org/springframework/integration/zip/config/spring-integration-zip.xsd diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests-context.xml b/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests-context.xml index dd4232c..13b2cac 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests-context.xml +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests-context.xml @@ -11,6 +11,8 @@ http://www.springframework.org/schema/integration/zip https://www.springframework.org/schema/integration/zip/spring-integration-zip.xsd http://www.springframework.org/schema/integration https://www.springframework.org/schema/integration/spring-integration.xsd"> + + @@ -26,9 +28,8 @@ - + - + - diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests.java b/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests.java index cb840e3..f08f489 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests.java +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/UnZip2FileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,110 +16,95 @@ package org.springframework.integration.zip; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.instanceOf; -import static org.junit.Assert.fail; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.Properties; +import java.nio.file.Files; +import java.nio.file.Path; import org.apache.commons.io.IOUtils; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import org.zeroturnaround.zip.ZipException; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.ImportResource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; -import org.springframework.core.io.ResourceLoader; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.transformer.MessageTransformationException; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.MessageHandlingException; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * * @author Gunnar Hillert - * @since 1.0 - * + * @author Artem Bilan */ +@SpringJUnitConfig +@DirtiesContext public class UnZip2FileTests { - private AnnotationConfigApplicationContext context; - private ResourceLoader resourceLoader; + @Autowired + private ApplicationContext context; + + @Autowired private MessageChannel input; - private static final Properties properties = new Properties(); + @TempDir + public static File workDir; - @Rule - public TemporaryFolder testFolder = new TemporaryFolder(); - - private File workDir; - - @Before - public void setup() throws IOException { - this.workDir = this.testFolder.newFolder(); - properties.put("workDir", this.workDir); - System.out.print(this.workDir.getAbsolutePath()); - - this.context = new AnnotationConfigApplicationContext(); - this.context.register(ContextConfiguration.class); - this.context.refresh(); - this.input = this.context.getBean("input", MessageChannel.class); - this.resourceLoader = this.context; + @BeforeAll + public static void setup() { + System.setProperty("workDir", workDir.getAbsolutePath()); } - @After - public void cleanup() { - if (this.context != null) { - this.context.close(); - } + @BeforeEach + public void cleanUp() { + cleanupDirectory(workDir); } @Test public void unZipWithOneEntry() throws Exception { - - final Resource resource = this.resourceLoader.getResource("classpath:testzipdata/single.zip"); + final Resource resource = this.context.getResource("classpath:testzipdata/single.zip"); final InputStream is = resource.getInputStream(); byte[] zipdata = IOUtils.toByteArray(is); + is.close(); final Message message = MessageBuilder.withPayload(zipdata).build(); input.send(message); - Assert.assertTrue(this.workDir.list().length == 1); + assertThat(workDir.list()).hasSize(1); - File fileInWorkDir = this.workDir.listFiles()[0]; + File fileInWorkDir = workDir.listFiles()[0]; - Assert.assertTrue(fileInWorkDir.isFile()); - Assert.assertEquals("single.txt", fileInWorkDir.getName()); + assertThat(fileInWorkDir).isFile(); + assertThat(fileInWorkDir).hasName("single.txt"); } @Test public void unZipWithMultipleEntries() throws Exception { - - final Resource resource = resourceLoader.getResource("classpath:testzipdata/countries.zip"); + final Resource resource = this.context.getResource("classpath:testzipdata/countries.zip"); final InputStream is = resource.getInputStream(); byte[] zipdata = IOUtils.toByteArray(is); + is.close(); final Message message = MessageBuilder.withPayload(zipdata).build(); input.send(message); - Assert.assertTrue(this.workDir.list().length == 4); + assertThat(workDir.list()).hasSize(4); - File[] files = this.workDir.listFiles(); + File[] files = workDir.listFiles(); boolean continents = false; boolean de = false; @@ -129,58 +114,47 @@ public class UnZip2FileTests { for (File file : files) { if (file.getName().equals("continents")) { continents = true; - Assert.assertTrue(file.isDirectory()); - Assert.assertTrue(file.list().length == 2); + assertThat(file).isDirectory(); + assertThat(file.list()).hasSize(2); } if (file.getName().equals("de.txt")) { de = true; - Assert.assertTrue(file.isFile()); + assertThat(file).isFile(); } if (file.getName().equals("fr.txt")) { fr = true; - Assert.assertTrue(file.isFile()); + assertThat(file).isFile(); } if (file.getName().equals("pl.txt")) { pl = true; - Assert.assertTrue(file.isFile()); + assertThat(file).isFile(); } } - Assert.assertTrue(continents); - Assert.assertTrue(de); - Assert.assertTrue(fr); - Assert.assertTrue(pl); - + assertThat(continents).isTrue(); + assertThat(de).isTrue(); + assertThat(fr).isTrue(); + assertThat(pl).isTrue(); } @Test public void unZipTraversal() throws Exception { - final Resource resource = this.resourceLoader.getResource("classpath:testzipdata/zip-malicious-traversal.zip"); + final Resource resource = this.context.getResource("classpath:testzipdata/zip-malicious-traversal.zip"); final InputStream is = resource.getInputStream(); byte[] zipdata = IOUtils.toByteArray(is); final Message message = MessageBuilder.withPayload(zipdata).build(); - try { - input.send(message); - fail("Expected Exception"); - } - catch (Exception e) { - Assert.assertThat(e, instanceOf(MessageTransformationException.class)); - Assert.assertThat(e.getCause(), instanceOf(MessageHandlingException.class)); - Assert.assertThat(e.getCause().getCause(), instanceOf(ZipException.class)); - Assert.assertThat(e.getCause().getCause().getMessage(), - containsString("is trying to leave the target output directory")); - } + assertThatExceptionOfType(MessageTransformationException.class) + .isThrownBy(() -> input.send(message)) + .withRootCauseInstanceOf(ZipException.class) + .withMessageContaining("is trying to leave the target output directory"); } - @Configuration - @ImportResource("classpath:org/springframework/integration/zip/UnZip2FileTests-context.xml") - public static class ContextConfiguration { - - @Bean - Properties properties() throws IOException { - return properties; + private static void cleanupDirectory(File dir) { + for (File file: dir.listFiles()) { + if (file.isDirectory()) + cleanupDirectory(file); + file.delete(); } - } } diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests-context.xml b/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests-context.xml index 977d9f9..39fe5e3 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests-context.xml +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests-context.xml @@ -11,6 +11,8 @@ http://www.springframework.org/schema/integration/zip https://www.springframework.org/schema/integration/zip/spring-integration-zip.xsd http://www.springframework.org/schema/integration https://www.springframework.org/schema/integration/spring-integration.xsd"> + + @@ -21,5 +23,4 @@ - diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests.java b/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests.java index 2824b61..2bedda6 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests.java +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/Zip2FileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,126 +16,108 @@ package org.springframework.integration.zip; +import static org.assertj.core.api.Assertions.assertThat; + import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; -import java.util.Properties; import org.apache.commons.io.FileUtils; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.ImportResource; import org.springframework.integration.file.FileHeaders; import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * * @author Gunnar Hillert * @author Artem Bilan - * @since 1.0 - * */ +@SpringJUnitConfig +@DirtiesContext public class Zip2FileTests { - private AnnotationConfigApplicationContext context; - + @Autowired private MessageChannel input; - private static final Properties properties = new Properties(); + @TempDir + public static File workDir; - @Rule - public TemporaryFolder testFolder = new TemporaryFolder(); - - private File workDir; - - @Before - public void setup() throws IOException { - this.workDir = testFolder.newFolder(); - properties.put("workDir", workDir); - - context = new AnnotationConfigApplicationContext(); - context.register(ContextConfiguration.class); - context.refresh(); - input = context.getBean("input", MessageChannel.class); + @BeforeAll + public static void setup() { + System.setProperty("workDir", workDir.getAbsolutePath()); } - @After - public void cleanup() { - if (context != null) { - context.close(); + @BeforeEach + public void cleanUp() { + for (File file : workDir.listFiles()) { + file.delete(); } } @Test - public void zipStringWithDefaultFileName() throws IOException, InterruptedException { - + public void zipStringWithDefaultFileName() { final Message message = MessageBuilder.withPayload("Zip me up.").build(); - input.send(message); + assertThat(workDir.list()).hasSize(1); - Assert.assertTrue(this.workDir.list().length == 1); + File fileInWorkDir = workDir.listFiles()[0]; - File fileInWorkDir = this.workDir.listFiles()[0]; - - Assert.assertTrue(fileInWorkDir.isFile()); - Assert.assertTrue(fileInWorkDir.getName().contains(message.getHeaders().getId().toString())); - Assert.assertTrue("The created file should have a 'zip' file extension.", - fileInWorkDir.getName().endsWith(".zip")); + assertThat(fileInWorkDir.isFile()).isTrue(); + assertThat(fileInWorkDir.getName()).contains(message.getHeaders().getId().toString()); + assertThat(fileInWorkDir.getName()).endsWith(".zip"); } @Test - public void zipStringWithExplicitFileName() throws IOException, InterruptedException { + public void zipStringWithExplicitFileName() { input.send(MessageBuilder.withPayload("Zip me up.") .setHeader(FileHeaders.FILENAME, "zipString.zip") .build()); - Assert.assertTrue(this.workDir.list().length == 1); - Assert.assertEquals("zipString.zip", this.workDir.listFiles()[0].getName()); + assertThat(workDir.list()).hasSize(1); + assertThat(workDir.list()[0]).isEqualTo("zipString.zip"); } @Test - public void zipBytesWithExplicitFileName() throws IOException, InterruptedException { - + public void zipBytesWithExplicitFileName() { input.send(MessageBuilder.withPayload("Zip me up.".getBytes()) .setHeader(FileHeaders.FILENAME, "zipString.zip") .build()); - Assert.assertTrue(this.workDir.list().length == 1); - Assert.assertEquals("zipString.zip", this.workDir.listFiles()[0].getName()); + assertThat(workDir.list()).hasSize(1); + assertThat(workDir.list()[0]).isEqualTo("zipString.zip"); } @Test - public void zipFile() throws IOException, InterruptedException { - - final File fileToCompress = testFolder.newFile(); - FileUtils.writeStringToFile(fileToCompress, "hello world"); + public void zipFile() throws IOException { + File fileToCompress = File.createTempFile("test1", "tmp"); + FileUtils.writeStringToFile(fileToCompress, "hello world", Charset.defaultCharset()); input.send(MessageBuilder.withPayload(fileToCompress).build()); - Assert.assertTrue(this.workDir.list().length == 1); - Assert.assertEquals(fileToCompress.getName() + ".zip", this.workDir.listFiles()[0].getName()); + assertThat(workDir.list()).hasSize(1); + assertThat(workDir.list()[0]).isEqualTo(fileToCompress.getName() + ".zip"); } @Test - public void zipIterableWithMultipleStrings() throws IOException, InterruptedException { - + public void zipIterableWithMultipleStrings() { String stringToCompress1 = "String1"; String stringToCompress2 = "String2"; String stringToCompress3 = "String3"; String stringToCompress4 = "String4"; - final List stringsToCompress = new ArrayList(4); + List stringsToCompress = new ArrayList<>(4); stringsToCompress.add(stringToCompress1); stringsToCompress.add(stringToCompress2); @@ -146,19 +128,19 @@ public class Zip2FileTests { .setHeader(FileHeaders.FILENAME, "zipWith4Strings.zip") .build()); - Assert.assertTrue(this.workDir.list().length == 1); - Assert.assertEquals("zipWith4Strings.zip", this.workDir.listFiles()[0].getName()); + assertThat(workDir.list()).hasSize(1); + assertThat(workDir.list()[0]).isEqualTo("zipWith4Strings.zip"); } @Test - public void zipIterableWithDifferentTypes() throws IOException, InterruptedException { + public void zipIterableWithDifferentTypes() throws IOException { String stringToCompress = "String1"; byte[] bytesToCompress = "String2".getBytes(); - final File fileToCompress = testFolder.newFile(); - FileUtils.writeStringToFile(fileToCompress, "hello world"); + File fileToCompress = File.createTempFile("test2", "tmp"); + FileUtils.writeStringToFile(fileToCompress, "hello world", Charset.defaultCharset()); - final List objectsToCompress = new ArrayList(3); + final List objectsToCompress = new ArrayList<>(3); objectsToCompress.add(stringToCompress); objectsToCompress.add(bytesToCompress); @@ -168,19 +150,8 @@ public class Zip2FileTests { .setHeader(FileHeaders.FILENAME, "objects-to-compress.zip") .build()); - Assert.assertTrue(this.workDir.list().length == 1); - Assert.assertEquals("objects-to-compress.zip", this.workDir.listFiles()[0].getName()); - } - - @Configuration - @ImportResource("classpath:org/springframework/integration/zip/Zip2FileTests-context.xml") - public static class ContextConfiguration { - - @Bean - Properties properties() throws IOException { - return properties; - } - + assertThat(workDir.list()).hasSize(1); + assertThat(workDir.list()[0]).isEqualTo("objects-to-compress.zip"); } } diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests.xml b/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests-context.xml similarity index 100% rename from spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests.xml rename to spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests-context.xml diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests.java b/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests.java index 2b9950a..a1db7f7 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests.java +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/UnZipTransformerParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * 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 @@ -13,18 +13,15 @@ package org.springframework.integration.zip.config.xml; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.nio.charset.Charset; -import org.junit.After; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.channel.AbstractMessageChannel; import org.springframework.integration.endpoint.EventDrivenConsumer; import org.springframework.integration.file.DefaultFileNameGenerator; @@ -33,32 +30,32 @@ import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.transformer.MessageTransformingHandler; import org.springframework.integration.zip.transformer.UnZipTransformer; import org.springframework.integration.zip.transformer.ZipResultType; -import org.springframework.util.Assert; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * * @author Gunnar Hillert - * @since 1.0 + * @author Artem Bilan * */ +@SpringJUnitConfig +@DirtiesContext public class UnZipTransformerParserTests { + @Autowired private ConfigurableApplicationContext context; @Test public void testUnZipTransformerParserWithDefaults() { - - setUp("UnZipTransformerParserTests.xml", getClass()); - - EventDrivenConsumer consumer = this.context.getBean("unzipTransformerWithDefaults", EventDrivenConsumer.class); + EventDrivenConsumer consumer = this.context.getBean("unzipTransformerWithDefaults", EventDrivenConsumer.class); final AbstractMessageChannel inputChannel = TestUtils.getPropertyValue(consumer, "inputChannel", AbstractMessageChannel.class); - assertEquals("input", inputChannel.getComponentName()); + assertThat(inputChannel.getComponentName()).isEqualTo("input"); final MessageTransformingHandler handler = TestUtils.getPropertyValue(consumer, "handler", MessageTransformingHandler.class); - final AbstractMessageChannel outputChannel = TestUtils.getPropertyValue(handler, "outputChannel", AbstractMessageChannel.class); - assertEquals("output", outputChannel.getComponentName()); + assertThat(TestUtils.getPropertyValue(handler, "outputChannelName")).isEqualTo("output"); final UnZipTransformer unZipTransformer = TestUtils.getPropertyValue(handler, "transformer", UnZipTransformer.class); @@ -69,37 +66,34 @@ public class UnZipTransformerParserTests { final Boolean deleteFiles = TestUtils.getPropertyValue(unZipTransformer, "deleteFiles", Boolean.class); final Boolean expectSingleResult = TestUtils.getPropertyValue(unZipTransformer, "expectSingleResult", Boolean.class); - assertNotNull(charset); - assertNotNull(fileNameGenerator); - assertNotNull(zipResultType); - assertNotNull(workDirectory); - assertNotNull(deleteFiles); - assertNotNull(expectSingleResult); + assertThat(charset).isNotNull(); + assertThat(fileNameGenerator).isNotNull(); + assertThat(zipResultType).isNotNull(); + assertThat(workDirectory).isNotNull(); + assertThat(deleteFiles).isNotNull(); + assertThat(expectSingleResult).isNotNull(); - assertEquals(Charset.defaultCharset(), charset); - Assert.isInstanceOf(DefaultFileNameGenerator.class, fileNameGenerator); - assertEquals(ZipResultType.FILE, zipResultType); - assertEquals(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer"), workDirectory); - assertTrue("WorkDirectory should exist.", workDirectory.exists()); - assertTrue("WorkDirectory should be a directory.", workDirectory.isDirectory()); - assertFalse("By default the 'deleteFiles' property should be false.", deleteFiles); - assertFalse("The 'expectSingleResult' property should be false.", expectSingleResult); + assertThat(charset).isEqualTo(Charset.defaultCharset()); + assertThat(fileNameGenerator).isInstanceOf(DefaultFileNameGenerator.class); + assertThat(zipResultType).isEqualTo(ZipResultType.FILE); + assertThat(workDirectory) + .isEqualTo(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer")); + assertThat(workDirectory.exists()).isTrue(); + assertThat(workDirectory.isDirectory()).isTrue(); + assertThat(deleteFiles).isFalse(); + assertThat(expectSingleResult).isFalse(); } @Test public void testUnZipTransformerParserWithExplicitSettings() { - - setUp("UnZipTransformerParserTests.xml", getClass()); - - EventDrivenConsumer consumer = this.context.getBean("unzipTransformer", EventDrivenConsumer.class); + EventDrivenConsumer consumer = this.context.getBean("unzipTransformer", EventDrivenConsumer.class); final AbstractMessageChannel inputChannel = TestUtils.getPropertyValue(consumer, "inputChannel", AbstractMessageChannel.class); - assertEquals("input", inputChannel.getComponentName()); + assertThat(inputChannel.getComponentName()).isEqualTo("input"); final MessageTransformingHandler handler = TestUtils.getPropertyValue(consumer, "handler", MessageTransformingHandler.class); - final AbstractMessageChannel outputChannel = TestUtils.getPropertyValue(handler, "outputChannel", AbstractMessageChannel.class); - assertEquals("output", outputChannel.getComponentName()); + assertThat(TestUtils.getPropertyValue(handler, "outputChannelName")).isEqualTo("output"); final UnZipTransformer unZipTransformer = TestUtils.getPropertyValue(handler, "transformer", UnZipTransformer.class); @@ -110,32 +104,22 @@ public class UnZipTransformerParserTests { final Boolean deleteFiles = TestUtils.getPropertyValue(unZipTransformer, "deleteFiles", Boolean.class); final Boolean expectSingleResult = TestUtils.getPropertyValue(unZipTransformer, "expectSingleResult", Boolean.class); - assertNotNull(charset); - assertNotNull(fileNameGenerator); - assertNotNull(zipResultType); - assertNotNull(workDirectory); - assertNotNull(deleteFiles); - assertNotNull(expectSingleResult); + assertThat(charset).isNotNull(); + assertThat(fileNameGenerator).isNotNull(); + assertThat(zipResultType).isNotNull(); + assertThat(workDirectory).isNotNull(); + assertThat(deleteFiles).isNotNull(); + assertThat(expectSingleResult).isNotNull(); - assertEquals(Charset.defaultCharset(), charset); - Assert.isInstanceOf(DefaultFileNameGenerator.class, fileNameGenerator); - assertEquals(ZipResultType.FILE, zipResultType); - assertEquals(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer"), workDirectory); - assertTrue("WorkDirectory should exist.", workDirectory.exists()); - assertTrue("WorkDirectory should be a directory.", workDirectory.isDirectory()); - assertTrue("The 'deleteFiles' property should be true.", deleteFiles); - assertTrue("The 'expectSingleResult' property should be true.", expectSingleResult); - } - - @After - public void tearDown(){ - if(context != null){ - context.close(); - } - } - - public void setUp(String name, Class cls){ - context = new ClassPathXmlApplicationContext(name, cls); + assertThat(charset).isEqualTo(Charset.defaultCharset()); + assertThat(fileNameGenerator).isInstanceOf(DefaultFileNameGenerator.class); + assertThat(zipResultType).isEqualTo(ZipResultType.FILE); + assertThat(workDirectory) + .isEqualTo(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer")); + assertThat(workDirectory.exists()).isTrue(); + assertThat(workDirectory.isDirectory()).isTrue(); + assertThat(deleteFiles).isTrue(); + assertThat(expectSingleResult).isTrue(); } } diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests.xml b/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests-context.xml similarity index 100% rename from spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests.xml rename to spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests-context.xml diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests.java b/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests.java index 9b8ae78..c542977 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests.java +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/config/xml/ZipTransformerParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2017 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * 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 @@ -13,22 +13,17 @@ package org.springframework.integration.zip.config.xml; -import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.io.File; import java.nio.charset.Charset; import java.util.zip.Deflater; -import org.junit.After; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.channel.AbstractMessageChannel; @@ -39,32 +34,30 @@ import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.transformer.MessageTransformingHandler; import org.springframework.integration.zip.transformer.ZipResultType; import org.springframework.integration.zip.transformer.ZipTransformer; -import org.springframework.util.Assert; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * @author Gunnar Hillert * @author Artem Bilan - * - * @since 1.0 */ +@SpringJUnitConfig +@DirtiesContext public class ZipTransformerParserTests { + @Autowired private ConfigurableApplicationContext context; @Test public void testZipTransformerParserWithDefaults() { - - setUp("ZipTransformerParserTests.xml", getClass()); - EventDrivenConsumer consumer = this.context.getBean("zipTransformerWithDefaults", EventDrivenConsumer.class); final AbstractMessageChannel inputChannel = TestUtils.getPropertyValue(consumer, "inputChannel", AbstractMessageChannel.class); - assertEquals("input", inputChannel.getComponentName()); + assertThat(inputChannel.getComponentName()).isEqualTo("input"); final MessageTransformingHandler handler = TestUtils.getPropertyValue(consumer, "handler", MessageTransformingHandler.class); - final AbstractMessageChannel outputChannel = TestUtils.getPropertyValue(handler, "outputChannel", AbstractMessageChannel.class); - assertEquals("output", outputChannel.getComponentName()); + assertThat(TestUtils.getPropertyValue(handler, "outputChannelName")).isEqualTo("output"); final ZipTransformer zipTransformer = TestUtils.getPropertyValue(handler, "transformer", ZipTransformer.class); @@ -75,37 +68,34 @@ public class ZipTransformerParserTests { final Integer compressionLevel = TestUtils.getPropertyValue(zipTransformer, "compressionLevel", Integer.class); final Boolean deleteFiles = TestUtils.getPropertyValue(zipTransformer, "deleteFiles", Boolean.class); - assertNotNull(charset); - assertNotNull(fileNameGenerator); - assertNotNull(zipResultType); - assertNotNull(workDirectory); - assertNotNull(compressionLevel); - assertNotNull(deleteFiles); + assertThat(charset).isNotNull(); + assertThat(fileNameGenerator).isNotNull(); + assertThat(zipResultType).isNotNull(); + assertThat(workDirectory).isNotNull(); + assertThat(deleteFiles).isNotNull(); + assertThat(compressionLevel).isNotNull(); - assertEquals(Charset.defaultCharset(), charset); - Assert.isInstanceOf(DefaultFileNameGenerator.class, fileNameGenerator); - assertEquals(ZipResultType.FILE, zipResultType); - assertEquals(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer"), workDirectory); - assertTrue("WorkDirectory should exist.", workDirectory.exists()); - assertTrue("WorkDirectory should be a directory.", workDirectory.isDirectory()); - assertEquals(Integer.valueOf(Deflater.DEFAULT_COMPRESSION), Integer.valueOf(compressionLevel)); - assertFalse("By default the 'deleteFiles' property should be false.", deleteFiles); + assertThat(charset).isEqualTo(Charset.defaultCharset()); + assertThat(fileNameGenerator).isInstanceOf(DefaultFileNameGenerator.class); + assertThat(zipResultType).isEqualTo(ZipResultType.FILE); + assertThat(workDirectory) + .isEqualTo(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer")); + assertThat(workDirectory.exists()).isTrue(); + assertThat(workDirectory.isDirectory()).isTrue(); + assertThat(deleteFiles).isFalse(); + assertThat(compressionLevel).isEqualTo(Deflater.DEFAULT_COMPRESSION); } @Test public void testZipTransformerParserWithExplicitSettings() { - - setUp("ZipTransformerParserTests.xml", getClass()); - EventDrivenConsumer consumer = this.context.getBean("zipTransformer", EventDrivenConsumer.class); final AbstractMessageChannel inputChannel = TestUtils.getPropertyValue(consumer, "inputChannel", AbstractMessageChannel.class); - assertEquals("input", inputChannel.getComponentName()); + assertThat(inputChannel.getComponentName()).isEqualTo("input"); final MessageTransformingHandler handler = TestUtils.getPropertyValue(consumer, "handler", MessageTransformingHandler.class); - final AbstractMessageChannel outputChannel = TestUtils.getPropertyValue(handler, "outputChannel", AbstractMessageChannel.class); - assertEquals("output", outputChannel.getComponentName()); + assertThat(TestUtils.getPropertyValue(handler, "outputChannelName")).isEqualTo("output"); final ZipTransformer zipTransformer = TestUtils.getPropertyValue(handler, "transformer", ZipTransformer.class); @@ -116,45 +106,33 @@ public class ZipTransformerParserTests { final Integer compressionLevel = TestUtils.getPropertyValue(zipTransformer, "compressionLevel", Integer.class); final Boolean deleteFiles = TestUtils.getPropertyValue(zipTransformer, "deleteFiles", Boolean.class); - assertNotNull(charset); - assertNotNull(fileNameGenerator); - assertNotNull(zipResultType); - assertNotNull(workDirectory); - assertNotNull(compressionLevel); - assertNotNull(deleteFiles); + assertThat(charset).isNotNull(); + assertThat(fileNameGenerator).isNotNull(); + assertThat(zipResultType).isNotNull(); + assertThat(workDirectory).isNotNull(); + assertThat(deleteFiles).isNotNull(); + assertThat(compressionLevel).isNotNull(); - assertEquals(Charset.defaultCharset(), charset); - Assert.isInstanceOf(DefaultFileNameGenerator.class, fileNameGenerator); - assertEquals(ZipResultType.BYTE_ARRAY, zipResultType); - assertEquals(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer"), workDirectory); - assertTrue("WorkDirectory should exist.", workDirectory.exists()); - assertTrue("WorkDirectory should be a directory.", workDirectory.isDirectory()); - assertEquals(Integer.valueOf(2), Integer.valueOf(compressionLevel)); - assertTrue("The 'deleteFiles' property should be true.", deleteFiles); + assertThat(charset).isEqualTo(Charset.defaultCharset()); + assertThat(fileNameGenerator).isInstanceOf(DefaultFileNameGenerator.class); + assertThat(zipResultType).isEqualTo(ZipResultType.BYTE_ARRAY); + assertThat(workDirectory) + .isEqualTo(new File(System.getProperty("java.io.tmpdir") + File.separator + "ziptransformer")); + assertThat(workDirectory.exists()).isTrue(); + assertThat(workDirectory.isDirectory()).isTrue(); + assertThat(compressionLevel).isEqualTo(2); + assertThat(deleteFiles).isTrue(); } @Test public void testZipTransformerParserWithIncorrectResultType() { - try { - setUp("ZipTransformerParserTestsWithIncorrectResultType.xml", getClass()); - fail("Expected a BeanDefinitionParsingException to be thrown."); - } - catch (BeanCreationException e) { - assertThat(e.getMessage(), containsString("Failed to convert property value of type 'java.lang.String' " + - "to required type 'org.springframework.integration.zip.transformer.ZipResultType'")); - } - } - - @After - public void tearDown() { - if (context != null) { - context.close(); - } - } - - public void setUp(String name, Class cls) { - context = new ClassPathXmlApplicationContext(name, cls); + assertThatExceptionOfType(BeanCreationException.class) + .isThrownBy(() -> + new ClassPathXmlApplicationContext("ZipTransformerParserTestsWithIncorrectResultType.xml", + getClass())) + .withMessageContaining("Failed to convert property value of type 'java.lang.String' " + + "to required type 'org.springframework.integration.zip.transformer.ZipResultType'"); } } diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/splitter/UnZipResultSplitterTests.java b/spring-integration-zip/src/test/java/org/springframework/integration/zip/splitter/UnZipResultSplitterTests.java index 3419b4e..89c5a72 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/splitter/UnZipResultSplitterTests.java +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/splitter/UnZipResultSplitterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 the original author or authors. + * Copyright 2016-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,14 +16,12 @@ package org.springframework.integration.zip.splitter; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.assertj.core.api.Assertions.assertThat; import java.util.LinkedHashMap; import java.util.Map; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.channel.QueueChannel; @@ -32,14 +30,15 @@ import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.zip.ZipHeaders; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * @author Andriy Kryvtsun + * @author Artem Bilan */ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration +@SpringJUnitConfig +@DirtiesContext public class UnZipResultSplitterTests { private static final String DIR_1 = "dir1/"; @@ -83,14 +82,14 @@ public class UnZipResultSplitterTests { private static void checkMessageWithHeaderValue(Message message, String headerName, String headerValue, String payload) { - assertNotNull(message); + + assertThat(message).isNotNull(); checkHeaderValue(message, headerName, headerValue); checkPayload(message, payload); } @Test public void splitPreservingServiceHeaderValues() { - Message inMessage = MessageBuilder.withPayload(createPayload()) .setHeader(ZipHeaders.ZIP_ENTRY_PATH, "dir") .setHeader(FileHeaders.FILENAME, "filename") @@ -107,25 +106,26 @@ public class UnZipResultSplitterTests { private static void checkMessageWithServiceHeaderValues(Message message, String path, String filename, String payload) { - assertNotNull(message); + + assertThat(message).isNotNull(); checkHeaderValue(message, ZipHeaders.ZIP_ENTRY_PATH, path); checkHeaderValue(message, FileHeaders.FILENAME, filename); checkPayload(message, payload); } private static Map createPayload() { - Map payload = new LinkedHashMap(); + Map payload = new LinkedHashMap<>(); payload.put(DIR_1 + FILE_1, DATA_1); payload.put(DIR_2 + FILE_2, DATA_2); return payload; } private static void checkPayload(Message message, String payload) { - assertEquals(payload, message.getPayload()); + assertThat(message.getPayload()).isEqualTo(payload); } private static void checkHeaderValue(Message message, String headerName, String headerValue) { - assertEquals(headerValue, message.getHeaders().get(headerName)); + assertThat(message.getHeaders().get(headerName)).isEqualTo(headerValue); } } diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/UnZipTransformerTests-context.xml b/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/UnZipTransformerTests-context.xml deleted file mode 100644 index 642320b..0000000 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/UnZipTransformerTests-context.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/UnZipTransformerTests.java b/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/UnZipTransformerTests.java index 00a8876..5860e28 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/UnZipTransformerTests.java +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/UnZipTransformerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2019 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,62 +16,49 @@ package org.springframework.integration.zip.transformer; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.instanceOf; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.Map; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import org.zeroturnaround.zip.ZipException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.transformer.MessageTransformationException; import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHandlingException; import org.springframework.messaging.MessagingException; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * * @author Gunnar Hillert * @author Artem Bilan * @author Ingo Dueppe - * - * @since 1.0 - * */ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration +@SpringJUnitConfig +@DirtiesContext public class UnZipTransformerTests { - @Rule - public TemporaryFolder testFolder = new TemporaryFolder(); + @TempDir + public File workDir; @Autowired private ResourceLoader resourceLoader; - private File workDir; - - @Before - public void setup() throws IOException { - this.workDir = testFolder.newFolder(); - } - @Test public void unzipFlatFileEntryZip() throws IOException { final Resource zipResource = this.resourceLoader.getResource("classpath:testzipdata/flatfileentry.zip"); @@ -85,13 +72,12 @@ public class UnZipTransformerTests { final Message resultMessage = unZipTransformer.transform(message); - Assert.assertNotNull(resultMessage); + assertThat(resultMessage).isNotNull(); @SuppressWarnings("unchecked") Map unzippedData = (Map) resultMessage.getPayload(); - Assert.assertNotNull(unzippedData); - Assert.assertEquals(1, unzippedData.size()); + assertThat(unzippedData).isNotNull().hasSize(1); } @Test @@ -107,26 +93,26 @@ public class UnZipTransformerTests { final Message resultMessage = unZipTransformer.transform(message); - Assert.assertNotNull(resultMessage); + assertThat(resultMessage).isNotNull(); @SuppressWarnings("unchecked") Map unzippedData = (Map) resultMessage.getPayload(); - Assert.assertNotNull(unzippedData); - Assert.assertEquals(1, unzippedData.size()); - Assert.assertEquals("Spring Integration Rocks!", new String(unzippedData.values().iterator().next())); - + assertThat(unzippedData).isNotNull().hasSize(1); + assertThat(new String(unzippedData.values().iterator().next())).isEqualTo("Spring Integration Rocks!"); } @Test public void unzipSingleFileToByteArray() throws IOException { - final Resource resource = this.resourceLoader.getResource("classpath:testzipdata/single.zip"); final InputStream is = resource.getInputStream(); final File inputFile = new File(this.workDir, "unzipSingleFileToByteArray"); - IOUtils.copy(is, new FileOutputStream(inputFile)); + FileOutputStream out = new FileOutputStream(inputFile); + IOUtils.copy(is, out); + is.close(); + out.close(); final Message message = MessageBuilder.withPayload(inputFile).build(); @@ -136,16 +122,14 @@ public class UnZipTransformerTests { final Message resultMessage = unZipTransformer.transform(message); - Assert.assertNotNull(resultMessage); + assertThat(resultMessage).isNotNull(); @SuppressWarnings("unchecked") Map unzippedData = (Map) resultMessage.getPayload(); - Assert.assertNotNull(unzippedData); - Assert.assertEquals(1, unzippedData.size()); - Assert.assertTrue(inputFile.exists()); - Assert.assertEquals("Spring Integration Rocks!", new String(unzippedData.values().iterator().next())); - + assertThat(unzippedData).isNotNull().hasSize(1); + assertThat(inputFile).exists(); + assertThat(new String(unzippedData.values().iterator().next())).isEqualTo("Spring Integration Rocks!"); } @Test @@ -157,6 +141,7 @@ public class UnZipTransformerTests { FileOutputStream output = new FileOutputStream(inputFile); IOUtils.copy(is, output); + is.close(); output.close(); final Message message = MessageBuilder.withPayload(inputFile).build(); @@ -168,16 +153,14 @@ public class UnZipTransformerTests { final Message resultMessage = unZipTransformer.transform(message); - Assert.assertNotNull(resultMessage); + assertThat(resultMessage).isNotNull(); @SuppressWarnings("unchecked") Map unzippedData = (Map) resultMessage.getPayload(); - Assert.assertNotNull(unzippedData); - Assert.assertEquals(1, unzippedData.size()); - Assert.assertFalse(inputFile.exists()); - Assert.assertEquals("Spring Integration Rocks!", new String(unzippedData.values().iterator().next())); - + assertThat(unzippedData).isNotNull().hasSize(1); + assertThat(inputFile).doesNotExist(); + assertThat(new String(unzippedData.values().iterator().next())).isEqualTo("Spring Integration Rocks!"); } @Test @@ -193,13 +176,12 @@ public class UnZipTransformerTests { final Message resultMessage = unZipTransformer.transform(message); - Assert.assertNotNull(resultMessage); + assertThat(resultMessage).isNotNull(); @SuppressWarnings("unchecked") Map unzippedData = (Map) resultMessage.getPayload(); - Assert.assertNotNull(unzippedData); - Assert.assertEquals(5, unzippedData.size()); + assertThat(unzippedData).isNotNull().hasSize(5); } @Test @@ -214,23 +196,17 @@ public class UnZipTransformerTests { unZipTransformer.setExpectSingleResult(true); unZipTransformer.afterPropertiesSet(); - try { - unZipTransformer.transform(message); - } - catch (MessagingException e) { - Assert.assertTrue(e.getMessage().contains("The UnZip operation extracted " - + "5 result objects but expectSingleResult was 'true'.")); - return; - } - - Assert.fail("Expected a MessagingException to be thrown."); + assertThatExceptionOfType(MessagingException.class) + .isThrownBy(() -> unZipTransformer.transform(message)) + .withMessageContaining("The UnZip operation extracted 5 result objects " + + "but expectSingleResult was 'true'."); } @Test public void unzipInvalidZipFile() throws IOException { - File fileToUnzip = this.testFolder.newFile(); - FileUtils.writeStringToFile(fileToUnzip, "hello world"); + File fileToUnzip = File.createTempFile("test1", "tmp"); + FileUtils.writeStringToFile(fileToUnzip, "hello world", Charset.defaultCharset()); UnZipTransformer unZipTransformer = new UnZipTransformer(); unZipTransformer.setZipResultType(ZipResultType.BYTE_ARRAY); @@ -239,14 +215,9 @@ public class UnZipTransformerTests { Message message = MessageBuilder.withPayload(fileToUnzip).build(); - try { - unZipTransformer.transform(message); - Assert.fail("Expected a MessagingException to be thrown."); - } - catch (MessagingException e) { - Assert.assertTrue(e.getMessage().contains(String.format("Not a zip file: '%s'.", - fileToUnzip.getAbsolutePath()))); - } + assertThatExceptionOfType(MessagingException.class) + .isThrownBy(() -> unZipTransformer.transform(message)) + .withMessageContaining(String.format("Not a zip file: %s", fileToUnzip.getAbsolutePath())); } @Test @@ -259,16 +230,16 @@ public class UnZipTransformerTests { final UnZipTransformer unZipTransformer = new UnZipTransformer(); unZipTransformer.afterPropertiesSet(); - try { - unZipTransformer.transform(message); - } - catch (Exception e) { - Assert.assertThat(e, instanceOf(MessageTransformationException.class)); - Assert.assertThat(e.getCause(), instanceOf(MessageHandlingException.class)); - Assert.assertThat(e.getCause().getCause(), instanceOf(ZipException.class)); - Assert.assertThat(e.getCause().getCause().getMessage(), - containsString("is trying to leave the target output directory")); - } + + assertThatExceptionOfType(MessageTransformationException.class) + .isThrownBy(() -> unZipTransformer.transform(message)) + .withRootCauseInstanceOf(ZipException.class) + .withMessageContaining("is trying to leave the target output directory"); + } + + @Configuration + public static class TestConfiguration { + } } diff --git a/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/ZipTransformerTests.java b/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/ZipTransformerTests.java index c53d701..b33e72a 100644 --- a/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/ZipTransformerTests.java +++ b/spring-integration-zip/src/test/java/org/springframework/integration/zip/transformer/ZipTransformerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.integration.zip.transformer; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import java.io.ByteArrayInputStream; @@ -30,10 +31,8 @@ import java.util.List; import java.util.Set; import java.util.UUID; -import org.junit.Assert; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import org.zeroturnaround.zip.ZipUtil; import org.springframework.beans.factory.BeanFactory; @@ -45,16 +44,14 @@ import org.springframework.messaging.Message; * * @author Gunnar Hillert * @author Artem Bilan - * @since 1.0 - * */ public class ZipTransformerTests { - @Rule - public TemporaryFolder testFolder = new TemporaryFolder(); + @TempDir + public File workDir; @Test - public void zipString() throws IOException { + public void zipString() { final ZipTransformer zipTransformer = new ZipTransformer(); zipTransformer.setBeanFactory(mock(BeanFactory.class)); zipTransformer.setZipResultType(ZipResultType.BYTE_ARRAY); @@ -65,32 +62,29 @@ public class ZipTransformerTests { final Date fileDate = new Date(); final Message message = MessageBuilder.withPayload(stringToCompress) - .setHeader(ZipHeaders.ZIP_ENTRY_FILE_NAME, "test.txt") - .setHeader(ZipHeaders.ZIP_ENTRY_LAST_MODIFIED_DATE, fileDate) - .build(); + .setHeader(ZipHeaders.ZIP_ENTRY_FILE_NAME, "test.txt") + .setHeader(ZipHeaders.ZIP_ENTRY_LAST_MODIFIED_DATE, fileDate) + .build(); final Message result = zipTransformer.transform(message); Object resultPayload = result.getPayload(); - Assert.assertTrue("Expected payload to be an instance of byte but was " - + resultPayload.getClass().getName(), resultPayload instanceof byte[]); + assertThat(resultPayload).isInstanceOf(byte[].class); - final File temporaryTestDirectory = testFolder.newFolder(); + ZipUtil.unpack(new ByteArrayInputStream((byte[]) resultPayload), this.workDir); - ZipUtil.unpack(new ByteArrayInputStream((byte[]) resultPayload), temporaryTestDirectory); - - final File unzippedEntry = new File(temporaryTestDirectory, "test.txt"); - Assert.assertTrue(unzippedEntry.exists()); - Assert.assertTrue(unzippedEntry.isFile()); + final File unzippedEntry = new File(this.workDir, "test.txt"); + assertThat(unzippedEntry).exists().isFile(); //See https://stackoverflow.com/questions/3725662/what-is-the-earliest-timestamp-value-that-is-supported-in-zip-file-format - Assert.assertTrue((fileDate.getTime() - 3000) < unzippedEntry.lastModified()); - Assert.assertTrue((fileDate.getTime() + 3000) > unzippedEntry.lastModified()); + assertThat(unzippedEntry.lastModified()) + .isGreaterThan(fileDate.getTime() - 3000) + .isLessThan(fileDate.getTime() + 3000); } @Test - public void zipStringCollection() throws IOException { + public void zipStringCollection() { final ZipTransformer zipTransformer = new ZipTransformer(); zipTransformer.setBeanFactory(mock(BeanFactory.class)); zipTransformer.setZipResultType(ZipResultType.BYTE_ARRAY); @@ -100,7 +94,7 @@ public class ZipTransformerTests { final String string2ToCompress = "Kenny"; final String string3ToCompress = "Butters"; - final List strings = new ArrayList(3); + final List strings = new ArrayList<>(3); strings.add(string1ToCompress); strings.add(string2ToCompress); @@ -109,55 +103,46 @@ public class ZipTransformerTests { final Date fileDate = new Date(); final Message> message = MessageBuilder.withPayload(strings) - .setHeader(ZipHeaders.ZIP_ENTRY_FILE_NAME, "test.txt") - .setHeader(ZipHeaders.ZIP_ENTRY_LAST_MODIFIED_DATE, fileDate) - .build(); + .setHeader(ZipHeaders.ZIP_ENTRY_FILE_NAME, "test.txt") + .setHeader(ZipHeaders.ZIP_ENTRY_LAST_MODIFIED_DATE, fileDate) + .build(); final Message result = zipTransformer.transform(message); Object resultPayload = result.getPayload(); - Assert.assertTrue("Expected payload to be an instance of byte but was " - + resultPayload.getClass().getName(), resultPayload instanceof byte[]); + assertThat(resultPayload).isInstanceOf(byte[].class); - final File temporaryTestDirectory = testFolder.newFolder(); + ZipUtil.unpack(new ByteArrayInputStream((byte[]) resultPayload), this.workDir); - ZipUtil.unpack(new ByteArrayInputStream((byte[]) resultPayload), temporaryTestDirectory); + File[] files = this.workDir.listFiles(); - File[] files = temporaryTestDirectory.listFiles(); + assertThat(files).hasSizeGreaterThanOrEqualTo(3); - Assert.assertTrue(files.length >= 3); - - final Set expectedFileNames = new HashSet(); + final Set expectedFileNames = new HashSet<>(); expectedFileNames.add("test_1.txt"); expectedFileNames.add("test_2.txt"); expectedFileNames.add("test_3.txt"); for (File file : files) { - if (file.getName().startsWith("test")) { - Assert.assertTrue(file.exists()); - Assert.assertTrue(file.isFile()); + assertThat(file).exists().isFile(); //See https://stackoverflow.com/questions/3725662/what-is-the-earliest-timestamp-value-that-is-supported-in-zip-file-format - Assert.assertTrue(String.format("%s : %s", fileDate.getTime() - 4000, file.lastModified()), - (fileDate.getTime() - 4000) < file.lastModified()); - Assert.assertTrue((fileDate.getTime() + 4000) > file.lastModified()); + assertThat(file.lastModified()) + .isLessThan(fileDate.getTime() + 4000) + .isGreaterThan(fileDate.getTime() - 4000); - Assert.assertTrue( - String.format("File '%s' did not end with '.txt'.", file.getName()), - file.getName().endsWith(".txt")); + assertThat(file).hasExtension("txt"); - Assert.assertTrue(expectedFileNames.contains(file.getName())); + assertThat(expectedFileNames).contains(file.getName()); } - } - } @Test - public void zipStringToFile() throws IOException { + public void zipStringToFile() { final ZipTransformer zipTransformer = new ZipTransformer(); zipTransformer.setBeanFactory(mock(BeanFactory.class)); zipTransformer.afterPropertiesSet(); @@ -166,30 +151,26 @@ public class ZipTransformerTests { final String zipEntryFileName = "test.txt"; final Message message = MessageBuilder.withPayload(stringToCompress) - .setHeader(ZipHeaders.ZIP_ENTRY_FILE_NAME, zipEntryFileName) - .build(); + .setHeader(ZipHeaders.ZIP_ENTRY_FILE_NAME, zipEntryFileName) + .build(); final Message result = zipTransformer.transform(message); - Assert.assertTrue("Expected payload to be an instance of file but was " - + result.getPayload().getClass().getName(), result.getPayload() instanceof File); + assertThat(result.getPayload()).isInstanceOf(File.class); final File payload = (File) result.getPayload(); - System.out.println(payload.getAbsolutePath()); - - Assert.assertEquals(message.getHeaders().getId().toString() + ".msg.zip", payload.getName()); - Assert.assertTrue(SpringZipUtils.isValid(payload)); + assertThat(payload).hasName(message.getHeaders().getId().toString() + ".msg.zip"); + assertThat((SpringZipUtils.isValid(payload))).isTrue(); final byte[] zipEntryData = ZipUtil.unpackEntry(payload, "test.txt"); - Assert.assertNotNull("Entry '" + zipEntryFileName + "' was not found.", zipEntryData); - Assert.assertTrue("Hello World".equals(new String(zipEntryData))); - + assertThat(zipEntryData).isNotNull(); + assertThat(new String(zipEntryData)).isEqualTo("Hello World"); } @Test - public void zipFile() throws IOException { + public void zipFile() { ZipTransformer zipTransformer = new ZipTransformer(); zipTransformer.setBeanFactory(mock(BeanFactory.class)); @@ -198,34 +179,34 @@ public class ZipTransformerTests { final File testFile = createTestFile(10); - Assert.assertTrue(testFile.exists()); + assertThat(testFile).exists(); final Message message = MessageBuilder.withPayload(testFile).build(); final Message result = zipTransformer.transform(message); - Assert.assertTrue(result.getPayload() instanceof File); + assertThat(result.getPayload()).isInstanceOf(File.class); final File payload = (File) result.getPayload(); - Assert.assertEquals(testFile.getName() + ".zip", payload.getName()); - Assert.assertTrue(SpringZipUtils.isValid(payload)); + assertThat(payload).hasName(testFile.getName() + ".zip"); + assertThat(SpringZipUtils.isValid(payload)).isTrue(); } @Test - public void zipCollection() throws IOException { + public void zipCollection() { final File testFile1 = createTestFile(1); final File testFile2 = createTestFile(2); final File testFile3 = createTestFile(3); final File testFile4 = createTestFile(4); - Assert.assertTrue(testFile1.exists()); - Assert.assertTrue(testFile2.exists()); - Assert.assertTrue(testFile3.exists()); - Assert.assertTrue(testFile4.exists()); + assertThat(testFile1).exists(); + assertThat(testFile2).exists(); + assertThat(testFile3).exists(); + assertThat(testFile4).exists(); - final Collection files = new ArrayList(); + final Collection files = new ArrayList<>(); files.add(testFile1); files.add(testFile2); @@ -240,38 +221,23 @@ public class ZipTransformerTests { final Message result = zipTransformer.transform(message); - Assert.assertTrue(result.getPayload() instanceof File); + assertThat(result.getPayload()).isInstanceOf(File.class); final File outputZipFile = (File) result.getPayload(); - Assert.assertTrue(outputZipFile.exists()); - Assert.assertTrue(outputZipFile.isFile()); - Assert.assertTrue(outputZipFile.getName().endsWith("zip")); - Assert.assertTrue(SpringZipUtils.isValid(outputZipFile)); - + assertThat(outputZipFile).exists().isFile().hasExtension("zip"); + assertThat(SpringZipUtils.isValid(outputZipFile)).isTrue(); } - private File createTestFile(int size) throws IOException { + private File createTestFile(int size) { + final File testFile = new File(this.workDir, "testdata" + UUID.randomUUID().toString() + ".data"); - final File temporaryTestDirectory = this.testFolder.newFolder(); - - final File testFile = new File(temporaryTestDirectory, "testdata" + UUID.randomUUID().toString() + ".data"); - - RandomAccessFile f = null; - try { - f = new RandomAccessFile(testFile, "rw"); - f.setLength(size * 1024 * 1024); + try (RandomAccessFile f = new RandomAccessFile(testFile, "rw")) { + f.setLength((long) size * 1024 * 1024); } catch (Exception e) { System.err.println(e); } - finally { - try { - if (f != null) { - f.close(); - } - } catch (IOException e) {} - } return testFile; } diff --git a/spring-integration-zip/src/test/resources/log4j.properties b/spring-integration-zip/src/test/resources/log4j.properties deleted file mode 100644 index 1bcfd18..0000000 --- a/spring-integration-zip/src/test/resources/log4j.properties +++ /dev/null @@ -1,8 +0,0 @@ -log4j.rootCategory=WARN, stdout - -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss.SSS} %-5p [%t][%c] %m%n - -log4j.category.org.springframework.integration=INFO -log4j.category.org.springframework.integration.zip=INFO diff --git a/spring-integration-zip/src/test/resources/log4j2-test.xml b/spring-integration-zip/src/test/resources/log4j2-test.xml new file mode 100644 index 0000000..cb3f4a0 --- /dev/null +++ b/spring-integration-zip/src/test/resources/log4j2-test.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + +