예제 #1
0
class MiddlewareHelper(object):
    implements(IHelper)

    def __init__(self, middleware_class):
        self._vumi_helper = VumiApiHelper()
        self._msg_helper = GoMessageHelper()
        self.middleware_class = middleware_class
        self._middlewares = []

        generate_proxies(self, self._vumi_helper)
        generate_proxies(self, self._msg_helper)

    def setup(self):
        return self._vumi_helper.setup(setup_vumi_api=False)

    @inlineCallbacks
    def cleanup(self):
        for mw in self._middlewares:
            yield mw.teardown_middleware()
        yield self._vumi_helper.cleanup()

    @inlineCallbacks
    def create_middleware(self, config=None, middleware_class=None,
                          name='dummy_middleware'):
        worker_helper = self._vumi_helper.get_worker_helper()
        dummy_worker = yield worker_helper.get_worker(
            ToyWorker, self.mk_config({}))
        config = self.mk_config(config or {})
        if middleware_class is None:
            middleware_class = self.middleware_class
        mw = middleware_class(name, config, dummy_worker)
        self._middlewares.append(mw)
        yield mw.setup_middleware()
        returnValue(mw)
예제 #2
0
    def __init__(self, middleware_class):
        self._vumi_helper = VumiApiHelper()
        self._msg_helper = GoMessageHelper()
        self.middleware_class = middleware_class
        self._middlewares = []

        generate_proxies(self, self._vumi_helper)
        generate_proxies(self, self._msg_helper)
예제 #3
0
    def __init__(self, use_riak=True):
        # Note: We pass `is_sync=True` to the VumiApiHelper because a Django
        #       test case cannot be async. We define a property lower down that
        #       proxies `is_sync` from the VumiApiHelper we're wrapping so that
        #       we can be used by other helpers more easily.
        self._vumi_helper = VumiApiHelper(is_sync=True, use_riak=use_riak)
        self.use_riak = use_riak  # So create_user_profile() knows what to do.

        generate_proxies(self, self._vumi_helper)
        # TODO: Better/more generic way to do this patching?
        self._settings_patches = []
예제 #4
0
 def setUp(self):
     self.vumi_helper = yield self.add_helper(VumiApiHelper())
     self.msg_helper = self.add_helper(
         GoMessageHelper(vumi_helper=self.vumi_helper))
     self.user_helper = yield self.vumi_helper.make_user(u'user')
     self.conv = yield self.user_helper.create_conversation(
         conversation_type=u'some_conversation')
예제 #5
0
    def setUp(self):
        super(TestMessageStoreResource, self).setUp()

        self.vumi_helper = yield self.add_helper(VumiApiHelper())
        self.msg_helper = self.add_helper(GoMessageHelper())
        self.user_helper = yield self.vumi_helper.make_user(u"user")
        self.app_worker.user_api = self.user_helper.user_api

        self.message_store = self.vumi_helper.get_vumi_api().mdb

        self.conversation = yield self.user_helper.create_conversation(
            u'jsbox', started=True)

        # store inbound
        yield self.message_store.add_inbound_message(
            self.msg_helper.make_inbound('hello'),
            batch_id=self.conversation.batch.key)

        # store outbound
        outbound_msg = self.msg_helper.make_outbound('hello')
        yield self.message_store.add_outbound_message(
            outbound_msg, batch_id=self.conversation.batch.key)

        # ack outbound
        event = self.msg_helper.make_ack(outbound_msg)
        yield self.message_store.add_event(event)

        # monkey patch for when no conversation_key is provided
        self.app_worker.conversation_for_api = lambda *a: self.conversation

        yield self.create_resource({})
예제 #6
0
 def setUp(self):
     self.vumi_helper = yield self.add_helper(VumiApiHelper())
     self.msg_helper = self.add_helper(GoMessageHelper())
     self.billing_api = BillingApiMock()
     self.ri_helper = self.vumi_helper.get_worker_helper(
         "billing_dispatcher_ri")
     self.ro_helper = self.vumi_helper.get_worker_helper(
         "billing_dispatcher_ro")
