From cf66c195be09d2e136edc575f66b2031392b37bb Mon Sep 17 00:00:00 2001 From: Plamen Totev Date: Sat, 27 May 2017 22:43:49 +0300 Subject: [PATCH] Throw specific exception when creating empty single file archive Currently archivers that accept single file (like BZip2Archiver) will throw `NoSuchElementException`. Modify them to throw `EmptyArchiveException` so they are consistent with `DirectoryArchiver`, `TarArchiver` and `ZipArchiver`. --- .../plexus/archiver/bzip2/BZip2Archiver.java | 5 +++++ .../plexus/archiver/gzip/GZipArchiver.java | 5 +++++ .../plexus/archiver/snappy/SnappyArchiver.java | 5 +++++ .../plexus/archiver/xz/XZArchiver.java | 5 +++++ .../archiver/bzip2/BZip2ArchiverTest.java | 17 +++++++++++++++++ .../plexus/archiver/gzip/GZipArchiverTest.java | 18 ++++++++++++++++++ .../archiver/snappy/SnappyArchiverTest.java | 17 +++++++++++++++++ .../plexus/archiver/xz/XzArchiverTest.java | 17 +++++++++++++++++ 8 files changed, 89 insertions(+) diff --git a/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2Archiver.java b/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2Archiver.java index 0e408cfb7..c080b430c 100644 --- a/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2Archiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2Archiver.java @@ -21,6 +21,7 @@ import org.codehaus.plexus.archiver.ArchiveEntry; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.ResourceIterator; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; public class BZip2Archiver extends AbstractArchiver @@ -38,6 +39,10 @@ public void execute() } ResourceIterator iter = getResources(); + if ( !iter.hasNext() ) + { + throw new EmptyArchiveException( "Archive cannot be empty." ); + } ArchiveEntry entry = iter.next(); if ( iter.hasNext() ) { diff --git a/src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiver.java b/src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiver.java index 79abbab0e..a0d0ec5c4 100644 --- a/src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiver.java @@ -21,6 +21,7 @@ import org.codehaus.plexus.archiver.ArchiveEntry; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.ResourceIterator; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; public class GZipArchiver extends AbstractArchiver @@ -38,6 +39,10 @@ protected void execute() } ResourceIterator iter = getResources(); + if ( !iter.hasNext() ) + { + throw new EmptyArchiveException( "Archive cannot be empty." ); + } ArchiveEntry entry = iter.next(); if ( iter.hasNext() ) { diff --git a/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiver.java b/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiver.java index f71a020b9..ab6417fcc 100644 --- a/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiver.java @@ -21,6 +21,7 @@ import org.codehaus.plexus.archiver.ArchiveEntry; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.ResourceIterator; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; /** * Snappy archiver. @@ -41,6 +42,10 @@ public void execute() } ResourceIterator iter = getResources(); + if ( !iter.hasNext() ) + { + throw new EmptyArchiveException( "Archive cannot be empty." ); + } ArchiveEntry entry = iter.next(); if ( iter.hasNext() ) { diff --git a/src/main/java/org/codehaus/plexus/archiver/xz/XZArchiver.java b/src/main/java/org/codehaus/plexus/archiver/xz/XZArchiver.java index f7ab53dc0..849e0dc67 100644 --- a/src/main/java/org/codehaus/plexus/archiver/xz/XZArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/xz/XZArchiver.java @@ -20,6 +20,7 @@ import org.codehaus.plexus.archiver.ArchiveEntry; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.ResourceIterator; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; /** * @author philiplourandos @@ -43,6 +44,10 @@ protected void execute() throws ArchiverException, IOException } ResourceIterator iter = getResources(); + if ( !iter.hasNext() ) + { + throw new EmptyArchiveException( "Archive cannot be empty." ); + } ArchiveEntry entry = iter.next(); if ( iter.hasNext() ) { diff --git a/src/test/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverTest.java index 96e5f7b86..619eca8e9 100644 --- a/src/test/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverTest.java @@ -31,6 +31,7 @@ import java.util.zip.ZipFile; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.BasePlexusArchiverTest; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; @@ -57,6 +58,22 @@ public void testCreateArchive() archiver.createArchive(); } + public void testCreateEmptyArchive() + throws Exception + { + BZip2Archiver archiver = (BZip2Archiver) lookup( Archiver.ROLE, "bzip2" ); + archiver.setDestFile( getTestFile( "target/output/empty.bz2" ) ); + try + { + archiver.createArchive(); + + fail( "Creating empty archive should throw EmptyArchiveException" ); + } + catch ( EmptyArchiveException ignore ) + { + } + } + public void testCreateResourceCollection() throws Exception { diff --git a/src/test/java/org/codehaus/plexus/archiver/gzip/GZipArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/gzip/GZipArchiverTest.java index 1ecb435dd..5803a70c2 100644 --- a/src/test/java/org/codehaus/plexus/archiver/gzip/GZipArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/gzip/GZipArchiverTest.java @@ -31,6 +31,7 @@ import java.util.zip.ZipFile; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.BasePlexusArchiverTest; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; @@ -57,6 +58,23 @@ public void testCreateArchive() archiver.createArchive(); } + + public void testCreateEmptyArchive() + throws Exception + { + GZipArchiver archiver = (GZipArchiver) lookup( Archiver.ROLE, "gzip" ); + archiver.setDestFile( getTestFile( "target/output/empty.gz" ) ); + try + { + archiver.createArchive(); + + fail( "Creating empty archive should throw EmptyArchiveException" ); + } + catch ( EmptyArchiveException ignore ) + { + } + } + public void testCreateResourceCollection() throws Exception { diff --git a/src/test/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverTest.java index 08b7eabcb..c2c93157a 100644 --- a/src/test/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverTest.java @@ -31,6 +31,7 @@ import java.util.zip.ZipFile; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.BasePlexusArchiverTest; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; @@ -57,6 +58,22 @@ public void testCreateArchive() archiver.createArchive(); } + public void testCreateEmptyArchive() + throws Exception + { + SnappyArchiver archiver = (SnappyArchiver) lookup( Archiver.ROLE, "snappy" ); + archiver.setDestFile( getTestFile( "target/output/empty.snappy" ) ); + try + { + archiver.createArchive(); + + fail( "Creating empty archive should throw EmptyArchiveException" ); + } + catch ( EmptyArchiveException ignore ) + { + } + } + public void testCreateResourceCollection() throws Exception { diff --git a/src/test/java/org/codehaus/plexus/archiver/xz/XzArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/xz/XzArchiverTest.java index 38e6bcddd..22bd9076d 100644 --- a/src/test/java/org/codehaus/plexus/archiver/xz/XzArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/xz/XzArchiverTest.java @@ -23,6 +23,7 @@ import java.util.zip.ZipFile; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.BasePlexusArchiverTest; +import org.codehaus.plexus.archiver.exceptions.EmptyArchiveException; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; @@ -64,6 +65,22 @@ public void testCreateArchive() assertTrue( targetOutputFile.exists() ); } + public void testCreateEmptyArchive() + throws Exception + { + XZArchiver archiver = (XZArchiver) lookup( Archiver.ROLE, "xz" ); + archiver.setDestFile( getTestFile( "target/output/empty.xz" ) ); + try + { + archiver.createArchive(); + + fail( "Creating empty archive should throw EmptyArchiveException" ); + } + catch ( EmptyArchiveException ignore ) + { + } + } + public void testCreateResourceCollection() throws Exception { final File pomFile = new File( "pom.xml" );