コード例 #1
0
    def test_task_queue_default(self):
        account_sid = "AC123"
        auth_token = "foobar"
        workspace_sid = "WS456"
        taskqueue_sid = "WQ789"
        capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, taskqueue_sid)

        capability.generate_token()

        token = capability.generate_token()
        self.assertNotEqual(None, token)

        decoded = jwt.decode(token, auth_token)
        self.assertNotEqual(None, decoded)

        self.check_decoded(decoded, account_sid, workspace_sid, taskqueue_sid, taskqueue_sid)

        policies = decoded['policies']
        self.assertEqual(len(policies), 3)

        for method, url, policy in [
            ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WQ789", policies[0]),
            ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WQ789", policies[1])
            ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/TaskQueues/WQ789", policies[2])
        ]:
            yield self.check_policy, method, url, policy
コード例 #2
0
 def setUp(self):
     self.account_sid = "AC123"
     self.auth_token = "foobar"
     self.workspace_sid = "WS456"
     self.worker_sid = "WK789"
     self.cap = TaskRouterCapability(self.account_sid, self.auth_token,
                                     self.workspace_sid, self.worker_sid)
コード例 #3
0
    def test_workspace_default(self):
        account_sid = "AC123"
        auth_token = "foobar"
        workspace_sid = "WS456"
        channel_id = "WS456"
        capability = TaskRouterCapability(account_sid, auth_token,
                                          workspace_sid, channel_id)

        capability.generate_token()

        token = capability.generate_token()
        self.assertNotEqual(None, token)

        decoded = jwt.decode(token, auth_token)
        self.assertNotEqual(None, decoded)

        self.check_decoded(decoded, account_sid, workspace_sid, channel_id)

        policies = decoded['policies']
        self.assertEqual(len(policies), 3)

        for method, url, policy in [
            ('GET',
             "https://event-bridge.twilio.com/v1/wschannels/AC123/WS456",
             policies[0]),
            ('POST',
             "https://event-bridge.twilio.com/v1/wschannels/AC123/WS456",
             policies[1]),
            ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456",
             policies[2]),
        ]:
            yield self.check_policy, method, url, policy
