Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / utils / test.py @ c6ebe715

History | View | Annotate | Download (6.2 kB)

1 480585cd Stavros Sachtouris
# Copyright 2013 GRNET S.A. All rights reserved.
2 480585cd Stavros Sachtouris
#
3 480585cd Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 480585cd Stavros Sachtouris
# without modification, are permitted provided that the following
5 480585cd Stavros Sachtouris
# conditions are met:
6 480585cd Stavros Sachtouris
#
7 480585cd Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 480585cd Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 480585cd Stavros Sachtouris
#      disclaimer.
10 480585cd Stavros Sachtouris
#
11 480585cd Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 480585cd Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 480585cd Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 480585cd Stavros Sachtouris
#      provided with the distribution.
15 480585cd Stavros Sachtouris
#
16 480585cd Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 480585cd Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 480585cd Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 480585cd Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 480585cd Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 480585cd Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 480585cd Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 480585cd Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 480585cd Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 480585cd Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 480585cd Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 480585cd Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 480585cd Stavros Sachtouris
#
29 480585cd Stavros Sachtouris
# The views and conclusions contained in the software and
30 480585cd Stavros Sachtouris
# documentation are those of the authors and should not be
31 480585cd Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 480585cd Stavros Sachtouris
# or implied, of GRNET S.A.
33 480585cd Stavros Sachtouris
34 480585cd Stavros Sachtouris
#from mock import patch, call
35 480585cd Stavros Sachtouris
36 480585cd Stavros Sachtouris
from unittest import TestCase
37 480585cd Stavros Sachtouris
from kamaki.clients import utils
38 480585cd Stavros Sachtouris
39 480585cd Stavros Sachtouris
40 480585cd Stavros Sachtouris
def _try(assertfoo, foo, *args):
41 480585cd Stavros Sachtouris
    try:
42 480585cd Stavros Sachtouris
        return assertfoo(foo(*args))
43 480585cd Stavros Sachtouris
    except AssertionError:
44 480585cd Stavros Sachtouris
        argstr = '( '
45 480585cd Stavros Sachtouris
        for arg in args:
46 480585cd Stavros Sachtouris
            argstr += '"%s" ' % arg
47 480585cd Stavros Sachtouris
        argstr += ')'
48 480585cd Stavros Sachtouris
        print('::: Method %s failed with args %s' % (foo, argstr))
49 480585cd Stavros Sachtouris
        raise
50 480585cd Stavros Sachtouris
51 480585cd Stavros Sachtouris
filter_examples = [
52 480585cd Stavros Sachtouris
    ('', dict(), dict(), dict()),
53 480585cd Stavros Sachtouris
    (
54 480585cd Stavros Sachtouris
        'key',
55 480585cd Stavros Sachtouris
        dict(key1='v1', key2='v2', v=dict(key='v'), val1='k1', val2='k2'),
56 480585cd Stavros Sachtouris
        dict(key1='v1', key2='v2'),
57 480585cd Stavros Sachtouris
        dict(v=dict(key='v'), val1='k1', val2='k2')),
58 480585cd Stavros Sachtouris
    (
59 480585cd Stavros Sachtouris
        'val',
60 480585cd Stavros Sachtouris
        dict(key1='v1', key2='v2', val=dict(key='v'), val1='k1', val2='k2'),
61 480585cd Stavros Sachtouris
        dict(val1='k1', val2='k2', val=dict(key='v')),
62 480585cd Stavros Sachtouris
        dict(key1='v1', key2='v2')),
63 480585cd Stavros Sachtouris
    (
64 480585cd Stavros Sachtouris
        'kv',
65 480585cd Stavros Sachtouris
        dict(kvm='in', mkv='out', kv=''),
66 480585cd Stavros Sachtouris
        dict(kvm='in', kv=''),
67 480585cd Stavros Sachtouris
        dict(mkv='out'))]
68 480585cd Stavros Sachtouris
69 480585cd Stavros Sachtouris
70 480585cd Stavros Sachtouris
class Utils(TestCase):
71 480585cd Stavros Sachtouris
72 480585cd Stavros Sachtouris
    def assert_dicts_are_equal(self, d1, d2):
