Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / test.py @ d8c7cccc

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 c608d6e9 Stavros Sachtouris
from kamaki.clients.storage.test import Storage
42 85898ca4 Stavros Sachtouris
from kamaki.clients.pithos.test import Pithos
43 c1004a00 Stavros Sachtouris
44 c1004a00 Stavros Sachtouris
45 db113224 Stavros Sachtouris
class SilentEvent(TestCase):
46 db113224 Stavros Sachtouris
47 db113224 Stavros Sachtouris
    can_finish = -1
48 db113224 Stavros Sachtouris
49 db113224 Stavros Sachtouris
    def thread_content(self, methodid):
50 db113224 Stavros Sachtouris
        wait = 0.1
51 db113224 Stavros Sachtouris
        while self.can_finish < methodid and wait < 4:
52 db113224 Stavros Sachtouris
            sleep(wait)
53 db113224 Stavros Sachtouris
            wait = 2 * wait
54 03493855 Stavros Sachtouris
        self._value = methodid
55 db113224 Stavros Sachtouris
        self.assertTrue(wait < 4)
56 db113224 Stavros Sachtouris
57 db113224 Stavros Sachtouris
    def setUp(self):
58 db113224 Stavros Sachtouris
        from kamaki.clients import SilentEvent
59 db113224 Stavros Sachtouris
        self.SE = SilentEvent
60 db113224 Stavros Sachtouris
61 03493855 Stavros Sachtouris
    def test_threads(self):
62 db113224 Stavros Sachtouris
        threads = []
63 db113224 Stavros Sachtouris
        for i in range(4):
64 db113224 Stavros Sachtouris
            threads.append(self.SE(self.thread_content, i))
65 db113224 Stavros Sachtouris
66 db113224 Stavros Sachtouris
        for t in threads:
67 db113224 Stavros Sachtouris
            t.start()
68 db113224 Stavros Sachtouris
69 db113224 Stavros Sachtouris
        for i in range(4):
70 db113224 Stavros Sachtouris
            self.assertTrue(threads[i].is_alive())
71 db113224 Stavros Sachtouris
            self.can_finish = i
72 db113224 Stavros Sachtouris
            threads[i].join()
73 db113224 Stavros Sachtouris
            self.assertFalse(threads[i].is_alive())
74 db113224 Stavros Sachtouris
75 db113224 Stavros Sachtouris
76 85898ca4 Stavros Sachtouris
#  TestCase auxiliary methods
77 85898ca4 Stavros Sachtouris
78 85898ca4 Stavros Sachtouris
def runTestCase(cls, test_name, args=[]):
79 85898ca4 Stavros Sachtouris
    suite = TestSuite()
80 85898ca4 Stavros Sachtouris
    if args:
81 85898ca4 Stavros Sachtouris
        suite.addTest(cls('_'.join(['test'] + args)))
82 85898ca4 Stavros Sachtouris
    else:
83 85898ca4 Stavros Sachtouris
        suite.addTest(makeSuite(cls))
84 85898ca4 Stavros Sachtouris
    print('* Test * %s *' % test_name)
85 85898ca4 Stavros Sachtouris
    TextTestRunner(verbosity=2).run(suite)
86 85898ca4 Stavros Sachtouris
87 85898ca4 Stavros Sachtouris
88 85898ca4 Stavros Sachtouris
def _add_value(foo, value):
89 85898ca4 Stavros Sachtouris
    def wrap(self):
90 85898ca4 Stavros Sachtouris
        return foo(self, value)
91 85898ca4 Stavros Sachtouris
    return wrap
92 85898ca4 Stavros Sachtouris
93 85898ca4 Stavros Sachtouris
94 85898ca4 Stavros Sachtouris
def get_test_classes(module=__import__(__name__), name=''):
95 85898ca4 Stavros Sachtouris
    module_stack = [module]
96 85898ca4 Stavros Sachtouris
    while module_stack:
97 85898ca4 Stavros Sachtouris
        module = module_stack[-1]
98 85898ca4 Stavros Sachtouris
        module_stack = module_stack[:-1]
99 85898ca4 Stavros Sachtouris
        for objname, obj in getmembers(module):
100 85898ca4 Stavros Sachtouris
            if (objname == name or not name):
101 85898ca4 Stavros Sachtouris
                if isclass(obj) and objname != 'TestCase' and (
102 85898ca4 Stavros Sachtouris
                        issubclass(obj, TestCase)):
103 85898ca4 Stavros Sachtouris
                    yield (obj, objname)
104 85898ca4 Stavros Sachtouris
105 85898ca4 Stavros Sachtouris
106 c1004a00 Stavros Sachtouris
def main(argv):
107 d86c3c7d Stavros Sachtouris
    found = False
108 c1004a00 Stavros Sachtouris
    for cls, name in get_test_classes(name=argv[1] if len(argv) > 1 else ''):
109 d86c3c7d Stavros Sachtouris
        found = True
110 85898ca4 Stavros Sachtouris
        runTestCase(cls, name, argv[2:])
111 d86c3c7d Stavros Sachtouris
    if not found:
112 d86c3c7d Stavros Sachtouris
        print('Test "%s" not found' % ' '.join(argv[1:]))
113 c1004a00 Stavros Sachtouris
114 c1004a00 Stavros Sachtouris
115 c1004a00 Stavros Sachtouris
if __name__ == '__main__':
116 c1004a00 Stavros Sachtouris
    from sys import argv
117 c1004a00 Stavros Sachtouris
    main(argv)