Ejemplo n.º 1
0
    async def test_unsubscribe(self):
        r = roost.Roost(mocks.Context())
        r.subunify = True

        w = Mock()
        w.read_string.return_value = mocks.promise('a')

        r.r.unsubscribe = Mock(return_value=mocks.promise())

        await r.unsubscribe(w)

        r.r.unsubscribe.assert_called_with([
            ('a', '*', ''),
            ('a.d', '*', ''),
            ('a.d.d', '*', ''),
            ('a.d.d.d', '*', ''),
            ('una', '*', ''),
            ('una.d', '*', ''),
            ('una.d.d', '*', ''),
            ('una.d.d.d', '*', ''),
            ('ununa', '*', ''),
            ('ununa.d', '*', ''),
            ('ununa.d.d', '*', ''),
            ('ununa.d.d.d', '*', ''),
            ('unununa', '*', ''),
            ('unununa.d', '*', ''),
            ('unununa.d.d', '*', ''),
            ('unununa.d.d.d', '*', ''),
            ])
Ejemplo n.º 2
0
 def test(self):
     f = MockPromise()
     m = roost.RoostRegistrationMessage(
         roost.Roost(context.Context()), 'foo', f)
     self.assertFalse(f.set)
     m.forward_the_future()
     self.assertTrue(f.set)
Ejemplo n.º 3
0
    async def test_error_message(self):
        r = roost.Roost(mocks.Context())

        async def raises():
            raise Exception('foo')

        r.add_message = Mock()
        await r.error_message('activity', raises)
        m = r.add_message.call_args[0][0]
        self.assertEqual('activity: foo', m.body.splitlines()[0])
Ejemplo n.º 4
0
    async def test_new_message(self):
        r = roost.Roost(mocks.Context())

        o = object()
        r.construct_and_maybe_decrypt = Mock(return_value=mocks.promise(o))
        r.add_message = Mock()

        await r.new_message({})
        r.construct_and_maybe_decrypt.assert_called_with({})
        r.add_message.assert_called_with(o)
Ejemplo n.º 5
0
    async def test_subscribe_fie(self):
        r = roost.Roost(mocks.Context())

        w = Mock()
        w.read_filename.return_value = mocks.promise('filename')

        r.load_subs = Mock(return_value=mocks.promise())

        with patch('os.path.exists', return_value=False):
            await r.subscribe_file(w)

        r.load_subs.assert_called_with('filename')
Ejemplo n.º 6
0
    async def test_dump_subscriptions(self):
        r = roost.Roost(mocks.Context())

        r.r.subscriptions = Mock(return_value=mocks.promise([{
            'class': 'class',
            'instance': 'instance',
            'recipient': '',
            }]))
        w = Mock()

        await r.dump_subscriptions(w)
        w.show.assert_called_with('class instance *')
Ejemplo n.º 7
0
    async def test_reconnect(self):
        r = roost.Roost(mocks.Context())

        r.new_task = Mock()
        r.new_task.is_done.return_value = False

        r.disconnect = Mock(return_value=mocks.promise())
        r.start = Mock(return_value=mocks.promise())

        await r.reconnect()

        r.disconnect.assert_called()
        r.start.assert_called()
Ejemplo n.º 8
0
    async def test_disconnect(self):
        cancelled = False

        class Tusk:
            def cancel(self):
                nonlocal cancelled
                cancelled = True

            def __await__(self):
                yield ('sleep',)

        r = roost.Roost(mocks.Context())
        r.new_task = Tusk()
        r.tasks.append(r.new_task)
        await r.disconnect()
        self.assertTrue(cancelled)
Ejemplo n.º 9
0
    async def test_load_subs(self):
        r = roost.Roost(mocks.Context())

        r.r.subscribe = Mock(return_value=mocks.promise())

        with patch('os.path.exists', return_value=False), \
                patch('snipe.roost.open', return_value=io.StringIO(
                    'class,instance,*\n')) as o:
            await r.load_subs('foo')
            o.assert_not_called()

        with patch('os.path.exists', return_value=True), \
                patch('snipe.roost.open', return_value=io.StringIO(
                    'class,instance,@ATHENA.MIT.EDU\n')):
            await r.load_subs('foo')
        r.r.subscribe.assert_called_with([['class', 'instance', '*']])
Ejemplo n.º 10
0
    def test_add_message(self):
        r = roost.Roost(mocks.Context())

        r.drop_cache = Mock()
        r.redisplay = Mock()

        m = messages.SnipeMessage(r, 'foo', 1.0)
        r.add_message(m)

        r.drop_cache.assert_called()
        r.redisplay.assert_called_with(m, m)

        m = messages.SnipeMessage(r, 'bar', 1.0)
        r.add_message(m)

        self.assertEqual(2, len(r.messages))
        self.assertEqual(1.00001, r.messages[-1].time)
