Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / test / __init__.py @ 419fa6c4

History | View | Annotate | Download (3.6 kB)

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