From c742ce27e920e9384f793266fdb90d109bcdcdab Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Fri, 20 Jul 2012 07:23:51 +0000
Subject: [PATCH] BIS-38/SP-48: Provide access to CRC32 checksums in PathInfoDB
 Fix unit test expectations.

SVN: 26163
---
 .../generic/shared/api/v1/FileInfoDssDTO.java |   3 +-
 .../api/v1/DssServiceRpcGenericTest.java      | 158 ++++++++++--------
 2 files changed, 90 insertions(+), 71 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java
index 9b48f2b5270..c4af2906342 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java
@@ -24,6 +24,7 @@ import org.apache.commons.lang.builder.ToStringStyle;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 import ch.systemsx.cisd.base.annotation.JsonObject;
+import ch.systemsx.cisd.common.io.IOUtilities;
 
 /**
  * Represents information about a file stored in DSS.
@@ -116,7 +117,7 @@ public class FileInfoDssDTO implements Serializable
         sb.append(getFileSize());
         if (tryGetCrc32Checksum() != null)
         {
-            sb.append(tryGetCrc32Checksum());
+            sb.append(IOUtilities.crc32ToString(tryGetCrc32Checksum()));
         }
         return sb.toString();
     }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGenericTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGenericTest.java
index 55d1e677ea9..54069e53f8c 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGenericTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGenericTest.java
@@ -28,6 +28,7 @@ import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import ch.systemsx.cisd.common.io.IOUtilities;
 import ch.systemsx.cisd.common.io.hierarchical_content.api.IHierarchicalContent;
 import ch.systemsx.cisd.common.io.hierarchical_content.api.IHierarchicalContentNode;
 import ch.systemsx.cisd.openbis.dss.generic.server.DatasetSessionAuthorizer;
@@ -101,18 +102,22 @@ public class DssServiceRpcGenericTest extends AssertJUnit
             {
                 {
                     one(content).getNode(path);
-                    IHierarchicalContentNode mainNode = context.mock(IHierarchicalContentNode.class, "mainNode");
+                    IHierarchicalContentNode mainNode =
+                            context.mock(IHierarchicalContentNode.class, "mainNode");
                     will(returnValue(mainNode));
-                    
+
                     allowing(mainNode).getName();
                     will(returnValue("main-node"));
-                    
+
                     allowing(mainNode).isDirectory();
                     will(returnValue(false));
+
+                    allowing(mainNode).isChecksumCRC32Precalculated();
+                    will(returnValue(false));
                     
                     allowing(mainNode).getRelativePath();
                     will(returnValue(path));
-                    
+
                     one(mainNode).getFileLength();
                     will(returnValue(42L));
                 }
@@ -129,7 +134,6 @@ public class DssServiceRpcGenericTest extends AssertJUnit
         context.assertIsSatisfied();
     }
 
-    
     @Test
     public void testFilesForData()
     {
@@ -139,77 +143,91 @@ public class DssServiceRpcGenericTest extends AssertJUnit
         prepareAuthorizationCheck(dataSetCode);
         prepareGetContent(dataSetCode);
         context.checking(new Expectations()
-        {
             {
-                IHierarchicalContentNode mainNode = createNodeMock("mainNode");
-                one(content).getNode(path);
-                will(returnValue(mainNode));
-                
-                IHierarchicalContentNode childNode1 = createNodeMock("childNode1");
-                IHierarchicalContentNode childNode1Child1 = createNodeMock("childNode1Child1");
-                IHierarchicalContentNode childNode1Child2 = createNodeMock("childNode1Child2");
-                IHierarchicalContentNode childNode2 = createNodeMock("childNode2");
-                IHierarchicalContentNode childNode2Child1 = createNodeMock("childNode2Child1");
-                IHierarchicalContentNode childNode3 = createNodeMock("childNode3");
-                
-                prepareDirectoryNode(mainNode, path, childNode1, childNode2, childNode3);
-                // child1
-                prepareDirectoryNode(childNode1, path + "/child1", childNode1Child1,
-                        childNode1Child2);
-                prepareFileNode(childNode1Child1, path + "/child1/child1", 11);
-                prepareFileNode(childNode1Child2, path + "/child1/child2", 12);
-                // child2
-                prepareDirectoryNode(childNode2, path + "/child2", childNode2Child1);
-                prepareFileNode(childNode2Child1, path + "/child2/child1", 21);
-                // child3
-                prepareFileNode(childNode3, path + "/child3", 3);
-            }
-            
-            private IHierarchicalContentNode createNodeMock(String mockName)
-            {
-                return context.mock(IHierarchicalContentNode.class, mockName);
-            }
-            
-            private void prepareFileNode(IHierarchicalContentNode node,
-                    final String relativePath, long length)
-            {
-                allowing(node).isDirectory();
-                will(returnValue(false));
-                allowing(node).getRelativePath();
-                will(returnValue(relativePath));
-                one(node).getFileLength();
-                will(returnValue(length));
-            }
-            
-            private void prepareDirectoryNode(IHierarchicalContentNode node,
-                    final String relativePath, IHierarchicalContentNode... childNodes)
-            {
-                allowing(node).isDirectory();
-                will(returnValue(true));
-                allowing(node).getRelativePath();
-                will(returnValue(relativePath));
-                one(node).getChildNodes();
-                will(returnValue(Arrays.asList(childNodes)));
-            }
-        });
-        
+                {
+                    IHierarchicalContentNode mainNode = createNodeMock("mainNode");
+                    one(content).getNode(path);
+                    will(returnValue(mainNode));
+
+                    IHierarchicalContentNode childNode1 = createNodeMock("childNode1");
+                    IHierarchicalContentNode childNode1Child1 = createNodeMock("childNode1Child1");
+                    IHierarchicalContentNode childNode1Child2 = createNodeMock("childNode1Child2");
+                    IHierarchicalContentNode childNode2 = createNodeMock("childNode2");
+                    IHierarchicalContentNode childNode2Child1 = createNodeMock("childNode2Child1");
+                    IHierarchicalContentNode childNode3 = createNodeMock("childNode3");
+
+                    prepareDirectoryNode(mainNode, path, childNode1, childNode2, childNode3);
+                    // child1
+                    prepareDirectoryNode(childNode1, path + "/child1", childNode1Child1,
+                            childNode1Child2);
+                    prepareFileNode(childNode1Child1, path + "/child1/child1", 11, 123);
+                    prepareFileNode(childNode1Child2, path + "/child1/child2", 12, -17);
+                    // child2
+                    prepareDirectoryNode(childNode2, path + "/child2", childNode2Child1);
+                    prepareFileNode(childNode2Child1, path + "/child2/child1", 21, 42);
+                    // child3
+                    prepareFileNode(childNode3, path + "/child3", 3, 1111);
+                }
+
+                private IHierarchicalContentNode createNodeMock(String mockName)
+                {
+                    return context.mock(IHierarchicalContentNode.class, mockName);
+                }
+
+                private void prepareFileNode(IHierarchicalContentNode node,
+                        final String relativePath, long length, int crc32Checksum)
+                {
+                    allowing(node).isDirectory();
+                    will(returnValue(false));
+                    allowing(node).getRelativePath();
+                    will(returnValue(relativePath));
+                    one(node).getFileLength();
+                    will(returnValue(length));
+                    one(node).isChecksumCRC32Precalculated();
+                    will(returnValue(true));
+                    one(node).getChecksumCRC32();
+                    will(returnValue(crc32Checksum));
+                }
+
+                private void prepareDirectoryNode(IHierarchicalContentNode node,
+                        final String relativePath, IHierarchicalContentNode... childNodes)
+                {
+                    allowing(node).isDirectory();
+                    will(returnValue(true));
+                    one(node).isChecksumCRC32Precalculated();
+                    will(returnValue(false));
+                    allowing(node).getRelativePath();
+                    will(returnValue(relativePath));
+                    one(node).getChildNodes();
+                    will(returnValue(Arrays.asList(childNodes)));
+                }
+            });
+
         FileInfoDssDTO[] dataSets =
-            dssService.listFilesForDataSet(SESSION_TOKEN, dataSetCode, path, true);
-        
+                dssService.listFilesForDataSet(SESSION_TOKEN, dataSetCode, path, true);
+
         assertEquals(6, dataSets.length);
-        assertEquals(fileInfoString(path, "child1", -1), dataSets[0].toString());
-        assertEquals(fileInfoString(path, "child1/child1", 11), dataSets[1].toString());
-        assertEquals(fileInfoString(path, "child1/child2", 12), dataSets[2].toString());
-        assertEquals(fileInfoString(path, "child2", -1), dataSets[3].toString());
-        assertEquals(fileInfoString(path, "child2/child1", 21), dataSets[4].toString());
-        assertEquals(fileInfoString(path, "child3", 3), dataSets[5].toString());
+        assertEquals(fileInfoString(path, "child1", -1, null), dataSets[0].toString());
+        assertEquals(fileInfoString(path, "child1/child1", 11, 123), dataSets[1].toString());
+        assertEquals(fileInfoString(path, "child1/child2", 12, -17), dataSets[2].toString());
+        assertEquals(fileInfoString(path, "child2", -1, null), dataSets[3].toString());
+        assertEquals(fileInfoString(path, "child2/child1", 21, 42), dataSets[4].toString());
+        assertEquals(fileInfoString(path, "child3", 3, 1111), dataSets[5].toString());
         context.assertIsSatisfied();
     }
-    
-    private static String fileInfoString(String startPath, String pathInListing, long length)
+
+    private static String fileInfoString(String startPath, String pathInListing, long length,
+            Integer checksum)
     {
-        return String.format("FileInfoDssDTO[%s/%s,%s,%d]", startPath, pathInListing,
-                pathInListing, length);
+        if (checksum != null)
+        {
+            return String.format("FileInfoDssDTO[%s/%s,%s,%d,%s]", startPath, pathInListing,
+                    pathInListing, length, IOUtilities.crc32ToString(checksum));
+        } else
+        {
+            return String.format("FileInfoDssDTO[%s/%s,%s,%d]", startPath, pathInListing,
+                    pathInListing, length);
+        }
     }
 
     private void prepareLockDataSet(final String dataSetCode)
-- 
GitLab