Ejemplo n.º 11
0
    def test(self):
        m = roost.RoostMessage(
            roost.Roost(context.Context()), {
                'message': 'foo',
                'receiveTime': 0.0,
                'sender': '*****@*****.**',
                'class': 'MESSAGE',
                'instance': 'white-magic',
                'recipient': '',
                'opcode': 'stark',
                'signature': 'Tim The Beaver',
                'time': 0.0,
            })
        os.environ['TZ'] = 'GMT'

        self.assertEqual(
            str(m),
            'Class: MESSAGE Instance: white-magic Recipient:  [stark]\n'
            'From: Tim The Beaver <roost; tim> at Thu Jan  1 00:00:00 1970\n'
            'foo\n\n')
        self.assertEqual(
            repr(m),
            '<RoostMessage 0.0 <RoostPrincipal roost [email protected]>'
            ' 3 chars>')
Ejemplo n.º 12
0
 def test(self):
     r = roost.Roost(context.Context())
     p = roost.RoostPrincipal(r, 'foo@X' + r.realm)
     self.assertEqual(str(p), 'roost; foo@X' + r.realm)
     p = roost.RoostPrincipal(r, 'foo@' + r.realm)
     self.assertEqual(str(p), 'roost; foo')
Ejemplo n.º 13
0
    async def test_send(self):
        r = roost.Roost(mocks.Context())

        r.r.send = Mock(return_value=mocks.promise())
        await r.send('-c class -i instance -s sig -O opcode', 'body')

        self.assertEqual(
            r.r.send.call_args[0][0],
            {
                'class': 'class',
                'instance': 'instance',
                'recipient': '',
                'opcode': 'opcode',
                'signature': 'sig',
                'message': 'body',
            })

        r.r.send = Mock(return_value=mocks.promise())
        await r.send('-c class -R -s sig recipient', 'body')

        self.assertEqual(
            r.r.send.call_args[0][0],
            {
                'class': 'class',
                'instance': 'PERSONAL',
                'recipient': 'recipient',
                'opcode': '',
                'signature': 'sig',
                'message': 'obql',
            })

        r.r.send = Mock(return_value=mocks.promise())
        with self.assertRaises(RuntimeError):
            await r.send('-c class -s sig -C r1 r2', 'body')

        self.assertEqual(
            r.r.send.call_args[0][0],
            {
                'class': 'class',
                'instance': 'PERSONAL',
                'recipient': 'r2',
                'opcode': '',
                'signature': 'sig',
                'message': 'CC: r1 r2\nbody',
            })

        with patch(
                'snipe.imbroglio.process_filter',
                return_value=mocks.promise((0, 'foo'))):
            r.r.send = Mock(return_value=mocks.promise())
            await r.send('-c class -x -s sig recipient', 'body')

            self.assertEqual(
                {
                    'class': 'class',
                    'instance': 'PERSONAL',
                    'recipient': 'recipient',
                    'opcode': 'crypt',
                    'signature': 'sig',
                    'message': 'foo',
                }, r.r.send.call_args[0][0])

        with patch(
                'snipe.imbroglio.process_filter',
                return_value=mocks.promise((1, 'foo'))), \
                self.assertRaises(Exception):
            r.r.send = Mock(return_value=mocks.promise())
            await r.send('-c class -x -s sig recipient', 'body')
