Revision 7a3c66e1 kamaki/clients/utils/test.py

b/kamaki/clients/utils/test.py
34 34
#from mock import patch, call
35 35

  
36 36
from unittest import TestCase
37
from tempfile import TemporaryFile
38

  
37 39
from kamaki.clients import utils
38 40

  
39 41

  
......
128 130
            self.assertEqual(utils.path4url(*args), expected)
129 131

  
130 132
    def test_readall(self):
131

  
132
        class fakefile(object):
133

  
134
            responses = ['1', '2', '3', '4', '5', '6', '7']
135
            failures = [False, ] * 7
136

  
137
            def __init__(self):
138
                def _read_gen(self):
139
                    for i, r in enumerate(self.responses):
140
                        if self.failures[i]:
141
                            yield ''
142
                        yield r
143
                self._reader = _read_gen(self)
144

  
145
            def read(self, size=None):
146
                return self._reader.next()
147

  
148
        fileobj = fakefile()
149
        self.assertEqual(
150
            ''.join(fakefile.responses), utils.readall(fileobj, 7))
151
        fileobj = fakefile()
152
        self.assertEqual(
153
            ''.join(fakefile.responses[:4]), utils.readall(fileobj, 4))
154
        fileobj = fakefile()
155
        self.assertRaises(IOError, utils.readall, fileobj, 10)
156
        fileobj = fakefile()
157
        fileobj.failures[1] = True
158
        self.assertRaises(IOError, utils.readall, fileobj, 7)
159
        fileobj = fakefile()
160
        fileobj.failures[1] = True
161
        self.assertEqual(
162
            ''.join(fakefile.responses), utils.readall(fileobj, 7, 8))
133
        tstr = '1234567890'
134
        with TemporaryFile() as f:
135
            f.write(tstr)
136
            f.flush()
137
            f.seek(0)
138
            self.assertEqual(utils.readall(f, 5), tstr[:5])
139
            self.assertEqual(utils.readall(f, 10), tstr[5:])
140
            self.assertEqual(utils.readall(f, 1), '')
141
            self.assertRaises(IOError, utils.readall, f, 1, 0)
163 142

  
164 143
if __name__ == '__main__':
165 144
    from sys import argv

Also available in: Unified diff