예제 #7
0
 def setUp(self):
     super(TestGoOutboundResource, self).setUp()
     yield self.create_resource({})
     self.vumi_helper = yield self.add_helper(VumiApiHelper(),
                                              setup_vumi_api=True)
     self.app_helper = self.add_helper(
         ApplicationHelper(u"dummy", self.vumi_helper))
     self.msg_helper = self.add_helper(GoMessageHelper())
예제 #8
0
    def __init__(self, middleware_class):
        self._vumi_helper = VumiApiHelper()
        self._msg_helper = GoMessageHelper()
        self.middleware_class = middleware_class
        self._middlewares = []

        generate_proxies(self, self._vumi_helper)
        generate_proxies(self, self._msg_helper)
예제 #9
0
 def setUp(self):
     self.vumi_helper = yield self.add_helper(
         VumiApiHelper(is_sync=self.is_sync))
     self.user_helper = yield self.vumi_helper.make_user(u'user')
     user_account = yield self.user_helper.get_user_account()
     self.optout_store = OptOutStore.from_user_account(user_account)
     self.conv_store = ConversationStore.from_user_account(user_account)
     self.contact_store = ContactStore.from_user_account(user_account)
예제 #10
0
    def setUp(self):
        super(TestContactsResource, self).setUp()

        self.vumi_helper = yield self.add_helper(VumiApiHelper())
        self.user_helper = yield self.vumi_helper.make_user(u"user")
        self.app_worker.user_api = self.user_helper.user_api
        self.contact_store = self.user_helper.user_api.contact_store

        yield self.create_resource({'delivery_class': u'sms'})
예제 #11
0
    def setUp(self):
        super(TestGroupsResource, self).setUp()

        self.vumi_helper = yield self.add_helper(VumiApiHelper())
        self.user_helper = yield self.vumi_helper.make_user(u"user")
        self.app_worker.user_api = self.user_helper.user_api
        self.contact_store = self.user_helper.user_api.contact_store

        yield self.create_resource({})
예제 #12
0
    def __init__(self, worker_class, **msg_helper_args):
        self._worker_class = worker_class

        self.vumi_helper = VumiApiHelper()
        self._app_helper = ApplicationHelper(self._conversation_type(),
                                             self.vumi_helper)
        self.msg_helper = GoMessageHelper(**msg_helper_args)
        self.transport_name = self.msg_helper.transport_name
        self.worker_helper = self.vumi_helper.get_worker_helper(
            self.transport_name)
        self.dispatch_helper = MessageDispatchHelper(self.msg_helper,
                                                     self.worker_helper)

        # Proxy methods from our helpers.
        generate_proxies(self, self._app_helper)
        generate_proxies(self, self.msg_helper)
        generate_proxies(self, self.worker_helper)
        generate_proxies(self, self.dispatch_helper)
예제 #13
0
    def setUp(self):
        self.vumi_helper = yield self.add_helper(
            VumiApiHelper(is_sync=self.is_sync))
        self.vumi_api = self.vumi_helper.get_vumi_api()
        self.user_helper = yield self.vumi_helper.make_user(u'Buster')
        self.user_api = self.user_helper.user_api

        # Some stores for old versions to test migrations.
        self.account_store_vnone = AccountStoreVNone(self.vumi_api.manager)
        self.account_store_v1 = AccountStoreV1(self.vumi_api.manager)
예제 #14
0
    def setUp(self):
        self.vumi_helper = yield self.add_helper(VumiApiHelper())

        self.user_helper = yield self.vumi_helper.make_user(u'user')
        user_account = yield self.user_helper.get_user_account()
        self.store = ContactStore.from_user_account(user_account)

        self.alt_user_helper = yield self.vumi_helper.make_user(u'other_user')
        alt_user_account = yield self.alt_user_helper.get_user_account()
        self.store_alt = ContactStore.from_user_account(alt_user_account)