Ejemplo n.º 14
0
    def test(self):
        m = roost.RoostMessage(
            roost.Roost(context.Context()), {
                'message': 'foo',
                'receiveTime': 0.0,
                'sender': '*****@*****.**',
                'class': 'MESSAGE',
                'instance': 'white-magic',
                'recipient': '',
                'opcode': 'stark',
                'signature': 'Tim The Beaver',
                'time': 0.0,
                })
        os.environ['TZ'] = 'GMT'

        self.assertEqual(
            str(m),
            'Class: MESSAGE Instance: white-magic Recipient:  [stark]\n'
            'From: Tim The Beaver <roost; tim> at Thu Jan  1 00:00:00 1970\n'
            'foo\n\n')
        self.assertEqual(
            repr(m),
            '<RoostMessage 0.0 <RoostPrincipal roost [email protected]>'
            ' 3 chars>')

        self.assertEqual(
            m.canon('sender', 'foo@X' + m.backend.realm),
            'foo@X' + m.backend.realm)
        self.assertEqual(
            m.canon('sender', 'foo@' + m.backend.realm),
            'foo')

        self.assertEqual(m.canon('class', 'foo'), 'foo')
        self.assertEqual(m.canon('class', 'ununfoo.d.d'), 'foo')
        self.assertEqual(m.canon('class', 'foo'), 'foo')
        self.assertEqual(m.canon('class', 'unfoo'), 'foo')

        self.assertEqual(m.canon('instance', 'foo'), 'foo')
        self.assertEqual(m.canon('instance', 'foo'), 'foo')

        self.assertEqual(m.canon('opcode', 'foo'), 'foo')
        self.assertEqual(m.canon('opcode', ' foo'), 'foo')
        self.assertEqual(m.canon('opcode', 'foo'), 'foo')

        self.assertEqual(m.reply(), 'roost; tim')

        m.data['recipient'] = 'foo'

        self.assertEqual(m.reply(), 'roost; -i white-magic tim')

        m.data['class'] = 'white-magic'

        self.assertEqual(m.reply(), 'roost; -c white-magic -i white-magic tim')

        m.outgoing = True

        self.assertEqual(m.reply(), 'roost; -c white-magic -i white-magic foo')

        m.transformed = 'rot13'

        self.assertEqual(
            m.reply(), 'roost; -R -c white-magic -i white-magic foo')

        self.assertEqual(
            m.followup(), 'roost; -R -c white-magic -i white-magic foo')

        m.body = 'CC: foo bar baz\nquux'

        self.assertEqual(
            m.followup(),
            'roost; -R -c white-magic -i white-magic -C bar baz foo tim')

        m.transformed = 'zcrypt'
        m.data['recipient'] = ''

        self.assertEqual(
            m.followup(), 'roost; -x -c white-magic -i white-magic')

        m.data['recipient'] = '@FOO'

        self.assertEqual(
            m.followup(), 'roost; -x -c white-magic -i white-magic @FOO')

        self.assertEqual(
            str(m.filter(0)), 'backend == "roost" and class = "white-magic"')
        self.assertEqual(
            str(m.filter(1)),
            'backend == "roost" and class = "white-magic"'
            ' and instance = "white-magic"')
        self.assertEqual(
            str(m.filter(2)),
            'backend == "roost" and class = "white-magic"'
            ' and instance = "white-magic" and sender = "roost; tim"')

        m.data['recipient'] = 'foo'
        m.personal = True

        self.assertEqual(
            str(m.filter(0)),
            'backend == "roost" and personal'
            ' and (sender = "roost; tim" or recipient = "tim")')

        m.backend.r.principal = str(m._sender)
        self.assertEqual(
            str(m.filter(0)),
            'backend == "roost" and personal'
            ' and (sender = "roost; foo" or recipient = "foo")')
Ejemplo n.º 15
0
    async def test_construct_and_maybe_decrypt(self):
        r = roost.Roost(mocks.Context())

        self.assertEqual(0, len(r._destinations))
        self.assertEqual(0, len(r._senders))

        m = await r.construct_and_maybe_decrypt({
                'message': 'body',
                'receiveTime': 0.0,
                'sender': 'sender',
                'class': 'class',
                'instance': 'instance',
                'recipient': '',
                'opcode': '',
                'signature': 'sig',
                'time': 0.0,
                })

        self.assertEqual('body', m.body)
        self.assertEqual(2, len(r._destinations))
        self.assertEqual(1, len(r._senders))

        with patch(
                'snipe.imbroglio.process_filter',
                return_value=mocks.promise((0, 'foo\n**END**\n'))):
            m = await r.construct_and_maybe_decrypt({
                    'message': 'body',
                    'receiveTime': 0.0,
                    'sender': 'sender',
                    'class': 'class',
                    'instance': 'instance',
                    'recipient': '',
                    'opcode': 'crypt',
                    'signature': 'sig',
                    'time': 0.0,
                    })
            self.assertEqual('zcrypt', m.transformed)
            self.assertEqual('foo\n', m.body)

        with patch(
                'snipe.imbroglio.process_filter',
                return_value=mocks.promise((1, 'foo\n**END**\n'))), \
                self.assertLogs() as l:
            m = await r.construct_and_maybe_decrypt({
                    'message': 'body',
                    'receiveTime': 0.0,
                    'sender': 'sender',
                    'class': 'class',
                    'instance': 'instance',
                    'recipient': '',
                    'opcode': 'crypt',
                    'signature': 'sig',
                    'time': 0.0,
                    })
        (m,) = l.output
        self.assertRegex(
            m,
            r'ERROR:Roost.[0-9a-f]+:roost: zcrypt -D -c class returned 1')

        with patch(
                'snipe.imbroglio.process_filter',
                return_value=mocks.promise(exception=Exception)), \
                self.assertLogs() as l:
            m = await r.construct_and_maybe_decrypt({
                    'message': 'body',
                    'receiveTime': 0.0,
                    'sender': 'sender',
                    'class': 'class',
                    'instance': 'instance',
                    'recipient': '',
                    'opcode': 'crypt',
                    'signature': 'sig',
                    'time': 0.0,
                    })
        (m,) = l.output
        m = m.splitlines()[0]
        self.assertRegex(
            m,
            'ERROR:Roost.[0-9a-f]+:zcrypt, decrypting')