Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / test.py @ 6695edc9

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