Skip to content

Commit 42b0a70

Browse files
akarnokdviktorklang
authored andcommitted
TCK: Fail early if registerOnSubscribe is not called
1 parent ebb3752 commit 42b0a70

File tree

2 files changed

+186
-0
lines changed

2 files changed

+186
-0
lines changed

tck/src/main/java/org/reactivestreams/tck/SubscriberWhiteboxVerification.java

+1
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ public WhiteboxTestStage(TestEnvironment env, boolean runDefaultInit) throws Int
539539
probe = new WhiteboxSubscriberProbe<T>(env, subscriber);
540540
subscribe(createSubscriber(probe));
541541
probe.puppet.expectCompletion(env.defaultTimeoutMillis(), String.format("Subscriber %s did not `registerOnSubscribe`", sub()));
542+
env.verifyNoAsyncErrorsNoDelay();
542543
}
543544
}
544545

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
/************************************************************************
2+
* Licensed under Public Domain (CC0) *
3+
* *
4+
* To the extent possible under law, the person who associated CC0 with *
5+
* this code has waived all copyright and related or neighboring *
6+
* rights to this code. *
7+
* *
8+
* You should have received a copy of the CC0 legalcode along with this *
9+
* work. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.*
10+
************************************************************************/
11+
12+
package org.reactivestreams.tck;
13+
14+
import org.reactivestreams.*;
15+
import org.testng.annotations.Test;
16+
17+
/**
18+
* This test verifies that the SubscriberWhiteboxVerification reports that
19+
* WhiteboxSubscriberProbe.registerOnSubscribe was not called during the setup
20+
* of each test.
21+
*/
22+
@Test
23+
public class SubscriberNoRegisterOnSubscribeTest extends SubscriberWhiteboxVerification<Integer> {
24+
25+
public SubscriberNoRegisterOnSubscribeTest() {
26+
super(new TestEnvironment());
27+
}
28+
29+
@Override
30+
public Subscriber<Integer> createSubscriber(final WhiteboxSubscriberProbe<Integer> probe) {
31+
return new Subscriber<Integer>() {
32+
@Override
33+
public void onSubscribe(final Subscription s) {
34+
// deliberately not calling probe.registerOnSubscribe()
35+
}
36+
37+
@Override
38+
public void onNext(Integer integer) {
39+
probe.registerOnNext(integer);
40+
}
41+
42+
@Override
43+
public void onError(Throwable t) {
44+
probe.registerOnError(t);
45+
}
46+
47+
@Override
48+
public void onComplete() {
49+
probe.registerOnComplete();
50+
}
51+
};
52+
}
53+
54+
@Override
55+
public Integer createElement(int element) {
56+
return element;
57+
}
58+
59+
void assertMessage(AssertionError ex) {
60+
String message = ex.toString();
61+
if (!message.contains(("did not `registerOnSubscribe` within"))) {
62+
throw ex;
63+
}
64+
}
65+
66+
@Test
67+
@Override
68+
public void required_exerciseWhiteboxHappyPath() throws Throwable {
69+
try {
70+
super.required_exerciseWhiteboxHappyPath();
71+
} catch (AssertionError ex) {
72+
assertMessage(ex);
73+
}
74+
}
75+
76+
@Test
77+
@Override
78+
public void required_spec201_mustSignalDemandViaSubscriptionRequest() throws Throwable {
79+
try {
80+
super.required_spec201_mustSignalDemandViaSubscriptionRequest();
81+
} catch (AssertionError ex) {
82+
assertMessage(ex);
83+
}
84+
}
85+
86+
@Test
87+
@Override
88+
public void required_spec205_mustCallSubscriptionCancelIfItAlreadyHasAnSubscriptionAndReceivesAnotherOnSubscribeSignal() throws Throwable {
89+
try {
90+
super.required_spec205_mustCallSubscriptionCancelIfItAlreadyHasAnSubscriptionAndReceivesAnotherOnSubscribeSignal();
91+
} catch (AssertionError ex) {
92+
assertMessage(ex);
93+
}
94+
}
95+
96+
@Test
97+
@Override
98+
public void required_spec208_mustBePreparedToReceiveOnNextSignalsAfterHavingCalledSubscriptionCancel() throws Throwable {
99+
try {
100+
super.required_spec208_mustBePreparedToReceiveOnNextSignalsAfterHavingCalledSubscriptionCancel();
101+
} catch (AssertionError ex) {
102+
assertMessage(ex);
103+
}
104+
}
105+
106+
@Test
107+
@Override
108+
public void required_spec209_mustBePreparedToReceiveAnOnCompleteSignalWithoutPrecedingRequestCall() throws Throwable {
109+
try {
110+
super.required_spec209_mustBePreparedToReceiveAnOnCompleteSignalWithoutPrecedingRequestCall();
111+
} catch (AssertionError ex) {
112+
assertMessage(ex);
113+
}
114+
}
115+
116+
@Test
117+
@Override
118+
public void required_spec209_mustBePreparedToReceiveAnOnCompleteSignalWithPrecedingRequestCall() throws Throwable {
119+
try {
120+
super.required_spec209_mustBePreparedToReceiveAnOnCompleteSignalWithPrecedingRequestCall();
121+
} catch (AssertionError ex) {
122+
assertMessage(ex);
123+
}
124+
}
125+
126+
@Test
127+
@Override
128+
public void required_spec210_mustBePreparedToReceiveAnOnErrorSignalWithoutPrecedingRequestCall() throws Throwable {
129+
try {
130+
super.required_spec210_mustBePreparedToReceiveAnOnErrorSignalWithoutPrecedingRequestCall();
131+
} catch (AssertionError ex) {
132+
assertMessage(ex);
133+
}
134+
}
135+
136+
@Test
137+
@Override
138+
public void required_spec210_mustBePreparedToReceiveAnOnErrorSignalWithPrecedingRequestCall() throws Throwable {
139+
try {
140+
super.required_spec210_mustBePreparedToReceiveAnOnErrorSignalWithPrecedingRequestCall();
141+
} catch (AssertionError ex) {
142+
assertMessage(ex);
143+
}
144+
}
145+
146+
@Test
147+
@Override
148+
public void required_spec213_onError_mustThrowNullPointerExceptionWhenParametersAreNull() throws Throwable {
149+
try {
150+
super.required_spec213_onError_mustThrowNullPointerExceptionWhenParametersAreNull();
151+
} catch (AssertionError ex) {
152+
assertMessage(ex);
153+
}
154+
}
155+
156+
@Test
157+
@Override
158+
public void required_spec213_onNext_mustThrowNullPointerExceptionWhenParametersAreNull() throws Throwable {
159+
try {
160+
super.required_spec213_onNext_mustThrowNullPointerExceptionWhenParametersAreNull();
161+
} catch (AssertionError ex) {
162+
assertMessage(ex);
163+
}
164+
}
165+
166+
@Test
167+
@Override
168+
public void required_spec213_onSubscribe_mustThrowNullPointerExceptionWhenParametersAreNull() throws Throwable {
169+
try {
170+
super.required_spec213_onSubscribe_mustThrowNullPointerExceptionWhenParametersAreNull();
171+
} catch (AssertionError ex) {
172+
assertMessage(ex);
173+
}
174+
}
175+
176+
@Test
177+
@Override
178+
public void required_spec308_requestMustRegisterGivenNumberElementsToBeProduced() throws Throwable {
179+
try {
180+
super.required_spec308_requestMustRegisterGivenNumberElementsToBeProduced();
181+
} catch (AssertionError ex) {
182+
assertMessage(ex);
183+
}
184+
}
185+
}

0 commit comments

Comments
 (0)