Пример #1
0
    async def test_async_mgmt_subscription_update_invalid(self, servicebus_namespace_connection_string, **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        topic_name = "dfjfj"
        subscription_name = "kwqxc"
        try:
            topic_description = await mgmt_service.create_topic(topic_name)
            subscription_description = await mgmt_service.create_subscription(topic_name, subscription_name)

            # handle a null update properly.
            with pytest.raises(AttributeError):
                await mgmt_service.update_subscription(topic_name, None)

            # handle an invalid type update properly.
            with pytest.raises(AttributeError):
                await mgmt_service.update_subscription(topic_name, Exception("test"))

            # change the name to a topic that doesn't exist; should fail.
            subscription_description.name = "iewdm"
            with pytest.raises(HttpResponseError):
                await mgmt_service.update_subscription(topic_name, subscription_description)
            subscription_description.name = subscription_name

            # change the name to a topic with an invalid name exist; should fail.
            subscription_description.name = ''
            with pytest.raises(msrest.exceptions.ValidationError):
                await mgmt_service.update_subscription(topic_name, subscription_description)
            subscription_description.name = topic_name

            # change to a setting with an invalid value; should still fail.
            subscription_description.lock_duration = datetime.timedelta(days=25)
            with pytest.raises(HttpResponseError):
                await mgmt_service.update_subscription(topic_name, subscription_description)
            subscription_description.lock_duration = datetime.timedelta(minutes=5)
        finally:
            await mgmt_service.delete_subscription(topic_name, subscription_name)
            await mgmt_service.delete_topic(topic_name)
Пример #2
0
    async def test_async_mgmt_queue_delete_negtive(
            self, servicebus_namespace_connection_string):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_queues(mgmt_service)
        await mgmt_service.create_queue("test_queue")
        queues = await async_pageable_to_list(mgmt_service.list_queues())
        assert len(queues) == 1

        await mgmt_service.delete_queue("test_queue")
        queues = await async_pageable_to_list(mgmt_service.list_queues())
        assert len(queues) == 0

        with pytest.raises(ResourceNotFoundError):
            await mgmt_service.delete_queue("test_queue")

        with pytest.raises(ResourceNotFoundError):
            await mgmt_service.delete_queue("non_existing_queue")

        with pytest.raises(ValueError):
            await mgmt_service.delete_queue("")

        with pytest.raises(TypeError):
            await mgmt_service.delete_queue(queue_name=None)
    async def test_async_mgmt_topic_delete(
            self, servicebus_namespace_connection_string):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        await mgmt_service.create_topic('test_topic')
        topics = await async_pageable_to_list(mgmt_service.list_topics())
        assert len(topics) == 1

        await mgmt_service.create_topic('txt/.-_123')
        topics = await async_pageable_to_list(mgmt_service.list_topics())
        assert len(topics) == 2

        description = await mgmt_service.get_topic('test_topic')
        await mgmt_service.delete_topic(description.name)

        topics = await async_pageable_to_list(mgmt_service.list_topics())
        assert len(topics) == 1 and topics[0].name == 'txt/.-_123'

        description = await mgmt_service.get_topic('txt/.-_123')
        await mgmt_service.delete_topic(description.name)

        topics = await async_pageable_to_list(mgmt_service.list_topics())
        assert len(topics) == 0
Пример #4
0
    async def test_mgmt_queue_async_update_dict_success(
            self, servicebus_namespace_connection_string, servicebus_namespace,
            **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_queues(mgmt_service)
        queue_name = "fjruid"
        queue_description = await mgmt_service.create_queue(queue_name)
        queue_description_dict = dict(queue_description)
        try:
            # Try updating one setting.
            queue_description_dict["lock_duration"] = datetime.timedelta(
                minutes=2)
            await mgmt_service.update_queue(queue_description_dict)

            queue_description = await mgmt_service.get_queue(queue_name)
            assert queue_description.lock_duration == datetime.timedelta(
                minutes=2)

            # Now try updating all settings.
            queue_description_dict = dict(queue_description)
            queue_description_dict["auto_delete_on_idle"] = datetime.timedelta(
                minutes=10)
            queue_description_dict[
                "dead_lettering_on_message_expiration"] = True
            queue_description_dict[
                "default_message_time_to_live"] = datetime.timedelta(
                    minutes=11)
            queue_description_dict[
                "duplicate_detection_history_time_window"] = datetime.timedelta(
                    minutes=12)
            queue_description_dict["enable_batched_operations"] = True
            queue_description_dict["enable_express"] = True
            #queue_description_dict["enable_partitioning"] = True # Cannot be changed after creation
            queue_description_dict["lock_duration"] = datetime.timedelta(
                seconds=13)
            queue_description_dict["max_delivery_count"] = 14
            queue_description_dict["max_size_in_megabytes"] = 3072
            queue_description_dict[
                "forward_to"] = "sb://{}.servicebus.windows.net/{}".format(
                    servicebus_namespace.name, queue_name)
            queue_description_dict[
                "forward_dead_lettered_messages_to"] = "sb://{}.servicebus.windows.net/{}".format(
                    servicebus_namespace.name, queue_name)
            #queue_description_dict["requires_duplicate_detection"] = True # Read only
            #queue_description_dict["requires_session"] = True # Cannot be changed after creation

            await mgmt_service.update_queue(queue_description_dict)
            queue_description = await mgmt_service.get_queue(queue_name)

            assert queue_description.auto_delete_on_idle == datetime.timedelta(
                minutes=10)
            assert queue_description.dead_lettering_on_message_expiration == True
            assert queue_description.default_message_time_to_live == datetime.timedelta(
                minutes=11)
            assert queue_description.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12)
            assert queue_description.enable_batched_operations == True
            assert queue_description.enable_express == True
            #assert queue_description.enable_partitioning == True
            assert queue_description.lock_duration == datetime.timedelta(
                seconds=13)
            assert queue_description.max_delivery_count == 14
            assert queue_description.max_size_in_megabytes == 3072
            assert queue_description.forward_to.endswith(
                ".servicebus.windows.net/{}".format(queue_name))
            # Note: We endswith to avoid the fact that the servicebus_namespace_name is replacered locally but not in the properties bag, and still test this.
            assert queue_description.forward_dead_lettered_messages_to.endswith(
                ".servicebus.windows.net/{}".format(queue_name))
            #assert queue_description.requires_duplicate_detection == True
            #assert queue_description.requires_session == True
        finally:
            await mgmt_service.delete_queue(queue_name)
Пример #5
0
    async def test_async_mgmt_queue_update_success(
            self, servicebus_namespace_connection_string, servicebus_namespace,
            **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_queues(mgmt_service)
        queue_name = "ewuidfj"
        topic_name = "dkfjaks"
        queue_description = await mgmt_service.create_queue(queue_name)
        await mgmt_service.create_topic(topic_name)

        try:
            # Try updating one setting.
            queue_description.lock_duration = datetime.timedelta(minutes=2)
            await mgmt_service.update_queue(queue_description)
            queue_description = await mgmt_service.get_queue(queue_name)
            assert queue_description.lock_duration == datetime.timedelta(
                minutes=2)

            # Update forwarding settings with entity name.
            queue_description.forward_to = topic_name
            queue_description.forward_dead_lettered_messages_to = topic_name
            await mgmt_service.update_queue(queue_description)

            queue_description = await mgmt_service.get_queue(queue_name)
            assert queue_description.forward_dead_lettered_messages_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))
            assert queue_description.forward_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))

            # Update forwarding settings with None.
            queue_description.forward_to = None
            queue_description.forward_dead_lettered_messages_to = None
            await mgmt_service.update_queue(queue_description)

            queue_description = await mgmt_service.get_queue(queue_name)
            assert queue_description.forward_dead_lettered_messages_to is None
            assert queue_description.forward_to is None

            # Now try updating all settings.
            queue_description.auto_delete_on_idle = datetime.timedelta(
                minutes=10)
            queue_description.dead_lettering_on_message_expiration = True
            queue_description.default_message_time_to_live = datetime.timedelta(
                minutes=11)
            queue_description.duplicate_detection_history_time_window = datetime.timedelta(
                minutes=12)
            queue_description.enable_batched_operations = True
            queue_description.enable_express = True
            #queue_description.enable_partitioning = True # Cannot be changed after creation
            queue_description.lock_duration = datetime.timedelta(seconds=13)
            queue_description.max_delivery_count = 14
            queue_description.max_size_in_megabytes = 3072
            queue_description.forward_to = "sb://{}.servicebus.windows.net/{}".format(
                servicebus_namespace.name, queue_name)
            queue_description.forward_dead_lettered_messages_to = "sb://{}.servicebus.windows.net/{}".format(
                servicebus_namespace.name, queue_name)
            #queue_description.requires_duplicate_detection = True # Read only
            #queue_description.requires_session = True # Cannot be changed after creation

            await mgmt_service.update_queue(queue_description)
            queue_description = await mgmt_service.get_queue(queue_name)

            assert queue_description.auto_delete_on_idle == datetime.timedelta(
                minutes=10)
            assert queue_description.dead_lettering_on_message_expiration == True
            assert queue_description.default_message_time_to_live == datetime.timedelta(
                minutes=11)
            assert queue_description.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12)
            assert queue_description.enable_batched_operations == True
            assert queue_description.enable_express == True
            #assert queue_description.enable_partitioning == True
            assert queue_description.lock_duration == datetime.timedelta(
                seconds=13)
            assert queue_description.max_delivery_count == 14
            assert queue_description.max_size_in_megabytes == 3072
            assert queue_description.forward_to.endswith(
                ".servicebus.windows.net/{}".format(queue_name))
            # Note: We endswith to avoid the fact that the servicebus_namespace_name is replacered locally but not in the properties bag, and still test this.
            assert queue_description.forward_dead_lettered_messages_to.endswith(
                ".servicebus.windows.net/{}".format(queue_name))
            #assert queue_description.requires_duplicate_detection == True
            #assert queue_description.requires_session == True

            queue_description.auto_delete_on_idle = "PT10M1S"
            queue_description.default_message_time_to_live = "PT11M2S"
            queue_description.duplicate_detection_history_time_window = "PT12M3S"

            await mgmt_service.update_queue(queue_description)
            queue_description = await mgmt_service.get_queue(queue_name)

            assert queue_description.auto_delete_on_idle == datetime.timedelta(
                minutes=10, seconds=1)
            assert queue_description.default_message_time_to_live == datetime.timedelta(
                minutes=11, seconds=2)
            assert queue_description.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12, seconds=3)

        finally:
            await mgmt_service.delete_queue(queue_name)
            await mgmt_service.delete_topic(topic_name)
            mgmt_service.close()
