Skip to content

Commit d380acc

Browse files
committed
Transfers/copies all test annotations from the Publisher/Subscriber Verifications
to the IdentityProcessor-verification so that they are applied for the delegation. Introduces SubscriberWhiteboxVerificationRules, SubscriberBlackboxVerificationRules and PubisherVerificationRules to keep track of and assist in making sure that all tests propagate properly between Subscriber, Publisher and Processor.
1 parent b73ff9b commit d380acc

File tree

7 files changed

+205
-103
lines changed

7 files changed

+205
-103
lines changed

examples/src/test/java/org/reactivestreams/example/unicast/AsyncSubscriberTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public AsyncSubscriberTest() {
6060
}
6161
};
6262

63-
new NumberIterablePublisher<Integer>(0, 10, e).subscribe(sub);
63+
new NumberIterablePublisher(0, 10, e).subscribe(sub);
6464
latch.await(DefaultTimeoutMillis * 10, TimeUnit.MILLISECONDS);
6565
assertEquals(i.get(), 45);
6666
}

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

+57-55
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,21 @@
44
import org.reactivestreams.Publisher;
55
import org.reactivestreams.Subscriber;
66
import org.reactivestreams.Subscription;
7-
import org.reactivestreams.tck.Annotations.Subscribers;
7+
import org.reactivestreams.tck.Annotations.*;
88
import org.reactivestreams.tck.TestEnvironment.ManualPublisher;
99
import org.reactivestreams.tck.TestEnvironment.ManualSubscriber;
1010
import org.reactivestreams.tck.TestEnvironment.ManualSubscriberWithSubscriptionSupport;
1111
import org.reactivestreams.tck.TestEnvironment.Promise;
1212
import org.reactivestreams.tck.support.Function;
13+
import org.reactivestreams.tck.support.SubscriberWhiteboxVerificationRules;
14+
import org.reactivestreams.tck.support.PublisherVerificationRules;
1315
import org.testng.annotations.BeforeMethod;
1416
import org.testng.annotations.Test;
1517

1618
import java.util.HashSet;
1719
import java.util.Set;
1820