예제 #15
0
 def setUp(self):
     self.vumi_helper = yield self.add_helper(VumiApiHelper())
     self.user_helper = yield self.vumi_helper.get_or_create_user()
     riak_manager = self.vumi_helper.get_riak_manager()
     self.contact_store = ContactStore(
         riak_manager, self.user_helper.account_key)
     # Old contact proxy for making unindexed contacts.
     per_account_manager = riak_manager.sub_manager(
         self.user_helper.account_key)
     self.contacts_v1 = per_account_manager.proxy(ContactV1)
예제 #16
0
    def __init__(self, worker_class, **msg_helper_args):
        self._worker_class = worker_class
        msg_helper_kw = {}
        if msg_helper_args is not None:
            msg_helper_kw.update(msg_helper_args)

        self.vumi_helper = VumiApiHelper()
        self._router_helper = RouterHelper(
            self._router_type(), self.vumi_helper)
        self.msg_helper = GoMessageHelper(**msg_helper_kw)

        # Proxy methods from our helpers.
        generate_proxies(self, self._router_helper)
        generate_proxies(self, self.msg_helper)

        self.ri = RouterConnectorHelper(
            'ri_conn', self.vumi_helper, self.msg_helper)

        self.ro = RouterConnectorHelper(
            'ro_conn', self.vumi_helper, self.msg_helper)
예제 #17
0
 def setUp(self):
     self.vumi_helper = self.add_helper(VumiApiHelper(),
                                        setup_vumi_api=False)
     self.worker_helper = self.vumi_helper.get_worker_helper()
     self.api = yield self.worker_helper.get_worker(
         CommandDispatcher,
         self.vumi_helper.mk_config({
             'transport_name':
             'this should not be an ApplicationWorker',
             'worker_names': ['worker_1', 'worker_2'],
         }))
예제 #18
0
    def setUp(self):
        self.vumi_helper = yield self.add_helper(VumiApiHelper())
        self.user_helper = yield self.vumi_helper.make_user(u'user')
        self.user_api = self.user_helper.user_api
        self.campaign_key = self.user_helper.account_key

        site = Site(
            GoApiServer(self.campaign_key, self.vumi_helper.get_vumi_api()))
        self.server = yield reactor.listenTCP(0, site)
        self.add_cleanup(self.server.loseConnection)
        addr = self.server.getHost()
        self.proxy = Proxy("http://%s:%d/" % (addr.host, addr.port))
예제 #19
0
    def setUp(self):
        self.vumi_helper = yield self.add_helper(VumiApiHelper())

        response = Mock()
        response.code = http.OK
        response.delivered_body = 'javascript!'
        self.mocked_url_call = Mock(
            side_effect=[succeed(response),
                         succeed(response)])

        self.patch(ConversationConfigResource, 'load_source_from_url',
                   self.mocked_url_call)

        self.config = self.vumi_helper.mk_config({
            'worker_name': 'conversation_api_worker',
            'web_path': '/foo/',
            'web_port': 0,
            'health_path': '/health/',
        })
        self.worker = yield self.vumi_helper.get_worker_helper().get_worker(
            ConversationApiWorker, self.config)
        self.addr = self.worker.webserver.getHost()
        self.url = 'http://%s:%s%s' % (self.addr.host, self.addr.port,
                                       self.config['web_path'])

        self.user_helper = yield self.vumi_helper.make_user(u'user')
        yield self.vumi_helper.setup_tagpool(u"pool", [u"tag1", u"tag2"])
        yield self.user_helper.add_tagpool_permission(u"pool")

        self.conversation = yield self.user_helper.create_conversation(
            u'jsbox',
            config={
                'jsbox_app_config': {
                    'config': {
                        'source_url': 'http://configsourcecode/'
                    },
                },
                'jsbox': {
                    'source_url': 'http://sourcecode/',
                },
                'http_api': {
                    'api_tokens': ['token-1', 'token-2', 'token-3'],
                    'metrics_store': 'metrics_store'
                },
            })

        self.auth_headers = {
            'Authorization': [
                'Basic ' +
                base64.b64encode('%s:%s' %
                                 (self.user_helper.account_key, 'token-1'))
            ],
        }