Пример #6
0
    async def test_async_mgmt_queue_create_with_queue_description(
            self, servicebus_namespace_connection_string, **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_queues(mgmt_service)
        queue_name = "dkldf"
        queue_name_2 = "vjiqjx"
        topic_name = "aghadh"
        await mgmt_service.create_topic(topic_name)
        await mgmt_service.create_queue(
            queue_name,
            auto_delete_on_idle=datetime.timedelta(minutes=10),
            dead_lettering_on_message_expiration=True,
            default_message_time_to_live=datetime.timedelta(minutes=11),
            duplicate_detection_history_time_window=datetime.timedelta(
                minutes=12),
            forward_dead_lettered_messages_to=topic_name,
            forward_to=topic_name,
            enable_batched_operations=True,
            enable_express=True,
            enable_partitioning=True,
            lock_duration=datetime.timedelta(seconds=13),
            max_delivery_count=14,
            max_size_in_megabytes=3072,
            #requires_duplicate_detection=True,
            requires_session=True)

        await mgmt_service.create_queue(
            queue_name_2,
            auto_delete_on_idle="PT10M1S",
            dead_lettering_on_message_expiration=True,
            default_message_time_to_live="PT11M2S",
            duplicate_detection_history_time_window="PT12M3S",
            enable_batched_operations=True,
            enable_express=True,
            enable_partitioning=True,
            forward_dead_lettered_messages_to=topic_name,
            forward_to=topic_name,
            lock_duration="PT13S",
            max_delivery_count=14,
            max_size_in_megabytes=3072,
            requires_session=True)
        try:
            queue = await mgmt_service.get_queue(queue_name)
            assert queue.name == queue_name
            assert queue.auto_delete_on_idle == datetime.timedelta(minutes=10)
            assert queue.dead_lettering_on_message_expiration == True
            assert queue.default_message_time_to_live == datetime.timedelta(
                minutes=11)
            assert queue.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12)
            assert queue.enable_batched_operations == True
            assert queue.forward_dead_lettered_messages_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))
            assert queue.forward_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))
            assert queue.enable_express == True
            assert queue.enable_partitioning == True
            assert queue.lock_duration == datetime.timedelta(seconds=13)
            assert queue.max_delivery_count == 14
            assert queue.max_size_in_megabytes % 3072 == 0
            #assert queue.requires_duplicate_detection == True
            assert queue.requires_session == True

            queue2 = await mgmt_service.get_queue(queue_name_2)
            assert queue2.name == queue_name_2
            assert queue2.auto_delete_on_idle == datetime.timedelta(minutes=10,
                                                                    seconds=1)
            assert queue2.dead_lettering_on_message_expiration == True
            assert queue2.default_message_time_to_live == datetime.timedelta(
                minutes=11, seconds=2)
            assert queue2.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12, seconds=3)
            assert queue2.enable_batched_operations == True
            assert queue2.enable_express == True
            assert queue2.enable_partitioning == True
            assert queue2.forward_dead_lettered_messages_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))
            assert queue2.forward_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))
            assert queue2.lock_duration == datetime.timedelta(seconds=13)
            assert queue2.max_delivery_count == 14
            assert queue2.max_size_in_megabytes % 3072 == 0
            assert queue2.requires_session == True
        finally:
            await mgmt_service.delete_queue(queue_name)
            await mgmt_service.delete_queue(queue_name_2)
            await mgmt_service.delete_topic(topic_name)
            await mgmt_service.close()
