From aea8e5e1a3000bc8012e73b553a391a4cfd40d8a Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 11 Mar 2013 15:06:42 +0000
Subject: [PATCH] SP-539, BIS-339: more unit tests

SVN: 28585
---
 .../path/PathInfoDatabaseFeedingTaskTest.java | 252 ++++++++++++++----
 1 file changed, 200 insertions(+), 52 deletions(-)

diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
index fec5eb2884e..3a7beb19cdb 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java
@@ -27,6 +27,7 @@ import java.util.Properties;
 
 import org.jmock.Expectations;
 import org.jmock.Mockery;
+import org.jmock.Sequence;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -129,19 +130,135 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
                     
                     one(service).listOldestPhysicalDataSets(12);
                     will(returnValue(Arrays.asList(ds1, ds2)));
-                    
-                    exactly(2).of(dao).deleteLastFeedingEvent();
-                    one(dao).createLastFeedingEvent(ds1.getRegistrationTimestamp());
-                    one(dao).createLastFeedingEvent(ds2.getRegistrationTimestamp());
-                    exactly(2).of(dao).commit();
                 }
             });
         prepareHappyCase(ds1);
         prepareFailing(ds2);
+        prepareCreateLastFeedingEvent(ds1, ds2);
 
         createTask(12, 3, 0).execute();
     }
+    
+    @Test
+    public void testAsMaintenanceTaskWithFinitNumberOfChunks()
+    {
+        final SimpleDataSetInformationDTO ds1 = dataSet(1000);
+        final SimpleDataSetInformationDTO ds2 = dataSet(2000);
+        final SimpleDataSetInformationDTO ds3 = dataSet(3000);
+        final SimpleDataSetInformationDTO ds4 = dataSet(4000);
+        final SimpleDataSetInformationDTO ds5 = dataSet(5000);
+        final SimpleDataSetInformationDTO ds6 = dataSet(6000);
+        final Sequence chunkReadingSequence = context.sequence("chunkReadingSequence");
+        context.checking(new Expectations()
+            {
+                {
+                    one(dao).getRegistrationTimestampOfLastFeedingEvent();
+                    will(returnValue(null));
+                    inSequence(chunkReadingSequence);
+
+                    one(service).listOldestPhysicalDataSets(2);
+                    will(returnValue(Arrays.asList(ds1, ds2)));
+                    inSequence(chunkReadingSequence);
 
+                    one(dao).getRegistrationTimestampOfLastFeedingEvent();
+                    Date timeStamp = new Date(2000);
+                    will(returnValue(timeStamp));
+                    inSequence(chunkReadingSequence);
+
+                    one(service).listOldestPhysicalDataSets(timeStamp, 2);
+                    will(returnValue(Arrays.asList(ds3, ds4)));
+                    inSequence(chunkReadingSequence);
+                    
+                    one(dao).getRegistrationTimestampOfLastFeedingEvent();
+                    Date timeStamp2 = new Date(4000);
+                    will(returnValue(timeStamp2));
+                    inSequence(chunkReadingSequence);
+                    
+                    one(service).listOldestPhysicalDataSets(timeStamp2, 2);
+                    will(returnValue(Arrays.asList(ds5, ds6)));
+                    inSequence(chunkReadingSequence);
+                }
+            });
+        prepareHappyCase(ds1, ds4, ds5);
+        prepareFailing(ds2, ds3, ds6);
+        prepareCreateLastFeedingEvent(ds1, ds2, ds3, ds4, ds5, ds6);
+        
+        createTask(2, 3, 0).execute();
+    }
+    
+    @Test
+    public void testAsMaintenanceTaskWithFinitTimeLimit()
+    {
+        final SimpleDataSetInformationDTO ds1 = dataSet(1000);
+        final SimpleDataSetInformationDTO ds2 = dataSet(2000);
+        final SimpleDataSetInformationDTO ds3 = dataSet(3000);
+        final SimpleDataSetInformationDTO ds4 = dataSet(4000);
+        final Sequence chunkReadingSequence = context.sequence("chunkReadingSequence");
+        context.checking(new Expectations()
+            {
+                {
+                    one(dao).getRegistrationTimestampOfLastFeedingEvent();
+                    will(returnValue(null));
+                    inSequence(chunkReadingSequence);
+
+                    one(service).listOldestPhysicalDataSets(2);
+                    will(returnValue(Arrays.asList(ds1, ds2)));
+                    inSequence(chunkReadingSequence);
+
+                    one(dao).getRegistrationTimestampOfLastFeedingEvent();
+                    Date timeStamp = new Date(2000);
+                    will(returnValue(timeStamp));
+                    inSequence(chunkReadingSequence);
+
+                    one(service).listOldestPhysicalDataSets(timeStamp, 2);
+                    will(returnValue(Arrays.asList(ds3, ds4)));
+                    inSequence(chunkReadingSequence);
+
+                }
+            });
+        prepareHappyCase(ds1, ds4);
+        prepareFailing(ds2, ds3);
+        prepareCreateLastFeedingEvent(ds1, ds2, ds3, ds4);
+
+        createTask(2, 0, 2000).execute();
+    }
+
+    @Test
+    public void testAsMaintenanceTaskUnlimited()
+    {
+        final SimpleDataSetInformationDTO ds1 = dataSet(1000);
+        final SimpleDataSetInformationDTO ds2 = dataSet(2000);
+        final SimpleDataSetInformationDTO ds3 = dataSet(3000);
+        final Sequence chunkReadingSequence = context.sequence("chunkReadingSequence");
+        context.checking(new Expectations()
+            {
+                {
+                    one(dao).getRegistrationTimestampOfLastFeedingEvent();
+                    will(returnValue(null));
+                    inSequence(chunkReadingSequence);
+
+                    one(service).listOldestPhysicalDataSets(2);
+                    will(returnValue(Arrays.asList(ds1, ds2)));
+                    inSequence(chunkReadingSequence);
+
+                    one(dao).getRegistrationTimestampOfLastFeedingEvent();
+                    Date timeStamp = new Date(2000);
+                    will(returnValue(timeStamp));
+                    inSequence(chunkReadingSequence);
+
+                    one(service).listOldestPhysicalDataSets(timeStamp, 2);
+                    will(returnValue(Arrays.asList(ds3)));
+                    inSequence(chunkReadingSequence);
+                    
+                }
+            });
+        prepareHappyCase(ds1, ds3);
+        prepareFailing(ds2);
+        prepareCreateLastFeedingEvent(ds1, ds2, ds3);
+        
+        createTask(2, 0, 0).execute();
+    }
+    
     @Test
     public void testPostRegistrationHappyCase()
     {
@@ -226,81 +343,112 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase
         task.createExecutor(DATA_SET_CODE, false).execute();
     }
 