73 480585cd Stavros Sachtouris
        for k, v in d1.items():
74 480585cd Stavros Sachtouris
            self.assertTrue(k in d2)
75 480585cd Stavros Sachtouris
            if isinstance(v, dict):
76 480585cd Stavros Sachtouris
                self.assert_dicts_are_equal(v, d2[k])
77 480585cd Stavros Sachtouris
            else:
78 480585cd Stavros Sachtouris
                self.assertEqual(unicode(v), unicode(d2[k]))
79 480585cd Stavros Sachtouris
80 480585cd Stavros Sachtouris
    def test__matches(self):
81 480585cd Stavros Sachtouris
        for args in (
82 480585cd Stavros Sachtouris
                ('example', 'example'), ('example', 'example', True),
83 480585cd Stavros Sachtouris
                ('example', 'example', False), ('example0', 'example', False),
84 480585cd Stavros Sachtouris
                ('example', '', False), ('', ''),
85 480585cd Stavros Sachtouris
                ('', '', True), ('', '', False)):
86 480585cd Stavros Sachtouris
            _try(self.assertTrue, utils._matches, *args)
87 480585cd Stavros Sachtouris
        for args in (
88 480585cd Stavros Sachtouris
                ('', 'example'), ('example', ''),
89 480585cd Stavros Sachtouris
                ('example', 'example0'), ('example0', 'example'),
90 480585cd Stavros Sachtouris
                ('example', 'example0', True), ('example', 'example0', False),
91 480585cd Stavros Sachtouris
                ('example0', 'example'), ('example0', 'example', True)):
92 480585cd Stavros Sachtouris
            _try(self.assertFalse, utils._matches, *args)
93 480585cd Stavros Sachtouris
94 480585cd Stavros Sachtouris
    def test_filter_out(self):
95 480585cd Stavros Sachtouris
        for key, src, exp_in, exp_out in filter_examples:
96 480585cd Stavros Sachtouris
            r = utils.filter_out(src, key)
97 480585cd Stavros Sachtouris
            self.assert_dicts_are_equal(r, exp_out)
98 480585cd Stavros Sachtouris
            for k in exp_in:
99 480585cd Stavros Sachtouris
                self.assertFalse(k in r)
100 480585cd Stavros Sachtouris
            r = utils.filter_out(src, key, True)
101 480585cd Stavros Sachtouris
            if key in src:
102 480585cd Stavros Sachtouris
                expected = dict(src)
103 480585cd Stavros Sachtouris
                expected.pop(key)
104 480585cd Stavros Sachtouris
                self.assert_dicts_are_equal(r, expected)
105 480585cd Stavros Sachtouris
            else:
106 480585cd Stavros Sachtouris
                self.assert_dicts_are_equal(r, src)
107 480585cd Stavros Sachtouris
108 480585cd Stavros Sachtouris
    def test_filter_in(self):
109 480585cd Stavros Sachtouris
        for key, src, exp_in, exp_out in filter_examples:
110 480585cd Stavros Sachtouris
            r = utils.filter_in(src, key)
111 480585cd Stavros Sachtouris
            self.assert_dicts_are_equal(r, exp_in)
112 480585cd Stavros Sachtouris
            for k in exp_out:
113 480585cd Stavros Sachtouris
                self.assertFalse(k in r)
114 480585cd Stavros Sachtouris
            r = utils.filter_in(src, key, True)
115 480585cd Stavros Sachtouris
            if key in src:
116 480585cd Stavros Sachtouris
                self.assert_dicts_are_equal(r, {key: src[key]})
117 480585cd Stavros Sachtouris
            else:
118 480585cd Stavros Sachtouris
                self.assert_dicts_are_equal(r, dict())
119 480585cd Stavros Sachtouris
120 23f0f6da Stavros Sachtouris
    def test_path4url(self):
121 23f0f6da Stavros Sachtouris
        utf = u'\u03a6\u03bf\u03cd\u03c4\u03c3\u03bf\u03c2'.encode('utf-8')