Пример #7
0
    async def test_async_mgmt_rule_create(self, servicebus_namespace_connection_string, **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        topic_name = "topic_testaddf"
        subscription_name = "sub_testkkk"
        rule_name_1 = 'test_rule_1'
        rule_name_2 = 'test_rule_2'
        rule_name_3 = 'test_rule_3'
        rule_name_4 = 'test_rule_4'

        correlation_fitler = CorrelationRuleFilter(correlation_id='testcid', properties={
            "key_string": "str1",
            "key_int": 2,
            "key_long": INT32_MAX_VALUE + 3,
            "key_bool": False,
            "key_datetime": datetime(2020, 7, 5, 11, 12, 13),
            "key_duration": timedelta(days=1, hours=2, minutes=3)
        })
        sql_rule_action = SqlRuleAction(sql_expression="SET Priority = @param", parameters={
            "@param": datetime(2020, 7, 5, 11, 12, 13),
        })

        sql_filter = SqlRuleFilter("Priority = @param1", parameters={
            "@param1": "str1",
        })

        bool_filter = TrueRuleFilter()

        try:
            await mgmt_service.create_topic(topic_name)
            await mgmt_service.create_subscription(topic_name, subscription_name)

            await mgmt_service.create_rule(topic_name, subscription_name, rule_name_1, filter=correlation_fitler, action=sql_rule_action)
            rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name_1)
            rule_properties = rule_desc.filter.properties
            assert type(rule_desc.filter) == CorrelationRuleFilter
            assert rule_desc.filter.correlation_id == 'testcid'
            assert rule_desc.action.sql_expression == "SET Priority = @param"
            assert rule_desc.action.parameters["@param"] == datetime(2020, 7, 5, 11, 12, 13)
            assert rule_properties["key_string"] == "str1"
            assert rule_properties["key_int"] == 2
            assert rule_properties["key_long"] == INT32_MAX_VALUE + 3
            assert rule_properties["key_bool"] is False
            assert rule_properties["key_datetime"] == datetime(2020, 7, 5, 11, 12, 13)
            assert rule_properties["key_duration"] == timedelta(days=1, hours=2, minutes=3)

            await mgmt_service.create_rule(topic_name, subscription_name, rule_name_2, filter=sql_filter)
            rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name_2)
            assert type(rule_desc.filter) == SqlRuleFilter
            assert rule_desc.filter.sql_expression == "Priority = @param1"
            assert rule_desc.filter.parameters["@param1"] == "str1"

            await mgmt_service.create_rule(topic_name, subscription_name, rule_name_3, filter=bool_filter)
            rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name_3)
            assert type(rule_desc.filter) == TrueRuleFilter

            await mgmt_service.create_rule(topic_name, subscription_name, rule_name_4)
            rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name_4)
            assert type(rule_desc.filter) == TrueRuleFilter

        finally:
            await mgmt_service.delete_rule(topic_name, subscription_name, rule_name_1)
            await mgmt_service.delete_rule(topic_name, subscription_name, rule_name_2)
            await mgmt_service.delete_rule(topic_name, subscription_name, rule_name_3)
            await mgmt_service.delete_rule(topic_name, subscription_name, rule_name_4)
            await mgmt_service.delete_subscription(topic_name, subscription_name)
            await mgmt_service.delete_topic(topic_name)
