import unittest2
import mock

import mitogen.core

import testlib


class ReceiveOneTest(testlib.TestCase):
    klass = mitogen.core.Stream

    def test_corruption(self):
        broker = mock.Mock()
        router = mock.Mock()

        stream = self.klass(router, 1)
        junk = mitogen.core.b('x') * stream.HEADER_LEN
        stream._input_buf = [junk]
        stream._input_buf_len = len(junk)

        capture = testlib.LogCapturer()
        capture.start()
        ret = stream._receive_one(broker)
        #self.assertEquals(1, broker.stop_receive.mock_calls)
        capture.stop()

        self.assertFalse(ret)
        self.assertTrue((self.klass.corrupt_msg % (junk,)) in capture.raw())


if __name__ == '__main__':
    unittest2.main()