Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 1 | #-*- coding: utf-8 -*- |
| 2 | |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 3 | import logging |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 4 | import unittest |
| 5 | import yaml |
| 6 | |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 7 | import rsync_url |
| 8 | |
| 9 | |
| 10 | logging.basicConfig(level='INFO') |
| 11 | logger = logging.getLogger('TestRsyncUrl') |
| 12 | |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 13 | |
| 14 | class TestRsyncUrl(unittest.TestCase): |
| 15 | |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 16 | def log_locals(self, url): |
| 17 | if url.match: |
| 18 | logger.info('RE: "{}"'.format(url.match.pattern)) |
| 19 | logger.info('user "{}", host "{}", port "{}", module "{}", ' |
| 20 | 'path "{}"'.format(url.user, url.host, url.port, |
| 21 | url.module, url.path)) |
| 22 | |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 23 | def exact_match_num(self, remote, expected_result): |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 24 | logger.info('"{}" - {}'.format(remote, expected_result)) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 25 | url = rsync_url.RsyncUrl(remote) |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 26 | self.log_locals(url) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 27 | matching_regexps = url._get_all_matching_regexps() |
| 28 | self.assertEqual(len(matching_regexps), expected_result) |
| 29 | |
| 30 | def classed(self, remote, expected_result): |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 31 | logger.info('"{}" - {}'.format(remote, expected_result)) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 32 | url = rsync_url.RsyncUrl(remote) |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 33 | self.log_locals(url) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 34 | self.assertEqual(url.url_type, expected_result) |
| 35 | |
| 36 | def parsed(self, remote, expected_result): |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 37 | logger.info('"{}" - {}'.format(remote, expected_result)) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 38 | url = rsync_url.RsyncUrl(remote) |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 39 | self.log_locals(url) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 40 | self.assertEqual( |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 41 | [url.user, url.host, url.path], |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 42 | expected_result |
| 43 | ) |
| 44 | |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 45 | def parsed_rsync(self, remote, expected_result): |
| 46 | logger.info('"{}" - {}'.format(remote, expected_result)) |
| 47 | url = rsync_url.RsyncUrl(remote) |
| 48 | self.log_locals(url) |
| 49 | self.assertEqual( |
| 50 | [url.user, url.host, url.port, url.module, url.path], |
| 51 | expected_result |
| 52 | ) |
| 53 | |
| 54 | def valid(self, remote, expected_result): |
| 55 | logger.info('"{}" - {}'.format(remote, expected_result)) |
| 56 | url = rsync_url.RsyncUrl(remote) |
| 57 | self.log_locals(url) |
| 58 | self.assertEqual(url.is_valid, expected_result) |
| 59 | |
| 60 | def url(self, remote, expected_result): |
| 61 | logger.info('"{}" - {}'.format(remote, expected_result)) |
| 62 | url = rsync_url.RsyncUrl(remote) |
| 63 | self.log_locals(url) |
| 64 | self.assertEqual(url.url, expected_result) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 65 | |
| 66 | testdata = yaml.load(open('test_rsync_url.yaml')) |
| 67 | |
| 68 | index = 1 |
| 69 | for remote, tests in testdata.items(): |
| 70 | |
| 71 | for test, expected in tests.items(): |
| 72 | |
| 73 | print index, test, expected |
| 74 | |
| 75 | def test_function(self, test=test, |
| 76 | remote=remote, expected_result=expected): |
| 77 | getattr(self, test)(remote, expected_result) |
| 78 | |
| 79 | test_function.__name__ = \ |
Max Rasskazov | 64f77bf | 2015-06-02 15:22:48 +0300 | [diff] [blame^] | 80 | 'test_rsync_url_{}_{}_{}'.format(index, tests['classed'], test) |
Max Rasskazov | a8db7a9 | 2015-05-30 02:23:43 +0300 | [diff] [blame] | 81 | test_function.__doc__ = test_function.__name__ |
| 82 | setattr(TestRsyncUrl, test_function.__name__, test_function) |
| 83 | del test_function |
| 84 | |
| 85 | index += 1 |
| 86 | |
| 87 | |
| 88 | if __name__ == '__main__': |
| 89 | unittest.main() |