예제 #20
0
 def setUp(self):
     self.vumi_helper = self.add_helper(VumiApiHelper(),
                                        setup_vumi_api=False)
     self.worker_helper = self.vumi_helper.get_worker_helper()
     self.ed = yield self.worker_helper.get_worker(
         EventDispatcher,
         self.vumi_helper.mk_config({
             'transport_name': 'this should not be an ApplicationWorker',
             'event_handlers': {
                 'handler1':
                 "%s.%s" % (SendMessageCommandHandler.__module__,
                            SendMessageCommandHandler.__name__)
             },
         }))
예제 #21
0
class MiddlewareHelper(object):
    implements(IHelper)

    def __init__(self, middleware_class):
        self._vumi_helper = VumiApiHelper()
        self._msg_helper = GoMessageHelper()
        self.middleware_class = middleware_class
        self._middlewares = []

        generate_proxies(self, self._vumi_helper)
        generate_proxies(self, self._msg_helper)

    def setup(self):
        return self._vumi_helper.setup(setup_vumi_api=False)

    @inlineCallbacks
    def cleanup(self):
        for mw in self._middlewares:
            yield mw.teardown_middleware()
        yield self._vumi_helper.cleanup()

    @inlineCallbacks
    def create_middleware(self,
                          config=None,
                          middleware_class=None,
                          name='dummy_middleware'):
        worker_helper = self._vumi_helper.get_worker_helper()
        dummy_worker = yield worker_helper.get_worker(ToyWorker,
                                                      self.mk_config({}))
        config = self.mk_config(config or {})
        if middleware_class is None:
            middleware_class = self.middleware_class
        mw = middleware_class(name, config, dummy_worker)
        self._middlewares.append(mw)
        yield mw.setup_middleware()
        returnValue(mw)
예제 #22
0
 def setUp(self):
     self.vumi_helper = self.add_helper(VumiApiHelper(),
                                        setup_vumi_api=False)
     self.worker_helper = self.vumi_helper.get_worker_helper()
     self.ed = yield self.worker_helper.get_worker(
         EventDispatcher,
         self.vumi_helper.mk_config({
             'transport_name': 'this should not be an ApplicationWorker',
             'event_handlers': {
                 'handler1': '%s.ToyHandler' % __name__,
                 'handler2': '%s.ToyHandler' % __name__,
             },
         }))
     self.handler1 = self.ed.handlers['handler1']
     self.handler2 = self.ed.handlers['handler2']
예제 #23
0
    def setUp(self):
        self.vumi_helper = self.add_helper(VumiApiHelper(is_sync=True))
        self.user_helper = self.vumi_helper.get_or_create_user()

        wrapped_conv = self.user_helper.create_conversation(
            u'subscription',
            config={
                'handlers': [{
                    'campaign_name': 'campaign-1'
                }, {
                    'campaign_name': 'campaign-2'
                }]
            })
        self.conv = wrapped_conv.c
        self.conv_def = ConversationDefinition(self.conv)
예제 #24
0
    def test_add_conversation_metadata(self):
        md = self.mk_md()
        self.assertEqual(md._go_metadata, {})

        vumi_helper = yield self.add_helper(VumiApiHelper())
        user_helper = yield vumi_helper.make_user(u'user')

        conv = yield user_helper.create_conversation(u'bulk_message')
        md.add_conversation_metadata(conv)

        self.assertEqual(
            md._go_metadata, {
                'user_account': user_helper.account_key,
                'conversation_type': conv.conversation_type,
                'conversation_key': conv.key,
            })