コード例 #4
0
    def test_worker_default(self):
        account_sid = "AC123"
        auth_token = "foobar"
        workspace_sid = "WS456"
        worker_sid = "WK789"
        capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, worker_sid)

        capability.generate_token()

        token = capability.generate_token()
        self.assertIsNotNone(token)

        decoded = jwt.decode(token, auth_token)
        self.assertIsNotNone(decoded)

        self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid)

        policies = decoded["policies"]
        self.assertEqual(len(policies), 5)

        for method, url, policy in [
            ("GET", "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[0]),
            ("GET", "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[1]),
            ("GET", "https://taskrouter.twilio.com/v1/wschannels/AC123/WK789", policies[2]),
            ("POST", "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[3]),
            ("GET", "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[4]),
        ]:
            yield self.check_policy, method, url, policy
コード例 #5
0
    def test_deprecated_worker(self):
        account_sid = "AC123"
        auth_token = "foobar"
        workspace_sid = "WS456"
        worker_sid = "WK789"
        capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, worker_sid)

        capability.generate_token()

        token = capability.generate_token()
        self.assertNotEqual(None, token)

        decoded = jwt.decode(token, auth_token)
        self.assertNotEqual(None, decoded)

        self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid)

        policies = decoded['policies']
        self.assertEqual(len(policies), 6)

        # should expect 6 policies
        for method, url, policy in [
            ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[0]),
            ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[1]),
            ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[2]),
            ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[3]),
            ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789/Reservations/**", policies[4]),
            ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[5])
        ]:
            yield self.check_policy, method, url, policy

        # check deprecated warnings
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            capability.allow_worker_fetch_attributes()
            assert len(w) == 1
            assert issubclass(w[-1].category, DeprecationWarning)
            assert "deprecated" in str(w[-1].message)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            capability.allow_worker_activity_updates()
            assert len(w) == 1
            assert issubclass(w[-1].category, DeprecationWarning)
            assert "deprecated" in str(w[-1].message)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            capability.allow_task_reservation_updates()
            assert len(w) == 1
            assert issubclass(w[-1].category, DeprecationWarning)
            assert "deprecated" in str(w[-1].message)
コード例 #6
0
 def setUp(self):
     self.account_sid = "AC123"
     self.auth_token = "foobar"
     self.workspace_sid = "WS456"
     self.worker_sid = "WK789"
     self.cap = TaskRouterCapability(self.account_sid, self.auth_token,
                                     self.workspace_sid, self.worker_sid)
コード例 #7
0
class TaskRouterCapabilityTest(unittest.TestCase):
    def setUp(self):
        self.account_sid = "AC123"
        self.auth_token = "foobar"
        self.workspace_sid = "WS456"
        self.worker_sid = "WK789"
        self.cap = TaskRouterCapability(self.account_sid, self.auth_token, self.workspace_sid, self.worker_sid)

    def test_generate_token(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        del decoded["exp"]
        del decoded["policies"]

        expected = {
            "iss": self.account_sid,
            "account_sid": self.account_sid,
            "workspace_sid": self.workspace_sid,
            "worker_sid": self.worker_sid,
            "channel": self.worker_sid,
            "version": "v1",
            "friendly_name": self.worker_sid,
        }
        self.assertEqual(expected, decoded)

    def test_generate_token_default_ttl(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        self.assertEqual(int(time.time()) + 3600, decoded["exp"])

    def test_generate_token_custom_ttl(self):
        token = self.cap.generate_token(10000)
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        self.assertEqual(int(time.time()) + 10000, decoded["exp"])

    def test_defaults(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        websocket_url = "https://event-bridge.twilio.com/v1/wschannels/{0}/{1}".format(
            self.account_sid, self.worker_sid
        )
        expected = [
            {"url": websocket_url, "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}},
            {"url": websocket_url, "method": "POST", "allow": True, "query_filter": {}, "post_filter": {}},
            {
                "url": "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities",
                "method": "GET",
                "allow": True,
                "query_filter": {},
                "post_filter": {},
            },
            {
                "url": "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid),
                "method": "GET",
                "allow": True,
                "query_filter": {},
                "post_filter": {},
            },
            {
                "url": "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}/Reservations/**".format(
                    self.workspace_sid, self.worker_sid
                ),
                "method": "GET",
                "allow": True,
                "query_filter": {},
                "post_filter": {},
            },
            {
                "url": "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format(
                    self.workspace_sid, self.worker_sid
                ),
                "method": "GET",
                "allow": True,
                "query_filter": {},
                "post_filter": {},
            },
        ]
        self.assertEqual(expected, decoded["policies"])

    def test_allow_worker_activity_updates(self):
        self.cap.allow_worker_activity_updates()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format(self.workspace_sid, self.worker_sid)

        expected = {
            "url": url,
            "method": "POST",
            "allow": True,
            "query_filter": {},
            "post_filter": {"ActivitySid": {"required": True}},
        }
        self.assertEqual(expected, decoded["policies"][-1])

    def test_allow_worker_fetch_attributes(self):
        self.cap.allow_worker_fetch_attributes()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format(self.workspace_sid, self.worker_sid)

        expected = {"url": url, "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}}

        self.assertEqual(expected, decoded["policies"][-1])

    def test_allow_task_reservation_updates(self):
        self.cap.allow_task_reservation_updates()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid)

        expected = {"url": url, "method": "POST", "allow": True, "query_filter": {}, "post_filter": {}}
        self.assertEqual(expected, decoded["policies"][-1])
コード例 #8
0
class TaskRouterCapabilityTest(unittest.TestCase):
    def setUp(self):
        self.account_sid = "AC123"
        self.auth_token = "foobar"
        self.workspace_sid = "WS456"
        self.worker_sid = "WK789"
        self.cap = TaskRouterCapability(self.account_sid, self.auth_token,
                                        self.workspace_sid, self.worker_sid)

    def test_generate_token(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        del decoded['exp']
        del decoded['policies']

        expected = {
            'iss': self.account_sid,
            'account_sid': self.account_sid,
            'workspace_sid': self.workspace_sid,
            'worker_sid': self.worker_sid,
            'channel': self.worker_sid,
            'version': 'v1',
            'friendly_name': self.worker_sid,
        }
        self.assertEqual(expected, decoded)

    def test_generate_token_default_ttl(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        self.assertEqual(int(time.time()) + 3600, decoded['exp'])

    def test_generate_token_custom_ttl(self):
        token = self.cap.generate_token(10000)
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        self.assertEqual(int(time.time()) + 10000, decoded['exp'])

    def test_defaults(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        websocket_url = (
            'https://event-bridge.twilio.com/v1/wschannels/{0}/{1}'.format(
                self.account_sid, self.worker_sid))
        expected = [{
            'url':
            'https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities',
            'method': 'GET',
            'allow': True,
            'query_filter': {},
            'post_filter': {},
        }, {
            'url':
            'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(
                self.workspace_sid),
            'method':
            'GET',
            'allow':
            True,
            'query_filter': {},
            'post_filter': {},
        }, {
            'url': websocket_url,
            'method': 'GET',
            'allow': True,
            'query_filter': {},
            'post_filter': {},
        }, {
            'url': websocket_url,
            'method': 'POST',
            'allow': True,
            'query_filter': {},
            'post_filter': {},
        }, {
            'url':
            'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.
            format(self.workspace_sid, self.worker_sid),
            'method':
            'GET',
            'allow':
            True,
            'query_filter': {},
            'post_filter': {},
        }]
        self.assertEqual(expected, decoded['policies'])

    def test_allow_worker_activity_updates(self):
        self.cap.allow_worker_activity_updates()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format(
            self.workspace_sid,
            self.worker_sid,
        )

        expected = {
            'url': url,
            'method': 'POST',
            'allow': True,
            'query_filter': {},
            'post_filter': {
                'ActivitySid': {
                    'required': True
                }
            },
        }
        self.assertEqual(expected, decoded['policies'][-1])

    def test_allow_worker_fetch_attributes(self):
        self.cap.allow_worker_fetch_attributes()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format(
            self.workspace_sid,
            self.worker_sid,
        )

        expected = {
            'url': url,
            'method': 'GET',
            'allow': True,
            'query_filter': {},
            'post_filter': {},
        }

        self.assertEqual(expected, decoded['policies'][-1])

    def test_allow_task_reservation_updates(self):
        self.cap.allow_task_reservation_updates()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(
            self.workspace_sid, )

        expected = {
            'url': url,
            'method': 'POST',
            'allow': True,
            'query_filter': {},
            'post_filter': {},
        }
        self.assertEqual(expected, decoded['policies'][-1])
コード例 #9
0
class TaskRouterCapabilityTest(unittest.TestCase):

    def setUp(self):
        self.account_sid = "AC123"
        self.auth_token = "foobar"
        self.workspace_sid = "WS456"
        self.worker_sid = "WK789"
        self.cap = TaskRouterCapability(self.account_sid, self.auth_token,
                                        self.workspace_sid, self.worker_sid)

    def test_generate_token(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        del decoded['exp']
        del decoded['policies']

        expected = {
            'iss': self.account_sid,
            'account_sid': self.account_sid,
            'workspace_sid': self.workspace_sid,
            'worker_sid': self.worker_sid,
            'channel': self.worker_sid,
            'version': 'v1',
            'friendly_name': self.worker_sid,
        }
        self.assertEqual(expected, decoded)

    def test_generate_token_default_ttl(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        self.assertEqual(int(time.time()) + 3600, decoded['exp'])

    def test_generate_token_custom_ttl(self):
        token = self.cap.generate_token(10000)
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        self.assertEqual(int(time.time()) + 10000, decoded['exp'])

    def test_defaults(self):
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        websocket_url = (
            'https://event-bridge.twilio.com/v1/wschannels/{0}/{1}'.format(self.account_sid, self.worker_sid)
        )
        expected = [
            {
                'url': 'https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities',
                'method': 'GET',
                'allow': True,
                'query_filter': {},
                'post_filter': {},
            },
            {
                'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(self.workspace_sid),
                'method': 'GET',
                'allow': True,
                'query_filter': {},
                'post_filter': {},
            },
            {
                'url': websocket_url,
                'method': 'GET',
                'allow': True,
                'query_filter': {},
                'post_filter': {},
            },
            {
                'url': websocket_url,
                'method': 'POST',
                'allow': True,
                'query_filter': {},
                'post_filter': {},
            },
            {
                'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format(self.workspace_sid, self.worker_sid),
                'method': 'GET',
                'allow': True,
                'query_filter': {},
                'post_filter': {},
            }
        ]
        self.assertEqual(expected, decoded['policies'])

    def test_allow_worker_activity_updates(self):
        self.cap.allow_worker_activity_updates()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format(
            self.workspace_sid,
            self.worker_sid,
        )

        expected = {
            'url': url,
            'method': 'POST',
            'allow': True,
            'query_filter': {},
            'post_filter': {'ActivitySid': {'required': True}},
        }
        self.assertEqual(expected, decoded['policies'][-1])

    def test_allow_worker_fetch_attributes(self):
        self.cap.allow_worker_fetch_attributes()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format(
            self.workspace_sid,
            self.worker_sid,
        )

        expected = {
            'url': url,
            'method': 'GET',
            'allow': True,
            'query_filter': {},
            'post_filter': {},
        }

        self.assertEqual(expected, decoded['policies'][-1])

    def test_allow_task_reservation_updates(self):
        self.cap.allow_task_reservation_updates()
        token = self.cap.generate_token()
        decoded = jwt.decode(token, self.auth_token)

        self.assertTrue(decoded is not None)
        url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(
            self.workspace_sid,
        )

        expected = {
            'url': url,
            'method': 'POST',
            'allow': True,
            'query_filter': {},
            'post_filter': {},
        }
        self.assertEqual(expected, decoded['policies'][-1])
コード例 #10
0
    def test_deprecated_worker(self):
        account_sid = "AC123"
        auth_token = "foobar"
        workspace_sid = "WS456"
        worker_sid = "WK789"
        capability = TaskRouterCapability(account_sid, auth_token,
                                          workspace_sid, worker_sid)

        capability.generate_token()

        token = capability.generate_token()
        self.assertNotEqual(None, token)

        decoded = jwt.decode(token, auth_token)
        self.assertNotEqual(None, decoded)

        self.check_decoded(decoded, account_sid, workspace_sid, worker_sid,
                           worker_sid)

        policies = decoded['policies']
        self.assertEqual(len(policies), 5)

        # should expect 5 policies
        for method, url, policy in [
            ('GET',
             "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities",
             policies[0]),
            ('GET',
             "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**",
             policies[1]),
            ('GET',
             "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789",
             policies[2]),
            ('POST',
             "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789",
             policies[3]),
            ('GET',
             "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789",
             policies[4])
        ]:
            yield self.check_policy, method, url, policy

        # check deprecated warnings
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            capability.allow_worker_fetch_attributes()
            assert len(w) == 1
            assert issubclass(w[-1].category, DeprecationWarning)
            assert "deprecated" in str(w[-1].message)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            capability.allow_worker_activity_updates()
            assert len(w) == 1
            assert issubclass(w[-1].category, DeprecationWarning)
            assert "deprecated" in str(w[-1].message)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            capability.allow_task_reservation_updates()
            assert len(w) == 1
            assert issubclass(w[-1].category, DeprecationWarning)
            assert "deprecated" in str(w[-1].message)