3
3
import io .netty .buffer .ByteBuf ;
4
4
import io .netty .buffer .UnpooledByteBufAllocator ;
5
5
import io .rsocket .core .StressSubscriber ;
6
+ import io .rsocket .utils .FastLogger ;
7
+ import java .util .Arrays ;
8
+ import java .util .ConcurrentModificationException ;
6
9
import org .openjdk .jcstress .annotations .Actor ;
7
10
import org .openjdk .jcstress .annotations .Arbiter ;
8
11
import org .openjdk .jcstress .annotations .Expect ;
14
17
import org .openjdk .jcstress .infra .results .L_Result ;
15
18
import reactor .core .Fuseable ;
16
19
import reactor .core .publisher .Hooks ;
20
+ import reactor .util .Logger ;
17
21
18
22
public abstract class UnboundedProcessorStressTest {
19
23
20
24
static {
21
25
Hooks .onErrorDropped (t -> {});
22
26
}
23
27
24
- final UnboundedProcessor unboundedProcessor = new UnboundedProcessor ();
28
+ final Logger logger = new FastLogger (getClass ().getName ());
29
+
30
+ final UnboundedProcessor unboundedProcessor = new UnboundedProcessor (logger );
25
31
26
32
@ JCStressTest
27
33
@ Outcome (
@@ -145,6 +151,8 @@ public void arbiter(LLL_Result r) {
145
151
stressSubscriber .values .forEach (ByteBuf ::release );
146
152
147
153
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
154
+
155
+ checkOutcomes (this , r .toString (), logger );
148
156
}
149
157
}
150
158
@@ -270,6 +278,8 @@ public void arbiter(LLL_Result r) {
270
278
stressSubscriber .values .forEach (ByteBuf ::release );
271
279
272
280
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
281
+
282
+ checkOutcomes (this , r .toString (), logger );
273
283
}
274
284
}
275
285
@@ -375,6 +385,8 @@ public void arbiter(LLL_Result r) {
375
385
stressSubscriber .values .forEach (ByteBuf ::release );
376
386
377
387
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
388
+
389
+ checkOutcomes (this , r .toString (), logger );
378
390
}
379
391
}
380
392
@@ -476,6 +488,8 @@ public void arbiter(LLL_Result r) {
476
488
stressSubscriber .values .forEach (ByteBuf ::release );
477
489
478
490
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
491
+
492
+ checkOutcomes (this , r .toString (), logger );
479
493
}
480
494
}
481
495
@@ -578,6 +592,8 @@ public void arbiter(LLL_Result r) {
578
592
stressSubscriber .values .forEach (ByteBuf ::release );
579
593
580
594
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
595
+
596
+ checkOutcomes (this , r .toString (), logger );
581
597
}
582
598
}
583
599
@@ -701,6 +717,8 @@ public void arbiter(LLL_Result r) {
701
717
stressSubscriber .values .forEach (ByteBuf ::release );
702
718
703
719
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
720
+
721
+ checkOutcomes (this , r .toString (), logger );
704
722
}
705
723
}
706
724
@@ -781,6 +799,8 @@ public void arbiter(LLL_Result r) {
781
799
stressSubscriber .values .forEach (ByteBuf ::release );
782
800
783
801
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
802
+
803
+ checkOutcomes (this , r .toString (), logger );
784
804
}
785
805
}
786
806
@@ -837,9 +857,15 @@ public void arbiter(LLL_Result r) {
837
857
+ stressSubscriber .onErrorCalls * 2
838
858
+ stressSubscriber .droppedErrors .size () * 3 ;
839
859
860
+ if (stressSubscriber .concurrentOnNext || stressSubscriber .concurrentOnComplete ) {
861
+ throw new ConcurrentModificationException ("boo" );
862
+ }
863
+
840
864
stressSubscriber .values .forEach (ByteBuf ::release );
841
865
842
866
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
867
+
868
+ checkOutcomes (this , r .toString (), logger );
843
869
}
844
870
}
845
871
@@ -892,6 +918,8 @@ public void arbiter(LLL_Result r) {
892
918
stressSubscriber .values .forEach (ByteBuf ::release );
893
919
894
920
r .r3 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
921
+
922
+ checkOutcomes (this , r .toString (), logger );
895
923
}
896
924
}
897
925
@@ -1107,6 +1135,8 @@ public void arbiter(LLLL_Result r) {
1107
1135
stressSubscriber .values .forEach (ByteBuf ::release );
1108
1136
1109
1137
r .r4 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
1138
+
1139
+ checkOutcomes (this , r .toString (), logger );
1110
1140
}
1111
1141
}
1112
1142
@@ -1238,6 +1268,8 @@ public void arbiter(LLLL_Result r) {
1238
1268
stressSubscriber .values .forEach (ByteBuf ::release );
1239
1269
1240
1270
r .r4 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
1271
+
1272
+ checkOutcomes (this , r .toString (), logger );
1241
1273
}
1242
1274
}
1243
1275
@@ -1390,6 +1422,8 @@ public void arbiter(LLLL_Result r) {
1390
1422
stressSubscriber .values .forEach (ByteBuf ::release );
1391
1423
1392
1424
r .r4 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
1425
+
1426
+ checkOutcomes (this , r .toString (), logger );
1393
1427
}
1394
1428
}
1395
1429
@@ -1522,6 +1556,8 @@ public void arbiter(LLLL_Result r) {
1522
1556
stressSubscriber .values .forEach (ByteBuf ::release );
1523
1557
1524
1558
r .r4 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
1559
+
1560
+ checkOutcomes (this , r .toString (), logger );
1525
1561
}
1526
1562
}
1527
1563
@@ -1587,6 +1623,8 @@ public void arbiter(LLLL_Result r) {
1587
1623
stressSubscriber .values .forEach (ByteBuf ::release );
1588
1624
1589
1625
r .r4 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
1626
+
1627
+ checkOutcomes (this , r .toString (), logger );
1590
1628
}
1591
1629
}
1592
1630
@@ -1652,6 +1690,8 @@ public void arbiter(LLLL_Result r) {
1652
1690
stressSubscriber .values .forEach (ByteBuf ::release );
1653
1691
1654
1692
r .r4 = byteBuf1 .refCnt () + byteBuf2 .refCnt () + byteBuf3 .refCnt () + byteBuf4 .refCnt ();
1693
+
1694
+ checkOutcomes (this , r .toString (), logger );
1655
1695
}
1656
1696
}
1657
1697
@@ -1678,6 +1718,16 @@ public void subscribe2() {
1678
1718
@ Arbiter
1679
1719
public void arbiter (L_Result r ) {
1680
1720
r .r1 = stressSubscriber1 .onErrorCalls + stressSubscriber2 .onErrorCalls ;
1721
+
1722
+ checkOutcomes (this , r .toString (), logger );
1723
+ }
1724
+ }
1725
+
1726
+ static void checkOutcomes (Object instance , String result , Logger logger ) {
1727
+ if (Arrays .stream (instance .getClass ().getDeclaredAnnotationsByType (Outcome .class ))
1728
+ .flatMap (o -> Arrays .stream (o .id ()))
1729
+ .noneMatch (s -> s .equalsIgnoreCase (result ))) {
1730
+ throw new RuntimeException (result + " " + logger );
1681
1731
}
1682
1732
}
1683
1733
}
0 commit comments