-    private void prepareHappyCase(final IDatasetLocation dataSet)
+    private void prepareHappyCase(final IDatasetLocation... dataSets)
     {
         context.checking(new Expectations()
             {
                 {
-                    one(shareIdManager).lock(dataSet.getDataSetCode());
+                    for (IDatasetLocation dataSet : dataSets)
+                    {
+                        one(shareIdManager).lock(dataSet.getDataSetCode());
 
-                    one(directoryProvider).getDataSetDirectory(dataSet);
-                    will(returnValue(dataSetFolder));
+                        one(directoryProvider).getDataSetDirectory(dataSet);
+                        will(returnValue(dataSetFolder));
 
-                    one(dao).tryGetDataSetId(dataSet.getDataSetCode());
-                    will(returnValue(null));
+                        one(dao).tryGetDataSetId(dataSet.getDataSetCode());
+                        will(returnValue(null));
 
-                    one(dao).createDataSet(dataSet.getDataSetCode(), dataSet.getDataSetLocation());
-                    will(returnValue(101L));
+                        one(dao).createDataSet(dataSet.getDataSetCode(),
+                                dataSet.getDataSetLocation());
+                        will(returnValue(101L));
 
-                    one(contentFactory).asHierarchicalContent(dataSetFolder, DO_NOTHING);
-                    will(returnValue(content));
+                        one(contentFactory).asHierarchicalContent(dataSetFolder, DO_NOTHING);
+                        will(returnValue(content));
 
-                    one(contentFactory).asHierarchicalContentNode(content, dataSetFolder);
-                    will(returnValue(node));
+                        one(contentFactory).asHierarchicalContentNode(content, dataSetFolder);
+                        will(returnValue(node));
 
-                    one(node).exists();
-                    will(returnValue(true));
+                        one(node).exists();
+                        will(returnValue(true));
 
-                    one(node).getName();
-                    will(returnValue("ds1-root"));
+                        one(node).getName();
+                        will(returnValue("ds1-root"));
 
-                    one(node).getFileLength();
-                    will(returnValue(12345L));
+                        one(node).getFileLength();
+                        will(returnValue(12345L));
 
-                    one(node).getChecksumCRC32();
-                    will(returnValue(789));
-                    
-                    one(node).isDirectory();
-                    will(returnValue(false));
+                        one(node).getChecksumCRC32();
+                        will(returnValue(789));
 
-                    one(node).getLastModified();
-                    will(returnValue(42L));
+                        one(node).isDirectory();
+                        will(returnValue(false));
 
-                    one(dao).createDataSetFiles(
-                            with(equal(Collections.singletonList(new PathEntryDTO(101L, null,
-                                    "", "ds1-root", 12345L, 789, false, new Date(42))))));
+                        one(node).getLastModified();
+                        will(returnValue(42L));
 
-                    one(dao).commit();
-                    one(shareIdManager).releaseLocks();
+                        one(dao).createDataSetFiles(
+                                with(equal(Collections.singletonList(new PathEntryDTO(101L, null,
+                                        "", "ds1-root", 12345L, 789, false, new Date(42))))));
+
+                        one(dao).commit();
+                        one(shareIdManager).releaseLocks();
+                    }
                 }
             });
     }
 
