Example #1
0
    def setUp(self):
        self.timeout = 10
        self.content = b'aaaa\nbbbb\ncccc\n'

        # TODO(takashi): TemporaryFile may be safer, but causes OS Error in
        #                close in IterLike.__del__
        self.fd, fname = tempfile.mkstemp()
        os.unlink(fname)
        os.write(self.fd, self.content)
        self._reset_fd()
        self.iter_like = FileDescriptorIterator(self.fd, self.timeout, None)
Example #2
0
    def setUp(self):
        self.timeout = 10
        self.content = b'aaaa\nbbbb\ncccc\n'

        # TODO(takashi): TemporaryFile may be safer, but causes OS Error in
        #                close in IterLike.__del__
        self.fd, fname = tempfile.mkstemp()
        os.unlink(fname)
        os.write(self.fd, self.content)
        self._reset_fd()
        self.iter_like = FileDescriptorIterator(
            self.fd, self.timeout, None)
Example #3
0
class TestFileDescriptorIterator(unittest.TestCase):
    def setUp(self):
        self.timeout = 10
        self.content = b'aaaa\nbbbb\ncccc\n'

        # TODO(takashi): TemporaryFile may be safer, but causes OS Error in
        #                close in IterLike.__del__
        self.fd, fname = tempfile.mkstemp()
        os.unlink(fname)
        os.write(self.fd, self.content)
        self._reset_fd()
        self.iter_like = FileDescriptorIterator(self.fd, self.timeout, None)

    def tearDown(self):
        pass

    def _fake_select(self, r, w, x, timeout=0):
        return r, w, x

    def _reset_fd(self):
        os.lseek(self.fd, 0, os.SEEK_SET)

    @contextmanager
    def _mock_select(self):
        # TODO(takashi): This is needed to avoid PermissionError in UT
        with mock.patch('storlets.gateway.common.stob.select.select',
                        self._fake_select):
            yield

    def test_read_with_timeout(self):
        self.assertEqual(b'aaaa\nb', self.iter_like.read_with_timeout(6))
        self.assertEqual(b'bbb\ncc', self.iter_like.read_with_timeout(6))
        self.assertEqual(b'cc\n', self.iter_like.read_with_timeout(6))
        self.assertEqual(b'', self.iter_like.read_with_timeout(6))

    def test_next(self):
        with self._mock_select():
            self.assertEqual(b'aaaa\nb', self.iter_like.next(6))
            self.assertEqual(b'bbb\ncc', self.iter_like.next(6))
            self.assertEqual(b'cc\n', self.iter_like.next(6))
            with self.assertRaises(StopIteration):
                self.iter_like.next(6)
        self._reset_fd()

        with self._mock_select():
            # if size > content length
            self.assertEqual(b'aaaa\nbbbb\ncccc\n', self.iter_like.next(50))
            with self.assertRaises(StopIteration):
                self.iter_like.next(50)

    def test_read(self):
        with self._mock_select():
            self.assertEqual(b'aaaa\nb', self.iter_like.read(6))
            self.assertEqual(b'bbb\ncc', self.iter_like.read(6))
            self.assertEqual(b'cc\n', self.iter_like.read(6))
            with self.assertRaises(StopIteration):
                self.iter_like.next(6)

    def test_readline(self):
        with self._mock_select():
            # if size = -1
            self.assertEqual(b'aaaa\n', self.iter_like.readline())

            # if size < line length
            self.assertEqual(b'bb', self.iter_like.readline(2))

            # read remaining chars in line
            self.assertEqual(b'bb\n', self.iter_like.readline())

            # if size > line length
            self.assertEqual(b'cccc\n', self.iter_like.readline(100))
            with self.assertRaises(StopIteration):
                self.iter_like.readline()

    def test_readlines(self):
        with self._mock_select():
            self.assertEqual([b'aaaa\n', b'bbbb\n', b'cccc\n'],
                             self.iter_like.readlines())
        self._reset_fd()

        with self._mock_select():
            self.assertEqual([b'aaaa\n', b'bb'], self.iter_like.readlines(7))
Example #4
0
class TestFileDescriptorIterator(unittest.TestCase):

    def setUp(self):
        self.timeout = 10
        self.content = b'aaaa\nbbbb\ncccc\n'

        # TODO(takashi): TemporaryFile may be safer, but causes OS Error in
        #                close in IterLike.__del__
        self.fd, fname = tempfile.mkstemp()
        os.unlink(fname)
        os.write(self.fd, self.content)
        self._reset_fd()
        self.iter_like = FileDescriptorIterator(
            self.fd, self.timeout, None)

    def tearDown(self):
        pass

    def _fake_select(self, r, w, x, timeout=0):
        return r, w, x

    def _reset_fd(self):
        os.lseek(self.fd, 0, os.SEEK_SET)

    @contextmanager
    def _mock_select(self):
        # TODO(takashi): This is needed to avoid PermissionError in UT
        with mock.patch('storlets.gateway.common.stob.select.select',
                        self._fake_select):
            yield

    def test_read_with_timeout(self):
        self.assertEqual(
            self.iter_like.read_with_timeout(6), b'aaaa\nb')
        self.assertEqual(
            self.iter_like.read_with_timeout(6), b'bbb\ncc')
        self.assertEqual(
            self.iter_like.read_with_timeout(6), b'cc\n')
        self.assertEqual(
            self.iter_like.read_with_timeout(6), b'')

    def test_next(self):
        with self._mock_select():
            self.assertEqual(self.iter_like.next(6), b'aaaa\nb')
            self.assertEqual(self.iter_like.next(6), b'bbb\ncc')
            self.assertEqual(self.iter_like.next(6), b'cc\n')
            with self.assertRaises(StopIteration):
                self.iter_like.next(6)
        self._reset_fd()

        with self._mock_select():
            # if size > content length
            self.assertEqual(self.iter_like.next(50),
                             b'aaaa\nbbbb\ncccc\n')
            with self.assertRaises(StopIteration):
                self.iter_like.next(50)

    def test_read(self):
        with self._mock_select():
            self.assertEqual(self.iter_like.read(6), b'aaaa\nb')
            self.assertEqual(self.iter_like.read(6), b'bbb\ncc')
            self.assertEqual(self.iter_like.read(6), b'cc\n')
            with self.assertRaises(StopIteration):
                self.iter_like.next(6)

    def test_readline(self):
        with self._mock_select():
            # if size = -1
            self.assertEqual(self.iter_like.readline(), b'aaaa\n')

            # if size < line length
            self.assertEqual(self.iter_like.readline(2), b'bb')

            # read remaining chars in line
            self.assertEqual(self.iter_like.readline(), b'bb\n')

            # if size > line length
            self.assertEqual(self.iter_like.readline(100), b'cccc\n')
            with self.assertRaises(StopIteration):
                self.iter_like.readline()

    def test_readlines(self):
        with self._mock_select():
            self.assertEqual(
                self.iter_like.readlines(),
                [b'aaaa\n', b'bbbb\n', b'cccc\n'])
        self._reset_fd()

        with self._mock_select():
            self.assertEqual(
                self.iter_like.readlines(7),
                [b'aaaa\n', b'bb'])