19-
public abstract class IdentityProcessorVerification<T> {
21+
public abstract class IdentityProcessorVerification<T> implements SubscriberWhiteboxVerificationRules, PublisherVerificationRules {
2022

2123
private final TestEnvironment env;
2224

@@ -212,154 +214,154 @@ public void createPublisher3MustProduceAStreamOfExactly3Elements() throws Throwa
212214
publisherVerification.createPublisher3MustProduceAStreamOfExactly3Elements();
213215
}
214216

215-
@Test
217+
@Override @Required @Test
216218
public void spec101_subscriptionRequestMustResultInTheCorrectNumberOfProducedElements() throws Throwable {
217219
publisherVerification.spec101_subscriptionRequestMustResultInTheCorrectNumberOfProducedElements();
218220
}
219221

220-
@Test
222+
@Override @Required @Test
221223
public void spec102_maySignalLessThanRequestedAndTerminateSubscription() throws Throwable {
222224
publisherVerification.spec102_maySignalLessThanRequestedAndTerminateSubscription();
223225
}
224226

225-
@Test
227+
@Override @Stochastic @Test
226228
public void spec103_mustSignalOnMethodsSequentially() throws Throwable {
227229
publisherVerification.spec103_mustSignalOnMethodsSequentially();
228230
}
229231

230-
@Test
232+
@Override @Additional(implement = "createErrorStatePublisher") @Test
231233
public void spec104_mustSignalOnErrorWhenFails() throws Throwable {
232234
publisherVerification.spec104_mustSignalOnErrorWhenFails();
233235
}
234236

235-
@Test
237+
@Override @Required @Test
236238
public void spec105_mustSignalOnCompleteWhenFiniteStreamTerminates() throws Throwable {
237239
publisherVerification.spec105_mustSignalOnCompleteWhenFiniteStreamTerminates();
238240
}
239241

240-
@Test
242+
@Override @NotVerified @Test
241243
public void spec106_mustConsiderSubscriptionCancelledAfterOnErrorOrOnCompleteHasBeenCalled() throws Throwable {
242244
publisherVerification.spec106_mustConsiderSubscriptionCancelledAfterOnErrorOrOnCompleteHasBeenCalled();
243245
}
244246

245-
@Test
247+
@Override @Required @Test
246248
public void spec107_mustNotEmitFurtherSignalsOnceOnCompleteHasBeenSignalled() throws Throwable {
247249
publisherVerification.spec107_mustNotEmitFurtherSignalsOnceOnCompleteHasBeenSignalled();
248250
}
249251

250-
@Test
252+
@Override @NotVerified @Test
251253
public void spec107_mustNotEmitFurtherSignalsOnceOnErrorHasBeenSignalled() throws Throwable {
252254
publisherVerification.spec107_mustNotEmitFurtherSignalsOnceOnErrorHasBeenSignalled();
253255
}
254256

255-
@Test
257+
@Override @NotVerified @Test
256258
public void spec108_possiblyCanceledSubscriptionShouldNotReceiveOnErrorOrOnCompleteSignals() throws Throwable {
257259
publisherVerification.spec108_possiblyCanceledSubscriptionShouldNotReceiveOnErrorOrOnCompleteSignals();
258260
}
259261

260-
@Test
262+
@Override @NotVerified @Test
261263
public void spec109_subscribeShouldNotThrowNonFatalThrowable() throws Throwable {
262264
publisherVerification.spec109_subscribeShouldNotThrowNonFatalThrowable();
263265
}
264266

265-
@Test
267+
@Override @NotVerified @Test
266268
public void spec110_rejectASubscriptionRequestIfTheSameSubscriberSubscribesTwice() throws Throwable {
267269
publisherVerification.spec110_rejectASubscriptionRequestIfTheSameSubscriberSubscribesTwice();
268270
}
269271

270-
@Test
272+
@Override @Additional @Test
271273
public void spec111_maySupportMultiSubscribe() throws Throwable {
272274
publisherVerification.spec111_maySupportMultiSubscribe();
273275
}
274276

275-
@Test
277+
@Override @Additional(implement = "createErrorStatePublisher") @Test
276278
public void spec112_mayRejectCallsToSubscribeIfPublisherIsUnableOrUnwillingToServeThemRejectionMustTriggerOnErrorInsteadOfOnSubscribe() throws Throwable {
277279
publisherVerification.spec112_mayRejectCallsToSubscribeIfPublisherIsUnableOrUnwillingToServeThemRejectionMustTriggerOnErrorInsteadOfOnSubscribe();
278280
}
279281

280-
@Test
282+
@Override @Required @Test
281283
public void spec113_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingOneByOne() throws Throwable {
282284
publisherVerification.spec113_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingOneByOne();
283285
}
284286

285-
@Test
287+
@Override @Required @Test
286288
public void spec113_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfront() throws Throwable {
287289
publisherVerification.spec113_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfront();
288290
}
289291

290-
@Test
292+
@Override @Required @Test
291293
public void spec113_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfrontAndCompleteAsExpected() throws Throwable {
292294
publisherVerification.spec113_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfrontAndCompleteAsExpected();
293295
}
294296

295-
@Test
297+
@Override @Required @Test
296298
public void spec302_mustAllowSynchronousRequestCallsFromOnNextAndOnSubscribe() throws Throwable {
297299
publisherVerification.spec302_mustAllowSynchronousRequestCallsFromOnNextAndOnSubscribe();
298300
}
299301

300-
@Test
302+
@Override @Required @Test @Additional(implement = "boundedDepthOfOnNextAndRequestRecursion") // FIXME @Required + @Additional? Really?
301303
public void spec303_mustNotAllowUnboundedRecursion() throws Throwable {
302304
publisherVerification.spec303_mustNotAllowUnboundedRecursion();
303305
}
304306

305-
@Test
307+
@Override @NotVerified @Test
306308
public void spec304_requestShouldNotPerformHeavyComputations() throws Exception {
307309
publisherVerification.spec304_requestShouldNotPerformHeavyComputations();
308310
}
309311

310-
@Test
312+
@Override @NotVerified @Test
311313
public void spec305_cancelMustNotSynchronouslyPerformHeavyCompuatation() throws Exception {
312314
publisherVerification.spec305_cancelMustNotSynchronouslyPerformHeavyCompuatation();
313315
}
314316

315-
@Test
317+
@Override @Required @Test
316318
public void spec306_afterSubscriptionIsCancelledRequestMustBeNops() throws Throwable {
317319
publisherVerification.spec306_afterSubscriptionIsCancelledRequestMustBeNops();
318320
}
319321

320-
@Test
322+
@Override @Required @Test
321323
public void spec307_afterSubscriptionIsCancelledAdditionalCancelationsMustBeNops() throws Throwable {
322324
publisherVerification.spec307_afterSubscriptionIsCancelledAdditionalCancelationsMustBeNops();
323325
}
324326

325-
@Test
327+
@Override @Required @Test
326328
public void spec309_requestZeroMustSignalIllegalArgumentException() throws Throwable {
327329
publisherVerification.spec309_requestZeroMustSignalIllegalArgumentException();
328330
}
329331

330-
@Test
332+
@Override @Required @Test
331333
public void spec309_requestNegativeNumberMustSignalIllegalArgumentException() throws Throwable {
332334
publisherVerification.spec309_requestNegativeNumberMustSignalIllegalArgumentException();
333335
}
334336

335-
@Test
337+
@Override @Required @Test
336338
public void spec312_cancelMustMakeThePublisherToEventuallyStopSignaling() throws Throwable {
337339
publisherVerification.spec312_cancelMustMakeThePublisherToEventuallyStopSignaling();
338340
}
339341

340-
@Test
342+
@Override @Required @Test
341343
public void spec313_cancelMustMakeThePublisherEventuallyDropAllReferencesToTheSubscriber() throws Throwable {
342344
publisherVerification.spec313_cancelMustMakeThePublisherEventuallyDropAllReferencesToTheSubscriber();
343345
}
344346

345-
@Test
347+
@Override @Required @Test
346348
public void spec317_mustSupportAPendingElementCountUpToLongMaxValue() throws Throwable {
347349
publisherVerification.spec317_mustSupportAPendingElementCountUpToLongMaxValue();
348350
}
349351

350-
@Test
352+
@Override @Required @Test
351353
public void spec317_mustSupportACumulativePendingElementCountUpToLongMaxValue() throws Throwable {
352354
publisherVerification.spec317_mustSupportACumulativePendingElementCountUpToLongMaxValue();
353355
}
354356

355-
@Test
357+
@Override @Required @Test
356358
public void spec317_mustSignalOnErrorWhenPendingAboveLongMaxValue() throws Throwable {
357359
publisherVerification.spec317_mustSignalOnErrorWhenPendingAboveLongMaxValue();
358360
}
359361

360362
// Verifies rule: https://github.com/reactive-streams/reactive-streams#1.4
361363
// for multiple subscribers
362-
@Test @Subscribers(2)
364+
@Test @Subscribers(2) // @Override FIXME Is this test specific for IdentityProcessorVerification or was it intending to be an override?
363365
public void spec104_mustCallOnErrorOnAllItsSubscribersIfItEncountersANonRecoverableError() throws Throwable {
364366
optionalMultipleSubscribersTest(2, new Function<Long,TestSetup>() {
365367
@Override
@@ -469,117 +471,117 @@ public void exerciseWhiteboxHappyPath() throws Throwable {
469471
subscriberVerification.exerciseWhiteboxHappyPath();
470472
}
471473

472-
@Test
474+
@Override @Required @Test
473475
public void spec201_mustSignalDemandViaSubscriptionRequest() throws Throwable {
474476
subscriberVerification.spec201_mustSignalDemandViaSubscriptionRequest();
475477
}
476478

477-
@Test
479+
@Override @NotVerified @Test
478480
public void spec202_shouldAsynchronouslyDispatch() throws Exception {
479481
subscriberVerification.spec202_shouldAsynchronouslyDispatch();
480482
}
481483

482-
@Test
484+
@Override @Required @Test
483485
public void spec203_mustNotCallMethodsOnSubscriptionOrPublisherInOnComplete() throws Throwable {
484486
subscriberVerification.spec203_mustNotCallMethodsOnSubscriptionOrPublisherInOnComplete();
485487
}
486488

487-
@Test
489+
@Override @Required @Test
488490
public void spec203_mustNotCallMethodsOnSubscriptionOrPublisherInOnError() throws Throwable {
489491
subscriberVerification.spec203_mustNotCallMethodsOnSubscriptionOrPublisherInOnError();
490492
}
491493

492-
@Test
494+
@Override @NotVerified @Test
493495
public void spec204_mustConsiderTheSubscriptionAsCancelledInAfterRecievingOnCompleteOrOnError() throws Exception {
494496
subscriberVerification.spec204_mustConsiderTheSubscriptionAsCancelledInAfterRecievingOnCompleteOrOnError();
495497
}
496498

497-
@Test
499+
@Override @Required @Test
498500
public void spec205_mustCallSubscriptionCancelIfItAlreadyHasAnSubscriptionAndReceivesAnotherOnSubscribeSignal() throws Exception {
499501
subscriberVerification.spec205_mustCallSubscriptionCancelIfItAlreadyHasAnSubscriptionAndReceivesAnotherOnSubscribeSignal();
500502
}
501503

502-
@Test
504+
@Override @NotVerified @Test
503505
public void spec206_mustCallSubscriptionCancelIfItIsNoLongerValid() throws Exception {
504506
subscriberVerification.spec206_mustCallSubscriptionCancelIfItIsNoLongerValid();
505507
}
506508

507-
@Test
509+
@Override @NotVerified @Test
508510
public void spec207_mustEnsureAllCallsOnItsSubscriptionTakePlaceFromTheSameThreadOrTakeCareOfSynchronization() throws Exception {
509511
subscriberVerification.spec207_mustEnsureAllCallsOnItsSubscriptionTakePlaceFromTheSameThreadOrTakeCareOfSynchronization();
510512
}
511513

512-
@Test
514+
@Override @Required @Test
513515
public void spec208_mustBePreparedToReceiveOnNextSignalsAfterHavingCalledSubscriptionCancel() throws Throwable {
514516
subscriberVerification.spec208_mustBePreparedToReceiveOnNextSignalsAfterHavingCalledSubscriptionCancel();
515517
}
516518

517-
@Test
519+
@Override @Required @Test
518520
public void spec209_mustBePreparedToReceiveAnOnCompleteSignalWithPrecedingRequestCall() throws Throwable {
519521
subscriberVerification.spec209_mustBePreparedToReceiveAnOnCompleteSignalWithPrecedingRequestCall();
520522
}
521523

522-
@Test
524+
@Override @Required @Test
523525
public void spec209_mustBePreparedToReceiveAnOnCompleteSignalWithoutPrecedingRequestCall() throws Throwable {
524526
subscriberVerification.spec209_mustBePreparedToReceiveAnOnCompleteSignalWithoutPrecedingRequestCall();
525527
}
526528

527-
@Test
529+
@Override @Required @Test
528530
public void spec210_mustBePreparedToReceiveAnOnErrorSignalWithPrecedingRequestCall() throws Throwable {
529531
subscriberVerification.spec210_mustBePreparedToReceiveAnOnErrorSignalWithPrecedingRequestCall();
530532
}
531533

532-
@Test
534+
@Override @Required @Test
533535
public void spec210_mustBePreparedToReceiveAnOnErrorSignalWithoutPrecedingRequestCall() throws Throwable {
534536
subscriberVerification.spec210_mustBePreparedToReceiveAnOnErrorSignalWithoutPrecedingRequestCall();
535537
}
536538

537-
@Test
539+
@Override @NotVerified @Test
538540
public void spec211_mustMakeSureThatAllCallsOnItsMethodsHappenBeforeTheProcessingOfTheRespectiveEvents() throws Exception {
539541
subscriberVerification.spec211_mustMakeSureThatAllCallsOnItsMethodsHappenBeforeTheProcessingOfTheRespectiveEvents();
540542
}
541543

542-
@Test
544+
@Override @Additional @Test
543545
public void spec212_mustNotCallOnSubscribeMoreThanOnceBasedOnObjectEquality_specViolation() throws Throwable {
544546
subscriberVerification.spec212_mustNotCallOnSubscribeMoreThanOnceBasedOnObjectEquality_specViolation();
545547
}
546548

547-
@Test
549+
@Override @NotVerified@Test
548550
public void spec213_failingOnSignalInvocation() throws Exception {
549551
subscriberVerification.spec213_failingOnSignalInvocation();
550552
}
551553

552-
@Test
554+
@Override @NotVerified @Test
553555
public void spec301_mustNotBeCalledOutsideSubscriberContext() throws Exception {
554556
subscriberVerification.spec301_mustNotBeCalledOutsideSubscriberContext();
555557
}
556558

557-
@Test
559+
@Override @Required @Test
558560
public void spec308_requestMustRegisterGivenNumberElementsToBeProduced() throws Throwable {
559561
subscriberVerification.spec308_requestMustRegisterGivenNumberElementsToBeProduced();
560562
}
561563

562-
@Test
564+
@Override @NotVerified @Test
563565
public void spec310_requestMaySynchronouslyCallOnNextOnSubscriber() throws Exception {
564566
subscriberVerification.spec310_requestMaySynchronouslyCallOnNextOnSubscriber();
565567
}
566568

567-
@Test
569+
@Override @NotVerified @Test
568570
public void spec311_requestMaySynchronouslyCallOnCompleteOrOnError() throws Exception {
569571
subscriberVerification.spec311_requestMaySynchronouslyCallOnCompleteOrOnError();
570572
}
571573

572-
@Test
574+
@Override @NotVerified @Test
573575
public void spec314_cancelMayCauseThePublisherToShutdownIfNoOtherSubscriptionExists() throws Exception {
574576
subscriberVerification.spec314_cancelMayCauseThePublisherToShutdownIfNoOtherSubscriptionExists();
575577
}
576578

577-
@Test
579+
@Override @NotVerified @Test
578580
public void spec315_cancelMustNotThrowExceptionAndMustSignalOnError() throws Exception {
579581
subscriberVerification.spec315_cancelMustNotThrowExceptionAndMustSignalOnError();
580582
}
581583

582-
@Test
584+
@Override @NotVerified @Test
583585
public void spec316_requestMustNotThrowExceptionAndMustOnErrorTheSubscriber() throws Exception {
584586
subscriberVerification.spec316_requestMustNotThrowExceptionAndMustOnErrorTheSubscriber();
585587
}

0 commit comments

Comments
 (0)