|
36 | 36 | import java.util.Set; |
37 | 37 |
|
38 | 38 | public class HistorySubscriptionTest extends TestCase { |
39 | | - private static final CandleSymbol CANDLE_SYMBOL = |
40 | | - CandleSymbol.valueOf("TEST", CandlePeriod.valueOf(1, CandleType.MINUTE)); |
41 | | - private static final TimeSeriesSubscriptionSymbol<CandleSymbol> SUB_SYMBOL = |
42 | | - new TimeSeriesSubscriptionSymbol<>(CANDLE_SYMBOL, 0); |
43 | 39 |
|
44 | 40 | public void testEmptySubscription() { |
45 | | - // tests [QD-1230] - absence of phantom subscription if not actually subscribed |
| 41 | + // tests [QD-1230] and [QD-1232] - absence of phantom subscription if not actually subscribed |
46 | 42 | QDFactory.getDefaultScheme(); |
47 | 43 | System.out.println(); |
48 | | - int result = 0; |
49 | | - for (int mask = 0; mask < 16; mask++) |
50 | | - result += checkEmptySub((mask & 8) != 0, (mask & 4) != 0, (mask & 2) != 0, (mask & 1) != 0) ? 0 : 1; |
51 | | - assertEquals("tests failed: " + result, 0, result); |
| 44 | + int tests = 0; |
| 45 | + int failures = 0; |
| 46 | + for (int mask = 0; mask < 16; mask++) { |
| 47 | + for (int size = 1; size < 100; size *= 2) { |
| 48 | + tests++; |
| 49 | + if (!checkEmptySub((mask & 8) != 0, (mask & 4) != 0, (mask & 2) != 0, (mask & 1) != 0, size)) |
| 50 | + failures++; |
| 51 | + } |
| 52 | + } |
| 53 | + System.out.println((tests - failures) + " tests passed, " + failures + " tests failed"); |
| 54 | + assertEquals("tests failed: " + failures, 0, failures); |
52 | 55 | } |
53 | 56 |
|
54 | | - private boolean checkEmptySub(boolean storeEverything, boolean getPromise, boolean subscribe, boolean publish) { |
| 57 | + private static CandleSymbol symbol(int i) { |
| 58 | + return CandleSymbol.valueOf("S" + i, CandlePeriod.valueOf(1, CandleType.MINUTE)); |
| 59 | + } |
| 60 | + |
| 61 | + private boolean checkEmptySub(boolean storeEverything, boolean promise, boolean subscribe, boolean publish, int size) { |
55 | 62 | System.out.println("testing storeEverything " + storeEverything + |
56 | | - ", getPromise " + getPromise + ", subscribe " + subscribe + ", publish " + publish); |
| 63 | + ", promise " + promise + ", subscribe " + subscribe + ", publish " + publish + ", size " + size); |
57 | 64 |
|
58 | 65 | DXEndpoint endpoint = DXEndpoint.newBuilder() |
59 | 66 | .withRole(DXEndpoint.Role.LOCAL_HUB) |
60 | 67 | .withProperty(DXEndpoint.DXENDPOINT_STORE_EVERYTHING_PROPERTY, String.valueOf(storeEverything)) |
61 | 68 | .build(); |
62 | 69 | endpoint.executor(Runnable::run); |
63 | 70 |
|
64 | | - Promise<List<Candle>> promise = getPromise && publish ? |
65 | | - endpoint.getFeed().getTimeSeriesPromise(Candle.class, CANDLE_SYMBOL, 0, 1000) : |
66 | | - Promise.completed(Collections.singletonList(new Candle(CANDLE_SYMBOL))); |
| 71 | + List<Promise<List<Candle>>> promises = new ArrayList<>(); |
| 72 | + if (promise && publish) { |
| 73 | + for (int i = 0; i < size; i++) { |
| 74 | + promises.add(endpoint.getFeed().getTimeSeriesPromise(Candle.class, symbol(i), 0, 1000)); |
| 75 | + } |
| 76 | + } |
67 | 77 | ArrayList<Candle> events = new ArrayList<>(); |
68 | 78 | DXFeedSubscription<Candle> sub = new DXFeedSubscription<>(Candle.class); |
69 | 79 | sub.addEventListener(events::addAll); |
70 | | - sub.setSymbols(SUB_SYMBOL); |
71 | | - if (subscribe) |
72 | | - sub.attach(endpoint.getFeed()); |
| 80 | + if (subscribe) { |
| 81 | + List<TimeSeriesSubscriptionSymbol<CandleSymbol>> symbols = new ArrayList<>(); |
| 82 | + for (int i = 0; i < size; i++) { |
| 83 | + symbols.add(new TimeSeriesSubscriptionSymbol<>(symbol(i), 0)); |
| 84 | + } |
| 85 | + sub.setSymbols(symbols); |
| 86 | + } |
| 87 | + sub.attach(endpoint.getFeed()); |
73 | 88 | assertEquals("garbage events received", 0, events.size()); |
74 | | - if (publish) |
75 | | - endpoint.getPublisher().publishEvents(Collections.singletonList(new Candle(CANDLE_SYMBOL))); |
76 | | - assertEquals("events received", subscribe && publish ? 1 : 0, events.size()); |
| 89 | + if (publish) { |
| 90 | + List<Candle> candles = new ArrayList<>(); |
| 91 | + for (int i = 0; i < size; i++) { |
| 92 | + candles.add(new Candle(symbol(i))); |
| 93 | + } |
| 94 | + endpoint.getPublisher().publishEvents(candles); |
| 95 | + } |
| 96 | + assertEquals("events received", subscribe && publish ? size : 0, events.size()); |
77 | 97 | sub.setSymbols(); |
78 | 98 | sub.close(); |
79 | | - assertEquals("events received", subscribe && publish ? 1 : 0, events.size()); |
80 | | - assertEquals("promise received", 1, promise.getResult().size()); |
| 99 | + assertEquals("events received", subscribe && publish ? size : 0, events.size()); |
| 100 | + promises.forEach(p -> assertEquals("promise completed", 1, p.getResult().size())); |
81 | 101 |
|
82 | 102 | boolean result = assertEmptySub(endpoint); |
83 | 103 | endpoint.close(); |
|
0 commit comments