예제 #25
0
    def setUp(self):
        self.vumi_helper = yield self.add_helper(VumiApiHelper())
        self.user_helper = yield self.vumi_helper.make_user(u'username')
        self.msg_helper = self.add_helper(
            GoMessageHelper(vumi_helper=self.vumi_helper))

        self.conv = yield self.user_helper.create_conversation(u'dummy')
        yield self.vumi_helper.setup_tagpool(
            u"pool", [u"tag%s" % (i, ) for i in range(1, 5)],
            metadata={
                "display_name": "pool",
                "delivery_class": "sms",
                "transport_type": "sms",
                "transport_name": self.msg_helper.transport_name,
            })
        yield self.user_helper.add_tagpool_permission(u"pool")
예제 #26
0
    def test_add_router_metadata(self):
        md = self.mk_md()
        self.assertEqual(md._go_metadata, {})

        vumi_helper = yield self.add_helper(VumiApiHelper())
        user_helper = yield vumi_helper.make_user(u'user')

        router = yield user_helper.create_router(u'keyword')
        md.add_router_metadata(router)

        self.assertEqual(
            md._go_metadata, {
                'user_account': user_helper.account_key,
                'router_type': router.router_type,
                'router_key': router.key,
            })
예제 #27
0
    def __init__(self, worker_class, **msg_helper_args):
        self._worker_class = worker_class

        self.vumi_helper = VumiApiHelper()
        self._app_helper = ApplicationHelper(
            self._conversation_type(), self.vumi_helper)
        self.msg_helper = GoMessageHelper(**msg_helper_args)
        self.transport_name = self.msg_helper.transport_name
        self.worker_helper = self.vumi_helper.get_worker_helper(
            self.transport_name)
        self.dispatch_helper = MessageDispatchHelper(
            self.msg_helper, self.worker_helper)

        # Proxy methods from our helpers.
        generate_proxies(self, self._app_helper)
        generate_proxies(self, self.msg_helper)
        generate_proxies(self, self.worker_helper)
        generate_proxies(self, self.dispatch_helper)
예제 #28
0
    def setUp(self):
        self.vumi_helper = yield self.add_helper(VumiApiHelper())
        self.user_helper = yield self.vumi_helper.get_or_create_user()

        self.conv = yield self.user_helper.create_conversation(
            u'some_conversation')

        contact_store = self.user_helper.user_api.contact_store

        self.contact1 = yield contact_store.new_contact(
            name=u'contact-1',
            msisdn=u'+27831234567')

        self.contact2 = yield contact_store.new_contact(
            name=u'contact-2',
            msisdn=u'+27831234568')

        yield self.contact1.save()
        yield self.contact2.save()

        self.metric = ToySubscriptionMetric(self.conv, 'campaign-1')
예제 #29
0
    def setUp(self):
        super(TestOptOutResource, self).setUp()

        self.vumi_helper = yield self.add_helper(VumiApiHelper())
        self.msg_helper = self.add_helper(GoMessageHelper())
        self.user_helper = yield self.vumi_helper.make_user(u'user')
        user_account = yield self.user_helper.get_user_account()
        user_account.can_manage_optouts = True
        yield user_account.save()

        self.app_worker.user_api = self.user_helper.user_api

        self.contact_store = self.user_helper.user_api.contact_store
        self.optout_store = OptOutStore.from_user_account(user_account)

        yield self.create_resource({})

        self.contact1 = yield self.new_contact(name=u'A',
                                               surname=u'Person',
                                               msisdn=u'+27123456789')

        self.contact2 = yield self.new_contact(name=u'B',
                                               surname=u'Person',
                                               msisdn=u'+27000000000')
예제 #30
0
 def setUp(self):
     self.vumi_helper = yield self.add_helper(VumiApiHelper())
     self.vumi_api = yield self.vumi_helper.get_vumi_api()
