|
11 | 11 | import java.util.ArrayList; |
12 | 12 | import java.util.Collections; |
13 | 13 | import java.util.HashMap; |
| 14 | +import java.util.HashSet; |
14 | 15 | import java.util.List; |
15 | 16 | import java.util.Map; |
16 | 17 | import java.util.Optional; |
17 | 18 | import java.util.Properties; |
| 19 | +import java.util.Set; |
18 | 20 | import java.util.UUID; |
| 21 | +import java.util.concurrent.ExecutorService; |
| 22 | +import java.util.concurrent.Executors; |
| 23 | +import java.util.concurrent.ScheduledExecutorService; |
| 24 | +import java.util.concurrent.TimeUnit; |
19 | 25 |
|
20 | 26 | import org.testng.Assert; |
21 | 27 | import org.testng.annotations.Test; |
@@ -654,4 +660,35 @@ public void testMutation() { |
654 | 660 | Assert.assertEquals(request.getQuery(), expectedSql); |
655 | 661 | Assert.assertEquals(request.getStatements().get(0), expectedSql); |
656 | 662 | } |
| 663 | + |
| 664 | + @Test |
| 665 | + public void testConcurrentUse() { |
| 666 | + ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build()); |
| 667 | + Assert.assertNotNull(request); |
| 668 | + |
| 669 | + ScheduledExecutorService executor = Executors.newScheduledThreadPool(3); |
| 670 | + |
| 671 | + final List<ClickHouseRequest<?>> sealedRequests = new ArrayList<>(); |
| 672 | + |
| 673 | + for (int i = 0; i < 3; i++) { |
| 674 | + executor.scheduleWithFixedDelay(() -> { |
| 675 | + String queryID = UUID.randomUUID().toString(); |
| 676 | +// System.out.println(System.currentTimeMillis() + " Thread " + Thread.currentThread().getId() + " qId: " + queryID); |
| 677 | + sealedRequests.add(request.query("select 1", queryID).seal()); |
| 678 | + }, 100, 100, TimeUnit.MILLISECONDS); |
| 679 | + } |
| 680 | + |
| 681 | + try { |
| 682 | + Thread.sleep(1000); |
| 683 | + } catch (InterruptedException e) { |
| 684 | + Assert.fail("Thread sleep interrupted"); |
| 685 | + } |
| 686 | + executor.shutdown(); |
| 687 | + final Set<String> queryIDs = new HashSet<>(); |
| 688 | + for (ClickHouseRequest<?> r : sealedRequests) { |
| 689 | +// System.out.println(queryIDs); |
| 690 | + Assert.assertTrue(queryIDs.add(r.getQueryId().get()), "Query ID should be unique: " + |
| 691 | + r.getQueryId().get()); |
| 692 | + } |
| 693 | + } |
657 | 694 | } |
0 commit comments