Пример #8
0
    async def test_async_mgmt_queue_premium_create_with_queue_description(
            self, servicebus_namespace_connection_string, **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_queues(mgmt_service)
        queue_name = "dkldf"
        queue_name_2 = "vjiqjx"
        queue_name_3 = "rekocd"

        await mgmt_service.create_queue(
            queue_name,
            auto_delete_on_idle=datetime.timedelta(minutes=10),
            dead_lettering_on_message_expiration=True,
            default_message_time_to_live=datetime.timedelta(minutes=11),
            duplicate_detection_history_time_window=datetime.timedelta(
                minutes=12),
            enable_batched_operations=True,
            # enable_express=True,
            # enable_partitioning=True,
            lock_duration=datetime.timedelta(seconds=13),
            max_delivery_count=14,
            max_size_in_megabytes=3072,
            # requires_duplicate_detection=True,
            requires_session=True,
            max_message_size_in_kilobytes=12345)

        await mgmt_service.create_queue(
            queue_name_2,
            auto_delete_on_idle="PT10M1S",
            dead_lettering_on_message_expiration=True,
            default_message_time_to_live="PT11M2S",
            duplicate_detection_history_time_window="PT12M3S",
            enable_batched_operations=True,
            lock_duration="PT13S",
            max_delivery_count=14,
            max_size_in_megabytes=3072,
            requires_session=True
        )  # default max_message_size_in_kilobytes is 1024

        with pytest.raises(HttpResponseError):
            await mgmt_service.create_queue(
                queue_name_3,
                max_message_size_in_kilobytes=1023  # min allowed is 1024
            )

        with pytest.raises(HttpResponseError):
            await mgmt_service.create_queue(
                queue_name_3,
                max_message_size_in_kilobytes=102401  # max allowed is 102400
            )

        try:
            queue = await mgmt_service.get_queue(queue_name)
            assert queue.name == queue_name
            assert queue.auto_delete_on_idle == datetime.timedelta(minutes=10)
            assert queue.dead_lettering_on_message_expiration == True
            assert queue.default_message_time_to_live == datetime.timedelta(
                minutes=11)
            assert queue.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12)
            assert queue.enable_batched_operations == True
            # assert queue.enable_express == True
            # assert queue.enable_partitioning == True
            assert queue.lock_duration == datetime.timedelta(seconds=13)
            assert queue.max_delivery_count == 14
            assert queue.max_size_in_megabytes % 3072 == 0
            # assert queue.requires_duplicate_detection == True
            assert queue.requires_session == True
            assert queue.max_message_size_in_kilobytes == 12345

            queue_2 = await mgmt_service.get_queue(queue_name_2)
            assert queue_2.name == queue_name_2
            assert queue_2.auto_delete_on_idle == datetime.timedelta(
                minutes=10, seconds=1)
            assert queue_2.dead_lettering_on_message_expiration == True
            assert queue_2.default_message_time_to_live == datetime.timedelta(
                minutes=11, seconds=2)
            assert queue_2.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12, seconds=3)
            assert queue_2.enable_batched_operations == True
            assert queue_2.lock_duration == datetime.timedelta(seconds=13)
            assert queue_2.max_delivery_count == 14
            assert queue_2.max_size_in_megabytes % 3072 == 0
            assert queue_2.requires_session == True
            assert queue_2.max_message_size_in_kilobytes == 1024

            queue_2.max_message_size_in_kilobytes = 54321
            await mgmt_service.update_queue(queue_2)
            queue_2_new = await mgmt_service.get_queue(queue_name_2)
            assert queue_2_new.max_message_size_in_kilobytes == 54321

        finally:
            await mgmt_service.delete_queue(queue_name)
            await mgmt_service.delete_queue(queue_name_2)
            await mgmt_service.close()