예제 #31
0
class AppWorkerHelper(object):
    implements(IHelper)

    def __init__(self, worker_class, **msg_helper_args):
        self._worker_class = worker_class

        self.vumi_helper = VumiApiHelper()
        self._app_helper = ApplicationHelper(
            self._conversation_type(), self.vumi_helper)
        self.msg_helper = GoMessageHelper(**msg_helper_args)
        self.transport_name = self.msg_helper.transport_name
        self.worker_helper = self.vumi_helper.get_worker_helper(
            self.transport_name)
        self.dispatch_helper = MessageDispatchHelper(
            self.msg_helper, self.worker_helper)

        # Proxy methods from our helpers.
        generate_proxies(self, self._app_helper)
        generate_proxies(self, self.msg_helper)
        generate_proxies(self, self.worker_helper)
        generate_proxies(self, self.dispatch_helper)

    def _worker_name(self):
        return self._worker_class.worker_name

    def _conversation_type(self):
        # This is a guess based on worker_name.
        # TODO: We need a better way to do this, probably involving either the
        #       conversation definition or go.config.
        return self._worker_name().rpartition('_')[0].decode('utf-8')

    def setup(self):
        return self.vumi_helper.setup(setup_vumi_api=False)

    def cleanup(self):
        return self.vumi_helper.cleanup()

    @inlineCallbacks
    def get_app_worker(self, config=None, start=True):
        # Note: We assume that this is called exactly once per test.
        config = self.vumi_helper.mk_config(config or {})
        config.setdefault('worker_name', self._worker_name())
        config.setdefault('transport_name', self.msg_helper.transport_name)
        worker = yield self.get_worker(self._worker_class, config, start)
        # Set up our other bits of helper.
        self.vumi_helper.set_vumi_api(worker.vumi_api)
        self.msg_helper.mdb = worker.vumi_api.mdb
        returnValue(worker)

    @inlineCallbacks
    def start_conversation(self, conversation):
        assert self._get_pending_commands() == [], (
            "Found pending commands while starting conversation, aborting.")
        yield conversation.start()
        yield self.dispatch_commands_to_app()

    @inlineCallbacks
    def stop_conversation(self, conversation):
        assert self._get_pending_commands() == [], (
            "Found pending commands while stopping conversation, aborting.")
        yield conversation.stop_conversation()
        yield self.dispatch_commands_to_app()

    def _get_pending_commands(self):
        return self.worker_helper.get_dispatched('vumi', 'api', VumiApiCommand)

    @inlineCallbacks
    def dispatch_commands_to_app(self):
        pending_commands = self._get_pending_commands()
        self.worker_helper._clear_dispatched('vumi', 'api')
        for command in pending_commands:
            yield self.worker_helper.dispatch_raw(
                "%s.control" % (self._worker_name(),), command)

    @inlineCallbacks
    def dispatch_command(self, command, *args, **kw):
        cmd = VumiApiCommand.command(
            self._worker_name(), command, *args, **kw)
        yield self.worker_helper.dispatch_raw('vumi.api', cmd)
        yield self.dispatch_commands_to_app()

    def get_published_metrics(self, worker):
        metrics = []
        for metric_msg in self.worker_helper.get_dispatched_metrics():
            for name, _aggs, data in metric_msg:
                for _time, value in data:
                    metrics.append((name, value))
        return metrics

    def get_dispatched_app_events(self):
        return self.worker_helper.get_dispatched('vumi', 'event', VumiApiEvent)
