You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuweni.apache.org by to...@apache.org on 2019/07/09 13:39:57 UTC

[incubator-tuweni] 03/04: Remove the jar file from testing, creating it on the fly along with test resources

This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit 710c7e7aaf8ba72f22976ab30e5f0b789dbad268
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Fri Jun 28 10:47:49 2019 +0200

    Remove the jar file from testing, creating it on the fly along with test resources
---
 build.gradle                                       |   6 --
 .../main/java/org/apache/tuweni/io/file/Files.java |  35 ++++++++-
 .../java/org/apache/tuweni/io/ResourcesTest.java   |  82 ++++++++++++++++-----
 .../java/org/apache/tuweni/io/file/FilesTest.java  |  11 ++-
 .../io/file/resourceresolver/subdir/test3.yaml     |   0
 .../tuweni/io/file/resourceresolver/test1.txt      |   0
 .../tuweni/io/file/resourceresolver/test2.txt      |   0
 .../resources/org/apache/tuweni/io/file/test.txt   |   3 -
 io/src/test/resources/resourceresolver-test.jar    | Bin 2362 -> 0 bytes
 9 files changed, 107 insertions(+), 30 deletions(-)

diff --git a/build.gradle b/build.gradle
index 12bd45b..abc8fa4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -110,18 +110,12 @@ if (file('.git').exists()) {
         '.idea/**',
         'gradlew.bat',
         'gradlew',
-        'io/src/test/resources/org/apache/tuweni/io/file/**',
         'toml/src/test/resources/**',
         '.gitattributes',
-        'test1.txt',
-        'test2.txt',
-        'test3.yaml',
         '.*\\.kotlin_module',
         'example-v0.4.0.toml',
         'hard_example.toml',
         'toml-v0.5.0-spec-example.toml',
-        'test.txt',
-        'resourceresolver-test.jar'
       ])
       return list
     }
