Revision 1f0370c9 kamaki/clients/tests/__init__.py

b/kamaki/clients/tests/__init__.py
31 31
# interpreted as representing official policies, either expressed
32 32
# or implied, of GRNET S.A.
33 33

  
34
from unittest import TestCase, TestSuite, makeSuite, TextTestRunner
35
from argparse import ArgumentParser
36

  
34 37
from kamaki.cli.config import Config
35 38

  
36 39

  
......
40 43
    return wrap
41 44

  
42 45

  
43
class configuration(object):
46
class Generic(TestCase):
44 47

  
45 48
    _cnf = None
46
    _client = ''
49
    _grp = None
50
    _fetched = {}
47 51

  
48
    def __init__(self, client='', config_file=None):
52
    def __init__(self, specific=None, config_file=None, group=None):
53
        super(Generic, self).__init__(specific)
49 54
        self._cnf = Config(config_file)
50
        self._client = client
51

  
52
        @property
53
        def generic_property(self, value):
54
            """
55
            :param client: (str) if given, try to get test_client.* and then
56
            client.*
57
            :returns: (str) priorities: test_client, client, test, global
58
            """
59
            if not hasattr(self, '_%s' % value):
60
                _acnt = self._cnf.get('test', '%s_%s' % (self._client, value))\
61
                    or self._cnf.get(self._client, value)\
62
                    or self._cnf.get('test', value)\
63
                    or self._cnf.get('global', value)
64
                if _acnt:
65
                    setattr(self, '_%s' % value, _acnt)
66
            return getattr(self, '_%s' % value, None)
67

  
68
        for foo in ('url', 'token'):
69
            setattr(self, foo, _add_value(generic_property, foo))
55
        self._grp = group
56

  
57
    def __getitem__(self, key):
58
        key = self._key(key)
59
        try:
60
            return self._fetched[key]
61
        except KeyError:
62
            return self._get_from_cnf(key)
63

  
64
    def _key(self, key):
65
        return ('', key) if isinstance(key, str)\
66
            else ('', key[0]) if len(key) == 1\
67
            else key
68

  
69
    def _get_from_cnf(self, key):
70
        val = (self._cnf.get('test', '%s_%s' % key) if key[0] else None)\
71
            or self._cnf.get(*key)\
72
            or self._cnf.get('test', key[1])\
73
            or self._cnf.get('global', key[1])
74
        self._fetched[key] = val
75
        return val
76

  
77

  
78
def init_parser():
79
    parser = ArgumentParser(add_help=False)
80
    parser.add_argument('-h', '--help',
81
        dest='help',
82
        action='store_true',
83
        default=False,
84
        help="Show this help message and exit")
85
    return parser
86

  
87

  
88
def main(argv):
89

  
90
    suiteFew = TestSuite()
91
    """
92
    if len(argv) == 0 or argv[0] == 'pithos':
93
        if len(argv) == 1:
94
            suiteFew.addTest(unittest.makeSuite(testPithos))
95
        else:
96
            suiteFew.addTest(testPithos('test_' + argv[1]))
97
    if len(argv) == 0 or argv[0] == 'cyclades':
98
        if len(argv) == 1:
99
            #suiteFew.addTest(unittest.makeSuite(testCyclades))
100
            suiteFew.addTest(testCyclades('test_000'))
101
        else:
102
            suiteFew.addTest(testCyclades('test_' + argv[1]))
103
    if len(argv) == 0 or argv[0] == 'image':
104
        if len(argv) == 1:
105
            suiteFew.addTest(unittest.makeSuite(testImage))
106
        else:
107
            suiteFew.addTest(testImage('test_' + argv[1]))
108
    """
109
    if len(argv) == 0 or argv[0] == 'astakos':
110
        from kamaki.clients.tests.astakos import Astakos
111
        if len(argv) == 1:
112
            suiteFew.addTest(makeSuite(Astakos))
113
        else:
114
            suiteFew.addTest(Astakos('test_' + argv[1]))
115

  
116
    TextTestRunner(verbosity=2).run(suiteFew)
117

  
118
if __name__ == '__main__':
119
    parser = init_parser()
120
    args, argv = parser.parse_known_args()
121
    if len(argv) > 2 or getattr(args, 'help') or len(argv) < 1:
122
        raise Exception('\tusage: tests.py <group> [command]')
123
    main(argv)

Also available in: Unified diff