From 714090ce422b68bc15f13f76459d9cac7cacabd2 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 5 Oct 2017 07:50:44 +0000
Subject: [PATCH] SSDM-5639: TarBasedPathInfoProviderTest refactored. h5ar file
 added to example. tests added.

SVN: 38793
---
 .../ds1/data.h5ar                             | Bin 0 -> 16184 bytes
 .../ds1/data/hello.txt                        |   1 +
 .../ds1/data/sub/hello.txt                    |   1 +
 .../ds1/data/sub/some.txt                     |   1 +
 .../TarBasedPathInfoProviderTest.java         |  47 +++++++++++++-----
 5 files changed, 38 insertions(+), 12 deletions(-)
 create mode 100644 datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data.h5ar
 create mode 100644 datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/hello.txt
 create mode 100644 datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/hello.txt
 create mode 100644 datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/some.txt

diff --git a/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data.h5ar b/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data.h5ar
new file mode 100644
index 0000000000000000000000000000000000000000..1622fd8035539495835ea8dd00033e1d589f3acd
GIT binary patch
literal 16184
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

literal 0
HcmV?d00001

diff --git a/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/hello.txt b/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/hello.txt
new file mode 100644
index 00000000000..95d09f2b101
--- /dev/null
+++ b/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/hello.txt
@@ -0,0 +1 @@
+hello world
\ No newline at end of file
diff --git a/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/hello.txt b/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/hello.txt
new file mode 100644
index 00000000000..329c63806dd
--- /dev/null
+++ b/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/hello.txt
@@ -0,0 +1 @@
+hello test
\ No newline at end of file
diff --git a/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/some.txt b/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/some.txt
new file mode 100644
index 00000000000..629ad124027
--- /dev/null
+++ b/datastore_server/resource/test-data/TarBasedPathInfoProviderTest/ds1/data/sub/some.txt
@@ -0,0 +1 @@
+This is some text for testing purpose.
\ No newline at end of file
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/TarBasedPathInfoProviderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/TarBasedPathInfoProviderTest.java
index ddbb5cfa93b..f6859576727 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/TarBasedPathInfoProviderTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/TarBasedPathInfoProviderTest.java
@@ -26,11 +26,11 @@ import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
 import ch.systemsx.cisd.common.collection.SimpleComparator;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
 import ch.systemsx.cisd.common.filesystem.tar.Tar;
 import ch.systemsx.cisd.common.logging.ISimpleLogger;
 import ch.systemsx.cisd.common.logging.MockLogger;
 import ch.systemsx.cisd.common.test.AssertionUtil;
+import ch.systemsx.cisd.openbis.common.io.hierarchical_content.H5FolderFlags;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetPathInfo;
 
 /**
@@ -38,6 +38,9 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetPathInfo;
  */
 public class TarBasedPathInfoProviderTest extends AbstractFileSystemTestCase
 {
+    private static final File TEST_DATA_FOLDER = new File("../datastore_server/resource/test-data/"
+            + TarBasedPathInfoProviderTest.class.getSimpleName());
+
     private static final SimpleComparator<DataSetPathInfo, String> COMPARATOR = new SimpleComparator<DataSetPathInfo, String>()
         {
             @Override
@@ -51,23 +54,19 @@ public class TarBasedPathInfoProviderTest extends AbstractFileSystemTestCase
 
     private TarBasedPathInfoProvider pathInfoProvider;
 
+    private File tarFile;
+
     @BeforeMethod
     public void prepareExample() throws Exception
     {
         logger = new MockLogger();
-        File dataSet = new File(workingDirectory, "ds1");
-        File data = new File(dataSet, "data");
-        File subFolder = new File(data, "sub");
-        subFolder.mkdirs();
-        FileUtilities.writeToFile(new File(subFolder, "hello.txt"), "hello test");
-        FileUtilities.writeToFile(new File(subFolder, "some.txt"), "This is some text for testing purpose.");
-        FileUtilities.writeToFile(new File(data, "hello.txt"), "hello world");
-        File tarFile = new File(workingDirectory, "data.tar");
+        tarFile = new File(workingDirectory, "data.tar");
         Tar tar = null;
         try
         {
             tar = new Tar(tarFile);
-            tar.add(data, dataSet.getPath().length());
+            File file = new File(TEST_DATA_FOLDER, "ds1");
+            tar.add(file, file.getPath().length());
         } finally
         {
             if (tar != null)
@@ -104,9 +103,9 @@ public class TarBasedPathInfoProviderTest extends AbstractFileSystemTestCase
 
         assertPathInfo("data/sub/hello.txt[hello.txt, 10, 3d4448e7]", children.get(0));
         assertPathInfo("data/sub/some.txt[some.txt, 38, 2f7b8cfb]", children.get(1));
-        AssertionUtil.assertContains("INFO: Reading statistics for input stream: 59 bytes in 7 chunks took < 1sec.",
+        AssertionUtil.assertContains("INFO: Reading statistics for input stream: 15.86 KB in 1626 chunks took < 1sec.",
                 logger.toString());
-        AssertionUtil.assertContains("INFO: Writing statistics for output stream: 59 bytes in 7 chunks took < 1sec.",
+        AssertionUtil.assertContains("INFO: Writing statistics for output stream: 15.86 KB in 1626 chunks took < 1sec.",
                 logger.toString());
         assertEquals(2, children.size());
     }
@@ -131,6 +130,30 @@ public class TarBasedPathInfoProviderTest extends AbstractFileSystemTestCase
         assertPathInfo("data/sub/hello.txt[hello.txt, 10, 3d4448e7]", pathInfos.get(0));
         assertEquals(1, pathInfos.size());
     }
+    
+    @Test
+    public void testHdf5FileAsFile()
+    {
+        DataSetPathInfo pathInfo = pathInfoProvider.tryGetPathInfoByRelativePath("data.h5ar");
+        
+        assertEquals(false, pathInfo.isDirectory());
+        assertPathInfo("data.h5ar[data.h5ar, 16184, 83bcffb0]", pathInfo);
+    }
+    
+    @Test
+    public void testHdf5FileAsFolder()
+    {
+        List<H5FolderFlags> flags = Arrays.asList(new H5FolderFlags("", false, true));
+        TarBasedPathInfoProvider provider = new TarBasedPathInfoProvider(tarFile, flags, 10, logger);
+        
+        DataSetPathInfo parent = provider.tryGetPathInfoByRelativePath("data.h5ar/data");
+        List<DataSetPathInfo> children = provider.listChildrenPathInfos(parent);
+        
+        Collections.sort(children, COMPARATOR);
+        assertPathInfo("data.h5ar/data/hello.txt[hello.txt, 11, d4a1185]", children.get(0));
+        assertPathInfo("data.h5ar/data/sub[sub, 0, 0]", children.get(1));
+        assertEquals(2, children.size());
+    }
 
     private void assertPathInfo(String expectedPathInfo, DataSetPathInfo pathInfo)
     {
-- 
GitLab