Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / test.py @ 85898ca4

History | View | Annotate | Download (3.7 kB)

1 85898ca4 Stavros Sachtouris
# Copyright 2013 GRNET S.A. All rights reserved.
2 c1004a00 Stavros Sachtouris
#
3 c1004a00 Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 c1004a00 Stavros Sachtouris
# without modification, are permitted provided that the following
5 c1004a00 Stavros Sachtouris
# conditions are met:
6 c1004a00 Stavros Sachtouris
#
7 c1004a00 Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 c1004a00 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 c1004a00 Stavros Sachtouris
#      disclaimer.
10 c1004a00 Stavros Sachtouris
#
11 c1004a00 Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 c1004a00 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 c1004a00 Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 c1004a00 Stavros Sachtouris
#      provided with the distribution.
15 c1004a00 Stavros Sachtouris
#
16 c1004a00 Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 c1004a00 Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 c1004a00 Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 c1004a00 Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 c1004a00 Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 c1004a00 Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 c1004a00 Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 c1004a00 Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 c1004a00 Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 c1004a00 Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 c1004a00 Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 c1004a00 Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 c1004a00 Stavros Sachtouris
#
29 c1004a00 Stavros Sachtouris
# The views and conclusions contained in the software and
30 c1004a00 Stavros Sachtouris
# documentation are those of the authors and should not be
31 c1004a00 Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 c1004a00 Stavros Sachtouris
# or implied, of GRNET S.A.
33 c1004a00 Stavros Sachtouris
34 db113224 Stavros Sachtouris
from unittest import makeSuite, TestSuite, TextTestRunner, TestCase
35 db113224 Stavros Sachtouris
from time import sleep
36 85898ca4 Stavros Sachtouris
from inspect import getmembers, isclass
37 c1004a00 Stavros Sachtouris
38 85898ca4 Stavros Sachtouris
from kamaki.clients.astakos.test import Astakos
39 85898ca4 Stavros Sachtouris
from kamaki.clients.cyclades.test import Cyclades
40 85898ca4 Stavros Sachtouris
from kamaki.clients.image.test import Image
41 85898ca4 Stavros Sachtouris
from kamaki.clients.pithos.test import Pithos
42 c1004a00 Stavros Sachtouris
43 c1004a00 Stavros Sachtouris
44 db113224 Stavros Sachtouris
class SilentEvent(TestCase):
45 db113224 Stavros Sachtouris
46 db113224 Stavros Sachtouris
    can_finish = -1
47 db113224 Stavros Sachtouris
48 db113224 Stavros Sachtouris
    def thread_content(self, methodid):
49 db113224 Stavros Sachtouris
        wait = 0.1
50 db113224 Stavros Sachtouris
        while self.can_finish < methodid and wait < 4:
51 db113224 Stavros Sachtouris
            sleep(wait)
52 db113224 Stavros Sachtouris
            wait = 2 * wait
53 03493855 Stavros Sachtouris
        self._value = methodid
54 db113224 Stavros Sachtouris
        self.assertTrue(wait < 4)
55 db113224 Stavros Sachtouris
56 db113224 Stavros Sachtouris
    def setUp(self):
57 db113224 Stavros Sachtouris
        from kamaki.clients import SilentEvent
58 db113224 Stavros Sachtouris
        self.SE = SilentEvent
59 db113224 Stavros Sachtouris
60 03493855 Stavros Sachtouris
    def test_threads(self):
61 db113224 Stavros Sachtouris
        threads = []
62 db113224 Stavros Sachtouris
        for i in range(4):
63 db113224 Stavros Sachtouris
            threads.append(self.SE(self.thread_content, i))
64 db113224 Stavros Sachtouris
65 db113224 Stavros Sachtouris
        for t in threads:
66 db113224 Stavros Sachtouris
            t.start()
67 db113224 Stavros Sachtouris
68 db113224 Stavros Sachtouris
        for i in range(4):
69 db113224 Stavros Sachtouris
            self.assertTrue(threads[i].is_alive())
70 db113224 Stavros Sachtouris
            self.can_finish = i
71 db113224 Stavros Sachtouris
            threads[i].join()
72 db113224 Stavros Sachtouris
            self.assertFalse(threads[i].is_alive())
73 db113224 Stavros Sachtouris
74 db113224 Stavros Sachtouris
75 85898ca4 Stavros Sachtouris
#  TestCase auxiliary methods
76 85898ca4 Stavros Sachtouris
77 85898ca4 Stavros Sachtouris
def runTestCase(cls, test_name, args=[]):
78 85898ca4 Stavros Sachtouris
    suite = TestSuite()
79 85898ca4 Stavros Sachtouris
    if args:
80 85898ca4 Stavros Sachtouris
        suite.addTest(cls('_'.join(['test'] + args)))
81 85898ca4 Stavros Sachtouris
    else:
82 85898ca4 Stavros Sachtouris
        suite.addTest(makeSuite(cls))
83 85898ca4 Stavros Sachtouris
    print('* Test * %s *' % test_name)
84 85898ca4 Stavros Sachtouris
    TextTestRunner(verbosity=2).run(suite)
85 85898ca4 Stavros Sachtouris
86 85898ca4 Stavros Sachtouris
87 85898ca4 Stavros Sachtouris
def _add_value(foo, value):
88 85898ca4 Stavros Sachtouris
    def wrap(self):
89 85898ca4 Stavros Sachtouris
        return foo(self, value)
90 85898ca4 Stavros Sachtouris
    return wrap
91 85898ca4 Stavros Sachtouris
92 85898ca4 Stavros Sachtouris
93 85898ca4 Stavros Sachtouris
def get_test_classes(module=__import__(__name__), name=''):
94 85898ca4 Stavros Sachtouris
    module_stack = [module]
95 85898ca4 Stavros Sachtouris
    while module_stack:
96 85898ca4 Stavros Sachtouris
        module = module_stack[-1]
97 85898ca4 Stavros Sachtouris
        module_stack = module_stack[:-1]
98 85898ca4 Stavros Sachtouris
        for objname, obj in getmembers(module):
99 85898ca4 Stavros Sachtouris
            if (objname == name or not name):
100 85898ca4 Stavros Sachtouris
                if isclass(obj) and objname != 'TestCase' and (
101 85898ca4 Stavros Sachtouris
                        issubclass(obj, TestCase)):
102 85898ca4 Stavros Sachtouris
                    yield (obj, objname)
103 85898ca4 Stavros Sachtouris
104 85898ca4 Stavros Sachtouris
105 c1004a00 Stavros Sachtouris
def main(argv):
106 d86c3c7d Stavros Sachtouris
    found = False
107 c1004a00 Stavros Sachtouris
    for cls, name in get_test_classes(name=argv[1] if len(argv) > 1 else ''):
108 d86c3c7d Stavros Sachtouris
        found = True
109 85898ca4 Stavros Sachtouris
        runTestCase(cls, name, argv[2:])
110 d86c3c7d Stavros Sachtouris
    if not found:
111 d86c3c7d Stavros Sachtouris
        print('Test "%s" not found' % ' '.join(argv[1:]))
112 c1004a00 Stavros Sachtouris
113 c1004a00 Stavros Sachtouris
114 c1004a00 Stavros Sachtouris
if __name__ == '__main__':
115 c1004a00 Stavros Sachtouris
    from sys import argv
116 c1004a00 Stavros Sachtouris
    main(argv)