Пример #9
0
 def __init__(self, arguments):
     super().__init__(arguments)
     connection_string = self.get_from_env(
         "AZURE_SERVICEBUS_CONNECTION_STRING")
     self.async_mgmt_client = ServiceBusAdministrationClient.from_connection_string(
         connection_string)
Пример #10
0
    async def test_async_mgmt_rule_list_and_delete(
            self, servicebus_namespace_connection_string):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        topic_name = "topic_testaddf"
        subscription_name = "sub_testkkk"
        rule_name_1 = 'test_rule_1'
        rule_name_2 = 'test_rule_2'
        rule_name_3 = 'test_rule_3'

        sql_filter_1 = SqlRuleFilter("Priority = 'low'")
        sql_filter_2 = SqlRuleFilter("Priority = 'middle'")
        sql_filter_3 = SqlRuleFilter("Priority = 'high'")

        try:
            await mgmt_service.create_topic(topic_name)
            await mgmt_service.create_subscription(topic_name,
                                                   subscription_name)

            rules = await async_pageable_to_list(
                mgmt_service.list_rules(topic_name, subscription_name))
            assert len(rules) == 1  # by default there is a True filter

            await mgmt_service.create_rule(topic_name,
                                           subscription_name,
                                           rule_name_1,
                                           filter=sql_filter_1)
            await mgmt_service.create_rule(topic_name,
                                           subscription_name,
                                           rule_name_2,
                                           filter=sql_filter_2)
            await mgmt_service.create_rule(topic_name,
                                           subscription_name,
                                           rule_name_3,
                                           filter=sql_filter_3)

            rules = await async_pageable_to_list(
                mgmt_service.list_rules(topic_name, subscription_name))
            assert len(rules) == 3 + 1

            await mgmt_service.delete_rule(topic_name, subscription_name,
                                           rule_name_2)
            rules = await async_pageable_to_list(
                mgmt_service.list_rules(topic_name, subscription_name))
            assert len(rules) == 2 + 1
            assert rules[0].name == "$Default"
            assert rules[1].name == rule_name_1
            assert type(rules[1].filter) == SqlRuleFilter
            assert rules[1].filter.sql_expression == "Priority = 'low'"
            assert rules[2].name == rule_name_3
            assert type(rules[2].filter) == SqlRuleFilter
            assert rules[2].filter.sql_expression == "Priority = 'high'"

            await mgmt_service.delete_rule(topic_name, subscription_name,
                                           rule_name_1)
            await mgmt_service.delete_rule(topic_name, subscription_name,
                                           rule_name_3)

            rules = await async_pageable_to_list(
                mgmt_service.list_rules(topic_name, subscription_name))
            assert len(rules) == 1

        finally:
            await mgmt_service.delete_subscription(topic_name,
                                                   subscription_name)
            await mgmt_service.delete_topic(topic_name)
 async def test_async_mgmt_queue_list_with_parameters(self, servicebus_namespace_connection_string):
     pytest.skip("start_idx and max_count are currently removed, they might come back in the future.")
     mgmt_service = ServiceBusAdministrationClient.from_connection_string(servicebus_namespace_connection_string)
     await run_test_async_mgmt_list_with_parameters(AsyncMgmtQueueListTestHelper(mgmt_service))