예제 #32
0
class DjangoVumiApiHelper(object):
    implements(IHelper)

    def __init__(self, use_riak=True):
        # Note: We pass `is_sync=True` to the VumiApiHelper because a Django
        #       test case cannot be async. We define a property lower down that
        #       proxies `is_sync` from the VumiApiHelper we're wrapping so that
        #       we can be used by other helpers more easily.
        self._vumi_helper = VumiApiHelper(is_sync=True, use_riak=use_riak)
        self.use_riak = use_riak  # So create_user_profile() knows what to do.

        generate_proxies(self, self._vumi_helper)
        # TODO: Better/more generic way to do this patching?
        self._settings_patches = []

    def setup(self, setup_vumi_api=True):
        # We defer `setup_vumi_api` until we've patched Django.
        self._vumi_helper.setup(False)
        self.replace_django_bits()
        if setup_vumi_api:
            return self.setup_vumi_api()

    def cleanup(self):
        self._vumi_helper.cleanup()
        self.restore_django_bits()
        for patch in reversed(self._settings_patches):
            patch.disable()

    @property
    def is_sync(self):
        return self._vumi_helper.is_sync

    @property
    def amqp_connection(self):
        return getattr(self._vumi_helper, 'django_amqp_connection', None)

    def replace_django_bits(self):
        self._replace_settings()
        self._replace_post_save_hooks()

    def _replace_settings(self):
        # We do this redis manager hackery here because we might use it from
        # Django-land before setting (or without) up a vumi_api.
        # TODO: Find a nicer way to give everything the same fake redis.
        pcfg = self._vumi_helper._persistence_helper._config_overrides
        pcfg['redis_manager']['FAKE_REDIS'] = self.get_redis_manager()

        vumi_config = self.mk_config(settings.VUMI_API_CONFIG)
        self.patch_settings(VUMI_API_CONFIG=vumi_config)

    def _replace_post_save_hooks(self):
        has_listeners = lambda: post_save.has_listeners(get_user_model())
        assert has_listeners(), (
            "User model has no post_save listeners. Make sure"
            " DjangoVumiApiHelper is cleaned up properly in earlier tests.")
        post_save.disconnect(
            sender=get_user_model(),
            dispatch_uid='go.base.models.create_user_profile')
        assert not has_listeners(), (
            "User model still has post_save listeners. Make sure"
            " DjangoVumiApiHelper is cleaned up properly in earlier tests.")
        post_save.connect(
            self.create_user_profile,
            sender=get_user_model(),
            dispatch_uid='DjangoVumiApiHelper.create_user_profile')

    def restore_django_bits(self):
        post_save.disconnect(
            sender=get_user_model(),
            dispatch_uid='DjangoVumiApiHelper.create_user_profile')
        post_save.connect(
            base_models.create_user_profile,
            sender=get_user_model(),
            dispatch_uid='go.base.models.create_user_profile')

    @proxyable
    def get_client(self, username='******', password='******'):
        client = Client()
        client.login(username=username, password=password)
        return client

    @proxyable
    def patch_settings(self, **kwargs):
        patch = override_settings(**kwargs)
        patch.enable()
        self._settings_patches.append(patch)

    @proxyable
    def make_django_user(self, email='*****@*****.**', password='******',
                         first_name="Test", last_name="User", superuser=False):
        if superuser:
            user = get_user_model().objects.create_superuser(
                email=email, password=password)
        else:
            user = get_user_model().objects.create_user(
                email=email, password=password)
        user.first_name = first_name
        user.last_name = last_name
        user.save()
        user_api = base_utils.vumi_api_for_user(user)
        return self.get_user_helper(user_api.user_account_key)

    def create_user_profile(self, sender, instance, created, **kwargs):
        if not created:
            return

        if not self.use_riak:
            # Just create the account key, no actual user.
            base_models.UserProfile.objects.create(
                user=instance, user_account=uuid.uuid4())
            return

        user_helper = self.make_user(
            unicode(instance.email), enable_search=True,
            django_user_pk=instance.pk)
        base_models.UserProfile.objects.create(
            user=instance, user_account=user_helper.account_key)