-    private void prepareFailing(final IDatasetLocation dataSet)
+    private void prepareFailing(final IDatasetLocation... dataSets)
     {
         context.checking(new Expectations()
             {
                 {
-                    one(shareIdManager).lock(dataSet.getDataSetCode());
-
-                    one(directoryProvider).getDataSetDirectory(dataSet);
-                    will(returnValue(dataSetFolder));
-
-                    one(dao).tryGetDataSetId(dataSet.getDataSetCode());
-                    will(returnValue(null));
-
-                    one(dao).createDataSet(dataSet.getDataSetCode(), dataSet.getDataSetLocation());
-                    will(returnValue(101L));
-
-                    one(contentFactory).asHierarchicalContent(dataSetFolder, DO_NOTHING);
-                    will(throwException(new RuntimeException("Oophs!")));
-
-                    one(dao).rollback();
-                    one(shareIdManager).releaseLocks();
+                    for (IDatasetLocation dataSet : dataSets)
+                    {
+                        one(shareIdManager).lock(dataSet.getDataSetCode());
+                        
+                        one(directoryProvider).getDataSetDirectory(dataSet);
+                        will(returnValue(dataSetFolder));
+                        
+                        one(dao).tryGetDataSetId(dataSet.getDataSetCode());
+                        will(returnValue(null));
+                        
+                        one(dao).createDataSet(dataSet.getDataSetCode(), dataSet.getDataSetLocation());
+                        will(returnValue(101L));
+                        
+                        one(contentFactory).asHierarchicalContent(dataSetFolder, DO_NOTHING);
+                        will(throwException(new RuntimeException("Oophs!")));
+                        
+                        one(dao).rollback();
+                        one(shareIdManager).releaseLocks();
+                    }
                 }
             });
     }
     
+    private void prepareCreateLastFeedingEvent(final SimpleDataSetInformationDTO... dataSets)
+    {
+        context.checking(new Expectations()
+            {
+                {
+                    for (SimpleDataSetInformationDTO dataSet : dataSets)
+                    {
+                        one(dao).deleteLastFeedingEvent();
+                        one(dao).createLastFeedingEvent(dataSet.getRegistrationTimestamp());
+                        one(dao).commit();
+                    }
+                }
+            });
+    }
+
+    private SimpleDataSetInformationDTO dataSet(long timeStamp)
+    {
+        SimpleDataSetInformationDTO dataSet = new SimpleDataSetInformationDTO();
+        dataSet.setDataSetCode("DS-" + timeStamp);
+        dataSet.setRegistrationTimestamp(new Date(timeStamp));
+        dataSet.setDataSetLocation("abc" + timeStamp);
+        return dataSet;
+    }
+    
     private PathInfoDatabaseFeedingTask createTask(int chunkSize, int maxNumberOfChunks,
             long timeLimite)
     {
-- 
GitLab