Пример #12
0
    async def test_async_mgmt_subscription_update_success(
            self, servicebus_namespace_connection_string, servicebus_namespace,
            **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        topic_name = "fjrui"
        subscription_name = "eqkovc"

        try:
            topic_description = await mgmt_service.create_topic(topic_name)
            subscription_description = await mgmt_service.create_subscription(
                topic_description.name, subscription_name)

            # Try updating one setting.
            subscription_description.lock_duration = datetime.timedelta(
                minutes=2)
            await mgmt_service.update_subscription(topic_description.name,
                                                   subscription_description)
            subscription_description = await mgmt_service.get_subscription(
                topic_name, subscription_name)
            assert subscription_description.lock_duration == datetime.timedelta(
                minutes=2)

            # Now try updating all settings.
            subscription_description.auto_delete_on_idle = datetime.timedelta(
                minutes=10)
            subscription_description.dead_lettering_on_message_expiration = True
            subscription_description.default_message_time_to_live = datetime.timedelta(
                minutes=11)
            subscription_description.lock_duration = datetime.timedelta(
                seconds=12)
            subscription_description.max_delivery_count = 14
            # topic_description.enable_partitioning = True # Cannot be changed after creation
            # topic_description.requires_session = True # Cannot be changed after creation

            await mgmt_service.update_subscription(topic_description.name,
                                                   subscription_description)
            subscription_description = await mgmt_service.get_subscription(
                topic_description.name, subscription_name)

            assert subscription_description.auto_delete_on_idle == datetime.timedelta(
                minutes=10)
            assert subscription_description.dead_lettering_on_message_expiration == True
            assert subscription_description.default_message_time_to_live == datetime.timedelta(
                minutes=11)
            assert subscription_description.max_delivery_count == 14
            assert subscription_description.lock_duration == datetime.timedelta(
                seconds=12)
            # assert topic_description.enable_partitioning == True
            # assert topic_description.requires_session == True

            # Finally, test forward_to (separately, as it changes auto_delete_on_idle when you enable it.)
            subscription_description.forward_to = "sb://{}.servicebus.windows.net/{}".format(
                servicebus_namespace.name, topic_name)
            subscription_description.forward_dead_lettered_messages_to = "sb://{}.servicebus.windows.net/{}".format(
                servicebus_namespace.name, topic_name)
            await mgmt_service.update_subscription(topic_description.name,
                                                   subscription_description)
            subscription_description = await mgmt_service.get_subscription(
                topic_description.name, subscription_name)
            # Note: We endswith to avoid the fact that the servicebus_namespace_name is replacered locally but not in the properties bag, and still test this.
            assert subscription_description.forward_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))
            assert subscription_description.forward_dead_lettered_messages_to.endswith(
                ".servicebus.windows.net/{}".format(topic_name))

        finally:
            await mgmt_service.delete_subscription(topic_name,
                                                   subscription_name)
            await mgmt_service.delete_topic(topic_name)
    async def test_mgmt_topic_async_update_dict_success(self, servicebus_namespace_connection_string, **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        topic_name = "fjruid"

        try:
            topic_description = await mgmt_service.create_topic(topic_name)
            topic_description_dict = dict(topic_description)

            # Try updating one setting.
            topic_description_dict["default_message_time_to_live"] = datetime.timedelta(minutes=2)
            await mgmt_service.update_topic(topic_description_dict)
            topic_description = await mgmt_service.get_topic(topic_name)
            assert topic_description.default_message_time_to_live == datetime.timedelta(minutes=2)

            # Now try updating all settings.
            topic_description_dict = dict(topic_description)
            topic_description_dict["auto_delete_on_idle"] = datetime.timedelta(minutes=10)
            topic_description_dict["default_message_time_to_live"] = datetime.timedelta(minutes=11)
            topic_description_dict["duplicate_detection_history_time_window"] = datetime.timedelta(minutes=12)
            topic_description_dict["enable_batched_operations"] = True
            topic_description_dict["enable_express"] = True
            # topic_description_dict["enable_partitioning"] = True # Cannot be changed after creation
            topic_description_dict["max_size_in_megabytes"] = 3072
            # topic_description_dict["requires_duplicate_detection"] = True # Read only
            # topic_description_dict["requires_session"] = True # Cannot be changed after creation
            topic_description_dict["support_ordering"] = True

            await mgmt_service.update_topic(topic_description_dict)
            topic_description = await mgmt_service.get_topic(topic_name)

            assert topic_description.auto_delete_on_idle == datetime.timedelta(minutes=10)
            assert topic_description.default_message_time_to_live == datetime.timedelta(minutes=11)
            assert topic_description.duplicate_detection_history_time_window == datetime.timedelta(minutes=12)
            assert topic_description.enable_batched_operations == True
            assert topic_description.enable_express == True
            # assert topic_description.enable_partitioning == True
            assert topic_description.max_size_in_megabytes == 3072
            # assert topic_description.requires_duplicate_detection == True
            # assert topic_description.requires_session == True
            assert topic_description.support_ordering == True

            # updating all settings with keyword arguments.
            await mgmt_service.update_topic(
                dict(topic_description),
                auto_delete_on_idle=datetime.timedelta(minutes=14),
                default_message_time_to_live=datetime.timedelta(minutes=15),
                duplicate_detection_history_time_window=datetime.timedelta(minutes=16),
                enable_batched_operations=False,
                enable_express=False,
                max_size_in_megabytes=2048,
                support_ordering=False
            )
            topic_description = await mgmt_service.get_topic(topic_name)

            assert topic_description.auto_delete_on_idle == datetime.timedelta(minutes=14)
            assert topic_description.default_message_time_to_live == datetime.timedelta(minutes=15)
            assert topic_description.duplicate_detection_history_time_window == datetime.timedelta(minutes=16)
            assert topic_description.enable_batched_operations == False
            assert topic_description.enable_express == False
            # assert topic_description.enable_partitioning == True
            assert topic_description.max_size_in_megabytes == 2048
            # assert topic_description.requires_duplicate_detection == True
            # assert topic_description.requires_session == True
            assert topic_description.support_ordering == False
        finally:
            await mgmt_service.delete_topic(topic_name)
            await mgmt_service.close()
    async def test_async_mgmt_topic_premium_create_with_topic_description(self, servicebus_namespace_connection_string, **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        topic_name = "iweidk"
        topic_name_2 = "dkozq"
        topic_name_3 = "rekocd"
        try:
            await mgmt_service.create_topic(
                topic_name=topic_name,
                auto_delete_on_idle=datetime.timedelta(minutes=10),
                default_message_time_to_live=datetime.timedelta(minutes=11),
                duplicate_detection_history_time_window=datetime.timedelta(minutes=12),
                enable_batched_operations=True,
                max_size_in_megabytes=3072,
                max_message_size_in_kilobytes=12345
            )
            topic = await mgmt_service.get_topic(topic_name)
            assert topic.name == topic_name
            assert topic.auto_delete_on_idle == datetime.timedelta(minutes=10)
            assert topic.default_message_time_to_live == datetime.timedelta(minutes=11)
            assert topic.duplicate_detection_history_time_window == datetime.timedelta(minutes=12)
            assert topic.enable_batched_operations
            assert topic.max_size_in_megabytes % 3072 == 0
            assert topic.max_message_size_in_kilobytes == 12345

            await mgmt_service.create_topic(
                topic_name=topic_name_2,
                auto_delete_on_idle="PT10M",
                default_message_time_to_live="PT11M",
                duplicate_detection_history_time_window="PT12M",
                enable_batched_operations=True,
                max_size_in_megabytes=3072
            )
            topic_2 = await mgmt_service.get_topic(topic_name_2)
            assert topic_2.name == topic_name_2
            assert topic_2.auto_delete_on_idle == datetime.timedelta(minutes=10)
            assert topic_2.default_message_time_to_live == datetime.timedelta(minutes=11)
            assert topic_2.duplicate_detection_history_time_window == datetime.timedelta(minutes=12)
            assert topic_2.enable_batched_operations
            assert topic_2.max_size_in_megabytes % 3072 == 0
            assert topic_2.max_message_size_in_kilobytes == 1024

            with pytest.raises(HttpResponseError):
                await mgmt_service.create_topic(
                    topic_name=topic_name_3,
                    max_message_size_in_kilobytes=1023
                )

            with pytest.raises(HttpResponseError):
                await mgmt_service.create_topic(
                    topic_name=topic_name_3,
                    max_message_size_in_kilobytes=102401
                )

            topic_2.max_message_size_in_kilobytes = 54321
            await mgmt_service.update_topic(topic_2)
            topic_2_new = await mgmt_service.get_topic(topic_name_2)
            assert topic_2_new.max_message_size_in_kilobytes == 54321

        finally:
            await mgmt_service.delete_topic(topic_name)
            await mgmt_service.delete_topic(topic_name_2)
    async def test_async_mgmt_topic_update_success(
            self, servicebus_namespace_connection_string, **kwargs):
        mgmt_service = ServiceBusAdministrationClient.from_connection_string(
            servicebus_namespace_connection_string)
        await clear_topics(mgmt_service)
        topic_name = "fjrui"
        try:
            topic_description = await mgmt_service.create_topic(topic_name)

            # Try updating one setting.
            topic_description.default_message_time_to_live = datetime.timedelta(
                minutes=2)
            await mgmt_service.update_topic(topic_description)
            topic_description = await mgmt_service.get_topic(topic_name)
            assert topic_description.default_message_time_to_live == datetime.timedelta(
                minutes=2)

            # Now try updating all settings.
            topic_description.auto_delete_on_idle = datetime.timedelta(
                minutes=10)
            topic_description.default_message_time_to_live = datetime.timedelta(
                minutes=11)
            topic_description.duplicate_detection_history_time_window = datetime.timedelta(
                minutes=12)
            topic_description.enable_batched_operations = True
            topic_description.enable_express = True
            # topic_description.enable_partitioning = True # Cannot be changed after creation
            topic_description.max_size_in_megabytes = 3072
            # topic_description.requires_duplicate_detection = True # Read only
            # topic_description.requires_session = True # Cannot be changed after creation
            topic_description.support_ordering = True

            await mgmt_service.update_topic(topic_description)
            topic_description = await mgmt_service.get_topic(topic_name)

            assert topic_description.auto_delete_on_idle == datetime.timedelta(
                minutes=10)
            assert topic_description.default_message_time_to_live == datetime.timedelta(
                minutes=11)
            assert topic_description.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12)
            assert topic_description.enable_batched_operations == True
            assert topic_description.enable_express == True
            # assert topic_description.enable_partitioning == True
            assert topic_description.max_size_in_megabytes == 3072
            # assert topic_description.requires_duplicate_detection == True
            # assert topic_description.requires_session == True
            assert topic_description.support_ordering == True

            topic_description.auto_delete_on_idle = "PT10M1S"
            topic_description.default_message_time_to_live = "PT11M2S"
            topic_description.duplicate_detection_history_time_window = "PT12M3S"
            await mgmt_service.update_topic(topic_description)
            topic_description = await mgmt_service.get_topic(topic_name)

            assert topic_description.auto_delete_on_idle == datetime.timedelta(
                minutes=10, seconds=1)
            assert topic_description.default_message_time_to_live == datetime.timedelta(
                minutes=11, seconds=2)
            assert topic_description.duplicate_detection_history_time_window == datetime.timedelta(
                minutes=12, seconds=3)

        finally:
            await mgmt_service.delete_topic(topic_name)