|
18 | 18 | */ |
19 | 19 | package org.apache.pulsar.broker.service; |
20 | 20 |
|
| 21 | +import static org.assertj.core.api.Assertions.assertThat; |
21 | 22 | import static org.mockito.Mockito.spy; |
22 | 23 | import static org.testng.AssertJUnit.assertEquals; |
23 | 24 | import static org.testng.AssertJUnit.assertNotNull; |
24 | 25 | import static org.testng.AssertJUnit.assertNull; |
| 26 | +import java.time.Duration; |
25 | 27 | import java.util.HashSet; |
26 | 28 | import java.util.List; |
27 | 29 | import java.util.Map; |
| 30 | +import java.util.Optional; |
28 | 31 | import java.util.Set; |
29 | 32 | import java.util.UUID; |
30 | 33 | import java.util.concurrent.CompletableFuture; |
|
45 | 48 | import org.apache.pulsar.common.policies.data.ClusterData; |
46 | 49 | import org.apache.pulsar.common.policies.data.TenantInfoImpl; |
47 | 50 | import org.apache.pulsar.common.policies.data.TopicPolicies; |
48 | | -import org.assertj.core.api.Assertions; |
49 | 51 | import org.awaitility.Awaitility; |
50 | 52 | import org.mockito.Mockito; |
51 | 53 | import org.testng.Assert; |
@@ -319,12 +321,12 @@ public void testGetTopicPoliciesWithCleanCache() throws Exception { |
319 | 321 | spy(new ConcurrentHashMap<TopicName, TopicPolicies>()); |
320 | 322 | FieldUtils.writeDeclaredField(topicPoliciesService, "policiesCache", spyPoliciesCache, true); |
321 | 323 |
|
322 | | - Awaitility.await().untilAsserted(() -> Assertions.assertThat( |
| 324 | + Awaitility.await().untilAsserted(() -> assertThat( |
323 | 325 | TopicPolicyTestUtils.getTopicPolicies(topicPoliciesService, TopicName.get(topic))).isNull()); |
324 | 326 |
|
325 | 327 | admin.topicPolicies().setMaxConsumersPerSubscription(topic, 1); |
326 | 328 | Awaitility.await().untilAsserted(() -> { |
327 | | - Assertions.assertThat(TopicPolicyTestUtils.getTopicPolicies(pulsar.getTopicPoliciesService(), |
| 329 | + assertThat(TopicPolicyTestUtils.getTopicPolicies(pulsar.getTopicPoliciesService(), |
328 | 330 | TopicName.get(topic))).isNotNull(); |
329 | 331 | }); |
330 | 332 |
|
@@ -421,4 +423,50 @@ public void testPrepareInitPoliciesCacheAsyncWhenNamespaceBeingDeleted() throws |
421 | 423 | service.prepareInitPoliciesCacheAsync(namespaceName).get(); |
422 | 424 | admin.namespaces().deleteNamespace(NAMESPACE5); |
423 | 425 | } |
| 426 | + |
| 427 | + @Test |
| 428 | + public void testCreateNamespaceEventsSystemTopicFactoryException() throws Exception { |
| 429 | + final String namespace = "system-topic/namespace-6"; |
| 430 | + |
| 431 | + admin.namespaces().createNamespace(namespace); |
| 432 | + |
| 433 | + TopicName topicName = TopicName.get("persistent", NamespaceName.get(namespace), "topic-1"); |
| 434 | + |
| 435 | + SystemTopicBasedTopicPoliciesService service = |
| 436 | + Mockito.spy((SystemTopicBasedTopicPoliciesService) pulsar.getTopicPoliciesService()); |
| 437 | + |
| 438 | + // inject exception when create NamespaceEventsSystemTopicFactory |
| 439 | + Mockito.doThrow(new RuntimeException("test exception")) |
| 440 | + .doCallRealMethod() |
| 441 | + .when(service) |
| 442 | + .getNamespaceEventsSystemTopicFactory(); |
| 443 | + |
| 444 | + CompletableFuture<Optional<TopicPolicies>> topicPoliciesFuture; |
| 445 | + Optional<TopicPolicies> topicPoliciesOptional; |
| 446 | + try { |
| 447 | + topicPoliciesFuture = |
| 448 | + service.getTopicPoliciesAsync(topicName, TopicPoliciesService.GetType.LOCAL_ONLY); |
| 449 | + topicPoliciesOptional = topicPoliciesFuture.join(); |
| 450 | + Assert.fail(); |
| 451 | + } catch (Exception e) { |
| 452 | + Assert.assertTrue(e.getCause().getMessage().contains("test exception")); |
| 453 | + } |
| 454 | + |
| 455 | + Awaitility.await().untilAsserted(() -> { |
| 456 | + assertThat(service.updateTopicPoliciesAsync(topicName, false, false, topicPolicies -> |
| 457 | + topicPolicies.setMaxConsumerPerTopic(10))) |
| 458 | + .succeedsWithin(Duration.ofSeconds(2)); |
| 459 | + }); |
| 460 | + |
| 461 | + topicPoliciesFuture = |
| 462 | + service.getTopicPoliciesAsync(topicName, TopicPoliciesService.GetType.LOCAL_ONLY); |
| 463 | + topicPoliciesOptional = topicPoliciesFuture.join(); |
| 464 | + |
| 465 | + Assert.assertNotNull(topicPoliciesOptional); |
| 466 | + Assert.assertTrue(topicPoliciesOptional.isPresent()); |
| 467 | + |
| 468 | + TopicPolicies topicPolicies = topicPoliciesOptional.get(); |
| 469 | + Assert.assertNotNull(topicPolicies); |
| 470 | + Assert.assertEquals(topicPolicies.getMaxConsumerPerTopic(), 10); |
| 471 | + } |
424 | 472 | } |
0 commit comments