122 23f0f6da Stavros Sachtouris
        for expected, args in (
123 23f0f6da Stavros Sachtouris
                ('', ('')),
124 23f0f6da Stavros Sachtouris
                ('/path1/path2', ('path1', 'path2')),
125 23f0f6da Stavros Sachtouris
                ('/1/number/0.28', (1, 'number', 0.28)),
126 23f0f6da Stavros Sachtouris
                ('/1/n/u/m/b/er/X', ('//1//', '//n//u///m////b/er/', 'X//')),
127 23f0f6da Stavros Sachtouris
                ('/p1/%s/p2' % utf.decode('utf-8'), ('p1', utf, 'p2'))):
128 23f0f6da Stavros Sachtouris
            self.assertEqual(utils.path4url(*args), expected)
129 23f0f6da Stavros Sachtouris
130 3ddb2ade Stavros Sachtouris
    def test_readall(self):
131 3ddb2ade Stavros Sachtouris
132 3ddb2ade Stavros Sachtouris
        class fakefile(object):
133 3ddb2ade Stavros Sachtouris
134 3ddb2ade Stavros Sachtouris
            responses = ['1', '2', '3', '4', '5', '6', '7']
135 3ddb2ade Stavros Sachtouris
            failures = [False, ] * 7
136 3ddb2ade Stavros Sachtouris
137 3ddb2ade Stavros Sachtouris
            def __init__(self):
138 3ddb2ade Stavros Sachtouris
                def _read_gen(self):
139 3ddb2ade Stavros Sachtouris
                    for i, r in enumerate(self.responses):
140 3ddb2ade Stavros Sachtouris
                        if self.failures[i]:
141 3ddb2ade Stavros Sachtouris
                            yield ''
142 3ddb2ade Stavros Sachtouris
                        yield r
143 3ddb2ade Stavros Sachtouris
                self._reader = _read_gen(self)
144 3ddb2ade Stavros Sachtouris
145 3ddb2ade Stavros Sachtouris
            def read(self, size=None):
146 3ddb2ade Stavros Sachtouris
                return self._reader.next()
147 3ddb2ade Stavros Sachtouris
148 3ddb2ade Stavros Sachtouris
        fileobj = fakefile()
149 3ddb2ade Stavros Sachtouris
        self.assertEqual(
150 3ddb2ade Stavros Sachtouris
            ''.join(fakefile.responses), utils.readall(fileobj, 7))
151 3ddb2ade Stavros Sachtouris
        fileobj = fakefile()
152 3ddb2ade Stavros Sachtouris
        self.assertEqual(
153 3ddb2ade Stavros Sachtouris
            ''.join(fakefile.responses[:4]), utils.readall(fileobj, 4))
154 3ddb2ade Stavros Sachtouris
        fileobj = fakefile()
155 3ddb2ade Stavros Sachtouris
        self.assertRaises(IOError, utils.readall, fileobj, 10)
156 3ddb2ade Stavros Sachtouris
        fileobj = fakefile()
157 3ddb2ade Stavros Sachtouris
        fileobj.failures[1] = True
158 3ddb2ade Stavros Sachtouris
        self.assertRaises(IOError, utils.readall, fileobj, 7)
159 3ddb2ade Stavros Sachtouris
        fileobj = fakefile()
160 3ddb2ade Stavros Sachtouris
        fileobj.failures[1] = True
161 3ddb2ade Stavros Sachtouris
        self.assertEqual(
162 3ddb2ade Stavros Sachtouris
            ''.join(fakefile.responses), utils.readall(fileobj, 7, 8))
163 480585cd Stavros Sachtouris
164 480585cd Stavros Sachtouris
if __name__ == '__main__':
165 480585cd Stavros Sachtouris
    from sys import argv
166 480585cd Stavros Sachtouris
    from kamaki.clients.test import runTestCase
167 480585cd Stavros Sachtouris
    runTestCase(Utils, 'clients.utils methods', argv[1:])