예제 #33
0
파일: helpers.py 프로젝트: TouK/vumi-go
class RouterWorkerHelper(object):
    implements(IHelper)

    def __init__(self, worker_class, **msg_helper_args):
        self._worker_class = worker_class
        msg_helper_kw = {}
        if msg_helper_args is not None:
            msg_helper_kw.update(msg_helper_args)

        self.vumi_helper = VumiApiHelper()
        self._router_helper = RouterHelper(
            self._router_type(), self.vumi_helper)
        self.msg_helper = GoMessageHelper(**msg_helper_kw)

        # Proxy methods from our helpers.
        generate_proxies(self, self._router_helper)
        generate_proxies(self, self.msg_helper)

        self.ri = RouterConnectorHelper(
            'ri_conn', self.vumi_helper, self.msg_helper)

        self.ro = RouterConnectorHelper(
            'ro_conn', self.vumi_helper, self.msg_helper)

    def _worker_name(self):
        return self._worker_class.worker_name

    def _router_type(self):
        # This is a guess based on worker_name.
        # We need a better way to do this.
        return self._worker_name().rpartition('_')[0].decode('utf-8')

    def setup(self):
        self.vumi_helper.setup(setup_vumi_api=False)

    @inlineCallbacks
    def cleanup(self):
        yield self.ro.cleanup()
        yield self.ri.cleanup()
        yield self.msg_helper.cleanup()
        yield self.vumi_helper.cleanup()

    @inlineCallbacks
    def get_router_worker(self, config=None, start=True):
        # Note: We assume that this is called exactly once per test.
        config = self.vumi_helper.mk_config(config or {})
        config.setdefault('worker_name', self._worker_name())
        config.setdefault('ri_connector_name', self.ri.connector_name)
        config.setdefault('ro_connector_name', self.ro.connector_name)
        worker = yield self.ri.get_worker(self._worker_class, config, start)
        # Set up our other bits of helper.
        self.vumi_helper.set_vumi_api(worker.vumi_api)
        self.msg_helper.mdb = worker.vumi_api.mdb
        returnValue(worker)

    @inlineCallbacks
    def start_router(self, router):
        assert self._get_pending_commands() == [], (
            "Found pending commands while starting router, aborting.")
        user_helper = yield self.vumi_helper.get_or_create_user()
        router_api = user_helper.user_api.get_router_api(
            router.router_type, router.key)
        yield router_api.start_router(router)
        yield self.dispatch_commands_to_router()

    @inlineCallbacks
    def stop_router(self, router):
        assert self._get_pending_commands() == [], (
            "Found pending commands while stopping router, aborting.")
        user_helper = yield self.vumi_helper.get_or_create_user()
        router_api = user_helper.user_api.get_router_api(
            router.router_type, router.key)
        yield router_api.stop_router(router)
        yield self.dispatch_commands_to_router()

    def _get_pending_commands(self):
        return self.ri.get_dispatched('vumi', 'api', VumiApiCommand)

    @inlineCallbacks
    def dispatch_commands_to_router(self):
        pending_commands = self._get_pending_commands()
        self.ri._worker_helper._clear_dispatched('vumi', 'api')
        for command in pending_commands:
            yield self.ri.dispatch_raw(
                "%s.control" % (self._worker_name(),), command)

    @inlineCallbacks
    def dispatch_command(self, command, *args, **kw):
        cmd = VumiApiCommand.command(
            self._worker_name(), command, *args, **kw)
        yield self.dispatch_raw('vumi.api', cmd)
        yield self.dispatch_commands_to_router()

    def get_published_metrics(self, worker):
        return [
            (metric.name, value)
            for metric, ((time, value),) in worker.metrics._oneshot_msgs]

    def get_dispatched_router_events(self):
        return self.get_dispatched('vumi', 'event', VumiApiEvent)
예제 #34
0
 def setUp(self):
     self.vumi_helper = yield self.add_helper(VumiApiHelper(),
                                              setup_vumi_api=True)
     self.app_helper = self.add_helper(
         ApplicationHelper(u"dummy", self.vumi_helper))
     self.msg_helper = self.add_helper(GoMessageHelper())
예제 #35
0
 def setUp(self):
     self.vumi_helper = yield self.add_helper(VumiApiHelper())
     self.msg_helper = self.add_helper(
         GoMessageHelper(vumi_helper=self.vumi_helper))
     self.user_helper = yield self.vumi_helper.make_user(u'user')
     self.patch(time, 'time', lambda: 1985)