def test_exception_from_message(self):
        session = protocol.BaseSession()

        @wamp.error(u"com.myapp.error1")
        class AppError1(Exception):
            pass

        @wamp.error(u"com.myapp.error2")
        class AppError2(Exception):
            pass

        session.define(AppError1)
        session.define(AppError2)

        # map defined errors to user exceptions
        emsg = message.Error(message.Call.MESSAGE_TYPE, 123456,
                             u'com.myapp.error1')
        exc = session._exception_from_message(emsg)
        self.assertIsInstance(exc, AppError1)
        self.assertEqual(exc.args, ())

        emsg = message.Error(message.Call.MESSAGE_TYPE, 123456,
                             u'com.myapp.error2')
        exc = session._exception_from_message(emsg)
        self.assertIsInstance(exc, AppError2)
        self.assertEqual(exc.args, ())

        # map undefined error to (generic) exception
        emsg = message.Error(message.Call.MESSAGE_TYPE, 123456,
                             u'com.myapp.error3')
        exc = session._exception_from_message(emsg)
        self.assertIsInstance(exc, exception.ApplicationError)
        self.assertEqual(exc.error, u'com.myapp.error3')
        self.assertEqual(exc.args, ())
        self.assertEqual(exc.kwargs, {})

        emsg = message.Error(message.Call.MESSAGE_TYPE,
                             123456,
                             u'com.myapp.error3',
                             args=[1, 2, u'hello'])
        exc = session._exception_from_message(emsg)
        self.assertIsInstance(exc, exception.ApplicationError)
        self.assertEqual(exc.error, u'com.myapp.error3')
        self.assertEqual(exc.args, (1, 2, u'hello'))
        self.assertEqual(exc.kwargs, {})

        emsg = message.Error(message.Call.MESSAGE_TYPE,
                             123456,
                             u'com.myapp.error3',
                             args=[1, 2, u'hello'],
                             kwargs={
                                 u'foo': 23,
                                 u'bar': u'baz'
                             })
        exc = session._exception_from_message(emsg)
        self.assertIsInstance(exc, exception.ApplicationError)
        self.assertEqual(exc.error, u'com.myapp.error3')
        self.assertEqual(exc.args, (1, 2, u'hello'))
        self.assertEqual(exc.kwargs, {u'foo': 23, u'bar': u'baz'})
Esempio n. 2
0
   def test_message_from_exception(self):
      session = protocol.BaseSession()

      @wamp.error("com.myapp.error1")
      class AppError1(Exception):
         pass

      @wamp.error("com.myapp.error2")
      class AppError2(Exception):
         pass

      session.define(AppError1)
      session.define(AppError2)

      exc = AppError1()
      msg = session._message_from_exception(message.Call.MESSAGE_TYPE, 123456, exc)

      self.assertEqual(msg.marshal(), [message.Error.MESSAGE_TYPE, message.Call.MESSAGE_TYPE, 123456, {}, "com.myapp.error1"])