You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bigtop.apache.org by co...@apache.org on 2016/09/13 21:35:50 UTC
bigtop git commit: BIGTOP-2443: inject unzip method to ZipInputStream,
accepting regex for include
Repository: bigtop
Updated Branches:
refs/heads/master 833180eaf -> c16ff3a6c
BIGTOP-2443: inject unzip method to ZipInputStream, accepting regex for include
Signed-off-by: Konstantin Boudnik <ko...@epam.com>
Project: http://git-wip-us.apache.org/repos/asf/bigtop/repo
Commit: http://git-wip-us.apache.org/repos/asf/bigtop/commit/c16ff3a6
Tree: http://git-wip-us.apache.org/repos/asf/bigtop/tree/c16ff3a6
Diff: http://git-wip-us.apache.org/repos/asf/bigtop/diff/c16ff3a6
Branch: refs/heads/master
Commit: c16ff3a6c3277e054ffeb09583463bf91b30b6c9
Parents: 833180e
Author: Kengo Seki <se...@apache.org>
Authored: Wed Aug 10 06:30:10 2016 +0000
Committer: Konstantin Boudnik <ko...@epam.com>
Committed: Tue Sep 13 12:05:51 2016 -0700
----------------------------------------------------------------------
.../org/apache/bigtop/itest/JarContent.groovy | 24 +++--
.../apache/bigtop/itest/JarContentTest.groovy | 92 ++++++++++++++++++++
2 files changed, 110 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bigtop/blob/c16ff3a6/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/JarContent.groovy
----------------------------------------------------------------------
diff --git a/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/JarContent.groovy b/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/JarContent.groovy
index 59edb40..a348513 100644
--- a/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/JarContent.groovy
+++ b/bigtop-test-framework/src/main/groovy/org/apache/bigtop/itest/JarContent.groovy
@@ -20,6 +20,7 @@ package org.apache.bigtop.itest
import java.util.jar.JarEntry
import java.util.jar.JarFile
+import java.util.regex.Pattern
import java.util.zip.ZipInputStream
import java.util.zip.ZipException
import org.apache.commons.logging.LogFactory
@@ -198,13 +199,10 @@ public abstract class JarContent {
* Adding an ability to unpack a content of an given ZipInputStream
* to specified destination with given pattern
* @param dest directory where the content will be unpacked
- * @param includes regexps to include resources to be unpacked
+ * @param includes string(s) or regexp(s) to include resources to be unpacked
*/
- ZipInputStream.metaClass.unzip = { String dest, String includes ->
- //in metaclass added methods, 'delegate' is the object on which
- //the method is called. Here it's the file to unzip
+ def unzip = { InputStream result, String dest, includes, predicate ->
if (includes == null) includes = "";
- def result = delegate
def destFile = new File(dest)
if (!destFile.exists()) {
destFile.mkdir();
@@ -212,7 +210,7 @@ public abstract class JarContent {
result.withStream {
def entry
while (entry = result.nextEntry) {
- if (!entry.name.contains(includes)) {
+ if (!predicate(entry.name, includes)) {
continue
};
if (!entry.isDirectory()) {
@@ -232,6 +230,20 @@ public abstract class JarContent {
}
}
}
+
+ ZipInputStream.metaClass.unzip = { String dest, String includes ->
+ //in metaclass added methods, 'delegate' is the object on which
+ //the method is called. Here it's the file to unzip
+ unzip(delegate, dest, includes) { dst, inc -> dst.contains(inc) } }
+
+ ZipInputStream.metaClass.unzip = { String dest, List<String> includes ->
+ unzip(delegate, dest, includes) { dst, inc -> inc.any { dst.contains(it) } } }
+
+ ZipInputStream.metaClass.unzip = { String dest, Pattern includes ->
+ unzip(delegate, dest, includes) { dst, inc -> (dst =~ inc) as boolean } }
+
+ ZipInputStream.metaClass.unzip = { String dest, List<Pattern> includes ->
+ unzip(delegate, dest, includes) { dst, inc -> inc.any { (dst =~ it) as boolean } } }
}
}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/c16ff3a6/bigtop-test-framework/src/test/groovy/org/apache/bigtop/itest/JarContentTest.groovy
----------------------------------------------------------------------
diff --git a/bigtop-test-framework/src/test/groovy/org/apache/bigtop/itest/JarContentTest.groovy b/bigtop-test-framework/src/test/groovy/org/apache/bigtop/itest/JarContentTest.groovy
index 9543b46..3c31230 100644
--- a/bigtop-test-framework/src/test/groovy/org/apache/bigtop/itest/JarContentTest.groovy
+++ b/bigtop-test-framework/src/test/groovy/org/apache/bigtop/itest/JarContentTest.groovy
@@ -18,6 +18,8 @@
package org.apache.bigtop.itest
+import groovy.io.FileType
+import java.util.zip.ZipInputStream
import org.junit.Test
import static org.junit.Assert.assertTrue
import static org.junit.Assert.assertEquals
@@ -60,6 +62,96 @@ class JarContentTest {
}
@Test
+ void testUnzipSingleString() {
+ def destination = System.properties['buildDir'] ?: 'target/local.unpack.dir'
+ URL url = JarContent.getJarURL(String.class)
+ ZipInputStream zis = new ZipInputStream(url.openConnection().getInputStream())
+ zis.unzip(destination, 'visitor')
+ File dir = new File(destination)
+ int count = 0
+ boolean result = true
+ dir.eachFileRecurse(FileType.FILES) {
+ if (it.name.endsWith(".class"))
+ count++
+ if (!it.path.contains("visitor"))
+ result = false
+ }
+ assertTrue('Expect more than one file', count > 1);
+ assertTrue('Expect that all paths contain the specified string', result);
+ dir.deleteDir()
+ }
+
+ @Test
+ void testUnzipMultipleStrings() {
+ def destination = System.properties['buildDir'] ?: 'target/local.unpack.dir'
+ URL url = JarContent.getJarURL(String.class)
+ ZipInputStream zis = new ZipInputStream(url.openConnection().getInputStream())
+ zis.unzip(destination, ['visitor', 'tree'])
+ File dir = new File(destination)
+ int count = 0
+ boolean result = true
+ dir.eachFileRecurse(FileType.FILES) {
+ if (it.name.endsWith(".class"))
+ count++
+ if (!it.path.contains("visitor") && !it.path.contains("tree"))
+ result = false
+ }
+ assertTrue('Expect more than one file', count > 1);
+ assertTrue('Expect that all paths contain at least one of the specified string', result);
+ dir.deleteDir()
+ }
+
+ @Test
+ void testUnzipSingleRegex() {
+ def destination = System.properties['buildDir'] ?: 'target/local.unpack.dir'
+ URL url = JarContent.getJarURL(String.class)
+ ZipInputStream zis = new ZipInputStream(url.openConnection().getInputStream())
+ // This will unzip sun/security/x509/GeneralSubtree.class and sun/security/x509/GeneralSubtrees.class
+ // but not sun/reflect/generics/tree/*
+ zis.unzip(destination, ~/[^\/]tree[^\/]/)
+ File dir = new File(destination)
+ int count = 0
+ boolean posChkResult = true
+ boolean negChkResult = true
+ dir.eachFileRecurse(FileType.FILES) {
+ if (it.name.endsWith(".class"))
+ count++
+ if (!it.path.contains("tree"))
+ posChkResult = false
+ if (it.path.contains("/tree/"))
+ negChkResult = false
+ }
+ assertTrue('Expect more than one file', count > 1);
+ assertTrue('Expect that all paths contain the string "tree"', posChkResult);
+ assertTrue('Expect that all paths do not contain the string "/tree/"', negChkResult);
+ dir.deleteDir()
+ }
+
+ @Test
+ void testUnzipMultipleRegexes() {
+ def destination = System.properties['buildDir'] ?: 'target/local.unpack.dir'
+ URL url = JarContent.getJarURL(String.class)
+ ZipInputStream zis = new ZipInputStream(url.openConnection().getInputStream())
+ zis.unzip(destination, [~/[^\/]visitor[^\/]/, ~/[^\/]tree[^\/]/])
+ File dir = new File(destination)
+ int count = 0
+ boolean posChkResult = true
+ boolean negChkResult = true
+ dir.eachFileRecurse(FileType.FILES) {
+ if (it.name.endsWith(".class"))
+ count++
+ if (!it.path.contains("visitor") && !it.path.contains("tree"))
+ posChkResult = false
+ if (it.path.contains("/visitor/") || it.path.contains("/tree/"))
+ negChkResult = false
+ }
+ assertTrue('Expect more than one file', count > 1);
+ assertTrue('Expect that all paths contain either "visitor" or "tree"', posChkResult);
+ assertTrue('Expect that all paths do not contain both "/visitor/" and "/tree/"', negChkResult);
+ dir.deleteDir()
+ }
+
+ @Test
void testGetJarName() {
assertEquals("Should've find tools.jar file",
'tools.jar',