From cba1b20af8b68bf19a598271cf130b1cf225fc11 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 23 Mar 2011 14:42:10 +0000
Subject: [PATCH] [LMS-2142] tests for remote implementation of folder
 comparison

SVN: 20473
---
 .../RemoteDataSetFileOperationsExecutor.java  |  2 +-
 .../DataSetFileOperationsManagerTest.java     | 59 ++++++++++++++-----
 2 files changed, 46 insertions(+), 15 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java
index 28dd5d211e0..9cb29b1bc9d 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java
@@ -210,7 +210,7 @@ public final class RemoteDataSetFileOperationsExecutor implements IDataSetFileOp
             for (String line : output)
             {
                 String split[] = line.split("\t");
-                assert split.length == 2;
+                assert split.length == 2; // silently ignore in production - it will fail later
                 destinationFileSizesByPaths.put(split[0], Long.parseLong(split[1]));
             }
         } else
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java
index 0f101b7b7e0..74f8c09be40 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManagerTest.java
@@ -58,6 +58,12 @@ public class DataSetFileOperationsManagerTest extends AbstractFileSystemTestCase
             ExecutionResult.createExceptional(new Exception(DUMMY_ERROR_MESSAGE)), null, 0,
             (List<String>) null, null, null, null);
 
+    private static ProcessResult createOkResultWithOutput(List<String> output)
+    {
+        return new ProcessResult(Arrays.asList(""), 0, null, ExecutionResult.create(null), null, 0,
+                output, null, null, null);
+    }
+
     private static final long SSH_TIMEOUT_MILLIS = DataSetFileOperationsManager.SSH_TIMEOUT_MILLIS;
 
     private static final String LOCATION_1 = "l1";
@@ -666,7 +672,7 @@ public class DataSetFileOperationsManagerTest extends AbstractFileSystemTestCase
             {
                 {
                     /*
-                     * ds1: directory is present and content is OK
+                     * ds1: directory is present but content is WRONG
                      */
                     one(sshExecutor).exists(ds1ArchivedLocationFile.getPath(), SSH_TIMEOUT_MILLIS);
                     will(returnValue(BooleanStatus.createTrue()));
@@ -674,26 +680,35 @@ public class DataSetFileOperationsManagerTest extends AbstractFileSystemTestCase
                     one(sshExecutor).executeCommandRemotely(
                             gfindExec.getPath() + " " + ds1ArchivedLocationFile.getPath()
                                     + " -type f -printf \"%p\\t%s\\n\"", SSH_TIMEOUT_MILLIS);
-                    will(returnValue(ERROR_RESULT));
+                    will(returnValue(createOkResultWithOutput(Arrays.asList(
+                            "original/data1_2.txt\t4", "original/fake.txt\t666"))));
 
-                    // /*
-                    // * ds2: directory is present and content is OK
-                    // */
-                    // one(sshExecutor).exists(ds2ArchivedLocationFile.getPath(),
-                    // SSH_TIMEOUT_MILLIS);
-                    // will(returnValue(BooleanStatus.createTrue()));
+                    /*
+                     * ds2: directory is present and content is OK
+                     */
+                    one(sshExecutor).exists(ds2ArchivedLocationFile.getPath(), SSH_TIMEOUT_MILLIS);
+                    will(returnValue(BooleanStatus.createTrue()));
+                    one(sshExecutor).executeCommandRemotely(
+                            gfindExec.getPath() + " " + ds2ArchivedLocationFile.getPath()
+                                    + " -type f -printf \"%p\\t%s\\n\"", SSH_TIMEOUT_MILLIS);
+                    will(returnValue(createOkResultWithOutput(Arrays
+                            .asList("original/data2.txt\t12"))));
                 }
             });
         BooleanStatus status1 = dataSetCopier.isPresentInDestination(ds1Location, ds1);
-        // BooleanStatus status2 = dataSetCopier.isPresentInDestination(ds2Location, ds2);
-        assertError(status1, "listing files failed");
-        // assertTrue(status2);
+        assertFalse(status1, "Inconsistencies:\n"
+                + "'original/data1_1.txt' - exists in store but is missing in destination\n"
+                + "'original/data1_2.txt' - different file sizes; store: 14, destination: 4\n"
+                + "'original/fake.txt' - exists in destination but is missing in store\n");
+
+        BooleanStatus status2 = dataSetCopier.isPresentInDestination(ds2Location, ds2);
+        assertTrue(status2);
 
         context.assertIsSatisfied();
     }
 
     @Test
-    public void testRemoteViaSshIsPresentInDestinationWithError()
+    public void testRemoteViaSshIsPresentInDestinationWithErrors()
     {
         Properties properties = createRemoteViaSshDestinationProperties();
         prepareRemoteCreateAndCheckCopier(HOST, null, true);
@@ -702,12 +717,28 @@ public class DataSetFileOperationsManagerTest extends AbstractFileSystemTestCase
         context.checking(new Expectations()
             {
                 {
+                    /*
+                     * ds1: checking existance fails
+                     */
                     one(sshExecutor).exists(ds1ArchivedLocationFile.getPath(), SSH_TIMEOUT_MILLIS);
                     will(returnValue(BooleanStatus.createError(DUMMY_ERROR_MESSAGE)));
+
+                    /*
+                     * ds2: listing fails
+                     */
+                    one(sshExecutor).exists(ds2ArchivedLocationFile.getPath(), SSH_TIMEOUT_MILLIS);
+                    will(returnValue(BooleanStatus.createTrue()));
+
+                    one(sshExecutor).executeCommandRemotely(
+                            gfindExec.getPath() + " " + ds2ArchivedLocationFile.getPath()
+                                    + " -type f -printf \"%p\\t%s\\n\"", SSH_TIMEOUT_MILLIS);
+                    will(returnValue(ERROR_RESULT));
                 }
             });
-        BooleanStatus status = dataSetCopier.isPresentInDestination(ds1Location, ds1);
-        assertError(status, DUMMY_ERROR_MESSAGE);
+        BooleanStatus status1 = dataSetCopier.isPresentInDestination(ds1Location, ds1);
+        assertError(status1, DUMMY_ERROR_MESSAGE);
+        BooleanStatus status2 = dataSetCopier.isPresentInDestination(ds2Location, ds2);
+        assertError(status2, "listing files failed");
 
         context.assertIsSatisfied();
     }
-- 
GitLab