Attempt to be robust to not having an alignment in our RunXml file
[htsworkflow.git] / test / test_copier.py
index 6caf6a8cc311c9a2bc4a5f1f03c1f283300594d6..3e26cc679605f36d45d5f24016a99f959df63b4e 100644 (file)
@@ -1,16 +1,10 @@
-import unittest
+from unittest2 import TestCase
 
 from StringIO import StringIO
-from gaworkflow import copier
+from htsworkflow.automation import copier
+from htsworkflow.automation.solexa import is_runfolder
 
-class testCopier(unittest.TestCase):
-    def test_runfolder_validate(self):
-        self.failUnlessEqual(copier.runfolder_validate(""), False)
-        self.failUnlessEqual(copier.runfolder_validate("1345_23"), False)
-        self.failUnlessEqual(copier.runfolder_validate("123456_asdf-$23'"), False)
-        self.failUnlessEqual(copier.runfolder_validate("123456_USI-EAS44"), True)
-        self.failUnlessEqual(copier.runfolder_validate("123456_USI-EAS44 "), False)
-        
+class testCopier(TestCase):
     def test_empty_config(self):
         cfg = StringIO("""[fake]
 something: unrelated
@@ -24,7 +18,7 @@ jid: copier@example.fake
 password: badpassword
 authorized_users: user1@example.fake user2@example.fake
 rsync_password_file: ~/.sequencer
-rsync_source: /tmp/sequencer_source
+rsync_sources: rsync://localhost/tmp/sequencer_source rsync://user@server:1234/other_sequencer
 rsync_destination: /tmp/sequencer_destination
 notify_users: user3@example.fake
 # who to run to
@@ -32,15 +26,35 @@ notify_users: user3@example.fake
 """)
         c = copier.CopierBot("copier", configfile=cfg)
         c.read_config()
+        c._init_rsync()
         self.failUnlessEqual(c.jid, 'copier@example.fake')
         self.failUnlessEqual(c.cfg['password'], 'badpassword')
         self.failUnlessEqual(len(c.authorized_users), 2)
         self.failUnlessEqual(c.authorized_users[0], 'user1@example.fake')
         self.failUnlessEqual(c.authorized_users[1], 'user2@example.fake')
-        self.failUnlessEqual(c.rsync.source_base, '/tmp/sequencer_source')
+        self.failUnlessEqual(c.rsync.source_base_list[0], 
+                             'rsync://localhost/tmp/sequencer_source/')
         self.failUnlessEqual(c.rsync.dest_base, '/tmp/sequencer_destination')
         self.failUnlessEqual(len(c.notify_users), 1)
         self.failUnlessEqual(c.notify_users[0], 'user3@example.fake')
+        self.failUnlessEqual(c.validate_url('rsync://other/tmp'), None)
+        self.failUnlessEqual(c.validate_url('http://localhost/tmp'), None)
+        # In the rsync process the URL gets a trailing '/' added to it
+        # But in the bot config its still slash-less. 
+        # It is debatable when to add the trailing slash.
+        self.failUnlessEqual(
+          c.validate_url('rsync://localhost/tmp/sequencer_source'), 
+          'rsync://localhost/tmp/sequencer_source') 
+        self.failUnlessEqual(
+          c.validate_url('rsync://localhost/tmp/sequencer_source/'), 
+          'rsync://localhost/tmp/sequencer_source/')
+        self.failUnlessEqual(
+          c.validate_url('rsync://localhost/tmp/sequencer_source/bleem'), 
+          'rsync://localhost/tmp/sequencer_source/bleem')
+        self.failUnlessEqual(
+          c.validate_url('rsync://user@server:1234/other_sequencer'),
+          'rsync://user@server:1234/other_sequencer')
+
 
     def test_dirlist_filter(self):
        """
@@ -60,8 +74,14 @@ notify_users: user3@example.fake
        self.failUnlessEqual(len(result), 1)
        self.failUnlessEqual(result[0][-1], '4')
 
+
 def suite():
-    return unittest.makeSuite(testCopier,'test')
+    from unittest2 import TestSuite, defaultTestLoader
+    suite = TestSuite()
+    suite.addTests(defaultTestLoader.loadTestsFromTestCase(testCopier))
+    return suite
+
 
 if __name__ == "__main__":
-    unittest.main(defaultTest="suite")
+    from unittest2 import main
+    main(defaultTest="suite")