diff --git a/io/src/main/java/org/apache/tuweni/io/file/Files.java b/io/src/main/java/org/apache/tuweni/io/file/Files.java
index f65a81e..277b987 100644
--- a/io/src/main/java/org/apache/tuweni/io/file/Files.java
+++ b/io/src/main/java/org/apache/tuweni/io/file/Files.java
@@ -94,11 +94,26 @@ public final class Files {
    * @throws IOException If an I/O error occurs.
    */
   public static Path copyResource(String resourceName, Path destination, OpenOption... options) throws IOException {
+    return copyResource(Files.class.getClassLoader(), resourceName, destination, options);
+  }
+
+  /**
+   * Copies the content of a resource to a file.
+   *
+   * @param classloader The class loader of the resource.
+   * @param resourceName The resource name.
+   * @param destination The destination file.
+   * @param options Options specifying how the destination file should be opened.
+   * @return The destination file.
+   * @throws IOException If an I/O error occurs.
+   */
+  public static Path copyResource(ClassLoader classloader, String resourceName, Path destination, OpenOption... options)
+      throws IOException {
     requireNonNull(resourceName);
     requireNonNull(destination);
 
     try (OutputStream out = java.nio.file.Files.newOutputStream(destination, options)) {
-      copyResource(resourceName, out);
+      copyResource(classloader, resourceName, out);
     }
     return destination;
   }
@@ -112,7 +127,23 @@ public final class Files {
    * @throws IOException If an I/O error occurs.
    */
   public static long copyResource(String resourceName, OutputStream out) throws IOException {
-    try (InputStream in = Files.class.getClassLoader().getResourceAsStream(resourceName)) {
+    return copyResource(Files.class.getClassLoader(), resourceName, out);
+  }
+
+  /**
+   * Copies the content of a resource to an output stream.
+   *
+   * @param classloader The class loader.
+   * @param resourceName The resource name.
+   * @param out The output stream.
+   * @return The total bytes written.
+   * @throws IOException If an I/O error occurs.
+   */
+  public static long copyResource(ClassLoader classloader, String resourceName, OutputStream out) throws IOException {
+    try (InputStream in = classloader.getResourceAsStream(resourceName)) {
+      if (in == null) {
+        throw new IllegalArgumentException(resourceName + " could not be accessed");
+      }
       long total = 0L;
       byte[] buf = new byte[4096];
       int n;
diff --git a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
index 76cbfeb..991b91e 100644
--- a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
+++ b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
@@ -14,15 +14,31 @@ package org.apache.tuweni.io;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.net.URI;
 import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
+@ExtendWith(TempDirectoryExtension.class)
 class ResourcesTest {
 
   @Test
@@ -37,31 +53,63 @@ class ResourcesTest {
     assertEquals(Arrays.asList("", "**/*.bar"), Arrays.asList(Resources.globRoot("**/*.bar")));
   }
 
+  private void copy(Path source, Path dest) {
+    try {
+      if (!dest.toString().equals("")) {
+        Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING);
+      }
+    } catch (IOException e) {
+      throw new UncheckedIOException(e);
+    }
+  }
+
   @Test
-  @SuppressWarnings("MustBeClosedChecker")
-  void shouldIterateResourcesOnFileSystemAndInJars() throws Exception {
-    List<URL> all = Resources.find("org/apache/tuweni/io/file/resourceresolver/**").collect(Collectors.toList());
-    String version = System.getProperty("java.version");
-    // Java 8 captures the root entry of the folder in the jar.
-    if (version.startsWith("1.")) {
-      assertEquals(13, all.size(), () -> describeExpectation(13, all));
-    } else {
-      assertEquals(12, all.size(), () -> describeExpectation(12, all));
+  @SuppressWarnings({"MustBeClosedChecker", "StreamResourceLeak"})
+  void shouldIterateResourcesOnFileSystemAndInJars(@TempDirectory Path folder) throws Exception {
+    Files.createDirectories(folder.resolve("org/apache/tuweni/io/file/resourceresolver"));
+    Files.createDirectory(folder.resolve("org/apache/tuweni/io/file/resourceresolver/subdir"));
+    Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/test.txt"));
+    Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/test1.txt"));
+    Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/test2.txt"));
+    Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml"));
+
+    Files.createDirectory(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir"));
+    Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir/test6.yaml"));
+    Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir/test5.txt"));
+
+    URI jarFile = URI.create("jar:" + folder.resolve("resourceresolvertest.jar").toUri());
+
+    try (FileSystem zipfs = FileSystems.newFileSystem(jarFile, Collections.singletonMap("create", "true"));) {
+      Files.walk(folder).forEach(source -> copy(source, zipfs.getPath(folder.relativize(source).toString())));
     }
+    Files
+        .walk(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir"))
+        .sorted(Comparator.reverseOrder())
+        .map(Path::toFile)
+        .forEach(File::delete);
+
+    URLClassLoader classLoader = new URLClassLoader(
+        new URL[] {
+            new URL("file:" + folder.toString() + "/"),
+            new URL("file:" + folder.resolve("resourceresolvertest.jar").toString())});
+    List<URL> all =
+        Resources.find(classLoader, "/org/apache/tuweni/io/file/resourceresolver/**").collect(Collectors.toList());
+
+    assertEquals(14, all.size(), () -> describeExpectation(14, all));
 
-    List<URL> txtFiles = Resources.find("org/**/test*.txt").collect(Collectors.toList());
-    assertEquals(6, txtFiles.size(), () -> describeExpectation(6, txtFiles));
+    List<URL> txtFiles = Resources.find(classLoader, "org/**/test*.txt").collect(Collectors.toList());
+    assertEquals(7, txtFiles.size(), () -> describeExpectation(7, txtFiles));
 
-    List<URL> txtFilesFromRoot = Resources.find("/**/test?.txt").collect(Collectors.toList());
+    List<URL> txtFilesFromRoot = Resources.find(classLoader, "/**/test?.txt").collect(Collectors.toList());
     assertEquals(5, txtFilesFromRoot.size(), () -> describeExpectation(5, txtFilesFromRoot));
 
-    List<URL> txtFilesFromRoot2 = Resources.find("//**/test*.txt").collect(Collectors.toList());
-    assertEquals(6, txtFilesFromRoot2.size(), () -> describeExpectation(6, txtFilesFromRoot2));
+    List<URL> txtFilesFromRoot2 = Resources.find(classLoader, "//**/test*.txt").collect(Collectors.toList());
+    assertEquals(7, txtFilesFromRoot2.size(), () -> describeExpectation(7, txtFilesFromRoot2));
 
-    List<URL> txtFilesFromRoot3 = Resources.find("///**/test*.txt").collect(Collectors.toList());
-    assertEquals(6, txtFilesFromRoot3.size(), () -> describeExpectation(6, txtFilesFromRoot3));
+    List<URL> txtFilesFromRoot3 = Resources.find(classLoader, "///**/test*.txt").collect(Collectors.toList());
+    assertEquals(7, txtFilesFromRoot3.size(), () -> describeExpectation(7, txtFilesFromRoot3));
 
-    List<URL> txtFilesInDir = Resources.find("**/anotherdir/*.txt").collect(Collectors.toList());
+    List<URL> txtFilesInDir = Resources.find(classLoader, "**/anotherdir/*.txt").collect(Collectors.toList());
     assertEquals(1, txtFilesInDir.size(), () -> describeExpectation(1, txtFilesInDir));
   }
 
diff --git a/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java b/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
index 5695b86..7da0ccd 100644
--- a/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
+++ b/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
@@ -21,6 +21,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.apache.tuweni.junit.TempDirectory;
 import org.apache.tuweni.junit.TempDirectoryExtension;
 
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
@@ -56,8 +59,12 @@ class FilesTest {
 
   @Test
   void canCopyResources(@TempDirectory Path tempDir) throws Exception {
-    Path file = copyResource("org/apache/tuweni/io/file/test.txt", tempDir.resolve("test.txt"));
+    Files.createDirectories(tempDir.resolve("org/something"));
+    Files.write(tempDir.resolve("org/something/test.txt"), "foo".getBytes(StandardCharsets.UTF_8));
+    URLClassLoader classLoader = new URLClassLoader(new URL[] {new URL("file:" + tempDir.toString() + "/")});
+
+    Path file = copyResource(classLoader, "org/something/test.txt", tempDir.resolve("test.txt"));
     assertTrue(Files.exists(file));
-    assertEquals(81, Files.size(file));
+    assertEquals(3, Files.size(file));
   }
 }
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml
deleted file mode 100644
index e69de29..0000000
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test1.txt b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test1.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test2.txt b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test2.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/test.txt b/io/src/test/resources/org/apache/tuweni/io/file/test.txt
deleted file mode 100644
index cd3d974..0000000
--- a/io/src/test/resources/org/apache/tuweni/io/file/test.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-ABCDEFGHIJKLMNOPQRSTUVWXYZ
-abcdefghijklmnopqrstuvwxyz
-01234567890123345678901234
diff --git a/io/src/test/resources/resourceresolver-test.jar b/io/src/test/resources/resourceresolver-test.jar
deleted file mode 100644
index b2226da..0000000
Binary files a/io/src/test/resources/resourceresolver-test.jar and /dev/null differ


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org