9a1b73884af6bee909e2805eb5fb770ada0b1631
[htsworkflow.git] / test / test_copier.py
1 import unittest
2
3 from StringIO import StringIO
4 from htsworkflow.automation import copier
5
6 class testCopier(unittest.TestCase):
7     def test_runfolder_validate(self):
8         self.failUnlessEqual(copier.runfolder_validate(""), False)
9         self.failUnlessEqual(copier.runfolder_validate("1345_23"), False)
10         self.failUnlessEqual(copier.runfolder_validate("123456_asdf-$23'"), False)
11         self.failUnlessEqual(copier.runfolder_validate("123456_USI-EAS44"), True)
12         self.failUnlessEqual(copier.runfolder_validate("123456_USI-EAS44 "), False)
13         
14     def test_empty_config(self):
15         cfg = StringIO("""[fake]
16 something: unrelated
17 """)
18         bot = copier.CopierBot('fake', configfile=cfg)
19         self.failUnlessRaises(RuntimeError, bot.read_config)
20         
21     def test_full_config(self):
22         cfg = StringIO("""[copier]        
23 jid: copier@example.fake
24 password: badpassword
25 authorized_users: user1@example.fake user2@example.fake
26 rsync_password_file: ~/.sequencer
27 rsync_source: /tmp/sequencer_source
28 rsync_destination: /tmp/sequencer_destination
29 notify_users: user3@example.fake
30 # who to run to
31 #runner:
32 """)
33         c = copier.CopierBot("copier", configfile=cfg)
34         c.read_config()
35         self.failUnlessEqual(c.jid, 'copier@example.fake')
36         self.failUnlessEqual(c.cfg['password'], 'badpassword')
37         self.failUnlessEqual(len(c.authorized_users), 2)
38         self.failUnlessEqual(c.authorized_users[0], 'user1@example.fake')
39         self.failUnlessEqual(c.authorized_users[1], 'user2@example.fake')
40         self.failUnlessEqual(c.rsync.source_base, '/tmp/sequencer_source')
41         self.failUnlessEqual(c.rsync.dest_base, '/tmp/sequencer_destination')
42         self.failUnlessEqual(len(c.notify_users), 1)
43         self.failUnlessEqual(c.notify_users[0], 'user3@example.fake')
44
45     def test_dirlist_filter(self):
46        """
47        test our dir listing parser
48        """
49        # everyone should have a root dir, and since we're not
50        # currently writing files... it should all be good
51        r = copier.rsync('/', '/', '/')
52
53        listing = [
54          'drwxrwxr-x           0 2007/12/29 12:34:56 071229_USI-EAS229_001_FC1234\n',
55          '-rwxrw-r--      123268 2007/12/29 17:39:31 2038EAAXX.rtf\n',
56          '-rwxrw-r--           6 2007/12/29 15:10:29 New Text Document.txt\n',
57        ]
58
59        result = r.list_filter(listing)
60        self.failUnlessEqual(len(result), 1)
61        self.failUnlessEqual(result[0][-1], '4')
62
63 def suite():
64     return unittest.makeSuite(testCopier,'test')
65
66 if __name__ == "__main__":
67     unittest.main(defaultTest="suite")