From 54ac79be7fe20199bd09bd0ed4cfe150f460da52 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Tue, 16 May 2017 08:13:57 -0700 Subject: [PATCH 01/31] Merge experimental & src folders (#435) Reorganized folders to have main public APIs in the top folder and everything else in sub-folders. --- CMakeLists.txt | 726 ++++++++---------- TARGETS | 2 +- benchmarks/CMakeLists.txt | 1 - benchmarks/RequestResponseLatency.cpp | 10 +- benchmarks/RequestResponseThroughput.cpp | 10 +- benchmarks/StreamThroughput.cpp | 12 +- .../ChannelHelloWorld_Client.cpp | 4 +- .../ChannelHelloWorld_Server.cpp | 4 +- .../ConditionalRequestHandling_Client.cpp | 4 +- .../ConditionalRequestHandling_Server.cpp | 6 +- .../JsonRequestHandler.h | 2 +- .../TextRequestHandler.h | 2 +- .../FireAndForgetHelloWorld_Client.cpp | 4 +- .../FireAndForgetHelloWorld_Server.cpp | 4 +- .../RequestResponseHelloWorld_Client.cpp | 4 +- .../RequestResponseHelloWorld_Server.cpp | 4 +- .../StreamHelloWorld_Client.cpp | 4 +- .../StreamHelloWorld_Server.cpp | 4 +- .../StreamObservableToFlowable_Client.cpp | 4 +- .../StreamObservableToFlowable_Server.cpp | 4 +- .../rsocket => src}/ConnectionAcceptor.h | 0 .../rsocket => src}/ConnectionFactory.h | 0 .../ConnectionResumeRequest.cpp | 2 +- .../rsocket => src}/ConnectionResumeRequest.h | 2 +- .../ConnectionSetupRequest.cpp | 2 +- .../rsocket => src}/ConnectionSetupRequest.h | 2 +- src/DuplexConnection.h | 2 +- src/Payload.cpp | 2 +- src/Payload.h | 2 +- {experimental/rsocket-src => src}/RSocket.cpp | 6 +- {experimental/rsocket => src}/RSocket.h | 4 +- .../rsocket-src => src}/RSocketClient.cpp | 10 +- {experimental/rsocket => src}/RSocketClient.h | 6 +- .../RSocketConnectionHandler.cpp | 8 +- .../RSocketConnectionHandler.h | 10 +- {experimental/rsocket => src}/RSocketErrors.h | 0 .../rsocket-src => src}/RSocketRequester.cpp | 4 +- .../rsocket => src}/RSocketRequester.h | 4 +- .../rsocket => src}/RSocketResponder.h | 2 +- .../rsocket-src => src}/RSocketServer.cpp | 4 +- {experimental/rsocket => src}/RSocketServer.h | 10 +- src/{ => framing}/Frame.cpp | 4 +- src/{ => framing}/Frame.h | 0 src/{ => framing}/FrameProcessor.h | 2 +- src/{ => framing}/FrameSerializer.cpp | 8 +- src/{ => framing}/FrameSerializer.h | 2 +- .../FrameSerializer_v0.cpp | 2 +- .../FrameSerializer_v0.h | 2 +- .../FrameSerializer_v0_1.cpp | 2 +- .../FrameSerializer_v0_1.h | 2 +- .../FrameSerializer_v1_0.cpp | 2 +- .../FrameSerializer_v1_0.h | 2 +- src/{ => framing}/FrameTransport.cpp | 4 +- src/{ => framing}/FrameTransport.h | 8 +- .../FramedDuplexConnection.cpp | 8 +- .../FramedDuplexConnection.h | 6 +- src/{framed => framing}/FramedReader.cpp | 6 +- src/{framed => framing}/FramedReader.h | 8 +- src/{framed => framing}/FramedWriter.cpp | 4 +- src/{framed => framing}/FramedWriter.h | 6 +- src/{ => internal}/AllowanceSemaphore.h | 0 .../ClientResumeStatusCallback.h | 0 src/{ => internal}/Common.cpp | 2 +- src/{ => internal}/Common.h | 0 src/{ => internal}/EnableSharedFromThis.h | 0 .../FollyKeepaliveTimer.cpp | 0 src/{folly => internal}/FollyKeepaliveTimer.h | 4 +- src/{ => internal}/ReactiveStreamsCompat.h | 0 src/{ => internal}/StackTraceUtils.h | 0 .../ChannelRequester.cpp | 2 +- .../ChannelRequester.h | 6 +- .../ChannelResponder.cpp | 2 +- .../ChannelResponder.h | 6 +- .../ConsumerBase.cpp | 2 +- src/{automata => statemachine}/ConsumerBase.h | 10 +- .../PublisherBase.h | 8 +- .../RSocketStateMachine.cpp} | 126 +-- .../RSocketStateMachine.h} | 26 +- .../RequestResponseRequester.cpp | 8 +- .../RequestResponseRequester.h | 2 +- .../RequestResponseResponder.cpp | 2 +- .../RequestResponseResponder.h | 4 +- .../StreamAutomatonBase.cpp | 6 +- .../StreamAutomatonBase.h | 2 +- .../StreamRequester.cpp | 2 +- .../StreamRequester.h | 4 +- .../StreamResponder.cpp | 2 +- .../StreamResponder.h | 4 +- .../ConnectionSetupPayload.cpp | 0 .../ConnectionSetupPayload.h | 4 +- src/{ => temporary_home}/Executor.cpp | 4 +- src/{ => temporary_home}/Executor.h | 0 .../NullRequestHandler.cpp | 2 +- src/{ => temporary_home}/NullRequestHandler.h | 4 +- .../temporary_home}/OldNewBridge.h | 2 +- src/{ => temporary_home}/ReactiveSocket.cpp | 12 +- src/{ => temporary_home}/ReactiveSocket.h | 10 +- src/{ => temporary_home}/RequestHandler.h | 4 +- src/{ => temporary_home}/ResumeCache.cpp | 8 +- src/{ => temporary_home}/ResumeCache.h | 6 +- .../ServerConnectionAcceptor.cpp | 12 +- .../ServerConnectionAcceptor.h | 4 +- src/{ => temporary_home}/Stats.cpp | 4 +- src/{ => temporary_home}/Stats.h | 2 +- src/{ => temporary_home}/StreamState.cpp | 4 +- src/{ => temporary_home}/StreamState.h | 4 +- src/{ => temporary_home}/StreamsFactory.cpp | 18 +- src/{ => temporary_home}/StreamsFactory.h | 8 +- src/{ => temporary_home}/StreamsHandler.h | 2 +- src/{ => temporary_home}/SubscriberBase.h | 6 +- src/{ => temporary_home}/SubscriptionBase.h | 6 +- .../transports/tcp}/TcpConnectionAcceptor.cpp | 6 +- .../transports/tcp}/TcpConnectionAcceptor.h | 2 +- .../transports/tcp}/TcpConnectionFactory.cpp | 6 +- .../transports/tcp}/TcpConnectionFactory.h | 2 +- .../tcp/TcpDuplexConnection.cpp | 6 +- .../tcp/TcpDuplexConnection.h | 4 +- tck-test/TestInterpreter.h | 4 +- tck-test/client.cpp | 8 +- tck-test/server.cpp | 12 +- test/PayloadTest.cpp | 4 +- .../RSocketClientServerTest.cpp | 8 +- test/ServerConnectionAcceptorTest.cpp | 14 +- test/StreamStateTest.cpp | 4 +- .../ReactiveSocketConcurrencyTest.cpp | 12 +- test/{ => deprecated}/ReactiveSocketTest.cpp | 18 +- test/{ => deprecated}/SubscriberBaseTest.cpp | 2 +- test/{ => framing}/FrameTest.cpp | 4 +- test/{ => framing}/FrameTransportTest.cpp | 6 +- test/{framed => framing}/FramedReaderTest.cpp | 12 +- test/{framed => framing}/FramedWriterTest.cpp | 4 +- .../handlers/HelloStreamRequestHandler.cpp | 0 .../handlers/HelloStreamRequestHandler.h | 8 +- test/integration/ClientUtils.h | 14 +- test/integration/ServerFixture.h | 12 +- .../{ => internal}/AllowanceSemaphoreTest.cpp | 2 +- .../FollyKeepaliveTimerTest.cpp | 6 +- .../OneToOneRingBufferTest.cpp | 0 .../ReactiveStreamsMocksCompat.h | 2 +- .../ReactiveSocketResumabilityTest.cpp | 10 +- test/{ => resumption}/ResumeCacheTest.cpp | 14 +- .../ResumeIdentificationTokenTest.cpp | 2 +- .../TcpResumeClient.cpp | 18 +- .../TcpResumeServer.cpp | 18 +- .../PublisherBaseTest.cpp | 8 +- .../RSocketStateMachineTest.cpp} | 28 +- test/streams/Mocks.h | 2 +- test/tcp/TcpClient.cpp | 168 ---- test/tcp/TcpServer.cpp | 201 ----- test/{ => test_utils}/InlineConnection.cpp | 0 test/{ => test_utils}/InlineConnection.h | 2 +- .../{ => test_utils}/InlineConnectionTest.cpp | 2 +- test/{ => test_utils}/MockKeepaliveTimer.h | 4 +- test/{ => test_utils}/MockRequestHandler.h | 2 +- test/{ => test_utils}/MockStats.h | 4 +- .../PrintSubscriber.cpp | 2 +- test/{simple => test_utils}/PrintSubscriber.h | 0 test/{simple => test_utils}/StatsPrinter.cpp | 2 +- test/{simple => test_utils}/StatsPrinter.h | 2 +- {experimental/yarpl => yarpl}/CMakeLists.txt | 0 {experimental/yarpl => yarpl}/README.md | 0 {experimental/yarpl => yarpl}/TARGETS | 0 .../examples/FlowableExamples.cpp | 0 .../examples/FlowableExamples.h | 0 .../examples/ObservableExamples.cpp | 0 .../examples/ObservableExamples.h | 0 .../examples/yarpl-playground.cpp | 0 .../include/yarpl/Disposable.h | 0 .../yarpl => yarpl}/include/yarpl/Flowable.h | 0 .../include/yarpl/Observable.h | 0 .../include/yarpl/Refcounted.h | 0 .../yarpl => yarpl}/include/yarpl/Scheduler.h | 0 .../yarpl => yarpl}/include/yarpl/Single.h | 0 .../include/yarpl/flowable/Flowable.h | 0 .../include/yarpl/flowable/FlowableOperator.h | 0 .../include/yarpl/flowable/Flowables.h | 0 .../include/yarpl/flowable/Subscriber.h | 0 .../include/yarpl/flowable/Subscribers.h | 0 .../include/yarpl/flowable/Subscription.h | 0 .../include/yarpl/observable/Observable.h | 0 .../yarpl/observable/ObservableOperator.h | 0 .../include/yarpl/observable/Observables.h | 0 .../include/yarpl/observable/Observer.h | 0 .../include/yarpl/observable/Observers.h | 0 .../include/yarpl/observable/Subscription.h | 0 .../include/yarpl/observable/Subscriptions.h | 0 .../include/yarpl/observable/TestObserver.h | 0 .../yarpl/schedulers/ThreadScheduler.h | 0 .../include/yarpl/single/Single.h | 0 .../include/yarpl/single/SingleObserver.h | 0 .../include/yarpl/single/SingleObservers.h | 0 .../include/yarpl/single/SingleOperator.h | 0 .../include/yarpl/single/SingleSubscription.h | 0 .../yarpl/single/SingleSubscriptions.h | 0 .../include/yarpl/single/Singles.h | 0 .../include/yarpl/utils/type_traits.h | 0 .../yarpl => yarpl}/perf/Function_perf.cpp | 0 .../yarpl => yarpl}/perf/Observable_perf.cpp | 0 .../yarpl => yarpl}/perf/yarpl-perf.cpp | 0 .../yarpl => yarpl}/src/yarpl/Refcounted.cpp | 0 .../sources/Flowable_FromObservable.h | 0 .../flowable/utils/SubscriptionHelper.cpp | 0 .../yarpl/flowable/utils/SubscriptionHelper.h | 0 .../src/yarpl/observable/Subscriptions.cpp | 0 .../src/yarpl/schedulers/ThreadScheduler.cpp | 0 .../src/yarpl/single/SingleSubscriptions.cpp | 0 .../test/FlowableChaining_test.cpp | 0 .../test/FlowableCreateSubscribe_test.cpp | 0 .../yarpl => yarpl}/test/FlowableTest.cpp | 0 .../test/Flowable_lifecycle.cpp | 0 .../test/Flowable_range_test.cpp | 0 .../test/Observable_Subscription_test.cpp | 0 .../yarpl => yarpl}/test/Observable_test.cpp | 0 .../yarpl => yarpl}/test/RefcountedTest.cpp | 0 .../yarpl => yarpl}/test/ReferenceTest.cpp | 0 .../yarpl => yarpl}/test/Scheduler_test.cpp | 0 .../yarpl => yarpl}/test/Single_test.cpp | 0 .../test/SubscriptionHelper_test.cpp | 0 {experimental/yarpl => yarpl}/test/Tuple.cpp | 0 {experimental/yarpl => yarpl}/test/Tuple.h | 0 .../yarpl => yarpl}/test/yarpl-tests.cpp | 0 221 files changed, 770 insertions(+), 1232 deletions(-) rename {experimental/rsocket => src}/ConnectionAcceptor.h (100%) rename {experimental/rsocket => src}/ConnectionFactory.h (100%) rename {experimental/rsocket-src => src}/ConnectionResumeRequest.cpp (71%) rename {experimental/rsocket => src}/ConnectionResumeRequest.h (93%) rename {experimental/rsocket-src => src}/ConnectionSetupRequest.cpp (95%) rename {experimental/rsocket => src}/ConnectionSetupRequest.h (96%) rename {experimental/rsocket-src => src}/RSocket.cpp (79%) rename {experimental/rsocket => src}/RSocket.h (94%) rename {experimental/rsocket-src => src}/RSocketClient.cpp (89%) rename {experimental/rsocket => src}/RSocketClient.h (93%) rename {experimental/rsocket-src => src}/RSocketConnectionHandler.cpp (97%) rename {experimental/rsocket => src}/RSocketConnectionHandler.h (88%) rename {experimental/rsocket => src}/RSocketErrors.h (100%) rename {experimental/rsocket-src => src}/RSocketRequester.cpp (98%) rename {experimental/rsocket => src}/RSocketRequester.h (97%) rename {experimental/rsocket => src}/RSocketResponder.h (98%) rename {experimental/rsocket-src => src}/RSocketServer.cpp (97%) rename {experimental/rsocket => src}/RSocketServer.h (91%) rename src/{ => framing}/Frame.cpp (98%) rename src/{ => framing}/Frame.h (100%) rename src/{ => framing}/FrameProcessor.h (91%) rename src/{ => framing}/FrameSerializer.cpp (93%) rename src/{ => framing}/FrameSerializer.h (99%) rename src/{versions => framing}/FrameSerializer_v0.cpp (99%) rename src/{versions => framing}/FrameSerializer_v0.h (98%) rename src/{versions => framing}/FrameSerializer_v0_1.cpp (98%) rename src/{versions => framing}/FrameSerializer_v0_1.h (91%) rename src/{versions => framing}/FrameSerializer_v1_0.cpp (99%) rename src/{versions => framing}/FrameSerializer_v1_0.h (98%) rename src/{ => framing}/FrameTransport.cpp (99%) rename src/{ => framing}/FrameTransport.h (93%) rename src/{framed => framing}/FramedDuplexConnection.cpp (89%) rename src/{framed => framing}/FramedDuplexConnection.h (90%) rename src/{framed => framing}/FramedReader.cpp (98%) rename src/{framed => framing}/FramedReader.h (91%) rename src/{framed => framing}/FramedWriter.cpp (98%) rename src/{framed => framing}/FramedWriter.h (92%) rename src/{ => internal}/AllowanceSemaphore.h (100%) rename src/{ => internal}/ClientResumeStatusCallback.h (100%) rename src/{ => internal}/Common.cpp (99%) rename src/{ => internal}/Common.h (100%) rename src/{ => internal}/EnableSharedFromThis.h (100%) rename src/{folly => internal}/FollyKeepaliveTimer.cpp (100%) rename src/{folly => internal}/FollyKeepaliveTimer.h (88%) rename src/{ => internal}/ReactiveStreamsCompat.h (100%) rename src/{ => internal}/StackTraceUtils.h (100%) rename src/{automata => statemachine}/ChannelRequester.cpp (99%) rename src/{automata => statemachine}/ChannelRequester.h (92%) rename src/{automata => statemachine}/ChannelResponder.cpp (98%) rename src/{automata => statemachine}/ChannelResponder.h (91%) rename src/{automata => statemachine}/ConsumerBase.cpp (98%) rename src/{automata => statemachine}/ConsumerBase.h (90%) rename src/{automata => statemachine}/PublisherBase.h (92%) rename src/{ConnectionAutomaton.cpp => statemachine/RSocketStateMachine.cpp} (90%) rename src/{ConnectionAutomaton.h => statemachine/RSocketStateMachine.h} (94%) rename src/{automata => statemachine}/RequestResponseRequester.cpp (95%) rename src/{automata => statemachine}/RequestResponseRequester.h (96%) rename src/{automata => statemachine}/RequestResponseResponder.cpp (97%) rename src/{automata => statemachine}/RequestResponseResponder.h (92%) rename src/{automata => statemachine}/StreamAutomatonBase.cpp (94%) rename src/{automata => statemachine}/StreamAutomatonBase.h (98%) rename src/{automata => statemachine}/StreamRequester.cpp (98%) rename src/{automata => statemachine}/StreamRequester.h (94%) rename src/{automata => statemachine}/StreamResponder.cpp (97%) rename src/{automata => statemachine}/StreamResponder.h (93%) rename src/{ => temporary_home}/ConnectionSetupPayload.cpp (100%) rename src/{ => temporary_home}/ConnectionSetupPayload.h (96%) rename src/{ => temporary_home}/Executor.cpp (91%) rename src/{ => temporary_home}/Executor.h (100%) rename src/{ => temporary_home}/NullRequestHandler.cpp (98%) rename src/{ => temporary_home}/NullRequestHandler.h (97%) rename {experimental/rsocket => src/temporary_home}/OldNewBridge.h (99%) rename src/{ => temporary_home}/ReactiveSocket.cpp (97%) rename src/{ => temporary_home}/ReactiveSocket.h (96%) rename src/{ => temporary_home}/RequestHandler.h (97%) rename src/{ => temporary_home}/ResumeCache.cpp (97%) rename src/{ => temporary_home}/ResumeCache.h (97%) rename src/{ => temporary_home}/ServerConnectionAcceptor.cpp (97%) rename src/{ => temporary_home}/ServerConnectionAcceptor.h (96%) rename src/{ => temporary_home}/Stats.cpp (95%) rename src/{ => temporary_home}/Stats.h (96%) rename src/{ => temporary_home}/StreamState.cpp (93%) rename src/{ => temporary_home}/StreamState.h (91%) rename src/{ => temporary_home}/StreamsFactory.cpp (89%) rename src/{ => temporary_home}/StreamsFactory.h (89%) rename src/{ => temporary_home}/StreamsHandler.h (96%) rename src/{ => temporary_home}/SubscriberBase.h (97%) rename src/{ => temporary_home}/SubscriptionBase.h (88%) rename {experimental/rsocket-src/transports => src/transports/tcp}/TcpConnectionAcceptor.cpp (96%) rename {experimental/rsocket/transports => src/transports/tcp}/TcpConnectionAcceptor.h (97%) rename {experimental/rsocket-src/transports => src/transports/tcp}/TcpConnectionFactory.cpp (93%) rename {experimental/rsocket/transports => src/transports/tcp}/TcpConnectionFactory.h (95%) rename src/{ => transports}/tcp/TcpDuplexConnection.cpp (96%) rename src/{ => transports}/tcp/TcpDuplexConnection.h (89%) rename {experimental/rsocket-test => test}/RSocketClientServerTest.cpp (89%) rename test/{ => deprecated}/ReactiveSocketConcurrencyTest.cpp (98%) rename test/{ => deprecated}/ReactiveSocketTest.cpp (99%) rename test/{ => deprecated}/SubscriberBaseTest.cpp (99%) rename test/{ => framing}/FrameTest.cpp (99%) rename test/{ => framing}/FrameTransportTest.cpp (83%) rename test/{framed => framing}/FramedReaderTest.cpp (97%) rename test/{framed => framing}/FramedWriterTest.cpp (98%) rename {experimental/rsocket-test => test}/handlers/HelloStreamRequestHandler.cpp (100%) rename {experimental/rsocket-test => test}/handlers/HelloStreamRequestHandler.h (74%) rename test/{ => internal}/AllowanceSemaphoreTest.cpp (97%) rename test/{folly => internal}/FollyKeepaliveTimerTest.cpp (93%) rename test/{concurrent => internal}/OneToOneRingBufferTest.cpp (100%) rename test/{ => internal}/ReactiveStreamsMocksCompat.h (93%) rename test/{ => resumption}/ReactiveSocketResumabilityTest.cpp (92%) rename test/{ => resumption}/ResumeCacheTest.cpp (97%) rename test/{ => resumption}/ResumeIdentificationTokenTest.cpp (95%) rename test/{resume => resumption}/TcpResumeClient.cpp (93%) rename test/{resume => resumption}/TcpResumeServer.cpp (95%) rename test/{automata => statemachine}/PublisherBaseTest.cpp (88%) rename test/{ConnectionAutomatonTest.cpp => statemachine/RSocketStateMachineTest.cpp} (92%) delete mode 100644 test/tcp/TcpClient.cpp delete mode 100644 test/tcp/TcpServer.cpp rename test/{ => test_utils}/InlineConnection.cpp (100%) rename test/{ => test_utils}/InlineConnection.h (98%) rename test/{ => test_utils}/InlineConnectionTest.cpp (99%) rename test/{ => test_utils}/MockKeepaliveTimer.h (81%) rename test/{ => test_utils}/MockRequestHandler.h (98%) rename test/{ => test_utils}/MockStats.h (90%) rename test/{simple => test_utils}/PrintSubscriber.cpp (95%) rename test/{simple => test_utils}/PrintSubscriber.h (100%) rename test/{simple => test_utils}/StatsPrinter.cpp (97%) rename test/{simple => test_utils}/StatsPrinter.h (96%) rename {experimental/yarpl => yarpl}/CMakeLists.txt (100%) rename {experimental/yarpl => yarpl}/README.md (100%) rename {experimental/yarpl => yarpl}/TARGETS (100%) rename {experimental/yarpl => yarpl}/examples/FlowableExamples.cpp (100%) rename {experimental/yarpl => yarpl}/examples/FlowableExamples.h (100%) rename {experimental/yarpl => yarpl}/examples/ObservableExamples.cpp (100%) rename {experimental/yarpl => yarpl}/examples/ObservableExamples.h (100%) rename {experimental/yarpl => yarpl}/examples/yarpl-playground.cpp (100%) rename {experimental/yarpl => yarpl}/include/yarpl/Disposable.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/Flowable.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/Observable.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/Refcounted.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/Scheduler.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/Single.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/flowable/Flowable.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/flowable/FlowableOperator.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/flowable/Flowables.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/flowable/Subscriber.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/flowable/Subscribers.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/flowable/Subscription.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/Observable.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/ObservableOperator.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/Observables.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/Observer.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/Observers.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/Subscription.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/Subscriptions.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/observable/TestObserver.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/schedulers/ThreadScheduler.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/single/Single.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/single/SingleObserver.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/single/SingleObservers.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/single/SingleOperator.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/single/SingleSubscription.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/single/SingleSubscriptions.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/single/Singles.h (100%) rename {experimental/yarpl => yarpl}/include/yarpl/utils/type_traits.h (100%) rename {experimental/yarpl => yarpl}/perf/Function_perf.cpp (100%) rename {experimental/yarpl => yarpl}/perf/Observable_perf.cpp (100%) rename {experimental/yarpl => yarpl}/perf/yarpl-perf.cpp (100%) rename {experimental/yarpl => yarpl}/src/yarpl/Refcounted.cpp (100%) rename {experimental/yarpl => yarpl}/src/yarpl/flowable/sources/Flowable_FromObservable.h (100%) rename {experimental/yarpl => yarpl}/src/yarpl/flowable/utils/SubscriptionHelper.cpp (100%) rename {experimental/yarpl => yarpl}/src/yarpl/flowable/utils/SubscriptionHelper.h (100%) rename {experimental/yarpl => yarpl}/src/yarpl/observable/Subscriptions.cpp (100%) rename {experimental/yarpl => yarpl}/src/yarpl/schedulers/ThreadScheduler.cpp (100%) rename {experimental/yarpl => yarpl}/src/yarpl/single/SingleSubscriptions.cpp (100%) rename {experimental/yarpl => yarpl}/test/FlowableChaining_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/FlowableCreateSubscribe_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/FlowableTest.cpp (100%) rename {experimental/yarpl => yarpl}/test/Flowable_lifecycle.cpp (100%) rename {experimental/yarpl => yarpl}/test/Flowable_range_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/Observable_Subscription_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/Observable_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/RefcountedTest.cpp (100%) rename {experimental/yarpl => yarpl}/test/ReferenceTest.cpp (100%) rename {experimental/yarpl => yarpl}/test/Scheduler_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/Single_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/SubscriptionHelper_test.cpp (100%) rename {experimental/yarpl => yarpl}/test/Tuple.cpp (100%) rename {experimental/yarpl => yarpl}/test/Tuple.h (100%) rename {experimental/yarpl => yarpl}/test/yarpl-tests.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 68c2f5d3e..a981a9f2b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS 1) # make sure to bail on in-source builds for cleanliness if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory)" - "and run CMake from there. You may need to remove CMakeCache.txt.") + "and run CMake from there. You may need to remove CMakeCache.txt.") endif() # default built type is Release @@ -115,82 +115,106 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}/reactivestreams/include) include_directories(${GMOCK_SOURCE_DIR}/googlemock/include) include_directories(${GMOCK_SOURCE_DIR}/googletest/include) -add_subdirectory(experimental/yarpl) +add_subdirectory(yarpl) add_library( ReactiveSocket - src/automata/ChannelRequester.cpp - src/automata/ChannelRequester.h - src/automata/ChannelResponder.cpp - src/automata/ChannelResponder.h - src/automata/ConsumerBase.cpp - src/automata/ConsumerBase.h - src/automata/PublisherBase.h - src/automata/RequestResponseRequester.cpp - src/automata/RequestResponseRequester.h - src/automata/RequestResponseResponder.cpp - src/automata/RequestResponseResponder.h - src/automata/StreamAutomatonBase.cpp - src/automata/StreamAutomatonBase.h - src/automata/StreamRequester.cpp - src/automata/StreamRequester.h - src/automata/StreamResponder.cpp - src/automata/StreamResponder.h - src/ClientResumeStatusCallback.h - src/Common.cpp - src/Common.h - src/ConnectionAutomaton.cpp - src/ConnectionAutomaton.h - src/ConnectionSetupPayload.cpp - src/ConnectionSetupPayload.h + src/RSocket.h + # TODO remove when ReactiveStreams all synced + src/temporary_home/OldNewBridge.h + src/RSocket.cpp + src/RSocketServer.h + src/RSocketServer.cpp + src/RSocketClient.h + src/RSocketClient.cpp + src/RSocketRequester.h + src/RSocketRequester.cpp + src/RSocketErrors.h + src/ConnectionAcceptor.h + src/ConnectionFactory.h + src/ConnectionSetupRequest.h + src/ConnectionSetupRequest.cpp + src/ConnectionResumeRequest.h + src/ConnectionResumeRequest.cpp + src/transports/tcp/TcpConnectionAcceptor.h + src/transports/tcp/TcpConnectionAcceptor.cpp + src/transports/tcp/TcpConnectionFactory.h + src/transports/tcp/TcpConnectionFactory.cpp + src/RSocketResponder.h + src/RSocketConnectionHandler.h + src/RSocketConnectionHandler.cpp + src/statemachine/ChannelRequester.cpp + src/statemachine/ChannelRequester.h + src/statemachine/ChannelResponder.cpp + src/statemachine/ChannelResponder.h + src/statemachine/ConsumerBase.cpp + src/statemachine/ConsumerBase.h + src/statemachine/PublisherBase.h + src/statemachine/RequestResponseRequester.cpp + src/statemachine/RequestResponseRequester.h + src/statemachine/RequestResponseResponder.cpp + src/statemachine/RequestResponseResponder.h + src/statemachine/StreamAutomatonBase.cpp + src/statemachine/StreamAutomatonBase.h + src/statemachine/StreamRequester.cpp + src/statemachine/StreamRequester.h + src/statemachine/StreamResponder.cpp + src/statemachine/StreamResponder.h + src/internal/ClientResumeStatusCallback.h + src/internal/Common.cpp + src/internal/Common.h + src/statemachine/RSocketStateMachine.cpp + src/statemachine/RSocketStateMachine.h + src/temporary_home/ConnectionSetupPayload.cpp + src/temporary_home/ConnectionSetupPayload.h src/DuplexConnection.h - src/EnableSharedFromThis.h - src/Executor.cpp - src/Executor.h - src/folly/FollyKeepaliveTimer.cpp - src/folly/FollyKeepaliveTimer.h - src/Frame.cpp - src/Frame.h - src/framed/FramedDuplexConnection.cpp - src/framed/FramedDuplexConnection.h - src/framed/FramedReader.cpp - src/framed/FramedReader.h - src/framed/FramedWriter.cpp - src/framed/FramedWriter.h - src/FrameProcessor.h - src/FrameSerializer.cpp - src/FrameSerializer.h - src/FrameTransport.cpp - src/FrameTransport.h - src/NullRequestHandler.cpp - src/NullRequestHandler.h + src/internal/EnableSharedFromThis.h + src/temporary_home/Executor.cpp + src/temporary_home/Executor.h + src/internal/FollyKeepaliveTimer.cpp + src/internal/FollyKeepaliveTimer.h + src/framing/Frame.cpp + src/framing/Frame.h + src/framing/FramedDuplexConnection.cpp + src/framing/FramedDuplexConnection.h + src/framing/FramedReader.cpp + src/framing/FramedReader.h + src/framing/FramedWriter.cpp + src/framing/FramedWriter.h + src/framing/FrameProcessor.h + src/framing/FrameSerializer.cpp + src/framing/FrameSerializer.h + src/framing/FrameTransport.cpp + src/framing/FrameTransport.h + src/temporary_home/NullRequestHandler.cpp + src/temporary_home/NullRequestHandler.h src/Payload.cpp src/Payload.h - src/ReactiveStreamsCompat.h - src/RequestHandler.h - src/ResumeCache.cpp - src/ResumeCache.h - src/ServerConnectionAcceptor.cpp - src/ServerConnectionAcceptor.h - src/ReactiveSocket.cpp - src/ReactiveSocket.h - src/Stats.cpp - src/Stats.h - src/StreamsFactory.cpp - src/StreamsFactory.h - src/StreamsHandler.h - src/StreamState.cpp - src/StreamState.h - src/SubscriberBase.h - src/SubscriptionBase.h - src/tcp/TcpDuplexConnection.cpp - src/tcp/TcpDuplexConnection.h - src/versions/FrameSerializer_v0.cpp - src/versions/FrameSerializer_v0.h - src/versions/FrameSerializer_v0_1.cpp - src/versions/FrameSerializer_v0_1.h - src/versions/FrameSerializer_v1_0.cpp - src/versions/FrameSerializer_v1_0.h) + src/internal/ReactiveStreamsCompat.h + src/temporary_home/RequestHandler.h + src/temporary_home/ResumeCache.cpp + src/temporary_home/ResumeCache.h + src/temporary_home/ServerConnectionAcceptor.cpp + src/temporary_home/ServerConnectionAcceptor.h + src/temporary_home/ReactiveSocket.cpp + src/temporary_home/ReactiveSocket.h + src/temporary_home/Stats.cpp + src/temporary_home/Stats.h + src/temporary_home/StreamsFactory.cpp + src/temporary_home/StreamsFactory.h + src/temporary_home/StreamsHandler.h + src/temporary_home/StreamState.cpp + src/temporary_home/StreamState.h + src/temporary_home/SubscriberBase.h + src/temporary_home/SubscriptionBase.h + src/transports/tcp/TcpDuplexConnection.cpp + src/transports/tcp/TcpDuplexConnection.h + src/framing/FrameSerializer_v0.cpp + src/framing/FrameSerializer_v0.h + src/framing/FrameSerializer_v0_1.cpp + src/framing/FrameSerializer_v0_1.h + src/framing/FrameSerializer_v1_0.cpp + src/framing/FrameSerializer_v1_0.h) target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/experimental") target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/experimental/yarpl/include") @@ -215,35 +239,38 @@ enable_testing() add_executable( tests - test/ConnectionAutomatonTest.cpp - test/framed/FramedReaderTest.cpp - test/framed/FramedWriterTest.cpp - test/automata/PublisherBaseTest.cpp - test/FrameTest.cpp - test/InlineConnection.cpp - test/InlineConnection.h - test/InlineConnectionTest.cpp - test/MockKeepaliveTimer.h - test/MockRequestHandler.h - test/MockStats.h - test/ReactiveSocketConcurrencyTest.cpp - test/ReactiveSocketTest.cpp - test/SubscriberBaseTest.cpp + test/RSocketClientServerTest.cpp + test/handlers/HelloStreamRequestHandler.h + test/handlers/HelloStreamRequestHandler.cpp + test/statemachine/RSocketStateMachineTest.cpp + test/framing/FramedReaderTest.cpp + test/framing/FramedWriterTest.cpp + test/statemachine/PublisherBaseTest.cpp + test/framing/FrameTest.cpp + test/test_utils/InlineConnection.cpp + test/test_utils/InlineConnection.h + test/test_utils/InlineConnectionTest.cpp + test/test_utils/MockKeepaliveTimer.h + test/test_utils/MockRequestHandler.h + test/test_utils/MockStats.h + test/deprecated/ReactiveSocketConcurrencyTest.cpp + test/deprecated/ReactiveSocketTest.cpp + test/deprecated/SubscriberBaseTest.cpp test/Test.cpp - test/folly/FollyKeepaliveTimerTest.cpp - test/ReactiveSocketResumabilityTest.cpp - test/AllowanceSemaphoreTest.cpp - test/ResumeIdentificationTokenTest.cpp + test/internal/FollyKeepaliveTimerTest.cpp + test/resumption/ReactiveSocketResumabilityTest.cpp + test/internal/AllowanceSemaphoreTest.cpp + test/resumption/ResumeIdentificationTokenTest.cpp test/ServerConnectionAcceptorTest.cpp test/PayloadTest.cpp - test/ResumeCacheTest.cpp + test/resumption/ResumeCacheTest.cpp test/StreamStateTest.cpp test/integration/ClientUtils.h test/integration/ServerFixture.h test/integration/ServerFixture.cpp test/integration/WarmResumptionTest.cpp test/streams/Mocks.h - test/FrameTransportTest.cpp) + test/framing/FrameTransportTest.cpp) target_link_libraries( tests @@ -264,432 +291,313 @@ add_dependencies(tests gmock ReactiveSocket) add_test(NAME ReactiveSocketTests COMMAND tests) add_executable( - tcpclient - test/tcp/TcpClient.cpp - test/simple/PrintSubscriber.cpp - test/simple/PrintSubscriber.h - src/ReactiveSocket.cpp - src/ReactiveSocket.h - test/simple/StatsPrinter.cpp - test/simple/StatsPrinter.h) + tckclient + tck-test/client.cpp + tck-test/TestFileParser.cpp + tck-test/TestFileParser.h + tck-test/TestSubscriber.cpp + tck-test/TestSubscriber.h + tck-test/TestSuite.cpp + tck-test/TestSuite.h + tck-test/TestInterpreter.cpp + tck-test/TestInterpreter.h + tck-test/TypedCommands.h) target_link_libraries( - tcpclient - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) - -add_dependencies(tcpclient gmock) - -add_executable( - tcpserver - test/tcp/TcpServer.cpp - test/simple/PrintSubscriber.cpp - test/simple/PrintSubscriber.h - test/simple/StatsPrinter.cpp - test/simple/StatsPrinter.h) - -target_link_libraries( - tcpserver - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) - -add_dependencies(tcpserver gmock) - -add_executable( - tckclient - tck-test/client.cpp - tck-test/TestFileParser.cpp - tck-test/TestFileParser.h - tck-test/TestSubscriber.cpp - tck-test/TestSubscriber.h - tck-test/TestSuite.cpp - tck-test/TestSuite.h - tck-test/TestInterpreter.cpp - tck-test/TestInterpreter.h - tck-test/TypedCommands.h) - -target_link_libraries( - tckclient - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + tckclient + ReactiveSocket + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - tckserver - tck-test/server.cpp - tck-test/MarbleProcessor.cpp - tck-test/MarbleProcessor.h - test/simple/StatsPrinter.cpp - test/simple/StatsPrinter.h) + tckserver + tck-test/server.cpp + tck-test/MarbleProcessor.cpp + tck-test/MarbleProcessor.h + test/test_utils/StatsPrinter.cpp + test/test_utils/StatsPrinter.h) target_link_libraries( - tckserver - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${DOUBLE-CONVERSION} - ${CMAKE_THREAD_LIBS_INIT}) + tckserver + ReactiveSocket + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GMOCK_LIBS} + ${GLOG_LIBRARY} + ${DOUBLE-CONVERSION} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - tcpresumeclient - test/resume/TcpResumeClient.cpp - test/simple/PrintSubscriber.cpp - test/simple/PrintSubscriber.h - src/ReactiveSocket.cpp - src/ReactiveSocket.h - test/simple/StatsPrinter.cpp - test/simple/StatsPrinter.h) + tcpresumeclient + test/resumption/TcpResumeClient.cpp + test/test_utils/PrintSubscriber.cpp + test/test_utils/PrintSubscriber.h + src/temporary_home/ReactiveSocket.cpp + src/temporary_home/ReactiveSocket.h + test/test_utils/StatsPrinter.cpp + test/test_utils/StatsPrinter.h) target_link_libraries( - tcpresumeclient - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + tcpresumeclient + ReactiveSocket + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GMOCK_LIBS} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_dependencies(tcpresumeclient gmock) add_executable( - tcpresumeserver - test/resume/TcpResumeServer.cpp - test/simple/PrintSubscriber.cpp - test/simple/PrintSubscriber.h - test/simple/StatsPrinter.cpp - test/simple/StatsPrinter.h) + tcpresumeserver + test/resumption/TcpResumeServer.cpp + test/test_utils/PrintSubscriber.cpp + test/test_utils/PrintSubscriber.h + test/test_utils/StatsPrinter.cpp + test/test_utils/StatsPrinter.h) target_link_libraries( - tcpresumeserver - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + tcpresumeserver + ReactiveSocket + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GMOCK_LIBS} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_dependencies(tcpresumeserver gmock) -######################################## -# RSocket Experimental -######################################## - -add_library( - rsocket_experimental - experimental/rsocket/RSocket.h - # TODO remove when ReactiveStreams all synced - experimental/rsocket/OldNewBridge.h - experimental/rsocket-src/RSocket.cpp - experimental/rsocket/RSocketServer.h - experimental/rsocket-src/RSocketServer.cpp - experimental/rsocket/RSocketClient.h - experimental/rsocket-src/RSocketClient.cpp - experimental/rsocket/RSocketRequester.h - experimental/rsocket-src/RSocketRequester.cpp - experimental/rsocket/RSocketErrors.h - experimental/rsocket/ConnectionAcceptor.h - experimental/rsocket/ConnectionFactory.h - experimental/rsocket/ConnectionSetupRequest.h - experimental/rsocket-src/ConnectionSetupRequest.cpp - experimental/rsocket/ConnectionResumeRequest.h - experimental/rsocket-src/ConnectionResumeRequest.cpp - experimental/rsocket/transports/TcpConnectionAcceptor.h - experimental/rsocket-src/transports/TcpConnectionAcceptor.cpp - experimental/rsocket/transports/TcpConnectionFactory.h - experimental/rsocket-src/transports/TcpConnectionFactory.cpp - experimental/rsocket/RSocketResponder.h - experimental/rsocket/RSocketConnectionHandler.h - experimental/rsocket-src/RSocketConnectionHandler.cpp -) - -add_dependencies(rsocket_experimental ReactiveStreams yarpl) - -# include the experimental includes for usage -target_include_directories(rsocket_experimental PUBLIC "${PROJECT_SOURCE_DIR}/experimental") -# yarpl in its current experimental paths -target_include_directories(rsocket_experimental PUBLIC "${PROJECT_SOURCE_DIR}/experimental/yarpl/include") -target_include_directories(rsocket_experimental PUBLIC "${PROJECT_SOURCE_DIR}/experimental/yarpl/src") -#include_directories(${CMAKE_CURRENT_BINARY_DIR}/experimental) - - -add_executable( - rsocket_tests - experimental/rsocket-test/RSocketClientServerTest.cpp - experimental/rsocket-test/handlers/HelloStreamRequestHandler.h - experimental/rsocket-test/handlers/HelloStreamRequestHandler.cpp -) - -target_link_libraries( - rsocket_tests - rsocket_experimental - yarpl - ReactiveSocket - ${FOLLY_LIBRARIES} - ${GMOCK_LIBS} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) - -add_dependencies(rsocket_tests gmock rsocket_experimental) - -add_test(NAME RSocketTests COMMAND rsocket_tests) - ######################################## # Examples ######################################## add_library( - reactivesocket_examples_util - examples/util/ExampleSubscriber.cpp - examples/util/ExampleSubscriber.h + reactivesocket_examples_util + examples/util/ExampleSubscriber.cpp + examples/util/ExampleSubscriber.h ) target_link_libraries( - reactivesocket_examples_util - rsocket_experimental - yarpl - ReactiveSocket - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT} + reactivesocket_examples_util + yarpl + ReactiveSocket + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} ) # request-response-hello-world add_executable( - example_request-response-hello-world-server - examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp + example_request-response-hello-world-server + examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp ) target_link_libraries( - example_request-response-hello-world-server - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_request-response-hello-world-server + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - example_request-response-hello-world-client - examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp + example_request-response-hello-world-client + examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp ) target_link_libraries( - example_request-response-hello-world-client - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_request-response-hello-world-client + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) # fire-and-forget-hello-world add_executable( - example_fire-and-forget-hello-world-server - examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp + example_fire-and-forget-hello-world-server + examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp ) target_link_libraries( - example_fire-and-forget-hello-world-server - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_fire-and-forget-hello-world-server + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - example_fire-and-forget-hello-world-client - examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp + example_fire-and-forget-hello-world-client + examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp ) target_link_libraries( - example_fire-and-forget-hello-world-client - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_fire-and-forget-hello-world-client + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) # stream-hello-world add_executable( - example_stream-hello-world-server - examples/stream-hello-world/StreamHelloWorld_Server.cpp + example_stream-hello-world-server + examples/stream-hello-world/StreamHelloWorld_Server.cpp ) target_link_libraries( - example_stream-hello-world-server - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_stream-hello-world-server + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - example_stream-hello-world-client - examples/stream-hello-world/StreamHelloWorld_Client.cpp + example_stream-hello-world-client + examples/stream-hello-world/StreamHelloWorld_Client.cpp ) target_link_libraries( - example_stream-hello-world-client - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_stream-hello-world-client + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) # channel-hello-world add_executable( - example_channel-hello-world-server - examples/channel-hello-world/ChannelHelloWorld_Server.cpp + example_channel-hello-world-server + examples/channel-hello-world/ChannelHelloWorld_Server.cpp ) target_link_libraries( - example_channel-hello-world-server - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_channel-hello-world-server + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - example_channel-hello-world-client - examples/channel-hello-world/ChannelHelloWorld_Client.cpp + example_channel-hello-world-client + examples/channel-hello-world/ChannelHelloWorld_Client.cpp ) target_link_libraries( - example_channel-hello-world-client - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_channel-hello-world-client + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) # stream-observable-to-flowable add_executable( - example_observable-to-flowable-server - examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp + example_observable-to-flowable-server + examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp ) target_link_libraries( - example_observable-to-flowable-server - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_observable-to-flowable-server + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - example_observable-to-flowable-client - examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp + example_observable-to-flowable-client + examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp ) target_link_libraries( - example_observable-to-flowable-client - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_observable-to-flowable-client + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) # conditional-request-handling add_executable( - example_conditional-request-handling-server - examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp - examples/conditional-request-handling/TextRequestHandler.h - examples/conditional-request-handling/TextRequestHandler.cpp - examples/conditional-request-handling/JsonRequestHandler.cpp - examples/conditional-request-handling/JsonRequestHandler.h + example_conditional-request-handling-server + examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp + examples/conditional-request-handling/TextRequestHandler.h + examples/conditional-request-handling/TextRequestHandler.cpp + examples/conditional-request-handling/JsonRequestHandler.cpp + examples/conditional-request-handling/JsonRequestHandler.h ) target_link_libraries( - example_conditional-request-handling-server - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_conditional-request-handling-server + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) add_executable( - example_conditional-request-handling-client - examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp + example_conditional-request-handling-client + examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp ) target_link_libraries( - example_conditional-request-handling-client - ReactiveSocket - rsocket_experimental - reactivesocket_examples_util - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) + example_conditional-request-handling-client + ReactiveSocket + reactivesocket_examples_util + yarpl + ${FOLLY_LIBRARIES} + ${GFLAGS_LIBRARY} + ${GLOG_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT}) ######################################## # End Examples ######################################## -if(BUILD_BENCHMARKS) +#if(BUILD_BENCHMARKS) add_subdirectory(benchmarks) -endif(BUILD_BENCHMARKS) +#endif(BUILD_BENCHMARKS) # EOF diff --git a/TARGETS b/TARGETS index 88b43429f..15dd0be91 100644 --- a/TARGETS +++ b/TARGETS @@ -72,7 +72,7 @@ cpp_library( ], srcs = glob([ 'src/AbstractStreamAutomaton.cpp', - 'src/automata/*.cpp', + 'src/statemachine/*.cpp', 'src/ConnectionAutomaton.cpp', 'src/ConnectionSetupPayload.cpp', 'src/FrameTransport.cpp', diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 74ac0235d..3be0953e8 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -27,7 +27,6 @@ function(benchmark name file) add_executable(${name} ${file}) target_link_libraries( ${name} - rsocket_experimental ReactiveSocket yarpl ${GOOGLE_BENCHMARK_LIBS} diff --git a/benchmarks/RequestResponseLatency.cpp b/benchmarks/RequestResponseLatency.cpp index a1e2d88f4..c4a6e7480 100644 --- a/benchmarks/RequestResponseLatency.cpp +++ b/benchmarks/RequestResponseLatency.cpp @@ -5,11 +5,11 @@ #include #include #include -#include -#include -#include -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include +#include +#include +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" using namespace ::reactivesocket; diff --git a/benchmarks/RequestResponseThroughput.cpp b/benchmarks/RequestResponseThroughput.cpp index 4dc262a16..0f05a1ae3 100644 --- a/benchmarks/RequestResponseThroughput.cpp +++ b/benchmarks/RequestResponseThroughput.cpp @@ -6,11 +6,11 @@ #include #include #include -#include -#include -#include -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include +#include +#include +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" using namespace ::reactivesocket; diff --git a/benchmarks/StreamThroughput.cpp b/benchmarks/StreamThroughput.cpp index 8a601e6dd..23acaa24c 100644 --- a/benchmarks/StreamThroughput.cpp +++ b/benchmarks/StreamThroughput.cpp @@ -6,12 +6,12 @@ #include #include #include -#include -#include -#include -#include "rsocket/RSocket.h" -#include "rsocket/OldNewBridge.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include +#include +#include +#include "src/RSocket.h" +#include "src/temporary_home/OldNewBridge.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" using namespace ::reactivesocket; diff --git a/examples/channel-hello-world/ChannelHelloWorld_Client.cpp b/examples/channel-hello-world/ChannelHelloWorld_Client.cpp index 3a13353f0..3d4b99259 100644 --- a/examples/channel-hello-world/ChannelHelloWorld_Client.cpp +++ b/examples/channel-hello-world/ChannelHelloWorld_Client.cpp @@ -7,8 +7,8 @@ #include #include "examples/util/ExampleSubscriber.h" -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" diff --git a/examples/channel-hello-world/ChannelHelloWorld_Server.cpp b/examples/channel-hello-world/ChannelHelloWorld_Server.cpp index 1f332bcac..cebb089e4 100644 --- a/examples/channel-hello-world/ChannelHelloWorld_Server.cpp +++ b/examples/channel-hello-world/ChannelHelloWorld_Server.cpp @@ -6,8 +6,8 @@ #include #include -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionAcceptor.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Flowable.h" using namespace reactivesocket; diff --git a/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp b/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp index c1bc8e9cc..f37ba413c 100644 --- a/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp +++ b/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp @@ -6,8 +6,8 @@ #include #include "examples/util/ExampleSubscriber.h" -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" using namespace ::reactivesocket; diff --git a/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp b/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp index a5b989794..6dadd45fd 100644 --- a/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp +++ b/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp @@ -4,9 +4,9 @@ #include #include -#include "rsocket/RSocket.h" -#include "rsocket/RSocketErrors.h" -#include "rsocket/transports/TcpConnectionAcceptor.h" +#include "src/RSocket.h" +#include "src/RSocketErrors.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" #include "JsonRequestHandler.h" #include "TextRequestHandler.h" diff --git a/examples/conditional-request-handling/JsonRequestHandler.h b/examples/conditional-request-handling/JsonRequestHandler.h index 01a65008b..ebc0ce780 100644 --- a/examples/conditional-request-handling/JsonRequestHandler.h +++ b/examples/conditional-request-handling/JsonRequestHandler.h @@ -2,7 +2,7 @@ #pragma once -#include "rsocket/RSocket.h" +#include "src/RSocket.h" #include "src/Payload.h" class JsonRequestHandler : public rsocket::RSocketResponder { diff --git a/examples/conditional-request-handling/TextRequestHandler.h b/examples/conditional-request-handling/TextRequestHandler.h index 575dd6971..fe2a3edba 100644 --- a/examples/conditional-request-handling/TextRequestHandler.h +++ b/examples/conditional-request-handling/TextRequestHandler.h @@ -3,7 +3,7 @@ #pragma once #include "src/Payload.h" -#include "rsocket/RSocket.h" +#include "src/RSocket.h" class TextRequestHandler : public rsocket::RSocketResponder { public: diff --git a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp index 5e02d0837..e661c4b0a 100644 --- a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp +++ b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp @@ -7,8 +7,8 @@ #include #include "examples/util/ExampleSubscriber.h" -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Single.h" diff --git a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp index 0230dc0c0..c67fcf6c5 100644 --- a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp +++ b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp @@ -6,8 +6,8 @@ #include #include -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionAcceptor.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Single.h" using namespace reactivesocket; diff --git a/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp b/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp index 28c3bbf16..599ba4e85 100644 --- a/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp +++ b/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp @@ -7,8 +7,8 @@ #include #include "examples/util/ExampleSubscriber.h" -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Single.h" diff --git a/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp b/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp index 45c6776b1..8222f11a8 100644 --- a/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp +++ b/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp @@ -6,8 +6,8 @@ #include #include -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionAcceptor.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Single.h" using namespace reactivesocket; diff --git a/examples/stream-hello-world/StreamHelloWorld_Client.cpp b/examples/stream-hello-world/StreamHelloWorld_Client.cpp index 989dbcf3d..82ba67ec4 100644 --- a/examples/stream-hello-world/StreamHelloWorld_Client.cpp +++ b/examples/stream-hello-world/StreamHelloWorld_Client.cpp @@ -7,8 +7,8 @@ #include #include "examples/util/ExampleSubscriber.h" -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" diff --git a/examples/stream-hello-world/StreamHelloWorld_Server.cpp b/examples/stream-hello-world/StreamHelloWorld_Server.cpp index f72a65f1d..c60e8ebe8 100644 --- a/examples/stream-hello-world/StreamHelloWorld_Server.cpp +++ b/examples/stream-hello-world/StreamHelloWorld_Server.cpp @@ -6,8 +6,8 @@ #include #include -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionAcceptor.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Flowable.h" using namespace reactivesocket; diff --git a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp index a0c8f23c5..ce9686b1b 100644 --- a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp +++ b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp @@ -7,8 +7,8 @@ #include #include "examples/util/ExampleSubscriber.h" -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" diff --git a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp index cfc90d494..b59e7579d 100644 --- a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp +++ b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp @@ -7,8 +7,8 @@ #include #include -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionAcceptor.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Observable.h" #include "yarpl/schedulers/ThreadScheduler.h" diff --git a/experimental/rsocket/ConnectionAcceptor.h b/src/ConnectionAcceptor.h similarity index 100% rename from experimental/rsocket/ConnectionAcceptor.h rename to src/ConnectionAcceptor.h diff --git a/experimental/rsocket/ConnectionFactory.h b/src/ConnectionFactory.h similarity index 100% rename from experimental/rsocket/ConnectionFactory.h rename to src/ConnectionFactory.h diff --git a/experimental/rsocket-src/ConnectionResumeRequest.cpp b/src/ConnectionResumeRequest.cpp similarity index 71% rename from experimental/rsocket-src/ConnectionResumeRequest.cpp rename to src/ConnectionResumeRequest.cpp index 2e87862f9..7d47e33fe 100644 --- a/experimental/rsocket-src/ConnectionResumeRequest.cpp +++ b/src/ConnectionResumeRequest.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/ConnectionResumeRequest.h" +#include "ConnectionResumeRequest.h" using namespace reactivesocket; diff --git a/experimental/rsocket/ConnectionResumeRequest.h b/src/ConnectionResumeRequest.h similarity index 93% rename from experimental/rsocket/ConnectionResumeRequest.h rename to src/ConnectionResumeRequest.h index dc4f587ce..8588ada8e 100644 --- a/experimental/rsocket/ConnectionResumeRequest.h +++ b/src/ConnectionResumeRequest.h @@ -2,7 +2,7 @@ #pragma once -#include "src/ReactiveSocket.h" +#include "src/temporary_home/ReactiveSocket.h" namespace rsocket { diff --git a/experimental/rsocket-src/ConnectionSetupRequest.cpp b/src/ConnectionSetupRequest.cpp similarity index 95% rename from experimental/rsocket-src/ConnectionSetupRequest.cpp rename to src/ConnectionSetupRequest.cpp index 9a38a8562..e00ae621d 100644 --- a/experimental/rsocket-src/ConnectionSetupRequest.cpp +++ b/src/ConnectionSetupRequest.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/ConnectionSetupRequest.h" +#include "ConnectionSetupRequest.h" using namespace reactivesocket; diff --git a/experimental/rsocket/ConnectionSetupRequest.h b/src/ConnectionSetupRequest.h similarity index 96% rename from experimental/rsocket/ConnectionSetupRequest.h rename to src/ConnectionSetupRequest.h index 181adda6f..131c5d08e 100644 --- a/experimental/rsocket/ConnectionSetupRequest.h +++ b/src/ConnectionSetupRequest.h @@ -2,7 +2,7 @@ #pragma once -#include "src/ReactiveSocket.h" +#include "src/temporary_home/ReactiveSocket.h" namespace rsocket { diff --git a/src/DuplexConnection.h b/src/DuplexConnection.h index 33de46917..3974a8dae 100644 --- a/src/DuplexConnection.h +++ b/src/DuplexConnection.h @@ -3,7 +3,7 @@ #pragma once #include -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace folly { class IOBuf; diff --git a/src/Payload.cpp b/src/Payload.cpp index c1791d5a0..893d5fcfe 100644 --- a/src/Payload.cpp +++ b/src/Payload.cpp @@ -3,7 +3,7 @@ #include "src/Payload.h" #include #include -#include "src/Frame.h" +#include "src/framing/Frame.h" namespace reactivesocket { diff --git a/src/Payload.h b/src/Payload.h index aa2fe7c0d..66e5c82e2 100644 --- a/src/Payload.h +++ b/src/Payload.h @@ -5,7 +5,7 @@ #include #include #include -#include "src/Common.h" +#include "src/internal/Common.h" namespace reactivesocket { diff --git a/experimental/rsocket-src/RSocket.cpp b/src/RSocket.cpp similarity index 79% rename from experimental/rsocket-src/RSocket.cpp rename to src/RSocket.cpp index 64bd77286..60ab34a5f 100644 --- a/experimental/rsocket-src/RSocket.cpp +++ b/src/RSocket.cpp @@ -1,8 +1,8 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/RSocket.h" -#include -#include "src/folly/FollyKeepaliveTimer.h" +#include "RSocket.h" +#include +#include "src/internal/FollyKeepaliveTimer.h" namespace rsocket { diff --git a/experimental/rsocket/RSocket.h b/src/RSocket.h similarity index 94% rename from experimental/rsocket/RSocket.h rename to src/RSocket.h index a8be0e944..0265029c5 100644 --- a/experimental/rsocket/RSocket.h +++ b/src/RSocket.h @@ -2,8 +2,8 @@ #pragma once -#include "rsocket/RSocketClient.h" -#include "rsocket/RSocketServer.h" +#include "RSocketClient.h" +#include "RSocketServer.h" namespace rsocket { diff --git a/experimental/rsocket-src/RSocketClient.cpp b/src/RSocketClient.cpp similarity index 89% rename from experimental/rsocket-src/RSocketClient.cpp rename to src/RSocketClient.cpp index dcda26afc..496b7f2fa 100644 --- a/experimental/rsocket-src/RSocketClient.cpp +++ b/src/RSocketClient.cpp @@ -1,10 +1,10 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/RSocketClient.h" -#include "rsocket/RSocketRequester.h" -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/folly/FollyKeepaliveTimer.h" +#include "RSocketClient.h" +#include "RSocketRequester.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/internal/FollyKeepaliveTimer.h" using namespace reactivesocket; using namespace folly; diff --git a/experimental/rsocket/RSocketClient.h b/src/RSocketClient.h similarity index 93% rename from experimental/rsocket/RSocketClient.h rename to src/RSocketClient.h index cb90d50dd..78695f665 100644 --- a/experimental/rsocket/RSocketClient.h +++ b/src/RSocketClient.h @@ -3,9 +3,9 @@ #pragma once #include -#include "rsocket/ConnectionFactory.h" -#include "rsocket/RSocketRequester.h" -#include "src/ReactiveSocket.h" +#include "src/ConnectionFactory.h" +#include "RSocketRequester.h" +#include "src/temporary_home/ReactiveSocket.h" namespace rsocket { diff --git a/experimental/rsocket-src/RSocketConnectionHandler.cpp b/src/RSocketConnectionHandler.cpp similarity index 97% rename from experimental/rsocket-src/RSocketConnectionHandler.cpp rename to src/RSocketConnectionHandler.cpp index cdda33907..7443cccf8 100644 --- a/experimental/rsocket-src/RSocketConnectionHandler.cpp +++ b/src/RSocketConnectionHandler.cpp @@ -1,14 +1,14 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/RSocketConnectionHandler.h" +#include "RSocketConnectionHandler.h" #include #include #include -#include "rsocket/OldNewBridge.h" -#include "rsocket/RSocketErrors.h" -#include "src/NullRequestHandler.h" +#include "src/temporary_home/OldNewBridge.h" +#include "RSocketErrors.h" +#include "src/temporary_home/NullRequestHandler.h" namespace rsocket { diff --git a/experimental/rsocket/RSocketConnectionHandler.h b/src/RSocketConnectionHandler.h similarity index 88% rename from experimental/rsocket/RSocketConnectionHandler.h rename to src/RSocketConnectionHandler.h index f92e3dbaf..c78f1bdc0 100644 --- a/experimental/rsocket/RSocketConnectionHandler.h +++ b/src/RSocketConnectionHandler.h @@ -2,11 +2,11 @@ #pragma once -#include "rsocket/ConnectionResumeRequest.h" -#include "rsocket/ConnectionSetupRequest.h" -#include "rsocket/RSocketResponder.h" -#include "src/FrameTransport.h" -#include "src/ServerConnectionAcceptor.h" +#include "src/ConnectionResumeRequest.h" +#include "src/ConnectionSetupRequest.h" +#include "RSocketResponder.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/ServerConnectionAcceptor.h" namespace rsocket { diff --git a/experimental/rsocket/RSocketErrors.h b/src/RSocketErrors.h similarity index 100% rename from experimental/rsocket/RSocketErrors.h rename to src/RSocketErrors.h diff --git a/experimental/rsocket-src/RSocketRequester.cpp b/src/RSocketRequester.cpp similarity index 98% rename from experimental/rsocket-src/RSocketRequester.cpp rename to src/RSocketRequester.cpp index 37b4cd177..b4fb619b2 100644 --- a/experimental/rsocket-src/RSocketRequester.cpp +++ b/src/RSocketRequester.cpp @@ -1,8 +1,8 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/RSocketRequester.h" +#include "RSocketRequester.h" -#include "rsocket/OldNewBridge.h" +#include "src/temporary_home/OldNewBridge.h" #include "yarpl/Flowable.h" #include diff --git a/experimental/rsocket/RSocketRequester.h b/src/RSocketRequester.h similarity index 97% rename from experimental/rsocket/RSocketRequester.h rename to src/RSocketRequester.h index da769c610..04a68f1da 100644 --- a/experimental/rsocket/RSocketRequester.h +++ b/src/RSocketRequester.h @@ -7,8 +7,8 @@ #include "yarpl/Flowable.h" #include "yarpl/Single.h" -#include "src/ReactiveSocket.h" -#include "src/ReactiveStreamsCompat.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace rsocket { diff --git a/experimental/rsocket/RSocketResponder.h b/src/RSocketResponder.h similarity index 98% rename from experimental/rsocket/RSocketResponder.h rename to src/RSocketResponder.h index 0defaa06c..11cc228da 100644 --- a/experimental/rsocket/RSocketResponder.h +++ b/src/RSocketResponder.h @@ -8,7 +8,7 @@ #include "yarpl/Single.h" #include "src/Payload.h" -#include "src/StreamState.h" +#include "src/temporary_home/StreamState.h" namespace rsocket { diff --git a/experimental/rsocket-src/RSocketServer.cpp b/src/RSocketServer.cpp similarity index 97% rename from experimental/rsocket-src/RSocketServer.cpp rename to src/RSocketServer.cpp index 982fa6aa7..c51efe444 100644 --- a/experimental/rsocket-src/RSocketServer.cpp +++ b/src/RSocketServer.cpp @@ -1,10 +1,10 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/RSocketServer.h" +#include "RSocketServer.h" #include -#include "rsocket/RSocketConnectionHandler.h" +#include "RSocketConnectionHandler.h" using namespace reactivesocket; diff --git a/experimental/rsocket/RSocketServer.h b/src/RSocketServer.h similarity index 91% rename from experimental/rsocket/RSocketServer.h rename to src/RSocketServer.h index e999cf353..f2f458dc2 100644 --- a/experimental/rsocket/RSocketServer.h +++ b/src/RSocketServer.h @@ -7,11 +7,11 @@ #include #include -#include "rsocket/ConnectionAcceptor.h" -#include "rsocket/ConnectionSetupRequest.h" -#include "rsocket/RSocketResponder.h" -#include "src/ReactiveSocket.h" -#include "src/ServerConnectionAcceptor.h" +#include "src/ConnectionAcceptor.h" +#include "src/ConnectionSetupRequest.h" +#include "src/RSocketResponder.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/temporary_home/ServerConnectionAcceptor.h" namespace rsocket { diff --git a/src/Frame.cpp b/src/framing/Frame.cpp similarity index 98% rename from src/Frame.cpp rename to src/framing/Frame.cpp index 9fe72ae94..3daed4c6b 100644 --- a/src/Frame.cpp +++ b/src/framing/Frame.cpp @@ -1,11 +1,11 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/Frame.h" +#include "src/framing/Frame.h" #include #include #include #include -#include "src/ConnectionSetupPayload.h" +#include "src/temporary_home/ConnectionSetupPayload.h" namespace reactivesocket { diff --git a/src/Frame.h b/src/framing/Frame.h similarity index 100% rename from src/Frame.h rename to src/framing/Frame.h diff --git a/src/FrameProcessor.h b/src/framing/FrameProcessor.h similarity index 91% rename from src/FrameProcessor.h rename to src/framing/FrameProcessor.h index e7e4fe11d..080ee6459 100644 --- a/src/FrameProcessor.h +++ b/src/framing/FrameProcessor.h @@ -2,7 +2,7 @@ #pragma once -#include "src/Common.h" +#include "src/internal/Common.h" namespace folly { class IOBuf; diff --git a/src/FrameSerializer.cpp b/src/framing/FrameSerializer.cpp similarity index 93% rename from src/FrameSerializer.cpp rename to src/framing/FrameSerializer.cpp index 4713a6c03..e7f9980b0 100644 --- a/src/FrameSerializer.cpp +++ b/src/framing/FrameSerializer.cpp @@ -1,11 +1,11 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/FrameSerializer.h" +#include "FrameSerializer.h" #include #include -#include "src/versions/FrameSerializer_v0.h" -#include "src/versions/FrameSerializer_v0_1.h" -#include "src/versions/FrameSerializer_v1_0.h" +#include "FrameSerializer_v0.h" +#include "FrameSerializer_v0_1.h" +#include "FrameSerializer_v1_0.h" DEFINE_string( rs_use_protocol_version, diff --git a/src/FrameSerializer.h b/src/framing/FrameSerializer.h similarity index 99% rename from src/FrameSerializer.h rename to src/framing/FrameSerializer.h index 0d22cc308..ac82c7a9e 100644 --- a/src/FrameSerializer.h +++ b/src/framing/FrameSerializer.h @@ -6,7 +6,7 @@ #include #include #include -#include "src/Frame.h" +#include "src/framing/Frame.h" namespace reactivesocket { diff --git a/src/versions/FrameSerializer_v0.cpp b/src/framing/FrameSerializer_v0.cpp similarity index 99% rename from src/versions/FrameSerializer_v0.cpp rename to src/framing/FrameSerializer_v0.cpp index 6b6519f31..2598a5e15 100644 --- a/src/versions/FrameSerializer_v0.cpp +++ b/src/framing/FrameSerializer_v0.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/versions/FrameSerializer_v0.h" +#include "FrameSerializer_v0.h" #include namespace reactivesocket { diff --git a/src/versions/FrameSerializer_v0.h b/src/framing/FrameSerializer_v0.h similarity index 98% rename from src/versions/FrameSerializer_v0.h rename to src/framing/FrameSerializer_v0.h index d7234824e..1e8c7c2a4 100644 --- a/src/versions/FrameSerializer_v0.h +++ b/src/framing/FrameSerializer_v0.h @@ -2,7 +2,7 @@ #pragma once -#include "src/FrameSerializer.h" +#include "src/framing/FrameSerializer.h" namespace reactivesocket { diff --git a/src/versions/FrameSerializer_v0_1.cpp b/src/framing/FrameSerializer_v0_1.cpp similarity index 98% rename from src/versions/FrameSerializer_v0_1.cpp rename to src/framing/FrameSerializer_v0_1.cpp index bbba23fd5..5d8d8284a 100644 --- a/src/versions/FrameSerializer_v0_1.cpp +++ b/src/framing/FrameSerializer_v0_1.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/versions/FrameSerializer_v0_1.h" +#include "FrameSerializer_v0_1.h" #include namespace reactivesocket { diff --git a/src/versions/FrameSerializer_v0_1.h b/src/framing/FrameSerializer_v0_1.h similarity index 91% rename from src/versions/FrameSerializer_v0_1.h rename to src/framing/FrameSerializer_v0_1.h index 053dff9e0..83948fed5 100644 --- a/src/versions/FrameSerializer_v0_1.h +++ b/src/framing/FrameSerializer_v0_1.h @@ -2,7 +2,7 @@ #pragma once -#include "src/versions/FrameSerializer_v0.h" +#include "src/framing/FrameSerializer_v0.h" namespace reactivesocket { diff --git a/src/versions/FrameSerializer_v1_0.cpp b/src/framing/FrameSerializer_v1_0.cpp similarity index 99% rename from src/versions/FrameSerializer_v1_0.cpp rename to src/framing/FrameSerializer_v1_0.cpp index a020a98d6..8845e8ab0 100644 --- a/src/versions/FrameSerializer_v1_0.cpp +++ b/src/framing/FrameSerializer_v1_0.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/versions/FrameSerializer_v1_0.h" +#include "FrameSerializer_v1_0.h" #include namespace reactivesocket { diff --git a/src/versions/FrameSerializer_v1_0.h b/src/framing/FrameSerializer_v1_0.h similarity index 98% rename from src/versions/FrameSerializer_v1_0.h rename to src/framing/FrameSerializer_v1_0.h index 0e9f554eb..739f8e707 100644 --- a/src/versions/FrameSerializer_v1_0.h +++ b/src/framing/FrameSerializer_v1_0.h @@ -2,7 +2,7 @@ #pragma once -#include "src/FrameSerializer.h" +#include "src/framing/FrameSerializer.h" namespace reactivesocket { diff --git a/src/FrameTransport.cpp b/src/framing/FrameTransport.cpp similarity index 99% rename from src/FrameTransport.cpp rename to src/framing/FrameTransport.cpp index 8471bb636..665f2c433 100644 --- a/src/FrameTransport.cpp +++ b/src/framing/FrameTransport.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/FrameTransport.h" +#include "FrameTransport.h" #include #include "src/DuplexConnection.h" -#include "src/Frame.h" +#include "src/framing/Frame.h" namespace reactivesocket { diff --git a/src/FrameTransport.h b/src/framing/FrameTransport.h similarity index 93% rename from src/FrameTransport.h rename to src/framing/FrameTransport.h index c816d580c..3320582af 100644 --- a/src/FrameTransport.h +++ b/src/framing/FrameTransport.h @@ -9,11 +9,11 @@ #include #include -#include "src/AllowanceSemaphore.h" -#include "src/Common.h" -#include "src/FrameProcessor.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/internal/Common.h" +#include "src/framing/FrameProcessor.h" #include "src/Payload.h" -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace reactivesocket { diff --git a/src/framed/FramedDuplexConnection.cpp b/src/framing/FramedDuplexConnection.cpp similarity index 89% rename from src/framed/FramedDuplexConnection.cpp rename to src/framing/FramedDuplexConnection.cpp index ed6d1ca6a..ddf70fc8b 100644 --- a/src/framed/FramedDuplexConnection.cpp +++ b/src/framing/FramedDuplexConnection.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/framed/FramedDuplexConnection.h" -#include "src/FrameSerializer.h" -#include "src/framed/FramedReader.h" -#include "src/framed/FramedWriter.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/framing/FrameSerializer.h" +#include "src/framing/FramedReader.h" +#include "src/framing/FramedWriter.h" namespace reactivesocket { diff --git a/src/framed/FramedDuplexConnection.h b/src/framing/FramedDuplexConnection.h similarity index 90% rename from src/framed/FramedDuplexConnection.h rename to src/framing/FramedDuplexConnection.h index c283891ee..73f486614 100644 --- a/src/framed/FramedDuplexConnection.h +++ b/src/framing/FramedDuplexConnection.h @@ -2,9 +2,9 @@ #pragma once -#include -#include -#include "src/Common.h" +#include +#include +#include "src/internal/Common.h" #include "src/DuplexConnection.h" namespace reactivesocket { diff --git a/src/framed/FramedReader.cpp b/src/framing/FramedReader.cpp similarity index 98% rename from src/framed/FramedReader.cpp rename to src/framing/FramedReader.cpp index c58228828..9c4939865 100644 --- a/src/framed/FramedReader.cpp +++ b/src/framing/FramedReader.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/framed/FramedReader.h" +#include "src/framing/FramedReader.h" #include -#include "src/versions/FrameSerializer_v0_1.h" -#include "src/versions/FrameSerializer_v1_0.h" +#include "FrameSerializer_v0_1.h" +#include "FrameSerializer_v1_0.h" namespace reactivesocket { namespace { diff --git a/src/framed/FramedReader.h b/src/framing/FramedReader.h similarity index 91% rename from src/framed/FramedReader.h rename to src/framing/FramedReader.h index 237da105f..ef69437ca 100644 --- a/src/framed/FramedReader.h +++ b/src/framing/FramedReader.h @@ -4,10 +4,10 @@ #include #include -#include "src/AllowanceSemaphore.h" -#include "src/ReactiveStreamsCompat.h" -#include "src/SubscriberBase.h" -#include "src/SubscriptionBase.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/internal/ReactiveStreamsCompat.h" +#include "src/temporary_home/SubscriberBase.h" +#include "src/temporary_home/SubscriptionBase.h" namespace reactivesocket { diff --git a/src/framed/FramedWriter.cpp b/src/framing/FramedWriter.cpp similarity index 98% rename from src/framed/FramedWriter.cpp rename to src/framing/FramedWriter.cpp index 29f3c968b..49c76539c 100644 --- a/src/framed/FramedWriter.cpp +++ b/src/framing/FramedWriter.cpp @@ -1,8 +1,8 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/framed/FramedWriter.h" +#include "src/framing/FramedWriter.h" #include -#include "src/versions/FrameSerializer_v1_0.h" +#include "FrameSerializer_v1_0.h" namespace reactivesocket { diff --git a/src/framed/FramedWriter.h b/src/framing/FramedWriter.h similarity index 92% rename from src/framed/FramedWriter.h rename to src/framing/FramedWriter.h index ad0ceef18..a78d8c30b 100644 --- a/src/framed/FramedWriter.h +++ b/src/framing/FramedWriter.h @@ -4,9 +4,9 @@ #include #include -#include "src/ReactiveStreamsCompat.h" -#include "src/SubscriberBase.h" -#include "src/SubscriptionBase.h" +#include "src/internal/ReactiveStreamsCompat.h" +#include "src/temporary_home/SubscriberBase.h" +#include "src/temporary_home/SubscriptionBase.h" namespace folly { class IOBuf; diff --git a/src/AllowanceSemaphore.h b/src/internal/AllowanceSemaphore.h similarity index 100% rename from src/AllowanceSemaphore.h rename to src/internal/AllowanceSemaphore.h diff --git a/src/ClientResumeStatusCallback.h b/src/internal/ClientResumeStatusCallback.h similarity index 100% rename from src/ClientResumeStatusCallback.h rename to src/internal/ClientResumeStatusCallback.h diff --git a/src/Common.cpp b/src/internal/Common.cpp similarity index 99% rename from src/Common.cpp rename to src/internal/Common.cpp index 3ea3ca85d..3d4083da2 100644 --- a/src/Common.cpp +++ b/src/internal/Common.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/Common.h" +#include "Common.h" #include #include #include diff --git a/src/Common.h b/src/internal/Common.h similarity index 100% rename from src/Common.h rename to src/internal/Common.h diff --git a/src/EnableSharedFromThis.h b/src/internal/EnableSharedFromThis.h similarity index 100% rename from src/EnableSharedFromThis.h rename to src/internal/EnableSharedFromThis.h diff --git a/src/folly/FollyKeepaliveTimer.cpp b/src/internal/FollyKeepaliveTimer.cpp similarity index 100% rename from src/folly/FollyKeepaliveTimer.cpp rename to src/internal/FollyKeepaliveTimer.cpp diff --git a/src/folly/FollyKeepaliveTimer.h b/src/internal/FollyKeepaliveTimer.h similarity index 88% rename from src/folly/FollyKeepaliveTimer.h rename to src/internal/FollyKeepaliveTimer.h index 3a7526dab..0180c060a 100644 --- a/src/folly/FollyKeepaliveTimer.h +++ b/src/internal/FollyKeepaliveTimer.h @@ -3,8 +3,8 @@ #pragma once #include -#include -#include +#include +#include namespace reactivesocket { class FollyKeepaliveTimer : public KeepaliveTimer { diff --git a/src/ReactiveStreamsCompat.h b/src/internal/ReactiveStreamsCompat.h similarity index 100% rename from src/ReactiveStreamsCompat.h rename to src/internal/ReactiveStreamsCompat.h diff --git a/src/StackTraceUtils.h b/src/internal/StackTraceUtils.h similarity index 100% rename from src/StackTraceUtils.h rename to src/internal/StackTraceUtils.h diff --git a/src/automata/ChannelRequester.cpp b/src/statemachine/ChannelRequester.cpp similarity index 99% rename from src/automata/ChannelRequester.cpp rename to src/statemachine/ChannelRequester.cpp index 0d26dd1d5..64e890d1b 100644 --- a/src/automata/ChannelRequester.cpp +++ b/src/statemachine/ChannelRequester.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/ChannelRequester.h" +#include "src/statemachine/ChannelRequester.h" #include namespace reactivesocket { diff --git a/src/automata/ChannelRequester.h b/src/statemachine/ChannelRequester.h similarity index 92% rename from src/automata/ChannelRequester.h rename to src/statemachine/ChannelRequester.h index a2f3d4ec1..1c8c9d553 100644 --- a/src/automata/ChannelRequester.h +++ b/src/statemachine/ChannelRequester.h @@ -5,9 +5,9 @@ #include #include "src/Payload.h" -#include "src/SubscriberBase.h" -#include "src/automata/ConsumerBase.h" -#include "src/automata/PublisherBase.h" +#include "src/temporary_home/SubscriberBase.h" +#include "src/statemachine/ConsumerBase.h" +#include "src/statemachine/PublisherBase.h" #include "yarpl/flowable/Subscriber.h" namespace folly { diff --git a/src/automata/ChannelResponder.cpp b/src/statemachine/ChannelResponder.cpp similarity index 98% rename from src/automata/ChannelResponder.cpp rename to src/statemachine/ChannelResponder.cpp index 0a49377b1..ff6a20f94 100644 --- a/src/automata/ChannelResponder.cpp +++ b/src/statemachine/ChannelResponder.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/ChannelResponder.h" +#include "src/statemachine/ChannelResponder.h" #include namespace reactivesocket { diff --git a/src/automata/ChannelResponder.h b/src/statemachine/ChannelResponder.h similarity index 91% rename from src/automata/ChannelResponder.h rename to src/statemachine/ChannelResponder.h index 012b75c61..55a4854e1 100644 --- a/src/automata/ChannelResponder.h +++ b/src/statemachine/ChannelResponder.h @@ -4,9 +4,9 @@ #include -#include "src/SubscriberBase.h" -#include "src/automata/ConsumerBase.h" -#include "src/automata/PublisherBase.h" +#include "src/temporary_home/SubscriberBase.h" +#include "src/statemachine/ConsumerBase.h" +#include "src/statemachine/PublisherBase.h" #include "yarpl/flowable/Subscriber.h" namespace reactivesocket { diff --git a/src/automata/ConsumerBase.cpp b/src/statemachine/ConsumerBase.cpp similarity index 98% rename from src/automata/ConsumerBase.cpp rename to src/statemachine/ConsumerBase.cpp index b3ccc7182..217a80020 100644 --- a/src/automata/ConsumerBase.cpp +++ b/src/statemachine/ConsumerBase.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/ConsumerBase.h" +#include "src/statemachine/ConsumerBase.h" #include #include diff --git a/src/automata/ConsumerBase.h b/src/statemachine/ConsumerBase.h similarity index 90% rename from src/automata/ConsumerBase.h rename to src/statemachine/ConsumerBase.h index 87b344de4..a2cf82607 100644 --- a/src/automata/ConsumerBase.h +++ b/src/statemachine/ConsumerBase.h @@ -5,12 +5,12 @@ #include #include #include -#include "src/AllowanceSemaphore.h" -#include "src/Common.h" -#include "src/ConnectionAutomaton.h" -#include "src/NullRequestHandler.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/internal/Common.h" +#include "RSocketStateMachine.h" +#include "src/temporary_home/NullRequestHandler.h" #include "src/Payload.h" -#include "src/automata/StreamAutomatonBase.h" +#include "src/statemachine/StreamAutomatonBase.h" #include "yarpl/flowable/Subscription.h" namespace reactivesocket { diff --git a/src/automata/PublisherBase.h b/src/statemachine/PublisherBase.h similarity index 92% rename from src/automata/PublisherBase.h rename to src/statemachine/PublisherBase.h index 83ee2f3cc..e5ffcbc94 100644 --- a/src/automata/PublisherBase.h +++ b/src/statemachine/PublisherBase.h @@ -5,11 +5,11 @@ #include #include #include -#include "src/AllowanceSemaphore.h" -#include "src/ConnectionAutomaton.h" -#include "src/Executor.h" +#include "src/internal/AllowanceSemaphore.h" +#include "RSocketStateMachine.h" +#include "src/temporary_home/Executor.h" #include "src/Payload.h" -#include "src/RequestHandler.h" +#include "src/temporary_home/RequestHandler.h" #include "yarpl/flowable/Subscription.h" namespace reactivesocket { diff --git a/src/ConnectionAutomaton.cpp b/src/statemachine/RSocketStateMachine.cpp similarity index 90% rename from src/ConnectionAutomaton.cpp rename to src/statemachine/RSocketStateMachine.cpp index 06cbb4f90..95e75ddfe 100644 --- a/src/ConnectionAutomaton.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -1,26 +1,26 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/ConnectionAutomaton.h" +#include "RSocketStateMachine.h" #include #include #include #include #include -#include "src/ClientResumeStatusCallback.h" -#include "src/ConnectionSetupPayload.h" +#include "src/internal/ClientResumeStatusCallback.h" +#include "src/temporary_home/ConnectionSetupPayload.h" #include "src/DuplexConnection.h" -#include "src/FrameTransport.h" -#include "src/RequestHandler.h" -#include "src/ResumeCache.h" -#include "src/Stats.h" -#include "src/StreamState.h" -#include "src/automata/ChannelResponder.h" -#include "src/automata/StreamAutomatonBase.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/RequestHandler.h" +#include "src/temporary_home/ResumeCache.h" +#include "src/temporary_home/Stats.h" +#include "src/temporary_home/StreamState.h" +#include "src/statemachine/ChannelResponder.h" +#include "src/statemachine/StreamAutomatonBase.h" namespace reactivesocket { -ConnectionAutomaton::ConnectionAutomaton( +RSocketStateMachine::RSocketStateMachine( folly::Executor& executor, ReactiveSocket* reactiveSocket, std::shared_ptr requestHandler, @@ -42,12 +42,12 @@ ConnectionAutomaton::ConnectionAutomaton( CHECK(streamState_); } -ConnectionAutomaton::~ConnectionAutomaton() { +RSocketStateMachine::~RSocketStateMachine() { // this destructor can be called from a different thread because the stream // automatons destroyed on different threads can be the last ones referencing // this. - VLOG(6) << "~ConnectionAutomaton"; + VLOG(6) << "RSocketStateMachine"; // We rely on SubscriptionPtr and SubscriberPtr to dispatch appropriate // terminal signals. DCHECK(!resumeCallback_); @@ -55,14 +55,14 @@ ConnectionAutomaton::~ConnectionAutomaton() { // close method } -void ConnectionAutomaton::setResumable(bool resumable) { +void RSocketStateMachine::setResumable(bool resumable) { debugCheckCorrectExecutor(); DCHECK(isDisconnectedOrClosed()); // we allow to set this flag before we are // connected remoteResumeable_ = isResumable_ = resumable; } -bool ConnectionAutomaton::connect( +bool RSocketStateMachine::connect( std::shared_ptr frameTransport, bool sendingPendingFrames, ProtocolVersion protocolVersion) { @@ -126,7 +126,7 @@ bool ConnectionAutomaton::connect( return true; } -std::shared_ptr ConnectionAutomaton::detachFrameTransport() { +std::shared_ptr RSocketStateMachine::detachFrameTransport() { debugCheckCorrectExecutor(); if (isDisconnectedOrClosed()) { return nullptr; @@ -136,7 +136,7 @@ std::shared_ptr ConnectionAutomaton::detachFrameTransport() { return std::move(frameTransport_); } -void ConnectionAutomaton::disconnect(folly::exception_wrapper ex) { +void RSocketStateMachine::disconnect(folly::exception_wrapper ex) { debugCheckCorrectExecutor(); VLOG(6) << "disconnect"; if (isDisconnectedOrClosed()) { @@ -154,7 +154,7 @@ void ConnectionAutomaton::disconnect(folly::exception_wrapper ex) { stats_->socketDisconnected(); } -void ConnectionAutomaton::close( +void RSocketStateMachine::close( folly::exception_wrapper ex, StreamCompletionSignal signal) { debugCheckCorrectExecutor(); @@ -187,7 +187,7 @@ void ConnectionAutomaton::close( closeFrameTransport(std::move(ex), signal); } -void ConnectionAutomaton::closeFrameTransport( +void RSocketStateMachine::closeFrameTransport( folly::exception_wrapper ex, StreamCompletionSignal signal) { if (isDisconnectedOrClosed()) { @@ -217,7 +217,7 @@ void ConnectionAutomaton::closeFrameTransport( frameTransport_ = nullptr; } -void ConnectionAutomaton::disconnectOrCloseWithError(Frame_ERROR&& errorFrame) { +void RSocketStateMachine::disconnectOrCloseWithError(Frame_ERROR&& errorFrame) { debugCheckCorrectExecutor(); if (isResumable_) { disconnect(std::runtime_error(errorFrame.payload_.data->cloneAsValue() @@ -228,7 +228,7 @@ void ConnectionAutomaton::disconnectOrCloseWithError(Frame_ERROR&& errorFrame) { } } -void ConnectionAutomaton::closeWithError(Frame_ERROR&& error) { +void RSocketStateMachine::closeWithError(Frame_ERROR&& error) { debugCheckCorrectExecutor(); VLOG(3) << "closeWithError " << error.payload_.data->cloneAsValue().moveToFbString(); @@ -268,7 +268,7 @@ void ConnectionAutomaton::closeWithError(Frame_ERROR&& error) { close(std::move(exception), signal); } -void ConnectionAutomaton::reconnect( +void RSocketStateMachine::reconnect( std::shared_ptr newFrameTransport, std::unique_ptr resumeCallback) { debugCheckCorrectExecutor(); @@ -284,7 +284,7 @@ void ConnectionAutomaton::reconnect( connect(std::move(newFrameTransport), false, ProtocolVersion::Unknown); } -void ConnectionAutomaton::addStream( +void RSocketStateMachine::addStream( StreamId streamId, yarpl::Reference automaton) { debugCheckCorrectExecutor(); @@ -293,7 +293,7 @@ void ConnectionAutomaton::addStream( assert(result.second); } -void ConnectionAutomaton::endStream( +void RSocketStateMachine::endStream( StreamId streamId, StreamCompletionSignal signal) { debugCheckCorrectExecutor(); @@ -309,7 +309,7 @@ void ConnectionAutomaton::endStream( signal == StreamCompletionSignal::ERROR); } -bool ConnectionAutomaton::endStreamInternal( +bool RSocketStateMachine::endStreamInternal( StreamId streamId, StreamCompletionSignal signal) { VLOG(6) << "endStreamInternal"; @@ -325,7 +325,7 @@ bool ConnectionAutomaton::endStreamInternal( return true; } -void ConnectionAutomaton::closeStreams(StreamCompletionSignal signal) { +void RSocketStateMachine::closeStreams(StreamCompletionSignal signal) { // Close all streams. while (!streamState_->streams_.empty()) { auto oldSize = streamState_->streams_.size(); @@ -340,26 +340,26 @@ void ConnectionAutomaton::closeStreams(StreamCompletionSignal signal) { } } -void ConnectionAutomaton::pauseStreams() { +void RSocketStateMachine::pauseStreams() { for (auto& streamKV : streamState_->streams_) { streamKV.second->pauseStream(*requestHandler_); } } -void ConnectionAutomaton::resumeStreams() { +void RSocketStateMachine::resumeStreams() { for (auto& streamKV : streamState_->streams_) { streamKV.second->resumeStream(*requestHandler_); } } -void ConnectionAutomaton::processFrame(std::unique_ptr frame) { +void RSocketStateMachine::processFrame(std::unique_ptr frame) { auto thisPtr = this->shared_from_this(); runInExecutor([ thisPtr, frame = std::move(frame) ]() mutable { thisPtr->processFrameImpl(std::move(frame)); }); } -void ConnectionAutomaton::processFrameImpl( +void RSocketStateMachine::processFrameImpl( std::unique_ptr frame) { if (isClosed()) { return; @@ -405,7 +405,7 @@ void ConnectionAutomaton::processFrameImpl( handleStreamFrame(streamId, frameType, std::move(frame)); } -void ConnectionAutomaton::onTerminal(folly::exception_wrapper ex) { +void RSocketStateMachine::onTerminal(folly::exception_wrapper ex) { auto thisPtr = this->shared_from_this(); auto movedEx = folly::makeMoveWrapper(ex); runInExecutor([thisPtr, movedEx]() mutable { @@ -413,7 +413,7 @@ void ConnectionAutomaton::onTerminal(folly::exception_wrapper ex) { }); } -void ConnectionAutomaton::onTerminalImpl(folly::exception_wrapper ex) { +void RSocketStateMachine::onTerminalImpl(folly::exception_wrapper ex) { if (isResumable_) { disconnect(std::move(ex)); } else { @@ -423,7 +423,7 @@ void ConnectionAutomaton::onTerminalImpl(folly::exception_wrapper ex) { } } -void ConnectionAutomaton::handleConnectionFrame( +void RSocketStateMachine::handleConnectionFrame( FrameType frameType, std::unique_ptr payload) { switch (frameType) { @@ -567,7 +567,7 @@ void ConnectionAutomaton::handleConnectionFrame( } } -void ConnectionAutomaton::handleStreamFrame( +void RSocketStateMachine::handleStreamFrame( StreamId streamId, FrameType frameType, std::unique_ptr serializedFrame) { @@ -634,7 +634,7 @@ void ConnectionAutomaton::handleStreamFrame( } } -void ConnectionAutomaton::handleUnknownStream( +void RSocketStateMachine::handleUnknownStream( StreamId streamId, FrameType frameType, std::unique_ptr serializedFrame) { @@ -713,11 +713,11 @@ void ConnectionAutomaton::handleUnknownStream( } /// @} -void ConnectionAutomaton::sendKeepalive(std::unique_ptr data) { +void RSocketStateMachine::sendKeepalive(std::unique_ptr data) { sendKeepalive(FrameFlags::KEEPALIVE_RESPOND, std::move(data)); } -void ConnectionAutomaton::sendKeepalive( +void RSocketStateMachine::sendKeepalive( FrameFlags flags, std::unique_ptr data) { debugCheckCorrectExecutor(); @@ -727,7 +727,7 @@ void ConnectionAutomaton::sendKeepalive( frameSerializer_->serializeOut(std::move(pingFrame), remoteResumeable_)); } -void ConnectionAutomaton::tryClientResume( +void RSocketStateMachine::tryClientResume( const ResumeIdentificationToken& token, std::shared_ptr frameTransport, std::unique_ptr resumeCallback) { @@ -742,7 +742,7 @@ void ConnectionAutomaton::tryClientResume( reconnect(std::move(frameTransport), std::move(resumeCallback)); } -Frame_RESUME ConnectionAutomaton::createResumeFrame( +Frame_RESUME RSocketStateMachine::createResumeFrame( const ResumeIdentificationToken& token) const { return Frame_RESUME( token, @@ -751,12 +751,12 @@ Frame_RESUME ConnectionAutomaton::createResumeFrame( frameSerializer_->protocolVersion()); } -bool ConnectionAutomaton::isPositionAvailable(ResumePosition position) { +bool RSocketStateMachine::isPositionAvailable(ResumePosition position) { debugCheckCorrectExecutor(); return resumeCache_->isPositionAvailable(position); } -bool ConnectionAutomaton::resumeFromPositionOrClose( +bool RSocketStateMachine::resumeFromPositionOrClose( ResumePosition serverPosition, ResumePosition clientPosition) { debugCheckCorrectExecutor(); @@ -785,7 +785,7 @@ bool ConnectionAutomaton::resumeFromPositionOrClose( } } -void ConnectionAutomaton::resumeFromPosition(ResumePosition position) { +void RSocketStateMachine::resumeFromPosition(ResumePosition position) { DCHECK(!resumeCallback_); DCHECK(!isDisconnectedOrClosed()); DCHECK(resumeCache_->isPositionAvailable(position)); @@ -802,7 +802,7 @@ void ConnectionAutomaton::resumeFromPosition(ResumePosition position) { } } -void ConnectionAutomaton::outputFrameOrEnqueue( +void RSocketStateMachine::outputFrameOrEnqueue( std::unique_ptr frame) { debugCheckCorrectExecutor(); // if we are resuming we cant send any frames until we receive RESUME_OK @@ -813,7 +813,7 @@ void ConnectionAutomaton::outputFrameOrEnqueue( } } -void ConnectionAutomaton::requestFireAndForget(Payload request) { +void RSocketStateMachine::requestFireAndForget(Payload request) { Frame_REQUEST_FNF frame( streamsFactory().getNextStreamId(), FrameFlags::EMPTY, @@ -821,12 +821,12 @@ void ConnectionAutomaton::requestFireAndForget(Payload request) { outputFrameOrEnqueue(frameSerializer_->serializeOut(std::move(frame))); } -void ConnectionAutomaton::metadataPush(std::unique_ptr metadata) { +void RSocketStateMachine::metadataPush(std::unique_ptr metadata) { outputFrameOrEnqueue(frameSerializer_->serializeOut( Frame_METADATA_PUSH(std::move(metadata)))); } -void ConnectionAutomaton::outputFrame(std::unique_ptr frame) { +void RSocketStateMachine::outputFrame(std::unique_ptr frame) { DCHECK(!isDisconnectedOrClosed()); auto frameType = frameSerializer_->peekFrameType(*frame); @@ -839,48 +839,48 @@ void ConnectionAutomaton::outputFrame(std::unique_ptr frame) { frameTransport_->outputFrameOrEnqueue(std::move(frame)); } -uint32_t ConnectionAutomaton::getKeepaliveTime() const { +uint32_t RSocketStateMachine::getKeepaliveTime() const { debugCheckCorrectExecutor(); return keepaliveTimer_ ? static_cast(keepaliveTimer_->keepaliveTime().count()) : Frame_SETUP::kMaxKeepaliveTime; } -bool ConnectionAutomaton::isDisconnectedOrClosed() const { +bool RSocketStateMachine::isDisconnectedOrClosed() const { return !frameTransport_; } -bool ConnectionAutomaton::isClosed() const { +bool RSocketStateMachine::isClosed() const { return isClosed_; } -DuplexConnection* ConnectionAutomaton::duplexConnection() const { +DuplexConnection* RSocketStateMachine::duplexConnection() const { debugCheckCorrectExecutor(); return frameTransport_ ? frameTransport_->duplexConnection() : nullptr; } -void ConnectionAutomaton::debugCheckCorrectExecutor() const { +void RSocketStateMachine::debugCheckCorrectExecutor() const { DCHECK( !dynamic_cast(&executor()) || dynamic_cast(&executor())->isInEventBaseThread()); } -void ConnectionAutomaton::addConnectedListener(std::function listener) { +void RSocketStateMachine::addConnectedListener(std::function listener) { CHECK(listener); onConnectListeners_.push_back(std::move(listener)); } -void ConnectionAutomaton::addDisconnectedListener(ErrorCallback listener) { +void RSocketStateMachine::addDisconnectedListener(ErrorCallback listener) { CHECK(listener); onDisconnectListeners_.push_back(std::move(listener)); } -void ConnectionAutomaton::addClosedListener(ErrorCallback listener) { +void RSocketStateMachine::addClosedListener(ErrorCallback listener) { CHECK(listener); onCloseListeners_.push_back(std::move(listener)); } -void ConnectionAutomaton::setFrameSerializer( +void RSocketStateMachine::setFrameSerializer( std::unique_ptr frameSerializer) { CHECK(frameSerializer); // serializer is not interchangeable, it would screw up resumability @@ -888,7 +888,7 @@ void ConnectionAutomaton::setFrameSerializer( frameSerializer_ = std::move(frameSerializer); } -void ConnectionAutomaton::setUpFrame( +void RSocketStateMachine::setUpFrame( std::shared_ptr frameTransport, ConnectionSetupPayload setupPayload) { auto protocolVersion = getSerializerProtocolVersion(); @@ -915,11 +915,11 @@ void ConnectionAutomaton::setUpFrame( std::move(frameTransport), true, ProtocolVersion::Unknown); } -ProtocolVersion ConnectionAutomaton::getSerializerProtocolVersion() { +ProtocolVersion RSocketStateMachine::getSerializerProtocolVersion() { return frameSerializer_->protocolVersion(); } -void ConnectionAutomaton::writeNewStream( +void RSocketStateMachine::writeNewStream( StreamId streamId, StreamType streamType, uint32_t initialRequestN, @@ -955,12 +955,12 @@ void ConnectionAutomaton::writeNewStream( } } -void ConnectionAutomaton::writeRequestN(StreamId streamId, uint32_t n) { +void RSocketStateMachine::writeRequestN(StreamId streamId, uint32_t n) { outputFrameOrEnqueue( frameSerializer_->serializeOut(Frame_REQUEST_N(streamId, n))); } -void ConnectionAutomaton::writePayload( +void RSocketStateMachine::writePayload( StreamId streamId, Payload payload, bool complete) { @@ -971,7 +971,7 @@ void ConnectionAutomaton::writePayload( outputFrameOrEnqueue(frameSerializer_->serializeOut(std::move(frame))); } -void ConnectionAutomaton::writeCloseStream( +void RSocketStateMachine::writeCloseStream( StreamId streamId, StreamCompletionSignal signal, Payload payload) { @@ -1008,13 +1008,13 @@ void ConnectionAutomaton::writeCloseStream( } } -void ConnectionAutomaton::onStreamClosed( +void RSocketStateMachine::onStreamClosed( StreamId streamId, StreamCompletionSignal signal) { endStream(streamId, signal); } -bool ConnectionAutomaton::ensureOrAutodetectFrameSerializer( +bool RSocketStateMachine::ensureOrAutodetectFrameSerializer( const folly::IOBuf& firstFrame) { if (frameSerializer_) { return true; diff --git a/src/ConnectionAutomaton.h b/src/statemachine/RSocketStateMachine.h similarity index 94% rename from src/ConnectionAutomaton.h rename to src/statemachine/RSocketStateMachine.h index 5bd6faff6..e20a3030b 100644 --- a/src/ConnectionAutomaton.h +++ b/src/statemachine/RSocketStateMachine.h @@ -4,22 +4,22 @@ #include #include -#include "src/AllowanceSemaphore.h" -#include "src/Common.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/internal/Common.h" #include "src/DuplexConnection.h" -#include "src/Executor.h" -#include "src/Frame.h" -#include "src/FrameProcessor.h" -#include "src/FrameSerializer.h" +#include "src/temporary_home/Executor.h" +#include "src/framing/Frame.h" +#include "src/framing/FrameProcessor.h" +#include "src/framing/FrameSerializer.h" #include "src/Payload.h" -#include "src/StreamsFactory.h" -#include "src/StreamsHandler.h" +#include "src/temporary_home/StreamsFactory.h" +#include "src/temporary_home/StreamsHandler.h" namespace reactivesocket { class StreamAutomatonBase; class ClientResumeStatusCallback; -class ConnectionAutomaton; +class RSocketStateMachine; class DuplexConnection; class Frame_ERROR; class FrameTransport; @@ -52,14 +52,14 @@ class FrameSink { /// The reason why such a simple memory management story is possible lies in the /// fact that there is no request(n)-based flow control between stream /// automata and ConnectionAutomaton. -class ConnectionAutomaton final +class RSocketStateMachine final : public FrameSink, public FrameProcessor, public ExecutorBase, public StreamsWriter, - public std::enable_shared_from_this { + public std::enable_shared_from_this { public: - ConnectionAutomaton( + RSocketStateMachine( folly::Executor& executor, ReactiveSocket* reactiveSocket, std::shared_ptr requestHandler, @@ -96,7 +96,7 @@ class ConnectionAutomaton final std::shared_ptr, std::unique_ptr); - ~ConnectionAutomaton(); + ~RSocketStateMachine(); /// A contract exposed to StreamAutomatonBase, modelled after Subscriber /// and Subscription contracts, while omitting flow control related signals. diff --git a/src/automata/RequestResponseRequester.cpp b/src/statemachine/RequestResponseRequester.cpp similarity index 95% rename from src/automata/RequestResponseRequester.cpp rename to src/statemachine/RequestResponseRequester.cpp index f7d9d89d5..65ca7ee7d 100644 --- a/src/automata/RequestResponseRequester.cpp +++ b/src/statemachine/RequestResponseRequester.cpp @@ -1,11 +1,11 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/RequestResponseRequester.h" +#include "src/statemachine/RequestResponseRequester.h" #include #include -#include "src/Common.h" -#include "src/ConnectionAutomaton.h" -#include "src/RequestHandler.h" +#include "src/internal/Common.h" +#include "RSocketStateMachine.h" +#include "src/temporary_home/RequestHandler.h" namespace reactivesocket { diff --git a/src/automata/RequestResponseRequester.h b/src/statemachine/RequestResponseRequester.h similarity index 96% rename from src/automata/RequestResponseRequester.h rename to src/statemachine/RequestResponseRequester.h index fd3e38f5f..411278c42 100644 --- a/src/automata/RequestResponseRequester.h +++ b/src/statemachine/RequestResponseRequester.h @@ -4,7 +4,7 @@ #include #include "src/Payload.h" -#include "src/automata/StreamAutomatonBase.h" +#include "src/statemachine/StreamAutomatonBase.h" #include "yarpl/flowable/Subscription.h" #include "yarpl/flowable/Subscriber.h" diff --git a/src/automata/RequestResponseResponder.cpp b/src/statemachine/RequestResponseResponder.cpp similarity index 97% rename from src/automata/RequestResponseResponder.cpp rename to src/statemachine/RequestResponseResponder.cpp index 181b098d2..0e0814009 100644 --- a/src/automata/RequestResponseResponder.cpp +++ b/src/statemachine/RequestResponseResponder.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/RequestResponseResponder.h" +#include "src/statemachine/RequestResponseResponder.h" #include namespace reactivesocket { diff --git a/src/automata/RequestResponseResponder.h b/src/statemachine/RequestResponseResponder.h similarity index 92% rename from src/automata/RequestResponseResponder.h rename to src/statemachine/RequestResponseResponder.h index febea0f71..cef5ec01d 100644 --- a/src/automata/RequestResponseResponder.h +++ b/src/statemachine/RequestResponseResponder.h @@ -2,8 +2,8 @@ #pragma once -#include "src/automata/PublisherBase.h" -#include "src/automata/StreamAutomatonBase.h" +#include "src/statemachine/PublisherBase.h" +#include "src/statemachine/StreamAutomatonBase.h" #include "yarpl/flowable/Subscriber.h" namespace reactivesocket { diff --git a/src/automata/StreamAutomatonBase.cpp b/src/statemachine/StreamAutomatonBase.cpp similarity index 94% rename from src/automata/StreamAutomatonBase.cpp rename to src/statemachine/StreamAutomatonBase.cpp index c83d311d8..3ee50a906 100644 --- a/src/automata/StreamAutomatonBase.cpp +++ b/src/statemachine/StreamAutomatonBase.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/StreamAutomatonBase.h" +#include "src/statemachine/StreamAutomatonBase.h" #include -#include "src/ConnectionAutomaton.h" -#include "src/StreamsHandler.h" +#include "RSocketStateMachine.h" +#include "src/temporary_home/StreamsHandler.h" namespace reactivesocket { diff --git a/src/automata/StreamAutomatonBase.h b/src/statemachine/StreamAutomatonBase.h similarity index 98% rename from src/automata/StreamAutomatonBase.h rename to src/statemachine/StreamAutomatonBase.h index 6dd1d98b0..69431ea79 100644 --- a/src/automata/StreamAutomatonBase.h +++ b/src/statemachine/StreamAutomatonBase.h @@ -5,7 +5,7 @@ #include #include #include -#include "src/Common.h" +#include "src/internal/Common.h" #include #include diff --git a/src/automata/StreamRequester.cpp b/src/statemachine/StreamRequester.cpp similarity index 98% rename from src/automata/StreamRequester.cpp rename to src/statemachine/StreamRequester.cpp index f7ac46a91..6a00eae83 100644 --- a/src/automata/StreamRequester.cpp +++ b/src/statemachine/StreamRequester.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/StreamRequester.h" +#include "src/statemachine/StreamRequester.h" #include namespace reactivesocket { diff --git a/src/automata/StreamRequester.h b/src/statemachine/StreamRequester.h similarity index 94% rename from src/automata/StreamRequester.h rename to src/statemachine/StreamRequester.h index c449f0943..d700d7b6c 100644 --- a/src/automata/StreamRequester.h +++ b/src/statemachine/StreamRequester.h @@ -3,8 +3,8 @@ #pragma once #include -#include "src/AllowanceSemaphore.h" -#include "src/automata/ConsumerBase.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/statemachine/ConsumerBase.h" namespace folly { class exception_wrapper; diff --git a/src/automata/StreamResponder.cpp b/src/statemachine/StreamResponder.cpp similarity index 97% rename from src/automata/StreamResponder.cpp rename to src/statemachine/StreamResponder.cpp index a3ec8e9c9..1dcb75210 100644 --- a/src/automata/StreamResponder.cpp +++ b/src/statemachine/StreamResponder.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/automata/StreamResponder.h" +#include "src/statemachine/StreamResponder.h" #include namespace reactivesocket { diff --git a/src/automata/StreamResponder.h b/src/statemachine/StreamResponder.h similarity index 93% rename from src/automata/StreamResponder.h rename to src/statemachine/StreamResponder.h index 9b6fa344b..4a02d2bb0 100644 --- a/src/automata/StreamResponder.h +++ b/src/statemachine/StreamResponder.h @@ -3,8 +3,8 @@ #pragma once #include -#include "src/automata/PublisherBase.h" -#include "src/automata/StreamAutomatonBase.h" +#include "src/statemachine/PublisherBase.h" +#include "src/statemachine/StreamAutomatonBase.h" #include "yarpl/flowable/Subscriber.h" namespace reactivesocket { diff --git a/src/ConnectionSetupPayload.cpp b/src/temporary_home/ConnectionSetupPayload.cpp similarity index 100% rename from src/ConnectionSetupPayload.cpp rename to src/temporary_home/ConnectionSetupPayload.cpp diff --git a/src/ConnectionSetupPayload.h b/src/temporary_home/ConnectionSetupPayload.h similarity index 96% rename from src/ConnectionSetupPayload.h rename to src/temporary_home/ConnectionSetupPayload.h index 428353b12..3d54f9d89 100644 --- a/src/ConnectionSetupPayload.h +++ b/src/temporary_home/ConnectionSetupPayload.h @@ -4,8 +4,8 @@ #include #include -#include "src/Common.h" -#include "src/FrameSerializer.h" +#include "src/internal/Common.h" +#include "src/framing/FrameSerializer.h" #include "src/Payload.h" namespace reactivesocket { diff --git a/src/Executor.cpp b/src/temporary_home/Executor.cpp similarity index 91% rename from src/Executor.cpp rename to src/temporary_home/Executor.cpp index 9356ae0c7..af7527b6f 100644 --- a/src/Executor.cpp +++ b/src/temporary_home/Executor.cpp @@ -4,8 +4,8 @@ #include #include #include -#include "src/StackTraceUtils.h" -#include "src/SubscriberBase.h" +#include "src/internal/StackTraceUtils.h" +#include "SubscriberBase.h" namespace reactivesocket { diff --git a/src/Executor.h b/src/temporary_home/Executor.h similarity index 100% rename from src/Executor.h rename to src/temporary_home/Executor.h diff --git a/src/NullRequestHandler.cpp b/src/temporary_home/NullRequestHandler.cpp similarity index 98% rename from src/NullRequestHandler.cpp rename to src/temporary_home/NullRequestHandler.cpp index 53bba06ef..cbfe543f0 100644 --- a/src/NullRequestHandler.cpp +++ b/src/temporary_home/NullRequestHandler.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/NullRequestHandler.h" +#include "NullRequestHandler.h" namespace reactivesocket { diff --git a/src/NullRequestHandler.h b/src/temporary_home/NullRequestHandler.h similarity index 97% rename from src/NullRequestHandler.h rename to src/temporary_home/NullRequestHandler.h index 40282ccd4..4c2196ab1 100644 --- a/src/NullRequestHandler.h +++ b/src/temporary_home/NullRequestHandler.h @@ -3,8 +3,8 @@ #pragma once #include -#include "src/ConnectionSetupPayload.h" -#include "src/RequestHandler.h" +#include "src/temporary_home/ConnectionSetupPayload.h" +#include "RequestHandler.h" namespace reactivesocket { diff --git a/experimental/rsocket/OldNewBridge.h b/src/temporary_home/OldNewBridge.h similarity index 99% rename from experimental/rsocket/OldNewBridge.h rename to src/temporary_home/OldNewBridge.h index c4717a034..20ee22897 100644 --- a/experimental/rsocket/OldNewBridge.h +++ b/src/temporary_home/OldNewBridge.h @@ -10,7 +10,7 @@ #include "yarpl/flowable/Subscription.h" #include "src/Payload.h" -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace rsocket { diff --git a/src/ReactiveSocket.cpp b/src/temporary_home/ReactiveSocket.cpp similarity index 97% rename from src/ReactiveSocket.cpp rename to src/temporary_home/ReactiveSocket.cpp index 0c2490e8c..51afcccdb 100644 --- a/src/ReactiveSocket.cpp +++ b/src/temporary_home/ReactiveSocket.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/ReactiveSocket.h" +#include "ReactiveSocket.h" #include #include @@ -8,10 +8,10 @@ #include #include -#include "src/ClientResumeStatusCallback.h" -#include "src/ConnectionAutomaton.h" -#include "src/FrameTransport.h" -#include "src/RequestHandler.h" +#include "src/internal/ClientResumeStatusCallback.h" +#include "src/statemachine/RSocketStateMachine.h" +#include "src/framing/FrameTransport.h" +#include "RequestHandler.h" namespace reactivesocket { @@ -29,7 +29,7 @@ ReactiveSocket::ReactiveSocket( std::shared_ptr stats, std::unique_ptr keepaliveTimer, folly::Executor& executor) - : connection_(std::make_shared( + : connection_(std::make_shared( executor, this, std::move(handler), diff --git a/src/ReactiveSocket.h b/src/temporary_home/ReactiveSocket.h similarity index 96% rename from src/ReactiveSocket.h rename to src/temporary_home/ReactiveSocket.h index b7991ecbd..93e422b96 100644 --- a/src/ReactiveSocket.h +++ b/src/temporary_home/ReactiveSocket.h @@ -3,10 +3,10 @@ #pragma once #include -#include "src/Common.h" -#include "src/ConnectionSetupPayload.h" +#include "src/internal/Common.h" +#include "src/temporary_home/ConnectionSetupPayload.h" #include "src/Payload.h" -#include "src/Stats.h" +#include "Stats.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" @@ -17,7 +17,7 @@ class Executor; namespace reactivesocket { class ClientResumeStatusCallback; -class ConnectionAutomaton; +class RSocketStateMachine; class DuplexConnection; class FrameTransport; class RequestHandler; @@ -134,7 +134,7 @@ class ReactiveSocket { void checkNotClosed() const; void debugCheckCorrectExecutor() const; - std::shared_ptr connection_; + std::shared_ptr connection_; folly::Executor& executor_; }; } diff --git a/src/RequestHandler.h b/src/temporary_home/RequestHandler.h similarity index 97% rename from src/RequestHandler.h rename to src/temporary_home/RequestHandler.h index 5d601223a..40a9bc734 100644 --- a/src/RequestHandler.h +++ b/src/temporary_home/RequestHandler.h @@ -2,8 +2,8 @@ #pragma once -#include "src/Common.h" -#include "src/ConnectionSetupPayload.h" +#include "src/internal/Common.h" +#include "src/temporary_home/ConnectionSetupPayload.h" #include "src/Payload.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" diff --git a/src/ResumeCache.cpp b/src/temporary_home/ResumeCache.cpp similarity index 97% rename from src/ResumeCache.cpp rename to src/temporary_home/ResumeCache.cpp index e0dc75291..88a5eced7 100644 --- a/src/ResumeCache.cpp +++ b/src/temporary_home/ResumeCache.cpp @@ -1,12 +1,12 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/ResumeCache.h" +#include "ResumeCache.h" #include -#include "src/ConnectionAutomaton.h" -#include "src/Frame.h" -#include "src/FrameTransport.h" +#include "src/statemachine/RSocketStateMachine.h" +#include "src/framing/Frame.h" +#include "src/framing/FrameTransport.h" namespace { diff --git a/src/ResumeCache.h b/src/temporary_home/ResumeCache.h similarity index 97% rename from src/ResumeCache.h rename to src/temporary_home/ResumeCache.h index 545924900..14b4707e1 100644 --- a/src/ResumeCache.h +++ b/src/temporary_home/ResumeCache.h @@ -7,8 +7,8 @@ #include -#include "src/Common.h" -#include "src/Stats.h" +#include "src/internal/Common.h" +#include "Stats.h" namespace folly { class IOBuf; @@ -16,7 +16,7 @@ class IOBuf; namespace reactivesocket { -class ConnectionAutomaton; +class RSocketStateMachine; class FrameTransport; // This class stores information necessary to resume the RSocket session. The diff --git a/src/ServerConnectionAcceptor.cpp b/src/temporary_home/ServerConnectionAcceptor.cpp similarity index 97% rename from src/ServerConnectionAcceptor.cpp rename to src/temporary_home/ServerConnectionAcceptor.cpp index 94db8f80b..c0a3ccf60 100644 --- a/src/ServerConnectionAcceptor.cpp +++ b/src/temporary_home/ServerConnectionAcceptor.cpp @@ -1,13 +1,13 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/ServerConnectionAcceptor.h" +#include "ServerConnectionAcceptor.h" #include #include "src/DuplexConnection.h" -#include "src/Frame.h" -#include "src/FrameProcessor.h" -#include "src/FrameSerializer.h" -#include "src/FrameTransport.h" -#include "src/Stats.h" +#include "src/framing/Frame.h" +#include "src/framing/FrameProcessor.h" +#include "src/framing/FrameSerializer.h" +#include "src/framing/FrameTransport.h" +#include "Stats.h" #include diff --git a/src/ServerConnectionAcceptor.h b/src/temporary_home/ServerConnectionAcceptor.h similarity index 96% rename from src/ServerConnectionAcceptor.h rename to src/temporary_home/ServerConnectionAcceptor.h index edc3c7a5d..63c829d88 100644 --- a/src/ServerConnectionAcceptor.h +++ b/src/temporary_home/ServerConnectionAcceptor.h @@ -4,8 +4,8 @@ #include #include -#include "src/Common.h" -#include "src/ConnectionSetupPayload.h" +#include "src/internal/Common.h" +#include "src/temporary_home/ConnectionSetupPayload.h" namespace folly { class EventBase; diff --git a/src/Stats.cpp b/src/temporary_home/Stats.cpp similarity index 95% rename from src/Stats.cpp rename to src/temporary_home/Stats.cpp index d8a56b100..f6b1d9c84 100644 --- a/src/Stats.cpp +++ b/src/temporary_home/Stats.cpp @@ -1,7 +1,7 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/Stats.h" -#include +#include "Stats.h" +#include namespace reactivesocket { diff --git a/src/Stats.h b/src/temporary_home/Stats.h similarity index 96% rename from src/Stats.h rename to src/temporary_home/Stats.h index 5f9cf6452..04732d11f 100644 --- a/src/Stats.h +++ b/src/temporary_home/Stats.h @@ -4,7 +4,7 @@ #include #include -#include "src/Common.h" +#include "src/internal/Common.h" namespace reactivesocket { diff --git a/src/StreamState.cpp b/src/temporary_home/StreamState.cpp similarity index 93% rename from src/StreamState.cpp rename to src/temporary_home/StreamState.cpp index ab1f5341a..52903a7da 100644 --- a/src/StreamState.cpp +++ b/src/temporary_home/StreamState.cpp @@ -1,8 +1,8 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/StreamState.h" +#include "StreamState.h" -#include "src/Stats.h" +#include "src/temporary_home/Stats.h" namespace reactivesocket { diff --git a/src/StreamState.h b/src/temporary_home/StreamState.h similarity index 91% rename from src/StreamState.h rename to src/temporary_home/StreamState.h index 30891bbb5..720aaefdb 100644 --- a/src/StreamState.h +++ b/src/temporary_home/StreamState.h @@ -6,12 +6,12 @@ #include #include #include -#include "src/automata/StreamAutomatonBase.h" +#include "src/statemachine/StreamAutomatonBase.h" #include "yarpl/Refcounted.h" namespace reactivesocket { -class ConnectionAutomaton; +class RSocketStateMachine; class Stats; class StreamAutomatonBase; using StreamId = uint32_t; diff --git a/src/StreamsFactory.cpp b/src/temporary_home/StreamsFactory.cpp similarity index 89% rename from src/StreamsFactory.cpp rename to src/temporary_home/StreamsFactory.cpp index 3e2d13326..275e1d458 100644 --- a/src/StreamsFactory.cpp +++ b/src/temporary_home/StreamsFactory.cpp @@ -1,20 +1,20 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/StreamsFactory.h" -#include "src/ConnectionAutomaton.h" -#include "src/automata/ChannelRequester.h" -#include "src/automata/ChannelResponder.h" -#include "src/automata/RequestResponseRequester.h" -#include "src/automata/RequestResponseResponder.h" -#include "src/automata/StreamRequester.h" -#include "src/automata/StreamResponder.h" +#include "StreamsFactory.h" +#include "src/statemachine/RSocketStateMachine.h" +#include "src/statemachine/ChannelRequester.h" +#include "src/statemachine/ChannelResponder.h" +#include "src/statemachine/RequestResponseRequester.h" +#include "src/statemachine/RequestResponseResponder.h" +#include "src/statemachine/StreamRequester.h" +#include "src/statemachine/StreamResponder.h" namespace reactivesocket { using namespace yarpl; StreamsFactory::StreamsFactory( - ConnectionAutomaton& connection, + RSocketStateMachine& connection, ReactiveSocketMode mode) : connection_(connection), nextStreamId_( diff --git a/src/StreamsFactory.h b/src/temporary_home/StreamsFactory.h similarity index 89% rename from src/StreamsFactory.h rename to src/temporary_home/StreamsFactory.h index d7c3feb93..dd8d158b1 100644 --- a/src/StreamsFactory.h +++ b/src/temporary_home/StreamsFactory.h @@ -2,7 +2,7 @@ #pragma once -#include "src/Common.h" +#include "src/internal/Common.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" @@ -12,13 +12,13 @@ class Executor; namespace reactivesocket { -class ConnectionAutomaton; +class RSocketStateMachine; class ChannelResponder; struct Payload; class StreamsFactory { public: - StreamsFactory(ConnectionAutomaton& connection, ReactiveSocketMode mode); + StreamsFactory(RSocketStateMachine& connection, ReactiveSocketMode mode); yarpl::Reference> createChannelRequester( yarpl::Reference> responseSink); @@ -48,7 +48,7 @@ class StreamsFactory { StreamId getNextStreamId(); private: - ConnectionAutomaton& connection_; + RSocketStateMachine& connection_; StreamId nextStreamId_; StreamId lastPeerStreamId_{0}; }; diff --git a/src/StreamsHandler.h b/src/temporary_home/StreamsHandler.h similarity index 96% rename from src/StreamsHandler.h rename to src/temporary_home/StreamsHandler.h index 3a6e067ea..ebbe53780 100644 --- a/src/StreamsHandler.h +++ b/src/temporary_home/StreamsHandler.h @@ -2,7 +2,7 @@ #pragma once -#include "src/Common.h" +#include "src/internal/Common.h" #include "src/Payload.h" namespace reactivesocket { diff --git a/src/SubscriberBase.h b/src/temporary_home/SubscriberBase.h similarity index 97% rename from src/SubscriberBase.h rename to src/temporary_home/SubscriberBase.h index a7a117859..666fa2580 100644 --- a/src/SubscriberBase.h +++ b/src/temporary_home/SubscriberBase.h @@ -5,10 +5,10 @@ #include #include #include -#include "src/EnableSharedFromThis.h" -#include "src/Executor.h" +#include "src/internal/EnableSharedFromThis.h" +#include "src/temporary_home/Executor.h" #include "src/Payload.h" -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace reactivesocket { diff --git a/src/SubscriptionBase.h b/src/temporary_home/SubscriptionBase.h similarity index 88% rename from src/SubscriptionBase.h rename to src/temporary_home/SubscriptionBase.h index 209af8a62..19766ba56 100644 --- a/src/SubscriptionBase.h +++ b/src/temporary_home/SubscriptionBase.h @@ -2,9 +2,9 @@ #pragma once -#include "src/EnableSharedFromThis.h" -#include "src/Executor.h" -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/EnableSharedFromThis.h" +#include "src/temporary_home/Executor.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace reactivesocket { diff --git a/experimental/rsocket-src/transports/TcpConnectionAcceptor.cpp b/src/transports/tcp/TcpConnectionAcceptor.cpp similarity index 96% rename from experimental/rsocket-src/transports/TcpConnectionAcceptor.cpp rename to src/transports/tcp/TcpConnectionAcceptor.cpp index d4fdd0c33..47da3f390 100644 --- a/experimental/rsocket-src/transports/TcpConnectionAcceptor.cpp +++ b/src/transports/tcp/TcpConnectionAcceptor.cpp @@ -1,12 +1,12 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/transports/TcpConnectionAcceptor.h" +#include "TcpConnectionAcceptor.h" #include #include -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" using namespace reactivesocket; diff --git a/experimental/rsocket/transports/TcpConnectionAcceptor.h b/src/transports/tcp/TcpConnectionAcceptor.h similarity index 97% rename from experimental/rsocket/transports/TcpConnectionAcceptor.h rename to src/transports/tcp/TcpConnectionAcceptor.h index e9a7c338d..d61988731 100644 --- a/experimental/rsocket/transports/TcpConnectionAcceptor.h +++ b/src/transports/tcp/TcpConnectionAcceptor.h @@ -3,7 +3,7 @@ #pragma once #include -#include "rsocket/ConnectionAcceptor.h" +#include "src/ConnectionAcceptor.h" namespace folly { class ScopedEventBaseThread; diff --git a/experimental/rsocket-src/transports/TcpConnectionFactory.cpp b/src/transports/tcp/TcpConnectionFactory.cpp similarity index 93% rename from experimental/rsocket-src/transports/TcpConnectionFactory.cpp rename to src/transports/tcp/TcpConnectionFactory.cpp index 1f9864bd9..49c75838f 100644 --- a/experimental/rsocket-src/transports/TcpConnectionFactory.cpp +++ b/src/transports/tcp/TcpConnectionFactory.cpp @@ -1,13 +1,13 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "rsocket/transports/TcpConnectionFactory.h" +#include "TcpConnectionFactory.h" #include #include #include -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" using namespace reactivesocket; diff --git a/experimental/rsocket/transports/TcpConnectionFactory.h b/src/transports/tcp/TcpConnectionFactory.h similarity index 95% rename from experimental/rsocket/transports/TcpConnectionFactory.h rename to src/transports/tcp/TcpConnectionFactory.h index 2d7ba5a99..2269491e2 100644 --- a/experimental/rsocket/transports/TcpConnectionFactory.h +++ b/src/transports/tcp/TcpConnectionFactory.h @@ -5,7 +5,7 @@ #include #include -#include "rsocket/ConnectionFactory.h" +#include "src/ConnectionFactory.h" #include "src/DuplexConnection.h" diff --git a/src/tcp/TcpDuplexConnection.cpp b/src/transports/tcp/TcpDuplexConnection.cpp similarity index 96% rename from src/tcp/TcpDuplexConnection.cpp rename to src/transports/tcp/TcpDuplexConnection.cpp index fe41b8f70..bfd2d471f 100644 --- a/src/tcp/TcpDuplexConnection.cpp +++ b/src/transports/tcp/TcpDuplexConnection.cpp @@ -1,10 +1,10 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "TcpDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" #include #include -#include "src/SubscriberBase.h" -#include "src/SubscriptionBase.h" +#include "src/temporary_home/SubscriberBase.h" +#include "src/temporary_home/SubscriptionBase.h" namespace reactivesocket { using namespace ::folly; diff --git a/src/tcp/TcpDuplexConnection.h b/src/transports/tcp/TcpDuplexConnection.h similarity index 89% rename from src/tcp/TcpDuplexConnection.h rename to src/transports/tcp/TcpDuplexConnection.h index d05aa8881..339ccb63c 100644 --- a/src/tcp/TcpDuplexConnection.h +++ b/src/transports/tcp/TcpDuplexConnection.h @@ -3,9 +3,9 @@ #pragma once #include -#include +#include #include "src/DuplexConnection.h" -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace reactivesocket { diff --git a/tck-test/TestInterpreter.h b/tck-test/TestInterpreter.h index 46b5db4ec..7685ad3d9 100644 --- a/tck-test/TestInterpreter.h +++ b/tck-test/TestInterpreter.h @@ -4,8 +4,8 @@ #include #include "src/Payload.h" -#include "src/ReactiveStreamsCompat.h" -#include "src/ReactiveSocket.h" +#include "src/internal/ReactiveStreamsCompat.h" +#include "src/temporary_home/ReactiveSocket.h" #include "tck-test/TestSubscriber.h" #include "tck-test/TestSuite.h" diff --git a/tck-test/client.cpp b/tck-test/client.cpp index 49dadebb7..88d7ad0df 100644 --- a/tck-test/client.cpp +++ b/tck-test/client.cpp @@ -6,10 +6,10 @@ #include #include -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" #include "tck-test/TestFileParser.h" #include "tck-test/TestInterpreter.h" diff --git a/tck-test/server.cpp b/tck-test/server.cpp index 1fe824208..35d640a97 100644 --- a/tck-test/server.cpp +++ b/tck-test/server.cpp @@ -8,13 +8,13 @@ #include #include -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/SubscriptionBase.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/temporary_home/SubscriptionBase.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" -#include "test/simple/StatsPrinter.h" +#include "test/test_utils/StatsPrinter.h" #include "tck-test/MarbleProcessor.h" diff --git a/test/PayloadTest.cpp b/test/PayloadTest.cpp index dba9621f7..7fa09e352 100644 --- a/test/PayloadTest.cpp +++ b/test/PayloadTest.cpp @@ -3,9 +3,9 @@ #include #include #include -#include "src/Frame.h" +#include "src/framing/Frame.h" #include "src/Payload.h" -#include "src/versions/FrameSerializer_v0_1.h" +#include "src/framing/FrameSerializer_v0_1.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/experimental/rsocket-test/RSocketClientServerTest.cpp b/test/RSocketClientServerTest.cpp similarity index 89% rename from experimental/rsocket-test/RSocketClientServerTest.cpp rename to test/RSocketClientServerTest.cpp index b7636c633..8ad7dd343 100644 --- a/experimental/rsocket-test/RSocketClientServerTest.cpp +++ b/test/RSocketClientServerTest.cpp @@ -5,10 +5,10 @@ #include -#include "handlers/HelloStreamRequestHandler.h" -#include "rsocket/RSocket.h" -#include "rsocket/transports/TcpConnectionAcceptor.h" -#include "rsocket/transports/TcpConnectionFactory.h" +#include "test/handlers/HelloStreamRequestHandler.h" +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" +#include "src/transports/tcp/TcpConnectionFactory.h" using namespace rsocket; using namespace rsocket::tests; diff --git a/test/ServerConnectionAcceptorTest.cpp b/test/ServerConnectionAcceptorTest.cpp index 6041757ac..3e2454e8e 100644 --- a/test/ServerConnectionAcceptorTest.cpp +++ b/test/ServerConnectionAcceptorTest.cpp @@ -1,12 +1,12 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/ConnectionSetupPayload.h" -#include "src/FrameProcessor.h" -#include "src/FrameSerializer.h" -#include "src/FrameTransport.h" -#include "src/ServerConnectionAcceptor.h" -#include "src/framed/FramedDuplexConnection.h" -#include "test/InlineConnection.h" +#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/framing/FrameProcessor.h" +#include "src/framing/FrameSerializer.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/ServerConnectionAcceptor.h" +#include "src/framing/FramedDuplexConnection.h" +#include "test/test_utils/InlineConnection.h" #include "test/streams/Mocks.h" #include #include diff --git a/test/StreamStateTest.cpp b/test/StreamStateTest.cpp index 5fb23cc21..0c5b24bc6 100644 --- a/test/StreamStateTest.cpp +++ b/test/StreamStateTest.cpp @@ -3,8 +3,8 @@ #include #include -#include "src/StreamState.h" -#include "test/MockStats.h" +#include "src/temporary_home/StreamState.h" +#include "test/test_utils/MockStats.h" using namespace reactivesocket; using namespace testing; diff --git a/test/ReactiveSocketConcurrencyTest.cpp b/test/deprecated/ReactiveSocketConcurrencyTest.cpp similarity index 98% rename from test/ReactiveSocketConcurrencyTest.cpp rename to test/deprecated/ReactiveSocketConcurrencyTest.cpp index afa88cf4a..73249c5df 100644 --- a/test/ReactiveSocketConcurrencyTest.cpp +++ b/test/deprecated/ReactiveSocketConcurrencyTest.cpp @@ -11,12 +11,12 @@ #include #include -#include "MockStats.h" -#include "src/ReactiveSocket.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/versions/FrameSerializer_v0_1.h" -#include "test/InlineConnection.h" -#include "test/MockRequestHandler.h" +#include "test/test_utils/MockStats.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/framing/FrameSerializer_v0_1.h" +#include "test/test_utils/InlineConnection.h" +#include "test/test_utils/MockRequestHandler.h" #include "test/streams/Mocks.h" using namespace ::testing; diff --git a/test/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp similarity index 99% rename from test/ReactiveSocketTest.cpp rename to test/deprecated/ReactiveSocketTest.cpp index 0ab188b94..4449339f5 100644 --- a/test/ReactiveSocketTest.cpp +++ b/test/deprecated/ReactiveSocketTest.cpp @@ -10,15 +10,15 @@ #include #include #include -#include "src/FrameTransport.h" -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/folly/FollyKeepaliveTimer.h" -#include "test/InlineConnection.h" -#include "test/MockKeepaliveTimer.h" -#include "test/MockRequestHandler.h" -#include "test/MockStats.h" -#include "streams/Mocks.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/internal/FollyKeepaliveTimer.h" +#include "test/test_utils/InlineConnection.h" +#include "test/test_utils/MockKeepaliveTimer.h" +#include "test/test_utils/MockRequestHandler.h" +#include "test/test_utils/MockStats.h" +#include "test/streams/Mocks.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/SubscriberBaseTest.cpp b/test/deprecated/SubscriberBaseTest.cpp similarity index 99% rename from test/SubscriberBaseTest.cpp rename to test/deprecated/SubscriberBaseTest.cpp index 40a0aed7b..78153ba6d 100644 --- a/test/SubscriberBaseTest.cpp +++ b/test/deprecated/SubscriberBaseTest.cpp @@ -2,7 +2,7 @@ #include #include -#include "src/SubscriberBase.h" +#include "src/temporary_home/SubscriberBase.h" #include "test/streams/Mocks.h" using namespace ::testing; diff --git a/test/FrameTest.cpp b/test/framing/FrameTest.cpp similarity index 99% rename from test/FrameTest.cpp rename to test/framing/FrameTest.cpp index d797266e8..b8f9793eb 100644 --- a/test/FrameTest.cpp +++ b/test/framing/FrameTest.cpp @@ -5,8 +5,8 @@ #include #include -#include "src/Frame.h" -#include "src/FrameSerializer.h" +#include "src/framing/Frame.h" +#include "src/framing/FrameSerializer.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/FrameTransportTest.cpp b/test/framing/FrameTransportTest.cpp similarity index 83% rename from test/FrameTransportTest.cpp rename to test/framing/FrameTransportTest.cpp index 853226563..9f9491b23 100644 --- a/test/FrameTransportTest.cpp +++ b/test/framing/FrameTransportTest.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include -#include "src/FrameTransport.h" -#include "src/NullRequestHandler.h" -#include "test/InlineConnection.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "test/test_utils/InlineConnection.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/framed/FramedReaderTest.cpp b/test/framing/FramedReaderTest.cpp similarity index 97% rename from test/framed/FramedReaderTest.cpp rename to test/framing/FramedReaderTest.cpp index eb391b5df..74b97dfea 100644 --- a/test/framed/FramedReaderTest.cpp +++ b/test/framing/FramedReaderTest.cpp @@ -6,12 +6,12 @@ #include #include #include -#include "src/FrameSerializer.h" -#include "src/ReactiveSocket.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/framed/FramedReader.h" -#include "test/InlineConnection.h" -#include "test/MockRequestHandler.h" +#include "src/framing/FrameSerializer.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/framing/FramedReader.h" +#include "test/test_utils/InlineConnection.h" +#include "test/test_utils/MockRequestHandler.h" #include "test/streams/Mocks.h" using namespace ::testing; diff --git a/test/framed/FramedWriterTest.cpp b/test/framing/FramedWriterTest.cpp similarity index 98% rename from test/framed/FramedWriterTest.cpp rename to test/framing/FramedWriterTest.cpp index 964c58b88..ac0807559 100644 --- a/test/framed/FramedWriterTest.cpp +++ b/test/framing/FramedWriterTest.cpp @@ -6,8 +6,8 @@ #include #include #include -#include "src/FrameSerializer.h" -#include "src/framed/FramedWriter.h" +#include "src/framing/FrameSerializer.h" +#include "src/framing/FramedWriter.h" #include "test/streams/Mocks.h" using namespace ::testing; diff --git a/experimental/rsocket-test/handlers/HelloStreamRequestHandler.cpp b/test/handlers/HelloStreamRequestHandler.cpp similarity index 100% rename from experimental/rsocket-test/handlers/HelloStreamRequestHandler.cpp rename to test/handlers/HelloStreamRequestHandler.cpp diff --git a/experimental/rsocket-test/handlers/HelloStreamRequestHandler.h b/test/handlers/HelloStreamRequestHandler.h similarity index 74% rename from experimental/rsocket-test/handlers/HelloStreamRequestHandler.h rename to test/handlers/HelloStreamRequestHandler.h index feb56ff21..92b4547c8 100644 --- a/experimental/rsocket-test/handlers/HelloStreamRequestHandler.h +++ b/test/handlers/HelloStreamRequestHandler.h @@ -3,11 +3,11 @@ #pragma once #include -#include "rsocket/RSocketResponder.h" -#include "src/NullRequestHandler.h" +#include "src/RSocketResponder.h" +#include "src/temporary_home/NullRequestHandler.h" #include "src/Payload.h" -#include "src/ReactiveStreamsCompat.h" -#include "src/SubscriptionBase.h" +#include "src/internal/ReactiveStreamsCompat.h" +#include "src/temporary_home/SubscriptionBase.h" #include "yarpl/Flowable.h" namespace rsocket { diff --git a/test/integration/ClientUtils.h b/test/integration/ClientUtils.h index dc9bd0372..6060ae17b 100644 --- a/test/integration/ClientUtils.h +++ b/test/integration/ClientUtils.h @@ -4,13 +4,13 @@ #include -#include "src/ClientResumeStatusCallback.h" -#include "src/FrameTransport.h" -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/folly/FollyKeepaliveTimer.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" +#include "src/internal/ClientResumeStatusCallback.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/internal/FollyKeepaliveTimer.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" namespace reactivesocket { namespace tests { diff --git a/test/integration/ServerFixture.h b/test/integration/ServerFixture.h index 825cf10dc..2573e8ec7 100644 --- a/test/integration/ServerFixture.h +++ b/test/integration/ServerFixture.h @@ -4,12 +4,12 @@ #include -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/ServerConnectionAcceptor.h" -#include "src/SubscriptionBase.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/temporary_home/ServerConnectionAcceptor.h" +#include "src/temporary_home/SubscriptionBase.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" // A fixture class to init/destroy a ReactiveSocket server. This can be used // to run different types of unittests. The server's processes the request(n) diff --git a/test/AllowanceSemaphoreTest.cpp b/test/internal/AllowanceSemaphoreTest.cpp similarity index 97% rename from test/AllowanceSemaphoreTest.cpp rename to test/internal/AllowanceSemaphoreTest.cpp index 05bab324c..7650d0432 100644 --- a/test/AllowanceSemaphoreTest.cpp +++ b/test/internal/AllowanceSemaphoreTest.cpp @@ -2,7 +2,7 @@ #include #include -#include "src/AllowanceSemaphore.h" +#include "src/internal/AllowanceSemaphore.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/folly/FollyKeepaliveTimerTest.cpp b/test/internal/FollyKeepaliveTimerTest.cpp similarity index 93% rename from test/folly/FollyKeepaliveTimerTest.cpp rename to test/internal/FollyKeepaliveTimerTest.cpp index abb1556b2..5e9642e09 100644 --- a/test/folly/FollyKeepaliveTimerTest.cpp +++ b/test/internal/FollyKeepaliveTimerTest.cpp @@ -7,9 +7,9 @@ #include #include -#include -#include -#include "src/framed/FramedDuplexConnection.h" +#include +#include +#include "src/framing/FramedDuplexConnection.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/concurrent/OneToOneRingBufferTest.cpp b/test/internal/OneToOneRingBufferTest.cpp similarity index 100% rename from test/concurrent/OneToOneRingBufferTest.cpp rename to test/internal/OneToOneRingBufferTest.cpp diff --git a/test/ReactiveStreamsMocksCompat.h b/test/internal/ReactiveStreamsMocksCompat.h similarity index 93% rename from test/ReactiveStreamsMocksCompat.h rename to test/internal/ReactiveStreamsMocksCompat.h index e0e26f66c..958954006 100644 --- a/test/ReactiveStreamsMocksCompat.h +++ b/test/internal/ReactiveStreamsMocksCompat.h @@ -2,7 +2,7 @@ #pragma once -#include "streams/Mocks.h" +#include "test/streams/Mocks.h" namespace folly { class exception_wrapper; diff --git a/test/ReactiveSocketResumabilityTest.cpp b/test/resumption/ReactiveSocketResumabilityTest.cpp similarity index 92% rename from test/ReactiveSocketResumabilityTest.cpp rename to test/resumption/ReactiveSocketResumabilityTest.cpp index afa4f133d..bbfaa52c3 100644 --- a/test/ReactiveSocketResumabilityTest.cpp +++ b/test/resumption/ReactiveSocketResumabilityTest.cpp @@ -3,11 +3,11 @@ #include #include -#include "src/NullRequestHandler.h" -#include "MockRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "test/InlineConnection.h" -#include "test/MockStats.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "test/test_utils/MockRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "test/test_utils/InlineConnection.h" +#include "test/test_utils/MockStats.h" #include "test/streams/Mocks.h" using namespace ::testing; diff --git a/test/ResumeCacheTest.cpp b/test/resumption/ResumeCacheTest.cpp similarity index 97% rename from test/ResumeCacheTest.cpp rename to test/resumption/ResumeCacheTest.cpp index 475b1b2bd..9ea063f95 100644 --- a/test/ResumeCacheTest.cpp +++ b/test/resumption/ResumeCacheTest.cpp @@ -5,13 +5,13 @@ #include #include -#include "src/Frame.h" -#include "src/FrameTransport.h" -#include "src/ResumeCache.h" -#include "src/Stats.h" -#include "src/versions/FrameSerializer_v0_1.h" -#include "test/InlineConnection.h" -#include "test/MockStats.h" +#include "src/framing/Frame.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/ResumeCache.h" +#include "src/temporary_home/Stats.h" +#include "src/framing/FrameSerializer_v0_1.h" +#include "test/test_utils/InlineConnection.h" +#include "test/test_utils/MockStats.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/ResumeIdentificationTokenTest.cpp b/test/resumption/ResumeIdentificationTokenTest.cpp similarity index 95% rename from test/ResumeIdentificationTokenTest.cpp rename to test/resumption/ResumeIdentificationTokenTest.cpp index daa4f7b4a..ca0eb8dce 100644 --- a/test/ResumeIdentificationTokenTest.cpp +++ b/test/resumption/ResumeIdentificationTokenTest.cpp @@ -2,7 +2,7 @@ #include #include -#include "src/Common.h" +#include "src/internal/Common.h" #include "test/streams/Mocks.h" using namespace ::testing; diff --git a/test/resume/TcpResumeClient.cpp b/test/resumption/TcpResumeClient.cpp similarity index 93% rename from test/resume/TcpResumeClient.cpp rename to test/resumption/TcpResumeClient.cpp index 97a3df4f8..8b2b2c8e8 100644 --- a/test/resume/TcpResumeClient.cpp +++ b/test/resumption/TcpResumeClient.cpp @@ -6,15 +6,15 @@ #include #include -#include "src/ClientResumeStatusCallback.h" -#include "src/FrameTransport.h" -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/folly/FollyKeepaliveTimer.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" -#include "test/simple/PrintSubscriber.h" -#include "test/simple/StatsPrinter.h" +#include "src/internal/ClientResumeStatusCallback.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/internal/FollyKeepaliveTimer.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" +#include "test/test_utils/PrintSubscriber.h" +#include "test/test_utils/StatsPrinter.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/resume/TcpResumeServer.cpp b/test/resumption/TcpResumeServer.cpp similarity index 95% rename from test/resume/TcpResumeServer.cpp rename to test/resumption/TcpResumeServer.cpp index 16ea6f266..70002532d 100644 --- a/test/resume/TcpResumeServer.cpp +++ b/test/resumption/TcpResumeServer.cpp @@ -5,15 +5,15 @@ #include #include -#include "src/FrameTransport.h" -#include "src/NullRequestHandler.h" -#include "src/ServerConnectionAcceptor.h" -#include "src/ReactiveSocket.h" -#include "src/SubscriptionBase.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" -#include "test/simple/PrintSubscriber.h" -#include "test/simple/StatsPrinter.h" +#include "src/framing/FrameTransport.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/ServerConnectionAcceptor.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/temporary_home/SubscriptionBase.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/transports/tcp/TcpDuplexConnection.h" +#include "test/test_utils/PrintSubscriber.h" +#include "test/test_utils/StatsPrinter.h" using namespace ::testing; using namespace ::reactivesocket; diff --git a/test/automata/PublisherBaseTest.cpp b/test/statemachine/PublisherBaseTest.cpp similarity index 88% rename from test/automata/PublisherBaseTest.cpp rename to test/statemachine/PublisherBaseTest.cpp index 3761a5926..a47c79134 100644 --- a/test/automata/PublisherBaseTest.cpp +++ b/test/statemachine/PublisherBaseTest.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/ReactiveSocket.h" -#include "src/SubscriberBase.h" -#include "src/automata/PublisherBase.h" -#include "test/MockRequestHandler.h" +#include "src/temporary_home/ReactiveSocket.h" +#include "src/temporary_home/SubscriberBase.h" +#include "src/statemachine/PublisherBase.h" +#include "test/test_utils/MockRequestHandler.h" #include #include diff --git a/test/ConnectionAutomatonTest.cpp b/test/statemachine/RSocketStateMachineTest.cpp similarity index 92% rename from test/ConnectionAutomatonTest.cpp rename to test/statemachine/RSocketStateMachineTest.cpp index c0f1b777d..350652601 100644 --- a/test/ConnectionAutomatonTest.cpp +++ b/test/statemachine/RSocketStateMachineTest.cpp @@ -4,13 +4,13 @@ #include #include #include -#include -#include -#include "src/ConnectionAutomaton.h" -#include "src/FrameTransport.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/framed/FramedWriter.h" -#include "test/InlineConnection.h" +#include +#include +#include "src/statemachine/RSocketStateMachine.h" +#include "src/framing/FrameTransport.h" +#include "src/framing/FramedDuplexConnection.h" +#include "src/framing/FramedWriter.h" +#include "test/test_utils/InlineConnection.h" #include "test/streams/Mocks.h" using namespace ::testing; @@ -70,8 +70,8 @@ TEST(ConnectionAutomatonTest, InvalidFrameHeader) { testConnection->setInput(testOutputSubscriber); testConnectionOutput->onSubscribe(inputSubscription); - std::shared_ptr connectionAutomaton; - connectionAutomaton = std::make_shared( + std::shared_ptr connectionAutomaton; + connectionAutomaton = std::make_shared( defaultExecutor(), nullptr, std::make_shared(), @@ -146,8 +146,8 @@ static void terminateTest( testConnection->setInput(testOutputSubscriber); testConnectionOutput->onSubscribe(inputSubscription); - std::shared_ptr connectionAutomaton; - connectionAutomaton = std::make_shared( + std::shared_ptr connectionAutomaton; + connectionAutomaton = std::make_shared( defaultExecutor(), nullptr, std::make_shared(), @@ -195,7 +195,7 @@ TEST(ConnectionAutomatonTest, RefuseFrame) { std::move(testConnection), inlineExecutor()); auto framedTestConnectionOutput = framedTestConnection->getOutput(); - // dump 3 frames to ConnectionAutomaton + // dump 3 frames to RSocketStateMachine // the first frame should be refused and the connection closed // the last 2 frames should be ignored // everything should die gracefully @@ -246,8 +246,8 @@ TEST(ConnectionAutomatonTest, RefuseFrame) { framedTestConnection->setInput(testOutputSubscriber); framedTestConnectionOutput->onSubscribe(inputSubscription); - std::shared_ptr connectionAutomaton; - connectionAutomaton = std::make_shared( + std::shared_ptr connectionAutomaton; + connectionAutomaton = std::make_shared( defaultExecutor(), nullptr, std::make_shared(), diff --git a/test/streams/Mocks.h b/test/streams/Mocks.h index 0099f41d8..403214ab2 100644 --- a/test/streams/Mocks.h +++ b/test/streams/Mocks.h @@ -10,7 +10,7 @@ #include #include #include -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace yarpl { namespace flowable { diff --git a/test/tcp/TcpClient.cpp b/test/tcp/TcpClient.cpp deleted file mode 100644 index 242db2b0d..000000000 --- a/test/tcp/TcpClient.cpp +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include -#include - -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/SubscriptionBase.h" -#include "src/folly/FollyKeepaliveTimer.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" -#include "test/simple/PrintSubscriber.h" -#include "test/simple/StatsPrinter.h" - -using namespace ::testing; -using namespace ::reactivesocket; -using namespace ::folly; -using namespace yarpl; - -DEFINE_string(host, "localhost", "host to connect to"); -DEFINE_int32(port, 9898, "host:port to connect to"); - -namespace { -class Callback : public AsyncSocket::ConnectCallback { - public: - virtual ~Callback() = default; - - void connectSuccess() noexcept override {} - - void connectErr(const AsyncSocketException& ex) noexcept override { - std::cerr << "connectErr " << ex.what() << " " << ex.getType() << std::endl; - } -}; - -class ClientSubscription : public yarpl::flowable::Subscription { - public: - explicit ClientSubscription( - yarpl::Reference> response, - size_t numElems = 2) - : response_(std::move(response)), - numElems_(numElems) {} - - private: - // Subscription methods - void request(int64_t n) noexcept override { - for (size_t i = 0; i < numElems_; i++) { - response_->onNext(Payload("from server " + std::to_string(i))); - } - // response_.onComplete(); - if (auto response = std::move(response_)) { - response->onError(std::make_exception_ptr(std::runtime_error("XXX"))); - } - } - - void cancel() noexcept override {} - - yarpl::Reference> response_; - size_t numElems_; -}; -} - -class ClientRequestHandler : public DefaultRequestHandler { - public: - /// Handles a new inbound Stream requested by the other end. - void handleRequestStream( - Payload request, - StreamId streamId, - const yarpl::Reference>& response) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleRequestStream " << request; - - response->onSubscribe(make_ref(response)); - } - - void handleRequestResponse( - Payload request, - StreamId streamId, - const yarpl::Reference>& response) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleRequestResponse " << request; - - response->onSubscribe(make_ref(response, 1)); - } - - void handleFireAndForgetRequest( - Payload request, - StreamId streamId) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleFireAndForgetRequest " << request; - } - - void handleMetadataPush( - std::unique_ptr request) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleMetadataPush " - << request->moveToFbString(); - } - - std::shared_ptr handleSetupPayload( - ReactiveSocket&, - ConnectionSetupPayload request) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleSetupPayload " << request; - return nullptr; - } -}; - -int main(int argc, char* argv[]) { - FLAGS_logtostderr = true; - FLAGS_minloglevel = 0; - -#ifdef OSS - google::ParseCommandLineFlags(&argc, &argv, true); -#else - gflags::ParseCommandLineFlags(&argc, &argv, true); -#endif - - google::InitGoogleLogging(argv[0]); - google::InstallFailureSignalHandler(); - - ScopedEventBaseThread eventBaseThread; - - std::unique_ptr reactiveSocket; - Callback callback; - auto stats = std::make_shared(); - - eventBaseThread.getEventBase()->runInEventBaseThreadAndWait( - [&callback, &reactiveSocket, &eventBaseThread, stats]() { - folly::AsyncSocket::UniquePtr socket( - new folly::AsyncSocket(eventBaseThread.getEventBase())); - - folly::SocketAddress addr(FLAGS_host, FLAGS_port, true); - - socket->connect(&callback, addr); - - std::cout << "attempting connection to " << addr.describe() - << std::endl; - - std::unique_ptr connection = - std::make_unique( - std::move(socket), inlineExecutor(), stats); - std::unique_ptr framedConnection = - std::make_unique( - std::move(connection), inlineExecutor()); - std::unique_ptr requestHandler = - std::make_unique(); - - reactiveSocket = ReactiveSocket::fromClientConnection( - *eventBaseThread.getEventBase(), - std::move(framedConnection), - std::move(requestHandler), - ConnectionSetupPayload( - "text/plain", "text/plain", Payload("meta", "data")), - stats, - std::make_unique( - *eventBaseThread.getEventBase(), - std::chrono::milliseconds(5000))); - - // reactiveSocket->requestSubscription( - // Payload("from client"), std::make_shared()); - }); - - std::string name; - std::getline(std::cin, name); - - eventBaseThread.getEventBase()->runInEventBaseThreadAndWait( - [&reactiveSocket]() { reactiveSocket.reset(nullptr); }); - - return 0; -} diff --git a/test/tcp/TcpServer.cpp b/test/tcp/TcpServer.cpp deleted file mode 100644 index a6536e36f..000000000 --- a/test/tcp/TcpServer.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include - -#include "src/NullRequestHandler.h" -#include "src/ReactiveSocket.h" -#include "src/SubscriptionBase.h" -#include "src/framed/FramedDuplexConnection.h" -#include "src/tcp/TcpDuplexConnection.h" -#include "test/simple/PrintSubscriber.h" -#include "test/simple/StatsPrinter.h" - -using namespace ::testing; -using namespace ::reactivesocket; -using namespace ::folly; -using namespace yarpl; - -DEFINE_string(address, "9898", "host:port to listen to"); - -namespace { -class ServerSubscription : public yarpl::flowable::Subscription { - public: - explicit ServerSubscription( - yarpl::Reference> response, - size_t numElems = 2) - : response_(std::move(response)), - numElems_(numElems) {} - - private: - // Subscription methods - void request(int64_t n) noexcept override { - for (size_t i = 0; i < numElems_; i++) { - response_->onNext(Payload("from server " + std::to_string(i))); - } - if (auto response = std::move(response_)) { - response->onComplete(); - } - // response_.onError(std::runtime_error("XXX")); - } - - void cancel() noexcept override {} - - yarpl::Reference> response_; - size_t numElems_; -}; - -class ServerRequestHandler : public DefaultRequestHandler { - public: - /// Handles a new inbound Stream requested by the other end. - void handleRequestStream( - Payload request, - StreamId streamId, - const yarpl::Reference>& response) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleRequestStream " << request; - - response->onSubscribe(make_ref(response)); - } - - void handleRequestResponse( - Payload request, - StreamId streamId, - const yarpl::Reference>& response) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleRequestResponse " << request; - - response->onSubscribe(make_ref(response, 1)); - } - - void handleFireAndForgetRequest( - Payload request, - StreamId streamId) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleFireAndForgetRequest " << request; - } - - void handleMetadataPush( - std::unique_ptr request) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleMetadataPush " - << request->moveToFbString(); - } - - std::shared_ptr handleSetupPayload( - ReactiveSocket&, - ConnectionSetupPayload request) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleSetupPayload " << request; - return nullptr; - } -}; - -class Callback : public AsyncServerSocket::AcceptCallback { - public: - Callback(EventBase& eventBase, std::shared_ptr stats) - : eventBase_(eventBase), stats_(std::move(stats)) {} - - virtual ~Callback() = default; - - virtual void connectionAccepted( - int fd, - const SocketAddress& clientAddr) noexcept override { - std::cout << "connectionAccepted" << clientAddr.describe() << std::endl; - - auto socket = - folly::AsyncSocket::UniquePtr(new AsyncSocket(&eventBase_, fd)); - - std::unique_ptr connection = - std::make_unique( - std::move(socket), inlineExecutor(), stats_); - std::unique_ptr framedConnection = - std::make_unique( - std::move(connection), inlineExecutor()); - std::unique_ptr requestHandler = - std::make_unique(); - - auto rs = ReactiveSocket::fromServerConnection( - eventBase_, - std::move(framedConnection), - std::move(requestHandler), - stats_); - - rs->onClosed([ this, rs = rs.get() ](const folly::exception_wrapper& ex) { - removeSocket(*rs); - }); - - reactiveSockets_.push_back(std::move(rs)); - } - - void removeSocket(ReactiveSocket& socket) { - if (!shuttingDown) { - reactiveSockets_.erase(std::remove_if( - reactiveSockets_.begin(), - reactiveSockets_.end(), - [&socket](std::unique_ptr& vecSocket) { - return vecSocket.get() == &socket; - })); - } - } - - virtual void acceptError(const std::exception& ex) noexcept override { - std::cout << "acceptError" << ex.what() << std::endl; - } - - void shutdown() { - shuttingDown = true; - reactiveSockets_.clear(); - } - - private: - std::vector> reactiveSockets_; - EventBase& eventBase_; - std::shared_ptr stats_; - bool shuttingDown{false}; -}; -} - -int main(int argc, char* argv[]) { - FLAGS_logtostderr = true; - FLAGS_minloglevel = 0; - -#ifdef OSS - google::ParseCommandLineFlags(&argc, &argv, true); -#else - gflags::ParseCommandLineFlags(&argc, &argv, true); -#endif - - google::InitGoogleLogging(argv[0]); - google::InstallFailureSignalHandler(); - - auto statsPrinter = std::make_shared(); - - EventBase eventBase; - auto thread = std::thread([&eventBase]() { eventBase.loopForever(); }); - - Callback callback(eventBase, statsPrinter); - - auto serverSocket = AsyncServerSocket::newSocket(&eventBase); - - eventBase.runInEventBaseThreadAndWait( - [&callback, &eventBase, &serverSocket]() { - folly::SocketAddress addr; - addr.setFromLocalIpPort(FLAGS_address); - - serverSocket->bind(addr); - serverSocket->addAcceptCallback(&callback, &eventBase); - serverSocket->listen(10); - serverSocket->startAccepting(); - - std::cout << "server listening on "; - for (auto i : serverSocket->getAddresses()) - std::cout << i.describe() << ' '; - std::cout << '\n'; - }); - - std::string name; - std::getline(std::cin, name); - - eventBase.runInEventBaseThreadAndWait([&callback]() { callback.shutdown(); }); - eventBase.terminateLoopSoon(); - - thread.join(); -} diff --git a/test/InlineConnection.cpp b/test/test_utils/InlineConnection.cpp similarity index 100% rename from test/InlineConnection.cpp rename to test/test_utils/InlineConnection.cpp diff --git a/test/InlineConnection.h b/test/test_utils/InlineConnection.h similarity index 98% rename from test/InlineConnection.h rename to test/test_utils/InlineConnection.h index bff5e3d68..624474885 100644 --- a/test/InlineConnection.h +++ b/test/test_utils/InlineConnection.h @@ -4,7 +4,7 @@ #include #include "src/DuplexConnection.h" -#include "src/ReactiveStreamsCompat.h" +#include "src/internal/ReactiveStreamsCompat.h" namespace reactivesocket { diff --git a/test/InlineConnectionTest.cpp b/test/test_utils/InlineConnectionTest.cpp similarity index 99% rename from test/InlineConnectionTest.cpp rename to test/test_utils/InlineConnectionTest.cpp index d60c17133..f5738f7f8 100644 --- a/test/InlineConnectionTest.cpp +++ b/test/test_utils/InlineConnectionTest.cpp @@ -4,7 +4,7 @@ #include #include #include -#include "test/InlineConnection.h" +#include "InlineConnection.h" #include "test/streams/Mocks.h" using namespace ::testing; diff --git a/test/MockKeepaliveTimer.h b/test/test_utils/MockKeepaliveTimer.h similarity index 81% rename from test/MockKeepaliveTimer.h rename to test/test_utils/MockKeepaliveTimer.h index 10099c230..9ced2d0ca 100644 --- a/test/MockKeepaliveTimer.h +++ b/test/test_utils/MockKeepaliveTimer.h @@ -7,8 +7,8 @@ #include -#include "src/ConnectionAutomaton.h" -#include "src/ReactiveSocket.h" +#include "src/statemachine/RSocketStateMachine.h" +#include "src/temporary_home/ReactiveSocket.h" namespace reactivesocket { class MockKeepaliveTimer : public KeepaliveTimer { diff --git a/test/MockRequestHandler.h b/test/test_utils/MockRequestHandler.h similarity index 98% rename from test/MockRequestHandler.h rename to test/test_utils/MockRequestHandler.h index f9ee5cbfd..6d9c6f3af 100644 --- a/test/MockRequestHandler.h +++ b/test/test_utils/MockRequestHandler.h @@ -7,7 +7,7 @@ #include #include "src/Payload.h" -#include "src/RequestHandler.h" +#include "src/temporary_home/RequestHandler.h" namespace reactivesocket { diff --git a/test/MockStats.h b/test/test_utils/MockStats.h similarity index 90% rename from test/MockStats.h rename to test/test_utils/MockStats.h index f33273961..f8a6b5424 100644 --- a/test/MockStats.h +++ b/test/test_utils/MockStats.h @@ -5,8 +5,8 @@ #include #include -#include -#include +#include +#include #include "src/Payload.h" diff --git a/test/simple/PrintSubscriber.cpp b/test/test_utils/PrintSubscriber.cpp similarity index 95% rename from test/simple/PrintSubscriber.cpp rename to test/test_utils/PrintSubscriber.cpp index 3af1ad5e4..0dd0e900b 100644 --- a/test/simple/PrintSubscriber.cpp +++ b/test/test_utils/PrintSubscriber.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "test/simple/PrintSubscriber.h" +#include "PrintSubscriber.h" #include #include #include diff --git a/test/simple/PrintSubscriber.h b/test/test_utils/PrintSubscriber.h similarity index 100% rename from test/simple/PrintSubscriber.h rename to test/test_utils/PrintSubscriber.h diff --git a/test/simple/StatsPrinter.cpp b/test/test_utils/StatsPrinter.cpp similarity index 97% rename from test/simple/StatsPrinter.cpp rename to test/test_utils/StatsPrinter.cpp index 5b553ba2a..14f1ec073 100644 --- a/test/simple/StatsPrinter.cpp +++ b/test/test_utils/StatsPrinter.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "test/simple/StatsPrinter.h" +#include "StatsPrinter.h" #include namespace reactivesocket { diff --git a/test/simple/StatsPrinter.h b/test/test_utils/StatsPrinter.h similarity index 96% rename from test/simple/StatsPrinter.h rename to test/test_utils/StatsPrinter.h index 342b0642d..b5b46b5b0 100644 --- a/test/simple/StatsPrinter.h +++ b/test/test_utils/StatsPrinter.h @@ -3,7 +3,7 @@ #pragma once #include -#include +#include namespace reactivesocket { class StatsPrinter : public Stats { diff --git a/experimental/yarpl/CMakeLists.txt b/yarpl/CMakeLists.txt similarity index 100% rename from experimental/yarpl/CMakeLists.txt rename to yarpl/CMakeLists.txt diff --git a/experimental/yarpl/README.md b/yarpl/README.md similarity index 100% rename from experimental/yarpl/README.md rename to yarpl/README.md diff --git a/experimental/yarpl/TARGETS b/yarpl/TARGETS similarity index 100% rename from experimental/yarpl/TARGETS rename to yarpl/TARGETS diff --git a/experimental/yarpl/examples/FlowableExamples.cpp b/yarpl/examples/FlowableExamples.cpp similarity index 100% rename from experimental/yarpl/examples/FlowableExamples.cpp rename to yarpl/examples/FlowableExamples.cpp diff --git a/experimental/yarpl/examples/FlowableExamples.h b/yarpl/examples/FlowableExamples.h similarity index 100% rename from experimental/yarpl/examples/FlowableExamples.h rename to yarpl/examples/FlowableExamples.h diff --git a/experimental/yarpl/examples/ObservableExamples.cpp b/yarpl/examples/ObservableExamples.cpp similarity index 100% rename from experimental/yarpl/examples/ObservableExamples.cpp rename to yarpl/examples/ObservableExamples.cpp diff --git a/experimental/yarpl/examples/ObservableExamples.h b/yarpl/examples/ObservableExamples.h similarity index 100% rename from experimental/yarpl/examples/ObservableExamples.h rename to yarpl/examples/ObservableExamples.h diff --git a/experimental/yarpl/examples/yarpl-playground.cpp b/yarpl/examples/yarpl-playground.cpp similarity index 100% rename from experimental/yarpl/examples/yarpl-playground.cpp rename to yarpl/examples/yarpl-playground.cpp diff --git a/experimental/yarpl/include/yarpl/Disposable.h b/yarpl/include/yarpl/Disposable.h similarity index 100% rename from experimental/yarpl/include/yarpl/Disposable.h rename to yarpl/include/yarpl/Disposable.h diff --git a/experimental/yarpl/include/yarpl/Flowable.h b/yarpl/include/yarpl/Flowable.h similarity index 100% rename from experimental/yarpl/include/yarpl/Flowable.h rename to yarpl/include/yarpl/Flowable.h diff --git a/experimental/yarpl/include/yarpl/Observable.h b/yarpl/include/yarpl/Observable.h similarity index 100% rename from experimental/yarpl/include/yarpl/Observable.h rename to yarpl/include/yarpl/Observable.h diff --git a/experimental/yarpl/include/yarpl/Refcounted.h b/yarpl/include/yarpl/Refcounted.h similarity index 100% rename from experimental/yarpl/include/yarpl/Refcounted.h rename to yarpl/include/yarpl/Refcounted.h diff --git a/experimental/yarpl/include/yarpl/Scheduler.h b/yarpl/include/yarpl/Scheduler.h similarity index 100% rename from experimental/yarpl/include/yarpl/Scheduler.h rename to yarpl/include/yarpl/Scheduler.h diff --git a/experimental/yarpl/include/yarpl/Single.h b/yarpl/include/yarpl/Single.h similarity index 100% rename from experimental/yarpl/include/yarpl/Single.h rename to yarpl/include/yarpl/Single.h diff --git a/experimental/yarpl/include/yarpl/flowable/Flowable.h b/yarpl/include/yarpl/flowable/Flowable.h similarity index 100% rename from experimental/yarpl/include/yarpl/flowable/Flowable.h rename to yarpl/include/yarpl/flowable/Flowable.h diff --git a/experimental/yarpl/include/yarpl/flowable/FlowableOperator.h b/yarpl/include/yarpl/flowable/FlowableOperator.h similarity index 100% rename from experimental/yarpl/include/yarpl/flowable/FlowableOperator.h rename to yarpl/include/yarpl/flowable/FlowableOperator.h diff --git a/experimental/yarpl/include/yarpl/flowable/Flowables.h b/yarpl/include/yarpl/flowable/Flowables.h similarity index 100% rename from experimental/yarpl/include/yarpl/flowable/Flowables.h rename to yarpl/include/yarpl/flowable/Flowables.h diff --git a/experimental/yarpl/include/yarpl/flowable/Subscriber.h b/yarpl/include/yarpl/flowable/Subscriber.h similarity index 100% rename from experimental/yarpl/include/yarpl/flowable/Subscriber.h rename to yarpl/include/yarpl/flowable/Subscriber.h diff --git a/experimental/yarpl/include/yarpl/flowable/Subscribers.h b/yarpl/include/yarpl/flowable/Subscribers.h similarity index 100% rename from experimental/yarpl/include/yarpl/flowable/Subscribers.h rename to yarpl/include/yarpl/flowable/Subscribers.h diff --git a/experimental/yarpl/include/yarpl/flowable/Subscription.h b/yarpl/include/yarpl/flowable/Subscription.h similarity index 100% rename from experimental/yarpl/include/yarpl/flowable/Subscription.h rename to yarpl/include/yarpl/flowable/Subscription.h diff --git a/experimental/yarpl/include/yarpl/observable/Observable.h b/yarpl/include/yarpl/observable/Observable.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/Observable.h rename to yarpl/include/yarpl/observable/Observable.h diff --git a/experimental/yarpl/include/yarpl/observable/ObservableOperator.h b/yarpl/include/yarpl/observable/ObservableOperator.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/ObservableOperator.h rename to yarpl/include/yarpl/observable/ObservableOperator.h diff --git a/experimental/yarpl/include/yarpl/observable/Observables.h b/yarpl/include/yarpl/observable/Observables.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/Observables.h rename to yarpl/include/yarpl/observable/Observables.h diff --git a/experimental/yarpl/include/yarpl/observable/Observer.h b/yarpl/include/yarpl/observable/Observer.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/Observer.h rename to yarpl/include/yarpl/observable/Observer.h diff --git a/experimental/yarpl/include/yarpl/observable/Observers.h b/yarpl/include/yarpl/observable/Observers.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/Observers.h rename to yarpl/include/yarpl/observable/Observers.h diff --git a/experimental/yarpl/include/yarpl/observable/Subscription.h b/yarpl/include/yarpl/observable/Subscription.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/Subscription.h rename to yarpl/include/yarpl/observable/Subscription.h diff --git a/experimental/yarpl/include/yarpl/observable/Subscriptions.h b/yarpl/include/yarpl/observable/Subscriptions.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/Subscriptions.h rename to yarpl/include/yarpl/observable/Subscriptions.h diff --git a/experimental/yarpl/include/yarpl/observable/TestObserver.h b/yarpl/include/yarpl/observable/TestObserver.h similarity index 100% rename from experimental/yarpl/include/yarpl/observable/TestObserver.h rename to yarpl/include/yarpl/observable/TestObserver.h diff --git a/experimental/yarpl/include/yarpl/schedulers/ThreadScheduler.h b/yarpl/include/yarpl/schedulers/ThreadScheduler.h similarity index 100% rename from experimental/yarpl/include/yarpl/schedulers/ThreadScheduler.h rename to yarpl/include/yarpl/schedulers/ThreadScheduler.h diff --git a/experimental/yarpl/include/yarpl/single/Single.h b/yarpl/include/yarpl/single/Single.h similarity index 100% rename from experimental/yarpl/include/yarpl/single/Single.h rename to yarpl/include/yarpl/single/Single.h diff --git a/experimental/yarpl/include/yarpl/single/SingleObserver.h b/yarpl/include/yarpl/single/SingleObserver.h similarity index 100% rename from experimental/yarpl/include/yarpl/single/SingleObserver.h rename to yarpl/include/yarpl/single/SingleObserver.h diff --git a/experimental/yarpl/include/yarpl/single/SingleObservers.h b/yarpl/include/yarpl/single/SingleObservers.h similarity index 100% rename from experimental/yarpl/include/yarpl/single/SingleObservers.h rename to yarpl/include/yarpl/single/SingleObservers.h diff --git a/experimental/yarpl/include/yarpl/single/SingleOperator.h b/yarpl/include/yarpl/single/SingleOperator.h similarity index 100% rename from experimental/yarpl/include/yarpl/single/SingleOperator.h rename to yarpl/include/yarpl/single/SingleOperator.h diff --git a/experimental/yarpl/include/yarpl/single/SingleSubscription.h b/yarpl/include/yarpl/single/SingleSubscription.h similarity index 100% rename from experimental/yarpl/include/yarpl/single/SingleSubscription.h rename to yarpl/include/yarpl/single/SingleSubscription.h diff --git a/experimental/yarpl/include/yarpl/single/SingleSubscriptions.h b/yarpl/include/yarpl/single/SingleSubscriptions.h similarity index 100% rename from experimental/yarpl/include/yarpl/single/SingleSubscriptions.h rename to yarpl/include/yarpl/single/SingleSubscriptions.h diff --git a/experimental/yarpl/include/yarpl/single/Singles.h b/yarpl/include/yarpl/single/Singles.h similarity index 100% rename from experimental/yarpl/include/yarpl/single/Singles.h rename to yarpl/include/yarpl/single/Singles.h diff --git a/experimental/yarpl/include/yarpl/utils/type_traits.h b/yarpl/include/yarpl/utils/type_traits.h similarity index 100% rename from experimental/yarpl/include/yarpl/utils/type_traits.h rename to yarpl/include/yarpl/utils/type_traits.h diff --git a/experimental/yarpl/perf/Function_perf.cpp b/yarpl/perf/Function_perf.cpp similarity index 100% rename from experimental/yarpl/perf/Function_perf.cpp rename to yarpl/perf/Function_perf.cpp diff --git a/experimental/yarpl/perf/Observable_perf.cpp b/yarpl/perf/Observable_perf.cpp similarity index 100% rename from experimental/yarpl/perf/Observable_perf.cpp rename to yarpl/perf/Observable_perf.cpp diff --git a/experimental/yarpl/perf/yarpl-perf.cpp b/yarpl/perf/yarpl-perf.cpp similarity index 100% rename from experimental/yarpl/perf/yarpl-perf.cpp rename to yarpl/perf/yarpl-perf.cpp diff --git a/experimental/yarpl/src/yarpl/Refcounted.cpp b/yarpl/src/yarpl/Refcounted.cpp similarity index 100% rename from experimental/yarpl/src/yarpl/Refcounted.cpp rename to yarpl/src/yarpl/Refcounted.cpp diff --git a/experimental/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h b/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h similarity index 100% rename from experimental/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h rename to yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h diff --git a/experimental/yarpl/src/yarpl/flowable/utils/SubscriptionHelper.cpp b/yarpl/src/yarpl/flowable/utils/SubscriptionHelper.cpp similarity index 100% rename from experimental/yarpl/src/yarpl/flowable/utils/SubscriptionHelper.cpp rename to yarpl/src/yarpl/flowable/utils/SubscriptionHelper.cpp diff --git a/experimental/yarpl/src/yarpl/flowable/utils/SubscriptionHelper.h b/yarpl/src/yarpl/flowable/utils/SubscriptionHelper.h similarity index 100% rename from experimental/yarpl/src/yarpl/flowable/utils/SubscriptionHelper.h rename to yarpl/src/yarpl/flowable/utils/SubscriptionHelper.h diff --git a/experimental/yarpl/src/yarpl/observable/Subscriptions.cpp b/yarpl/src/yarpl/observable/Subscriptions.cpp similarity index 100% rename from experimental/yarpl/src/yarpl/observable/Subscriptions.cpp rename to yarpl/src/yarpl/observable/Subscriptions.cpp diff --git a/experimental/yarpl/src/yarpl/schedulers/ThreadScheduler.cpp b/yarpl/src/yarpl/schedulers/ThreadScheduler.cpp similarity index 100% rename from experimental/yarpl/src/yarpl/schedulers/ThreadScheduler.cpp rename to yarpl/src/yarpl/schedulers/ThreadScheduler.cpp diff --git a/experimental/yarpl/src/yarpl/single/SingleSubscriptions.cpp b/yarpl/src/yarpl/single/SingleSubscriptions.cpp similarity index 100% rename from experimental/yarpl/src/yarpl/single/SingleSubscriptions.cpp rename to yarpl/src/yarpl/single/SingleSubscriptions.cpp diff --git a/experimental/yarpl/test/FlowableChaining_test.cpp b/yarpl/test/FlowableChaining_test.cpp similarity index 100% rename from experimental/yarpl/test/FlowableChaining_test.cpp rename to yarpl/test/FlowableChaining_test.cpp diff --git a/experimental/yarpl/test/FlowableCreateSubscribe_test.cpp b/yarpl/test/FlowableCreateSubscribe_test.cpp similarity index 100% rename from experimental/yarpl/test/FlowableCreateSubscribe_test.cpp rename to yarpl/test/FlowableCreateSubscribe_test.cpp diff --git a/experimental/yarpl/test/FlowableTest.cpp b/yarpl/test/FlowableTest.cpp similarity index 100% rename from experimental/yarpl/test/FlowableTest.cpp rename to yarpl/test/FlowableTest.cpp diff --git a/experimental/yarpl/test/Flowable_lifecycle.cpp b/yarpl/test/Flowable_lifecycle.cpp similarity index 100% rename from experimental/yarpl/test/Flowable_lifecycle.cpp rename to yarpl/test/Flowable_lifecycle.cpp diff --git a/experimental/yarpl/test/Flowable_range_test.cpp b/yarpl/test/Flowable_range_test.cpp similarity index 100% rename from experimental/yarpl/test/Flowable_range_test.cpp rename to yarpl/test/Flowable_range_test.cpp diff --git a/experimental/yarpl/test/Observable_Subscription_test.cpp b/yarpl/test/Observable_Subscription_test.cpp similarity index 100% rename from experimental/yarpl/test/Observable_Subscription_test.cpp rename to yarpl/test/Observable_Subscription_test.cpp diff --git a/experimental/yarpl/test/Observable_test.cpp b/yarpl/test/Observable_test.cpp similarity index 100% rename from experimental/yarpl/test/Observable_test.cpp rename to yarpl/test/Observable_test.cpp diff --git a/experimental/yarpl/test/RefcountedTest.cpp b/yarpl/test/RefcountedTest.cpp similarity index 100% rename from experimental/yarpl/test/RefcountedTest.cpp rename to yarpl/test/RefcountedTest.cpp diff --git a/experimental/yarpl/test/ReferenceTest.cpp b/yarpl/test/ReferenceTest.cpp similarity index 100% rename from experimental/yarpl/test/ReferenceTest.cpp rename to yarpl/test/ReferenceTest.cpp diff --git a/experimental/yarpl/test/Scheduler_test.cpp b/yarpl/test/Scheduler_test.cpp similarity index 100% rename from experimental/yarpl/test/Scheduler_test.cpp rename to yarpl/test/Scheduler_test.cpp diff --git a/experimental/yarpl/test/Single_test.cpp b/yarpl/test/Single_test.cpp similarity index 100% rename from experimental/yarpl/test/Single_test.cpp rename to yarpl/test/Single_test.cpp diff --git a/experimental/yarpl/test/SubscriptionHelper_test.cpp b/yarpl/test/SubscriptionHelper_test.cpp similarity index 100% rename from experimental/yarpl/test/SubscriptionHelper_test.cpp rename to yarpl/test/SubscriptionHelper_test.cpp diff --git a/experimental/yarpl/test/Tuple.cpp b/yarpl/test/Tuple.cpp similarity index 100% rename from experimental/yarpl/test/Tuple.cpp rename to yarpl/test/Tuple.cpp diff --git a/experimental/yarpl/test/Tuple.h b/yarpl/test/Tuple.h similarity index 100% rename from experimental/yarpl/test/Tuple.h rename to yarpl/test/Tuple.h diff --git a/experimental/yarpl/test/yarpl-tests.cpp b/yarpl/test/yarpl-tests.cpp similarity index 100% rename from experimental/yarpl/test/yarpl-tests.cpp rename to yarpl/test/yarpl-tests.cpp From 8726d31c3fb69b1b372313dd40e7ca2b00196865 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Tue, 16 May 2017 16:38:56 +0100 Subject: [PATCH 02/31] fixing yarpl dependency (#436) --- CMakeLists.txt | 5 ++--- src/statemachine/StreamAutomatonBase.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a981a9f2b..ec5cfa390 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -216,9 +216,8 @@ add_library( src/framing/FrameSerializer_v1_0.cpp src/framing/FrameSerializer_v1_0.h) -target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/experimental") -target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/experimental/yarpl/include") -target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/experimental/yarpl/src") +target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/yarpl/include") +target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/yarpl/src") target_link_libraries( ReactiveSocket diff --git a/src/statemachine/StreamAutomatonBase.h b/src/statemachine/StreamAutomatonBase.h index 69431ea79..57e331811 100644 --- a/src/statemachine/StreamAutomatonBase.h +++ b/src/statemachine/StreamAutomatonBase.h @@ -7,7 +7,7 @@ #include #include "src/internal/Common.h" #include -#include +#include namespace folly { class IOBuf; From 8b16bbfd32de5a3ec05183aeb99df1699743aa0b Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Wed, 17 May 2017 09:45:11 +0100 Subject: [PATCH 03/31] fixing memory leaking tests (#437) * fixing memory leaking tests * fixing benchmarks --- benchmarks/RequestResponseLatency.cpp | 1 + benchmarks/RequestResponseThroughput.cpp | 2 +- benchmarks/StreamThroughput.cpp | 2 +- src/statemachine/ConsumerBase.cpp | 1 - src/statemachine/RequestResponseRequester.cpp | 1 - src/temporary_home/OldNewBridge.h | 2 -- yarpl/include/yarpl/Refcounted.h | 19 +++++++++++++----- yarpl/include/yarpl/flowable/Flowable.h | 14 +++++++++++++ .../include/yarpl/flowable/FlowableOperator.h | 20 ++++++++++++------- yarpl/include/yarpl/flowable/Subscription.h | 18 +---------------- .../sources/Flowable_FromObservable.h | 17 ++++++++++++++-- yarpl/test/Observable_test.cpp | 18 +++++++++++++++++ 12 files changed, 78 insertions(+), 37 deletions(-) diff --git a/benchmarks/RequestResponseLatency.cpp b/benchmarks/RequestResponseLatency.cpp index c4a6e7480..ea5c076c9 100644 --- a/benchmarks/RequestResponseLatency.cpp +++ b/benchmarks/RequestResponseLatency.cpp @@ -1,5 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. +#include #include #include #include diff --git a/benchmarks/RequestResponseThroughput.cpp b/benchmarks/RequestResponseThroughput.cpp index 0f05a1ae3..d7a59fa99 100644 --- a/benchmarks/RequestResponseThroughput.cpp +++ b/benchmarks/RequestResponseThroughput.cpp @@ -2,7 +2,7 @@ #include #include - +#include #include #include #include diff --git a/benchmarks/StreamThroughput.cpp b/benchmarks/StreamThroughput.cpp index 23acaa24c..ec1988343 100644 --- a/benchmarks/StreamThroughput.cpp +++ b/benchmarks/StreamThroughput.cpp @@ -2,7 +2,7 @@ #include #include - +#include #include #include #include diff --git a/src/statemachine/ConsumerBase.cpp b/src/statemachine/ConsumerBase.cpp index 217a80020..b2acd9595 100644 --- a/src/statemachine/ConsumerBase.cpp +++ b/src/statemachine/ConsumerBase.cpp @@ -38,7 +38,6 @@ void ConsumerBase::endStream(StreamCompletionSignal signal) { subscriber->onError(std::make_exception_ptr(StreamInterruptedException(static_cast(signal)))); } } - Subscription::release(); Base::endStream(signal); } diff --git a/src/statemachine/RequestResponseRequester.cpp b/src/statemachine/RequestResponseRequester.cpp index 65ca7ee7d..dd184b48c 100644 --- a/src/statemachine/RequestResponseRequester.cpp +++ b/src/statemachine/RequestResponseRequester.cpp @@ -72,7 +72,6 @@ void RequestResponseRequester::endStream(StreamCompletionSignal signal) { subscriber->onError(std::make_exception_ptr(StreamInterruptedException(static_cast(signal)))); } } - Subscription::release(); } void RequestResponseRequester::handleError( diff --git a/src/temporary_home/OldNewBridge.h b/src/temporary_home/OldNewBridge.h index 20ee22897..1d50d485a 100644 --- a/src/temporary_home/OldNewBridge.h +++ b/src/temporary_home/OldNewBridge.h @@ -31,9 +31,7 @@ class NewToOldSubscription : public yarpl::flowable::Subscription { void cancel() override { inner_->cancel(); - inner_.reset(); - release(); } private: diff --git a/yarpl/include/yarpl/Refcounted.h b/yarpl/include/yarpl/Refcounted.h index a958f7178..2d2b8fe81 100644 --- a/yarpl/include/yarpl/Refcounted.h +++ b/yarpl/include/yarpl/Refcounted.h @@ -29,10 +29,19 @@ class Refcounted { virtual ~Refcounted() = default; #endif /* NDEBUG */ - private: - template - friend class Reference; + // not intended to be broadly used by the application code + // mostly for library code (static to purposely make it more awkward) + static void incRef(Refcounted& obj) { + obj.incRef(); + } + // not intended to be broadly used by the application code + // mostly for library code (static to purposely make it more awkward) + static void decRef(Refcounted& obj) { + obj.decRef(); + } + + private: void incRef() { refcount_.fetch_add(1, std::memory_order_relaxed); } @@ -145,13 +154,13 @@ class Reference { private: void inc() { if (pointer_) { - pointer_->incRef(); + Refcounted::incRef(*pointer_); } } void dec() { if (pointer_) { - pointer_->decRef(); + Refcounted::decRef(*pointer_); } } diff --git a/yarpl/include/yarpl/flowable/Flowable.h b/yarpl/include/yarpl/flowable/Flowable.h index dd6c55393..8d02ebcdc 100644 --- a/yarpl/include/yarpl/flowable/Flowable.h +++ b/yarpl/include/yarpl/flowable/Flowable.h @@ -136,6 +136,10 @@ class Flowable : public virtual Refcounted { Reference flowable, Reference> subscriber) : flowable_(std::move(flowable)), subscriber_(std::move(subscriber)) { + // We expect to be heap-allocated; until this subscription finishes + // (is canceled; completes; error's out), hold a reference so we are + // not deallocated (by the subscriber). + Refcounted::incRef(*this); subscriber_->onSubscribe(Reference(this)); } @@ -166,6 +170,10 @@ class Flowable : public virtual Refcounted { } void cancel() override { + // if this is the first terminating signal to receive, we need to + // make sure we break the reference cycle between subscription and + // subscriber + // requested_.exchange(CANCELED, std::memory_order_relaxed); process(); } @@ -250,6 +258,12 @@ class Flowable : public virtual Refcounted { } } + void release() { + flowable_.reset(); + subscriber_.reset(); + Refcounted::decRef(*this); + } + // The number of items that can be sent downstream. Each request(n) // adds n; each onNext consumes 1. If this is MAX, flow-control is // disabled: items sent downstream don't consume any longer. A MIN diff --git a/yarpl/include/yarpl/flowable/FlowableOperator.h b/yarpl/include/yarpl/flowable/FlowableOperator.h index a6910a6a9..4adcfc969 100644 --- a/yarpl/include/yarpl/flowable/FlowableOperator.h +++ b/yarpl/include/yarpl/flowable/FlowableOperator.h @@ -39,10 +39,11 @@ class FlowableOperator : public Flowable { Subscription( Reference> flowable, Reference> subscriber) - : flowable_(std::move(flowable)), subscriber_(std::move(subscriber)) {} - - ~Subscription() { - subscriber_.reset(); + : flowable_(std::move(flowable)), subscriber_(std::move(subscriber)) { + // We expect to be heap-allocated; until this subscription finishes + // (is canceled; completes; error's out), hold a reference so we are + // not deallocated (by the subscriber). + Refcounted::incRef(*this); } void onSubscribe( @@ -53,13 +54,11 @@ class FlowableOperator : public Flowable { void onComplete() override { subscriber_->onComplete(); - upstream_.reset(); release(); } void onError(const std::exception_ptr error) override { subscriber_->onError(error); - upstream_.reset(); release(); } @@ -69,10 +68,17 @@ class FlowableOperator : public Flowable { void cancel() override { upstream_->cancel(); - upstream_.reset(); release(); } + private: + void release() { + flowable_.reset(); + subscriber_.reset(); + upstream_.reset(); + Refcounted::decRef(*this); + } + protected: /// The Flowable has the lambda, and other creation parameters. Reference> flowable_; diff --git a/yarpl/include/yarpl/flowable/Subscription.h b/yarpl/include/yarpl/flowable/Subscription.h index ed993c055..4a3a7f083 100644 --- a/yarpl/include/yarpl/flowable/Subscription.h +++ b/yarpl/include/yarpl/flowable/Subscription.h @@ -8,25 +8,9 @@ namespace flowable { class Subscription : public virtual Refcounted { public: virtual ~Subscription() = default; + virtual void request(int64_t n) = 0; virtual void cancel() = 0; - - protected: - Subscription() : reference_(this) {} - - // Drop the reference we're holding on the subscription (handle). - void release() { - reference_.reset(); - } - - private: - // TODO(lehecka): we can save some bytes by removing reference_ and replace - // it with addRef/release calls - // - // We expect to be heap-allocated; until this subscription finishes - // (is canceled; completes; error's out), hold a reference so we are - // not deallocated (by the subscriber). - Reference reference_; }; } // flowable diff --git a/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h b/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h index b96ae6847..71ef9e59c 100644 --- a/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h +++ b/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h @@ -25,7 +25,12 @@ class FlowableFromObservableSubscription FlowableFromObservableSubscription( Reference> observable, Reference> s) - : observable_(std::move(observable)), subscriber_(std::move(s)) {} + : observable_(std::move(observable)), subscriber_(std::move(s)) { + // We expect to be heap-allocated; until this subscription finishes + // (is canceled; completes; error's out), hold a reference so we are + // not deallocated (by the subscriber). + Refcounted::incRef(*this); + } FlowableFromObservableSubscription(FlowableFromObservableSubscription&&) = delete; @@ -91,11 +96,19 @@ class FlowableFromObservableSubscription } private: + + void release() { + observable_.reset(); + subscriber_.reset(); + observableSubscription_.reset(); + Refcounted::decRef(*this); + } + Reference> observable_; Reference> subscriber_; + Reference observableSubscription_; std::atomic_bool started{false}; std::atomic requested_{0}; - Reference observableSubscription_; }; } } diff --git a/yarpl/test/Observable_test.cpp b/yarpl/test/Observable_test.cpp index 835e6295f..efe28246e 100644 --- a/yarpl/test/Observable_test.cpp +++ b/yarpl/test/Observable_test.cpp @@ -462,3 +462,21 @@ TEST(Observable, ObserversError) { EXPECT_TRUE(errored); } + +TEST(Observable, CancelReleasesObjects) { + EXPECT_EQ(0u, Refcounted::objects()); + + auto lambda = [](Reference> observer) { + // we will send nothing + }; + auto observable = Observable::create(std::move(lambda)); + + EXPECT_EQ(1u, Refcounted::objects()); + + auto collector = make_ref>(); + observable->subscribe(collector); + + observable.reset(); + collector.reset(); + EXPECT_EQ(0u, Refcounted::objects()); +} From e6cf8c217dbec1cc6ab5c57d340f2e60db4f513e Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Wed, 17 May 2017 10:56:26 +0100 Subject: [PATCH 04/31] fixing compiler issues for gcc 6.0 (#438) * fixing compiler issues for gcc 6.0 * fixing more warnings --- benchmarks/Baselines.cpp | 2 +- benchmarks/RequestResponseLatency.cpp | 4 +- benchmarks/RequestResponseThroughput.cpp | 4 +- benchmarks/StreamThroughput.cpp | 4 +- yarpl/include/yarpl/single/Single.h | 57 ++++++++++++++---------- yarpl/test/Tuple.h | 3 +- 6 files changed, 42 insertions(+), 32 deletions(-) diff --git a/benchmarks/Baselines.cpp b/benchmarks/Baselines.cpp index 838177321..d9e4c273c 100644 --- a/benchmarks/Baselines.cpp +++ b/benchmarks/Baselines.cpp @@ -321,4 +321,4 @@ static void BM_Baseline_TCP_Latency(benchmark::State &state) BENCHMARK(BM_Baseline_TCP_Latency) ->Arg(32)->Arg(128)->Arg(4096); -BENCHMARK_MAIN(); +BENCHMARK_MAIN() diff --git a/benchmarks/RequestResponseLatency.cpp b/benchmarks/RequestResponseLatency.cpp index ea5c076c9..11c0b2489 100644 --- a/benchmarks/RequestResponseLatency.cpp +++ b/benchmarks/RequestResponseLatency.cpp @@ -184,11 +184,11 @@ class BM_RsFixture : public benchmark::Fixture { } - void SetUp(benchmark::State &state) noexcept override + void SetUp(const benchmark::State& state) noexcept override { } - void TearDown(benchmark::State &state) noexcept override + void TearDown(const benchmark::State& state) noexcept override { } diff --git a/benchmarks/RequestResponseThroughput.cpp b/benchmarks/RequestResponseThroughput.cpp index d7a59fa99..cf9cafd10 100644 --- a/benchmarks/RequestResponseThroughput.cpp +++ b/benchmarks/RequestResponseThroughput.cpp @@ -188,11 +188,11 @@ class BM_RsFixture : public benchmark::Fixture { } - void SetUp(benchmark::State &state) override + void SetUp(const benchmark::State& state) override { } - void TearDown(benchmark::State &state) override + void TearDown(const benchmark::State& state) override { } diff --git a/benchmarks/StreamThroughput.cpp b/benchmarks/StreamThroughput.cpp index ec1988343..26d31f6df 100644 --- a/benchmarks/StreamThroughput.cpp +++ b/benchmarks/StreamThroughput.cpp @@ -185,11 +185,11 @@ class BM_RsFixture : public benchmark::Fixture { } - void SetUp(benchmark::State &state) noexcept override + void SetUp(const benchmark::State& state) noexcept override { } - void TearDown(benchmark::State &state) noexcept override + void TearDown(const benchmark::State& state) noexcept override { } diff --git a/yarpl/include/yarpl/single/Single.h b/yarpl/include/yarpl/single/Single.h index 2570148b0..5dc2c8c89 100644 --- a/yarpl/include/yarpl/single/Single.h +++ b/yarpl/include/yarpl/single/Single.h @@ -9,6 +9,17 @@ namespace yarpl { namespace single { +namespace details { + +template +class FromPublisherOperator; + +// specialization of Single +template +class SingleVoidFromPublisherOperator; + +} + template class Single : public virtual Refcounted { public: @@ -49,33 +60,14 @@ class Single : public virtual Refcounted { OnSubscribe(Reference>), void>::value>::type> static auto create(OnSubscribe&& function) { - return Reference>(new FromPublisherOperator( + return Reference>(new details::FromPublisherOperator( std::forward(function))); } template auto map(Function&& function); - - private: - template - class FromPublisherOperator : public Single { - public: - explicit FromPublisherOperator(OnSubscribe&& function) - : function_(std::move(function)) {} - - void subscribe(Reference> subscriber) override { - function_(std::move(subscriber)); - } - - private: - OnSubscribe function_; - }; }; -// specialization of Single -template -class SingleVoidFromPublisherOperator; - template <> class Single : public virtual Refcounted { public: @@ -115,7 +107,7 @@ class Single : public virtual Refcounted { }; subscribe(make_ref(std::forward(s))); - }; + } template < typename OnSubscribe, @@ -124,15 +116,31 @@ class Single : public virtual Refcounted { void>::value>::type> static auto create(OnSubscribe&& function) { return Reference>( - new SingleVoidFromPublisherOperator( + new details::SingleVoidFromPublisherOperator( std::forward(function))); } }; -template +namespace details { + +template +class FromPublisherOperator : public Single { + public: + explicit FromPublisherOperator(OnSubscribe&& function) + : function_(std::move(function)) {} + + void subscribe(Reference> subscriber) override { + function_(std::move(subscriber)); + } + + private: + OnSubscribe function_; +}; + +template class SingleVoidFromPublisherOperator : public Single { public: - explicit SingleVoidFromPublisherOperator(OnSubscribe&& function) + explicit SingleVoidFromPublisherOperator(OnSubscribe &&function) : function_(std::move(function)) {} void subscribe(Reference> subscriber) override { @@ -142,6 +150,7 @@ class SingleVoidFromPublisherOperator : public Single { private: OnSubscribe function_; }; +} // details } // observable } // yarpl diff --git a/yarpl/test/Tuple.h b/yarpl/test/Tuple.h index 2ab0bad80..a3c193cba 100644 --- a/yarpl/test/Tuple.h +++ b/yarpl/test/Tuple.h @@ -42,4 +42,5 @@ struct Tuple { static std::atomic destroyedCount; static std::atomic instanceCount; }; -}; \ No newline at end of file + +} // yarpl \ No newline at end of file From 5da63ff39ed75cdabbdaf88743ba02200a88a2cf Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Wed, 17 May 2017 12:20:25 +0100 Subject: [PATCH 05/31] Make debug default in cmake (#439) * fixing compiler issues for gcc 6.0 * make Debug build mode with ASAN default * enabling default debug build only in APPLE development --- CMakeLists.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ec5cfa390..a0bb9abbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,9 +13,9 @@ if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) "and run CMake from there. You may need to remove CMakeCache.txt.") endif() -# default built type is Release +# default built type is Debug if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build" FORCE) + set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE) endif(NOT CMAKE_BUILD_TYPE) # default is to use ReactiveStreams location from github directly @@ -55,13 +55,18 @@ ExternalProject_Add( ReactiveStreams GIT_REPOSITORY ${REACTIVE_STREAMS_GIT_URL} GIT_TAG d2fd61252b51a57a2916ee52fcd54b7f5d563591 - CMAKE_ARGS "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/reactivestreams" + CMAKE_ARGS "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/reactivestreams" ) find_package(Threads) +string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER) + if(APPLE) set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl") + if("${BUILD_TYPE_LOWER}" MATCHES "debug") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,integer -fno-sanitize=unsigned-integer-overflow") + endif() endif() if(NOT META_CXX_STD) @@ -76,7 +81,6 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Woverloaded-virtu set(EXTRA_CXX_FLAGS ${EXTRA_CXX_FLAGS} -Werror) -string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER) if("${BUILD_TYPE_LOWER}" MATCHES "debug") message("debug mode was set") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unreachable-code") From 73b463ab12d68d44145fdd58b0fa2b6867395876 Mon Sep 17 00:00:00 2001 From: somasun Date: Wed, 17 May 2017 04:26:27 -0700 Subject: [PATCH 06/31] Simplify ResumeCache (#423) * simplify ResumeCache * add to activeStreams only on REQUEST_STREAM * preserve channels and request_response * reuse code --- src/statemachine/RSocketStateMachine.cpp | 7 +-- src/temporary_home/ResumeCache.cpp | 57 +++++++++++------------- src/temporary_home/ResumeCache.h | 19 ++++++-- 3 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index 95e75ddfe..683f5c19e 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -313,6 +313,7 @@ bool RSocketStateMachine::endStreamInternal( StreamId streamId, StreamCompletionSignal signal) { VLOG(6) << "endStreamInternal"; + resumeCache_->onStreamClosed(streamId); auto it = streamState_->streams_.find(streamId); if (it == streamState_->streams_.end()) { // Unsubscribe handshake initiated by the connection, we're done. @@ -375,11 +376,6 @@ void RSocketStateMachine::processFrameImpl( auto frameType = frameSerializer_->peekFrameType(*frame); stats_->frameRead(frameType); - // TODO(tmont): If a frame is invalid, it will still be tracked. However, we - // actually want that. We want to keep - // each side in sync, even if a frame is invalid. - resumeCache_->trackReceivedFrame(*frame, frameType); - auto streamIdPtr = frameSerializer_->peekStreamId(*frame); if (!streamIdPtr) { // Failed to deserialize the frame. @@ -387,6 +383,7 @@ void RSocketStateMachine::processFrameImpl( return; } auto streamId = *streamIdPtr; + resumeCache_->trackReceivedFrame(*frame, frameType, streamId); if (streamId == 0) { handleConnectionFrame(frameType, std::move(frame)); return; diff --git a/src/temporary_home/ResumeCache.cpp b/src/temporary_home/ResumeCache.cpp index 88a5eced7..975672c2a 100644 --- a/src/temporary_home/ResumeCache.cpp +++ b/src/temporary_home/ResumeCache.cpp @@ -46,7 +46,9 @@ ResumeCache::~ResumeCache() { void ResumeCache::trackReceivedFrame( const folly::IOBuf& serializedFrame, - const FrameType frameType) { + const FrameType frameType, + const StreamId streamId) { + onStreamOpen(streamId, frameType); if (shouldTrackFrame(frameType)) { VLOG(6) << "received frame " << frameType; // TODO(tmont): this could be expensive, find a better way to get length @@ -58,6 +60,11 @@ void ResumeCache::trackSentFrame( const folly::IOBuf& serializedFrame, const FrameType frameType, const folly::Optional streamIdPtr) { + if (streamIdPtr) { + const StreamId streamId = *streamIdPtr; + onStreamOpen(streamId, frameType); + } + if (shouldTrackFrame(frameType)) { // TODO(tmont): this could be expensive, find a better way to get length auto frameDataLength = serializedFrame.computeChainDataLength(); @@ -72,11 +79,6 @@ void ResumeCache::trackSentFrame( addFrame(serializedFrame, frameDataLength); position_ += frameDataLength; - - if (streamIdPtr) { - const StreamId streamId = *streamIdPtr; - streamMap_[streamId] = position_; - } } } @@ -89,14 +91,6 @@ void ResumeCache::resetUpToPosition(ResumePosition position) { position = position_; } - for (auto it = streamMap_.begin(); it != streamMap_.end();) { - if (it->second <= position) { - it = streamMap_.erase(it); - } else { - it++; - } - } - clearFrames(position); resetPosition_ = position; @@ -115,23 +109,6 @@ bool ResumeCache::isPositionAvailable(ResumePosition position) const { }); } -bool ResumeCache::isPositionAvailable( - ResumePosition position, - StreamId streamId) const { - bool result = false; - - auto it = streamMap_.find(streamId); - if (it != streamMap_.end()) { - const ResumePosition streamPosition = (*it).second; - - result = (streamPosition <= position); - } else { - result = (resetPosition_ >= position); - } - - return result; -} - void ResumeCache::addFrame(const folly::IOBuf& frame, size_t frameDataLength) { size_ += frameDataLength; while (size_ > capacity_) { @@ -200,4 +177,22 @@ void ResumeCache::sendFramesFromPosition( } } +void ResumeCache::onStreamClosed(StreamId streamId) { + // This is crude. We could try to preserve the stream type in + // RSocketStateMachine and pass it down explicitly here. + activeRequestStreams_.erase(streamId); + activeRequestChannels_.erase(streamId); + activeRequestResponses_.erase(streamId); +} + +void ResumeCache::onStreamOpen(StreamId streamId, FrameType frameType) { + if (frameType == FrameType::REQUEST_STREAM) { + activeRequestStreams_.insert(streamId); + } else if (frameType == FrameType::REQUEST_CHANNEL) { + activeRequestChannels_.insert(streamId); + } else if (frameType == FrameType::REQUEST_RESPONSE) { + activeRequestResponses_.insert(streamId); + } +} + } // reactivesocket diff --git a/src/temporary_home/ResumeCache.h b/src/temporary_home/ResumeCache.h index 14b4707e1..23b9f5b91 100644 --- a/src/temporary_home/ResumeCache.h +++ b/src/temporary_home/ResumeCache.h @@ -3,6 +3,7 @@ #pragma once #include +#include #include #include @@ -37,7 +38,8 @@ class ResumeCache { // Tracks a received frame. void trackReceivedFrame( const folly::IOBuf& serializedFrame, - const FrameType frameType); + const FrameType frameType, + const StreamId streamId); // Tracks a sent frame. void trackSentFrame( @@ -51,8 +53,6 @@ class ResumeCache { bool isPositionAvailable(ResumePosition position) const; - bool isPositionAvailable(ResumePosition position, StreamId streamId) const; - void sendFramesFromPosition( ResumePosition position, FrameTransport& transport) const; @@ -77,6 +77,10 @@ class ResumeCache { return size_; } + void onStreamOpen(StreamId streamId, FrameType frameType); + + void onStreamClosed(StreamId streamId); + private: void addFrame(const folly::IOBuf&, size_t); void evictFrame(); @@ -93,7 +97,14 @@ class ResumeCache { // Inferred position of the rcvd frames ResumePosition impliedPosition_{0}; - std::unordered_map streamMap_; + // Active REQUEST_STREAMs are preserved here + std::set activeRequestStreams_; + + // Active REQUEST_CHANNELs are preserved here + std::set activeRequestChannels_; + + // Active REQUEST_RESPONSEs are preserved here + std::set activeRequestResponses_; std::deque>> frames_; From de4b84b4347509583269cb354554fcbd34ecda38 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Wed, 17 May 2017 13:14:23 +0100 Subject: [PATCH 07/31] Fix ASAN issue in unit test (#440) * make Debug build mode with ASAN default * fixing broken test * reverting CMakeList.txt changes --- test/deprecated/ReactiveSocketTest.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/deprecated/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp index 4449339f5..cea319e44 100644 --- a/test/deprecated/ReactiveSocketTest.cpp +++ b/test/deprecated/ReactiveSocketTest.cpp @@ -1186,35 +1186,35 @@ class ReactiveSocketIgnoreRequestTest : public testing::Test { })); } + static Payload testPayload() { + return Payload("foo"); + } + std::unique_ptr clientSock; std::unique_ptr serverSock; yarpl::Reference>> clientInput{ make_ref>>()}; yarpl::Reference clientInputSub; - - const std::unique_ptr originalPayload{ - folly::IOBuf::copyBuffer("foo")}; }; TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestResponse) { - clientSock->requestResponse(Payload(originalPayload->clone()), clientInput); + clientSock->requestResponse(testPayload(), clientInput); } TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestStream) { - clientSock->requestStream(Payload(originalPayload->clone()), clientInput); + clientSock->requestStream(testPayload(), clientInput); } TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestChannel) { auto clientOutput = clientSock->requestChannel(clientInput); auto clientOutputSub = make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)).WillOnce(Invoke([&](size_t) { - clientOutput->onNext(Payload(originalPayload->clone())); + EXPECT_CALL(*clientOutputSub, request_(1)).WillOnce(Invoke([clientOutput](size_t) { + clientOutput->onNext(testPayload()); })); - EXPECT_CALL(*clientOutputSub, cancel_()).WillOnce(Invoke([&]() { + EXPECT_CALL(*clientOutputSub, cancel_()).WillOnce(Invoke([clientOutput]() { clientOutput->onComplete(); - clientOutput = nullptr; })); clientOutput->onSubscribe(clientOutputSub); From 9c9127a809b7a88719ff3b139d9e68fcf05da570 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 05:27:05 -0700 Subject: [PATCH 08/31] Eliminate ReactiveSocket.h (#442) * ReactiveSocket.h removed from /src ... but it's copy/pasted into /test and still used by tests and tck which will need to be dealt with later * TODOs and renaming * RSocketServer holding Executor * Fix unit test --- CMakeLists.txt | 29 +++++-- src/ConnectionResumeRequest.cpp | 2 - src/ConnectionResumeRequest.h | 2 - src/ConnectionSetupRequest.h | 2 +- src/RSocketClient.cpp | 46 +++++++--- src/RSocketClient.h | 1 - src/RSocketConnectionHandler.cpp | 46 ++++++---- src/RSocketConnectionHandler.h | 12 ++- src/RSocketRequester.cpp | 35 ++++---- src/RSocketRequester.h | 9 +- src/RSocketServer.cpp | 83 ++++++++++--------- src/RSocketServer.h | 19 +++-- src/internal/FollyKeepaliveTimer.h | 1 - src/statemachine/RSocketStateMachine.cpp | 11 ++- src/statemachine/RSocketStateMachine.h | 7 +- src/temporary_home/NullRequestHandler.cpp | 2 - src/temporary_home/NullRequestHandler.h | 3 +- src/temporary_home/RequestHandler.h | 5 +- tck-test/TestInterpreter.h | 2 +- tck-test/client.cpp | 2 +- tck-test/server.cpp | 3 +- .../deprecated}/ReactiveSocket.cpp | 3 +- .../deprecated}/ReactiveSocket.h | 12 +-- .../ReactiveSocketConcurrencyTest.cpp | 8 +- test/deprecated/ReactiveSocketTest.cpp | 46 +++++----- test/framing/FramedReaderTest.cpp | 2 +- test/integration/ClientUtils.h | 2 +- test/integration/ServerFixture.cpp | 2 - test/integration/ServerFixture.h | 2 +- .../ReactiveSocketResumabilityTest.cpp | 2 +- test/resumption/TcpResumeClient.cpp | 2 +- test/resumption/TcpResumeServer.cpp | 4 +- test/statemachine/PublisherBaseTest.cpp | 2 +- test/statemachine/RSocketStateMachineTest.cpp | 3 - test/test_utils/MockKeepaliveTimer.h | 2 +- test/test_utils/MockRequestHandler.h | 13 ++- 36 files changed, 236 insertions(+), 191 deletions(-) rename {src/temporary_home => test/deprecated}/ReactiveSocket.cpp (99%) rename {src/temporary_home => test/deprecated}/ReactiveSocket.h (86%) diff --git a/CMakeLists.txt b/CMakeLists.txt index a0bb9abbe..05a661f62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,8 +200,6 @@ add_library( src/temporary_home/ResumeCache.h src/temporary_home/ServerConnectionAcceptor.cpp src/temporary_home/ServerConnectionAcceptor.h - src/temporary_home/ReactiveSocket.cpp - src/temporary_home/ReactiveSocket.h src/temporary_home/Stats.cpp src/temporary_home/Stats.h src/temporary_home/StreamsFactory.cpp @@ -273,7 +271,10 @@ add_executable( test/integration/ServerFixture.cpp test/integration/WarmResumptionTest.cpp test/streams/Mocks.h - test/framing/FrameTransportTest.cpp) + test/framing/FrameTransportTest.cpp + test/deprecated/ReactiveSocket.cpp + test/deprecated/ReactiveSocket.h +) target_link_libraries( tests @@ -304,7 +305,10 @@ add_executable( tck-test/TestSuite.h tck-test/TestInterpreter.cpp tck-test/TestInterpreter.h - tck-test/TypedCommands.h) + tck-test/TypedCommands.h + test/deprecated/ReactiveSocket.cpp + test/deprecated/ReactiveSocket.h +) target_link_libraries( tckclient @@ -321,7 +325,10 @@ add_executable( tck-test/MarbleProcessor.cpp tck-test/MarbleProcessor.h test/test_utils/StatsPrinter.cpp - test/test_utils/StatsPrinter.h) + test/test_utils/StatsPrinter.h + test/deprecated/ReactiveSocket.cpp + test/deprecated/ReactiveSocket.h +) target_link_libraries( tckserver @@ -339,10 +346,11 @@ add_executable( test/resumption/TcpResumeClient.cpp test/test_utils/PrintSubscriber.cpp test/test_utils/PrintSubscriber.h - src/temporary_home/ReactiveSocket.cpp - src/temporary_home/ReactiveSocket.h test/test_utils/StatsPrinter.cpp - test/test_utils/StatsPrinter.h) + test/test_utils/StatsPrinter.h + test/deprecated/ReactiveSocket.cpp + test/deprecated/ReactiveSocket.h +) target_link_libraries( tcpresumeclient @@ -362,7 +370,10 @@ add_executable( test/test_utils/PrintSubscriber.cpp test/test_utils/PrintSubscriber.h test/test_utils/StatsPrinter.cpp - test/test_utils/StatsPrinter.h) + test/test_utils/StatsPrinter.h + test/deprecated/ReactiveSocket.cpp + test/deprecated/ReactiveSocket.h +) target_link_libraries( tcpresumeserver diff --git a/src/ConnectionResumeRequest.cpp b/src/ConnectionResumeRequest.cpp index 7d47e33fe..0a3b4102e 100644 --- a/src/ConnectionResumeRequest.cpp +++ b/src/ConnectionResumeRequest.cpp @@ -2,6 +2,4 @@ #include "ConnectionResumeRequest.h" -using namespace reactivesocket; - namespace rsocket {} diff --git a/src/ConnectionResumeRequest.h b/src/ConnectionResumeRequest.h index 8588ada8e..bdecedba8 100644 --- a/src/ConnectionResumeRequest.h +++ b/src/ConnectionResumeRequest.h @@ -2,8 +2,6 @@ #pragma once -#include "src/temporary_home/ReactiveSocket.h" - namespace rsocket { /** diff --git a/src/ConnectionSetupRequest.h b/src/ConnectionSetupRequest.h index 131c5d08e..a7cfc719c 100644 --- a/src/ConnectionSetupRequest.h +++ b/src/ConnectionSetupRequest.h @@ -2,7 +2,7 @@ #pragma once -#include "src/temporary_home/ReactiveSocket.h" +#include "src/temporary_home/ConnectionSetupPayload.h" namespace rsocket { diff --git a/src/RSocketClient.cpp b/src/RSocketClient.cpp index 496b7f2fa..9d2e8f83c 100644 --- a/src/RSocketClient.cpp +++ b/src/RSocketClient.cpp @@ -2,9 +2,9 @@ #include "RSocketClient.h" #include "RSocketRequester.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" #include "src/internal/FollyKeepaliveTimer.h" +#include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/Stats.h" using namespace reactivesocket; using namespace folly; @@ -26,21 +26,45 @@ Future> RSocketClient::connect() { EventBase& eventBase) { LOG(INFO) << "RSocketClient => onConnect received DuplexConnection"; - auto r = ReactiveSocket::fromClientConnection( + auto rs = std::make_shared( eventBase, - std::move(framedConnection), - // TODO need to optionally allow this being passed in for a duplex - // client + // need to allow Responder being passed in optionally std::make_unique(), - // TODO need to allow this being passed in - ConnectionSetupPayload( - "text/plain", "text/plain", Payload("meta", "data")), + // need to allow stats being passed in Stats::noop(), // TODO need to optionally allow defining the keepalive timer std::make_unique( - eventBase, std::chrono::milliseconds(5000))); + eventBase, std::chrono::milliseconds(5000)), + ReactiveSocketMode::CLIENT); + + // TODO need to allow this being passed in + auto setupPayload = ConnectionSetupPayload( + "text/plain", "text/plain", Payload("meta", "data")); + + // TODO ---> this code needs to be moved inside RSocketStateMachine + + rs->setFrameSerializer( + setupPayload.protocolVersion == ProtocolVersion::Unknown + ? FrameSerializer::createCurrentVersion() + : FrameSerializer::createFrameSerializer( + setupPayload.protocolVersion)); + + rs->setResumable(setupPayload.resumable); + + if (setupPayload.protocolVersion != ProtocolVersion::Unknown) { + CHECK_EQ( + setupPayload.protocolVersion, rs->getSerializerProtocolVersion()); + } + + auto frameTransport = + std::make_shared(std::move(framedConnection)); + rs->setUpFrame(std::move(frameTransport), std::move(setupPayload)); + + // TODO <---- up to here + // TODO and then a simple API such as: + // TODO rs->connectAndSendSetup(frameTransport, params, setupPayload) - auto rsocket = RSocketRequester::create(std::move(r), eventBase); + auto rsocket = RSocketRequester::create(std::move(rs), eventBase); // store it so it lives as long as the RSocketClient rsockets_.push_back(rsocket); promise->setValue(rsocket); diff --git a/src/RSocketClient.h b/src/RSocketClient.h index 78695f665..cc1643695 100644 --- a/src/RSocketClient.h +++ b/src/RSocketClient.h @@ -5,7 +5,6 @@ #include #include "src/ConnectionFactory.h" #include "RSocketRequester.h" -#include "src/temporary_home/ReactiveSocket.h" namespace rsocket { diff --git a/src/RSocketConnectionHandler.cpp b/src/RSocketConnectionHandler.cpp index 7443cccf8..dd74d7f23 100644 --- a/src/RSocketConnectionHandler.cpp +++ b/src/RSocketConnectionHandler.cpp @@ -6,9 +6,11 @@ #include #include -#include "src/temporary_home/OldNewBridge.h" #include "RSocketErrors.h" +#include "src/statemachine/RSocketStateMachine.h" #include "src/temporary_home/NullRequestHandler.h" +#include "src/temporary_home/OldNewBridge.h" +#include "src/temporary_home/Stats.h" namespace rsocket { @@ -23,7 +25,8 @@ class RSocketHandlerBridge : public reactivesocket::DefaultRequestHandler { void handleRequestStream( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override { + const yarpl::Reference>& + response) noexcept override { auto flowable = handler_->handleRequestStream(std::move(request), std::move(streamId)); // bridge from the existing eager RequestHandler and old Subscriber type @@ -34,7 +37,8 @@ class RSocketHandlerBridge : public reactivesocket::DefaultRequestHandler { yarpl::Reference> handleRequestChannel( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override { + const yarpl::Reference>& + response) noexcept override { auto eagerSubscriber = make_ref(); auto flowable = handler_->handleRequestChannel( std::move(request), @@ -63,7 +67,8 @@ class RSocketHandlerBridge : public reactivesocket::DefaultRequestHandler { public: BridgeSubscriptionToSingle( yarpl::Reference> single, - yarpl::Reference> responseSubscriber) + yarpl::Reference> + responseSubscriber) : single_{std::move(single)}, responseSubscriber_{std::move(responseSubscriber)} {} @@ -89,13 +94,13 @@ class RSocketHandlerBridge : public reactivesocket::DefaultRequestHandler { private: yarpl::Reference> single_; - yarpl::Reference> responseSubscriber_; + yarpl::Reference> + responseSubscriber_; std::atomic_bool subscribed_{false}; }; - responseSubscriber->onSubscribe( - make_ref( - std::move(single), responseSubscriber)); + responseSubscriber->onSubscribe(make_ref( + std::move(single), responseSubscriber)); } void handleFireAndForgetRequest( @@ -133,18 +138,31 @@ void RSocketConnectionHandler::setupNewSocket( auto handlerBridge = std::make_shared(std::move(requestHandler)); - auto rs = ReactiveSocket::disconnectedServer( - // we know this callback is on a specific EventBase + + auto rs = std::make_shared( *executor, std::move(handlerBridge), - Stats::noop()); + Stats::noop(), + nullptr, + ReactiveSocketMode::SERVER); - auto rawRs = rs.get(); + manageSocket(setupRequest, rs); - manageSocket(setupRequest, std::move(rs)); + // TODO ---> this code needs to be moved inside RSocketStateMachine // Connect last, after all state has been set up. - rawRs->serverConnect(std::move(frameTransport), socketParams); + rs->setResumable(socketParams.resumable); + + if (socketParams.protocolVersion != ProtocolVersion::Unknown) { + rs->setFrameSerializer( + FrameSerializer::createFrameSerializer(socketParams.protocolVersion)); + } + + rs->connect(std::move(frameTransport), true, socketParams.protocolVersion); + + // TODO <---- up to here + // TODO and then a simple API such as: + // TODO rs->connectServer(frameTransport, params) } bool RSocketConnectionHandler::resumeSocket( diff --git a/src/RSocketConnectionHandler.h b/src/RSocketConnectionHandler.h index c78f1bdc0..9408ed9c1 100644 --- a/src/RSocketConnectionHandler.h +++ b/src/RSocketConnectionHandler.h @@ -15,10 +15,16 @@ namespace rsocket { * class that is responsible for basic RSocket creation and setup; the virtual * functions will be implemented to customize the actual handling of the * RSocket. + * Handles the setup/creation/error steps for an RSocketServer accepting + * connections. * - * TODO: Resumability + * This is an abstract class that is responsible for basic RSocket creation and + * setup. + * + * The virtual functions will be implemented to customize the actual handling of + * the RSocket. * - * TODO: Concurrency (number of threads) + * TODO: Resumability */ class RSocketConnectionHandler : public reactivesocket::ConnectionHandler { public: @@ -49,7 +55,7 @@ class RSocketConnectionHandler : public reactivesocket::ConnectionHandler { */ virtual void manageSocket( std::shared_ptr request, - std::unique_ptr socket) = 0; + std::shared_ptr socket) = 0; }; } // namespace rsocket diff --git a/src/RSocketRequester.cpp b/src/RSocketRequester.cpp index b4fb619b2..78b476d3f 100644 --- a/src/RSocketRequester.cpp +++ b/src/RSocketRequester.cpp @@ -14,7 +14,7 @@ using namespace yarpl; namespace rsocket { std::shared_ptr RSocketRequester::create( - std::unique_ptr srs, + std::shared_ptr srs, EventBase& eventBase) { auto customDeleter = [&eventBase](RSocketRequester* pRequester) { eventBase.runImmediatelyOrRunInEventBaseThreadAndWait([&pRequester] { @@ -29,9 +29,9 @@ std::shared_ptr RSocketRequester::create( } RSocketRequester::RSocketRequester( - std::unique_ptr srs, + std::shared_ptr srs, EventBase& eventBase) - : reactiveSocket_(std::move(srs)), eventBase_(eventBase) {} + : stateMachine_(std::move(srs)), eventBase_(eventBase) {} RSocketRequester::~RSocketRequester() { LOG(INFO) << "RSocketRequester => destroy"; @@ -42,7 +42,7 @@ RSocketRequester::requestChannel( yarpl::Reference> requestStream) { auto& eb = eventBase_; - auto srs = reactiveSocket_; + auto srs = stateMachine_; return yarpl::flowable::Flowables::fromPublisher([ &eb, requestStream = std::move(requestStream), @@ -53,7 +53,10 @@ RSocketRequester::requestChannel( subscriber = std::move(subscriber), srs = std::move(srs) ]() mutable { - auto responseSink = srs->requestChannel(std::move(subscriber)); + auto responseSink = srs->streamsFactory().createChannelRequester( + std::move(std::move(subscriber))); + // TODO the responseSink needs to be wrapped with thread scheduling + // so all emissions happen on the right thread requestStream->subscribe(std::move(responseSink)); }); }); @@ -64,13 +67,16 @@ RSocketRequester::requestStream(Payload request) { return yarpl::flowable::Flowables::fromPublisher([ eb = &eventBase_, request = std::move(request), - srs = reactiveSocket_ + srs = stateMachine_ ](yarpl::Reference> subscriber) mutable { eb->runInEventBaseThread([ request = std::move(request), subscriber = std::move(subscriber), srs = std::move(srs) - ]() mutable { srs->requestStream(std::move(request), std::move(subscriber)); }); + ]() mutable { + srs->streamsFactory().createStreamRequester( + std::move(request), std::move(subscriber)); + }); }); } @@ -84,8 +90,8 @@ RSocketRequester::requestResponse(Payload request) { singleSubscriber) : singleSubscriber_{std::move(singleSubscriber)} {} - void onSubscribe( - yarpl::Reference subscription) noexcept override { + void onSubscribe(yarpl::Reference + subscription) noexcept override { // register cancellation callback with SingleSubscriber auto singleSubscription = yarpl::single::SingleSubscriptions::create( [subscription] { subscription->cancel(); }); @@ -111,7 +117,7 @@ RSocketRequester::requestResponse(Payload request) { }; return yarpl::single::Single::create( - [ eb = &eventBase_, request = std::move(request), srs = reactiveSocket_ ]( + [ eb = &eventBase_, request = std::move(request), srs = stateMachine_ ]( yarpl::Reference> subscriber) mutable { eb->runInEventBaseThread([ @@ -119,10 +125,9 @@ RSocketRequester::requestResponse(Payload request) { subscriber = std::move(subscriber), srs = std::move(srs) ]() mutable { - srs->requestResponse( + srs->streamsFactory().createRequestResponseRequester( std::move(request), - make_ref( - std::move(subscriber))); + make_ref(std::move(subscriber))); }); }); } @@ -132,7 +137,7 @@ yarpl::Reference> RSocketRequester::fireAndForget( return yarpl::single::Single::create([ eb = &eventBase_, request = std::move(request), - srs = reactiveSocket_ + srs = stateMachine_ ](yarpl::Reference> subscriber) mutable { eb->runInEventBaseThread([ request = std::move(request), @@ -151,7 +156,7 @@ yarpl::Reference> RSocketRequester::fireAndForget( void RSocketRequester::metadataPush(std::unique_ptr metadata) { eventBase_.runInEventBaseThread( [ this, metadata = std::move(metadata) ]() mutable { - reactiveSocket_->metadataPush(std::move(metadata)); + stateMachine_->metadataPush(std::move(metadata)); }); } } diff --git a/src/RSocketRequester.h b/src/RSocketRequester.h index 04a68f1da..7304f672c 100644 --- a/src/RSocketRequester.h +++ b/src/RSocketRequester.h @@ -7,8 +7,9 @@ #include "yarpl/Flowable.h" #include "yarpl/Single.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "Payload.h" #include "src/internal/ReactiveStreamsCompat.h" +#include "src/statemachine/RSocketStateMachine.h" namespace rsocket { @@ -34,7 +35,7 @@ namespace rsocket { class RSocketRequester { public: static std::shared_ptr create( - std::unique_ptr srs, + std::shared_ptr srs, folly::EventBase& executor); // TODO figure out how to use folly::Executor instead of EventBase @@ -105,9 +106,9 @@ class RSocketRequester { private: RSocketRequester( - std::unique_ptr srs, + std::shared_ptr srs, folly::EventBase& eventBase); - std::shared_ptr reactiveSocket_; + std::shared_ptr stateMachine_; folly::EventBase& eventBase_; }; } diff --git a/src/RSocketServer.cpp b/src/RSocketServer.cpp index c51efe444..fae31bd44 100644 --- a/src/RSocketServer.cpp +++ b/src/RSocketServer.cpp @@ -5,6 +5,7 @@ #include #include "RSocketConnectionHandler.h" +#include "src/statemachine/RSocketStateMachine.h" using namespace reactivesocket; @@ -12,10 +13,11 @@ namespace rsocket { class RSocketServerConnectionHandler : public virtual RSocketConnectionHandler { public: - RSocketServerConnectionHandler(RSocketServer* server, OnAccept onAccept) { - server_ = server; - onAccept_ = onAccept; - } + RSocketServerConnectionHandler( + RSocketServer* server, + OnAccept onAccept, + folly::Executor& executor) + : server_{server}, onAccept_{std::move(onAccept)}, executor_{executor} {} std::shared_ptr getHandler( std::shared_ptr request) override { @@ -24,21 +26,25 @@ class RSocketServerConnectionHandler : public virtual RSocketConnectionHandler { void manageSocket( std::shared_ptr request, - std::unique_ptr socket) override { - socket->onClosed([ this, socket = socket.get() ]( - const folly::exception_wrapper&) { - // Enqueue another event to remove and delete it. We cannot delete - // the ReactiveSocket now as it still needs to finish processing the - // onClosed handlers in the stack frame above us. - socket->executor().add([this, socket] { server_->removeSocket(socket); }); - }); - - server_->addSocket(std::move(socket)); + std::shared_ptr stateMachine) + override { + stateMachine->addClosedListener( + [this, stateMachine](const folly::exception_wrapper&) { + // Enqueue another event to remove and delete it. We cannot delete + // the RSocketStateMachine now as it still needs to finish processing + // the onClosed handlers in the stack frame above us. + executor_.add([this, stateMachine] { + server_->removeConnection(stateMachine); + }); + }); + + server_->addConnection(std::move(stateMachine), executor_); } private: RSocketServer* server_; OnAccept onAccept_; + folly::Executor& executor_; }; RSocketServer::RSocketServer( @@ -63,9 +69,13 @@ RSocketServer::~RSocketServer() { shutdown_.emplace(); - for (auto& socket : *locked) { - // close() has to be called on the same executor as the socket. - socket->executor().add([s = socket.get()] { s->close(); }); + for (auto& connectionPair : *locked) { + // close() has to be called on the same executor as the socket + auto& executor_ = connectionPair.second; + executor_.add([s = connectionPair.first] { + s->close( + folly::exception_wrapper(), StreamCompletionSignal::SOCKET_CLOSED); + }); } } @@ -77,27 +87,26 @@ RSocketServer::~RSocketServer() { } void RSocketServer::start(OnAccept onAccept) { - if (connectionHandler_) { + if (started) { throw std::runtime_error("RSocketServer::start() already called."); } + started = true; LOG(INFO) << "Initializing connection acceptor on start"; - connectionHandler_ = - std::make_unique(this, onAccept); - lazyAcceptor_ - ->start([this]( - std::unique_ptr conn, - folly::Executor& executor) { + ->start([ this, onAccept = std::move(onAccept) ]( + std::unique_ptr conn, folly::Executor & executor) { LOG(INFO) << "Going to accept duplex connection"; + auto connectionHandler_ = + std::make_shared( + this, onAccept, executor); + // FIXME(alexanderm): This isn't thread safe - acceptor_.accept(std::move(conn), connectionHandler_); + acceptor_.accept(std::move(conn), std::move(connectionHandler_)); }) - .onError([](const folly::exception_wrapper& ex) { - LOG(FATAL) << "Failed to start ConnectionAcceptor: " << ex.what(); - }); + .get(); // block until finished and return or throw } void RSocketServer::startAndPark(OnAccept onAccept) { @@ -109,20 +118,16 @@ void RSocketServer::unpark() { waiting_.post(); } -void RSocketServer::addSocket(std::unique_ptr socket) { - sockets_.lock()->insert(std::move(socket)); +void RSocketServer::addConnection( + std::shared_ptr socket, + folly::Executor& executor) { + sockets_.lock()->insert({std::move(socket), executor}); } -void RSocketServer::removeSocket(ReactiveSocket* socket) { - // This is a hack. We make a unique_ptr so that we can use it to - // search the set. However, we release the unique_ptr so it doesn't - // try to free the ReactiveSocket too. - std::unique_ptr ptr{socket}; - +void RSocketServer::removeConnection( + std::shared_ptr socket) { auto locked = sockets_.lock(); - locked->erase(ptr); - - ptr.release(); + locked->erase(socket); LOG(INFO) << "Removed ReactiveSocket"; diff --git a/src/RSocketServer.h b/src/RSocketServer.h index f2f458dc2..4e017c8fe 100644 --- a/src/RSocketServer.h +++ b/src/RSocketServer.h @@ -10,7 +10,6 @@ #include "src/ConnectionAcceptor.h" #include "src/ConnectionSetupRequest.h" #include "src/RSocketResponder.h" -#include "src/temporary_home/ReactiveSocket.h" #include "src/temporary_home/ServerConnectionAcceptor.h" namespace rsocket { @@ -41,14 +40,20 @@ class RSocketServer { /** * Start the ConnectionAcceptor and begin handling connections. * - * This method is asynchronous. + * This method blocks until the server has started. It returns if successful + * or throws an exception if failure occurs. + * + * This method assumes it will be called only once. */ void start(OnAccept); /** * Start the ConnectionAcceptor and begin handling connections. * - * This method will block the calling thread. + * This method will block the calling thread as long as the server is running. + * It will throw an exception if a failure occurs on startup. + * + * This method assumes it will be called only once. */ void startAndPark(OnAccept); @@ -72,18 +77,18 @@ class RSocketServer { friend class RSocketServerConnectionHandler; private: - void addSocket(std::unique_ptr); - void removeSocket(reactivesocket::ReactiveSocket*); + void addConnection(std::shared_ptr, folly::Executor&); + void removeConnection(std::shared_ptr); ////////////////////////////////////////////////////////////////////////////// std::unique_ptr lazyAcceptor_; reactivesocket::ServerConnectionAcceptor acceptor_; - std::shared_ptr connectionHandler_; + bool started{false}; /// Set of currently open ReactiveSockets. folly::Synchronized< - std::unordered_set>, + std::unordered_map, folly::Executor&>, std::mutex> sockets_; diff --git a/src/internal/FollyKeepaliveTimer.h b/src/internal/FollyKeepaliveTimer.h index 0180c060a..5fd84abcd 100644 --- a/src/internal/FollyKeepaliveTimer.h +++ b/src/internal/FollyKeepaliveTimer.h @@ -4,7 +4,6 @@ #include #include -#include namespace reactivesocket { class FollyKeepaliveTimer : public KeepaliveTimer { diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index 683f5c19e..7b0c2674b 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -22,13 +22,11 @@ namespace reactivesocket { RSocketStateMachine::RSocketStateMachine( folly::Executor& executor, - ReactiveSocket* reactiveSocket, std::shared_ptr requestHandler, std::shared_ptr stats, std::unique_ptr keepaliveTimer, ReactiveSocketMode mode) : ExecutorBase(executor), - reactiveSocket_(reactiveSocket), stats_(stats), mode_(mode), resumeCache_(std::make_shared(stats)), @@ -40,6 +38,8 @@ RSocketStateMachine::RSocketStateMachine( // stack when processing any signals from the connection. See ::connect and // ::onSubscribe. CHECK(streamState_); + + stats_->socketCreated(); } RSocketStateMachine::~RSocketStateMachine() { @@ -163,7 +163,6 @@ void RSocketStateMachine::close( return; } isClosed_ = true; - reactiveSocket_ = nullptr; stats_->socketClosed(signal); VLOG(6) << "close"; @@ -474,8 +473,7 @@ void RSocketStateMachine::handleConnectionFrame( return; } - requestHandler_->handleSetupPayload( - *reactiveSocket_, std::move(setupPayload)); + requestHandler_->handleSetupPayload(std::move(setupPayload)); return; } case FrameType::METADATA_PUSH: { @@ -491,13 +489,14 @@ void RSocketStateMachine::handleConnectionFrame( if (!deserializeFrameOrError(frame, std::move(payload))) { return; } + auto resumed = requestHandler_->handleResume( - *reactiveSocket_, ResumeParameters( frame.token_, frame.lastReceivedServerPosition_, frame.clientPosition_, ProtocolVersion(frame.versionMajor_, frame.versionMinor_))); + if (!resumed) { closeWithError(Frame_ERROR::connectionError("can not resume")); } diff --git a/src/statemachine/RSocketStateMachine.h b/src/statemachine/RSocketStateMachine.h index e20a3030b..41f2555cf 100644 --- a/src/statemachine/RSocketStateMachine.h +++ b/src/statemachine/RSocketStateMachine.h @@ -9,6 +9,7 @@ #include "src/DuplexConnection.h" #include "src/temporary_home/Executor.h" #include "src/framing/Frame.h" +#include "src/framing/FrameTransport.h" #include "src/framing/FrameProcessor.h" #include "src/framing/FrameSerializer.h" #include "src/Payload.h" @@ -22,7 +23,6 @@ class ClientResumeStatusCallback; class RSocketStateMachine; class DuplexConnection; class Frame_ERROR; -class FrameTransport; class KeepaliveTimer; class RequestHandler; class ResumeCache; @@ -55,13 +55,12 @@ class FrameSink { class RSocketStateMachine final : public FrameSink, public FrameProcessor, - public ExecutorBase, + ExecutorBase, public StreamsWriter, public std::enable_shared_from_this { public: RSocketStateMachine( folly::Executor& executor, - ReactiveSocket* reactiveSocket, std::shared_ptr requestHandler, std::shared_ptr stats, std::unique_ptr keepaliveTimer_, @@ -267,8 +266,6 @@ class RSocketStateMachine final bool ensureOrAutodetectFrameSerializer(const folly::IOBuf& firstFrame); - ReactiveSocket* reactiveSocket_; - const std::shared_ptr stats_; ReactiveSocketMode mode_; bool isResumable_{false}; diff --git a/src/temporary_home/NullRequestHandler.cpp b/src/temporary_home/NullRequestHandler.cpp index cbfe543f0..dacb6db42 100644 --- a/src/temporary_home/NullRequestHandler.cpp +++ b/src/temporary_home/NullRequestHandler.cpp @@ -48,13 +48,11 @@ void NullRequestHandler::handleMetadataPush( std::unique_ptr /*request*/) noexcept {} std::shared_ptr NullRequestHandler::handleSetupPayload( - ReactiveSocket& socket, ConnectionSetupPayload /*request*/) noexcept { return nullptr; } bool NullRequestHandler::handleResume( - ReactiveSocket& socket, ResumeParameters) noexcept { return false; } diff --git a/src/temporary_home/NullRequestHandler.h b/src/temporary_home/NullRequestHandler.h index 4c2196ab1..7b17bfcb9 100644 --- a/src/temporary_home/NullRequestHandler.h +++ b/src/temporary_home/NullRequestHandler.h @@ -58,10 +58,9 @@ class NullRequestHandler : public RequestHandler { std::unique_ptr request) noexcept override; std::shared_ptr handleSetupPayload( - ReactiveSocket& socket, ConnectionSetupPayload request) noexcept override; - bool handleResume(ReactiveSocket& socket, ResumeParameters) noexcept override; + bool handleResume(ResumeParameters) noexcept override; void handleCleanResume( yarpl::Reference response) noexcept override; diff --git a/src/temporary_home/RequestHandler.h b/src/temporary_home/RequestHandler.h index 40a9bc734..54d404ea9 100644 --- a/src/temporary_home/RequestHandler.h +++ b/src/temporary_home/RequestHandler.h @@ -46,14 +46,11 @@ class RequestHandler { /// Temporary home - this should eventually be an input to asking for a /// RequestHandler so negotiation is possible - virtual std::shared_ptr handleSetupPayload( - ReactiveSocket& socket, - ConnectionSetupPayload request) noexcept = 0; + virtual std::shared_ptr handleSetupPayload(ConnectionSetupPayload request) noexcept = 0; /// Temporary home - this should accompany handleSetupPayload /// Return stream state for the given token. Return nullptr to disable resume virtual bool handleResume( - ReactiveSocket& socket, ResumeParameters resumeParams) noexcept = 0; // Handle a stream that can resume in a "clean" state. Client and Server are diff --git a/tck-test/TestInterpreter.h b/tck-test/TestInterpreter.h index 7685ad3d9..557ac035d 100644 --- a/tck-test/TestInterpreter.h +++ b/tck-test/TestInterpreter.h @@ -5,7 +5,7 @@ #include #include "src/Payload.h" #include "src/internal/ReactiveStreamsCompat.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "tck-test/TestSubscriber.h" #include "tck-test/TestSuite.h" diff --git a/tck-test/client.cpp b/tck-test/client.cpp index 88d7ad0df..9a88a2eed 100644 --- a/tck-test/client.cpp +++ b/tck-test/client.cpp @@ -5,9 +5,9 @@ #include #include #include +#include "test/deprecated/ReactiveSocket.h" #include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" diff --git a/tck-test/server.cpp b/tck-test/server.cpp index 35d640a97..c130c8f09 100644 --- a/tck-test/server.cpp +++ b/tck-test/server.cpp @@ -7,9 +7,9 @@ #include #include #include +#include "test/deprecated/ReactiveSocket.h" #include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" #include "src/temporary_home/SubscriptionBase.h" #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" @@ -220,7 +220,6 @@ class Callback : public AsyncServerSocket::AcceptCallback { } std::shared_ptr handleSetupPayload( - ReactiveSocket&, ConnectionSetupPayload request) noexcept override { LOG(INFO) << "handleSetupPayload " << request; return nullptr; diff --git a/src/temporary_home/ReactiveSocket.cpp b/test/deprecated/ReactiveSocket.cpp similarity index 99% rename from src/temporary_home/ReactiveSocket.cpp rename to test/deprecated/ReactiveSocket.cpp index 51afcccdb..9b18c64ad 100644 --- a/src/temporary_home/ReactiveSocket.cpp +++ b/test/deprecated/ReactiveSocket.cpp @@ -11,7 +11,7 @@ #include "src/internal/ClientResumeStatusCallback.h" #include "src/statemachine/RSocketStateMachine.h" #include "src/framing/FrameTransport.h" -#include "RequestHandler.h" +#include "src/temporary_home/RequestHandler.h" namespace reactivesocket { @@ -31,7 +31,6 @@ ReactiveSocket::ReactiveSocket( folly::Executor& executor) : connection_(std::make_shared( executor, - this, std::move(handler), std::move(stats), std::move(keepaliveTimer), diff --git a/src/temporary_home/ReactiveSocket.h b/test/deprecated/ReactiveSocket.h similarity index 86% rename from src/temporary_home/ReactiveSocket.h rename to test/deprecated/ReactiveSocket.h index 93e422b96..4a0606eca 100644 --- a/src/temporary_home/ReactiveSocket.h +++ b/test/deprecated/ReactiveSocket.h @@ -6,7 +6,7 @@ #include "src/internal/Common.h" #include "src/temporary_home/ConnectionSetupPayload.h" #include "src/Payload.h" -#include "Stats.h" +#include "src/temporary_home/Stats.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" @@ -24,15 +24,7 @@ class RequestHandler; folly::Executor& defaultExecutor(); -// TODO(stupaq): Here is some heavy problem with the recursion on shutdown. -// Giving someone ownership over this object would probably lead to a deadlock -// (or a crash) if one calls ::~ReactiveSocket from a terminal signal handler -// of any of the connections. It seems natural to follow ReactiveStreams -// specification and make this object "self owned", so that we don't need to -// perform all of the cleanup from a d'tor. We could give out a "proxy" object -// that (internally) holds a weak reference (conceptually, not std::weak_ptr) -// and forbids any interactions with the socket after the shutdown procedure has -// been initiated. + // TODO eliminate this class and use RSocketStateMachine directly class ReactiveSocket { public: ReactiveSocket(ReactiveSocket&&) = delete; diff --git a/test/deprecated/ReactiveSocketConcurrencyTest.cpp b/test/deprecated/ReactiveSocketConcurrencyTest.cpp index 73249c5df..b2d5b0f63 100644 --- a/test/deprecated/ReactiveSocketConcurrencyTest.cpp +++ b/test/deprecated/ReactiveSocketConcurrencyTest.cpp @@ -12,7 +12,7 @@ #include #include "test/test_utils/MockStats.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/framing/FramedDuplexConnection.h" #include "src/framing/FrameSerializer_v0_1.h" #include "test/test_utils/InlineConnection.h" @@ -51,7 +51,7 @@ class ClientSideConcurrencyTest : public testing::Test { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .WillRepeatedly(Return(nullptr)); serverSock = ReactiveSocket::fromServerConnection( @@ -257,7 +257,7 @@ class ServerSideConcurrencyTest : public testing::Test { auto serverHandler = std::make_unique>(); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .WillRepeatedly(Return(nullptr)); thread2.getEventBase()->runImmediatelyOrRunInEventBaseThreadAndWait([&] { @@ -491,7 +491,7 @@ class InitialRequestNDeliveredTest : public testing::Test { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .WillRepeatedly(Return(nullptr)); EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) diff --git a/test/deprecated/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp index cea319e44..80d90a5ff 100644 --- a/test/deprecated/ReactiveSocketTest.cpp +++ b/test/deprecated/ReactiveSocketTest.cpp @@ -12,7 +12,7 @@ #include #include "src/framing/FrameTransport.h" #include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/internal/FollyKeepaliveTimer.h" #include "test/test_utils/InlineConnection.h" #include "test/test_utils/MockKeepaliveTimer.h" @@ -73,7 +73,7 @@ TEST(ReactiveSocketTest, RequestChannel) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -198,7 +198,7 @@ TEST(ReactiveSocketTest, RequestStreamComplete) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -293,7 +293,7 @@ TEST(ReactiveSocketTest, RequestStreamCancel) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -385,7 +385,7 @@ auto clientSock = ReactiveSocket::fromClientConnection( EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -541,7 +541,7 @@ TEST(ReactiveSocketTest, RequestStreamSurplusResponse) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -620,7 +620,7 @@ TEST(ReactiveSocketTest, RequestResponse) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -764,7 +764,7 @@ TEST(ReactiveSocketTest, RequestFireAndForget) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -809,7 +809,7 @@ TEST(ReactiveSocketTest, RequestMetadataPush) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -853,7 +853,7 @@ TEST(ReactiveSocketTest, SetupData) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -885,7 +885,7 @@ TEST(ReactiveSocketTest, SetupWithKeepaliveAndStats) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -1002,7 +1002,7 @@ TEST(ReactiveSocketTest, DISABLED_Destructor) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .InSequence(s) .WillRepeatedly(Return(nullptr)); @@ -1090,7 +1090,7 @@ TEST(ReactiveSocketTest, ReactiveSocketOverInlineConnection) { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .WillRepeatedly(Return(nullptr)); auto serverSock = ReactiveSocket::fromServerConnection( @@ -1121,10 +1121,16 @@ TEST(ReactiveSocketTest, CloseWithError) { const folly::StringPiece errString{"Hahaha"}; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) - .WillRepeatedly(Invoke([&](auto& socket, auto&) { - socket.closeConnectionError(errString.str()); - return nullptr; + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) + .WillRepeatedly(Invoke([&](auto&) { + // TODO this has become somewhat odd ... + // it used to receive ReactiveSocket in the callback + // but no longer does as part of the refactor away from + // using ReactiveSocket.h + // so to make this test pass for now it uses the clientSock + // reference it creates outside of this callback + clientSock->closeConnectionError(errString.str()); + return nullptr; })); auto serverSock = ReactiveSocket::disconnectedServer( @@ -1244,7 +1250,7 @@ class ReactiveSocketOnErrorOnShutdownTest : public testing::Test { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .WillRepeatedly(Return(nullptr)); serverSock = ReactiveSocket::fromServerConnection( @@ -1380,7 +1386,7 @@ class ReactiveSocketRegressionTest : public Test { EXPECT_CALL(connection, getOutput()) .WillOnce(Return(std::make_shared>())); - EXPECT_CALL(requestHandler_, handleSetupPayload_(_, _)) + EXPECT_CALL(requestHandler_, handleSetupPayload_(_)) .WillRepeatedly(Return(nullptr)); EXPECT_CALL(requestHandler_, socketOnConnected()).Times(1); @@ -1439,7 +1445,7 @@ class ReactiveSocketEmptyPayloadTest : public testing::Test { EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); auto& serverHandlerRef = *serverHandler; - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_, _)) + EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .WillRepeatedly(Return(nullptr)); serverSock = ReactiveSocket::fromServerConnection( diff --git a/test/framing/FramedReaderTest.cpp b/test/framing/FramedReaderTest.cpp index 74b97dfea..0ecd23bc3 100644 --- a/test/framing/FramedReaderTest.cpp +++ b/test/framing/FramedReaderTest.cpp @@ -7,7 +7,7 @@ #include #include #include "src/framing/FrameSerializer.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/framing/FramedDuplexConnection.h" #include "src/framing/FramedReader.h" #include "test/test_utils/InlineConnection.h" diff --git a/test/integration/ClientUtils.h b/test/integration/ClientUtils.h index 6060ae17b..56cd6cc1e 100644 --- a/test/integration/ClientUtils.h +++ b/test/integration/ClientUtils.h @@ -7,7 +7,7 @@ #include "src/internal/ClientResumeStatusCallback.h" #include "src/framing/FrameTransport.h" #include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/internal/FollyKeepaliveTimer.h" #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" diff --git a/test/integration/ServerFixture.cpp b/test/integration/ServerFixture.cpp index b6c514bc6..6c6aee7c4 100644 --- a/test/integration/ServerFixture.cpp +++ b/test/integration/ServerFixture.cpp @@ -67,14 +67,12 @@ class ServerRequestHandler : public DefaultRequestHandler { } std::shared_ptr handleSetupPayload( - ReactiveSocket& socket, ConnectionSetupPayload request) noexcept override { LOG(INFO) << "Received SetupPayload. NOT IMPLEMENTED"; return nullptr; } bool handleResume( - ReactiveSocket& socket, ResumeParameters) noexcept override { LOG(INFO) << "Received Resume. NOT IMPLEMENTED"; return false; diff --git a/test/integration/ServerFixture.h b/test/integration/ServerFixture.h index 2573e8ec7..1a12d269d 100644 --- a/test/integration/ServerFixture.h +++ b/test/integration/ServerFixture.h @@ -5,7 +5,7 @@ #include #include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/temporary_home/ServerConnectionAcceptor.h" #include "src/temporary_home/SubscriptionBase.h" #include "src/framing/FramedDuplexConnection.h" diff --git a/test/resumption/ReactiveSocketResumabilityTest.cpp b/test/resumption/ReactiveSocketResumabilityTest.cpp index bbfaa52c3..52b57b6aa 100644 --- a/test/resumption/ReactiveSocketResumabilityTest.cpp +++ b/test/resumption/ReactiveSocketResumabilityTest.cpp @@ -5,7 +5,7 @@ #include "src/temporary_home/NullRequestHandler.h" #include "test/test_utils/MockRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "test/test_utils/InlineConnection.h" #include "test/test_utils/MockStats.h" #include "test/streams/Mocks.h" diff --git a/test/resumption/TcpResumeClient.cpp b/test/resumption/TcpResumeClient.cpp index 8b2b2c8e8..e670b6b93 100644 --- a/test/resumption/TcpResumeClient.cpp +++ b/test/resumption/TcpResumeClient.cpp @@ -9,7 +9,7 @@ #include "src/internal/ClientResumeStatusCallback.h" #include "src/framing/FrameTransport.h" #include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/internal/FollyKeepaliveTimer.h" #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" diff --git a/test/resumption/TcpResumeServer.cpp b/test/resumption/TcpResumeServer.cpp index 70002532d..d9377602d 100644 --- a/test/resumption/TcpResumeServer.cpp +++ b/test/resumption/TcpResumeServer.cpp @@ -8,7 +8,7 @@ #include "src/framing/FrameTransport.h" #include "src/temporary_home/NullRequestHandler.h" #include "src/temporary_home/ServerConnectionAcceptor.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/temporary_home/SubscriptionBase.h" #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" @@ -86,14 +86,12 @@ class ServerRequestHandler : public DefaultRequestHandler { } std::shared_ptr handleSetupPayload( - ReactiveSocket& socket, ConnectionSetupPayload request) noexcept override { CHECK(false) << "unexpected call"; return nullptr; } bool handleResume( - ReactiveSocket& socket, ResumeParameters) noexcept override { CHECK(false) << "unexpected call"; return false; diff --git a/test/statemachine/PublisherBaseTest.cpp b/test/statemachine/PublisherBaseTest.cpp index a47c79134..878a0154e 100644 --- a/test/statemachine/PublisherBaseTest.cpp +++ b/test/statemachine/PublisherBaseTest.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" #include "src/temporary_home/SubscriberBase.h" #include "src/statemachine/PublisherBase.h" #include "test/test_utils/MockRequestHandler.h" diff --git a/test/statemachine/RSocketStateMachineTest.cpp b/test/statemachine/RSocketStateMachineTest.cpp index 350652601..c5d863de2 100644 --- a/test/statemachine/RSocketStateMachineTest.cpp +++ b/test/statemachine/RSocketStateMachineTest.cpp @@ -73,7 +73,6 @@ TEST(ConnectionAutomatonTest, InvalidFrameHeader) { std::shared_ptr connectionAutomaton; connectionAutomaton = std::make_shared( defaultExecutor(), - nullptr, std::make_shared(), Stats::noop(), nullptr, @@ -149,7 +148,6 @@ static void terminateTest( std::shared_ptr connectionAutomaton; connectionAutomaton = std::make_shared( defaultExecutor(), - nullptr, std::make_shared(), Stats::noop(), nullptr, @@ -249,7 +247,6 @@ TEST(ConnectionAutomatonTest, RefuseFrame) { std::shared_ptr connectionAutomaton; connectionAutomaton = std::make_shared( defaultExecutor(), - nullptr, std::make_shared(), Stats::noop(), nullptr, diff --git a/test/test_utils/MockKeepaliveTimer.h b/test/test_utils/MockKeepaliveTimer.h index 9ced2d0ca..97d81d656 100644 --- a/test/test_utils/MockKeepaliveTimer.h +++ b/test/test_utils/MockKeepaliveTimer.h @@ -8,7 +8,7 @@ #include #include "src/statemachine/RSocketStateMachine.h" -#include "src/temporary_home/ReactiveSocket.h" +#include "test/deprecated/ReactiveSocket.h" namespace reactivesocket { class MockKeepaliveTimer : public KeepaliveTimer { diff --git a/test/test_utils/MockRequestHandler.h b/test/test_utils/MockRequestHandler.h index 6d9c6f3af..767ad0938 100644 --- a/test/test_utils/MockRequestHandler.h +++ b/test/test_utils/MockRequestHandler.h @@ -37,14 +37,13 @@ class MockRequestHandler : public RequestHandler { MOCK_METHOD1( handleMetadataPush_, void(std::unique_ptr& request)); - MOCK_METHOD2( + MOCK_METHOD1( handleSetupPayload_, std::shared_ptr( - ReactiveSocket& socket, ConnectionSetupPayload& request)); - MOCK_METHOD2( + MOCK_METHOD1( handleResume_, - bool(ReactiveSocket& socket, ResumeParameters& resumeParams)); + bool(ResumeParameters& resumeParams)); yarpl::Reference> handleRequestChannel( Payload request, @@ -79,15 +78,13 @@ class MockRequestHandler : public RequestHandler { } std::shared_ptr handleSetupPayload( - ReactiveSocket& socket, ConnectionSetupPayload request) noexcept override { - return handleSetupPayload_(socket, request); + return handleSetupPayload_(request); } bool handleResume( - ReactiveSocket& socket, ResumeParameters resumeParams) noexcept override { - return handleResume_(socket, resumeParams); + return handleResume_(resumeParams); } void handleCleanResume( From 840633e76a3e7ea2fc48d9a19134027f318fb69e Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 06:17:54 -0700 Subject: [PATCH 09/31] ConnectionSetupPayload -> RSocketParameters It's not a payload. And it's got things for Setup and Resume. --- CMakeLists.txt | 4 +- src/ConnectionSetupRequest.cpp | 2 +- src/ConnectionSetupRequest.h | 6 +-- src/RSocketClient.cpp | 2 +- src/RSocketConnectionHandler.cpp | 4 +- src/RSocketConnectionHandler.h | 2 +- ...SetupPayload.cpp => RSocketParameters.cpp} | 4 +- ...tionSetupPayload.h => RSocketParameters.h} | 17 ++++---- src/framing/Frame.cpp | 4 +- src/framing/Frame.h | 4 +- src/statemachine/RSocketStateMachine.cpp | 6 +-- src/statemachine/RSocketStateMachine.h | 4 +- src/temporary_home/NullRequestHandler.cpp | 2 +- src/temporary_home/NullRequestHandler.h | 4 +- src/temporary_home/RequestHandler.h | 4 +- .../ServerConnectionAcceptor.cpp | 2 +- src/temporary_home/ServerConnectionAcceptor.h | 4 +- tck-test/server.cpp | 2 +- test/ServerConnectionAcceptorTest.cpp | 10 ++--- test/deprecated/ReactiveSocket.cpp | 12 +++--- test/deprecated/ReactiveSocket.h | 12 +++--- .../ReactiveSocketConcurrencyTest.cpp | 8 ++-- test/deprecated/ReactiveSocketTest.cpp | 40 +++++++++---------- test/framing/FramedReaderTest.cpp | 2 +- test/integration/ClientUtils.h | 4 +- test/integration/ServerFixture.cpp | 4 +- .../ReactiveSocketResumabilityTest.cpp | 2 +- test/resumption/TcpResumeClient.cpp | 2 +- test/resumption/TcpResumeServer.cpp | 4 +- test/test_utils/MockRequestHandler.h | 4 +- 30 files changed, 90 insertions(+), 91 deletions(-) rename src/{temporary_home/ConnectionSetupPayload.cpp => RSocketParameters.cpp} (84%) rename src/{temporary_home/ConnectionSetupPayload.h => RSocketParameters.h} (75%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05a661f62..6faff1c76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,6 +134,8 @@ add_library( src/RSocketRequester.h src/RSocketRequester.cpp src/RSocketErrors.h + src/RSocketParameters.cpp + src/RSocketParameters.h src/ConnectionAcceptor.h src/ConnectionFactory.h src/ConnectionSetupRequest.h @@ -169,8 +171,6 @@ add_library( src/internal/Common.h src/statemachine/RSocketStateMachine.cpp src/statemachine/RSocketStateMachine.h - src/temporary_home/ConnectionSetupPayload.cpp - src/temporary_home/ConnectionSetupPayload.h src/DuplexConnection.h src/internal/EnableSharedFromThis.h src/temporary_home/Executor.cpp diff --git a/src/ConnectionSetupRequest.cpp b/src/ConnectionSetupRequest.cpp index e00ae621d..93c9c7465 100644 --- a/src/ConnectionSetupRequest.cpp +++ b/src/ConnectionSetupRequest.cpp @@ -7,7 +7,7 @@ using namespace reactivesocket; namespace rsocket { ConnectionSetupRequest::ConnectionSetupRequest( - ConnectionSetupPayload setupPayload) + SetupParameters setupPayload) : setupPayload_(std::move(setupPayload)) {} const std::string& ConnectionSetupRequest::getMetadataMimeType() const { diff --git a/src/ConnectionSetupRequest.h b/src/ConnectionSetupRequest.h index a7cfc719c..aa8174dd6 100644 --- a/src/ConnectionSetupRequest.h +++ b/src/ConnectionSetupRequest.h @@ -2,7 +2,7 @@ #pragma once -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" namespace rsocket { @@ -18,7 +18,7 @@ namespace rsocket { class ConnectionSetupRequest { public: explicit ConnectionSetupRequest( - reactivesocket::ConnectionSetupPayload setupPayload); + reactivesocket::SetupParameters setupPayload); ConnectionSetupRequest(const ConnectionSetupRequest&) = delete; // copy ConnectionSetupRequest(ConnectionSetupRequest&&) = default; // move ConnectionSetupRequest& operator=(const ConnectionSetupRequest&) = @@ -34,6 +34,6 @@ class ConnectionSetupRequest { bool willHonorLease() const; private: - reactivesocket::ConnectionSetupPayload setupPayload_; + reactivesocket::SetupParameters setupPayload_; }; } diff --git a/src/RSocketClient.cpp b/src/RSocketClient.cpp index 9d2e8f83c..499666d78 100644 --- a/src/RSocketClient.cpp +++ b/src/RSocketClient.cpp @@ -38,7 +38,7 @@ Future> RSocketClient::connect() { ReactiveSocketMode::CLIENT); // TODO need to allow this being passed in - auto setupPayload = ConnectionSetupPayload( + auto setupPayload = SetupParameters( "text/plain", "text/plain", Payload("meta", "data")); // TODO ---> this code needs to be moved inside RSocketStateMachine diff --git a/src/RSocketConnectionHandler.cpp b/src/RSocketConnectionHandler.cpp index dd74d7f23..693624bdf 100644 --- a/src/RSocketConnectionHandler.cpp +++ b/src/RSocketConnectionHandler.cpp @@ -115,14 +115,14 @@ class RSocketHandlerBridge : public reactivesocket::DefaultRequestHandler { void RSocketConnectionHandler::setupNewSocket( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload) { + SetupParameters setupPayload) { LOG(INFO) << "RSocketServer => received new setup payload"; // FIXME(alexanderm): Handler should be tied to specific executor auto executor = folly::EventBaseManager::get()->getExistingEventBase(); auto socketParams = - SocketParameters(setupPayload.resumable, setupPayload.protocolVersion); + RSocketParameters(setupPayload.resumable, setupPayload.protocolVersion); std::shared_ptr setupRequest = std::make_shared(std::move(setupPayload)); std::shared_ptr requestHandler; diff --git a/src/RSocketConnectionHandler.h b/src/RSocketConnectionHandler.h index 9408ed9c1..666376a8f 100644 --- a/src/RSocketConnectionHandler.h +++ b/src/RSocketConnectionHandler.h @@ -30,7 +30,7 @@ class RSocketConnectionHandler : public reactivesocket::ConnectionHandler { public: virtual void setupNewSocket( std::shared_ptr frameTransport, - reactivesocket::ConnectionSetupPayload setupPayload) override; + reactivesocket::SetupParameters setupPayload) override; virtual bool resumeSocket( std::shared_ptr frameTransport, diff --git a/src/temporary_home/ConnectionSetupPayload.cpp b/src/RSocketParameters.cpp similarity index 84% rename from src/temporary_home/ConnectionSetupPayload.cpp rename to src/RSocketParameters.cpp index e80733ce8..cf64503d1 100644 --- a/src/temporary_home/ConnectionSetupPayload.cpp +++ b/src/RSocketParameters.cpp @@ -1,12 +1,12 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "ConnectionSetupPayload.h" +#include "RSocketParameters.h" #include namespace reactivesocket { std::ostream& operator<<( std::ostream& os, - const ConnectionSetupPayload& setupPayload) { + const SetupParameters& setupPayload) { return os << "metadataMimeType: " << setupPayload.metadataMimeType << " dataMimeType: " << setupPayload.dataMimeType << " payload: " << setupPayload.payload diff --git a/src/temporary_home/ConnectionSetupPayload.h b/src/RSocketParameters.h similarity index 75% rename from src/temporary_home/ConnectionSetupPayload.h rename to src/RSocketParameters.h index 3d54f9d89..bfa1be20b 100644 --- a/src/temporary_home/ConnectionSetupPayload.h +++ b/src/RSocketParameters.h @@ -10,19 +10,18 @@ namespace reactivesocket { -class SocketParameters { +class RSocketParameters { public: - SocketParameters(bool _resumable, ProtocolVersion _protocolVersion) + RSocketParameters(bool _resumable, ProtocolVersion _protocolVersion) : resumable(_resumable), protocolVersion(std::move(_protocolVersion)) {} bool resumable; ProtocolVersion protocolVersion; }; -// TODO: rename this and the whole file to SetupParams -class ConnectionSetupPayload : public SocketParameters { +class SetupParameters : public RSocketParameters { public: - explicit ConnectionSetupPayload( + explicit SetupParameters( std::string _metadataMimeType = "", std::string _dataMimeType = "", Payload _payload = Payload(), @@ -31,7 +30,7 @@ class ConnectionSetupPayload : public SocketParameters { ResumeIdentificationToken::generateNew(), ProtocolVersion _protocolVersion = FrameSerializer::getCurrentProtocolVersion()) - : SocketParameters(_resumable, _protocolVersion), + : RSocketParameters(_resumable, _protocolVersion), metadataMimeType(std::move(_metadataMimeType)), dataMimeType(std::move(_dataMimeType)), payload(std::move(_payload)), @@ -43,16 +42,16 @@ class ConnectionSetupPayload : public SocketParameters { ResumeIdentificationToken token; }; -std::ostream& operator<<(std::ostream&, const ConnectionSetupPayload&); +std::ostream& operator<<(std::ostream&, const SetupParameters&); -class ResumeParameters : public SocketParameters { +class ResumeParameters : public RSocketParameters { public: ResumeParameters( ResumeIdentificationToken _token, ResumePosition _serverPosition, ResumePosition _clientPosition, ProtocolVersion _protocolVersion) - : SocketParameters(true, _protocolVersion), + : RSocketParameters(true, _protocolVersion), token(std::move(_token)), serverPosition(_serverPosition), clientPosition(_clientPosition) {} diff --git a/src/framing/Frame.cpp b/src/framing/Frame.cpp index 3daed4c6b..47638a0b6 100644 --- a/src/framing/Frame.cpp +++ b/src/framing/Frame.cpp @@ -5,7 +5,7 @@ #include #include #include -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" namespace reactivesocket { @@ -187,7 +187,7 @@ std::ostream& operator<<(std::ostream& os, const Frame_SETUP& frame) { return os << frame.header_ << ", (" << frame.payload_; } -void Frame_SETUP::moveToSetupPayload(ConnectionSetupPayload& setupPayload) { +void Frame_SETUP::moveToSetupPayload(SetupParameters& setupPayload) { setupPayload.metadataMimeType = std::move(metadataMimeType_); setupPayload.dataMimeType = std::move(dataMimeType_); setupPayload.payload = std::move(payload_); diff --git a/src/framing/Frame.h b/src/framing/Frame.h index 943fcc0a3..57c393377 100644 --- a/src/framing/Frame.h +++ b/src/framing/Frame.h @@ -414,7 +414,7 @@ class Frame_KEEPALIVE { }; std::ostream& operator<<(std::ostream&, const Frame_KEEPALIVE&); -class ConnectionSetupPayload; +class SetupParameters; class Frame_SETUP { public: @@ -457,7 +457,7 @@ class Frame_SETUP { DCHECK(maxLifetime_ <= kMaxLifetime); } - void moveToSetupPayload(ConnectionSetupPayload& setupPayload); + void moveToSetupPayload(SetupParameters& setupPayload); FrameHeader header_; uint16_t versionMajor_{}; diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index 7b0c2674b..cd6a79c44 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -8,7 +8,7 @@ #include #include #include "src/internal/ClientResumeStatusCallback.h" -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" #include "src/DuplexConnection.h" #include "src/framing/FrameTransport.h" #include "src/temporary_home/RequestHandler.h" @@ -464,7 +464,7 @@ void RSocketStateMachine::handleConnectionFrame( LOG(ERROR) << "ignoring setup frame with lease"; } - ConnectionSetupPayload setupPayload; + SetupParameters setupPayload; frame.moveToSetupPayload(setupPayload); // this should be already set to the correct version @@ -886,7 +886,7 @@ void RSocketStateMachine::setFrameSerializer( void RSocketStateMachine::setUpFrame( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload) { + SetupParameters setupPayload) { auto protocolVersion = getSerializerProtocolVersion(); Frame_SETUP frame( diff --git a/src/statemachine/RSocketStateMachine.h b/src/statemachine/RSocketStateMachine.h index 41f2555cf..5ed70e4c2 100644 --- a/src/statemachine/RSocketStateMachine.h +++ b/src/statemachine/RSocketStateMachine.h @@ -28,7 +28,7 @@ class RequestHandler; class ResumeCache; class Stats; class StreamState; -class SocketParameters; +class RSocketParameters; class FrameSink { public: @@ -189,7 +189,7 @@ class RSocketStateMachine final ProtocolVersion getSerializerProtocolVersion(); void setUpFrame(std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload); + SetupParameters setupPayload); void metadataPush(std::unique_ptr metadata); diff --git a/src/temporary_home/NullRequestHandler.cpp b/src/temporary_home/NullRequestHandler.cpp index dacb6db42..3247ca3d4 100644 --- a/src/temporary_home/NullRequestHandler.cpp +++ b/src/temporary_home/NullRequestHandler.cpp @@ -48,7 +48,7 @@ void NullRequestHandler::handleMetadataPush( std::unique_ptr /*request*/) noexcept {} std::shared_ptr NullRequestHandler::handleSetupPayload( - ConnectionSetupPayload /*request*/) noexcept { + SetupParameters /*request*/) noexcept { return nullptr; } diff --git a/src/temporary_home/NullRequestHandler.h b/src/temporary_home/NullRequestHandler.h index 7b17bfcb9..204bd442b 100644 --- a/src/temporary_home/NullRequestHandler.h +++ b/src/temporary_home/NullRequestHandler.h @@ -3,7 +3,7 @@ #pragma once #include -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" #include "RequestHandler.h" namespace reactivesocket { @@ -58,7 +58,7 @@ class NullRequestHandler : public RequestHandler { std::unique_ptr request) noexcept override; std::shared_ptr handleSetupPayload( - ConnectionSetupPayload request) noexcept override; + SetupParameters request) noexcept override; bool handleResume(ResumeParameters) noexcept override; diff --git a/src/temporary_home/RequestHandler.h b/src/temporary_home/RequestHandler.h index 54d404ea9..e5e8f47e8 100644 --- a/src/temporary_home/RequestHandler.h +++ b/src/temporary_home/RequestHandler.h @@ -3,7 +3,7 @@ #pragma once #include "src/internal/Common.h" -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" #include "src/Payload.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" @@ -46,7 +46,7 @@ class RequestHandler { /// Temporary home - this should eventually be an input to asking for a /// RequestHandler so negotiation is possible - virtual std::shared_ptr handleSetupPayload(ConnectionSetupPayload request) noexcept = 0; + virtual std::shared_ptr handleSetupPayload(SetupParameters request) noexcept = 0; /// Temporary home - this should accompany handleSetupPayload /// Return stream state for the given token. Return nullptr to disable resume diff --git a/src/temporary_home/ServerConnectionAcceptor.cpp b/src/temporary_home/ServerConnectionAcceptor.cpp index c0a3ccf60..883f6cfd4 100644 --- a/src/temporary_home/ServerConnectionAcceptor.cpp +++ b/src/temporary_home/ServerConnectionAcceptor.cpp @@ -86,7 +86,7 @@ void ServerConnectionAcceptor::processFrame( break; } - ConnectionSetupPayload setupPayload; + SetupParameters setupPayload; setupFrame.moveToSetupPayload(setupPayload); removeConnection(transport); diff --git a/src/temporary_home/ServerConnectionAcceptor.h b/src/temporary_home/ServerConnectionAcceptor.h index 63c829d88..ca734fff1 100644 --- a/src/temporary_home/ServerConnectionAcceptor.h +++ b/src/temporary_home/ServerConnectionAcceptor.h @@ -5,7 +5,7 @@ #include #include #include "src/internal/Common.h" -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" namespace folly { class EventBase; @@ -33,7 +33,7 @@ class ConnectionHandler { /// connection fails) virtual void setupNewSocket( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload) = 0; + SetupParameters setupPayload) = 0; /// Called when we've received a resume frame on the connection and are ready /// to resume an existing ReactiveSocket. diff --git a/tck-test/server.cpp b/tck-test/server.cpp index c130c8f09..d0383ffad 100644 --- a/tck-test/server.cpp +++ b/tck-test/server.cpp @@ -220,7 +220,7 @@ class Callback : public AsyncServerSocket::AcceptCallback { } std::shared_ptr handleSetupPayload( - ConnectionSetupPayload request) noexcept override { + SetupParameters request) noexcept override { LOG(INFO) << "handleSetupPayload " << request; return nullptr; } diff --git a/test/ServerConnectionAcceptorTest.cpp b/test/ServerConnectionAcceptorTest.cpp index 3e2454e8e..20eb9feb5 100644 --- a/test/ServerConnectionAcceptorTest.cpp +++ b/test/ServerConnectionAcceptorTest.cpp @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" #include "src/framing/FrameProcessor.h" #include "src/framing/FrameSerializer.h" #include "src/framing/FrameTransport.h" @@ -19,13 +19,13 @@ class MockConnectionHandler : public ConnectionHandler { public: void setupNewSocket( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload) override { + SetupParameters setupPayload) override { doSetupNewSocket(std::move(frameTransport), setupPayload); } MOCK_METHOD2( doSetupNewSocket, - void(std::shared_ptr, ConnectionSetupPayload&)); + void(std::shared_ptr, SetupParameters&)); MOCK_METHOD2( resumeSocket, @@ -103,12 +103,12 @@ TEST_F(ServerConnectionAcceptorTest, EarlyError) { } TEST_F(ServerConnectionAcceptorTest, SetupFrame) { - ConnectionSetupPayload setupPayload( + SetupParameters setupPayload( "metadataMimeType", "dataMimeType", Payload(), true); EXPECT_CALL(*handler_, doSetupNewSocket(_, _)) .WillOnce(Invoke( [&](std::shared_ptr transport, - ConnectionSetupPayload& payload) { + SetupParameters& payload) { ASSERT_EQ(setupPayload.token, payload.token); ASSERT_EQ(setupPayload.metadataMimeType, payload.metadataMimeType); ASSERT_EQ(setupPayload.dataMimeType, payload.dataMimeType); diff --git a/test/deprecated/ReactiveSocket.cpp b/test/deprecated/ReactiveSocket.cpp index 9b18c64ad..e7ccc6b59 100644 --- a/test/deprecated/ReactiveSocket.cpp +++ b/test/deprecated/ReactiveSocket.cpp @@ -45,7 +45,7 @@ ReactiveSocket::fromClientConnection( folly::Executor& executor, std::unique_ptr connection, std::unique_ptr handler, - ConnectionSetupPayload setupPayload, + SetupParameters setupPayload, std::shared_ptr stats, std::unique_ptr keepaliveTimer) { auto socket = disconnectedClient( @@ -86,18 +86,18 @@ ReactiveSocket::fromServerConnection( std::unique_ptr connection, std::unique_ptr handler, std::shared_ptr stats, - const SocketParameters& socketParameters) { + const RSocketParameters& RSocketParameters) { // TODO: isResumable should come as a flag on Setup frame and it should be // exposed to the application code. We should then remove this parameter auto socket = disconnectedServer( executor, std::move(handler), std::move(stats), - socketParameters.protocolVersion); + RSocketParameters.protocolVersion); socket->serverConnect( std::make_shared(std::move(connection)), - socketParameters); + RSocketParameters); return socket; } @@ -161,7 +161,7 @@ void ReactiveSocket::metadataPush( void ReactiveSocket::clientConnect( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload) { + SetupParameters setupPayload) { CHECK(frameTransport && !frameTransport->isClosed()); debugCheckCorrectExecutor(); checkNotClosed(); @@ -178,7 +178,7 @@ void ReactiveSocket::clientConnect( void ReactiveSocket::serverConnect( std::shared_ptr frameTransport, - const SocketParameters& socketParams) { + const RSocketParameters& socketParams) { debugCheckCorrectExecutor(); connection_->setResumable(socketParams.resumable); connection_->connect( diff --git a/test/deprecated/ReactiveSocket.h b/test/deprecated/ReactiveSocket.h index 4a0606eca..1c01e93a6 100644 --- a/test/deprecated/ReactiveSocket.h +++ b/test/deprecated/ReactiveSocket.h @@ -4,7 +4,7 @@ #include #include "src/internal/Common.h" -#include "src/temporary_home/ConnectionSetupPayload.h" +#include "src/RSocketParameters.h" #include "src/Payload.h" #include "src/temporary_home/Stats.h" #include "yarpl/flowable/Subscriber.h" @@ -38,7 +38,7 @@ class ReactiveSocket { folly::Executor& executor, std::unique_ptr connection, std::unique_ptr handler, - ConnectionSetupPayload setupPayload = ConnectionSetupPayload(), + SetupParameters setupPayload = SetupParameters(), std::shared_ptr stats = Stats::noop(), std::unique_ptr keepaliveTimer = std::unique_ptr(nullptr)); @@ -56,8 +56,8 @@ class ReactiveSocket { std::unique_ptr connection, std::unique_ptr handler, std::shared_ptr stats = Stats::noop(), - const SocketParameters& socketParameters = - SocketParameters(/*resumable=*/false, ProtocolVersion::Unknown)); + const RSocketParameters& socketParameters = + RSocketParameters(/*resumable=*/false, ProtocolVersion::Unknown)); static std::unique_ptr disconnectedServer( folly::Executor& executor, @@ -82,11 +82,11 @@ class ReactiveSocket { void clientConnect( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload = ConnectionSetupPayload()); + SetupParameters setupPayload = SetupParameters()); void serverConnect( std::shared_ptr frameTransport, - const SocketParameters& socketParams); + const RSocketParameters& socketParams); void close(); void disconnect(); diff --git a/test/deprecated/ReactiveSocketConcurrencyTest.cpp b/test/deprecated/ReactiveSocketConcurrencyTest.cpp index b2d5b0f63..1bbb2a910 100644 --- a/test/deprecated/ReactiveSocketConcurrencyTest.cpp +++ b/test/deprecated/ReactiveSocketConcurrencyTest.cpp @@ -41,7 +41,7 @@ class ClientSideConcurrencyTest : public testing::Test { // No interactions on this mock, the client will not accept any // requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload()), + SetupParameters("", "", Payload()), Stats::noop(), nullptr); }); @@ -252,7 +252,7 @@ class ServerSideConcurrencyTest : public testing::Test { // No interactions on this mock, the client will not accept any // requests. std::make_unique>(), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); auto& serverHandlerRef = *serverHandler; @@ -266,7 +266,7 @@ class ServerSideConcurrencyTest : public testing::Test { std::move(serverConn), std::move(serverHandler), Stats::noop(), - SocketParameters(false, ProtocolVersion::Unknown)); + RSocketParameters(false, ProtocolVersion::Unknown)); }); EXPECT_CALL(*clientInput, onSubscribe_(_)) @@ -525,7 +525,7 @@ class InitialRequestNDeliveredTest : public testing::Test { std::move(serverSocketConnection), inlineExecutor()), std::move(serverHandler), Stats::noop(), - SocketParameters(false, ProtocolVersion::Unknown)); + RSocketParameters(false, ProtocolVersion::Unknown)); Frame_SETUP frameSetup( FrameFlags::EMPTY, diff --git a/test/deprecated/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp index 80d90a5ff..6a21ea313 100644 --- a/test/deprecated/ReactiveSocketTest.cpp +++ b/test/deprecated/ReactiveSocketTest.cpp @@ -66,7 +66,7 @@ TEST(ReactiveSocketTest, RequestChannel) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -191,7 +191,7 @@ TEST(ReactiveSocketTest, RequestStreamComplete) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -286,7 +286,7 @@ TEST(ReactiveSocketTest, RequestStreamCancel) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -378,7 +378,7 @@ auto clientSock = ReactiveSocket::fromClientConnection( std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -476,7 +476,7 @@ TEST(ReactiveSocketTest, RequestStreamSendsOneRequest) { defaultExecutor(), std::move(clientConn), std::move(requestHandler), - ConnectionSetupPayload()); + SetupParameters()); const auto originalPayload = folly::IOBuf::copyBuffer("foo"); @@ -534,7 +534,7 @@ TEST(ReactiveSocketTest, RequestStreamSurplusResponse) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -702,7 +702,7 @@ TEST(ReactiveSocketTest, RequestResponseSendsOneRequest) { defaultExecutor(), std::move(clientConn), std::move(requestHandler), - ConnectionSetupPayload()); + SetupParameters()); const auto originalPayload = folly::IOBuf::copyBuffer("foo"); @@ -757,7 +757,7 @@ TEST(ReactiveSocketTest, RequestFireAndForget) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -802,7 +802,7 @@ TEST(ReactiveSocketTest, RequestMetadataPush) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -845,7 +845,7 @@ TEST(ReactiveSocketTest, SetupData) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload( + SetupParameters( "text/plain", "text/plain", Payload("meta", "data"))); auto serverHandler = std::make_unique>(); @@ -900,7 +900,7 @@ TEST(ReactiveSocketTest, SetupWithKeepaliveAndStats) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload( + SetupParameters( "text/plain", "text/plain", Payload("meta", "data")), clientStats, std::move(clientKeepalive)); @@ -938,7 +938,7 @@ TEST(ReactiveSocketTest, GoodKeepalive) { // No interactions on this mock, the client will not accept any // requests. std::move(requestHandler), - ConnectionSetupPayload( + SetupParameters( "text/plain", "text/plain", Payload("meta", "data")), clientStats, std::move(clientKeepalive)); @@ -994,7 +994,7 @@ TEST(ReactiveSocketTest, DISABLED_Destructor) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload()), + SetupParameters("", "", Payload()), clientStats); auto serverHandler = std::make_unique>(); @@ -1082,7 +1082,7 @@ TEST(ReactiveSocketTest, ReactiveSocketOverInlineConnection) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); // we don't expect any call other than setup payload auto serverHandler = std::make_unique>(); @@ -1111,7 +1111,7 @@ TEST(ReactiveSocketTest, CloseWithError) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); // We don't expect any call other than setup payload. auto serverHandler = std::make_unique>(); @@ -1143,7 +1143,7 @@ TEST(ReactiveSocketTest, CloseWithError) { serverSock->serverConnect( std::make_shared(std::move(serverConn)), - SocketParameters(false, FrameSerializer::getCurrentProtocolVersion())); + RSocketParameters(false, FrameSerializer::getCurrentProtocolVersion())); } class ReactiveSocketIgnoreRequestTest : public testing::Test { @@ -1163,7 +1163,7 @@ class ReactiveSocketIgnoreRequestTest : public testing::Test { // No interactions on this mock, the client will not accept any // requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); serverSock = ReactiveSocket::fromServerConnection( defaultExecutor(), @@ -1243,7 +1243,7 @@ class ReactiveSocketOnErrorOnShutdownTest : public testing::Test { // No interactions on this mock, the client will not accept any // requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload())); + SetupParameters("", "", Payload())); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -1397,7 +1397,7 @@ class ReactiveSocketRegressionTest : public Test { std::move(connectionPtr), std::move(requestHandlerPtr_), Stats::noop(), - SocketParameters(false, FrameSerializer::getCurrentProtocolVersion())); + RSocketParameters(false, FrameSerializer::getCurrentProtocolVersion())); } MockRequestHandler& requestHandler_; @@ -1425,7 +1425,7 @@ class ReactiveSocketEmptyPayloadTest : public testing::Test { auto serverConn = std::make_unique(); clientConn->connectTo(*serverConn); - auto connectionSetup = ConnectionSetupPayload("", "", Payload()); + auto connectionSetup = SetupParameters("", "", Payload()); connectionSetup.protocolVersion = ProtocolVersion(1, 0); auto requestHandler = std::make_unique>(); diff --git a/test/framing/FramedReaderTest.cpp b/test/framing/FramedReaderTest.cpp index 0ecd23bc3..a40f2443e 100644 --- a/test/framing/FramedReaderTest.cpp +++ b/test/framing/FramedReaderTest.cpp @@ -234,7 +234,7 @@ TEST(FramedReaderTest, InvalidDataStream) { // No interactions on this mock, the client will not accept any // requests. std::move(requestHandler), - ConnectionSetupPayload("", "", Payload("test client payload"))); + SetupParameters("", "", Payload("test client payload"))); } // TODO(lehecka): verify FramedReader protocol autodetection mechanism diff --git a/test/integration/ClientUtils.h b/test/integration/ClientUtils.h index 56cd6cc1e..3582bc35d 100644 --- a/test/integration/ClientUtils.h +++ b/test/integration/ClientUtils.h @@ -133,8 +133,8 @@ std::unique_ptr getRSocket(folly::EventBase* eventBase) { } // Utility function to create a SetupPayload -ConnectionSetupPayload getSetupPayload(ResumeIdentificationToken token) { - return ConnectionSetupPayload( +SetupParameters getSetupPayload(ResumeIdentificationToken token) { + return SetupParameters( "text/plain", "text/plain", Payload("meta", "data"), true, token); } } diff --git a/test/integration/ServerFixture.cpp b/test/integration/ServerFixture.cpp index 6c6aee7c4..c44b33b58 100644 --- a/test/integration/ServerFixture.cpp +++ b/test/integration/ServerFixture.cpp @@ -67,7 +67,7 @@ class ServerRequestHandler : public DefaultRequestHandler { } std::shared_ptr handleSetupPayload( - ConnectionSetupPayload request) noexcept override { + SetupParameters request) noexcept override { LOG(INFO) << "Received SetupPayload. NOT IMPLEMENTED"; return nullptr; } @@ -115,7 +115,7 @@ class MyConnectionHandler : public ConnectionHandler { void setupNewSocket( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload) override { + SetupParameters setupPayload) override { LOG(INFO) << "ServerSocket. SETUP socket from client"; std::unique_ptr requestHandler = diff --git a/test/resumption/ReactiveSocketResumabilityTest.cpp b/test/resumption/ReactiveSocketResumabilityTest.cpp index 52b57b6aa..800f7124f 100644 --- a/test/resumption/ReactiveSocketResumabilityTest.cpp +++ b/test/resumption/ReactiveSocketResumabilityTest.cpp @@ -45,7 +45,7 @@ TEST(ReactiveSocketResumabilityTest, Disconnect) { defaultExecutor(), std::move(socketConnection), std::move(requestHandler), - ConnectionSetupPayload("", "", Payload(), true), + SetupParameters("", "", Payload(), true), stats); auto responseSubscriber = make_ref>(); diff --git a/test/resumption/TcpResumeClient.cpp b/test/resumption/TcpResumeClient.cpp index e670b6b93..e1cf43e7f 100644 --- a/test/resumption/TcpResumeClient.cpp +++ b/test/resumption/TcpResumeClient.cpp @@ -139,7 +139,7 @@ int main(int argc, char* argv[]) { LOG(INFO) << "connecting RS ..."; reactiveSocket->clientConnect( std::make_shared(std::move(framedConnection)), - ConnectionSetupPayload( + SetupParameters( "text/plain", "text/plain", Payload("meta", "data"), true, token)); }); diff --git a/test/resumption/TcpResumeServer.cpp b/test/resumption/TcpResumeServer.cpp index d9377602d..5641d9da8 100644 --- a/test/resumption/TcpResumeServer.cpp +++ b/test/resumption/TcpResumeServer.cpp @@ -86,7 +86,7 @@ class ServerRequestHandler : public DefaultRequestHandler { } std::shared_ptr handleSetupPayload( - ConnectionSetupPayload request) noexcept override { + SetupParameters request) noexcept override { CHECK(false) << "unexpected call"; return nullptr; } @@ -141,7 +141,7 @@ class MyConnectionHandler : public ConnectionHandler { void setupNewSocket( std::shared_ptr frameTransport, - ConnectionSetupPayload setupPayload) override { + SetupParameters setupPayload) override { LOG(INFO) << "MyConnectionHandler::setupNewSocket " << setupPayload; std::unique_ptr requestHandler = diff --git a/test/test_utils/MockRequestHandler.h b/test/test_utils/MockRequestHandler.h index 767ad0938..9893685d8 100644 --- a/test/test_utils/MockRequestHandler.h +++ b/test/test_utils/MockRequestHandler.h @@ -40,7 +40,7 @@ class MockRequestHandler : public RequestHandler { MOCK_METHOD1( handleSetupPayload_, std::shared_ptr( - ConnectionSetupPayload& request)); + SetupParameters& request)); MOCK_METHOD1( handleResume_, bool(ResumeParameters& resumeParams)); @@ -78,7 +78,7 @@ class MockRequestHandler : public RequestHandler { } std::shared_ptr handleSetupPayload( - ConnectionSetupPayload request) noexcept override { + SetupParameters request) noexcept override { return handleSetupPayload_(request); } From ffd145a80184ea0480b5adb8b74f67eb5602cfaa Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 06:21:52 -0700 Subject: [PATCH 10/31] Stream state machines to their proper home --- CMakeLists.txt | 10 +++++----- src/RSocketResponder.h | 2 +- src/statemachine/RSocketStateMachine.cpp | 2 +- src/statemachine/RSocketStateMachine.h | 4 ++-- src/statemachine/StreamAutomatonBase.cpp | 2 +- src/{temporary_home => statemachine}/StreamState.cpp | 0 src/{temporary_home => statemachine}/StreamState.h | 0 .../StreamsFactory.cpp | 0 src/{temporary_home => statemachine}/StreamsFactory.h | 0 src/{temporary_home => statemachine}/StreamsHandler.h | 0 test/StreamStateTest.cpp | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) rename src/{temporary_home => statemachine}/StreamState.cpp (100%) rename src/{temporary_home => statemachine}/StreamState.h (100%) rename src/{temporary_home => statemachine}/StreamsFactory.cpp (100%) rename src/{temporary_home => statemachine}/StreamsFactory.h (100%) rename src/{temporary_home => statemachine}/StreamsHandler.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6faff1c76..17be636e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,6 +166,11 @@ add_library( src/statemachine/StreamRequester.h src/statemachine/StreamResponder.cpp src/statemachine/StreamResponder.h + src/statemachine/StreamsFactory.cpp + src/statemachine/StreamsFactory.h + src/statemachine/StreamsHandler.h + src/statemachine/StreamState.cpp + src/statemachine/StreamState.h src/internal/ClientResumeStatusCallback.h src/internal/Common.cpp src/internal/Common.h @@ -202,11 +207,6 @@ add_library( src/temporary_home/ServerConnectionAcceptor.h src/temporary_home/Stats.cpp src/temporary_home/Stats.h - src/temporary_home/StreamsFactory.cpp - src/temporary_home/StreamsFactory.h - src/temporary_home/StreamsHandler.h - src/temporary_home/StreamState.cpp - src/temporary_home/StreamState.h src/temporary_home/SubscriberBase.h src/temporary_home/SubscriptionBase.h src/transports/tcp/TcpDuplexConnection.cpp diff --git a/src/RSocketResponder.h b/src/RSocketResponder.h index 11cc228da..ab08c7676 100644 --- a/src/RSocketResponder.h +++ b/src/RSocketResponder.h @@ -8,7 +8,7 @@ #include "yarpl/Single.h" #include "src/Payload.h" -#include "src/temporary_home/StreamState.h" +#include "src/statemachine/StreamState.h" namespace rsocket { diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index cd6a79c44..93a2a9d01 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -14,7 +14,7 @@ #include "src/temporary_home/RequestHandler.h" #include "src/temporary_home/ResumeCache.h" #include "src/temporary_home/Stats.h" -#include "src/temporary_home/StreamState.h" +#include "StreamState.h" #include "src/statemachine/ChannelResponder.h" #include "src/statemachine/StreamAutomatonBase.h" diff --git a/src/statemachine/RSocketStateMachine.h b/src/statemachine/RSocketStateMachine.h index 5ed70e4c2..d855d045e 100644 --- a/src/statemachine/RSocketStateMachine.h +++ b/src/statemachine/RSocketStateMachine.h @@ -13,8 +13,8 @@ #include "src/framing/FrameProcessor.h" #include "src/framing/FrameSerializer.h" #include "src/Payload.h" -#include "src/temporary_home/StreamsFactory.h" -#include "src/temporary_home/StreamsHandler.h" +#include "StreamsFactory.h" +#include "StreamsHandler.h" namespace reactivesocket { diff --git a/src/statemachine/StreamAutomatonBase.cpp b/src/statemachine/StreamAutomatonBase.cpp index 3ee50a906..87d648c45 100644 --- a/src/statemachine/StreamAutomatonBase.cpp +++ b/src/statemachine/StreamAutomatonBase.cpp @@ -3,7 +3,7 @@ #include "src/statemachine/StreamAutomatonBase.h" #include #include "RSocketStateMachine.h" -#include "src/temporary_home/StreamsHandler.h" +#include "StreamsHandler.h" namespace reactivesocket { diff --git a/src/temporary_home/StreamState.cpp b/src/statemachine/StreamState.cpp similarity index 100% rename from src/temporary_home/StreamState.cpp rename to src/statemachine/StreamState.cpp diff --git a/src/temporary_home/StreamState.h b/src/statemachine/StreamState.h similarity index 100% rename from src/temporary_home/StreamState.h rename to src/statemachine/StreamState.h diff --git a/src/temporary_home/StreamsFactory.cpp b/src/statemachine/StreamsFactory.cpp similarity index 100% rename from src/temporary_home/StreamsFactory.cpp rename to src/statemachine/StreamsFactory.cpp diff --git a/src/temporary_home/StreamsFactory.h b/src/statemachine/StreamsFactory.h similarity index 100% rename from src/temporary_home/StreamsFactory.h rename to src/statemachine/StreamsFactory.h diff --git a/src/temporary_home/StreamsHandler.h b/src/statemachine/StreamsHandler.h similarity index 100% rename from src/temporary_home/StreamsHandler.h rename to src/statemachine/StreamsHandler.h diff --git a/test/StreamStateTest.cpp b/test/StreamStateTest.cpp index 0c5b24bc6..dfab1c09e 100644 --- a/test/StreamStateTest.cpp +++ b/test/StreamStateTest.cpp @@ -3,7 +3,7 @@ #include #include -#include "src/temporary_home/StreamState.h" +#include "src/statemachine/StreamState.h" #include "test/test_utils/MockStats.h" using namespace reactivesocket; From f823e11135b4486105c4ded04b76b761fef0564a Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 06:22:51 -0700 Subject: [PATCH 11/31] ResumeCache to internal folder --- CMakeLists.txt | 4 ++-- src/{temporary_home => internal}/ResumeCache.cpp | 0 src/{temporary_home => internal}/ResumeCache.h | 2 +- src/statemachine/RSocketStateMachine.cpp | 2 +- test/resumption/ResumeCacheTest.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename src/{temporary_home => internal}/ResumeCache.cpp (100%) rename src/{temporary_home => internal}/ResumeCache.h (98%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 17be636e2..5f875c8d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -201,8 +201,8 @@ add_library( src/Payload.h src/internal/ReactiveStreamsCompat.h src/temporary_home/RequestHandler.h - src/temporary_home/ResumeCache.cpp - src/temporary_home/ResumeCache.h + src/internal/ResumeCache.cpp + src/internal/ResumeCache.h src/temporary_home/ServerConnectionAcceptor.cpp src/temporary_home/ServerConnectionAcceptor.h src/temporary_home/Stats.cpp diff --git a/src/temporary_home/ResumeCache.cpp b/src/internal/ResumeCache.cpp similarity index 100% rename from src/temporary_home/ResumeCache.cpp rename to src/internal/ResumeCache.cpp diff --git a/src/temporary_home/ResumeCache.h b/src/internal/ResumeCache.h similarity index 98% rename from src/temporary_home/ResumeCache.h rename to src/internal/ResumeCache.h index 23b9f5b91..d4b67f5d6 100644 --- a/src/temporary_home/ResumeCache.h +++ b/src/internal/ResumeCache.h @@ -9,7 +9,7 @@ #include #include "src/internal/Common.h" -#include "Stats.h" +#include "src/temporary_home/Stats.h" namespace folly { class IOBuf; diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index 93a2a9d01..b558dfcde 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -12,7 +12,7 @@ #include "src/DuplexConnection.h" #include "src/framing/FrameTransport.h" #include "src/temporary_home/RequestHandler.h" -#include "src/temporary_home/ResumeCache.h" +#include "src/internal/ResumeCache.h" #include "src/temporary_home/Stats.h" #include "StreamState.h" #include "src/statemachine/ChannelResponder.h" diff --git a/test/resumption/ResumeCacheTest.cpp b/test/resumption/ResumeCacheTest.cpp index 9ea063f95..e43667df2 100644 --- a/test/resumption/ResumeCacheTest.cpp +++ b/test/resumption/ResumeCacheTest.cpp @@ -7,7 +7,7 @@ #include "src/framing/Frame.h" #include "src/framing/FrameTransport.h" -#include "src/temporary_home/ResumeCache.h" +#include "src/internal/ResumeCache.h" #include "src/temporary_home/Stats.h" #include "src/framing/FrameSerializer_v0_1.h" #include "test/test_utils/InlineConnection.h" From 498b14b56f97f578af63a819534409c60a7a00f7 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 06:25:41 -0700 Subject: [PATCH 12/31] Stats -> /src/RSocketStats --- CMakeLists.txt | 4 ++-- src/RSocketClient.cpp | 4 ++-- src/RSocketConnectionHandler.cpp | 4 ++-- src/RSocketServer.h | 2 +- src/{temporary_home/Stats.cpp => RSocketStats.cpp} | 6 +++--- src/{temporary_home/Stats.h => RSocketStats.h} | 6 +++--- src/framing/FramedDuplexConnection.h | 2 +- src/internal/ResumeCache.h | 6 +++--- src/statemachine/RSocketStateMachine.cpp | 4 ++-- src/statemachine/RSocketStateMachine.h | 8 ++++---- src/statemachine/StreamState.cpp | 4 ++-- src/statemachine/StreamState.h | 6 +++--- src/temporary_home/ServerConnectionAcceptor.cpp | 2 +- src/temporary_home/ServerConnectionAcceptor.h | 2 +- src/transports/tcp/TcpConnectionFactory.cpp | 2 +- src/transports/tcp/TcpDuplexConnection.cpp | 6 +++--- src/transports/tcp/TcpDuplexConnection.h | 4 ++-- tck-test/server.cpp | 4 ++-- test/deprecated/ReactiveSocket.cpp | 10 +++++----- test/deprecated/ReactiveSocket.h | 12 ++++++------ test/deprecated/ReactiveSocketConcurrencyTest.cpp | 6 +++--- test/deprecated/ReactiveSocketTest.cpp | 2 +- test/integration/ClientUtils.h | 4 ++-- test/integration/ServerFixture.cpp | 6 +++--- test/resumption/ResumeCacheTest.cpp | 14 +++++++------- test/resumption/TcpResumeServer.cpp | 8 ++++---- test/statemachine/RSocketStateMachineTest.cpp | 6 +++--- test/test_utils/MockStats.h | 4 ++-- test/test_utils/StatsPrinter.h | 4 ++-- 29 files changed, 76 insertions(+), 76 deletions(-) rename src/{temporary_home/Stats.cpp => RSocketStats.cpp} (91%) rename src/{temporary_home/Stats.h => RSocketStats.h} (90%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f875c8d5..0e0dd7fca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -205,8 +205,8 @@ add_library( src/internal/ResumeCache.h src/temporary_home/ServerConnectionAcceptor.cpp src/temporary_home/ServerConnectionAcceptor.h - src/temporary_home/Stats.cpp - src/temporary_home/Stats.h + src/RSocketStats.cpp + src/RSocketStats.h src/temporary_home/SubscriberBase.h src/temporary_home/SubscriptionBase.h src/transports/tcp/TcpDuplexConnection.cpp diff --git a/src/RSocketClient.cpp b/src/RSocketClient.cpp index 499666d78..318fff99b 100644 --- a/src/RSocketClient.cpp +++ b/src/RSocketClient.cpp @@ -4,7 +4,7 @@ #include "RSocketRequester.h" #include "src/internal/FollyKeepaliveTimer.h" #include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/Stats.h" +#include "RSocketStats.h" using namespace reactivesocket; using namespace folly; @@ -31,7 +31,7 @@ Future> RSocketClient::connect() { // need to allow Responder being passed in optionally std::make_unique(), // need to allow stats being passed in - Stats::noop(), + RSocketStats::noop(), // TODO need to optionally allow defining the keepalive timer std::make_unique( eventBase, std::chrono::milliseconds(5000)), diff --git a/src/RSocketConnectionHandler.cpp b/src/RSocketConnectionHandler.cpp index 693624bdf..ea5c6476c 100644 --- a/src/RSocketConnectionHandler.cpp +++ b/src/RSocketConnectionHandler.cpp @@ -10,7 +10,7 @@ #include "src/statemachine/RSocketStateMachine.h" #include "src/temporary_home/NullRequestHandler.h" #include "src/temporary_home/OldNewBridge.h" -#include "src/temporary_home/Stats.h" +#include "RSocketStats.h" namespace rsocket { @@ -142,7 +142,7 @@ void RSocketConnectionHandler::setupNewSocket( auto rs = std::make_shared( *executor, std::move(handlerBridge), - Stats::noop(), + RSocketStats::noop(), nullptr, ReactiveSocketMode::SERVER); diff --git a/src/RSocketServer.h b/src/RSocketServer.h index 4e017c8fe..faaa1451c 100644 --- a/src/RSocketServer.h +++ b/src/RSocketServer.h @@ -71,7 +71,7 @@ class RSocketServer { // std::function( // std::unique_ptr)>); - // TODO version supporting Stats and other params + // TODO version supporting RSocketStats and other params // RSocketServer::start(OnAccept onAccept, ServerSetup setupParams) friend class RSocketServerConnectionHandler; diff --git a/src/temporary_home/Stats.cpp b/src/RSocketStats.cpp similarity index 91% rename from src/temporary_home/Stats.cpp rename to src/RSocketStats.cpp index f6b1d9c84..21be3607e 100644 --- a/src/temporary_home/Stats.cpp +++ b/src/RSocketStats.cpp @@ -1,11 +1,11 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "Stats.h" +#include "RSocketStats.h" #include namespace reactivesocket { -class NoopStats : public Stats { +class NoopStats : public RSocketStats { public: NoopStats() = default; ~NoopStats() = default; @@ -41,7 +41,7 @@ class NoopStats : public Stats { NoopStats(NoopStats&&) = delete; // non construction-movable }; -std::shared_ptr Stats::noop() { +std::shared_ptr RSocketStats::noop() { return NoopStats::instance(); } } diff --git a/src/temporary_home/Stats.h b/src/RSocketStats.h similarity index 90% rename from src/temporary_home/Stats.h rename to src/RSocketStats.h index 04732d11f..cb39ab24e 100644 --- a/src/temporary_home/Stats.h +++ b/src/RSocketStats.h @@ -10,11 +10,11 @@ namespace reactivesocket { class DuplexConnection; -class Stats { +class RSocketStats { public: - virtual ~Stats() = default; + virtual ~RSocketStats() = default; - static std::shared_ptr noop(); + static std::shared_ptr noop(); virtual void socketCreated() = 0; virtual void socketDisconnected() = 0; diff --git a/src/framing/FramedDuplexConnection.h b/src/framing/FramedDuplexConnection.h index 73f486614..367df2507 100644 --- a/src/framing/FramedDuplexConnection.h +++ b/src/framing/FramedDuplexConnection.h @@ -3,7 +3,7 @@ #pragma once #include -#include +#include #include "src/internal/Common.h" #include "src/DuplexConnection.h" diff --git a/src/internal/ResumeCache.h b/src/internal/ResumeCache.h index d4b67f5d6..ca2861bcb 100644 --- a/src/internal/ResumeCache.h +++ b/src/internal/ResumeCache.h @@ -9,7 +9,7 @@ #include #include "src/internal/Common.h" -#include "src/temporary_home/Stats.h" +#include "src/RSocketStats.h" namespace folly { class IOBuf; @@ -30,7 +30,7 @@ class FrameTransport; class ResumeCache { public: explicit ResumeCache( - std::shared_ptr stats, + std::shared_ptr stats, size_t capacity = DEFAULT_CAPACITY) : stats_(std::move(stats)), capacity_(capacity) {} ~ResumeCache(); @@ -88,7 +88,7 @@ class ResumeCache { // Called before clearing cached frames to update stats. void clearFrames(ResumePosition position); - std::shared_ptr stats_; + std::shared_ptr stats_; // End position of the send buffer queue ResumePosition position_{0}; diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index b558dfcde..161594181 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -13,7 +13,7 @@ #include "src/framing/FrameTransport.h" #include "src/temporary_home/RequestHandler.h" #include "src/internal/ResumeCache.h" -#include "src/temporary_home/Stats.h" +#include "src/RSocketStats.h" #include "StreamState.h" #include "src/statemachine/ChannelResponder.h" #include "src/statemachine/StreamAutomatonBase.h" @@ -23,7 +23,7 @@ namespace reactivesocket { RSocketStateMachine::RSocketStateMachine( folly::Executor& executor, std::shared_ptr requestHandler, - std::shared_ptr stats, + std::shared_ptr stats, std::unique_ptr keepaliveTimer, ReactiveSocketMode mode) : ExecutorBase(executor), diff --git a/src/statemachine/RSocketStateMachine.h b/src/statemachine/RSocketStateMachine.h index d855d045e..5f2f2ee92 100644 --- a/src/statemachine/RSocketStateMachine.h +++ b/src/statemachine/RSocketStateMachine.h @@ -26,7 +26,7 @@ class Frame_ERROR; class KeepaliveTimer; class RequestHandler; class ResumeCache; -class Stats; +class RSocketStats; class StreamState; class RSocketParameters; @@ -62,7 +62,7 @@ class RSocketStateMachine final RSocketStateMachine( folly::Executor& executor, std::shared_ptr requestHandler, - std::shared_ptr stats, + std::shared_ptr stats, std::unique_ptr keepaliveTimer_, ReactiveSocketMode mode); @@ -200,7 +200,7 @@ class RSocketStateMachine final void setFrameSerializer(std::unique_ptr); - Stats& stats() { + RSocketStats& stats() { return *stats_; } @@ -266,7 +266,7 @@ class RSocketStateMachine final bool ensureOrAutodetectFrameSerializer(const folly::IOBuf& firstFrame); - const std::shared_ptr stats_; + const std::shared_ptr stats_; ReactiveSocketMode mode_; bool isResumable_{false}; bool remoteResumeable_{false}; diff --git a/src/statemachine/StreamState.cpp b/src/statemachine/StreamState.cpp index 52903a7da..e4529bf02 100644 --- a/src/statemachine/StreamState.cpp +++ b/src/statemachine/StreamState.cpp @@ -2,11 +2,11 @@ #include "StreamState.h" -#include "src/temporary_home/Stats.h" +#include "src/RSocketStats.h" namespace reactivesocket { -StreamState::StreamState(Stats& stats) : stats_(stats) {} +StreamState::StreamState(RSocketStats& stats) : stats_(stats) {} StreamState::~StreamState() { onClearFrames(); diff --git a/src/statemachine/StreamState.h b/src/statemachine/StreamState.h index 720aaefdb..c4fbf2828 100644 --- a/src/statemachine/StreamState.h +++ b/src/statemachine/StreamState.h @@ -12,13 +12,13 @@ namespace reactivesocket { class RSocketStateMachine; -class Stats; +class RSocketStats; class StreamAutomatonBase; using StreamId = uint32_t; class StreamState { public: - explicit StreamState(Stats& stats); + explicit StreamState(RSocketStats& stats); ~StreamState(); void enqueueOutputPendingFrame(std::unique_ptr frame); @@ -31,7 +31,7 @@ class StreamState { /// Called to update stats when outputFrames_ is about to be cleared. void onClearFrames(); - Stats& stats_; + RSocketStats& stats_; /// Total data length of all IOBufs in outputFrames_. uint64_t dataLength_{0}; diff --git a/src/temporary_home/ServerConnectionAcceptor.cpp b/src/temporary_home/ServerConnectionAcceptor.cpp index 883f6cfd4..5d3c3ecd6 100644 --- a/src/temporary_home/ServerConnectionAcceptor.cpp +++ b/src/temporary_home/ServerConnectionAcceptor.cpp @@ -7,7 +7,7 @@ #include "src/framing/FrameProcessor.h" #include "src/framing/FrameSerializer.h" #include "src/framing/FrameTransport.h" -#include "Stats.h" +#include "src/RSocketStats.h" #include diff --git a/src/temporary_home/ServerConnectionAcceptor.h b/src/temporary_home/ServerConnectionAcceptor.h index ca734fff1..3a6c9ca25 100644 --- a/src/temporary_home/ServerConnectionAcceptor.h +++ b/src/temporary_home/ServerConnectionAcceptor.h @@ -19,7 +19,7 @@ namespace reactivesocket { class DuplexConnection; class FrameSerializer; class FrameTransport; -class Stats; +class RSocketStats; class OneFrameProcessor; class ConnectionHandler { diff --git a/src/transports/tcp/TcpConnectionFactory.cpp b/src/transports/tcp/TcpConnectionFactory.cpp index 49c75838f..e6a8e2fbb 100644 --- a/src/transports/tcp/TcpConnectionFactory.cpp +++ b/src/transports/tcp/TcpConnectionFactory.cpp @@ -45,7 +45,7 @@ class ConnectCallback : public folly::AsyncSocket::ConnectCallback { VLOG(4) << "connectSuccess() on " << address_; auto connection = std::make_unique( - std::move(socket_), *evb, Stats::noop()); + std::move(socket_), *evb, RSocketStats::noop()); auto framedConnection = std::make_unique(std::move(connection), *evb); diff --git a/src/transports/tcp/TcpDuplexConnection.cpp b/src/transports/tcp/TcpDuplexConnection.cpp index bfd2d471f..44010605c 100644 --- a/src/transports/tcp/TcpDuplexConnection.cpp +++ b/src/transports/tcp/TcpDuplexConnection.cpp @@ -17,7 +17,7 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, explicit TcpReaderWriter( folly::AsyncSocket::UniquePtr&& socket, folly::Executor& executor, - std::shared_ptr stats) + std::shared_ptr stats) : ExecutorBase(executor), stats_(std::move(stats)), socket_(std::move(socket)) {} @@ -36,7 +36,7 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, socket_->setReadCB(this); } - const std::shared_ptr stats_; + const std::shared_ptr stats_; private: void onSubscribeImpl( @@ -132,7 +132,7 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, TcpDuplexConnection::TcpDuplexConnection( folly::AsyncSocket::UniquePtr&& socket, folly::Executor& executor, - std::shared_ptr stats) + std::shared_ptr stats) : tcpReaderWriter_(std::make_shared( std::move(socket), executor, diff --git a/src/transports/tcp/TcpDuplexConnection.h b/src/transports/tcp/TcpDuplexConnection.h index 339ccb63c..d0628803a 100644 --- a/src/transports/tcp/TcpDuplexConnection.h +++ b/src/transports/tcp/TcpDuplexConnection.h @@ -3,7 +3,7 @@ #pragma once #include -#include +#include #include "src/DuplexConnection.h" #include "src/internal/ReactiveStreamsCompat.h" @@ -16,7 +16,7 @@ class TcpDuplexConnection : public DuplexConnection { explicit TcpDuplexConnection( folly::AsyncSocket::UniquePtr&& socket, folly::Executor& executor, - std::shared_ptr stats = Stats::noop()); + std::shared_ptr stats = RSocketStats::noop()); ~TcpDuplexConnection(); std::shared_ptr>> getOutput() diff --git a/tck-test/server.cpp b/tck-test/server.cpp index d0383ffad..8452dfbae 100644 --- a/tck-test/server.cpp +++ b/tck-test/server.cpp @@ -104,12 +104,12 @@ class Callback : public AsyncServerSocket::AcceptCallback { auto socket = folly::AsyncSocket::UniquePtr(new AsyncSocket(&eventBase_, fd)); - std::shared_ptr stats; + std::shared_ptr stats; if (FLAGS_enable_stats_printer) { stats.reset(new reactivesocket::StatsPrinter()); } else { - stats = Stats::noop(); + stats = RSocketStats::noop(); } std::unique_ptr connection = diff --git a/test/deprecated/ReactiveSocket.cpp b/test/deprecated/ReactiveSocket.cpp index e7ccc6b59..2cec90b95 100644 --- a/test/deprecated/ReactiveSocket.cpp +++ b/test/deprecated/ReactiveSocket.cpp @@ -26,7 +26,7 @@ ReactiveSocket::~ReactiveSocket() { ReactiveSocket::ReactiveSocket( ReactiveSocketMode mode, std::shared_ptr handler, - std::shared_ptr stats, + std::shared_ptr stats, std::unique_ptr keepaliveTimer, folly::Executor& executor) : connection_(std::make_shared( @@ -46,7 +46,7 @@ ReactiveSocket::fromClientConnection( std::unique_ptr connection, std::unique_ptr handler, SetupParameters setupPayload, - std::shared_ptr stats, + std::shared_ptr stats, std::unique_ptr keepaliveTimer) { auto socket = disconnectedClient( executor, @@ -64,7 +64,7 @@ std::unique_ptr ReactiveSocket::disconnectedClient( folly::Executor& executor, std::unique_ptr handler, - std::shared_ptr stats, + std::shared_ptr stats, std::unique_ptr keepaliveTimer, ProtocolVersion protocolVersion) { std::unique_ptr socket(new ReactiveSocket( @@ -85,7 +85,7 @@ ReactiveSocket::fromServerConnection( folly::Executor& executor, std::unique_ptr connection, std::unique_ptr handler, - std::shared_ptr stats, + std::shared_ptr stats, const RSocketParameters& RSocketParameters) { // TODO: isResumable should come as a flag on Setup frame and it should be // exposed to the application code. We should then remove this parameter @@ -105,7 +105,7 @@ std::unique_ptr ReactiveSocket::disconnectedServer( folly::Executor& executor, std::shared_ptr handler, - std::shared_ptr stats, + std::shared_ptr stats, ProtocolVersion protocolVersion) { std::unique_ptr socket(new ReactiveSocket( ReactiveSocketMode::SERVER, diff --git a/test/deprecated/ReactiveSocket.h b/test/deprecated/ReactiveSocket.h index 1c01e93a6..3a6caeefa 100644 --- a/test/deprecated/ReactiveSocket.h +++ b/test/deprecated/ReactiveSocket.h @@ -6,7 +6,7 @@ #include "src/internal/Common.h" #include "src/RSocketParameters.h" #include "src/Payload.h" -#include "src/temporary_home/Stats.h" +#include "src/RSocketStats.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" @@ -39,14 +39,14 @@ class ReactiveSocket { std::unique_ptr connection, std::unique_ptr handler, SetupParameters setupPayload = SetupParameters(), - std::shared_ptr stats = Stats::noop(), + std::shared_ptr stats = RSocketStats::noop(), std::unique_ptr keepaliveTimer = std::unique_ptr(nullptr)); static std::unique_ptr disconnectedClient( folly::Executor& executor, std::unique_ptr handler, - std::shared_ptr stats = Stats::noop(), + std::shared_ptr stats = RSocketStats::noop(), std::unique_ptr keepaliveTimer = std::unique_ptr(nullptr), ProtocolVersion protocolVersion = ProtocolVersion::Unknown); @@ -55,14 +55,14 @@ class ReactiveSocket { folly::Executor& executor, std::unique_ptr connection, std::unique_ptr handler, - std::shared_ptr stats = Stats::noop(), + std::shared_ptr stats = RSocketStats::noop(), const RSocketParameters& socketParameters = RSocketParameters(/*resumable=*/false, ProtocolVersion::Unknown)); static std::unique_ptr disconnectedServer( folly::Executor& executor, std::shared_ptr handler, - std::shared_ptr stats = Stats::noop(), + std::shared_ptr stats = RSocketStats::noop(), ProtocolVersion protocolVersion = ProtocolVersion::Unknown); yarpl::Reference> requestChannel( @@ -119,7 +119,7 @@ class ReactiveSocket { ReactiveSocket( ReactiveSocketMode mode, std::shared_ptr handler, - std::shared_ptr stats, + std::shared_ptr stats, std::unique_ptr keepaliveTimer, folly::Executor& executor); diff --git a/test/deprecated/ReactiveSocketConcurrencyTest.cpp b/test/deprecated/ReactiveSocketConcurrencyTest.cpp index 1bbb2a910..3feaea804 100644 --- a/test/deprecated/ReactiveSocketConcurrencyTest.cpp +++ b/test/deprecated/ReactiveSocketConcurrencyTest.cpp @@ -42,7 +42,7 @@ class ClientSideConcurrencyTest : public testing::Test { // requests. std::move(requestHandler), SetupParameters("", "", Payload()), - Stats::noop(), + RSocketStats::noop(), nullptr); }); @@ -265,7 +265,7 @@ class ServerSideConcurrencyTest : public testing::Test { *thread2.getEventBase(), std::move(serverConn), std::move(serverHandler), - Stats::noop(), + RSocketStats::noop(), RSocketParameters(false, ProtocolVersion::Unknown)); }); @@ -524,7 +524,7 @@ class InitialRequestNDeliveredTest : public testing::Test { std::make_unique( std::move(serverSocketConnection), inlineExecutor()), std::move(serverHandler), - Stats::noop(), + RSocketStats::noop(), RSocketParameters(false, ProtocolVersion::Unknown)); Frame_SETUP frameSetup( diff --git a/test/deprecated/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp index 6a21ea313..f995a81d6 100644 --- a/test/deprecated/ReactiveSocketTest.cpp +++ b/test/deprecated/ReactiveSocketTest.cpp @@ -1396,7 +1396,7 @@ class ReactiveSocketRegressionTest : public Test { defaultExecutor(), std::move(connectionPtr), std::move(requestHandlerPtr_), - Stats::noop(), + RSocketStats::noop(), RSocketParameters(false, FrameSerializer::getCurrentProtocolVersion())); } diff --git a/test/integration/ClientUtils.h b/test/integration/ClientUtils.h index 3582bc35d..240b29164 100644 --- a/test/integration/ClientUtils.h +++ b/test/integration/ClientUtils.h @@ -104,7 +104,7 @@ std::shared_ptr getFrameTransport( LOG(INFO) << "Attempting connection to " << addr.describe(); std::unique_ptr connection = std::make_unique( - std::move(socket), inlineExecutor(), Stats::noop()); + std::move(socket), inlineExecutor(), RSocketStats::noop()); std::unique_ptr framedConnection = std::make_unique( std::move(connection), *eventBase); @@ -119,7 +119,7 @@ std::unique_ptr getRSocket(folly::EventBase* eventBase) { rsocket = ReactiveSocket::disconnectedClient( *eventBase, std::move(requestHandler), - Stats::noop(), + RSocketStats::noop(), std::make_unique( *eventBase, std::chrono::seconds(10))); rsocket->onConnected([]() { LOG(INFO) << "ClientSocket connected"; }); diff --git a/test/integration/ServerFixture.cpp b/test/integration/ServerFixture.cpp index c44b33b58..10a9f78f7 100644 --- a/test/integration/ServerFixture.cpp +++ b/test/integration/ServerFixture.cpp @@ -121,7 +121,7 @@ class MyConnectionHandler : public ConnectionHandler { std::unique_ptr requestHandler = std::make_unique(); std::unique_ptr rs = ReactiveSocket::disconnectedServer( - eventBase_, std::move(requestHandler), Stats::noop()); + eventBase_, std::move(requestHandler), RSocketStats::noop()); rs->onConnected([]() { LOG(INFO) << "ServerSocket Connected"; }); rs->onDisconnected([rs = rs.get()](const folly::exception_wrapper& ex) { @@ -155,7 +155,7 @@ class MyConnectionHandler : public ConnectionHandler { private: EventBase& eventBase_; - std::shared_ptr stats_; + std::shared_ptr stats_; }; class MyAcceptCallback : public AsyncServerSocket::AcceptCallback { @@ -172,7 +172,7 @@ class MyAcceptCallback : public AsyncServerSocket::AcceptCallback { auto socket = folly::AsyncSocket::UniquePtr(new AsyncSocket(&eventBase_, fd)); auto connection = std::make_unique( - std::move(socket), inlineExecutor(), Stats::noop()); + std::move(socket), inlineExecutor(), RSocketStats::noop()); auto framedConnection = std::make_unique( std::move(connection), eventBase_); connectionAcceptor_.accept(std::move(framedConnection), connectionHandler_); diff --git a/test/resumption/ResumeCacheTest.cpp b/test/resumption/ResumeCacheTest.cpp index e43667df2..24a942a2b 100644 --- a/test/resumption/ResumeCacheTest.cpp +++ b/test/resumption/ResumeCacheTest.cpp @@ -8,7 +8,7 @@ #include "src/framing/Frame.h" #include "src/framing/FrameTransport.h" #include "src/internal/ResumeCache.h" -#include "src/temporary_home/Stats.h" +#include "src/RSocketStats.h" #include "src/framing/FrameSerializer_v0_1.h" #include "test/test_utils/InlineConnection.h" #include "test/test_utils/MockStats.h" @@ -34,7 +34,7 @@ class ResumeCacheTest : public Test { }; TEST_F(ResumeCacheTest, EmptyCache) { - ResumeCache cache(Stats::noop()); + ResumeCache cache(RSocketStats::noop()); FrameTransportMock transport; EXPECT_CALL(transport, outputFrameOrEnqueue_(_)).Times(0); @@ -55,7 +55,7 @@ TEST_F(ResumeCacheTest, EmptyCache) { } TEST_F(ResumeCacheTest, OneFrame) { - ResumeCache cache(Stats::noop()); + ResumeCache cache(RSocketStats::noop()); FrameTransportMock transport; auto frame1 = frameSerializer_->serializeOut(Frame_CANCEL(0)); @@ -97,7 +97,7 @@ TEST_F(ResumeCacheTest, OneFrame) { } TEST_F(ResumeCacheTest, TwoFrames) { - ResumeCache cache(Stats::noop()); + ResumeCache cache(RSocketStats::noop()); FrameTransportMock transport; auto frame1 = frameSerializer_->serializeOut(Frame_CANCEL(0)); @@ -171,7 +171,7 @@ TEST_F(ResumeCacheTest, EvictFIFO) { const auto frameSize = frame->computeChainDataLength(); // construct cache with capacity of 2 frameSize - ResumeCache cache(Stats::noop(), frameSize * 2); + ResumeCache cache(RSocketStats::noop(), frameSize * 2); cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); @@ -246,7 +246,7 @@ TEST_F(ResumeCacheTest, PositionSmallFrame) { const auto frameSize = frame->computeChainDataLength(); // Cache is larger than frame - ResumeCache cache(Stats::noop(), frameSize * 2); + ResumeCache cache(RSocketStats::noop(), frameSize * 2); cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); EXPECT_EQ( frame->computeChainDataLength(), static_cast(cache.position())); @@ -257,7 +257,7 @@ TEST_F(ResumeCacheTest, PositionLargeFrame) { const auto frameSize = frame->computeChainDataLength(); // Cache is smaller than frame - ResumeCache cache(Stats::noop(), frameSize / 2); + ResumeCache cache(RSocketStats::noop(), frameSize / 2); cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); EXPECT_EQ( frame->computeChainDataLength(), static_cast(cache.position())); diff --git a/test/resumption/TcpResumeServer.cpp b/test/resumption/TcpResumeServer.cpp index 5641d9da8..71fc6839e 100644 --- a/test/resumption/TcpResumeServer.cpp +++ b/test/resumption/TcpResumeServer.cpp @@ -136,7 +136,7 @@ class ServerRequestHandler : public DefaultRequestHandler { class MyConnectionHandler : public ConnectionHandler { public: - MyConnectionHandler(EventBase& eventBase, std::shared_ptr stats) + MyConnectionHandler(EventBase& eventBase, std::shared_ptr stats) : eventBase_(eventBase), stats_(std::move(stats)) {} void setupNewSocket( @@ -202,12 +202,12 @@ class MyConnectionHandler : public ConnectionHandler { private: EventBase& eventBase_; - std::shared_ptr stats_; + std::shared_ptr stats_; }; class Callback : public AsyncServerSocket::AcceptCallback { public: - Callback(EventBase& eventBase, std::shared_ptr stats) + Callback(EventBase& eventBase, std::shared_ptr stats) : eventBase_(eventBase), stats_(stats), connectionHandler_( @@ -243,7 +243,7 @@ class Callback : public AsyncServerSocket::AcceptCallback { // only one for demo purposes. Should be token dependent. std::shared_ptr streamState_; EventBase& eventBase_; - std::shared_ptr stats_; + std::shared_ptr stats_; bool shuttingDown{false}; std::shared_ptr connectionHandler_; ServerConnectionAcceptor connectionAcceptor_; diff --git a/test/statemachine/RSocketStateMachineTest.cpp b/test/statemachine/RSocketStateMachineTest.cpp index c5d863de2..b19722d3b 100644 --- a/test/statemachine/RSocketStateMachineTest.cpp +++ b/test/statemachine/RSocketStateMachineTest.cpp @@ -74,7 +74,7 @@ TEST(ConnectionAutomatonTest, InvalidFrameHeader) { connectionAutomaton = std::make_shared( defaultExecutor(), std::make_shared(), - Stats::noop(), + RSocketStats::noop(), nullptr, ReactiveSocketMode::CLIENT); connectionAutomaton->connect( @@ -149,7 +149,7 @@ static void terminateTest( connectionAutomaton = std::make_shared( defaultExecutor(), std::make_shared(), - Stats::noop(), + RSocketStats::noop(), nullptr, ReactiveSocketMode::CLIENT); connectionAutomaton->connect( @@ -248,7 +248,7 @@ TEST(ConnectionAutomatonTest, RefuseFrame) { connectionAutomaton = std::make_shared( defaultExecutor(), std::make_shared(), - Stats::noop(), + RSocketStats::noop(), nullptr, ReactiveSocketMode::CLIENT); connectionAutomaton->connect( diff --git a/test/test_utils/MockStats.h b/test/test_utils/MockStats.h index f8a6b5424..af3bb55f6 100644 --- a/test/test_utils/MockStats.h +++ b/test/test_utils/MockStats.h @@ -5,14 +5,14 @@ #include #include -#include +#include #include #include "src/Payload.h" namespace reactivesocket { -class MockStats : public Stats { +class MockStats : public RSocketStats { public: MOCK_METHOD0(socketCreated, void()); MOCK_METHOD1(socketClosed, void(StreamCompletionSignal)); diff --git a/test/test_utils/StatsPrinter.h b/test/test_utils/StatsPrinter.h index b5b46b5b0..426ebb567 100644 --- a/test/test_utils/StatsPrinter.h +++ b/test/test_utils/StatsPrinter.h @@ -3,10 +3,10 @@ #pragma once #include -#include +#include namespace reactivesocket { -class StatsPrinter : public Stats { +class StatsPrinter : public RSocketStats { public: void socketCreated() override; void socketClosed(StreamCompletionSignal signal) override; From 93f7577e1f227e06dc638f2a4a8b1bdde3946a15 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 06:30:08 -0700 Subject: [PATCH 13/31] state machne naming --- CMakeLists.txt | 4 +- src/internal/Common.h | 2 +- src/statemachine/ChannelRequester.h | 2 +- src/statemachine/ChannelResponder.h | 2 +- src/statemachine/ConsumerBase.h | 6 +-- src/statemachine/RSocketStateMachine.cpp | 36 +++++++++--------- src/statemachine/RSocketStateMachine.h | 18 ++++----- src/statemachine/RequestResponseRequester.h | 8 ++-- src/statemachine/RequestResponseResponder.cpp | 4 +- src/statemachine/RequestResponseResponder.h | 8 ++-- src/statemachine/StreamRequester.h | 2 +- src/statemachine/StreamResponder.cpp | 4 +- src/statemachine/StreamResponder.h | 8 ++-- src/statemachine/StreamState.h | 6 +-- ...tonBase.cpp => StreamStateMachineBase.cpp} | 28 +++++++------- ...tomatonBase.h => StreamStateMachineBase.h} | 12 +++--- src/statemachine/StreamsFactory.cpp | 38 +++++++++---------- src/statemachine/StreamsFactory.h | 2 +- 18 files changed, 95 insertions(+), 95 deletions(-) rename src/statemachine/{StreamAutomatonBase.cpp => StreamStateMachineBase.cpp} (66%) rename src/statemachine/{StreamAutomatonBase.h => StreamStateMachineBase.h} (87%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e0dd7fca..21b04be46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,8 +160,8 @@ add_library( src/statemachine/RequestResponseRequester.h src/statemachine/RequestResponseResponder.cpp src/statemachine/RequestResponseResponder.h - src/statemachine/StreamAutomatonBase.cpp - src/statemachine/StreamAutomatonBase.h + src/statemachine/StreamStateMachineBase.cpp + src/statemachine/StreamStateMachineBase.h src/statemachine/StreamRequester.cpp src/statemachine/StreamRequester.h src/statemachine/StreamResponder.cpp diff --git a/src/internal/Common.h b/src/internal/Common.h index 1c35aa1ee..06d92879c 100644 --- a/src/internal/Common.h +++ b/src/internal/Common.h @@ -41,7 +41,7 @@ constexpr const ResumePosition kUnspecifiedResumePosition = -1; std::string hexDump(folly::StringPiece s); -/// Indicates the reason why the stream automaton received a terminal signal +/// Indicates the reason why the stream stateMachine received a terminal signal /// from the connection. enum class StreamCompletionSignal { CANCEL, diff --git a/src/statemachine/ChannelRequester.h b/src/statemachine/ChannelRequester.h index 1c8c9d553..0ab7ad03d 100644 --- a/src/statemachine/ChannelRequester.h +++ b/src/statemachine/ChannelRequester.h @@ -16,7 +16,7 @@ class exception_wrapper; namespace reactivesocket { -/// Implementation of stream automaton that represents a Channel requester. +/// Implementation of stream stateMachine that represents a Channel requester. class ChannelRequester : public ConsumerBase, public PublisherBase, public yarpl::flowable::Subscriber { diff --git a/src/statemachine/ChannelResponder.h b/src/statemachine/ChannelResponder.h index 55a4854e1..d83c208b6 100644 --- a/src/statemachine/ChannelResponder.h +++ b/src/statemachine/ChannelResponder.h @@ -11,7 +11,7 @@ namespace reactivesocket { -/// Implementation of stream automaton that represents a Channel responder. +/// Implementation of stream stateMachine that represents a Channel responder. class ChannelResponder : public ConsumerBase, public PublisherBase, public yarpl::flowable::Subscriber { diff --git a/src/statemachine/ConsumerBase.h b/src/statemachine/ConsumerBase.h index a2cf82607..dc761859d 100644 --- a/src/statemachine/ConsumerBase.h +++ b/src/statemachine/ConsumerBase.h @@ -10,7 +10,7 @@ #include "RSocketStateMachine.h" #include "src/temporary_home/NullRequestHandler.h" #include "src/Payload.h" -#include "src/statemachine/StreamAutomatonBase.h" +#include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/flowable/Subscription.h" namespace reactivesocket { @@ -18,8 +18,8 @@ namespace reactivesocket { enum class StreamCompletionSignal; /// A class that represents a flow-control-aware consumer of data. -class ConsumerBase : public StreamAutomatonBase, public yarpl::flowable::Subscription { - using Base = StreamAutomatonBase; +class ConsumerBase : public StreamStateMachineBase, public yarpl::flowable::Subscription { + using Base = StreamStateMachineBase; public: using Base::Base; diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index 161594181..1a39b0724 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -16,7 +16,7 @@ #include "src/RSocketStats.h" #include "StreamState.h" #include "src/statemachine/ChannelResponder.h" -#include "src/statemachine/StreamAutomatonBase.h" +#include "src/statemachine/StreamStateMachineBase.h" namespace reactivesocket { @@ -285,9 +285,9 @@ void RSocketStateMachine::reconnect( void RSocketStateMachine::addStream( StreamId streamId, - yarpl::Reference automaton) { + yarpl::Reference stateMachine) { debugCheckCorrectExecutor(); - auto result = streamState_->streams_.emplace(streamId, std::move(automaton)); + auto result = streamState_->streams_.emplace(streamId, std::move(stateMachine)); (void)result; assert(result.second); } @@ -318,10 +318,10 @@ bool RSocketStateMachine::endStreamInternal( // Unsubscribe handshake initiated by the connection, we're done. return false; } - // Remove from the map before notifying the automaton. - auto automaton = std::move(it->second); + // Remove from the map before notifying the stateMachine. + auto stateMachine = std::move(it->second); streamState_->streams_.erase(it); - automaton->endStream(signal); + stateMachine->endStream(signal); return true; } @@ -572,7 +572,7 @@ void RSocketStateMachine::handleStreamFrame( handleUnknownStream(streamId, frameType, std::move(serializedFrame)); return; } - auto &automaton = it->second; + auto &stateMachine = it->second; switch (frameType) { case FrameType::REQUEST_N: { @@ -581,11 +581,11 @@ void RSocketStateMachine::handleStreamFrame( std::move(serializedFrame))) { return; } - automaton->handleRequestN(frameRequestN.requestN_); + stateMachine->handleRequestN(frameRequestN.requestN_); break; } case FrameType::CANCEL: { - automaton->handleCancel(); + stateMachine->handleCancel(); break; } case FrameType::PAYLOAD: { @@ -594,7 +594,7 @@ void RSocketStateMachine::handleStreamFrame( std::move(serializedFrame))) { return; } - automaton->handlePayload(std::move(framePayload.payload_), + stateMachine->handlePayload(std::move(framePayload.payload_), framePayload.header_.flagsComplete(), framePayload.header_.flagsNext()); break; @@ -605,7 +605,7 @@ void RSocketStateMachine::handleStreamFrame( std::move(serializedFrame))) { return; } - automaton->handleError( + stateMachine->handleError( std::runtime_error(frameError.payload_.moveDataToString())); break; } @@ -649,11 +649,11 @@ void RSocketStateMachine::handleUnknownStream( if (!deserializeFrameOrError(frame, std::move(serializedFrame))) { return; } - auto automaton = streamsFactory_.createChannelResponder( + auto stateMachine = streamsFactory_.createChannelResponder( frame.requestN_, streamId); auto requestSink = requestHandler_->handleRequestChannel( - std::move(frame.payload_), streamId, automaton); - automaton->subscribe(requestSink); + std::move(frame.payload_), streamId, stateMachine); + stateMachine->subscribe(requestSink); break; } case FrameType::REQUEST_STREAM: { @@ -661,10 +661,10 @@ void RSocketStateMachine::handleUnknownStream( if (!deserializeFrameOrError(frame, std::move(serializedFrame))) { return; } - auto automaton = streamsFactory_.createStreamResponder( + auto stateMachine = streamsFactory_.createStreamResponder( frame.requestN_, streamId); requestHandler_->handleRequestStream( - std::move(frame.payload_), streamId, automaton); + std::move(frame.payload_), streamId, stateMachine); break; } case FrameType::REQUEST_RESPONSE: { @@ -672,10 +672,10 @@ void RSocketStateMachine::handleUnknownStream( if (!deserializeFrameOrError(frame, std::move(serializedFrame))) { return; } - auto automaton = + auto stateMachine = streamsFactory_.createRequestResponseResponder(streamId); requestHandler_->handleRequestResponse( - std::move(frame.payload_), streamId, automaton); + std::move(frame.payload_), streamId, stateMachine); break; } case FrameType::REQUEST_FNF: { diff --git a/src/statemachine/RSocketStateMachine.h b/src/statemachine/RSocketStateMachine.h index 5f2f2ee92..500160284 100644 --- a/src/statemachine/RSocketStateMachine.h +++ b/src/statemachine/RSocketStateMachine.h @@ -18,7 +18,7 @@ namespace reactivesocket { -class StreamAutomatonBase; +class StreamStateMachineBase; class ClientResumeStatusCallback; class RSocketStateMachine; class DuplexConnection; @@ -78,7 +78,7 @@ class RSocketStateMachine final bool sendingPendingFrames, ProtocolVersion protocolVersion); - /// Disconnects DuplexConnection from the automaton. + /// Disconnects DuplexConnection from the stateMachine. /// Existing streams will stay intact. void disconnect(folly::exception_wrapper ex); @@ -100,20 +100,20 @@ class RSocketStateMachine final /// A contract exposed to StreamAutomatonBase, modelled after Subscriber /// and Subscription contracts, while omitting flow control related signals. - /// Adds a stream automaton to the connection. + /// Adds a stream stateMachine to the connection. /// /// This signal corresponds to Subscriber::onSubscribe. /// - /// No frames will be issued as a result of this call. Stream automaton + /// No frames will be issued as a result of this call. Stream stateMachine /// must take care of writing appropriate frames to the connection, using /// ::writeFrame after calling this method. void addStream( StreamId streamId, - yarpl::Reference automaton); + yarpl::Reference stateMachine); /// Indicates that the stream should be removed from the connection. /// - /// No frames will be issued as a result of this call. Stream automaton + /// No frames will be issued as a result of this call. Stream stateMachine /// must take care of writing appropriate frames to the connection, using /// ::writeFrame, prior to calling this method. /// @@ -122,11 +122,11 @@ class RSocketStateMachine final /// Per ReactiveStreams specification: /// 1. no other signal can be delivered during or after this one, /// 2. "unsubscribe handshake" guarantees that the signal will be delivered - /// at least once, even if the automaton initiated stream closure, - /// 3. per "unsubscribe handshake", the automaton must deliver corresponding + /// at least once, even if the stateMachine initiated stream closure, + /// 3. per "unsubscribe handshake", the stateMachine must deliver corresponding /// terminal signal to the connection. /// - /// Additionally, in order to simplify implementation of stream automaton: + /// Additionally, in order to simplify implementation of stream stateMachine: /// 4. the signal bound with a particular StreamId is idempotent and may be /// delivered multiple times as long as the caller holds shared_ptr to /// ConnectionAutomaton. diff --git a/src/statemachine/RequestResponseRequester.h b/src/statemachine/RequestResponseRequester.h index 411278c42..e08b8509f 100644 --- a/src/statemachine/RequestResponseRequester.h +++ b/src/statemachine/RequestResponseRequester.h @@ -4,17 +4,17 @@ #include #include "src/Payload.h" -#include "src/statemachine/StreamAutomatonBase.h" +#include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/flowable/Subscription.h" #include "yarpl/flowable/Subscriber.h" namespace reactivesocket { -/// Implementation of stream automaton that represents a RequestResponse +/// Implementation of stream stateMachine that represents a RequestResponse /// requester -class RequestResponseRequester : public StreamAutomatonBase, +class RequestResponseRequester : public StreamStateMachineBase, public yarpl::flowable::Subscription { - using Base = StreamAutomatonBase; + using Base = StreamStateMachineBase; public: explicit RequestResponseRequester(const Parameters& params, Payload payload) diff --git a/src/statemachine/RequestResponseResponder.cpp b/src/statemachine/RequestResponseResponder.cpp index 0e0814009..08f9a73b3 100644 --- a/src/statemachine/RequestResponseResponder.cpp +++ b/src/statemachine/RequestResponseResponder.cpp @@ -10,7 +10,7 @@ using namespace yarpl::flowable; void RequestResponseResponder::onSubscribe( Reference subscription) noexcept { - if (StreamAutomatonBase::isTerminated()) { + if (StreamStateMachineBase::isTerminated()) { subscription->cancel(); return; } @@ -75,7 +75,7 @@ void RequestResponseResponder::endStream(StreamCompletionSignal signal) { break; } terminatePublisher(signal); - StreamAutomatonBase::endStream(signal); + StreamStateMachineBase::endStream(signal); } void RequestResponseResponder::handleCancel() { diff --git a/src/statemachine/RequestResponseResponder.h b/src/statemachine/RequestResponseResponder.h index cef5ec01d..1a2115d42 100644 --- a/src/statemachine/RequestResponseResponder.h +++ b/src/statemachine/RequestResponseResponder.h @@ -3,19 +3,19 @@ #pragma once #include "src/statemachine/PublisherBase.h" -#include "src/statemachine/StreamAutomatonBase.h" +#include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/flowable/Subscriber.h" namespace reactivesocket { -/// Implementation of stream automaton that represents a RequestResponse +/// Implementation of stream stateMachine that represents a RequestResponse /// responder -class RequestResponseResponder : public StreamAutomatonBase, +class RequestResponseResponder : public StreamStateMachineBase, public PublisherBase, public yarpl::flowable::Subscriber { public: explicit RequestResponseResponder(const Parameters& params) - : StreamAutomatonBase(params), + : StreamStateMachineBase(params), PublisherBase(1) {} private: diff --git a/src/statemachine/StreamRequester.h b/src/statemachine/StreamRequester.h index d700d7b6c..294872805 100644 --- a/src/statemachine/StreamRequester.h +++ b/src/statemachine/StreamRequester.h @@ -14,7 +14,7 @@ namespace reactivesocket { enum class StreamCompletionSignal; -/// Implementation of stream automaton that represents a Stream requester +/// Implementation of stream stateMachine that represents a Stream requester class StreamRequester : public ConsumerBase { using Base = ConsumerBase; diff --git a/src/statemachine/StreamResponder.cpp b/src/statemachine/StreamResponder.cpp index 1dcb75210..3d90125aa 100644 --- a/src/statemachine/StreamResponder.cpp +++ b/src/statemachine/StreamResponder.cpp @@ -10,7 +10,7 @@ using namespace yarpl::flowable; void StreamResponder::onSubscribe( Reference subscription) noexcept { - if (StreamAutomatonBase::isTerminated()) { + if (StreamStateMachineBase::isTerminated()) { subscription->cancel(); return; } @@ -72,7 +72,7 @@ void StreamResponder::endStream(StreamCompletionSignal signal) { break; } terminatePublisher(signal); - StreamAutomatonBase::endStream(signal); + StreamStateMachineBase::endStream(signal); } void StreamResponder::handleCancel() { diff --git a/src/statemachine/StreamResponder.h b/src/statemachine/StreamResponder.h index 4a02d2bb0..424ea6965 100644 --- a/src/statemachine/StreamResponder.h +++ b/src/statemachine/StreamResponder.h @@ -4,20 +4,20 @@ #include #include "src/statemachine/PublisherBase.h" -#include "src/statemachine/StreamAutomatonBase.h" +#include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/flowable/Subscriber.h" namespace reactivesocket { -/// Implementation of stream automaton that represents a Stream responder -class StreamResponder : public StreamAutomatonBase, +/// Implementation of stream stateMachine that represents a Stream responder +class StreamResponder : public StreamStateMachineBase, public PublisherBase, public yarpl::flowable::Subscriber { public: // initialization of the ExecutorBase will be ignored for any of the // derived classes explicit StreamResponder(uint32_t initialRequestN, const Parameters& params) - : StreamAutomatonBase(params), + : StreamStateMachineBase(params), PublisherBase(initialRequestN) {} protected: diff --git a/src/statemachine/StreamState.h b/src/statemachine/StreamState.h index c4fbf2828..f2287e1f3 100644 --- a/src/statemachine/StreamState.h +++ b/src/statemachine/StreamState.h @@ -6,14 +6,14 @@ #include #include #include -#include "src/statemachine/StreamAutomatonBase.h" +#include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/Refcounted.h" namespace reactivesocket { class RSocketStateMachine; class RSocketStats; -class StreamAutomatonBase; +class StreamStateMachineBase; using StreamId = uint32_t; class StreamState { @@ -25,7 +25,7 @@ class StreamState { std::deque> moveOutputPendingFrames(); - std::unordered_map> streams_; + std::unordered_map> streams_; private: /// Called to update stats when outputFrames_ is about to be cleared. diff --git a/src/statemachine/StreamAutomatonBase.cpp b/src/statemachine/StreamStateMachineBase.cpp similarity index 66% rename from src/statemachine/StreamAutomatonBase.cpp rename to src/statemachine/StreamStateMachineBase.cpp index 87d648c45..603d4faa8 100644 --- a/src/statemachine/StreamAutomatonBase.cpp +++ b/src/statemachine/StreamStateMachineBase.cpp @@ -1,35 +1,35 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "src/statemachine/StreamAutomatonBase.h" +#include "src/statemachine/StreamStateMachineBase.h" #include #include "RSocketStateMachine.h" #include "StreamsHandler.h" namespace reactivesocket { -void StreamAutomatonBase::handlePayload(Payload&& payload, +void StreamStateMachineBase::handlePayload(Payload&& payload, bool complete, bool flagsNext) { VLOG(4) << "Unexpected handlePayload"; } -void StreamAutomatonBase::handleRequestN(uint32_t n) { +void StreamStateMachineBase::handleRequestN(uint32_t n) { VLOG(4) << "Unexpected handleRequestN"; } -void StreamAutomatonBase::handleError(folly::exception_wrapper errorPayload) { +void StreamStateMachineBase::handleError(folly::exception_wrapper errorPayload) { VLOG(4) << "Unexpected handleError"; } -void StreamAutomatonBase::handleCancel() { +void StreamStateMachineBase::handleCancel() { VLOG(4) << "Unexpected handleCancel"; } -void StreamAutomatonBase::endStream(StreamCompletionSignal) { +void StreamStateMachineBase::endStream(StreamCompletionSignal) { isTerminated_ = true; } -void StreamAutomatonBase::newStream( +void StreamStateMachineBase::newStream( StreamType streamType, uint32_t initialRequestN, Payload payload, @@ -38,15 +38,15 @@ void StreamAutomatonBase::newStream( streamId_, streamType, initialRequestN, std::move(payload), completed); } -void StreamAutomatonBase::writePayload(Payload&& payload, bool complete) { +void StreamStateMachineBase::writePayload(Payload&& payload, bool complete) { writer_->writePayload(streamId_, std::move(payload), complete); } -void StreamAutomatonBase::writeRequestN(uint32_t n) { +void StreamStateMachineBase::writeRequestN(uint32_t n) { writer_->writeRequestN(streamId_, n); } -void StreamAutomatonBase::applicationError(std::string errorPayload) { +void StreamStateMachineBase::applicationError(std::string errorPayload) { // TODO: a bad frame for a stream should not bring down the whole socket // https://github.com/ReactiveSocket/reactivesocket-cpp/issues/311 writer_->writeCloseStream( @@ -56,7 +56,7 @@ void StreamAutomatonBase::applicationError(std::string errorPayload) { closeStream(StreamCompletionSignal::APPLICATION_ERROR); } -void StreamAutomatonBase::errorStream(std::string errorPayload) { +void StreamStateMachineBase::errorStream(std::string errorPayload) { writer_->writeCloseStream( streamId_, StreamCompletionSignal::ERROR, @@ -64,19 +64,19 @@ void StreamAutomatonBase::errorStream(std::string errorPayload) { closeStream(StreamCompletionSignal::ERROR); } -void StreamAutomatonBase::cancelStream() { +void StreamStateMachineBase::cancelStream() { writer_->writeCloseStream( streamId_, StreamCompletionSignal::CANCEL, Payload()); closeStream(StreamCompletionSignal::CANCEL); } -void StreamAutomatonBase::completeStream() { +void StreamStateMachineBase::completeStream() { writer_->writeCloseStream( streamId_, StreamCompletionSignal::COMPLETE, Payload()); closeStream(StreamCompletionSignal::COMPLETE); } -void StreamAutomatonBase::closeStream(StreamCompletionSignal signal) { +void StreamStateMachineBase::closeStream(StreamCompletionSignal signal) { writer_->onStreamClosed(streamId_, signal); // TODO: set writer_ to nullptr } diff --git a/src/statemachine/StreamAutomatonBase.h b/src/statemachine/StreamStateMachineBase.h similarity index 87% rename from src/statemachine/StreamAutomatonBase.h rename to src/statemachine/StreamStateMachineBase.h index 57e331811..cf51455ee 100644 --- a/src/statemachine/StreamAutomatonBase.h +++ b/src/statemachine/StreamStateMachineBase.h @@ -20,11 +20,11 @@ class RequestHandler; struct Payload; /// -/// A common base class of all automatons. +/// A common base class of all state machines. /// /// The instances might be destroyed on a different thread than they were /// created. -class StreamAutomatonBase : public virtual yarpl::Refcounted { +class StreamStateMachineBase : public virtual yarpl::Refcounted { public: /// A dependent type which encapsulates all parameters needed to initialise /// any of the classes and the final automata. Must be the only argument to @@ -38,9 +38,9 @@ class StreamAutomatonBase : public virtual yarpl::Refcounted { StreamId streamId{0}; }; - explicit StreamAutomatonBase(Parameters params) + explicit StreamStateMachineBase(Parameters params) : writer_(std::move(params.writer)), streamId_(params.streamId) {} - virtual ~StreamAutomatonBase() = default; + virtual ~StreamStateMachineBase() = default; virtual void handlePayload(Payload&& payload, bool complete, bool flagsNext); virtual void handleRequestN(uint32_t n); @@ -54,8 +54,8 @@ class StreamAutomatonBase : public virtual yarpl::Refcounted { /// Per ReactiveStreams specification: /// 1. no other signal can be delivered during or after this one, /// 2. "unsubscribe handshake" guarantees that the signal will be delivered - /// exactly once, even if the automaton initiated stream closure, - /// 3. per "unsubscribe handshake", the automaton must deliver corresponding + /// exactly once, even if the state machine initiated stream closure, + /// 3. per "unsubscribe handshake", the state machine must deliver corresponding /// terminal signal to the connection. virtual void endStream(StreamCompletionSignal signal); /// @} diff --git a/src/statemachine/StreamsFactory.cpp b/src/statemachine/StreamsFactory.cpp index 275e1d458..4a66d08ba 100644 --- a/src/statemachine/StreamsFactory.cpp +++ b/src/statemachine/StreamsFactory.cpp @@ -27,30 +27,30 @@ StreamsFactory::StreamsFactory( Reference> StreamsFactory::createChannelRequester( Reference> responseSink) { ChannelRequester::Parameters params(connection_.shared_from_this(), getNextStreamId()); - auto automaton = yarpl::make_ref(params); - connection_.addStream(params.streamId, automaton); - automaton->subscribe(std::move(responseSink)); - return automaton; + auto stateMachine = yarpl::make_ref(params); + connection_.addStream(params.streamId, stateMachine); + stateMachine->subscribe(std::move(responseSink)); + return stateMachine; } void StreamsFactory::createStreamRequester( Payload request, Reference> responseSink) { StreamRequester::Parameters params(connection_.shared_from_this(), getNextStreamId()); - auto automaton = + auto stateMachine = yarpl::make_ref(params, std::move(request)); - connection_.addStream(params.streamId, automaton); - automaton->subscribe(std::move(responseSink)); + connection_.addStream(params.streamId, stateMachine); + stateMachine->subscribe(std::move(responseSink)); } void StreamsFactory::createRequestResponseRequester( Payload payload, Reference> responseSink) { RequestResponseRequester::Parameters params(connection_.shared_from_this(), getNextStreamId()); - auto automaton = + auto stateMachine = yarpl::make_ref(params, std::move(payload)); - connection_.addStream(params.streamId, automaton); - automaton->subscribe(std::move(responseSink)); + connection_.addStream(params.streamId, stateMachine); + stateMachine->subscribe(std::move(responseSink)); } StreamId StreamsFactory::getNextStreamId() { @@ -81,27 +81,27 @@ Reference StreamsFactory::createChannelResponder( uint32_t initialRequestN, StreamId streamId) { ChannelResponder::Parameters params(connection_.shared_from_this(), streamId); - auto automaton = yarpl::make_ref(initialRequestN, params); - connection_.addStream(streamId, automaton); - return automaton; + auto stateMachine = yarpl::make_ref(initialRequestN, params); + connection_.addStream(streamId, stateMachine); + return stateMachine; } Reference> StreamsFactory::createStreamResponder( uint32_t initialRequestN, StreamId streamId) { StreamResponder::Parameters params(connection_.shared_from_this(), streamId); - auto automaton = yarpl::make_ref(initialRequestN, params); - connection_.addStream(streamId, automaton); - return automaton; + auto stateMachine = yarpl::make_ref(initialRequestN, params); + connection_.addStream(streamId, stateMachine); + return stateMachine; } Reference> StreamsFactory::createRequestResponseResponder( StreamId streamId) { RequestResponseResponder::Parameters params(connection_.shared_from_this(), streamId); - auto automaton = yarpl::make_ref(params); - connection_.addStream(streamId, automaton); - return automaton; + auto stateMachine = yarpl::make_ref(params); + connection_.addStream(streamId, stateMachine); + return stateMachine; } } // reactivesocket diff --git a/src/statemachine/StreamsFactory.h b/src/statemachine/StreamsFactory.h index dd8d158b1..a2b6339d4 100644 --- a/src/statemachine/StreamsFactory.h +++ b/src/statemachine/StreamsFactory.h @@ -31,7 +31,7 @@ class StreamsFactory { Payload payload, yarpl::Reference> responseSink); - // TODO: the return type should not be the automaton type, but something + // TODO: the return type should not be the stateMachine type, but something // generic yarpl::Reference createChannelResponder( uint32_t initialRequestN, From 948764f3879feda665e957dd1894951800d52047 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 06:51:40 -0700 Subject: [PATCH 14/31] reactivesocket -> rsocket --- CMakeLists.txt | 4 +- benchmarks/RequestResponseLatency.cpp | 9 ++-- benchmarks/RequestResponseThroughput.cpp | 9 ++-- benchmarks/StreamThroughput.cpp | 11 ++--- .../ChannelHelloWorld_Client.cpp | 1 - .../ChannelHelloWorld_Server.cpp | 9 ++-- .../ConditionalRequestHandling_Client.cpp | 1 - .../ConditionalRequestHandling_Server.cpp | 1 - .../JsonRequestHandler.cpp | 3 +- .../JsonRequestHandler.h | 6 +-- .../TextRequestHandler.cpp | 3 +- .../TextRequestHandler.h | 6 +-- .../FireAndForgetHelloWorld_Client.cpp | 1 - .../FireAndForgetHelloWorld_Server.cpp | 1 - .../RequestResponseHelloWorld_Client.cpp | 1 - .../RequestResponseHelloWorld_Server.cpp | 1 - .../StreamHelloWorld_Client.cpp | 1 - .../StreamHelloWorld_Server.cpp | 7 ++- .../StreamObservableToFlowable_Client.cpp | 1 - .../StreamObservableToFlowable_Server.cpp | 3 +- examples/util/ExampleSubscriber.cpp | 2 +- examples/util/ExampleSubscriber.h | 4 +- src/ConnectionAcceptor.h | 2 +- src/ConnectionFactory.h | 2 +- src/ConnectionSetupRequest.cpp | 2 +- src/ConnectionSetupRequest.h | 8 ++-- src/DuplexConnection.h | 2 +- src/Payload.cpp | 2 +- src/Payload.h | 2 +- src/RSocketClient.cpp | 2 +- src/RSocketConnectionHandler.cpp | 4 +- src/RSocketConnectionHandler.h | 14 +++--- src/RSocketParameters.cpp | 2 +- src/RSocketParameters.h | 2 +- src/RSocketRequester.cpp | 10 ++-- src/RSocketRequester.h | 20 ++++---- src/RSocketResponder.h | 30 ++++++------ src/RSocketServer.cpp | 8 ++-- src/RSocketServer.h | 8 ++-- src/RSocketStats.cpp | 6 +-- src/RSocketStats.h | 2 +- src/framing/Frame.cpp | 2 +- src/framing/Frame.h | 2 +- src/framing/FrameProcessor.h | 2 +- src/framing/FrameSerializer.cpp | 2 +- src/framing/FrameSerializer.h | 2 +- src/framing/FrameSerializer_v0.cpp | 4 +- src/framing/FrameSerializer_v0.h | 2 +- src/framing/FrameSerializer_v0_1.cpp | 2 +- src/framing/FrameSerializer_v0_1.h | 2 +- src/framing/FrameSerializer_v1_0.cpp | 4 +- src/framing/FrameSerializer_v1_0.h | 2 +- src/framing/FrameTransport.cpp | 2 +- src/framing/FrameTransport.h | 4 +- src/framing/FramedDuplexConnection.cpp | 2 +- src/framing/FramedDuplexConnection.h | 2 +- src/framing/FramedReader.cpp | 2 +- src/framing/FramedReader.h | 6 +-- src/framing/FramedWriter.cpp | 2 +- src/framing/FramedWriter.h | 8 ++-- src/internal/AllowanceSemaphore.h | 2 +- src/internal/ClientResumeStatusCallback.h | 2 +- src/internal/Common.cpp | 2 +- src/internal/Common.h | 2 +- src/internal/EnableSharedFromThis.h | 2 +- src/internal/FollyKeepaliveTimer.cpp | 2 +- src/internal/FollyKeepaliveTimer.h | 2 +- src/internal/ReactiveStreamsCompat.h | 4 +- src/internal/ResumeCache.cpp | 4 +- src/internal/ResumeCache.h | 2 +- src/internal/StackTraceUtils.h | 2 +- src/statemachine/ChannelRequester.cpp | 2 +- src/statemachine/ChannelRequester.h | 2 +- src/statemachine/ChannelResponder.cpp | 2 +- src/statemachine/ChannelResponder.h | 2 +- src/statemachine/ConsumerBase.cpp | 2 +- src/statemachine/ConsumerBase.h | 2 +- src/statemachine/PublisherBase.h | 2 +- src/statemachine/RSocketStateMachine.cpp | 2 +- src/statemachine/RSocketStateMachine.h | 2 +- src/statemachine/RequestResponseRequester.cpp | 2 +- src/statemachine/RequestResponseRequester.h | 2 +- src/statemachine/RequestResponseResponder.cpp | 2 +- src/statemachine/RequestResponseResponder.h | 2 +- src/statemachine/StreamRequester.cpp | 2 +- src/statemachine/StreamRequester.h | 2 +- src/statemachine/StreamResponder.cpp | 2 +- src/statemachine/StreamResponder.h | 2 +- src/statemachine/StreamState.cpp | 2 +- src/statemachine/StreamState.h | 2 +- src/statemachine/StreamStateMachineBase.cpp | 2 +- src/statemachine/StreamStateMachineBase.h | 2 +- src/statemachine/StreamsFactory.cpp | 2 +- src/statemachine/StreamsFactory.h | 2 +- src/statemachine/StreamsHandler.h | 2 +- src/temporary_home/Executor.cpp | 2 +- src/temporary_home/Executor.h | 2 +- src/temporary_home/NullRequestHandler.cpp | 2 +- src/temporary_home/NullRequestHandler.h | 2 +- src/temporary_home/OldNewBridge.h | 32 ++++++------- src/temporary_home/RequestHandler.h | 2 +- .../ServerConnectionAcceptor.cpp | 2 +- src/temporary_home/ServerConnectionAcceptor.h | 2 +- src/temporary_home/SubscriberBase.h | 2 +- src/temporary_home/SubscriptionBase.h | 2 +- src/transports/tcp/TcpConnectionAcceptor.cpp | 6 +-- src/transports/tcp/TcpConnectionAcceptor.h | 4 +- src/transports/tcp/TcpConnectionFactory.cpp | 2 +- src/transports/tcp/TcpDuplexConnection.cpp | 6 +-- src/transports/tcp/TcpDuplexConnection.h | 2 +- tck-test/MarbleProcessor.cpp | 2 +- tck-test/MarbleProcessor.h | 2 +- tck-test/TestFileParser.cpp | 2 +- tck-test/TestFileParser.h | 2 +- tck-test/TestInterpreter.cpp | 2 +- tck-test/TestInterpreter.h | 2 +- tck-test/TestSubscriber.cpp | 2 +- tck-test/TestSubscriber.h | 2 +- tck-test/TestSuite.cpp | 2 +- tck-test/TestSuite.h | 2 +- tck-test/TypedCommands.h | 2 +- tck-test/client.cpp | 4 +- tck-test/server.cpp | 4 +- test/PayloadTest.cpp | 2 +- test/ServerConnectionAcceptorTest.cpp | 2 +- test/StreamStateTest.cpp | 2 +- test/deprecated/ReactiveSocket.cpp | 2 +- test/deprecated/ReactiveSocket.h | 2 +- .../ReactiveSocketConcurrencyTest.cpp | 2 +- test/deprecated/ReactiveSocketTest.cpp | 2 +- test/deprecated/SubscriberBaseTest.cpp | 2 +- test/framing/FrameTest.cpp | 2 +- test/framing/FrameTransportTest.cpp | 4 +- test/framing/FramedReaderTest.cpp | 2 +- test/framing/FramedWriterTest.cpp | 2 +- test/handlers/HelloStreamRequestHandler.cpp | 8 ++-- test/handlers/HelloStreamRequestHandler.h | 6 +-- test/integration/ClientUtils.h | 2 +- test/integration/ServerFixture.cpp | 2 +- test/integration/WarmResumptionTest.cpp | 2 +- test/internal/AllowanceSemaphoreTest.cpp | 2 +- test/internal/FollyKeepaliveTimerTest.cpp | 2 +- test/internal/OneToOneRingBufferTest.cpp | 4 +- test/internal/ReactiveStreamsMocksCompat.h | 2 +- .../ReactiveSocketResumabilityTest.cpp | 2 +- test/resumption/ResumeCacheTest.cpp | 2 +- .../ResumeIdentificationTokenTest.cpp | 2 +- test/resumption/TcpResumeClient.cpp | 2 +- test/resumption/TcpResumeServer.cpp | 46 ++++++++++--------- test/statemachine/PublisherBaseTest.cpp | 4 +- test/statemachine/RSocketStateMachineTest.cpp | 2 +- test/streams/Mocks.h | 2 +- test/test_utils/InlineConnection.cpp | 2 +- test/test_utils/InlineConnection.h | 2 +- test/test_utils/InlineConnectionTest.cpp | 2 +- test/test_utils/MockKeepaliveTimer.h | 2 +- test/test_utils/MockRequestHandler.h | 2 +- test/test_utils/MockStats.h | 6 +-- test/test_utils/PrintSubscriber.cpp | 2 +- test/test_utils/PrintSubscriber.h | 2 +- test/test_utils/StatsPrinter.cpp | 6 +-- test/test_utils/StatsPrinter.h | 6 +-- 162 files changed, 289 insertions(+), 302 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 21b04be46..cd02601cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,8 +160,8 @@ add_library( src/statemachine/RequestResponseRequester.h src/statemachine/RequestResponseResponder.cpp src/statemachine/RequestResponseResponder.h - src/statemachine/StreamStateMachineBase.cpp - src/statemachine/StreamStateMachineBase.h + src/statemachine/StreamStateMachineBase.cpp + src/statemachine/StreamStateMachineBase.h src/statemachine/StreamRequester.cpp src/statemachine/StreamRequester.h src/statemachine/StreamResponder.cpp diff --git a/benchmarks/RequestResponseLatency.cpp b/benchmarks/RequestResponseLatency.cpp index 11c0b2489..089adcc80 100644 --- a/benchmarks/RequestResponseLatency.cpp +++ b/benchmarks/RequestResponseLatency.cpp @@ -13,7 +13,6 @@ #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" -using namespace ::reactivesocket; using namespace ::folly; using namespace ::rsocket; using namespace yarpl; @@ -62,10 +61,10 @@ class BM_RequestHandler : public RSocketResponder { public: // TODO(lehecka): enable when we have support for request-response - yarpl::Reference> + yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) override { + Payload request, + StreamId streamId) override { CHECK(false) << "not implemented"; } @@ -109,7 +108,7 @@ class BM_Subscriber subscription_->request(initialRequest_); } - void onNext(reactivesocket::Payload element) noexcept override + void onNext(Payload element) noexcept override { LOG(INFO) << "BM_Subscriber " << this << " onNext as string: " << element.moveDataToString(); diff --git a/benchmarks/RequestResponseThroughput.cpp b/benchmarks/RequestResponseThroughput.cpp index cf9cafd10..50dce597b 100644 --- a/benchmarks/RequestResponseThroughput.cpp +++ b/benchmarks/RequestResponseThroughput.cpp @@ -13,7 +13,6 @@ #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" -using namespace ::reactivesocket; using namespace ::folly; using namespace ::rsocket; using namespace yarpl; @@ -65,10 +64,10 @@ class BM_RequestHandler : public RSocketResponder { public: // TODO(lehecka): enable when we have support for request-response - yarpl::Reference> + yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) override { + Payload request, + StreamId streamId) override { CHECK(false) << "not implemented"; } @@ -114,7 +113,7 @@ class BM_Subscriber subscription_->request(initialRequest_); } - void onNext(reactivesocket::Payload element) noexcept override + void onNext( Payload element) noexcept override { LOG(INFO) << "BM_Subscriber " << this << " onNext as string: " << element.moveDataToString(); diff --git a/benchmarks/StreamThroughput.cpp b/benchmarks/StreamThroughput.cpp index 26d31f6df..030ce3938 100644 --- a/benchmarks/StreamThroughput.cpp +++ b/benchmarks/StreamThroughput.cpp @@ -14,7 +14,6 @@ #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" -using namespace ::reactivesocket; using namespace ::folly; using namespace ::rsocket; using namespace yarpl; @@ -63,13 +62,13 @@ class BM_Subscription : public yarpl::flowable::Subscription { class BM_RequestHandler : public RSocketResponder { public: - yarpl::Reference> + yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) override { + Payload request, + StreamId streamId) override { CHECK(false) << "not implemented"; // TODO(lehecka) need to implement new operator fromGenerator - // return yarpl::flowable::Flowables::fromGenerator( + // return yarpl::flowable::Flowables::fromGenerator< Payload>( // []{return Payload(std::string(MESSAGE_LENGTH, 'a')); }); } }; @@ -100,7 +99,7 @@ class BM_Subscriber subscription_->request(initialRequest_); } - void onNext(reactivesocket::Payload element) noexcept override + void onNext( Payload element) noexcept override { LOG(INFO) << "BM_Subscriber " << this << " onNext as string: " << element.moveDataToString(); diff --git a/examples/channel-hello-world/ChannelHelloWorld_Client.cpp b/examples/channel-hello-world/ChannelHelloWorld_Client.cpp index 3d4b99259..72fb0feee 100644 --- a/examples/channel-hello-world/ChannelHelloWorld_Client.cpp +++ b/examples/channel-hello-world/ChannelHelloWorld_Client.cpp @@ -12,7 +12,6 @@ #include "yarpl/Flowable.h" -using namespace reactivesocket; using namespace rsocket_example; using namespace rsocket; using namespace yarpl::flowable; diff --git a/examples/channel-hello-world/ChannelHelloWorld_Server.cpp b/examples/channel-hello-world/ChannelHelloWorld_Server.cpp index cebb089e4..f708a8b1b 100644 --- a/examples/channel-hello-world/ChannelHelloWorld_Server.cpp +++ b/examples/channel-hello-world/ChannelHelloWorld_Server.cpp @@ -10,7 +10,6 @@ #include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Flowable.h" -using namespace reactivesocket; using namespace rsocket; using namespace yarpl::flowable; @@ -19,10 +18,10 @@ DEFINE_int32(port, 9898, "port to connect to"); class HelloChannelRequestHandler : public rsocket::RSocketResponder { public: /// Handles a new inbound Stream requested by the other end. - yarpl::Reference> handleRequestChannel( - reactivesocket::Payload initialPayload, - yarpl::Reference> request, - reactivesocket::StreamId streamId) override { + yarpl::Reference> handleRequestChannel( + rsocket::Payload initialPayload, + yarpl::Reference> request, + rsocket::StreamId streamId) override { std::cout << "Initial request " << initialPayload.cloneDataToString() << std::endl; diff --git a/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp b/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp index f37ba413c..99a812daf 100644 --- a/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp +++ b/examples/conditional-request-handling/ConditionalRequestHandling_Client.cpp @@ -10,7 +10,6 @@ #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" -using namespace ::reactivesocket; using namespace ::folly; using namespace ::rsocket_example; using namespace ::rsocket; diff --git a/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp b/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp index 6dadd45fd..cd980e19d 100644 --- a/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp +++ b/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp @@ -10,7 +10,6 @@ #include "JsonRequestHandler.h" #include "TextRequestHandler.h" -using namespace ::reactivesocket; using namespace ::folly; using namespace ::rsocket; diff --git a/examples/conditional-request-handling/JsonRequestHandler.cpp b/examples/conditional-request-handling/JsonRequestHandler.cpp index dd8e6b0c6..081af1210 100644 --- a/examples/conditional-request-handling/JsonRequestHandler.cpp +++ b/examples/conditional-request-handling/JsonRequestHandler.cpp @@ -4,12 +4,11 @@ #include #include "yarpl/Flowable.h" -using namespace reactivesocket; using namespace rsocket; using namespace yarpl::flowable; /// Handles a new inbound Stream requested by the other end. -yarpl::Reference> +yarpl::Reference> JsonRequestHandler::handleRequestStream(Payload request, StreamId streamId) { LOG(INFO) << "JsonRequestHandler.handleRequestStream " << request; diff --git a/examples/conditional-request-handling/JsonRequestHandler.h b/examples/conditional-request-handling/JsonRequestHandler.h index ebc0ce780..681390059 100644 --- a/examples/conditional-request-handling/JsonRequestHandler.h +++ b/examples/conditional-request-handling/JsonRequestHandler.h @@ -8,8 +8,8 @@ class JsonRequestHandler : public rsocket::RSocketResponder { public: /// Handles a new inbound Stream requested by the other end. - yarpl::Reference> + yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) override; + rsocket::Payload request, + rsocket::StreamId streamId) override; }; diff --git a/examples/conditional-request-handling/TextRequestHandler.cpp b/examples/conditional-request-handling/TextRequestHandler.cpp index fa25db177..089656711 100644 --- a/examples/conditional-request-handling/TextRequestHandler.cpp +++ b/examples/conditional-request-handling/TextRequestHandler.cpp @@ -4,12 +4,11 @@ #include #include "yarpl/Flowable.h" -using namespace reactivesocket; using namespace rsocket; using namespace yarpl::flowable; /// Handles a new inbound Stream requested by the other end. -yarpl::Reference> +yarpl::Reference> TextRequestHandler::handleRequestStream(Payload request, StreamId streamId) { LOG(INFO) << "TextRequestHandler.handleRequestStream " << request; diff --git a/examples/conditional-request-handling/TextRequestHandler.h b/examples/conditional-request-handling/TextRequestHandler.h index fe2a3edba..8554ff373 100644 --- a/examples/conditional-request-handling/TextRequestHandler.h +++ b/examples/conditional-request-handling/TextRequestHandler.h @@ -8,8 +8,8 @@ class TextRequestHandler : public rsocket::RSocketResponder { public: /// Handles a new inbound Stream requested by the other end. - yarpl::Reference> + yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) override; + rsocket::Payload request, + rsocket::StreamId streamId) override; }; diff --git a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp index e661c4b0a..befe7f0df 100644 --- a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp +++ b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Client.cpp @@ -12,7 +12,6 @@ #include "yarpl/Single.h" -using namespace reactivesocket; using namespace rsocket_example; using namespace rsocket; using namespace yarpl; diff --git a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp index c67fcf6c5..65fd998b2 100644 --- a/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp +++ b/examples/fire-and-forget-hello-world/FireAndForgetHelloWorld_Server.cpp @@ -10,7 +10,6 @@ #include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Single.h" -using namespace reactivesocket; using namespace rsocket; using namespace yarpl; using namespace yarpl::single; diff --git a/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp b/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp index 599ba4e85..20e694b88 100644 --- a/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp +++ b/examples/request-response-hello-world/RequestResponseHelloWorld_Client.cpp @@ -12,7 +12,6 @@ #include "yarpl/Single.h" -using namespace reactivesocket; using namespace rsocket_example; using namespace rsocket; using namespace yarpl; diff --git a/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp b/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp index 8222f11a8..1f9f74208 100644 --- a/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp +++ b/examples/request-response-hello-world/RequestResponseHelloWorld_Server.cpp @@ -10,7 +10,6 @@ #include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Single.h" -using namespace reactivesocket; using namespace rsocket; using namespace yarpl; using namespace yarpl::single; diff --git a/examples/stream-hello-world/StreamHelloWorld_Client.cpp b/examples/stream-hello-world/StreamHelloWorld_Client.cpp index 82ba67ec4..a80adafcb 100644 --- a/examples/stream-hello-world/StreamHelloWorld_Client.cpp +++ b/examples/stream-hello-world/StreamHelloWorld_Client.cpp @@ -12,7 +12,6 @@ #include "yarpl/Flowable.h" -using namespace reactivesocket; using namespace rsocket_example; using namespace rsocket; diff --git a/examples/stream-hello-world/StreamHelloWorld_Server.cpp b/examples/stream-hello-world/StreamHelloWorld_Server.cpp index c60e8ebe8..9fe6318a5 100644 --- a/examples/stream-hello-world/StreamHelloWorld_Server.cpp +++ b/examples/stream-hello-world/StreamHelloWorld_Server.cpp @@ -10,7 +10,6 @@ #include "src/transports/tcp/TcpConnectionAcceptor.h" #include "yarpl/Flowable.h" -using namespace reactivesocket; using namespace rsocket; using namespace yarpl::flowable; @@ -19,9 +18,9 @@ DEFINE_int32(port, 9898, "port to connect to"); class HelloStreamRequestHandler : public rsocket::RSocketResponder { public: /// Handles a new inbound Stream requested by the other end. - yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) override { + yarpl::Reference> handleRequestStream( + rsocket::Payload request, + rsocket::StreamId streamId) override { std::cout << "HelloStreamRequestHandler.handleRequestStream " << request << std::endl; diff --git a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp index ce9686b1b..6cc665607 100644 --- a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp +++ b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Client.cpp @@ -12,7 +12,6 @@ #include "yarpl/Flowable.h" -using namespace reactivesocket; using namespace rsocket_example; using namespace rsocket; using yarpl::flowable::Subscribers; diff --git a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp index b59e7579d..663d36a0b 100644 --- a/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp +++ b/examples/stream-observable-to-flowable/StreamObservableToFlowable_Server.cpp @@ -12,7 +12,6 @@ #include "yarpl/Observable.h" #include "yarpl/schedulers/ThreadScheduler.h" -using reactivesocket::Payload; using namespace rsocket; using namespace yarpl; using namespace yarpl::flowable; @@ -25,7 +24,7 @@ class PushStreamRequestHandler : public rsocket::RSocketResponder { /// Handles a new inbound Stream requested by the other end. yarpl::Reference> handleRequestStream( Payload request, - reactivesocket::StreamId streamId) override { + rsocket::StreamId streamId) override { std::cout << "PushStreamRequestHandler.handleRequestStream " << request << std::endl; diff --git a/examples/util/ExampleSubscriber.cpp b/examples/util/ExampleSubscriber.cpp index dfac72693..3d1e6e119 100644 --- a/examples/util/ExampleSubscriber.cpp +++ b/examples/util/ExampleSubscriber.cpp @@ -3,7 +3,7 @@ #include "examples/util/ExampleSubscriber.h" #include -using namespace ::reactivesocket; +using namespace ::rsocket; namespace rsocket_example { diff --git a/examples/util/ExampleSubscriber.h b/examples/util/ExampleSubscriber.h index 8bb952b8d..f0a04a328 100644 --- a/examples/util/ExampleSubscriber.h +++ b/examples/util/ExampleSubscriber.h @@ -16,14 +16,14 @@ */ namespace rsocket_example { class ExampleSubscriber - : public yarpl::flowable::Subscriber { + : public yarpl::flowable::Subscriber { public: ~ExampleSubscriber(); ExampleSubscriber(int initialRequest, int numToTake); void onSubscribe(yarpl::Reference subscription) noexcept override; - void onNext(reactivesocket::Payload) noexcept override; + void onNext(rsocket::Payload) noexcept override; void onComplete() noexcept override; void onError(const std::exception_ptr ex) noexcept override; diff --git a/src/ConnectionAcceptor.h b/src/ConnectionAcceptor.h index 71bfa7952..1de1491e4 100644 --- a/src/ConnectionAcceptor.h +++ b/src/ConnectionAcceptor.h @@ -10,7 +10,7 @@ namespace rsocket { using OnDuplexConnectionAccept = std::function< - void(std::unique_ptr, folly::EventBase&)>; + void(std::unique_ptr, folly::EventBase&)>; /** * Common interface for a server that accepts connections and turns them into diff --git a/src/ConnectionFactory.h b/src/ConnectionFactory.h index eb5a70d4f..d32c0c524 100644 --- a/src/ConnectionFactory.h +++ b/src/ConnectionFactory.h @@ -11,7 +11,7 @@ class EventBase; namespace rsocket { using OnConnect = std::function< - void(std::unique_ptr, folly::EventBase&)>; + void(std::unique_ptr, folly::EventBase&)>; /** * Common interface for a client to create connections and turn them into diff --git a/src/ConnectionSetupRequest.cpp b/src/ConnectionSetupRequest.cpp index 93c9c7465..0bfd1a71c 100644 --- a/src/ConnectionSetupRequest.cpp +++ b/src/ConnectionSetupRequest.cpp @@ -2,7 +2,7 @@ #include "ConnectionSetupRequest.h" -using namespace reactivesocket; +using namespace rsocket; namespace rsocket { diff --git a/src/ConnectionSetupRequest.h b/src/ConnectionSetupRequest.h index aa8174dd6..ca20ce795 100644 --- a/src/ConnectionSetupRequest.h +++ b/src/ConnectionSetupRequest.h @@ -18,7 +18,7 @@ namespace rsocket { class ConnectionSetupRequest { public: explicit ConnectionSetupRequest( - reactivesocket::SetupParameters setupPayload); + rsocket::SetupParameters setupPayload); ConnectionSetupRequest(const ConnectionSetupRequest&) = delete; // copy ConnectionSetupRequest(ConnectionSetupRequest&&) = default; // move ConnectionSetupRequest& operator=(const ConnectionSetupRequest&) = @@ -27,13 +27,13 @@ class ConnectionSetupRequest { const std::string& getMetadataMimeType() const; const std::string& getDataMimeType() const; - const reactivesocket::Payload& getPayload() const; + const rsocket::Payload& getPayload() const; bool clientRequestsResumability() const; - const reactivesocket::ResumeIdentificationToken& + const rsocket::ResumeIdentificationToken& getResumeIdentificationToken() const; bool willHonorLease() const; private: - reactivesocket::SetupParameters setupPayload_; + rsocket::SetupParameters setupPayload_; }; } diff --git a/src/DuplexConnection.h b/src/DuplexConnection.h index 3974a8dae..b82523385 100644 --- a/src/DuplexConnection.h +++ b/src/DuplexConnection.h @@ -9,7 +9,7 @@ namespace folly { class IOBuf; } -namespace reactivesocket { +namespace rsocket { /// Represents a connection of the underlying protocol, on top of which /// the ReactiveSocket is layered. The underlying protocol MUST provide an diff --git a/src/Payload.cpp b/src/Payload.cpp index 893d5fcfe..fa0d49802 100644 --- a/src/Payload.cpp +++ b/src/Payload.cpp @@ -5,7 +5,7 @@ #include #include "src/framing/Frame.h" -namespace reactivesocket { +namespace rsocket { Payload::Payload( std::unique_ptr _data, diff --git a/src/Payload.h b/src/Payload.h index 66e5c82e2..fb2e8d257 100644 --- a/src/Payload.h +++ b/src/Payload.h @@ -7,7 +7,7 @@ #include #include "src/internal/Common.h" -namespace reactivesocket { +namespace rsocket { enum class FrameFlags : uint16_t; diff --git a/src/RSocketClient.cpp b/src/RSocketClient.cpp index 318fff99b..ec6ecce79 100644 --- a/src/RSocketClient.cpp +++ b/src/RSocketClient.cpp @@ -6,7 +6,7 @@ #include "src/temporary_home/NullRequestHandler.h" #include "RSocketStats.h" -using namespace reactivesocket; +using namespace rsocket; using namespace folly; namespace rsocket { diff --git a/src/RSocketConnectionHandler.cpp b/src/RSocketConnectionHandler.cpp index ea5c6476c..975f05cde 100644 --- a/src/RSocketConnectionHandler.cpp +++ b/src/RSocketConnectionHandler.cpp @@ -14,10 +14,10 @@ namespace rsocket { -using namespace reactivesocket; +using namespace rsocket; using namespace yarpl; -class RSocketHandlerBridge : public reactivesocket::DefaultRequestHandler { +class RSocketHandlerBridge : public rsocket::DefaultRequestHandler { public: RSocketHandlerBridge(std::shared_ptr handler) : handler_(std::move(handler)){}; diff --git a/src/RSocketConnectionHandler.h b/src/RSocketConnectionHandler.h index 666376a8f..9a5fffe03 100644 --- a/src/RSocketConnectionHandler.h +++ b/src/RSocketConnectionHandler.h @@ -26,18 +26,18 @@ namespace rsocket { * * TODO: Resumability */ -class RSocketConnectionHandler : public reactivesocket::ConnectionHandler { +class RSocketConnectionHandler : public rsocket::ConnectionHandler { public: virtual void setupNewSocket( - std::shared_ptr frameTransport, - reactivesocket::SetupParameters setupPayload) override; + std::shared_ptr frameTransport, + rsocket::SetupParameters setupPayload) override; virtual bool resumeSocket( - std::shared_ptr frameTransport, - reactivesocket::ResumeParameters) override; + std::shared_ptr frameTransport, + rsocket::ResumeParameters) override; virtual void connectionError( - std::shared_ptr, + std::shared_ptr, folly::exception_wrapper ex) override; private: @@ -55,7 +55,7 @@ class RSocketConnectionHandler : public reactivesocket::ConnectionHandler { */ virtual void manageSocket( std::shared_ptr request, - std::shared_ptr socket) = 0; + std::shared_ptr socket) = 0; }; } // namespace rsocket diff --git a/src/RSocketParameters.cpp b/src/RSocketParameters.cpp index cf64503d1..3a592963c 100644 --- a/src/RSocketParameters.cpp +++ b/src/RSocketParameters.cpp @@ -3,7 +3,7 @@ #include "RSocketParameters.h" #include -namespace reactivesocket { +namespace rsocket { std::ostream& operator<<( std::ostream& os, const SetupParameters& setupPayload) { diff --git a/src/RSocketParameters.h b/src/RSocketParameters.h index bfa1be20b..7ef5b0ce0 100644 --- a/src/RSocketParameters.h +++ b/src/RSocketParameters.h @@ -8,7 +8,7 @@ #include "src/framing/FrameSerializer.h" #include "src/Payload.h" -namespace reactivesocket { +namespace rsocket { class RSocketParameters { public: diff --git a/src/RSocketRequester.cpp b/src/RSocketRequester.cpp index 78b476d3f..1674752e9 100644 --- a/src/RSocketRequester.cpp +++ b/src/RSocketRequester.cpp @@ -7,7 +7,7 @@ #include -using namespace reactivesocket; +using namespace rsocket; using namespace folly; using namespace yarpl; @@ -37,9 +37,9 @@ RSocketRequester::~RSocketRequester() { LOG(INFO) << "RSocketRequester => destroy"; } -yarpl::Reference> +yarpl::Reference> RSocketRequester::requestChannel( - yarpl::Reference> + yarpl::Reference> requestStream) { auto& eb = eventBase_; auto srs = stateMachine_; @@ -80,7 +80,7 @@ RSocketRequester::requestStream(Payload request) { }); } -yarpl::Reference> +yarpl::Reference> RSocketRequester::requestResponse(Payload request) { // TODO bridge in use until SingleSubscriber is used internally class SingleToSubscriberBridge : public yarpl::flowable::Subscriber { @@ -133,7 +133,7 @@ RSocketRequester::requestResponse(Payload request) { } yarpl::Reference> RSocketRequester::fireAndForget( - reactivesocket::Payload request) { + rsocket::Payload request) { return yarpl::single::Single::create([ eb = &eventBase_, request = std::move(request), diff --git a/src/RSocketRequester.h b/src/RSocketRequester.h index 7304f672c..23d94b1f6 100644 --- a/src/RSocketRequester.h +++ b/src/RSocketRequester.h @@ -35,7 +35,7 @@ namespace rsocket { class RSocketRequester { public: static std::shared_ptr create( - std::shared_ptr srs, + std::shared_ptr srs, folly::EventBase& executor); // TODO figure out how to use folly::Executor instead of EventBase @@ -53,8 +53,8 @@ class RSocketRequester { * * @param payload */ - yarpl::Reference> - requestStream(reactivesocket::Payload request); + yarpl::Reference> + requestStream(rsocket::Payload request); /** * Start a channel (streams in both directions). @@ -64,9 +64,9 @@ class RSocketRequester { * * @param request */ - yarpl::Reference> + yarpl::Reference> requestChannel( - yarpl::Reference> + yarpl::Reference> requests); /** @@ -77,8 +77,8 @@ class RSocketRequester { * * @param payload */ - yarpl::Reference> - requestResponse(reactivesocket::Payload request); + yarpl::Reference> + requestResponse(rsocket::Payload request); /** * Send a single Payload with no response. @@ -95,7 +95,7 @@ class RSocketRequester { * @param payload */ yarpl::Reference> fireAndForget( - reactivesocket::Payload request); + rsocket::Payload request); /** * Send metadata without response. @@ -106,9 +106,9 @@ class RSocketRequester { private: RSocketRequester( - std::shared_ptr srs, + std::shared_ptr srs, folly::EventBase& eventBase); - std::shared_ptr stateMachine_; + std::shared_ptr stateMachine_; folly::EventBase& eventBase_; }; } diff --git a/src/RSocketResponder.h b/src/RSocketResponder.h index ab08c7676..566722f8b 100644 --- a/src/RSocketResponder.h +++ b/src/RSocketResponder.h @@ -44,11 +44,11 @@ class RSocketResponder { * @param streamId * @return */ - virtual yarpl::Reference> + virtual yarpl::Reference> handleRequestResponse( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) { - return yarpl::single::Singles::error( + rsocket::Payload request, + rsocket::StreamId streamId) { + return yarpl::single::Singles::error( std::logic_error("handleRequestResponse not implemented")); } @@ -61,11 +61,11 @@ class RSocketResponder { * @param streamId * @return */ - virtual yarpl::Reference> + virtual yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) { - return yarpl::flowable::Flowables::error( + rsocket::Payload request, + rsocket::StreamId streamId) { + return yarpl::flowable::Flowables::error( std::logic_error("handleRequestStream not implemented")); } @@ -78,13 +78,13 @@ class RSocketResponder { * @param streamId * @return */ - virtual yarpl::Reference> + virtual yarpl::Reference> handleRequestChannel( - reactivesocket::Payload request, - yarpl::Reference> + rsocket::Payload request, + yarpl::Reference> requestStream, - reactivesocket::StreamId streamId) { - return yarpl::flowable::Flowables::error( + rsocket::StreamId streamId) { + return yarpl::flowable::Flowables::error( std::logic_error("handleRequestChannel not implemented")); } @@ -98,8 +98,8 @@ class RSocketResponder { * @return */ virtual void handleFireAndForget( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) { + rsocket::Payload request, + rsocket::StreamId streamId) { // no default implementation, no error response to provide } }; diff --git a/src/RSocketServer.cpp b/src/RSocketServer.cpp index fae31bd44..0e789f3c0 100644 --- a/src/RSocketServer.cpp +++ b/src/RSocketServer.cpp @@ -7,7 +7,7 @@ #include "RSocketConnectionHandler.h" #include "src/statemachine/RSocketStateMachine.h" -using namespace reactivesocket; +using namespace rsocket; namespace rsocket { @@ -26,7 +26,7 @@ class RSocketServerConnectionHandler : public virtual RSocketConnectionHandler { void manageSocket( std::shared_ptr request, - std::shared_ptr stateMachine) + std::shared_ptr stateMachine) override { stateMachine->addClosedListener( [this, stateMachine](const folly::exception_wrapper&) { @@ -119,13 +119,13 @@ void RSocketServer::unpark() { } void RSocketServer::addConnection( - std::shared_ptr socket, + std::shared_ptr socket, folly::Executor& executor) { sockets_.lock()->insert({std::move(socket), executor}); } void RSocketServer::removeConnection( - std::shared_ptr socket) { + std::shared_ptr socket) { auto locked = sockets_.lock(); locked->erase(socket); diff --git a/src/RSocketServer.h b/src/RSocketServer.h index faaa1451c..428598154 100644 --- a/src/RSocketServer.h +++ b/src/RSocketServer.h @@ -77,18 +77,18 @@ class RSocketServer { friend class RSocketServerConnectionHandler; private: - void addConnection(std::shared_ptr, folly::Executor&); - void removeConnection(std::shared_ptr); + void addConnection(std::shared_ptr, folly::Executor&); + void removeConnection(std::shared_ptr); ////////////////////////////////////////////////////////////////////////////// std::unique_ptr lazyAcceptor_; - reactivesocket::ServerConnectionAcceptor acceptor_; + rsocket::ServerConnectionAcceptor acceptor_; bool started{false}; /// Set of currently open ReactiveSockets. folly::Synchronized< - std::unordered_map, folly::Executor&>, + std::unordered_map, folly::Executor&>, std::mutex> sockets_; diff --git a/src/RSocketStats.cpp b/src/RSocketStats.cpp index 21be3607e..bf7b679b0 100644 --- a/src/RSocketStats.cpp +++ b/src/RSocketStats.cpp @@ -3,7 +3,7 @@ #include "RSocketStats.h" #include -namespace reactivesocket { +namespace rsocket { class NoopStats : public RSocketStats { public: @@ -16,10 +16,10 @@ class NoopStats : public RSocketStats { void duplexConnectionCreated( const std::string& type, - reactivesocket::DuplexConnection* connection) override {} + rsocket::DuplexConnection* connection) override {} void duplexConnectionClosed( const std::string& type, - reactivesocket::DuplexConnection* connection) override {} + rsocket::DuplexConnection* connection) override {} void bytesWritten(size_t bytes) override {} void bytesRead(size_t bytes) override {} diff --git a/src/RSocketStats.h b/src/RSocketStats.h index cb39ab24e..c7c6d7832 100644 --- a/src/RSocketStats.h +++ b/src/RSocketStats.h @@ -6,7 +6,7 @@ #include #include "src/internal/Common.h" -namespace reactivesocket { +namespace rsocket { class DuplexConnection; diff --git a/src/framing/Frame.cpp b/src/framing/Frame.cpp index 47638a0b6..8314dc3ab 100644 --- a/src/framing/Frame.cpp +++ b/src/framing/Frame.cpp @@ -7,7 +7,7 @@ #include #include "src/RSocketParameters.h" -namespace reactivesocket { +namespace rsocket { const uint32_t Frame_LEASE::kMaxTtl; const uint32_t Frame_LEASE::kMaxNumRequests; diff --git a/src/framing/Frame.h b/src/framing/Frame.h index 57c393377..dfa176c00 100644 --- a/src/framing/Frame.h +++ b/src/framing/Frame.h @@ -21,7 +21,7 @@ class QueueAppender; } } -namespace reactivesocket { +namespace rsocket { /// A unique identifier of a stream. // TODO(stupaq): strong typedef and forward declarations all around diff --git a/src/framing/FrameProcessor.h b/src/framing/FrameProcessor.h index 080ee6459..8e7652721 100644 --- a/src/framing/FrameProcessor.h +++ b/src/framing/FrameProcessor.h @@ -9,7 +9,7 @@ class IOBuf; class exception_wrapper; } -namespace reactivesocket { +namespace rsocket { class FrameProcessor { public: diff --git a/src/framing/FrameSerializer.cpp b/src/framing/FrameSerializer.cpp index e7f9980b0..1d660cbc8 100644 --- a/src/framing/FrameSerializer.cpp +++ b/src/framing/FrameSerializer.cpp @@ -13,7 +13,7 @@ DEFINE_string( "override for the ReactiveSocket protocol version to be used" " [MAJOR.MINOR]."); -namespace reactivesocket { +namespace rsocket { // TODO: this should default to 1.0 when we deploy successfully constexpr const ProtocolVersion ProtocolVersion::Latest = diff --git a/src/framing/FrameSerializer.h b/src/framing/FrameSerializer.h index ac82c7a9e..2d56e11be 100644 --- a/src/framing/FrameSerializer.h +++ b/src/framing/FrameSerializer.h @@ -8,7 +8,7 @@ #include #include "src/framing/Frame.h" -namespace reactivesocket { +namespace rsocket { // interface separating serialization/deserialization of ReactiveSocket frames class FrameSerializer { diff --git a/src/framing/FrameSerializer_v0.cpp b/src/framing/FrameSerializer_v0.cpp index 2598a5e15..f15054811 100644 --- a/src/framing/FrameSerializer_v0.cpp +++ b/src/framing/FrameSerializer_v0.cpp @@ -3,7 +3,7 @@ #include "FrameSerializer_v0.h" #include -namespace reactivesocket { +namespace rsocket { constexpr const ProtocolVersion FrameSerializerV0::Version; constexpr const size_t FrameSerializerV0::kFrameHeaderSize; // bytes @@ -58,7 +58,7 @@ constexpr inline bool operator!(FrameFlags_V0 a) { } // namespace static folly::IOBufQueue createBufferQueue(size_t bufferSize) { - auto buf = reactivesocket::FrameBufferAllocator::allocate(bufferSize); + auto buf = rsocket::FrameBufferAllocator::allocate(bufferSize); folly::IOBufQueue queue(folly::IOBufQueue::cacheChainLength()); queue.append(std::move(buf)); return queue; diff --git a/src/framing/FrameSerializer_v0.h b/src/framing/FrameSerializer_v0.h index 1e8c7c2a4..a428a2d22 100644 --- a/src/framing/FrameSerializer_v0.h +++ b/src/framing/FrameSerializer_v0.h @@ -4,7 +4,7 @@ #include "src/framing/FrameSerializer.h" -namespace reactivesocket { +namespace rsocket { class FrameSerializerV0 : public FrameSerializer { public: diff --git a/src/framing/FrameSerializer_v0_1.cpp b/src/framing/FrameSerializer_v0_1.cpp index 5d8d8284a..9b2880538 100644 --- a/src/framing/FrameSerializer_v0_1.cpp +++ b/src/framing/FrameSerializer_v0_1.cpp @@ -3,7 +3,7 @@ #include "FrameSerializer_v0_1.h" #include -namespace reactivesocket { +namespace rsocket { constexpr const ProtocolVersion FrameSerializerV0_1::Version; constexpr const size_t FrameSerializerV0_1::kMinBytesNeededForAutodetection; diff --git a/src/framing/FrameSerializer_v0_1.h b/src/framing/FrameSerializer_v0_1.h index 83948fed5..97f917e91 100644 --- a/src/framing/FrameSerializer_v0_1.h +++ b/src/framing/FrameSerializer_v0_1.h @@ -4,7 +4,7 @@ #include "src/framing/FrameSerializer_v0.h" -namespace reactivesocket { +namespace rsocket { class FrameSerializerV0_1 : public FrameSerializerV0 { public: diff --git a/src/framing/FrameSerializer_v1_0.cpp b/src/framing/FrameSerializer_v1_0.cpp index 8845e8ab0..590014821 100644 --- a/src/framing/FrameSerializer_v1_0.cpp +++ b/src/framing/FrameSerializer_v1_0.cpp @@ -3,7 +3,7 @@ #include "FrameSerializer_v1_0.h" #include -namespace reactivesocket { +namespace rsocket { constexpr const ProtocolVersion FrameSerializerV1_0::Version; constexpr const size_t FrameSerializerV1_0::kFrameHeaderSize; @@ -19,7 +19,7 @@ ProtocolVersion FrameSerializerV1_0::protocolVersion() { } static folly::IOBufQueue createBufferQueue(size_t bufferSize) { - auto buf = reactivesocket::FrameBufferAllocator::allocate(bufferSize); + auto buf = rsocket::FrameBufferAllocator::allocate(bufferSize); folly::IOBufQueue queue(folly::IOBufQueue::cacheChainLength()); queue.append(std::move(buf)); return queue; diff --git a/src/framing/FrameSerializer_v1_0.h b/src/framing/FrameSerializer_v1_0.h index 739f8e707..5dad8b139 100644 --- a/src/framing/FrameSerializer_v1_0.h +++ b/src/framing/FrameSerializer_v1_0.h @@ -4,7 +4,7 @@ #include "src/framing/FrameSerializer.h" -namespace reactivesocket { +namespace rsocket { class FrameSerializerV1_0 : public FrameSerializer { public: diff --git a/src/framing/FrameTransport.cpp b/src/framing/FrameTransport.cpp index 665f2c433..7f21d8a2b 100644 --- a/src/framing/FrameTransport.cpp +++ b/src/framing/FrameTransport.cpp @@ -5,7 +5,7 @@ #include "src/DuplexConnection.h" #include "src/framing/Frame.h" -namespace reactivesocket { +namespace rsocket { FrameTransport::FrameTransport(std::unique_ptr connection) : connection_(std::move(connection)) { diff --git a/src/framing/FrameTransport.h b/src/framing/FrameTransport.h index 3320582af..3c5d1c48b 100644 --- a/src/framing/FrameTransport.h +++ b/src/framing/FrameTransport.h @@ -15,7 +15,7 @@ #include "src/Payload.h" #include "src/internal/ReactiveStreamsCompat.h" -namespace reactivesocket { +namespace rsocket { class DuplexConnection; @@ -76,7 +76,7 @@ class FrameTransport : AllowanceSemaphore writeAllowance_; std::shared_ptr connection_; - std::shared_ptr>> + std::shared_ptr>> connectionOutput_; std::shared_ptr connectionInputSub_; diff --git a/src/framing/FramedDuplexConnection.cpp b/src/framing/FramedDuplexConnection.cpp index ddf70fc8b..bee5151a5 100644 --- a/src/framing/FramedDuplexConnection.cpp +++ b/src/framing/FramedDuplexConnection.cpp @@ -5,7 +5,7 @@ #include "src/framing/FramedReader.h" #include "src/framing/FramedWriter.h" -namespace reactivesocket { +namespace rsocket { FramedDuplexConnection::FramedDuplexConnection( std::unique_ptr connection, diff --git a/src/framing/FramedDuplexConnection.h b/src/framing/FramedDuplexConnection.h index 367df2507..5c0d903f8 100644 --- a/src/framing/FramedDuplexConnection.h +++ b/src/framing/FramedDuplexConnection.h @@ -7,7 +7,7 @@ #include "src/internal/Common.h" #include "src/DuplexConnection.h" -namespace reactivesocket { +namespace rsocket { class FramedReader; class FramedWriter; diff --git a/src/framing/FramedReader.cpp b/src/framing/FramedReader.cpp index 9c4939865..65b8765f9 100644 --- a/src/framing/FramedReader.cpp +++ b/src/framing/FramedReader.cpp @@ -5,7 +5,7 @@ #include "FrameSerializer_v0_1.h" #include "FrameSerializer_v1_0.h" -namespace reactivesocket { +namespace rsocket { namespace { constexpr auto kFrameLengthFieldLengthV0_1 = sizeof(int32_t); constexpr auto kFrameLengthFieldLengthV1_0 = 3; // bytes diff --git a/src/framing/FramedReader.h b/src/framing/FramedReader.h index ef69437ca..eb9031a77 100644 --- a/src/framing/FramedReader.h +++ b/src/framing/FramedReader.h @@ -9,7 +9,7 @@ #include "src/temporary_home/SubscriberBase.h" #include "src/temporary_home/SubscriptionBase.h" -namespace reactivesocket { +namespace rsocket { struct ProtocolVersion; @@ -18,7 +18,7 @@ class FramedReader : public SubscriberBaseT>, public EnableSharedFromThisBase { public: explicit FramedReader( - std::shared_ptr>> + std::shared_ptr>> frames, folly::Executor& executor, std::shared_ptr protocolVersion) @@ -52,7 +52,7 @@ class FramedReader : public SubscriberBaseT>, using EnableSharedFromThisBase::shared_from_this; - std::shared_ptr>> + std::shared_ptr>> frames_; std::shared_ptr streamSubscription_; diff --git a/src/framing/FramedWriter.cpp b/src/framing/FramedWriter.cpp index 49c76539c..37ae32bb7 100644 --- a/src/framing/FramedWriter.cpp +++ b/src/framing/FramedWriter.cpp @@ -4,7 +4,7 @@ #include #include "FrameSerializer_v1_0.h" -namespace reactivesocket { +namespace rsocket { constexpr static const auto kMaxFrameLength = 0xFFFFFF; // 24bit max value diff --git a/src/framing/FramedWriter.h b/src/framing/FramedWriter.h index a78d8c30b..165a5131c 100644 --- a/src/framing/FramedWriter.h +++ b/src/framing/FramedWriter.h @@ -12,7 +12,7 @@ namespace folly { class IOBuf; } -namespace reactivesocket { +namespace rsocket { struct ProtocolVersion; @@ -21,7 +21,7 @@ class FramedWriter : public SubscriberBaseT>, public EnableSharedFromThisBase { public: explicit FramedWriter( - std::shared_ptr>> + std::shared_ptr>> stream, folly::Executor& executor, std::shared_ptr protocolVersion) @@ -33,7 +33,7 @@ class FramedWriter : public SubscriberBaseT>, private: // Subscriber methods - void onSubscribeImpl(std::shared_ptr + void onSubscribeImpl(std::shared_ptr subscription) noexcept override; void onNextImpl(std::unique_ptr element) noexcept override; void onCompleteImpl() noexcept override; @@ -51,7 +51,7 @@ class FramedWriter : public SubscriberBaseT>, using EnableSharedFromThisBase::shared_from_this; - std::shared_ptr>> + std::shared_ptr>> stream_; std::shared_ptr<::reactivestreams::Subscription> writerSubscription_; std::shared_ptr protocolVersion_; diff --git a/src/internal/AllowanceSemaphore.h b/src/internal/AllowanceSemaphore.h index 27d27a96e..3243b2628 100644 --- a/src/internal/AllowanceSemaphore.h +++ b/src/internal/AllowanceSemaphore.h @@ -6,7 +6,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { class AllowanceSemaphore { public: diff --git a/src/internal/ClientResumeStatusCallback.h b/src/internal/ClientResumeStatusCallback.h index 9707a9689..cf4487e6c 100644 --- a/src/internal/ClientResumeStatusCallback.h +++ b/src/internal/ClientResumeStatusCallback.h @@ -4,7 +4,7 @@ #include -namespace reactivesocket { +namespace rsocket { class ClientResumeStatusCallback { public: diff --git a/src/internal/Common.cpp b/src/internal/Common.cpp index 3d4083da2..75bbda563 100644 --- a/src/internal/Common.cpp +++ b/src/internal/Common.cpp @@ -6,7 +6,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { namespace { constexpr const char* HEX_CHARS = {"0123456789abcdef"}; diff --git a/src/internal/Common.h b/src/internal/Common.h index 06d92879c..62a2e512a 100644 --- a/src/internal/Common.h +++ b/src/internal/Common.h @@ -23,7 +23,7 @@ class Range; typedef Range StringPiece; } -namespace reactivesocket { +namespace rsocket { class ReactiveSocket; enum class FrameType : uint8_t; diff --git a/src/internal/EnableSharedFromThis.h b/src/internal/EnableSharedFromThis.h index 48c45f18b..63f956d2c 100644 --- a/src/internal/EnableSharedFromThis.h +++ b/src/internal/EnableSharedFromThis.h @@ -4,7 +4,7 @@ #include -namespace reactivesocket { +namespace rsocket { // the purpose of these classes it to allow virtual inheritance of // std::enable_shared_from_this which is not allowed because of the diff --git a/src/internal/FollyKeepaliveTimer.cpp b/src/internal/FollyKeepaliveTimer.cpp index 2f7c9d7ec..daec2f895 100644 --- a/src/internal/FollyKeepaliveTimer.cpp +++ b/src/internal/FollyKeepaliveTimer.cpp @@ -2,7 +2,7 @@ #include "FollyKeepaliveTimer.h" -namespace reactivesocket { +namespace rsocket { FollyKeepaliveTimer::FollyKeepaliveTimer( folly::EventBase& eventBase, diff --git a/src/internal/FollyKeepaliveTimer.h b/src/internal/FollyKeepaliveTimer.h index 5fd84abcd..8731ee181 100644 --- a/src/internal/FollyKeepaliveTimer.h +++ b/src/internal/FollyKeepaliveTimer.h @@ -5,7 +5,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { class FollyKeepaliveTimer : public KeepaliveTimer { public: FollyKeepaliveTimer( diff --git a/src/internal/ReactiveStreamsCompat.h b/src/internal/ReactiveStreamsCompat.h index f813bbff5..ec6252146 100644 --- a/src/internal/ReactiveStreamsCompat.h +++ b/src/internal/ReactiveStreamsCompat.h @@ -8,7 +8,7 @@ namespace folly { class exception_wrapper; } -namespace reactivesocket { +namespace rsocket { template using Publisher = reactivestreams::Publisher; @@ -16,4 +16,4 @@ template using Subscriber = reactivestreams::Subscriber; using Subscription = reactivestreams::Subscription; -} // namespace reactivesocket +} // namespace rsocket diff --git a/src/internal/ResumeCache.cpp b/src/internal/ResumeCache.cpp index 975672c2a..ecee6fcc7 100644 --- a/src/internal/ResumeCache.cpp +++ b/src/internal/ResumeCache.cpp @@ -10,7 +10,7 @@ namespace { -using reactivesocket::FrameType; +using rsocket::FrameType; bool shouldTrackFrame(const FrameType frameType) { switch (frameType) { @@ -38,7 +38,7 @@ bool shouldTrackFrame(const FrameType frameType) { } // anonymous -namespace reactivesocket { +namespace rsocket { ResumeCache::~ResumeCache() { clearFrames(position_); diff --git a/src/internal/ResumeCache.h b/src/internal/ResumeCache.h index ca2861bcb..3b8394ceb 100644 --- a/src/internal/ResumeCache.h +++ b/src/internal/ResumeCache.h @@ -15,7 +15,7 @@ namespace folly { class IOBuf; } -namespace reactivesocket { +namespace rsocket { class RSocketStateMachine; class FrameTransport; diff --git a/src/internal/StackTraceUtils.h b/src/internal/StackTraceUtils.h index 4e5d7f0ae..4d8d05069 100644 --- a/src/internal/StackTraceUtils.h +++ b/src/internal/StackTraceUtils.h @@ -4,7 +4,7 @@ #include -namespace reactivesocket { +namespace rsocket { std::string getStackTrace(); diff --git a/src/statemachine/ChannelRequester.cpp b/src/statemachine/ChannelRequester.cpp index 64e890d1b..bf9386719 100644 --- a/src/statemachine/ChannelRequester.cpp +++ b/src/statemachine/ChannelRequester.cpp @@ -3,7 +3,7 @@ #include "src/statemachine/ChannelRequester.h" #include -namespace reactivesocket { +namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; diff --git a/src/statemachine/ChannelRequester.h b/src/statemachine/ChannelRequester.h index 0ab7ad03d..369b16300 100644 --- a/src/statemachine/ChannelRequester.h +++ b/src/statemachine/ChannelRequester.h @@ -14,7 +14,7 @@ namespace folly { class exception_wrapper; } -namespace reactivesocket { +namespace rsocket { /// Implementation of stream stateMachine that represents a Channel requester. class ChannelRequester : public ConsumerBase, diff --git a/src/statemachine/ChannelResponder.cpp b/src/statemachine/ChannelResponder.cpp index ff6a20f94..f26362fc2 100644 --- a/src/statemachine/ChannelResponder.cpp +++ b/src/statemachine/ChannelResponder.cpp @@ -3,7 +3,7 @@ #include "src/statemachine/ChannelResponder.h" #include -namespace reactivesocket { +namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; diff --git a/src/statemachine/ChannelResponder.h b/src/statemachine/ChannelResponder.h index d83c208b6..a81bb52cd 100644 --- a/src/statemachine/ChannelResponder.h +++ b/src/statemachine/ChannelResponder.h @@ -9,7 +9,7 @@ #include "src/statemachine/PublisherBase.h" #include "yarpl/flowable/Subscriber.h" -namespace reactivesocket { +namespace rsocket { /// Implementation of stream stateMachine that represents a Channel responder. class ChannelResponder : public ConsumerBase, diff --git a/src/statemachine/ConsumerBase.cpp b/src/statemachine/ConsumerBase.cpp index b2acd9595..296f5c218 100644 --- a/src/statemachine/ConsumerBase.cpp +++ b/src/statemachine/ConsumerBase.cpp @@ -6,7 +6,7 @@ #include #include "src/Payload.h" -namespace reactivesocket { +namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; diff --git a/src/statemachine/ConsumerBase.h b/src/statemachine/ConsumerBase.h index dc761859d..aac8a4def 100644 --- a/src/statemachine/ConsumerBase.h +++ b/src/statemachine/ConsumerBase.h @@ -13,7 +13,7 @@ #include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/flowable/Subscription.h" -namespace reactivesocket { +namespace rsocket { enum class StreamCompletionSignal; diff --git a/src/statemachine/PublisherBase.h b/src/statemachine/PublisherBase.h index e5ffcbc94..823b83880 100644 --- a/src/statemachine/PublisherBase.h +++ b/src/statemachine/PublisherBase.h @@ -12,7 +12,7 @@ #include "src/temporary_home/RequestHandler.h" #include "yarpl/flowable/Subscription.h" -namespace reactivesocket { +namespace rsocket { enum class StreamCompletionSignal; diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index 1a39b0724..fc75309cf 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -18,7 +18,7 @@ #include "src/statemachine/ChannelResponder.h" #include "src/statemachine/StreamStateMachineBase.h" -namespace reactivesocket { +namespace rsocket { RSocketStateMachine::RSocketStateMachine( folly::Executor& executor, diff --git a/src/statemachine/RSocketStateMachine.h b/src/statemachine/RSocketStateMachine.h index 500160284..f64474ca8 100644 --- a/src/statemachine/RSocketStateMachine.h +++ b/src/statemachine/RSocketStateMachine.h @@ -16,7 +16,7 @@ #include "StreamsFactory.h" #include "StreamsHandler.h" -namespace reactivesocket { +namespace rsocket { class StreamStateMachineBase; class ClientResumeStatusCallback; diff --git a/src/statemachine/RequestResponseRequester.cpp b/src/statemachine/RequestResponseRequester.cpp index dd184b48c..80d1171ae 100644 --- a/src/statemachine/RequestResponseRequester.cpp +++ b/src/statemachine/RequestResponseRequester.cpp @@ -7,7 +7,7 @@ #include "RSocketStateMachine.h" #include "src/temporary_home/RequestHandler.h" -namespace reactivesocket { +namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; diff --git a/src/statemachine/RequestResponseRequester.h b/src/statemachine/RequestResponseRequester.h index e08b8509f..25947676e 100644 --- a/src/statemachine/RequestResponseRequester.h +++ b/src/statemachine/RequestResponseRequester.h @@ -8,7 +8,7 @@ #include "yarpl/flowable/Subscription.h" #include "yarpl/flowable/Subscriber.h" -namespace reactivesocket { +namespace rsocket { /// Implementation of stream stateMachine that represents a RequestResponse /// requester diff --git a/src/statemachine/RequestResponseResponder.cpp b/src/statemachine/RequestResponseResponder.cpp index 08f9a73b3..55924aade 100644 --- a/src/statemachine/RequestResponseResponder.cpp +++ b/src/statemachine/RequestResponseResponder.cpp @@ -3,7 +3,7 @@ #include "src/statemachine/RequestResponseResponder.h" #include -namespace reactivesocket { +namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; diff --git a/src/statemachine/RequestResponseResponder.h b/src/statemachine/RequestResponseResponder.h index 1a2115d42..a5e356875 100644 --- a/src/statemachine/RequestResponseResponder.h +++ b/src/statemachine/RequestResponseResponder.h @@ -6,7 +6,7 @@ #include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/flowable/Subscriber.h" -namespace reactivesocket { +namespace rsocket { /// Implementation of stream stateMachine that represents a RequestResponse /// responder diff --git a/src/statemachine/StreamRequester.cpp b/src/statemachine/StreamRequester.cpp index 6a00eae83..b727579c6 100644 --- a/src/statemachine/StreamRequester.cpp +++ b/src/statemachine/StreamRequester.cpp @@ -3,7 +3,7 @@ #include "src/statemachine/StreamRequester.h" #include -namespace reactivesocket { +namespace rsocket { void StreamRequester::request(int64_t n) noexcept { if (n == 0) { diff --git a/src/statemachine/StreamRequester.h b/src/statemachine/StreamRequester.h index 294872805..c920f7499 100644 --- a/src/statemachine/StreamRequester.h +++ b/src/statemachine/StreamRequester.h @@ -10,7 +10,7 @@ namespace folly { class exception_wrapper; } -namespace reactivesocket { +namespace rsocket { enum class StreamCompletionSignal; diff --git a/src/statemachine/StreamResponder.cpp b/src/statemachine/StreamResponder.cpp index 3d90125aa..b92173811 100644 --- a/src/statemachine/StreamResponder.cpp +++ b/src/statemachine/StreamResponder.cpp @@ -3,7 +3,7 @@ #include "src/statemachine/StreamResponder.h" #include -namespace reactivesocket { +namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; diff --git a/src/statemachine/StreamResponder.h b/src/statemachine/StreamResponder.h index 424ea6965..88648111f 100644 --- a/src/statemachine/StreamResponder.h +++ b/src/statemachine/StreamResponder.h @@ -7,7 +7,7 @@ #include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/flowable/Subscriber.h" -namespace reactivesocket { +namespace rsocket { /// Implementation of stream stateMachine that represents a Stream responder class StreamResponder : public StreamStateMachineBase, diff --git a/src/statemachine/StreamState.cpp b/src/statemachine/StreamState.cpp index e4529bf02..580a53ae2 100644 --- a/src/statemachine/StreamState.cpp +++ b/src/statemachine/StreamState.cpp @@ -4,7 +4,7 @@ #include "src/RSocketStats.h" -namespace reactivesocket { +namespace rsocket { StreamState::StreamState(RSocketStats& stats) : stats_(stats) {} diff --git a/src/statemachine/StreamState.h b/src/statemachine/StreamState.h index f2287e1f3..d9bb77bce 100644 --- a/src/statemachine/StreamState.h +++ b/src/statemachine/StreamState.h @@ -9,7 +9,7 @@ #include "src/statemachine/StreamStateMachineBase.h" #include "yarpl/Refcounted.h" -namespace reactivesocket { +namespace rsocket { class RSocketStateMachine; class RSocketStats; diff --git a/src/statemachine/StreamStateMachineBase.cpp b/src/statemachine/StreamStateMachineBase.cpp index 603d4faa8..2127e9f02 100644 --- a/src/statemachine/StreamStateMachineBase.cpp +++ b/src/statemachine/StreamStateMachineBase.cpp @@ -5,7 +5,7 @@ #include "RSocketStateMachine.h" #include "StreamsHandler.h" -namespace reactivesocket { +namespace rsocket { void StreamStateMachineBase::handlePayload(Payload&& payload, bool complete, diff --git a/src/statemachine/StreamStateMachineBase.h b/src/statemachine/StreamStateMachineBase.h index cf51455ee..9cc0233fa 100644 --- a/src/statemachine/StreamStateMachineBase.h +++ b/src/statemachine/StreamStateMachineBase.h @@ -13,7 +13,7 @@ namespace folly { class IOBuf; } -namespace reactivesocket { +namespace rsocket { class StreamsWriter; class RequestHandler; diff --git a/src/statemachine/StreamsFactory.cpp b/src/statemachine/StreamsFactory.cpp index 4a66d08ba..0e6971215 100644 --- a/src/statemachine/StreamsFactory.cpp +++ b/src/statemachine/StreamsFactory.cpp @@ -9,7 +9,7 @@ #include "src/statemachine/StreamRequester.h" #include "src/statemachine/StreamResponder.h" -namespace reactivesocket { +namespace rsocket { using namespace yarpl; diff --git a/src/statemachine/StreamsFactory.h b/src/statemachine/StreamsFactory.h index a2b6339d4..7766fbf65 100644 --- a/src/statemachine/StreamsFactory.h +++ b/src/statemachine/StreamsFactory.h @@ -10,7 +10,7 @@ namespace folly { class Executor; } -namespace reactivesocket { +namespace rsocket { class RSocketStateMachine; class ChannelResponder; diff --git a/src/statemachine/StreamsHandler.h b/src/statemachine/StreamsHandler.h index ebbe53780..9a69531eb 100644 --- a/src/statemachine/StreamsHandler.h +++ b/src/statemachine/StreamsHandler.h @@ -5,7 +5,7 @@ #include "src/internal/Common.h" #include "src/Payload.h" -namespace reactivesocket { +namespace rsocket { class FrameSerializer; diff --git a/src/temporary_home/Executor.cpp b/src/temporary_home/Executor.cpp index af7527b6f..050b46739 100644 --- a/src/temporary_home/Executor.cpp +++ b/src/temporary_home/Executor.cpp @@ -7,7 +7,7 @@ #include "src/internal/StackTraceUtils.h" #include "SubscriberBase.h" -namespace reactivesocket { +namespace rsocket { // just instantiating of the template here template class SubscriberBaseT; diff --git a/src/temporary_home/Executor.h b/src/temporary_home/Executor.h index 5e7715fd5..d224a5e32 100644 --- a/src/temporary_home/Executor.h +++ b/src/temporary_home/Executor.h @@ -5,7 +5,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { folly::Executor& defaultExecutor(); folly::Executor& inlineExecutor(); diff --git a/src/temporary_home/NullRequestHandler.cpp b/src/temporary_home/NullRequestHandler.cpp index 3247ca3d4..a583a915f 100644 --- a/src/temporary_home/NullRequestHandler.cpp +++ b/src/temporary_home/NullRequestHandler.cpp @@ -2,7 +2,7 @@ #include "NullRequestHandler.h" -namespace reactivesocket { +namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; diff --git a/src/temporary_home/NullRequestHandler.h b/src/temporary_home/NullRequestHandler.h index 204bd442b..ea0e18b93 100644 --- a/src/temporary_home/NullRequestHandler.h +++ b/src/temporary_home/NullRequestHandler.h @@ -6,7 +6,7 @@ #include "src/RSocketParameters.h" #include "RequestHandler.h" -namespace reactivesocket { +namespace rsocket { template class NullSubscriberT : public yarpl::flowable::Subscriber { diff --git a/src/temporary_home/OldNewBridge.h b/src/temporary_home/OldNewBridge.h index 1d50d485a..ff4055d20 100644 --- a/src/temporary_home/OldNewBridge.h +++ b/src/temporary_home/OldNewBridge.h @@ -19,7 +19,7 @@ namespace rsocket { class NewToOldSubscription : public yarpl::flowable::Subscription { public: explicit NewToOldSubscription( - std::shared_ptr inner) + std::shared_ptr inner) : inner_{std::move(inner)} {} ~NewToOldSubscription() = default; @@ -35,24 +35,24 @@ class NewToOldSubscription : public yarpl::flowable::Subscription { } private: - std::shared_ptr inner_; + std::shared_ptr inner_; }; class OldToNewSubscriber - : public reactivesocket::Subscriber { + : public rsocket::Subscriber { public: explicit OldToNewSubscriber( - yarpl::Reference> inner) + yarpl::Reference> inner) : inner_{std::move(inner)} {} void onSubscribe( - std::shared_ptr subscription) noexcept { + std::shared_ptr subscription) noexcept { bridge_ = yarpl::Reference( new NewToOldSubscription(std::move(subscription))); inner_->onSubscribe(bridge_); } - void onNext(reactivesocket::Payload element) noexcept { + void onNext(rsocket::Payload element) noexcept { inner_->onNext(std::move(element)); } @@ -71,13 +71,13 @@ class OldToNewSubscriber } private: - yarpl::Reference> inner_; + yarpl::Reference> inner_; yarpl::Reference bridge_; }; //////////////////////////////////////////////////////////////////////////////// -class OldToNewSubscription : public reactivesocket::Subscription { +class OldToNewSubscription : public rsocket::Subscription { public: explicit OldToNewSubscription(yarpl::Reference inner) : inner_{inner} {} @@ -103,10 +103,10 @@ class OldToNewSubscription : public reactivesocket::Subscription { yarpl::Reference inner_{nullptr}; }; -class NewToOldSubscriber : public yarpl::flowable::Subscriber { +class NewToOldSubscriber : public yarpl::flowable::Subscriber { public: explicit NewToOldSubscriber( - std::shared_ptr> + std::shared_ptr> inner) : inner_{std::move(inner)} {} @@ -116,7 +116,7 @@ class NewToOldSubscriber : public yarpl::flowable::SubscriberonSubscribe(bridge_); } - void onNext(reactivesocket::Payload payload) override { + void onNext(rsocket::Payload payload) override { inner_->onNext(std::move(payload)); } @@ -148,12 +148,12 @@ class NewToOldSubscriber : public yarpl::flowable::Subscriber> inner_; + std::shared_ptr> inner_; std::shared_ptr bridge_; }; class EagerSubscriberBridge - : public yarpl::flowable::Subscriber { + : public yarpl::flowable::Subscriber { public: void onSubscribe( yarpl::Reference subscription) noexcept { @@ -164,7 +164,7 @@ class EagerSubscriberBridge } } - void onNext(reactivesocket::Payload element) noexcept { + void onNext(rsocket::Payload element) noexcept { DCHECK(inner_); inner_->onNext(std::move(element)); } @@ -185,7 +185,7 @@ class EagerSubscriberBridge subscription_.reset(); } - void subscribe(yarpl::Reference> inner) { + void subscribe(yarpl::Reference> inner) { CHECK(!inner_); // only one call to subscribe is supported CHECK(inner); inner_ = std::move(inner); @@ -195,7 +195,7 @@ class EagerSubscriberBridge } private: - yarpl::Reference> inner_; + yarpl::Reference> inner_; yarpl::Reference subscription_; }; diff --git a/src/temporary_home/RequestHandler.h b/src/temporary_home/RequestHandler.h index e5e8f47e8..c5d291e70 100644 --- a/src/temporary_home/RequestHandler.h +++ b/src/temporary_home/RequestHandler.h @@ -8,7 +8,7 @@ #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" -namespace reactivesocket { +namespace rsocket { class StreamState; class ReactiveSocket; diff --git a/src/temporary_home/ServerConnectionAcceptor.cpp b/src/temporary_home/ServerConnectionAcceptor.cpp index 5d3c3ecd6..f5d372ae4 100644 --- a/src/temporary_home/ServerConnectionAcceptor.cpp +++ b/src/temporary_home/ServerConnectionAcceptor.cpp @@ -11,7 +11,7 @@ #include -namespace reactivesocket { +namespace rsocket { class OneFrameProcessor : public FrameProcessor, diff --git a/src/temporary_home/ServerConnectionAcceptor.h b/src/temporary_home/ServerConnectionAcceptor.h index 3a6c9ca25..dc2dae690 100644 --- a/src/temporary_home/ServerConnectionAcceptor.h +++ b/src/temporary_home/ServerConnectionAcceptor.h @@ -14,7 +14,7 @@ class exception_wrapper; class IOBuf; } -namespace reactivesocket { +namespace rsocket { class DuplexConnection; class FrameSerializer; diff --git a/src/temporary_home/SubscriberBase.h b/src/temporary_home/SubscriberBase.h index 666fa2580..318499dae 100644 --- a/src/temporary_home/SubscriberBase.h +++ b/src/temporary_home/SubscriberBase.h @@ -10,7 +10,7 @@ #include "src/Payload.h" #include "src/internal/ReactiveStreamsCompat.h" -namespace reactivesocket { +namespace rsocket { class SubscriptionShim { public: diff --git a/src/temporary_home/SubscriptionBase.h b/src/temporary_home/SubscriptionBase.h index 19766ba56..40d80c462 100644 --- a/src/temporary_home/SubscriptionBase.h +++ b/src/temporary_home/SubscriptionBase.h @@ -6,7 +6,7 @@ #include "src/temporary_home/Executor.h" #include "src/internal/ReactiveStreamsCompat.h" -namespace reactivesocket { +namespace rsocket { class SubscriptionBase : public Subscription, public EnableSharedFromThisBase, diff --git a/src/transports/tcp/TcpConnectionAcceptor.cpp b/src/transports/tcp/TcpConnectionAcceptor.cpp index 47da3f390..007610695 100644 --- a/src/transports/tcp/TcpConnectionAcceptor.cpp +++ b/src/transports/tcp/TcpConnectionAcceptor.cpp @@ -8,7 +8,7 @@ #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" -using namespace reactivesocket; +using namespace rsocket; namespace rsocket { @@ -16,7 +16,7 @@ class TcpConnectionAcceptor::SocketCallback : public folly::AsyncServerSocket::AcceptCallback { public: explicit SocketCallback(std::function, + std::unique_ptr, folly::EventBase&)>& onAccept) : onAccept_{onAccept} {} @@ -50,7 +50,7 @@ class TcpConnectionAcceptor::SocketCallback /// Reference to the ConnectionAcceptor's callback. std::function, + std::unique_ptr, folly::EventBase&)>& onAccept_; }; diff --git a/src/transports/tcp/TcpConnectionAcceptor.h b/src/transports/tcp/TcpConnectionAcceptor.h index d61988731..3eecc8c64 100644 --- a/src/transports/tcp/TcpConnectionAcceptor.h +++ b/src/transports/tcp/TcpConnectionAcceptor.h @@ -43,7 +43,7 @@ class TcpConnectionAcceptor : public ConnectionAcceptor { */ folly::Future start( std::function, + std::unique_ptr, folly::EventBase&)>) override; /** @@ -62,7 +62,7 @@ class TcpConnectionAcceptor : public ConnectionAcceptor { std::vector> callbacks_; std::function, + std::unique_ptr, folly::EventBase&)> onAccept_; diff --git a/src/transports/tcp/TcpConnectionFactory.cpp b/src/transports/tcp/TcpConnectionFactory.cpp index e6a8e2fbb..07cec0372 100644 --- a/src/transports/tcp/TcpConnectionFactory.cpp +++ b/src/transports/tcp/TcpConnectionFactory.cpp @@ -9,7 +9,7 @@ #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" -using namespace reactivesocket; +using namespace rsocket; namespace rsocket { diff --git a/src/transports/tcp/TcpDuplexConnection.cpp b/src/transports/tcp/TcpDuplexConnection.cpp index 44010605c..3bcbfe2c5 100644 --- a/src/transports/tcp/TcpDuplexConnection.cpp +++ b/src/transports/tcp/TcpDuplexConnection.cpp @@ -6,7 +6,7 @@ #include "src/temporary_home/SubscriberBase.h" #include "src/temporary_home/SubscriptionBase.h" -namespace reactivesocket { +namespace rsocket { using namespace ::folly; class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, @@ -27,7 +27,7 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, } void setInput( - std::shared_ptr>> + std::shared_ptr>> inputSubscriber) { CHECK(!inputSubscriber_); inputSubscriber_ = std::move(inputSubscriber); @@ -125,7 +125,7 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, folly::IOBufQueue readBuffer_{folly::IOBufQueue::cacheChainLength()}; folly::AsyncSocket::UniquePtr socket_; - std::shared_ptr>> + std::shared_ptr>> inputSubscriber_; }; diff --git a/src/transports/tcp/TcpDuplexConnection.h b/src/transports/tcp/TcpDuplexConnection.h index d0628803a..428d4f3d9 100644 --- a/src/transports/tcp/TcpDuplexConnection.h +++ b/src/transports/tcp/TcpDuplexConnection.h @@ -7,7 +7,7 @@ #include "src/DuplexConnection.h" #include "src/internal/ReactiveStreamsCompat.h" -namespace reactivesocket { +namespace rsocket { class TcpReaderWriter; diff --git a/tck-test/MarbleProcessor.cpp b/tck-test/MarbleProcessor.cpp index e8d0ccaaf..67a110a0b 100644 --- a/tck-test/MarbleProcessor.cpp +++ b/tck-test/MarbleProcessor.cpp @@ -46,7 +46,7 @@ std::map> getArgMap( } } -namespace reactivesocket { +namespace rsocket { namespace tck { MarbleProcessor::MarbleProcessor( diff --git a/tck-test/MarbleProcessor.h b/tck-test/MarbleProcessor.h index 246b0b21b..52f41def5 100644 --- a/tck-test/MarbleProcessor.h +++ b/tck-test/MarbleProcessor.h @@ -6,7 +6,7 @@ #include "src/Payload.h" #include "yarpl/flowable/Subscriber.h" -namespace reactivesocket { +namespace rsocket { namespace tck { class MarbleProcessor { diff --git a/tck-test/TestFileParser.cpp b/tck-test/TestFileParser.cpp index 7f66fccf2..5d0717cc5 100644 --- a/tck-test/TestFileParser.cpp +++ b/tck-test/TestFileParser.cpp @@ -5,7 +5,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { namespace tck { TestFileParser::TestFileParser(const std::string& fileName) : input_(fileName) { diff --git a/tck-test/TestFileParser.h b/tck-test/TestFileParser.h index 95f413e31..cd0166010 100644 --- a/tck-test/TestFileParser.h +++ b/tck-test/TestFileParser.h @@ -6,7 +6,7 @@ #include "tck-test/TestSuite.h" -namespace reactivesocket { +namespace rsocket { namespace tck { class TestFileParser { diff --git a/tck-test/TestInterpreter.cpp b/tck-test/TestInterpreter.cpp index ba85526e6..3128b4c78 100644 --- a/tck-test/TestInterpreter.cpp +++ b/tck-test/TestInterpreter.cpp @@ -11,7 +11,7 @@ using namespace folly; using namespace yarpl; -namespace reactivesocket { +namespace rsocket { namespace tck { TestInterpreter::TestInterpreter( diff --git a/tck-test/TestInterpreter.h b/tck-test/TestInterpreter.h index 557ac035d..9b1c8bff4 100644 --- a/tck-test/TestInterpreter.h +++ b/tck-test/TestInterpreter.h @@ -14,7 +14,7 @@ namespace folly { class EventBase; } -namespace reactivesocket { +namespace rsocket { class ReactiveSocket; diff --git a/tck-test/TestSubscriber.cpp b/tck-test/TestSubscriber.cpp index 56e1062b4..50803acdf 100644 --- a/tck-test/TestSubscriber.cpp +++ b/tck-test/TestSubscriber.cpp @@ -8,7 +8,7 @@ using namespace folly; -namespace reactivesocket { +namespace rsocket { namespace tck { TestSubscriber::TestSubscriber(int initialRequestN) diff --git a/tck-test/TestSubscriber.h b/tck-test/TestSubscriber.h index 8e374fd62..a539702e0 100644 --- a/tck-test/TestSubscriber.h +++ b/tck-test/TestSubscriber.h @@ -9,7 +9,7 @@ #include "src/Payload.h" #include "yarpl/flowable/Subscriber.h" -namespace reactivesocket { +namespace rsocket { namespace tck { class TestSubscriber : public yarpl::flowable::Subscriber { diff --git a/tck-test/TestSuite.cpp b/tck-test/TestSuite.cpp index 025a55050..0e0dad89e 100644 --- a/tck-test/TestSuite.cpp +++ b/tck-test/TestSuite.cpp @@ -4,7 +4,7 @@ #include -namespace reactivesocket { +namespace rsocket { namespace tck { bool TestCommand::valid() const { diff --git a/tck-test/TestSuite.h b/tck-test/TestSuite.h index 2f48b169a..fed68aa83 100644 --- a/tck-test/TestSuite.h +++ b/tck-test/TestSuite.h @@ -5,7 +5,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { namespace tck { class TestCommand { diff --git a/tck-test/TypedCommands.h b/tck-test/TypedCommands.h index cd62e5940..c1ee59cc6 100644 --- a/tck-test/TypedCommands.h +++ b/tck-test/TypedCommands.h @@ -7,7 +7,7 @@ #include "tck-test/TestSuite.h" -namespace reactivesocket { +namespace rsocket { namespace tck { class TypedTestCommand { diff --git a/tck-test/client.cpp b/tck-test/client.cpp index 9a88a2eed..763fd44e4 100644 --- a/tck-test/client.cpp +++ b/tck-test/client.cpp @@ -23,8 +23,8 @@ DEFINE_string( "Comma separated names of tests to run. By default run all tests"); DEFINE_int32(timeout, 5, "timeout (in secs) for connecting to the server"); -using namespace reactivesocket; -using namespace reactivesocket::tck; +using namespace rsocket; +using namespace rsocket::tck; namespace { diff --git a/tck-test/server.cpp b/tck-test/server.cpp index 8452dfbae..7ca3bcff1 100644 --- a/tck-test/server.cpp +++ b/tck-test/server.cpp @@ -19,7 +19,7 @@ #include "tck-test/MarbleProcessor.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace ::folly; using namespace yarpl; @@ -107,7 +107,7 @@ class Callback : public AsyncServerSocket::AcceptCallback { std::shared_ptr stats; if (FLAGS_enable_stats_printer) { - stats.reset(new reactivesocket::StatsPrinter()); + stats.reset(new rsocket::StatsPrinter()); } else { stats = RSocketStats::noop(); } diff --git a/test/PayloadTest.cpp b/test/PayloadTest.cpp index 7fa09e352..c617ba4d7 100644 --- a/test/PayloadTest.cpp +++ b/test/PayloadTest.cpp @@ -8,7 +8,7 @@ #include "src/framing/FrameSerializer_v0_1.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; TEST(PayloadTest, EmptyMetadata) { Payload p("some error message"); diff --git a/test/ServerConnectionAcceptorTest.cpp b/test/ServerConnectionAcceptorTest.cpp index 20eb9feb5..40ee5611d 100644 --- a/test/ServerConnectionAcceptorTest.cpp +++ b/test/ServerConnectionAcceptorTest.cpp @@ -12,7 +12,7 @@ #include #include -using namespace reactivesocket; +using namespace rsocket; using namespace testing; class MockConnectionHandler : public ConnectionHandler { diff --git a/test/StreamStateTest.cpp b/test/StreamStateTest.cpp index dfab1c09e..0d1df1490 100644 --- a/test/StreamStateTest.cpp +++ b/test/StreamStateTest.cpp @@ -6,7 +6,7 @@ #include "src/statemachine/StreamState.h" #include "test/test_utils/MockStats.h" -using namespace reactivesocket; +using namespace rsocket; using namespace testing; class StreamStateTest : public Test { diff --git a/test/deprecated/ReactiveSocket.cpp b/test/deprecated/ReactiveSocket.cpp index 2cec90b95..40ffa5963 100644 --- a/test/deprecated/ReactiveSocket.cpp +++ b/test/deprecated/ReactiveSocket.cpp @@ -13,7 +13,7 @@ #include "src/framing/FrameTransport.h" #include "src/temporary_home/RequestHandler.h" -namespace reactivesocket { +namespace rsocket { ReactiveSocket::~ReactiveSocket() { debugCheckCorrectExecutor(); diff --git a/test/deprecated/ReactiveSocket.h b/test/deprecated/ReactiveSocket.h index 3a6caeefa..9984c6575 100644 --- a/test/deprecated/ReactiveSocket.h +++ b/test/deprecated/ReactiveSocket.h @@ -14,7 +14,7 @@ namespace folly { class Executor; } -namespace reactivesocket { +namespace rsocket { class ClientResumeStatusCallback; class RSocketStateMachine; diff --git a/test/deprecated/ReactiveSocketConcurrencyTest.cpp b/test/deprecated/ReactiveSocketConcurrencyTest.cpp index 3feaea804..8e8f15873 100644 --- a/test/deprecated/ReactiveSocketConcurrencyTest.cpp +++ b/test/deprecated/ReactiveSocketConcurrencyTest.cpp @@ -20,7 +20,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace yarpl; class ClientSideConcurrencyTest : public testing::Test { diff --git a/test/deprecated/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp index f995a81d6..3cde6157a 100644 --- a/test/deprecated/ReactiveSocketTest.cpp +++ b/test/deprecated/ReactiveSocketTest.cpp @@ -21,7 +21,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace std::string_literals; using namespace yarpl; diff --git a/test/deprecated/SubscriberBaseTest.cpp b/test/deprecated/SubscriberBaseTest.cpp index 78153ba6d..bdfc4e0c6 100644 --- a/test/deprecated/SubscriberBaseTest.cpp +++ b/test/deprecated/SubscriberBaseTest.cpp @@ -6,7 +6,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; class SubscriberBaseMock : public SubscriberBaseT { public: diff --git a/test/framing/FrameTest.cpp b/test/framing/FrameTest.cpp index b8f9793eb..00676d930 100644 --- a/test/framing/FrameTest.cpp +++ b/test/framing/FrameTest.cpp @@ -9,7 +9,7 @@ #include "src/framing/FrameSerializer.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; // TODO(stupaq): tests with malformed frames diff --git a/test/framing/FrameTransportTest.cpp b/test/framing/FrameTransportTest.cpp index 9f9491b23..4df80c67e 100644 --- a/test/framing/FrameTransportTest.cpp +++ b/test/framing/FrameTransportTest.cpp @@ -6,10 +6,10 @@ #include "test/test_utils/InlineConnection.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; TEST(FrameTransportTest, OnSubscribeAfterClose) { - class NullSubscription : public reactivesocket::Subscription { + class NullSubscription : public rsocket::Subscription { public: // Subscription methods void request(size_t n) noexcept override {} diff --git a/test/framing/FramedReaderTest.cpp b/test/framing/FramedReaderTest.cpp index a40f2443e..d184bf21b 100644 --- a/test/framing/FramedReaderTest.cpp +++ b/test/framing/FramedReaderTest.cpp @@ -15,7 +15,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; TEST(FramedReaderTest, Read1Frame) { auto frameSubscriber = diff --git a/test/framing/FramedWriterTest.cpp b/test/framing/FramedWriterTest.cpp index ac0807559..00bb097b0 100644 --- a/test/framing/FramedWriterTest.cpp +++ b/test/framing/FramedWriterTest.cpp @@ -11,7 +11,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; TEST(FramedWriterTest, Subscribe) { auto subscriber = diff --git a/test/handlers/HelloStreamRequestHandler.cpp b/test/handlers/HelloStreamRequestHandler.cpp index d4e226fc6..e6da782fa 100644 --- a/test/handlers/HelloStreamRequestHandler.cpp +++ b/test/handlers/HelloStreamRequestHandler.cpp @@ -4,17 +4,17 @@ #include #include "yarpl/Flowable.h" -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace yarpl; using namespace yarpl::flowable; namespace rsocket { namespace tests { /// Handles a new inbound Stream requested by the other end. -Reference> +Reference> HelloStreamRequestHandler::handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) { + rsocket::Payload request, + rsocket::StreamId streamId) { LOG(INFO) << "HelloStreamRequestHandler.handleRequestStream " << request; // string from payload data diff --git a/test/handlers/HelloStreamRequestHandler.h b/test/handlers/HelloStreamRequestHandler.h index 92b4547c8..261293c94 100644 --- a/test/handlers/HelloStreamRequestHandler.h +++ b/test/handlers/HelloStreamRequestHandler.h @@ -16,10 +16,10 @@ namespace tests { class HelloStreamRequestHandler : public RSocketResponder { public: /// Handles a new inbound Stream requested by the other end. - yarpl::Reference> + yarpl::Reference> handleRequestStream( - reactivesocket::Payload request, - reactivesocket::StreamId streamId) override; + rsocket::Payload request, + rsocket::StreamId streamId) override; }; } } diff --git a/test/integration/ClientUtils.h b/test/integration/ClientUtils.h index 240b29164..53de0dbfe 100644 --- a/test/integration/ClientUtils.h +++ b/test/integration/ClientUtils.h @@ -12,7 +12,7 @@ #include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" -namespace reactivesocket { +namespace rsocket { namespace tests { class MyConnectCallback : public folly::AsyncSocket::ConnectCallback { diff --git a/test/integration/ServerFixture.cpp b/test/integration/ServerFixture.cpp index 10a9f78f7..6040bbd6d 100644 --- a/test/integration/ServerFixture.cpp +++ b/test/integration/ServerFixture.cpp @@ -6,7 +6,7 @@ #include -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace yarpl; using folly::AsyncServerSocket; diff --git a/test/integration/WarmResumptionTest.cpp b/test/integration/WarmResumptionTest.cpp index 674fafd96..3aa6e99f3 100644 --- a/test/integration/WarmResumptionTest.cpp +++ b/test/integration/WarmResumptionTest.cpp @@ -12,7 +12,7 @@ #include "test/integration/ServerFixture.h" using namespace std::chrono_literals; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace ::testing; using namespace yarpl; diff --git a/test/internal/AllowanceSemaphoreTest.cpp b/test/internal/AllowanceSemaphoreTest.cpp index 7650d0432..7a60d180c 100644 --- a/test/internal/AllowanceSemaphoreTest.cpp +++ b/test/internal/AllowanceSemaphoreTest.cpp @@ -5,7 +5,7 @@ #include "src/internal/AllowanceSemaphore.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; TEST(AllowanceSemaphoreTest, Finite) { AllowanceSemaphore sem; diff --git a/test/internal/FollyKeepaliveTimerTest.cpp b/test/internal/FollyKeepaliveTimerTest.cpp index 5e9642e09..b94acc7fe 100644 --- a/test/internal/FollyKeepaliveTimerTest.cpp +++ b/test/internal/FollyKeepaliveTimerTest.cpp @@ -12,7 +12,7 @@ #include "src/framing/FramedDuplexConnection.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; namespace { class MockConnectionAutomaton : public FrameSink { diff --git a/test/internal/OneToOneRingBufferTest.cpp b/test/internal/OneToOneRingBufferTest.cpp index 0d9c04971..4fca95bb7 100644 --- a/test/internal/OneToOneRingBufferTest.cpp +++ b/test/internal/OneToOneRingBufferTest.cpp @@ -9,9 +9,9 @@ #include "src/concurrent/OneToOneRingBuffer.h" -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace ::testing; -using namespace ::reactivesocket::RingBufferDescriptor; +using namespace ::rsocket::RingBufferDescriptor; using buffer_t = std::array; using odd_sized_buffer_t = std::array; diff --git a/test/internal/ReactiveStreamsMocksCompat.h b/test/internal/ReactiveStreamsMocksCompat.h index 958954006..a0035e2bb 100644 --- a/test/internal/ReactiveStreamsMocksCompat.h +++ b/test/internal/ReactiveStreamsMocksCompat.h @@ -11,7 +11,7 @@ class exception_wrapper; /// This header defines aliases to the mocks provided by the ReactiveStream /// specification, which replace std::exception_ptr with more efficient /// folly::exception_wrapper. -namespace reactivesocket { +namespace rsocket { template using MockSubscriber = diff --git a/test/resumption/ReactiveSocketResumabilityTest.cpp b/test/resumption/ReactiveSocketResumabilityTest.cpp index 800f7124f..1a27c4c3d 100644 --- a/test/resumption/ReactiveSocketResumabilityTest.cpp +++ b/test/resumption/ReactiveSocketResumabilityTest.cpp @@ -11,7 +11,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace yarpl; TEST(ReactiveSocketResumabilityTest, Disconnect) { diff --git a/test/resumption/ResumeCacheTest.cpp b/test/resumption/ResumeCacheTest.cpp index 24a942a2b..aa1c5c066 100644 --- a/test/resumption/ResumeCacheTest.cpp +++ b/test/resumption/ResumeCacheTest.cpp @@ -14,7 +14,7 @@ #include "test/test_utils/MockStats.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; class FrameTransportMock : public FrameTransport { public: diff --git a/test/resumption/ResumeIdentificationTokenTest.cpp b/test/resumption/ResumeIdentificationTokenTest.cpp index ca0eb8dce..ee61b97a6 100644 --- a/test/resumption/ResumeIdentificationTokenTest.cpp +++ b/test/resumption/ResumeIdentificationTokenTest.cpp @@ -6,7 +6,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; TEST(ResumeIdentificationTokenTest, ToString) { ResumeIdentificationToken token; diff --git a/test/resumption/TcpResumeClient.cpp b/test/resumption/TcpResumeClient.cpp index e1cf43e7f..a2229cca8 100644 --- a/test/resumption/TcpResumeClient.cpp +++ b/test/resumption/TcpResumeClient.cpp @@ -17,7 +17,7 @@ #include "test/test_utils/StatsPrinter.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace ::folly; using namespace yarpl; diff --git a/test/resumption/TcpResumeServer.cpp b/test/resumption/TcpResumeServer.cpp index 71fc6839e..bec701223 100644 --- a/test/resumption/TcpResumeServer.cpp +++ b/test/resumption/TcpResumeServer.cpp @@ -6,17 +6,17 @@ #include #include "src/framing/FrameTransport.h" +#include "src/framing/FramedDuplexConnection.h" #include "src/temporary_home/NullRequestHandler.h" #include "src/temporary_home/ServerConnectionAcceptor.h" -#include "test/deprecated/ReactiveSocket.h" #include "src/temporary_home/SubscriptionBase.h" -#include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" +#include "test/deprecated/ReactiveSocket.h" #include "test/test_utils/PrintSubscriber.h" #include "test/test_utils/StatsPrinter.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace ::folly; using namespace yarpl; @@ -30,7 +30,8 @@ std::vector< class ServerSubscription : public yarpl::flowable::Subscription { public: - explicit ServerSubscription(yarpl::Reference> response) + explicit ServerSubscription( + yarpl::Reference> response) : response_(std::move(response)) {} ~ServerSubscription() { @@ -66,7 +67,8 @@ class ServerRequestHandler : public DefaultRequestHandler { void handleRequestStream( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override { + const yarpl::Reference>& + response) noexcept override { LOG(INFO) << "ServerRequestHandler.handleRequestStream " << request; response->onSubscribe(make_ref(response)); @@ -91,41 +93,44 @@ class ServerRequestHandler : public DefaultRequestHandler { return nullptr; } - bool handleResume( - ResumeParameters) noexcept override { + bool handleResume(ResumeParameters) noexcept override { CHECK(false) << "unexpected call"; return false; } - void handleCleanResume( - yarpl::Reference response) noexcept override { + void handleCleanResume(yarpl::Reference + response) noexcept override { LOG(INFO) << "clean resume stream" << "\n"; } - void handleDirtyResume( - yarpl::Reference response) noexcept override { + void handleDirtyResume(yarpl::Reference + response) noexcept override { LOG(INFO) << "dirty resume stream" << "\n"; } void onSubscriptionPaused( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "subscription paused " << &subscription; } void onSubscriptionResumed( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "subscription resumed " << &subscription; } - void onSubscriberPaused(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberPaused( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "subscriber paused " << &subscriber; } - void onSubscriberResumed(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberResumed( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "subscriber resumed " << &subscriber; } @@ -147,9 +152,8 @@ class MyConnectionHandler : public ConnectionHandler { std::unique_ptr requestHandler = std::make_unique(nullptr); - std::unique_ptr rs = - ReactiveSocket::disconnectedServer( - eventBase_, std::move(requestHandler), stats_); + std::unique_ptr rs = ReactiveSocket::disconnectedServer( + eventBase_, std::move(requestHandler), stats_); rs->onConnected([]() { LOG(INFO) << "socket connected"; }); rs->onDisconnected([rs = rs.get()](const folly::exception_wrapper& ex) { @@ -263,7 +267,7 @@ int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); google::InstallFailureSignalHandler(); - auto statsPrinter = std::make_shared(); + auto statsPrinter = std::make_shared(); EventBase eventBase; auto thread = std::thread([&eventBase]() { eventBase.loopForever(); }); diff --git a/test/statemachine/PublisherBaseTest.cpp b/test/statemachine/PublisherBaseTest.cpp index 878a0154e..23d85c6f0 100644 --- a/test/statemachine/PublisherBaseTest.cpp +++ b/test/statemachine/PublisherBaseTest.cpp @@ -9,7 +9,7 @@ #include using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; using namespace yarpl; namespace { @@ -25,7 +25,7 @@ class UserSubscriber : public yarpl::flowable::Subscriber, private Publ publisherSubscribe(std::move(subscription)); } - void onNext(::reactivesocket::Payload element) noexcept override { + void onNext(::rsocket::Payload element) noexcept override { FAIL(); } diff --git a/test/statemachine/RSocketStateMachineTest.cpp b/test/statemachine/RSocketStateMachineTest.cpp index b19722d3b..1ad58c23d 100644 --- a/test/statemachine/RSocketStateMachineTest.cpp +++ b/test/statemachine/RSocketStateMachineTest.cpp @@ -14,7 +14,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; static std::unique_ptr makeInvalidFrameHeader() { // Create a header without the stream id diff --git a/test/streams/Mocks.h b/test/streams/Mocks.h index 403214ab2..d9d0696b0 100644 --- a/test/streams/Mocks.h +++ b/test/streams/Mocks.h @@ -147,7 +147,7 @@ class MockSubscription : public yarpl::flowable::Subscription { } // flowable } // yarpl -namespace reactivesocket { +namespace rsocket { /// GoogleMock-compatible Publisher implementation for fast prototyping. /// UnmanagedMockPublisher's lifetime MUST be managed externally. diff --git a/test/test_utils/InlineConnection.cpp b/test/test_utils/InlineConnection.cpp index b9bcd2287..fef1d80bc 100644 --- a/test/test_utils/InlineConnection.cpp +++ b/test/test_utils/InlineConnection.cpp @@ -6,7 +6,7 @@ #include #include "test/streams/Mocks.h" -namespace reactivesocket { +namespace rsocket { InlineConnection::~InlineConnection() { this_->instanceTerminated_ = true; diff --git a/test/test_utils/InlineConnection.h b/test/test_utils/InlineConnection.h index 624474885..b95211fd4 100644 --- a/test/test_utils/InlineConnection.h +++ b/test/test_utils/InlineConnection.h @@ -6,7 +6,7 @@ #include "src/DuplexConnection.h" #include "src/internal/ReactiveStreamsCompat.h" -namespace reactivesocket { +namespace rsocket { /// An intra-thread implementation of DuplexConnection that synchronously passes /// signals to the other connection it was connected to. diff --git a/test/test_utils/InlineConnectionTest.cpp b/test/test_utils/InlineConnectionTest.cpp index f5738f7f8..25755f56f 100644 --- a/test/test_utils/InlineConnectionTest.cpp +++ b/test/test_utils/InlineConnectionTest.cpp @@ -8,7 +8,7 @@ #include "test/streams/Mocks.h" using namespace ::testing; -using namespace ::reactivesocket; +using namespace ::rsocket; TEST(InlineConnectionTest, PingPong) { // InlineConnection forward appropriate calls in-line, hence the order of mock diff --git a/test/test_utils/MockKeepaliveTimer.h b/test/test_utils/MockKeepaliveTimer.h index 97d81d656..e6e18f83c 100644 --- a/test/test_utils/MockKeepaliveTimer.h +++ b/test/test_utils/MockKeepaliveTimer.h @@ -10,7 +10,7 @@ #include "src/statemachine/RSocketStateMachine.h" #include "test/deprecated/ReactiveSocket.h" -namespace reactivesocket { +namespace rsocket { class MockKeepaliveTimer : public KeepaliveTimer { public: MOCK_METHOD1(start, void(const std::shared_ptr&)); diff --git a/test/test_utils/MockRequestHandler.h b/test/test_utils/MockRequestHandler.h index 9893685d8..241cfc488 100644 --- a/test/test_utils/MockRequestHandler.h +++ b/test/test_utils/MockRequestHandler.h @@ -9,7 +9,7 @@ #include "src/Payload.h" #include "src/temporary_home/RequestHandler.h" -namespace reactivesocket { +namespace rsocket { class MockRequestHandler : public RequestHandler { public: diff --git a/test/test_utils/MockStats.h b/test/test_utils/MockStats.h index af3bb55f6..88a85fbb7 100644 --- a/test/test_utils/MockStats.h +++ b/test/test_utils/MockStats.h @@ -10,7 +10,7 @@ #include "src/Payload.h" -namespace reactivesocket { +namespace rsocket { class MockStats : public RSocketStats { public: @@ -20,10 +20,10 @@ class MockStats : public RSocketStats { MOCK_METHOD2( duplexConnectionCreated, - void(const std::string&, reactivesocket::DuplexConnection*)); + void(const std::string&, rsocket::DuplexConnection*)); MOCK_METHOD2( duplexConnectionClosed, - void(const std::string&, reactivesocket::DuplexConnection*)); + void(const std::string&, rsocket::DuplexConnection*)); MOCK_METHOD1(bytesWritten, void(size_t)); MOCK_METHOD1(bytesRead, void(size_t)); diff --git a/test/test_utils/PrintSubscriber.cpp b/test/test_utils/PrintSubscriber.cpp index 0dd0e900b..7b11d3720 100644 --- a/test/test_utils/PrintSubscriber.cpp +++ b/test/test_utils/PrintSubscriber.cpp @@ -6,7 +6,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { PrintSubscriber::~PrintSubscriber() { LOG(INFO) << "~PrintSubscriber " << this; diff --git a/test/test_utils/PrintSubscriber.h b/test/test_utils/PrintSubscriber.h index 0dbacfe01..8d8959d3c 100644 --- a/test/test_utils/PrintSubscriber.h +++ b/test/test_utils/PrintSubscriber.h @@ -5,7 +5,7 @@ #include "src/Payload.h" #include "yarpl/flowable/Subscriber.h" -namespace reactivesocket { +namespace rsocket { class PrintSubscriber : public yarpl::flowable::Subscriber { public: ~PrintSubscriber(); diff --git a/test/test_utils/StatsPrinter.cpp b/test/test_utils/StatsPrinter.cpp index 14f1ec073..f1795c4c4 100644 --- a/test/test_utils/StatsPrinter.cpp +++ b/test/test_utils/StatsPrinter.cpp @@ -3,7 +3,7 @@ #include "StatsPrinter.h" #include -namespace reactivesocket { +namespace rsocket { void StatsPrinter::socketCreated() { LOG(INFO) << "socketCreated"; } @@ -18,13 +18,13 @@ void StatsPrinter::socketDisconnected() { void StatsPrinter::duplexConnectionCreated( const std::string& type, - reactivesocket::DuplexConnection* connection) { + rsocket::DuplexConnection* connection) { LOG(INFO) << "connectionCreated " << type; } void StatsPrinter::duplexConnectionClosed( const std::string& type, - reactivesocket::DuplexConnection* connection) { + rsocket::DuplexConnection* connection) { LOG(INFO) << "connectionClosed " << type; } diff --git a/test/test_utils/StatsPrinter.h b/test/test_utils/StatsPrinter.h index 426ebb567..b5a107d5c 100644 --- a/test/test_utils/StatsPrinter.h +++ b/test/test_utils/StatsPrinter.h @@ -5,7 +5,7 @@ #include #include -namespace reactivesocket { +namespace rsocket { class StatsPrinter : public RSocketStats { public: void socketCreated() override; @@ -14,10 +14,10 @@ class StatsPrinter : public RSocketStats { void duplexConnectionCreated( const std::string& type, - reactivesocket::DuplexConnection* connection) override; + rsocket::DuplexConnection* connection) override; void duplexConnectionClosed( const std::string& type, - reactivesocket::DuplexConnection* connection) override; + rsocket::DuplexConnection* connection) override; void bytesWritten(size_t bytes) override; void bytesRead(size_t bytes) override; From f154f0c1fde388c660c0f7ee3724bb954ad14c2b Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 07:15:39 -0700 Subject: [PATCH 15/31] clang format everything (#444) --- benchmarks/Baselines.cpp | 509 +++++++++--------- benchmarks/RequestResponseLatency.cpp | 237 ++++---- benchmarks/RequestResponseThroughput.cpp | 403 +++++++------- benchmarks/StreamThroughput.cpp | 352 ++++++------ .../ConditionalRequestHandling_Server.cpp | 4 +- .../JsonRequestHandler.h | 7 +- .../TextRequestHandler.h | 11 +- examples/util/ExampleSubscriber.h | 3 +- src/ConnectionSetupRequest.cpp | 3 +- src/ConnectionSetupRequest.h | 7 +- src/Payload.cpp | 8 +- src/RSocketClient.cpp | 6 +- src/RSocketClient.h | 2 +- src/RSocketConnectionHandler.cpp | 2 +- src/RSocketConnectionHandler.h | 2 +- src/RSocketParameters.h | 6 +- src/RSocketRequester.cpp | 6 +- src/RSocketRequester.h | 14 +- src/RSocketResponder.h | 8 +- src/RSocketServer.cpp | 3 +- src/RSocketServer.h | 8 +- src/framing/FrameTransport.h | 6 +- src/framing/FramedDuplexConnection.h | 4 +- src/framing/FramedReader.h | 3 +- src/framing/FramedWriter.h | 7 +- src/internal/ResumeCache.cpp | 2 +- src/internal/ResumeCache.h | 2 +- src/statemachine/ChannelRequester.cpp | 7 +- src/statemachine/ChannelRequester.h | 5 +- src/statemachine/ChannelResponder.cpp | 15 +- src/statemachine/ChannelResponder.h | 8 +- src/statemachine/ConsumerBase.cpp | 9 +- src/statemachine/ConsumerBase.h | 12 +- src/statemachine/PublisherBase.h | 7 +- src/statemachine/RSocketStateMachine.cpp | 64 ++- src/statemachine/RSocketStateMachine.h | 28 +- src/statemachine/RequestResponseRequester.cpp | 12 +- src/statemachine/RequestResponseRequester.h | 8 +- src/statemachine/RequestResponseResponder.cpp | 3 +- src/statemachine/RequestResponseResponder.h | 6 +- src/statemachine/StreamRequester.cpp | 7 +- src/statemachine/StreamRequester.h | 7 +- src/statemachine/StreamResponder.h | 6 +- src/statemachine/StreamState.h | 3 +- src/statemachine/StreamStateMachineBase.cpp | 10 +- src/statemachine/StreamStateMachineBase.h | 7 +- src/statemachine/StreamsFactory.cpp | 26 +- src/statemachine/StreamsFactory.h | 4 +- src/statemachine/StreamsHandler.h | 2 +- src/temporary_home/Executor.cpp | 2 +- src/temporary_home/NullRequestHandler.cpp | 12 +- src/temporary_home/NullRequestHandler.h | 35 +- src/temporary_home/OldNewBridge.h | 21 +- src/temporary_home/RequestHandler.h | 40 +- .../ServerConnectionAcceptor.cpp | 2 +- src/temporary_home/ServerConnectionAcceptor.h | 2 +- src/temporary_home/SubscriberBase.h | 4 +- src/temporary_home/SubscriptionBase.h | 10 +- src/transports/tcp/TcpConnectionAcceptor.h | 11 +- tck-test/MarbleProcessor.cpp | 3 +- tck-test/TestSubscriber.h | 6 +- tck-test/client.cpp | 2 +- tck-test/server.cpp | 2 +- test/PayloadTest.cpp | 2 +- test/RSocketClientServerTest.cpp | 2 +- test/ServerConnectionAcceptorTest.cpp | 59 +- test/deprecated/ReactiveSocket.cpp | 20 +- test/deprecated/ReactiveSocket.h | 6 +- .../ReactiveSocketConcurrencyTest.cpp | 239 ++++---- test/deprecated/ReactiveSocketTest.cpp | 453 +++++++++------- test/deprecated/SubscriberBaseTest.cpp | 5 +- test/framing/FramedReaderTest.cpp | 26 +- test/handlers/HelloStreamRequestHandler.h | 9 +- test/integration/ClientUtils.h | 28 +- test/integration/ServerFixture.cpp | 36 +- test/integration/ServerFixture.h | 4 +- test/integration/WarmResumptionTest.cpp | 15 +- .../ReactiveSocketResumabilityTest.cpp | 14 +- test/resumption/ResumeCacheTest.cpp | 4 +- test/resumption/TcpResumeClient.cpp | 24 +- test/statemachine/PublisherBaseTest.cpp | 12 +- test/statemachine/RSocketStateMachineTest.cpp | 17 +- test/streams/Mocks.h | 29 +- test/test_utils/InlineConnectionTest.cpp | 26 +- test/test_utils/MockRequestHandler.h | 43 +- test/test_utils/PrintSubscriber.cpp | 5 +- test/test_utils/PrintSubscriber.h | 4 +- yarpl/examples/FlowableExamples.cpp | 2 +- yarpl/examples/yarpl-playground.cpp | 2 +- yarpl/include/yarpl/Refcounted.h | 24 +- .../include/yarpl/flowable/FlowableOperator.h | 27 +- .../yarpl/observable/ObservableOperator.h | 36 +- yarpl/include/yarpl/observable/Observables.h | 8 +- yarpl/include/yarpl/observable/Observers.h | 37 +- yarpl/include/yarpl/single/Single.h | 12 +- .../sources/Flowable_FromObservable.h | 2 - .../src/yarpl/single/SingleSubscriptions.cpp | 12 +- yarpl/test/FlowableTest.cpp | 71 ++- yarpl/test/Observable_test.cpp | 31 +- yarpl/test/ReferenceTest.cpp | 1 - yarpl/test/SubscriptionHelper_test.cpp | 102 ++-- 101 files changed, 1744 insertions(+), 1738 deletions(-) diff --git a/benchmarks/Baselines.cpp b/benchmarks/Baselines.cpp index d9e4c273c..7bdebf88d 100644 --- a/benchmarks/Baselines.cpp +++ b/benchmarks/Baselines.cpp @@ -1,102 +1,29 @@ // Copyright 2004-present Facebook. All Rights Reserved. +#include #include -#include -#include #include +#include #include -#include -#include #include #include +#include +#include #define MAX_MESSAGE_LENGTH (8 * 1024) #define PORT (35437) -static void BM_Baseline_TCP_Throughput(benchmark::State &state) -{ - std::atomic accepting{false}; - std::atomic accepted{false}; - std::atomic running{true}; - std::uint64_t totalBytesReceived = 0; - std::size_t msgLength = static_cast(state.range(0)); - std::size_t recvLength = static_cast(state.range(1)); - - std::thread t( - [&]() - { - int serverSock = socket(AF_INET, SOCK_STREAM, 0); - int sock = -1; - struct sockaddr_in addr; - socklen_t addrlen = sizeof(addr); - char message[MAX_MESSAGE_LENGTH]; - - std::memset(message, 0, sizeof(message)); - std::memset(&addr, 0, sizeof(addr)); - - if (serverSock < 0) - { - state.SkipWithError("socket acceptor"); - perror("acceptor socket"); - return; - } - - int enable = 1; - if (setsockopt(serverSock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable)) < 0) - { - state.SkipWithError("setsockopt SO_REUSEADDR"); - perror("setsocketopt SO_REUSEADDR"); - return; - } - - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(INADDR_ANY); - addr.sin_port = htons(PORT); - if (bind(serverSock, reinterpret_cast(&addr), addrlen) < 0) - { - state.SkipWithError("bind"); - perror("bind"); - return; - } - - if (listen(serverSock, 1) < 0) - { - state.SkipWithError("listen"); - perror("listen"); - return; - } - - accepting.store(true); - - if ((sock = accept(serverSock, reinterpret_cast(&addr), &addrlen)) < 0) - { - state.SkipWithError("accept"); - perror("accept"); - return; - } - - accepted.store(true); - - while (running) - { - if (send(sock, message, msgLength, 0) != static_cast(msgLength)) - { - state.SkipWithError("send too short"); - perror("send"); - return; - } - } - - close(sock); - close(serverSock); - }); - - while (!accepting) - { - std::this_thread::yield(); - } - - int sock = socket(AF_INET, SOCK_STREAM, 0); +static void BM_Baseline_TCP_Throughput(benchmark::State& state) { + std::atomic accepting{false}; + std::atomic accepted{false}; + std::atomic running{true}; + std::uint64_t totalBytesReceived = 0; + std::size_t msgLength = static_cast(state.range(0)); + std::size_t recvLength = static_cast(state.range(1)); + + std::thread t([&]() { + int serverSock = socket(AF_INET, SOCK_STREAM, 0); + int sock = -1; struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); char message[MAX_MESSAGE_LENGTH]; @@ -104,159 +31,132 @@ static void BM_Baseline_TCP_Throughput(benchmark::State &state) std::memset(message, 0, sizeof(message)); std::memset(&addr, 0, sizeof(addr)); - if (sock < 0) - { - state.SkipWithError("socket connector"); - perror("connector socket"); - return; + if (serverSock < 0) { + state.SkipWithError("socket acceptor"); + perror("acceptor socket"); + return; + } + + int enable = 1; + if (setsockopt( + serverSock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable)) < + 0) { + state.SkipWithError("setsockopt SO_REUSEADDR"); + perror("setsocketopt SO_REUSEADDR"); + return; } addr.sin_family = AF_INET; - addr.sin_addr.s_addr = inet_addr("127.0.0.1"); + addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(PORT); - if (connect(sock, reinterpret_cast(&addr), addrlen) < 0) - { - state.SkipWithError("connect"); - perror("connect"); - return; + if (bind(serverSock, reinterpret_cast(&addr), addrlen) < + 0) { + state.SkipWithError("bind"); + perror("bind"); + return; } - while (!accepted) - { - std::this_thread::yield(); + if (listen(serverSock, 1) < 0) { + state.SkipWithError("listen"); + perror("listen"); + return; } - while (state.KeepRunning()) - { - ssize_t recved = recv(sock, message, recvLength, 0); - - if (recved < 0) - { - state.SkipWithError("recv"); - perror("recv"); - return; - } + accepting.store(true); - totalBytesReceived += recved; + if ((sock = accept( + serverSock, reinterpret_cast(&addr), &addrlen)) < + 0) { + state.SkipWithError("accept"); + perror("accept"); + return; } - running.store(false); + accepted.store(true); + + while (running) { + if (send(sock, message, msgLength, 0) != + static_cast(msgLength)) { + state.SkipWithError("send too short"); + perror("send"); + return; + } + } close(sock); + close(serverSock); + }); + + while (!accepting) { + std::this_thread::yield(); + } + + int sock = socket(AF_INET, SOCK_STREAM, 0); + struct sockaddr_in addr; + socklen_t addrlen = sizeof(addr); + char message[MAX_MESSAGE_LENGTH]; + + std::memset(message, 0, sizeof(message)); + std::memset(&addr, 0, sizeof(addr)); + + if (sock < 0) { + state.SkipWithError("socket connector"); + perror("connector socket"); + return; + } + + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr("127.0.0.1"); + addr.sin_port = htons(PORT); + if (connect(sock, reinterpret_cast(&addr), addrlen) < 0) { + state.SkipWithError("connect"); + perror("connect"); + return; + } + + while (!accepted) { + std::this_thread::yield(); + } + + while (state.KeepRunning()) { + ssize_t recved = recv(sock, message, recvLength, 0); + + if (recved < 0) { + state.SkipWithError("recv"); + perror("recv"); + return; + } - state.SetBytesProcessed(totalBytesReceived); - state.SetItemsProcessed(totalBytesReceived / msgLength); + totalBytesReceived += recved; + } - t.join(); -} + running.store(false); -BENCHMARK(BM_Baseline_TCP_Throughput) - ->Args({40, 1024})->Args({40, 4096})->Args({80, 4096})->Args({4096, 4096}); - -static void BM_Baseline_TCP_Latency(benchmark::State &state) -{ - std::atomic accepting{false}; - std::atomic accepted{false}; - std::atomic running{true}; - std::uint64_t totalBytesReceived = 0; - std::uint64_t totalMsgsExchanged = 0; - std::size_t msgLength = static_cast(state.range(0)); - - std::thread t( - [&]() - { - int serverSock = socket(AF_INET, SOCK_STREAM, 0); - int sock = -1; - struct sockaddr_in addr; - socklen_t addrlen = sizeof(addr); - char message[MAX_MESSAGE_LENGTH]; - - std::memset(message, 0, sizeof(message)); - std::memset(&addr, 0, sizeof(addr)); - - if (serverSock < 0) - { - state.SkipWithError("socket acceptor"); - perror("acceptor socket"); - return; - } - - int enable = 1; -#if defined(SO_REUSEADDR) - if (setsockopt(serverSock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable)) < 0) - { - state.SkipWithError("setsockopt SO_REUSEADDR"); - perror("setsocketopt SO_REUSEADDR"); - return; - } -#endif -#if defined(SO_REUSEPORT) - enable = 1; - if (setsockopt(serverSock, SOL_SOCKET, SO_REUSEPORT, &enable, sizeof(enable)) < 0) - { - state.SkipWithError("setsockopt SO_REUSEPORT"); - perror("setsocketopt SO_REUSEPORT"); - return; - } -#endif + close(sock); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(INADDR_ANY); - addr.sin_port = htons(PORT); - if (bind(serverSock, reinterpret_cast(&addr), addrlen) < 0) - { - state.SkipWithError("bind"); - perror("bind"); - return; - } - - if (listen(serverSock, 1) < 0) - { - state.SkipWithError("listen"); - perror("listen"); - return; - } - - accepting.store(true); - - if ((sock = accept(serverSock, reinterpret_cast(&addr), &addrlen)) < 0) - { - state.SkipWithError("accept"); - perror("accept"); - return; - } - - accepted.store(true); - - while (running) - { - if (send(sock, message, msgLength, 0) != static_cast(msgLength)) - { - state.SkipWithError("thread send too short"); - perror("thread send"); - break; - } - - ssize_t recved = recv(sock, message, sizeof(message), 0); - - if (recved < 0 && running) // may end while blocked on recv, so ignore error if that happens - { - state.SkipWithError("thread recv"); - perror("thread recv"); - break; - } - } - - close(sock); - close(serverSock); - }); - - while (!accepting) - { - std::this_thread::yield(); - } + state.SetBytesProcessed(totalBytesReceived); + state.SetItemsProcessed(totalBytesReceived / msgLength); - int sock = socket(AF_INET, SOCK_STREAM, 0); + t.join(); +} + +BENCHMARK(BM_Baseline_TCP_Throughput) + ->Args({40, 1024}) + ->Args({40, 4096}) + ->Args({80, 4096}) + ->Args({4096, 4096}); + +static void BM_Baseline_TCP_Latency(benchmark::State& state) { + std::atomic accepting{false}; + std::atomic accepted{false}; + std::atomic running{true}; + std::uint64_t totalBytesReceived = 0; + std::uint64_t totalMsgsExchanged = 0; + std::size_t msgLength = static_cast(state.range(0)); + + std::thread t([&]() { + int serverSock = socket(AF_INET, SOCK_STREAM, 0); + int sock = -1; struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); char message[MAX_MESSAGE_LENGTH]; @@ -264,61 +164,144 @@ static void BM_Baseline_TCP_Latency(benchmark::State &state) std::memset(message, 0, sizeof(message)); std::memset(&addr, 0, sizeof(addr)); - if (sock < 0) - { - state.SkipWithError("socket connector"); - perror("connector socket"); - return; + if (serverSock < 0) { + state.SkipWithError("socket acceptor"); + perror("acceptor socket"); + return; } + int enable = 1; +#if defined(SO_REUSEADDR) + if (setsockopt( + serverSock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable)) < + 0) { + state.SkipWithError("setsockopt SO_REUSEADDR"); + perror("setsocketopt SO_REUSEADDR"); + return; + } +#endif +#if defined(SO_REUSEPORT) + enable = 1; + if (setsockopt( + serverSock, SOL_SOCKET, SO_REUSEPORT, &enable, sizeof(enable)) < + 0) { + state.SkipWithError("setsockopt SO_REUSEPORT"); + perror("setsocketopt SO_REUSEPORT"); + return; + } +#endif + addr.sin_family = AF_INET; - addr.sin_addr.s_addr = inet_addr("127.0.0.1"); + addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(PORT); - if (connect(sock, reinterpret_cast(&addr), addrlen) < 0) - { - state.SkipWithError("connect"); - perror("connect"); - return; + if (bind(serverSock, reinterpret_cast(&addr), addrlen) < + 0) { + state.SkipWithError("bind"); + perror("bind"); + return; } - while (!accepted) - { - std::this_thread::yield(); + if (listen(serverSock, 1) < 0) { + state.SkipWithError("listen"); + perror("listen"); + return; } - while (state.KeepRunning()) - { - ssize_t recved = recv(sock, message, sizeof(message), 0); - - if (recved < 0) - { - state.SkipWithError("main recv"); - perror("main recv"); - break; - } - - if (send(sock, message, msgLength, 0) != static_cast(msgLength)) - { - state.SkipWithError("main send too short"); - perror("main send"); - break; - } - - totalMsgsExchanged++; - totalBytesReceived += recved; + accepting.store(true); + + if ((sock = accept( + serverSock, reinterpret_cast(&addr), &addrlen)) < + 0) { + state.SkipWithError("accept"); + perror("accept"); + return; } - running.store(false); + accepted.store(true); + + while (running) { + if (send(sock, message, msgLength, 0) != + static_cast(msgLength)) { + state.SkipWithError("thread send too short"); + perror("thread send"); + break; + } + + ssize_t recved = recv(sock, message, sizeof(message), 0); + + if (recved < 0 && running) // may end while blocked on recv, so ignore + // error if that happens + { + state.SkipWithError("thread recv"); + perror("thread recv"); + break; + } + } close(sock); + close(serverSock); + }); + + while (!accepting) { + std::this_thread::yield(); + } + + int sock = socket(AF_INET, SOCK_STREAM, 0); + struct sockaddr_in addr; + socklen_t addrlen = sizeof(addr); + char message[MAX_MESSAGE_LENGTH]; + + std::memset(message, 0, sizeof(message)); + std::memset(&addr, 0, sizeof(addr)); + + if (sock < 0) { + state.SkipWithError("socket connector"); + perror("connector socket"); + return; + } + + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr("127.0.0.1"); + addr.sin_port = htons(PORT); + if (connect(sock, reinterpret_cast(&addr), addrlen) < 0) { + state.SkipWithError("connect"); + perror("connect"); + return; + } + + while (!accepted) { + std::this_thread::yield(); + } + + while (state.KeepRunning()) { + ssize_t recved = recv(sock, message, sizeof(message), 0); + + if (recved < 0) { + state.SkipWithError("main recv"); + perror("main recv"); + break; + } + + if (send(sock, message, msgLength, 0) != static_cast(msgLength)) { + state.SkipWithError("main send too short"); + perror("main send"); + break; + } + + totalMsgsExchanged++; + totalBytesReceived += recved; + } + + running.store(false); + + close(sock); - state.SetBytesProcessed(totalBytesReceived); - state.SetItemsProcessed(totalMsgsExchanged); + state.SetBytesProcessed(totalBytesReceived); + state.SetItemsProcessed(totalMsgsExchanged); - t.join(); + t.join(); } -BENCHMARK(BM_Baseline_TCP_Latency) - ->Arg(32)->Arg(128)->Arg(4096); +BENCHMARK(BM_Baseline_TCP_Latency)->Arg(32)->Arg(128)->Arg(4096); BENCHMARK_MAIN() diff --git a/benchmarks/RequestResponseLatency.cpp b/benchmarks/RequestResponseLatency.cpp index 089adcc80..2a1b8e534 100644 --- a/benchmarks/RequestResponseLatency.cpp +++ b/benchmarks/RequestResponseLatency.cpp @@ -1,14 +1,14 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include #include -#include -#include #include -#include -#include +#include #include #include +#include +#include +#include +#include #include "src/RSocket.h" #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" @@ -22,7 +22,6 @@ using namespace yarpl; DEFINE_string(host, "localhost", "host to connect to"); DEFINE_int32(port, 9898, "host:port to connect to"); - class BM_Subscription : public yarpl::flowable::Subscription { public: explicit BM_Subscription( @@ -30,26 +29,24 @@ class BM_Subscription : public yarpl::flowable::Subscription { size_t length) : subscriber_(std::move(subscriber)), data_(length, 'a'), - cancelled_(false) - { - } + cancelled_(false) {} private: void request(int64_t n) noexcept override { - LOG(INFO) << "requested=" << n; + LOG(INFO) << "requested=" << n; - if (cancelled_) { - LOG(INFO) << "emission stopped by cancellation"; - return; - } + if (cancelled_) { + LOG(INFO) << "emission stopped by cancellation"; + return; + } - subscriber_->onNext(Payload(data_)); - subscriber_->onComplete(); + subscriber_->onNext(Payload(data_)); + subscriber_->onComplete(); } void cancel() noexcept override { - LOG(INFO) << "cancellation received"; - cancelled_ = true; + LOG(INFO) << "cancellation received"; + cancelled_ = true; } yarpl::Reference> subscriber_; @@ -57,19 +54,19 @@ class BM_Subscription : public yarpl::flowable::Subscription { std::atomic_bool cancelled_; }; -class BM_RequestHandler : public RSocketResponder -{ +class BM_RequestHandler : public RSocketResponder { public: // TODO(lehecka): enable when we have support for request-response - yarpl::Reference> - handleRequestStream( + yarpl::Reference> handleRequestStream( Payload request, StreamId streamId) override { - CHECK(false) << "not implemented"; + CHECK(false) << "not implemented"; } // void handleRequestResponse( - // Payload request, StreamId streamId, const yarpl::Reference> &response) noexcept override + // Payload request, StreamId streamId, const + // yarpl::Reference> &response) + // noexcept override // { // LOG(INFO) << "BM_RequestHandler.handleRequestResponse " << request; @@ -78,78 +75,73 @@ class BM_RequestHandler : public RSocketResponder // } // std::shared_ptr handleSetupPayload( - // ReactiveSocket &socket, ConnectionSetupPayload request) noexcept override + // ReactiveSocket &socket, ConnectionSetupPayload request) noexcept + // override // { // LOG(INFO) << "BM_RequestHandler.handleSetupPayload " << request; // return nullptr; // } }; -class BM_Subscriber - : public yarpl::flowable::Subscriber { +class BM_Subscriber : public yarpl::flowable::Subscriber { public: ~BM_Subscriber() { - LOG(INFO) << "BM_Subscriber destroy " << this; + LOG(INFO) << "BM_Subscriber destroy " << this; } BM_Subscriber() - : initialRequest_(8), - thresholdForRequest_(initialRequest_ * 0.75) { - LOG(INFO) << "BM_Subscriber " << this << " created with => " - << " Initial Request: " << initialRequest_ - << " Threshold for re-request: " << thresholdForRequest_; + : initialRequest_(8), thresholdForRequest_(initialRequest_ * 0.75) { + LOG(INFO) << "BM_Subscriber " << this << " created with => " + << " Initial Request: " << initialRequest_ + << " Threshold for re-request: " << thresholdForRequest_; } - void onSubscribe(yarpl::Reference subscription) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onSubscribe"; - subscription_ = std::move(subscription); - requested_ = initialRequest_; - subscription_->request(initialRequest_); + void onSubscribe(yarpl::Reference + subscription) noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onSubscribe"; + subscription_ = std::move(subscription); + requested_ = initialRequest_; + subscription_->request(initialRequest_); } - void onNext(Payload element) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this - << " onNext as string: " << element.moveDataToString(); - - if (--requested_ == thresholdForRequest_) { - int toRequest = (initialRequest_ - thresholdForRequest_); - LOG(INFO) << "BM_Subscriber " << this << " requesting " << toRequest - << " more items"; - requested_ += toRequest; - subscription_->request(toRequest); - } + void onNext(Payload element) noexcept override { + LOG(INFO) << "BM_Subscriber " << this + << " onNext as string: " << element.moveDataToString(); + + if (--requested_ == thresholdForRequest_) { + int toRequest = (initialRequest_ - thresholdForRequest_); + LOG(INFO) << "BM_Subscriber " << this << " requesting " << toRequest + << " more items"; + requested_ += toRequest; + subscription_->request(toRequest); + } } - void onComplete() noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onComplete"; - terminated_ = true; - completed_ = true; - terminalEventCV_.notify_all(); + void onComplete() noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onComplete"; + terminated_ = true; + completed_ = true; + terminalEventCV_.notify_all(); } - void onError(std::exception_ptr ex) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onError " << folly::exceptionStr(ex); - terminated_ = true; - terminalEventCV_.notify_all(); + void onError(std::exception_ptr ex) noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onError " + << folly::exceptionStr(ex); + terminated_ = true; + terminalEventCV_.notify_all(); } - void awaitTerminalEvent() - { - LOG(INFO) << "BM_Subscriber " << this << " block thread"; - // now block this thread - std::unique_lock lk(m_); - // if shutdown gets implemented this would then be released by it - terminalEventCV_.wait(lk, [this] { return terminated_; }); - LOG(INFO) << "BM_Subscriber " << this << " unblocked"; + void awaitTerminalEvent() { + LOG(INFO) << "BM_Subscriber " << this << " block thread"; + // now block this thread + std::unique_lock lk(m_); + // if shutdown gets implemented this would then be released by it + terminalEventCV_.wait(lk, [this] { return terminated_; }); + LOG(INFO) << "BM_Subscriber " << this << " unblocked"; } - bool completed() - { - return completed_; + bool completed() { + return completed_; } private: @@ -163,33 +155,24 @@ class BM_Subscriber std::atomic_bool completed_{false}; }; -class BM_RsFixture : public benchmark::Fixture -{ +class BM_RsFixture : public benchmark::Fixture { public: - BM_RsFixture() : - host_(FLAGS_host), - port_(static_cast(FLAGS_port)), - serverRs_(RSocket::createServer( - std::make_unique( - TcpConnectionAcceptor::Options{port_}))), - handler_(std::make_shared()) - { - FLAGS_v = 0; - FLAGS_minloglevel = 6; - serverRs_->start([this](auto r) { return handler_; }); + BM_RsFixture() + : host_(FLAGS_host), + port_(static_cast(FLAGS_port)), + serverRs_(RSocket::createServer(std::make_unique( + TcpConnectionAcceptor::Options{port_}))), + handler_(std::make_shared()) { + FLAGS_v = 0; + FLAGS_minloglevel = 6; + serverRs_->start([this](auto r) { return handler_; }); } - virtual ~BM_RsFixture() - { - } + virtual ~BM_RsFixture() {} - void SetUp(const benchmark::State& state) noexcept override - { - } + void SetUp(const benchmark::State& state) noexcept override {} - void TearDown(const benchmark::State& state) noexcept override - { - } + void TearDown(const benchmark::State& state) noexcept override {} std::string host_; uint16_t port_; @@ -197,38 +180,38 @@ class BM_RsFixture : public benchmark::Fixture std::shared_ptr handler_; }; -BENCHMARK_F(BM_RsFixture, BM_RequestResponse_Latency)(benchmark::State &state) -{ - // TODO(lehecka): enable test -// folly::SocketAddress address; -// address.setFromHostPort(host_, port_); -// -// auto clientRs = RSocket::createClient(std::make_unique( -// std::move(address))); -// int reqs = 0; -// -// auto rs = clientRs->connect().get(); -// -// while (state.KeepRunning()) -// { -// auto sub = make_ref(); -// rs->requestResponse(Payload("BM_RequestResponse"))->subscribe(sub); -// -// while (!sub->completed()) -// { -// std::this_thread::yield(); -// } -// -// reqs++; -// } -// -// char label[256]; -// -// std::snprintf(label, sizeof(label), "Message Length: %d", MESSAGE_LENGTH); -// state.SetLabel(label); -// -// state.SetItemsProcessed(reqs); +BENCHMARK_F(BM_RsFixture, BM_RequestResponse_Latency)(benchmark::State& state) { + // TODO(lehecka): enable test + // folly::SocketAddress address; + // address.setFromHostPort(host_, port_); + // + // auto clientRs = + // RSocket::createClient(std::make_unique( + // std::move(address))); + // int reqs = 0; + // + // auto rs = clientRs->connect().get(); + // + // while (state.KeepRunning()) + // { + // auto sub = make_ref(); + // rs->requestResponse(Payload("BM_RequestResponse"))->subscribe(sub); + // + // while (!sub->completed()) + // { + // std::this_thread::yield(); + // } + // + // reqs++; + // } + // + // char label[256]; + // + // std::snprintf(label, sizeof(label), "Message Length: %d", + // MESSAGE_LENGTH); + // state.SetLabel(label); + // + // state.SetItemsProcessed(reqs); } BENCHMARK_MAIN() - diff --git a/benchmarks/RequestResponseThroughput.cpp b/benchmarks/RequestResponseThroughput.cpp index 50dce597b..f3af74563 100644 --- a/benchmarks/RequestResponseThroughput.cpp +++ b/benchmarks/RequestResponseThroughput.cpp @@ -1,14 +1,14 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include -#include -#include -#include #include -#include -#include +#include #include #include +#include +#include +#include +#include #include "src/RSocket.h" #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" @@ -24,234 +24,221 @@ DEFINE_string(host, "localhost", "host to connect to"); DEFINE_int32(port, 9898, "host:port to connect to"); class BM_Subscription : public SubscriptionBase { -public: - explicit BM_Subscription( - std::shared_ptr> subscriber, - size_t length) - : ExecutorBase(defaultExecutor()), + public: + explicit BM_Subscription( + std::shared_ptr> subscriber, + size_t length) + : ExecutorBase(defaultExecutor()), subscriber_(std::move(subscriber)), data_(length, 'a'), - cancelled_(false) - { - } - -private: - void requestImpl(size_t n) noexcept override - { - LOG(INFO) << "requested=" << n; + cancelled_(false) {} - if (cancelled_) { - LOG(INFO) << "emission stopped by cancellation"; - return; - } + private: + void requestImpl(size_t n) noexcept override { + LOG(INFO) << "requested=" << n; - subscriber_->onNext(Payload(data_)); - subscriber_->onComplete(); + if (cancelled_) { + LOG(INFO) << "emission stopped by cancellation"; + return; } - void cancelImpl() noexcept override - { - LOG(INFO) << "cancellation received"; - cancelled_ = true; - } + subscriber_->onNext(Payload(data_)); + subscriber_->onComplete(); + } - std::shared_ptr> subscriber_; - std::string data_; - std::atomic_bool cancelled_; -}; + void cancelImpl() noexcept override { + LOG(INFO) << "cancellation received"; + cancelled_ = true; + } -class BM_RequestHandler : public RSocketResponder -{ -public: - // TODO(lehecka): enable when we have support for request-response - yarpl::Reference> - handleRequestStream( - Payload request, - StreamId streamId) override { - CHECK(false) << "not implemented"; - } - - // void handleRequestResponse( - // Payload request, StreamId streamId, const std::shared_ptr> &response) noexcept override - // { - // LOG(INFO) << "BM_RequestHandler.handleRequestResponse " << request; - - // response->onSubscribe( - // std::make_shared(response, MESSAGE_LENGTH)); - // } - - // std::shared_ptr handleSetupPayload( - // ReactiveSocket &socket, ConnectionSetupPayload request) noexcept override - // { - // LOG(INFO) << "BM_RequestHandler.handleSetupPayload " << request; - // return nullptr; - // } + std::shared_ptr> subscriber_; + std::string data_; + std::atomic_bool cancelled_; }; -class BM_Subscriber - : public yarpl::flowable::Subscriber { -public: - ~BM_Subscriber() - { - LOG(INFO) << "BM_Subscriber destroy " << this; - } - - BM_Subscriber() - : initialRequest_(8), - thresholdForRequest_(initialRequest_ * 0.75) - { - LOG(INFO) << "BM_Subscriber " << this << " created with => " - << " Initial Request: " << initialRequest_ - << " Threshold for re-request: " << thresholdForRequest_; - } - - void onSubscribe(yarpl::Reference subscription) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onSubscribe"; - subscription_ = std::move(subscription); - requested_ = initialRequest_; - subscription_->request(initialRequest_); - } - - void onNext( Payload element) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this - << " onNext as string: " << element.moveDataToString(); +class BM_RequestHandler : public RSocketResponder { + public: + // TODO(lehecka): enable when we have support for request-response + yarpl::Reference> handleRequestStream( + Payload request, + StreamId streamId) override { + CHECK(false) << "not implemented"; + } + + // void handleRequestResponse( + // Payload request, StreamId streamId, const + // std::shared_ptr> &response) noexcept override + // { + // LOG(INFO) << "BM_RequestHandler.handleRequestResponse " << request; + + // response->onSubscribe( + // std::make_shared(response, MESSAGE_LENGTH)); + // } + + // std::shared_ptr handleSetupPayload( + // ReactiveSocket &socket, ConnectionSetupPayload request) noexcept + // override + // { + // LOG(INFO) << "BM_RequestHandler.handleSetupPayload " << request; + // return nullptr; + // } +}; - if (--requested_ == thresholdForRequest_) { - int toRequest = (initialRequest_ - thresholdForRequest_); - LOG(INFO) << "BM_Subscriber " << this << " requesting " << toRequest +class BM_Subscriber : public yarpl::flowable::Subscriber { + public: + ~BM_Subscriber() { + LOG(INFO) << "BM_Subscriber destroy " << this; + } + + BM_Subscriber() + : initialRequest_(8), thresholdForRequest_(initialRequest_ * 0.75) { + LOG(INFO) << "BM_Subscriber " << this << " created with => " + << " Initial Request: " << initialRequest_ + << " Threshold for re-request: " << thresholdForRequest_; + } + + void onSubscribe(yarpl::Reference + subscription) noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onSubscribe"; + subscription_ = std::move(subscription); + requested_ = initialRequest_; + subscription_->request(initialRequest_); + } + + void onNext(Payload element) noexcept override { + LOG(INFO) << "BM_Subscriber " << this + << " onNext as string: " << element.moveDataToString(); + + if (--requested_ == thresholdForRequest_) { + int toRequest = (initialRequest_ - thresholdForRequest_); + LOG(INFO) << "BM_Subscriber " << this << " requesting " << toRequest << " more items"; - requested_ += toRequest; - subscription_->request(toRequest); - } - } - - void onComplete() noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onComplete"; - terminated_ = true; - completed_ = true; - terminalEventCV_.notify_all(); - } - - void onError(std::exception_ptr ex) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onError " << folly::exceptionStr(ex); - terminated_ = true; - terminalEventCV_.notify_all(); - } - - void awaitTerminalEvent() - { - LOG(INFO) << "BM_Subscriber " << this << " block thread"; - // now block this thread - std::unique_lock lk(m_); - // if shutdown gets implemented this would then be released by it - terminalEventCV_.wait(lk, [this] { return terminated_; }); - LOG(INFO) << "BM_Subscriber " << this << " unblocked"; - } - - bool completed() - { - return completed_; - } - -private: - int initialRequest_; - int thresholdForRequest_; - int requested_; + requested_ += toRequest; + subscription_->request(toRequest); + } + } + + void onComplete() noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onComplete"; + terminated_ = true; + completed_ = true; + terminalEventCV_.notify_all(); + } + + void onError(std::exception_ptr ex) noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onError " + << folly::exceptionStr(ex); + terminated_ = true; + terminalEventCV_.notify_all(); + } + + void awaitTerminalEvent() { + LOG(INFO) << "BM_Subscriber " << this << " block thread"; + // now block this thread + std::unique_lock lk(m_); + // if shutdown gets implemented this would then be released by it + terminalEventCV_.wait(lk, [this] { return terminated_; }); + LOG(INFO) << "BM_Subscriber " << this << " unblocked"; + } + + bool completed() { + return completed_; + } + + private: + int initialRequest_; + int thresholdForRequest_; + int requested_; yarpl::Reference subscription_; - bool terminated_{false}; - std::mutex m_; - std::condition_variable terminalEventCV_; - std::atomic_bool completed_{false}; + bool terminated_{false}; + std::mutex m_; + std::condition_variable terminalEventCV_; + std::atomic_bool completed_{false}; }; -class BM_RsFixture : public benchmark::Fixture -{ -public: - BM_RsFixture() : - host_(FLAGS_host), +class BM_RsFixture : public benchmark::Fixture { + public: + BM_RsFixture() + : host_(FLAGS_host), port_(static_cast(FLAGS_port)), serverRs_(RSocket::createServer(std::make_unique( TcpConnectionAcceptor::Options{port_}))), - handler_(std::make_shared()) - { - FLAGS_v = 0; - FLAGS_minloglevel = 6; - serverRs_->start([this](auto r) { return handler_; }); - } + handler_(std::make_shared()) { + FLAGS_v = 0; + FLAGS_minloglevel = 6; + serverRs_->start([this](auto r) { return handler_; }); + } - virtual ~BM_RsFixture() - { - } + virtual ~BM_RsFixture() {} - void SetUp(const benchmark::State& state) override - { - } + void SetUp(const benchmark::State& state) override {} - void TearDown(const benchmark::State& state) override - { - } + void TearDown(const benchmark::State& state) override {} - std::string host_; - uint16_t port_; - std::unique_ptr serverRs_; - std::shared_ptr handler_; + std::string host_; + uint16_t port_; + std::unique_ptr serverRs_; + std::shared_ptr handler_; }; -BENCHMARK_DEFINE_F(BM_RsFixture, BM_RequestResponse_Throughput)(benchmark::State &state) -{ -// TODO(lehecka): enable test -// folly::SocketAddress address; -// address.setFromHostPort(host_, port_); -// -// auto clientRs = RSocket::createClient(std::make_unique( -// std::move(address))); -// int reqs = 0; -// int numSubscribers = state.range(0); -// int mask = numSubscribers - 1; -// -// yarpl::Reference subs[MAX_REQUESTS+1]; -// -// auto rs = clientRs->connect().get(); -// -// while (state.KeepRunning()) -// { -// int index = reqs & mask; -// -// if (nullptr != subs[index]) -// { -// while (!subs[index]->completed()) -// { -// std::this_thread::yield(); -// } -// -// subs[index].reset(); -// } -// -// subs[index] = make_ref(); -// rs->requestResponse(Payload("BM_RequestResponse"))->subscribe(subs[index]); -// reqs++; -// } -// -// for (int i = 0; i < numSubscribers; i++) -// { -// if (subs[i]) -// { -// subs[i]->awaitTerminalEvent(); -// } -// } -// -// char label[256]; -// -// std::snprintf(label, sizeof(label), "Max Requests: %d, Message Length: %d", numSubscribers, MESSAGE_LENGTH); -// state.SetLabel(label); -// -// state.SetItemsProcessed(reqs); +BENCHMARK_DEFINE_F(BM_RsFixture, BM_RequestResponse_Throughput) +(benchmark::State& state) { + // TODO(lehecka): enable test + // folly::SocketAddress address; + // address.setFromHostPort(host_, port_); + // + // auto clientRs = + // RSocket::createClient(std::make_unique( + // std::move(address))); + // int reqs = 0; + // int numSubscribers = state.range(0); + // int mask = numSubscribers - 1; + // + // yarpl::Reference subs[MAX_REQUESTS+1]; + // + // auto rs = clientRs->connect().get(); + // + // while (state.KeepRunning()) + // { + // int index = reqs & mask; + // + // if (nullptr != subs[index]) + // { + // while (!subs[index]->completed()) + // { + // std::this_thread::yield(); + // } + // + // subs[index].reset(); + // } + // + // subs[index] = make_ref(); + // rs->requestResponse(Payload("BM_RequestResponse"))->subscribe(subs[index]); + // reqs++; + // } + // + // for (int i = 0; i < numSubscribers; i++) + // { + // if (subs[i]) + // { + // subs[i]->awaitTerminalEvent(); + // } + // } + // + // char label[256]; + // + // std::snprintf(label, sizeof(label), "Max Requests: %d, Message Length: + // %d", numSubscribers, MESSAGE_LENGTH); + // state.SetLabel(label); + // + // state.SetItemsProcessed(reqs); } -BENCHMARK_REGISTER_F(BM_RsFixture, BM_RequestResponse_Throughput)->Arg(1)->Arg(2)->Arg(8)->Arg(16)->Arg(32); +BENCHMARK_REGISTER_F(BM_RsFixture, BM_RequestResponse_Throughput) + ->Arg(1) + ->Arg(2) + ->Arg(8) + ->Arg(16) + ->Arg(32); BENCHMARK_MAIN() diff --git a/benchmarks/StreamThroughput.cpp b/benchmarks/StreamThroughput.cpp index 030ce3938..a434c1717 100644 --- a/benchmarks/StreamThroughput.cpp +++ b/benchmarks/StreamThroughput.cpp @@ -1,14 +1,14 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include -#include -#include -#include #include -#include -#include +#include #include #include +#include +#include +#include +#include #include "src/RSocket.h" #include "src/temporary_home/OldNewBridge.h" #include "src/transports/tcp/TcpConnectionFactory.h" @@ -24,217 +24,193 @@ DEFINE_string(host, "localhost", "host to connect to"); DEFINE_int32(port, 9898, "host:port to connect to"); class BM_Subscription : public yarpl::flowable::Subscription { -public: - explicit BM_Subscription( - yarpl::Reference> subscriber, - size_t length) - : subscriber_(std::move(subscriber)), - data_(length, 'a'), - cancelled_(false) - { - } - -private: - void request(int64_t n) noexcept override { - LOG(INFO) << "requested=" << n << " currentElem=" << currentElem_; - - for (int64_t i = 0; i < n; i++) { - if (cancelled_) { - LOG(INFO) << "emission stopped by cancellation"; - return; - } - subscriber_->onNext(Payload(data_)); - currentElem_++; - } - } - - void cancel() noexcept override { - LOG(INFO) << "cancellation received"; - cancelled_ = true; - } - - yarpl::Reference> subscriber_; - std::string data_; - size_t currentElem_ = 0; - std::atomic_bool cancelled_; + public: + explicit BM_Subscription( + yarpl::Reference> subscriber, + size_t length) + : subscriber_(std::move(subscriber)), + data_(length, 'a'), + cancelled_(false) {} + + private: + void request(int64_t n) noexcept override { + LOG(INFO) << "requested=" << n << " currentElem=" << currentElem_; + + for (int64_t i = 0; i < n; i++) { + if (cancelled_) { + LOG(INFO) << "emission stopped by cancellation"; + return; + } + subscriber_->onNext(Payload(data_)); + currentElem_++; + } + } + + void cancel() noexcept override { + LOG(INFO) << "cancellation received"; + cancelled_ = true; + } + + yarpl::Reference> subscriber_; + std::string data_; + size_t currentElem_ = 0; + std::atomic_bool cancelled_; }; -class BM_RequestHandler : public RSocketResponder -{ -public: - yarpl::Reference> - handleRequestStream( - Payload request, - StreamId streamId) override { - CHECK(false) << "not implemented"; - // TODO(lehecka) need to implement new operator fromGenerator - // return yarpl::flowable::Flowables::fromGenerator< Payload>( - // []{return Payload(std::string(MESSAGE_LENGTH, 'a')); }); - } +class BM_RequestHandler : public RSocketResponder { + public: + yarpl::Reference> handleRequestStream( + Payload request, + StreamId streamId) override { + CHECK(false) << "not implemented"; + // TODO(lehecka) need to implement new operator fromGenerator + // return yarpl::flowable::Flowables::fromGenerator< Payload>( + // []{return Payload(std::string(MESSAGE_LENGTH, 'a')); }); + } }; -class BM_Subscriber - : public yarpl::flowable::Subscriber { -public: - ~BM_Subscriber() - { - LOG(INFO) << "BM_Subscriber destroy " << this; - } +class BM_Subscriber : public yarpl::flowable::Subscriber { + public: + ~BM_Subscriber() { + LOG(INFO) << "BM_Subscriber destroy " << this; + } - BM_Subscriber(int initialRequest) - : initialRequest_(initialRequest), + BM_Subscriber(int initialRequest) + : initialRequest_(initialRequest), thresholdForRequest_(initialRequest * 0.75), - received_(0) - { - LOG(INFO) << "BM_Subscriber " << this << " created with => " - << " Initial Request: " << initialRequest - << " Threshold for re-request: " << thresholdForRequest_; - } - - void onSubscribe(yarpl::Reference subscription) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onSubscribe"; - subscription_ = std::move(subscription); - requested_ = initialRequest_; - subscription_->request(initialRequest_); - } - - void onNext( Payload element) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this - << " onNext as string: " << element.moveDataToString(); - - received_.store(received_ + 1, std::memory_order_release); - - if (--requested_ == thresholdForRequest_) { - int toRequest = (initialRequest_ - thresholdForRequest_); - LOG(INFO) << "BM_Subscriber " << this << " requesting " << toRequest + received_(0) { + LOG(INFO) << "BM_Subscriber " << this << " created with => " + << " Initial Request: " << initialRequest + << " Threshold for re-request: " << thresholdForRequest_; + } + + void onSubscribe(yarpl::Reference + subscription) noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onSubscribe"; + subscription_ = std::move(subscription); + requested_ = initialRequest_; + subscription_->request(initialRequest_); + } + + void onNext(Payload element) noexcept override { + LOG(INFO) << "BM_Subscriber " << this + << " onNext as string: " << element.moveDataToString(); + + received_.store(received_ + 1, std::memory_order_release); + + if (--requested_ == thresholdForRequest_) { + int toRequest = (initialRequest_ - thresholdForRequest_); + LOG(INFO) << "BM_Subscriber " << this << " requesting " << toRequest << " more items"; - requested_ += toRequest; - subscription_->request(toRequest); - }; - - if (cancel_) - { - subscription_->cancel(); - } - } - - void onComplete() noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onComplete"; - terminated_ = true; - terminalEventCV_.notify_all(); - } - - void onError(std::exception_ptr ex) noexcept override - { - LOG(INFO) << "BM_Subscriber " << this << " onError " << folly::exceptionStr(ex); - terminated_ = true; - terminalEventCV_.notify_all(); - } - - void awaitTerminalEvent() - { - LOG(INFO) << "BM_Subscriber " << this << " block thread"; - // now block this thread - std::unique_lock lk(m_); - // if shutdown gets implemented this would then be released by it - terminalEventCV_.wait(lk, [this] { return terminated_; }); - LOG(INFO) << "BM_Subscriber " << this << " unblocked"; - } - - void cancel() - { - cancel_ = true; - } - - size_t received() - { - return received_.load(std::memory_order_acquire); - } - -private: - int initialRequest_; - int thresholdForRequest_; - int requested_; - yarpl::Reference subscription_; - bool terminated_{false}; - std::mutex m_; - std::condition_variable terminalEventCV_; - std::atomic_bool cancel_{false}; - std::atomic received_; + requested_ += toRequest; + subscription_->request(toRequest); + }; + + if (cancel_) { + subscription_->cancel(); + } + } + + void onComplete() noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onComplete"; + terminated_ = true; + terminalEventCV_.notify_all(); + } + + void onError(std::exception_ptr ex) noexcept override { + LOG(INFO) << "BM_Subscriber " << this << " onError " + << folly::exceptionStr(ex); + terminated_ = true; + terminalEventCV_.notify_all(); + } + + void awaitTerminalEvent() { + LOG(INFO) << "BM_Subscriber " << this << " block thread"; + // now block this thread + std::unique_lock lk(m_); + // if shutdown gets implemented this would then be released by it + terminalEventCV_.wait(lk, [this] { return terminated_; }); + LOG(INFO) << "BM_Subscriber " << this << " unblocked"; + } + + void cancel() { + cancel_ = true; + } + + size_t received() { + return received_.load(std::memory_order_acquire); + } + + private: + int initialRequest_; + int thresholdForRequest_; + int requested_; + yarpl::Reference subscription_; + bool terminated_{false}; + std::mutex m_; + std::condition_variable terminalEventCV_; + std::atomic_bool cancel_{false}; + std::atomic received_; }; -class BM_RsFixture : public benchmark::Fixture -{ -public: - BM_RsFixture() : - host_(FLAGS_host), +class BM_RsFixture : public benchmark::Fixture { + public: + BM_RsFixture() + : host_(FLAGS_host), port_(static_cast(FLAGS_port)), serverRs_(RSocket::createServer(std::make_unique( TcpConnectionAcceptor::Options{port_}))), - handler_(std::make_shared()) - { - FLAGS_minloglevel = 100; - serverRs_->start([this](auto r) { return handler_; }); - } + handler_(std::make_shared()) { + FLAGS_minloglevel = 100; + serverRs_->start([this](auto r) { return handler_; }); + } - virtual ~BM_RsFixture() - { - } + virtual ~BM_RsFixture() {} - void SetUp(const benchmark::State& state) noexcept override - { - } + void SetUp(const benchmark::State& state) noexcept override {} - void TearDown(const benchmark::State& state) noexcept override - { - } + void TearDown(const benchmark::State& state) noexcept override {} - std::string host_; - uint16_t port_; - std::unique_ptr serverRs_; - std::shared_ptr handler_; + std::string host_; + uint16_t port_; + std::unique_ptr serverRs_; + std::shared_ptr handler_; }; -BENCHMARK_DEFINE_F(BM_RsFixture, BM_Stream_Throughput)(benchmark::State &state) -{ - folly::SocketAddress address; - address.setFromHostPort(host_, port_); +BENCHMARK_DEFINE_F(BM_RsFixture, BM_Stream_Throughput) +(benchmark::State& state) { + folly::SocketAddress address; + address.setFromHostPort(host_, port_); - auto clientRs = RSocket::createClient(std::make_unique( - std::move(address))); + auto clientRs = RSocket::createClient( + std::make_unique(std::move(address))); - auto s = make_ref(state.range(0)); + auto s = make_ref(state.range(0)); - clientRs - ->connect() - .then( - [s](std::shared_ptr rs) - { - rs->requestStream(Payload("BM_Stream"))->subscribe( - std::move(s)); - }); + clientRs->connect().then([s](std::shared_ptr rs) { + rs->requestStream(Payload("BM_Stream"))->subscribe(std::move(s)); + }); - while (state.KeepRunning()) - { - std::this_thread::yield(); - } + while (state.KeepRunning()) { + std::this_thread::yield(); + } - size_t rcved = s->received(); + size_t rcved = s->received(); - s->cancel(); - s->awaitTerminalEvent(); + s->cancel(); + s->awaitTerminalEvent(); - char label[256]; + char label[256]; - std::snprintf(label, sizeof(label), "Message Length: %d", MESSAGE_LENGTH); - state.SetLabel(label); + std::snprintf(label, sizeof(label), "Message Length: %d", MESSAGE_LENGTH); + state.SetLabel(label); - state.SetItemsProcessed(rcved); + state.SetItemsProcessed(rcved); } -BENCHMARK_REGISTER_F(BM_RsFixture, BM_Stream_Throughput)->Arg(8)->Arg(32)->Arg(128); +BENCHMARK_REGISTER_F(BM_RsFixture, BM_Stream_Throughput) + ->Arg(8) + ->Arg(32) + ->Arg(128); BENCHMARK_MAIN() diff --git a/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp b/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp index cd980e19d..da26fdc72 100644 --- a/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp +++ b/examples/conditional-request-handling/ConditionalRequestHandling_Server.cpp @@ -4,11 +4,11 @@ #include #include +#include "JsonRequestHandler.h" +#include "TextRequestHandler.h" #include "src/RSocket.h" #include "src/RSocketErrors.h" #include "src/transports/tcp/TcpConnectionAcceptor.h" -#include "JsonRequestHandler.h" -#include "TextRequestHandler.h" using namespace ::folly; using namespace ::rsocket; diff --git a/examples/conditional-request-handling/JsonRequestHandler.h b/examples/conditional-request-handling/JsonRequestHandler.h index 681390059..50a45ee62 100644 --- a/examples/conditional-request-handling/JsonRequestHandler.h +++ b/examples/conditional-request-handling/JsonRequestHandler.h @@ -2,14 +2,13 @@ #pragma once -#include "src/RSocket.h" #include "src/Payload.h" +#include "src/RSocket.h" class JsonRequestHandler : public rsocket::RSocketResponder { public: /// Handles a new inbound Stream requested by the other end. yarpl::Reference> - handleRequestStream( - rsocket::Payload request, - rsocket::StreamId streamId) override; + handleRequestStream(rsocket::Payload request, rsocket::StreamId streamId) + override; }; diff --git a/examples/conditional-request-handling/TextRequestHandler.h b/examples/conditional-request-handling/TextRequestHandler.h index 8554ff373..141fa33fb 100644 --- a/examples/conditional-request-handling/TextRequestHandler.h +++ b/examples/conditional-request-handling/TextRequestHandler.h @@ -6,10 +6,9 @@ #include "src/RSocket.h" class TextRequestHandler : public rsocket::RSocketResponder { -public: - /// Handles a new inbound Stream requested by the other end. - yarpl::Reference> - handleRequestStream( - rsocket::Payload request, - rsocket::StreamId streamId) override; + public: + /// Handles a new inbound Stream requested by the other end. + yarpl::Reference> + handleRequestStream(rsocket::Payload request, rsocket::StreamId streamId) + override; }; diff --git a/examples/util/ExampleSubscriber.h b/examples/util/ExampleSubscriber.h index f0a04a328..beb551fd5 100644 --- a/examples/util/ExampleSubscriber.h +++ b/examples/util/ExampleSubscriber.h @@ -15,8 +15,7 @@ * Request 5 items to begin with, then 3 more after each receipt of 3. */ namespace rsocket_example { -class ExampleSubscriber - : public yarpl::flowable::Subscriber { +class ExampleSubscriber : public yarpl::flowable::Subscriber { public: ~ExampleSubscriber(); ExampleSubscriber(int initialRequest, int numToTake); diff --git a/src/ConnectionSetupRequest.cpp b/src/ConnectionSetupRequest.cpp index 0bfd1a71c..9aaaa6466 100644 --- a/src/ConnectionSetupRequest.cpp +++ b/src/ConnectionSetupRequest.cpp @@ -6,8 +6,7 @@ using namespace rsocket; namespace rsocket { -ConnectionSetupRequest::ConnectionSetupRequest( - SetupParameters setupPayload) +ConnectionSetupRequest::ConnectionSetupRequest(SetupParameters setupPayload) : setupPayload_(std::move(setupPayload)) {} const std::string& ConnectionSetupRequest::getMetadataMimeType() const { diff --git a/src/ConnectionSetupRequest.h b/src/ConnectionSetupRequest.h index ca20ce795..36daef779 100644 --- a/src/ConnectionSetupRequest.h +++ b/src/ConnectionSetupRequest.h @@ -17,8 +17,7 @@ namespace rsocket { */ class ConnectionSetupRequest { public: - explicit ConnectionSetupRequest( - rsocket::SetupParameters setupPayload); + explicit ConnectionSetupRequest(rsocket::SetupParameters setupPayload); ConnectionSetupRequest(const ConnectionSetupRequest&) = delete; // copy ConnectionSetupRequest(ConnectionSetupRequest&&) = default; // move ConnectionSetupRequest& operator=(const ConnectionSetupRequest&) = @@ -29,8 +28,8 @@ class ConnectionSetupRequest { const std::string& getDataMimeType() const; const rsocket::Payload& getPayload() const; bool clientRequestsResumability() const; - const rsocket::ResumeIdentificationToken& - getResumeIdentificationToken() const; + const rsocket::ResumeIdentificationToken& getResumeIdentificationToken() + const; bool willHonorLease() const; private: diff --git a/src/Payload.cpp b/src/Payload.cpp index fa0d49802..60fb4f54e 100644 --- a/src/Payload.cpp +++ b/src/Payload.cpp @@ -44,10 +44,10 @@ std::string Payload::moveDataToString() { } std::string Payload::cloneDataToString() const { - if (!data) { - return ""; - } - return data->cloneAsValue().moveToFbString().toStdString(); + if (!data) { + return ""; + } + return data->cloneAsValue().moveToFbString().toStdString(); } void Payload::clear() { diff --git a/src/RSocketClient.cpp b/src/RSocketClient.cpp index ec6ecce79..10a4589b6 100644 --- a/src/RSocketClient.cpp +++ b/src/RSocketClient.cpp @@ -2,9 +2,9 @@ #include "RSocketClient.h" #include "RSocketRequester.h" +#include "RSocketStats.h" #include "src/internal/FollyKeepaliveTimer.h" #include "src/temporary_home/NullRequestHandler.h" -#include "RSocketStats.h" using namespace rsocket; using namespace folly; @@ -38,8 +38,8 @@ Future> RSocketClient::connect() { ReactiveSocketMode::CLIENT); // TODO need to allow this being passed in - auto setupPayload = SetupParameters( - "text/plain", "text/plain", Payload("meta", "data")); + auto setupPayload = + SetupParameters("text/plain", "text/plain", Payload("meta", "data")); // TODO ---> this code needs to be moved inside RSocketStateMachine diff --git a/src/RSocketClient.h b/src/RSocketClient.h index cc1643695..c97ae9113 100644 --- a/src/RSocketClient.h +++ b/src/RSocketClient.h @@ -3,8 +3,8 @@ #pragma once #include -#include "src/ConnectionFactory.h" #include "RSocketRequester.h" +#include "src/ConnectionFactory.h" namespace rsocket { diff --git a/src/RSocketConnectionHandler.cpp b/src/RSocketConnectionHandler.cpp index 975f05cde..e6f6c5f74 100644 --- a/src/RSocketConnectionHandler.cpp +++ b/src/RSocketConnectionHandler.cpp @@ -7,10 +7,10 @@ #include #include "RSocketErrors.h" +#include "RSocketStats.h" #include "src/statemachine/RSocketStateMachine.h" #include "src/temporary_home/NullRequestHandler.h" #include "src/temporary_home/OldNewBridge.h" -#include "RSocketStats.h" namespace rsocket { diff --git a/src/RSocketConnectionHandler.h b/src/RSocketConnectionHandler.h index 9a5fffe03..e6b4bb722 100644 --- a/src/RSocketConnectionHandler.h +++ b/src/RSocketConnectionHandler.h @@ -2,9 +2,9 @@ #pragma once +#include "RSocketResponder.h" #include "src/ConnectionResumeRequest.h" #include "src/ConnectionSetupRequest.h" -#include "RSocketResponder.h" #include "src/framing/FrameTransport.h" #include "src/temporary_home/ServerConnectionAcceptor.h" diff --git a/src/RSocketParameters.h b/src/RSocketParameters.h index 7ef5b0ce0..1fca148ca 100644 --- a/src/RSocketParameters.h +++ b/src/RSocketParameters.h @@ -4,15 +4,15 @@ #include #include -#include "src/internal/Common.h" -#include "src/framing/FrameSerializer.h" #include "src/Payload.h" +#include "src/framing/FrameSerializer.h" +#include "src/internal/Common.h" namespace rsocket { class RSocketParameters { public: - RSocketParameters(bool _resumable, ProtocolVersion _protocolVersion) + RSocketParameters(bool _resumable, ProtocolVersion _protocolVersion) : resumable(_resumable), protocolVersion(std::move(_protocolVersion)) {} bool resumable; diff --git a/src/RSocketRequester.cpp b/src/RSocketRequester.cpp index 1674752e9..383871e97 100644 --- a/src/RSocketRequester.cpp +++ b/src/RSocketRequester.cpp @@ -55,8 +55,8 @@ RSocketRequester::requestChannel( ]() mutable { auto responseSink = srs->streamsFactory().createChannelRequester( std::move(std::move(subscriber))); - // TODO the responseSink needs to be wrapped with thread scheduling - // so all emissions happen on the right thread + // TODO the responseSink needs to be wrapped with thread scheduling + // so all emissions happen on the right thread requestStream->subscribe(std::move(responseSink)); }); }); @@ -125,7 +125,7 @@ RSocketRequester::requestResponse(Payload request) { subscriber = std::move(subscriber), srs = std::move(srs) ]() mutable { - srs->streamsFactory().createRequestResponseRequester( + srs->streamsFactory().createRequestResponseRequester( std::move(request), make_ref(std::move(subscriber))); }); diff --git a/src/RSocketRequester.h b/src/RSocketRequester.h index 23d94b1f6..6b283e55e 100644 --- a/src/RSocketRequester.h +++ b/src/RSocketRequester.h @@ -53,8 +53,8 @@ class RSocketRequester { * * @param payload */ - yarpl::Reference> - requestStream(rsocket::Payload request); + yarpl::Reference> requestStream( + rsocket::Payload request); /** * Start a channel (streams in both directions). @@ -64,10 +64,8 @@ class RSocketRequester { * * @param request */ - yarpl::Reference> - requestChannel( - yarpl::Reference> - requests); + yarpl::Reference> requestChannel( + yarpl::Reference> requests); /** * Send a single request and get a single response. @@ -77,8 +75,8 @@ class RSocketRequester { * * @param payload */ - yarpl::Reference> - requestResponse(rsocket::Payload request); + yarpl::Reference> requestResponse( + rsocket::Payload request); /** * Send a single Payload with no response. diff --git a/src/RSocketResponder.h b/src/RSocketResponder.h index 566722f8b..869865e31 100644 --- a/src/RSocketResponder.h +++ b/src/RSocketResponder.h @@ -45,9 +45,7 @@ class RSocketResponder { * @return */ virtual yarpl::Reference> - handleRequestResponse( - rsocket::Payload request, - rsocket::StreamId streamId) { + handleRequestResponse(rsocket::Payload request, rsocket::StreamId streamId) { return yarpl::single::Singles::error( std::logic_error("handleRequestResponse not implemented")); } @@ -62,9 +60,7 @@ class RSocketResponder { * @return */ virtual yarpl::Reference> - handleRequestStream( - rsocket::Payload request, - rsocket::StreamId streamId) { + handleRequestStream(rsocket::Payload request, rsocket::StreamId streamId) { return yarpl::flowable::Flowables::error( std::logic_error("handleRequestStream not implemented")); } diff --git a/src/RSocketServer.cpp b/src/RSocketServer.cpp index 0e789f3c0..0fd99ab01 100644 --- a/src/RSocketServer.cpp +++ b/src/RSocketServer.cpp @@ -26,8 +26,7 @@ class RSocketServerConnectionHandler : public virtual RSocketConnectionHandler { void manageSocket( std::shared_ptr request, - std::shared_ptr stateMachine) - override { + std::shared_ptr stateMachine) override { stateMachine->addClosedListener( [this, stateMachine](const folly::exception_wrapper&) { // Enqueue another event to remove and delete it. We cannot delete diff --git a/src/RSocketServer.h b/src/RSocketServer.h index 428598154..cb3fe64e5 100644 --- a/src/RSocketServer.h +++ b/src/RSocketServer.h @@ -77,7 +77,9 @@ class RSocketServer { friend class RSocketServerConnectionHandler; private: - void addConnection(std::shared_ptr, folly::Executor&); + void addConnection( + std::shared_ptr, + folly::Executor&); void removeConnection(std::shared_ptr); ////////////////////////////////////////////////////////////////////////////// @@ -88,7 +90,9 @@ class RSocketServer { /// Set of currently open ReactiveSockets. folly::Synchronized< - std::unordered_map, folly::Executor&>, + std::unordered_map< + std::shared_ptr, + folly::Executor&>, std::mutex> sockets_; diff --git a/src/framing/FrameTransport.h b/src/framing/FrameTransport.h index 3c5d1c48b..dd0cb200e 100644 --- a/src/framing/FrameTransport.h +++ b/src/framing/FrameTransport.h @@ -6,13 +6,13 @@ #include #include -#include #include +#include +#include "src/Payload.h" +#include "src/framing/FrameProcessor.h" #include "src/internal/AllowanceSemaphore.h" #include "src/internal/Common.h" -#include "src/framing/FrameProcessor.h" -#include "src/Payload.h" #include "src/internal/ReactiveStreamsCompat.h" namespace rsocket { diff --git a/src/framing/FramedDuplexConnection.h b/src/framing/FramedDuplexConnection.h index 5c0d903f8..5541c79db 100644 --- a/src/framing/FramedDuplexConnection.h +++ b/src/framing/FramedDuplexConnection.h @@ -2,10 +2,10 @@ #pragma once -#include #include -#include "src/internal/Common.h" +#include #include "src/DuplexConnection.h" +#include "src/internal/Common.h" namespace rsocket { diff --git a/src/framing/FramedReader.h b/src/framing/FramedReader.h index eb9031a77..2e7349364 100644 --- a/src/framing/FramedReader.h +++ b/src/framing/FramedReader.h @@ -52,8 +52,7 @@ class FramedReader : public SubscriberBaseT>, using EnableSharedFromThisBase::shared_from_this; - std::shared_ptr>> - frames_; + std::shared_ptr>> frames_; std::shared_ptr streamSubscription_; AllowanceSemaphore allowance_{0}; diff --git a/src/framing/FramedWriter.h b/src/framing/FramedWriter.h index 165a5131c..4f8db7e96 100644 --- a/src/framing/FramedWriter.h +++ b/src/framing/FramedWriter.h @@ -33,8 +33,8 @@ class FramedWriter : public SubscriberBaseT>, private: // Subscriber methods - void onSubscribeImpl(std::shared_ptr - subscription) noexcept override; + void onSubscribeImpl( + std::shared_ptr subscription) noexcept override; void onNextImpl(std::unique_ptr element) noexcept override; void onCompleteImpl() noexcept override; void onErrorImpl(folly::exception_wrapper ex) noexcept override; @@ -51,8 +51,7 @@ class FramedWriter : public SubscriberBaseT>, using EnableSharedFromThisBase::shared_from_this; - std::shared_ptr>> - stream_; + std::shared_ptr>> stream_; std::shared_ptr<::reactivestreams::Subscription> writerSubscription_; std::shared_ptr protocolVersion_; }; diff --git a/src/internal/ResumeCache.cpp b/src/internal/ResumeCache.cpp index ecee6fcc7..db9683b99 100644 --- a/src/internal/ResumeCache.cpp +++ b/src/internal/ResumeCache.cpp @@ -4,9 +4,9 @@ #include -#include "src/statemachine/RSocketStateMachine.h" #include "src/framing/Frame.h" #include "src/framing/FrameTransport.h" +#include "src/statemachine/RSocketStateMachine.h" namespace { diff --git a/src/internal/ResumeCache.h b/src/internal/ResumeCache.h index 3b8394ceb..3fb7ac404 100644 --- a/src/internal/ResumeCache.h +++ b/src/internal/ResumeCache.h @@ -8,8 +8,8 @@ #include -#include "src/internal/Common.h" #include "src/RSocketStats.h" +#include "src/internal/Common.h" namespace folly { class IOBuf; diff --git a/src/statemachine/ChannelRequester.cpp b/src/statemachine/ChannelRequester.cpp index bf9386719..e17a754be 100644 --- a/src/statemachine/ChannelRequester.cpp +++ b/src/statemachine/ChannelRequester.cpp @@ -134,9 +134,10 @@ void ChannelRequester::endStream(StreamCompletionSignal signal) { ConsumerBase::endStream(signal); } -void ChannelRequester::handlePayload(Payload&& payload, - bool complete, - bool flagsNext) { +void ChannelRequester::handlePayload( + Payload&& payload, + bool complete, + bool flagsNext) { bool end = false; switch (state_) { case State::NEW: diff --git a/src/statemachine/ChannelRequester.h b/src/statemachine/ChannelRequester.h index 369b16300..01cddf10d 100644 --- a/src/statemachine/ChannelRequester.h +++ b/src/statemachine/ChannelRequester.h @@ -5,9 +5,9 @@ #include #include "src/Payload.h" -#include "src/temporary_home/SubscriberBase.h" #include "src/statemachine/ConsumerBase.h" #include "src/statemachine/PublisherBase.h" +#include "src/temporary_home/SubscriberBase.h" #include "yarpl/flowable/Subscriber.h" namespace folly { @@ -25,7 +25,8 @@ class ChannelRequester : public ConsumerBase, : ConsumerBase(params), PublisherBase(0) {} private: - void onSubscribe(yarpl::Reference subscription) noexcept override; + void onSubscribe(yarpl::Reference + subscription) noexcept override; void onNext(Payload) noexcept override; void onComplete() noexcept override; void onError(const std::exception_ptr) noexcept override; diff --git a/src/statemachine/ChannelResponder.cpp b/src/statemachine/ChannelResponder.cpp index f26362fc2..eee8f10d9 100644 --- a/src/statemachine/ChannelResponder.cpp +++ b/src/statemachine/ChannelResponder.cpp @@ -87,7 +87,7 @@ void ChannelResponder::endStream(StreamCompletionSignal signal) { ConsumerBase::endStream(signal); } -//TODO: remove this unused function +// TODO: remove this unused function void ChannelResponder::processInitialFrame(Frame_REQUEST_CHANNEL&& frame) { onNextPayloadFrame( frame.requestN_, @@ -96,14 +96,11 @@ void ChannelResponder::processInitialFrame(Frame_REQUEST_CHANNEL&& frame) { true); } -void ChannelResponder::handlePayload(Payload&& payload, - bool complete, - bool flagsNext) { - onNextPayloadFrame( - 0, - std::move(payload), - complete, - flagsNext); +void ChannelResponder::handlePayload( + Payload&& payload, + bool complete, + bool flagsNext) { + onNextPayloadFrame(0, std::move(payload), complete, flagsNext); } void ChannelResponder::onNextPayloadFrame( diff --git a/src/statemachine/ChannelResponder.h b/src/statemachine/ChannelResponder.h index a81bb52cd..9f76ef385 100644 --- a/src/statemachine/ChannelResponder.h +++ b/src/statemachine/ChannelResponder.h @@ -4,9 +4,9 @@ #include -#include "src/temporary_home/SubscriberBase.h" #include "src/statemachine/ConsumerBase.h" #include "src/statemachine/PublisherBase.h" +#include "src/temporary_home/SubscriberBase.h" #include "yarpl/flowable/Subscriber.h" namespace rsocket { @@ -19,13 +19,13 @@ class ChannelResponder : public ConsumerBase, explicit ChannelResponder( uint32_t initialRequestN, const ConsumerBase::Parameters& params) - : ConsumerBase(params), - PublisherBase(initialRequestN) {} + : ConsumerBase(params), PublisherBase(initialRequestN) {} void processInitialFrame(Frame_REQUEST_CHANNEL&&); private: - void onSubscribe(yarpl::Reference subscription) noexcept override; + void onSubscribe(yarpl::Reference + subscription) noexcept override; void onNext(Payload) noexcept override; void onComplete() noexcept override; void onError(const std::exception_ptr) noexcept override; diff --git a/src/statemachine/ConsumerBase.cpp b/src/statemachine/ConsumerBase.cpp index 296f5c218..b98efe884 100644 --- a/src/statemachine/ConsumerBase.cpp +++ b/src/statemachine/ConsumerBase.cpp @@ -11,7 +11,8 @@ namespace rsocket { using namespace yarpl; using namespace yarpl::flowable; -void ConsumerBase::subscribe(Reference> subscriber) { +void ConsumerBase::subscribe( + Reference> subscriber) { if (Base::isTerminated()) { subscriber->onSubscribe(make_ref()); subscriber->onComplete(); @@ -35,7 +36,8 @@ void ConsumerBase::endStream(StreamCompletionSignal signal) { signal == StreamCompletionSignal::CANCEL) { // TODO: remove CANCEL subscriber->onComplete(); } else { - subscriber->onError(std::make_exception_ptr(StreamInterruptedException(static_cast(signal)))); + subscriber->onError(std::make_exception_ptr( + StreamInterruptedException(static_cast(signal)))); } } Base::endStream(signal); @@ -85,7 +87,8 @@ void ConsumerBase::sendRequests() { void ConsumerBase::handleFlowControlError() { if (auto subscriber = std::move(consumingSubscriber_)) { - subscriber->onError(std::make_exception_ptr(std::runtime_error("surplus response"))); + subscriber->onError( + std::make_exception_ptr(std::runtime_error("surplus response"))); } errorStream("flow control error"); } diff --git a/src/statemachine/ConsumerBase.h b/src/statemachine/ConsumerBase.h index aac8a4def..45e459fe5 100644 --- a/src/statemachine/ConsumerBase.h +++ b/src/statemachine/ConsumerBase.h @@ -5,12 +5,12 @@ #include #include #include -#include "src/internal/AllowanceSemaphore.h" -#include "src/internal/Common.h" #include "RSocketStateMachine.h" -#include "src/temporary_home/NullRequestHandler.h" #include "src/Payload.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/internal/Common.h" #include "src/statemachine/StreamStateMachineBase.h" +#include "src/temporary_home/NullRequestHandler.h" #include "yarpl/flowable/Subscription.h" namespace rsocket { @@ -18,7 +18,8 @@ namespace rsocket { enum class StreamCompletionSignal; /// A class that represents a flow-control-aware consumer of data. -class ConsumerBase : public StreamStateMachineBase, public yarpl::flowable::Subscription { +class ConsumerBase : public StreamStateMachineBase, + public yarpl::flowable::Subscription { using Base = StreamStateMachineBase; public: @@ -33,7 +34,8 @@ class ConsumerBase : public StreamStateMachineBase, public yarpl::flowable::Subs } /// @{ - void subscribe(yarpl::Reference> subscriber); + void subscribe( + yarpl::Reference> subscriber); void generateRequest(size_t n); /// @} diff --git a/src/statemachine/PublisherBase.h b/src/statemachine/PublisherBase.h index 823b83880..f20eedcc7 100644 --- a/src/statemachine/PublisherBase.h +++ b/src/statemachine/PublisherBase.h @@ -5,10 +5,10 @@ #include #include #include -#include "src/internal/AllowanceSemaphore.h" #include "RSocketStateMachine.h" -#include "src/temporary_home/Executor.h" #include "src/Payload.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/temporary_home/Executor.h" #include "src/temporary_home/RequestHandler.h" #include "yarpl/flowable/Subscription.h" @@ -23,7 +23,8 @@ class PublisherBase { : initialRequestN_(initialRequestN) {} /// @{ - void publisherSubscribe(yarpl::Reference subscription) { + void publisherSubscribe( + yarpl::Reference subscription) { debugCheckOnSubscribe(); producingSubscription_ = std::move(subscription); if (initialRequestN_) { diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index fc75309cf..86c6775dd 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -7,16 +7,16 @@ #include #include #include -#include "src/internal/ClientResumeStatusCallback.h" -#include "src/RSocketParameters.h" +#include "StreamState.h" #include "src/DuplexConnection.h" +#include "src/RSocketParameters.h" +#include "src/RSocketStats.h" #include "src/framing/FrameTransport.h" -#include "src/temporary_home/RequestHandler.h" +#include "src/internal/ClientResumeStatusCallback.h" #include "src/internal/ResumeCache.h" -#include "src/RSocketStats.h" -#include "StreamState.h" #include "src/statemachine/ChannelResponder.h" #include "src/statemachine/StreamStateMachineBase.h" +#include "src/temporary_home/RequestHandler.h" namespace rsocket { @@ -287,7 +287,8 @@ void RSocketStateMachine::addStream( StreamId streamId, yarpl::Reference stateMachine) { debugCheckCorrectExecutor(); - auto result = streamState_->streams_.emplace(streamId, std::move(stateMachine)); + auto result = + streamState_->streams_.emplace(streamId, std::move(stateMachine)); (void)result; assert(result.second); } @@ -490,12 +491,11 @@ void RSocketStateMachine::handleConnectionFrame( return; } - auto resumed = requestHandler_->handleResume( - ResumeParameters( - frame.token_, - frame.lastReceivedServerPosition_, - frame.clientPosition_, - ProtocolVersion(frame.versionMajor_, frame.versionMinor_))); + auto resumed = requestHandler_->handleResume(ResumeParameters( + frame.token_, + frame.lastReceivedServerPosition_, + frame.clientPosition_, + ProtocolVersion(frame.versionMajor_, frame.versionMinor_))); if (!resumed) { closeWithError(Frame_ERROR::connectionError("can not resume")); @@ -572,13 +572,12 @@ void RSocketStateMachine::handleStreamFrame( handleUnknownStream(streamId, frameType, std::move(serializedFrame)); return; } - auto &stateMachine = it->second; + auto& stateMachine = it->second; switch (frameType) { case FrameType::REQUEST_N: { Frame_REQUEST_N frameRequestN; - if (!deserializeFrameOrError(frameRequestN, - std::move(serializedFrame))) { + if (!deserializeFrameOrError(frameRequestN, std::move(serializedFrame))) { return; } stateMachine->handleRequestN(frameRequestN.requestN_); @@ -590,19 +589,18 @@ void RSocketStateMachine::handleStreamFrame( } case FrameType::PAYLOAD: { Frame_PAYLOAD framePayload; - if (!deserializeFrameOrError(framePayload, - std::move(serializedFrame))) { + if (!deserializeFrameOrError(framePayload, std::move(serializedFrame))) { return; } - stateMachine->handlePayload(std::move(framePayload.payload_), - framePayload.header_.flagsComplete(), - framePayload.header_.flagsNext()); + stateMachine->handlePayload( + std::move(framePayload.payload_), + framePayload.header_.flagsComplete(), + framePayload.header_.flagsNext()); break; } case FrameType::ERROR: { Frame_ERROR frameError; - if (!deserializeFrameOrError(frameError, - std::move(serializedFrame))) { + if (!deserializeFrameOrError(frameError, std::move(serializedFrame))) { return; } stateMachine->handleError( @@ -649,8 +647,8 @@ void RSocketStateMachine::handleUnknownStream( if (!deserializeFrameOrError(frame, std::move(serializedFrame))) { return; } - auto stateMachine = streamsFactory_.createChannelResponder( - frame.requestN_, streamId); + auto stateMachine = + streamsFactory_.createChannelResponder(frame.requestN_, streamId); auto requestSink = requestHandler_->handleRequestChannel( std::move(frame.payload_), streamId, stateMachine); stateMachine->subscribe(requestSink); @@ -661,8 +659,8 @@ void RSocketStateMachine::handleUnknownStream( if (!deserializeFrameOrError(frame, std::move(serializedFrame))) { return; } - auto stateMachine = streamsFactory_.createStreamResponder( - frame.requestN_, streamId); + auto stateMachine = + streamsFactory_.createStreamResponder(frame.requestN_, streamId); requestHandler_->handleRequestStream( std::move(frame.payload_), streamId, stateMachine); break; @@ -727,13 +725,12 @@ void RSocketStateMachine::tryClientResume( const ResumeIdentificationToken& token, std::shared_ptr frameTransport, std::unique_ptr resumeCallback) { - frameTransport->outputFrameOrEnqueue(frameSerializer_->serializeOut( - createResumeFrame(token))); + frameTransport->outputFrameOrEnqueue( + frameSerializer_->serializeOut(createResumeFrame(token))); // if the client was still connected we will disconnected the old connection // with a clear error message - disconnect( - std::runtime_error("resuming client on a different connection")); + disconnect(std::runtime_error("resuming client on a different connection")); setResumable(true); reconnect(std::move(frameTransport), std::move(resumeCallback)); } @@ -818,8 +815,8 @@ void RSocketStateMachine::requestFireAndForget(Payload request) { } void RSocketStateMachine::metadataPush(std::unique_ptr metadata) { - outputFrameOrEnqueue(frameSerializer_->serializeOut( - Frame_METADATA_PUSH(std::move(metadata)))); + outputFrameOrEnqueue( + frameSerializer_->serializeOut(Frame_METADATA_PUSH(std::move(metadata)))); } void RSocketStateMachine::outputFrame(std::unique_ptr frame) { @@ -907,8 +904,7 @@ void RSocketStateMachine::setUpFrame( frameTransport->outputFrameOrEnqueue( frameSerializer_->serializeOut(std::move(frame))); // then the rest of the cached frames will be sent - connect( - std::move(frameTransport), true, ProtocolVersion::Unknown); + connect(std::move(frameTransport), true, ProtocolVersion::Unknown); } ProtocolVersion RSocketStateMachine::getSerializerProtocolVersion() { diff --git a/src/statemachine/RSocketStateMachine.h b/src/statemachine/RSocketStateMachine.h index f64474ca8..4272f0dac 100644 --- a/src/statemachine/RSocketStateMachine.h +++ b/src/statemachine/RSocketStateMachine.h @@ -4,17 +4,17 @@ #include #include -#include "src/internal/AllowanceSemaphore.h" -#include "src/internal/Common.h" +#include "StreamsFactory.h" +#include "StreamsHandler.h" #include "src/DuplexConnection.h" -#include "src/temporary_home/Executor.h" +#include "src/Payload.h" #include "src/framing/Frame.h" -#include "src/framing/FrameTransport.h" #include "src/framing/FrameProcessor.h" #include "src/framing/FrameSerializer.h" -#include "src/Payload.h" -#include "StreamsFactory.h" -#include "StreamsHandler.h" +#include "src/framing/FrameTransport.h" +#include "src/internal/AllowanceSemaphore.h" +#include "src/internal/Common.h" +#include "src/temporary_home/Executor.h" namespace rsocket { @@ -123,7 +123,8 @@ class RSocketStateMachine final /// 1. no other signal can be delivered during or after this one, /// 2. "unsubscribe handshake" guarantees that the signal will be delivered /// at least once, even if the stateMachine initiated stream closure, - /// 3. per "unsubscribe handshake", the stateMachine must deliver corresponding + /// 3. per "unsubscribe handshake", the stateMachine must deliver + /// corresponding /// terminal signal to the connection. /// /// Additionally, in order to simplify implementation of stream stateMachine: @@ -186,10 +187,10 @@ class RSocketStateMachine final return streamsFactory_; } - ProtocolVersion getSerializerProtocolVersion(); - void setUpFrame(std::shared_ptr frameTransport, - SetupParameters setupPayload); + void setUpFrame( + std::shared_ptr frameTransport, + SetupParameters setupPayload); void metadataPush(std::unique_ptr metadata); @@ -223,8 +224,9 @@ class RSocketStateMachine final void onTerminalImpl(folly::exception_wrapper); /// @} - void handleConnectionFrame(FrameType frameType, - std::unique_ptr); + void handleConnectionFrame( + FrameType frameType, + std::unique_ptr); void handleStreamFrame( StreamId streamId, FrameType frameType, diff --git a/src/statemachine/RequestResponseRequester.cpp b/src/statemachine/RequestResponseRequester.cpp index 80d1171ae..c47243867 100644 --- a/src/statemachine/RequestResponseRequester.cpp +++ b/src/statemachine/RequestResponseRequester.cpp @@ -3,8 +3,8 @@ #include "src/statemachine/RequestResponseRequester.h" #include #include -#include "src/internal/Common.h" #include "RSocketStateMachine.h" +#include "src/internal/Common.h" #include "src/temporary_home/RequestHandler.h" namespace rsocket { @@ -69,7 +69,8 @@ void RequestResponseRequester::endStream(StreamCompletionSignal signal) { signal == StreamCompletionSignal::CANCEL) { // TODO: remove CANCEL subscriber->onComplete(); } else { - subscriber->onError(std::make_exception_ptr(StreamInterruptedException(static_cast(signal)))); + subscriber->onError(std::make_exception_ptr( + StreamInterruptedException(static_cast(signal)))); } } } @@ -93,9 +94,10 @@ void RequestResponseRequester::handleError( } } -void RequestResponseRequester:: handlePayload(Payload&& payload, - bool complete, - bool flagsNext) { +void RequestResponseRequester::handlePayload( + Payload&& payload, + bool complete, + bool flagsNext) { switch (state_) { case State::NEW: // Cannot receive a frame before sending the initial request. diff --git a/src/statemachine/RequestResponseRequester.h b/src/statemachine/RequestResponseRequester.h index 25947676e..280957406 100644 --- a/src/statemachine/RequestResponseRequester.h +++ b/src/statemachine/RequestResponseRequester.h @@ -5,8 +5,8 @@ #include #include "src/Payload.h" #include "src/statemachine/StreamStateMachineBase.h" -#include "yarpl/flowable/Subscription.h" #include "yarpl/flowable/Subscriber.h" +#include "yarpl/flowable/Subscription.h" namespace rsocket { @@ -18,10 +18,10 @@ class RequestResponseRequester : public StreamStateMachineBase, public: explicit RequestResponseRequester(const Parameters& params, Payload payload) - : Base(params), - initialPayload_(std::move(payload)) {} + : Base(params), initialPayload_(std::move(payload)) {} - void subscribe(yarpl::Reference> subscriber); + void subscribe( + yarpl::Reference> subscriber); private: void request(int64_t) noexcept override; diff --git a/src/statemachine/RequestResponseResponder.cpp b/src/statemachine/RequestResponseResponder.cpp index 55924aade..046bd6354 100644 --- a/src/statemachine/RequestResponseResponder.cpp +++ b/src/statemachine/RequestResponseResponder.cpp @@ -42,8 +42,7 @@ void RequestResponseResponder::onComplete() noexcept { } } -void RequestResponseResponder::onError( - const std::exception_ptr ex) noexcept { +void RequestResponseResponder::onError(const std::exception_ptr ex) noexcept { debugCheckOnNextOnError(); switch (state_) { case State::RESPONDING: { diff --git a/src/statemachine/RequestResponseResponder.h b/src/statemachine/RequestResponseResponder.h index a5e356875..c8215cca8 100644 --- a/src/statemachine/RequestResponseResponder.h +++ b/src/statemachine/RequestResponseResponder.h @@ -15,11 +15,11 @@ class RequestResponseResponder : public StreamStateMachineBase, public yarpl::flowable::Subscriber { public: explicit RequestResponseResponder(const Parameters& params) - : StreamStateMachineBase(params), - PublisherBase(1) {} + : StreamStateMachineBase(params), PublisherBase(1) {} private: - void onSubscribe(yarpl::Reference subscription) noexcept override; + void onSubscribe(yarpl::Reference + subscription) noexcept override; void onNext(Payload) noexcept override; void onComplete() noexcept override; void onError(const std::exception_ptr) noexcept override; diff --git a/src/statemachine/StreamRequester.cpp b/src/statemachine/StreamRequester.cpp index b727579c6..c863a3c29 100644 --- a/src/statemachine/StreamRequester.cpp +++ b/src/statemachine/StreamRequester.cpp @@ -77,9 +77,10 @@ void StreamRequester::endStream(StreamCompletionSignal signal) { Base::endStream(signal); } -void StreamRequester::handlePayload(Payload&& payload, - bool complete, - bool flagsNext) { +void StreamRequester::handlePayload( + Payload&& payload, + bool complete, + bool flagsNext) { bool end = false; switch (state_) { case State::NEW: diff --git a/src/statemachine/StreamRequester.h b/src/statemachine/StreamRequester.h index c920f7499..11feecb6f 100644 --- a/src/statemachine/StreamRequester.h +++ b/src/statemachine/StreamRequester.h @@ -22,17 +22,14 @@ class StreamRequester : public ConsumerBase { // initialization of the ExecutorBase will be ignored for any of the // derived classes explicit StreamRequester(const Base::Parameters& params, Payload payload) - : Base(params), - initialPayload_(std::move(payload)) {} + : Base(params), initialPayload_(std::move(payload)) {} private: // implementation from ConsumerBase::SubscriptionBase void request(int64_t) noexcept override; void cancel() noexcept override; - void handlePayload(Payload&& payload, - bool complete, - bool flagsNext) override; + void handlePayload(Payload&& payload, bool complete, bool flagsNext) override; void handleError(folly::exception_wrapper errorPayload) override; void endStream(StreamCompletionSignal) override; diff --git a/src/statemachine/StreamResponder.h b/src/statemachine/StreamResponder.h index 88648111f..6e520b3ae 100644 --- a/src/statemachine/StreamResponder.h +++ b/src/statemachine/StreamResponder.h @@ -17,15 +17,15 @@ class StreamResponder : public StreamStateMachineBase, // initialization of the ExecutorBase will be ignored for any of the // derived classes explicit StreamResponder(uint32_t initialRequestN, const Parameters& params) - : StreamStateMachineBase(params), - PublisherBase(initialRequestN) {} + : StreamStateMachineBase(params), PublisherBase(initialRequestN) {} protected: void handleCancel() override; void handleRequestN(uint32_t n) override; private: - void onSubscribe(yarpl::Reference subscription) noexcept override; + void onSubscribe(yarpl::Reference + subscription) noexcept override; void onNext(Payload) noexcept override; void onComplete() noexcept override; void onError(const std::exception_ptr) noexcept override; diff --git a/src/statemachine/StreamState.h b/src/statemachine/StreamState.h index d9bb77bce..5f71a1995 100644 --- a/src/statemachine/StreamState.h +++ b/src/statemachine/StreamState.h @@ -25,7 +25,8 @@ class StreamState { std::deque> moveOutputPendingFrames(); - std::unordered_map> streams_; + std::unordered_map> + streams_; private: /// Called to update stats when outputFrames_ is about to be cleared. diff --git a/src/statemachine/StreamStateMachineBase.cpp b/src/statemachine/StreamStateMachineBase.cpp index 2127e9f02..0118ef4ec 100644 --- a/src/statemachine/StreamStateMachineBase.cpp +++ b/src/statemachine/StreamStateMachineBase.cpp @@ -7,9 +7,10 @@ namespace rsocket { -void StreamStateMachineBase::handlePayload(Payload&& payload, - bool complete, - bool flagsNext) { +void StreamStateMachineBase::handlePayload( + Payload&& payload, + bool complete, + bool flagsNext) { VLOG(4) << "Unexpected handlePayload"; } @@ -17,7 +18,8 @@ void StreamStateMachineBase::handleRequestN(uint32_t n) { VLOG(4) << "Unexpected handleRequestN"; } -void StreamStateMachineBase::handleError(folly::exception_wrapper errorPayload) { +void StreamStateMachineBase::handleError( + folly::exception_wrapper errorPayload) { VLOG(4) << "Unexpected handleError"; } diff --git a/src/statemachine/StreamStateMachineBase.h b/src/statemachine/StreamStateMachineBase.h index 9cc0233fa..3737edc40 100644 --- a/src/statemachine/StreamStateMachineBase.h +++ b/src/statemachine/StreamStateMachineBase.h @@ -2,12 +2,12 @@ #pragma once +#include +#include #include #include #include #include "src/internal/Common.h" -#include -#include namespace folly { class IOBuf; @@ -55,7 +55,8 @@ class StreamStateMachineBase : public virtual yarpl::Refcounted { /// 1. no other signal can be delivered during or after this one, /// 2. "unsubscribe handshake" guarantees that the signal will be delivered /// exactly once, even if the state machine initiated stream closure, - /// 3. per "unsubscribe handshake", the state machine must deliver corresponding + /// 3. per "unsubscribe handshake", the state machine must deliver + /// corresponding /// terminal signal to the connection. virtual void endStream(StreamCompletionSignal signal); /// @} diff --git a/src/statemachine/StreamsFactory.cpp b/src/statemachine/StreamsFactory.cpp index 0e6971215..a957a4360 100644 --- a/src/statemachine/StreamsFactory.cpp +++ b/src/statemachine/StreamsFactory.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include "StreamsFactory.h" -#include "src/statemachine/RSocketStateMachine.h" #include "src/statemachine/ChannelRequester.h" #include "src/statemachine/ChannelResponder.h" +#include "src/statemachine/RSocketStateMachine.h" #include "src/statemachine/RequestResponseRequester.h" #include "src/statemachine/RequestResponseResponder.h" #include "src/statemachine/StreamRequester.h" @@ -24,9 +24,11 @@ StreamsFactory::StreamsFactory( : 2 /*streams initiated by the server MUST use even-numbered stream identifiers*/) {} -Reference> StreamsFactory::createChannelRequester( +Reference> +StreamsFactory::createChannelRequester( Reference> responseSink) { - ChannelRequester::Parameters params(connection_.shared_from_this(), getNextStreamId()); + ChannelRequester::Parameters params( + connection_.shared_from_this(), getNextStreamId()); auto stateMachine = yarpl::make_ref(params); connection_.addStream(params.streamId, stateMachine); stateMachine->subscribe(std::move(responseSink)); @@ -36,7 +38,8 @@ Reference> StreamsFactory::createChannelReq void StreamsFactory::createStreamRequester( Payload request, Reference> responseSink) { - StreamRequester::Parameters params(connection_.shared_from_this(), getNextStreamId()); + StreamRequester::Parameters params( + connection_.shared_from_this(), getNextStreamId()); auto stateMachine = yarpl::make_ref(params, std::move(request)); connection_.addStream(params.streamId, stateMachine); @@ -46,7 +49,8 @@ void StreamsFactory::createStreamRequester( void StreamsFactory::createRequestResponseRequester( Payload payload, Reference> responseSink) { - RequestResponseRequester::Parameters params(connection_.shared_from_this(), getNextStreamId()); + RequestResponseRequester::Parameters params( + connection_.shared_from_this(), getNextStreamId()); auto stateMachine = yarpl::make_ref(params, std::move(payload)); connection_.addStream(params.streamId, stateMachine); @@ -81,12 +85,14 @@ Reference StreamsFactory::createChannelResponder( uint32_t initialRequestN, StreamId streamId) { ChannelResponder::Parameters params(connection_.shared_from_this(), streamId); - auto stateMachine = yarpl::make_ref(initialRequestN, params); + auto stateMachine = + yarpl::make_ref(initialRequestN, params); connection_.addStream(streamId, stateMachine); return stateMachine; } -Reference> StreamsFactory::createStreamResponder( +Reference> +StreamsFactory::createStreamResponder( uint32_t initialRequestN, StreamId streamId) { StreamResponder::Parameters params(connection_.shared_from_this(), streamId); @@ -96,9 +102,9 @@ Reference> StreamsFactory::createStreamResp } Reference> -StreamsFactory::createRequestResponseResponder( - StreamId streamId) { - RequestResponseResponder::Parameters params(connection_.shared_from_this(), streamId); +StreamsFactory::createRequestResponseResponder(StreamId streamId) { + RequestResponseResponder::Parameters params( + connection_.shared_from_this(), streamId); auto stateMachine = yarpl::make_ref(params); connection_.addStream(streamId, stateMachine); return stateMachine; diff --git a/src/statemachine/StreamsFactory.h b/src/statemachine/StreamsFactory.h index 7766fbf65..365235043 100644 --- a/src/statemachine/StreamsFactory.h +++ b/src/statemachine/StreamsFactory.h @@ -41,8 +41,8 @@ class StreamsFactory { uint32_t initialRequestN, StreamId streamId); - yarpl::Reference> createRequestResponseResponder( - StreamId streamId); + yarpl::Reference> + createRequestResponseResponder(StreamId streamId); bool registerNewPeerStreamId(StreamId streamId); StreamId getNextStreamId(); diff --git a/src/statemachine/StreamsHandler.h b/src/statemachine/StreamsHandler.h index 9a69531eb..5833f358d 100644 --- a/src/statemachine/StreamsHandler.h +++ b/src/statemachine/StreamsHandler.h @@ -2,8 +2,8 @@ #pragma once -#include "src/internal/Common.h" #include "src/Payload.h" +#include "src/internal/Common.h" namespace rsocket { diff --git a/src/temporary_home/Executor.cpp b/src/temporary_home/Executor.cpp index 050b46739..5cc4d92fe 100644 --- a/src/temporary_home/Executor.cpp +++ b/src/temporary_home/Executor.cpp @@ -4,8 +4,8 @@ #include #include #include -#include "src/internal/StackTraceUtils.h" #include "SubscriberBase.h" +#include "src/internal/StackTraceUtils.h" namespace rsocket { diff --git a/src/temporary_home/NullRequestHandler.cpp b/src/temporary_home/NullRequestHandler.cpp index a583a915f..00d9fdec8 100644 --- a/src/temporary_home/NullRequestHandler.cpp +++ b/src/temporary_home/NullRequestHandler.cpp @@ -19,7 +19,8 @@ Reference> NullRequestHandler::handleRequestChannel( const Reference>& response) noexcept { // TODO(lehecka): get rid of onSubscribe call response->onSubscribe(make_ref()); - response->onError(std::make_exception_ptr(std::runtime_error("NullRequestHandler"))); + response->onError( + std::make_exception_ptr(std::runtime_error("NullRequestHandler"))); return make_ref(); } @@ -29,7 +30,8 @@ void NullRequestHandler::handleRequestStream( const Reference>& response) noexcept { // TODO(lehecka): get rid of onSubscribe call response->onSubscribe(make_ref()); - response->onError(std::make_exception_ptr(std::runtime_error("NullRequestHandler"))); + response->onError( + std::make_exception_ptr(std::runtime_error("NullRequestHandler"))); } void NullRequestHandler::handleRequestResponse( @@ -37,7 +39,8 @@ void NullRequestHandler::handleRequestResponse( StreamId /*streamId*/, const Reference>& response) noexcept { response->onSubscribe(make_ref()); - response->onError(std::make_exception_ptr(std::runtime_error("NullRequestHandler"))); + response->onError( + std::make_exception_ptr(std::runtime_error("NullRequestHandler"))); } void NullRequestHandler::handleFireAndForgetRequest( @@ -52,8 +55,7 @@ std::shared_ptr NullRequestHandler::handleSetupPayload( return nullptr; } -bool NullRequestHandler::handleResume( - ResumeParameters) noexcept { +bool NullRequestHandler::handleResume(ResumeParameters) noexcept { return false; } diff --git a/src/temporary_home/NullRequestHandler.h b/src/temporary_home/NullRequestHandler.h index ea0e18b93..cf3c94f62 100644 --- a/src/temporary_home/NullRequestHandler.h +++ b/src/temporary_home/NullRequestHandler.h @@ -3,8 +3,8 @@ #pragma once #include -#include "src/RSocketParameters.h" #include "RequestHandler.h" +#include "src/RSocketParameters.h" namespace rsocket { @@ -14,8 +14,8 @@ class NullSubscriberT : public yarpl::flowable::Subscriber { virtual ~NullSubscriberT() = default; // Subscriber methods - void onSubscribe( - yarpl::Reference subscription) noexcept override { + void onSubscribe(yarpl::Reference + subscription) noexcept override { subscription->cancel(); } void onNext(T element) noexcept override {} @@ -38,17 +38,20 @@ class NullRequestHandler : public RequestHandler { yarpl::Reference> handleRequestChannel( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override; + const yarpl::Reference>& + response) noexcept override; void handleRequestStream( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override; + const yarpl::Reference>& + response) noexcept override; void handleRequestResponse( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override; + const yarpl::Reference>& + response) noexcept override; void handleFireAndForgetRequest( Payload request, @@ -62,19 +65,23 @@ class NullRequestHandler : public RequestHandler { bool handleResume(ResumeParameters) noexcept override; - void handleCleanResume( - yarpl::Reference response) noexcept override; - void handleDirtyResume( - yarpl::Reference response) noexcept override; + void handleCleanResume(yarpl::Reference + response) noexcept override; + void handleDirtyResume(yarpl::Reference + response) noexcept override; void onSubscriptionPaused( - const yarpl::Reference& subscription) noexcept override; + const yarpl::Reference& + subscription) noexcept override; void onSubscriptionResumed( - const yarpl::Reference& subscription) noexcept override; + const yarpl::Reference& + subscription) noexcept override; void onSubscriberPaused( - const yarpl::Reference>& subscriber) noexcept override; + const yarpl::Reference>& + subscriber) noexcept override; void onSubscriberResumed( - const yarpl::Reference>& subscriber) noexcept override; + const yarpl::Reference>& + subscriber) noexcept override; }; using DefaultRequestHandler = NullRequestHandler; diff --git a/src/temporary_home/OldNewBridge.h b/src/temporary_home/OldNewBridge.h index ff4055d20..c26074bfc 100644 --- a/src/temporary_home/OldNewBridge.h +++ b/src/temporary_home/OldNewBridge.h @@ -18,8 +18,7 @@ namespace rsocket { class NewToOldSubscription : public yarpl::flowable::Subscription { public: - explicit NewToOldSubscription( - std::shared_ptr inner) + explicit NewToOldSubscription(std::shared_ptr inner) : inner_{std::move(inner)} {} ~NewToOldSubscription() = default; @@ -38,8 +37,7 @@ class NewToOldSubscription : public yarpl::flowable::Subscription { std::shared_ptr inner_; }; -class OldToNewSubscriber - : public rsocket::Subscriber { +class OldToNewSubscriber : public rsocket::Subscriber { public: explicit OldToNewSubscriber( yarpl::Reference> inner) @@ -79,7 +77,8 @@ class OldToNewSubscriber class OldToNewSubscription : public rsocket::Subscription { public: - explicit OldToNewSubscription(yarpl::Reference inner) + explicit OldToNewSubscription( + yarpl::Reference inner) : inner_{inner} {} void request(size_t n) noexcept override { @@ -103,11 +102,11 @@ class OldToNewSubscription : public rsocket::Subscription { yarpl::Reference inner_{nullptr}; }; -class NewToOldSubscriber : public yarpl::flowable::Subscriber { +class NewToOldSubscriber + : public yarpl::flowable::Subscriber { public: explicit NewToOldSubscriber( - std::shared_ptr> - inner) + std::shared_ptr> inner) : inner_{std::move(inner)} {} void onSubscribe( @@ -185,8 +184,9 @@ class EagerSubscriberBridge subscription_.reset(); } - void subscribe(yarpl::Reference> inner) { - CHECK(!inner_); // only one call to subscribe is supported + void subscribe( + yarpl::Reference> inner) { + CHECK(!inner_); // only one call to subscribe is supported CHECK(inner); inner_ = std::move(inner); if (subscription_) { @@ -198,5 +198,4 @@ class EagerSubscriberBridge yarpl::Reference> inner_; yarpl::Reference subscription_; }; - } diff --git a/src/temporary_home/RequestHandler.h b/src/temporary_home/RequestHandler.h index c5d291e70..bfc37bd98 100644 --- a/src/temporary_home/RequestHandler.h +++ b/src/temporary_home/RequestHandler.h @@ -2,9 +2,9 @@ #pragma once -#include "src/internal/Common.h" -#include "src/RSocketParameters.h" #include "src/Payload.h" +#include "src/RSocketParameters.h" +#include "src/internal/Common.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" @@ -18,22 +18,26 @@ class RequestHandler { virtual ~RequestHandler() = default; /// Handles a new Channel requested by the other end. - virtual yarpl::Reference> handleRequestChannel( + virtual yarpl::Reference> + handleRequestChannel( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept = 0; + const yarpl::Reference>& + response) noexcept = 0; /// Handles a new Stream requested by the other end. virtual void handleRequestStream( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept = 0; + const yarpl::Reference>& + response) noexcept = 0; /// Handles a new inbound RequestResponse requested by the other end. virtual void handleRequestResponse( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept = 0; + const yarpl::Reference>& + response) noexcept = 0; /// Handles a new fire-and-forget request sent by the other end. virtual void handleFireAndForgetRequest( @@ -46,12 +50,12 @@ class RequestHandler { /// Temporary home - this should eventually be an input to asking for a /// RequestHandler so negotiation is possible - virtual std::shared_ptr handleSetupPayload(SetupParameters request) noexcept = 0; + virtual std::shared_ptr handleSetupPayload( + SetupParameters request) noexcept = 0; /// Temporary home - this should accompany handleSetupPayload /// Return stream state for the given token. Return nullptr to disable resume - virtual bool handleResume( - ResumeParameters resumeParams) noexcept = 0; + virtual bool handleResume(ResumeParameters resumeParams) noexcept = 0; // Handle a stream that can resume in a "clean" state. Client and Server are // up-to-date. @@ -65,17 +69,21 @@ class RequestHandler { // TODO: cleanup the methods above virtual void onSubscriptionPaused( - const yarpl::Reference& subscription) noexcept = 0; + const yarpl::Reference& + subscription) noexcept = 0; virtual void onSubscriptionResumed( - const yarpl::Reference& subscription) noexcept = 0; + const yarpl::Reference& + subscription) noexcept = 0; virtual void onSubscriberPaused( - const yarpl::Reference>& subscriber) noexcept = 0; + const yarpl::Reference>& + subscriber) noexcept = 0; virtual void onSubscriberResumed( - const yarpl::Reference>& subscriber) noexcept = 0; + const yarpl::Reference>& + subscriber) noexcept = 0; // TODO (T17774014): Move to separate interface - virtual void socketOnConnected(){} - virtual void socketOnDisconnected(folly::exception_wrapper& listener){} - virtual void socketOnClosed(folly::exception_wrapper& listener){} + virtual void socketOnConnected() {} + virtual void socketOnDisconnected(folly::exception_wrapper& listener) {} + virtual void socketOnClosed(folly::exception_wrapper& listener) {} }; } diff --git a/src/temporary_home/ServerConnectionAcceptor.cpp b/src/temporary_home/ServerConnectionAcceptor.cpp index f5d372ae4..a8eade669 100644 --- a/src/temporary_home/ServerConnectionAcceptor.cpp +++ b/src/temporary_home/ServerConnectionAcceptor.cpp @@ -3,11 +3,11 @@ #include "ServerConnectionAcceptor.h" #include #include "src/DuplexConnection.h" +#include "src/RSocketStats.h" #include "src/framing/Frame.h" #include "src/framing/FrameProcessor.h" #include "src/framing/FrameSerializer.h" #include "src/framing/FrameTransport.h" -#include "src/RSocketStats.h" #include diff --git a/src/temporary_home/ServerConnectionAcceptor.h b/src/temporary_home/ServerConnectionAcceptor.h index dc2dae690..714af895d 100644 --- a/src/temporary_home/ServerConnectionAcceptor.h +++ b/src/temporary_home/ServerConnectionAcceptor.h @@ -4,8 +4,8 @@ #include #include -#include "src/internal/Common.h" #include "src/RSocketParameters.h" +#include "src/internal/Common.h" namespace folly { class EventBase; diff --git a/src/temporary_home/SubscriberBase.h b/src/temporary_home/SubscriberBase.h index 318499dae..bee2dee76 100644 --- a/src/temporary_home/SubscriberBase.h +++ b/src/temporary_home/SubscriberBase.h @@ -5,10 +5,10 @@ #include #include #include -#include "src/internal/EnableSharedFromThis.h" -#include "src/temporary_home/Executor.h" #include "src/Payload.h" +#include "src/internal/EnableSharedFromThis.h" #include "src/internal/ReactiveStreamsCompat.h" +#include "src/temporary_home/Executor.h" namespace rsocket { diff --git a/src/temporary_home/SubscriptionBase.h b/src/temporary_home/SubscriptionBase.h index 40d80c462..20e2dbd4a 100644 --- a/src/temporary_home/SubscriptionBase.h +++ b/src/temporary_home/SubscriptionBase.h @@ -3,8 +3,8 @@ #pragma once #include "src/internal/EnableSharedFromThis.h" -#include "src/temporary_home/Executor.h" #include "src/internal/ReactiveStreamsCompat.h" +#include "src/temporary_home/Executor.h" namespace rsocket { @@ -23,16 +23,12 @@ class SubscriptionBase : public Subscription, void request(size_t n) noexcept override final { auto thisPtr = this->shared_from_this(); - runInExecutor([thisPtr, n]() { - thisPtr->requestImpl(n); - }); + runInExecutor([thisPtr, n]() { thisPtr->requestImpl(n); }); } void cancel() noexcept override final { auto thisPtr = this->shared_from_this(); - runInExecutor([thisPtr]() { - thisPtr->cancelImpl(); - }); + runInExecutor([thisPtr]() { thisPtr->cancelImpl(); }); } }; diff --git a/src/transports/tcp/TcpConnectionAcceptor.h b/src/transports/tcp/TcpConnectionAcceptor.h index 3eecc8c64..1502f83e8 100644 --- a/src/transports/tcp/TcpConnectionAcceptor.h +++ b/src/transports/tcp/TcpConnectionAcceptor.h @@ -42,9 +42,9 @@ class TcpConnectionAcceptor : public ConnectionAcceptor { * Bind an AsyncServerSocket and start accepting TCP connections. */ folly::Future start( - std::function, - folly::EventBase&)>) override; + std::function< + void(std::unique_ptr, folly::EventBase&)>) + override; /** * Shutdown the AsyncServerSocket and associated listener thread. @@ -61,9 +61,8 @@ class TcpConnectionAcceptor : public ConnectionAcceptor { /// thread. std::vector> callbacks_; - std::function, - folly::EventBase&)> + std::function< + void(std::unique_ptr, folly::EventBase&)> onAccept_; /// The socket listening for new connections. diff --git a/tck-test/MarbleProcessor.cpp b/tck-test/MarbleProcessor.cpp index 67a110a0b..0dff1fcf6 100644 --- a/tck-test/MarbleProcessor.cpp +++ b/tck-test/MarbleProcessor.cpp @@ -79,7 +79,8 @@ void MarbleProcessor::run() { while (!canTerminate_) ; LOG(INFO) << "Sending onError"; - subscriber_->onError(std::make_exception_ptr(std::runtime_error("Marble Triggered Error"))); + subscriber_->onError(std::make_exception_ptr( + std::runtime_error("Marble Triggered Error"))); return; case '|': while (!canTerminate_) diff --git a/tck-test/TestSubscriber.h b/tck-test/TestSubscriber.h index a539702e0..efb4b771b 100644 --- a/tck-test/TestSubscriber.h +++ b/tck-test/TestSubscriber.h @@ -2,10 +2,10 @@ #pragma once +#include #include #include #include -#include #include "src/Payload.h" #include "yarpl/flowable/Subscriber.h" @@ -33,8 +33,8 @@ class TestSubscriber : public yarpl::flowable::Subscriber { void assertCanceled(); protected: - void onSubscribe( - yarpl::Reference subscription) noexcept override; + void onSubscribe(yarpl::Reference + subscription) noexcept override; void onNext(Payload element) noexcept override; void onComplete() noexcept override; void onError(std::exception_ptr ex) noexcept override; diff --git a/tck-test/client.cpp b/tck-test/client.cpp index 763fd44e4..dd07795b5 100644 --- a/tck-test/client.cpp +++ b/tck-test/client.cpp @@ -7,8 +7,8 @@ #include #include "test/deprecated/ReactiveSocket.h" -#include "src/temporary_home/NullRequestHandler.h" #include "src/framing/FramedDuplexConnection.h" +#include "src/temporary_home/NullRequestHandler.h" #include "src/transports/tcp/TcpDuplexConnection.h" #include "tck-test/TestFileParser.h" diff --git a/tck-test/server.cpp b/tck-test/server.cpp index 7ca3bcff1..2d252f1f7 100644 --- a/tck-test/server.cpp +++ b/tck-test/server.cpp @@ -9,9 +9,9 @@ #include #include "test/deprecated/ReactiveSocket.h" +#include "src/framing/FramedDuplexConnection.h" #include "src/temporary_home/NullRequestHandler.h" #include "src/temporary_home/SubscriptionBase.h" -#include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" #include "test/test_utils/StatsPrinter.h" diff --git a/test/PayloadTest.cpp b/test/PayloadTest.cpp index c617ba4d7..b0b88f934 100644 --- a/test/PayloadTest.cpp +++ b/test/PayloadTest.cpp @@ -3,8 +3,8 @@ #include #include #include -#include "src/framing/Frame.h" #include "src/Payload.h" +#include "src/framing/Frame.h" #include "src/framing/FrameSerializer_v0_1.h" using namespace ::testing; diff --git a/test/RSocketClientServerTest.cpp b/test/RSocketClientServerTest.cpp index 8ad7dd343..3e71824e3 100644 --- a/test/RSocketClientServerTest.cpp +++ b/test/RSocketClientServerTest.cpp @@ -5,10 +5,10 @@ #include -#include "test/handlers/HelloStreamRequestHandler.h" #include "src/RSocket.h" #include "src/transports/tcp/TcpConnectionAcceptor.h" #include "src/transports/tcp/TcpConnectionFactory.h" +#include "test/handlers/HelloStreamRequestHandler.h" using namespace rsocket; using namespace rsocket::tests; diff --git a/test/ServerConnectionAcceptorTest.cpp b/test/ServerConnectionAcceptorTest.cpp index 40ee5611d..60afcbf0a 100644 --- a/test/ServerConnectionAcceptorTest.cpp +++ b/test/ServerConnectionAcceptorTest.cpp @@ -1,16 +1,16 @@ // Copyright 2004-present Facebook. All Rights Reserved. +#include +#include +#include #include "src/RSocketParameters.h" #include "src/framing/FrameProcessor.h" #include "src/framing/FrameSerializer.h" #include "src/framing/FrameTransport.h" -#include "src/temporary_home/ServerConnectionAcceptor.h" #include "src/framing/FramedDuplexConnection.h" -#include "test/test_utils/InlineConnection.h" +#include "src/temporary_home/ServerConnectionAcceptor.h" #include "test/streams/Mocks.h" -#include -#include -#include +#include "test/test_utils/InlineConnection.h" using namespace rsocket; using namespace testing; @@ -106,14 +106,13 @@ TEST_F(ServerConnectionAcceptorTest, SetupFrame) { SetupParameters setupPayload( "metadataMimeType", "dataMimeType", Payload(), true); EXPECT_CALL(*handler_, doSetupNewSocket(_, _)) - .WillOnce(Invoke( - [&](std::shared_ptr transport, - SetupParameters& payload) { - ASSERT_EQ(setupPayload.token, payload.token); - ASSERT_EQ(setupPayload.metadataMimeType, payload.metadataMimeType); - ASSERT_EQ(setupPayload.dataMimeType, payload.dataMimeType); - transport->close(folly::exception_wrapper()); - })); + .WillOnce(Invoke([&]( + std::shared_ptr transport, SetupParameters& payload) { + ASSERT_EQ(setupPayload.token, payload.token); + ASSERT_EQ(setupPayload.metadataMimeType, payload.metadataMimeType); + ASSERT_EQ(setupPayload.dataMimeType, payload.dataMimeType); + transport->close(folly::exception_wrapper()); + })); auto frameSerializer = FrameSerializer::createCurrentVersion(); acceptor_.accept(std::move(serverConnection_), handler_); @@ -135,18 +134,16 @@ TEST_F(ServerConnectionAcceptorTest, SetupFrame) { TEST_F(ServerConnectionAcceptorTest, ResumeFrameNoSession) { std::unique_ptr data; EXPECT_CALL(*clientInput_, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& buffer) { - data = std::move(buffer); - })); - + .WillOnce(Invoke([&](std::unique_ptr& buffer) { + data = std::move(buffer); + })); ResumeParameters resumeParams( ResumeIdentificationToken::generateNew(), 1, 2, FrameSerializer::getCurrentProtocolVersion()); - EXPECT_CALL(*handler_, resumeSocket(_, _)) - .WillOnce(Return(false)); + EXPECT_CALL(*handler_, resumeSocket(_, _)).WillOnce(Return(false)); auto frameSerializer = FrameSerializer::createCurrentVersion(); acceptor_.accept(std::move(serverConnection_), handler_); @@ -248,19 +245,17 @@ TEST_F(ServerConnectionAcceptorTest, VerifyAsyncProcessorFrame) { FrameSerializer::getCurrentProtocolVersion()))); // The transport won't have a processor now, try sending a frame - clientOutput_->onNext(frameSerializer->serializeOut(Frame_REQUEST_FNF( - 1, - FrameFlags::EMPTY, - Payload()))); + clientOutput_->onNext(frameSerializer->serializeOut( + Frame_REQUEST_FNF(1, FrameFlags::EMPTY, Payload()))); auto processor = std::make_shared>(); - EXPECT_CALL(*processor, onTerminal(_)) - .Times(Exactly(0)); + EXPECT_CALL(*processor, onTerminal(_)).Times(Exactly(0)); EXPECT_CALL(*processor, processFrame_(_)) - .WillOnce(Invoke([&](std::unique_ptr& frame) { - Frame_REQUEST_FNF fnfFrame; - EXPECT_TRUE(frameSerializer->deserializeFrom(fnfFrame, std::move(frame))); - })); + .WillOnce(Invoke([&](std::unique_ptr& frame) { + Frame_REQUEST_FNF fnfFrame; + EXPECT_TRUE( + frameSerializer->deserializeFrom(fnfFrame, std::move(frame))); + })); transport_->setFrameProcessor(processor); @@ -299,9 +294,9 @@ TEST_F(ServerConnectionAcceptorTest, VerifyAsyncProcessorTerminal) { auto processor = std::make_shared>(); EXPECT_CALL(*processor, onTerminal(_)) - .WillOnce(Invoke([&](folly::exception_wrapper ex) { - EXPECT_THAT(ex.what().toStdString(), HasSubstr("too bad")); - })); + .WillOnce(Invoke([&](folly::exception_wrapper ex) { + EXPECT_THAT(ex.what().toStdString(), HasSubstr("too bad")); + })); transport_->setFrameProcessor(processor); diff --git a/test/deprecated/ReactiveSocket.cpp b/test/deprecated/ReactiveSocket.cpp index 40ffa5963..eb2e5641a 100644 --- a/test/deprecated/ReactiveSocket.cpp +++ b/test/deprecated/ReactiveSocket.cpp @@ -8,9 +8,9 @@ #include #include +#include "src/framing/FrameTransport.h" #include "src/internal/ClientResumeStatusCallback.h" #include "src/statemachine/RSocketStateMachine.h" -#include "src/framing/FrameTransport.h" #include "src/temporary_home/RequestHandler.h" namespace rsocket { @@ -40,8 +40,7 @@ ReactiveSocket::ReactiveSocket( connection_->stats().socketCreated(); } -std::unique_ptr -ReactiveSocket::fromClientConnection( +std::unique_ptr ReactiveSocket::fromClientConnection( folly::Executor& executor, std::unique_ptr connection, std::unique_ptr handler, @@ -60,8 +59,7 @@ ReactiveSocket::fromClientConnection( return socket; } -std::unique_ptr -ReactiveSocket::disconnectedClient( +std::unique_ptr ReactiveSocket::disconnectedClient( folly::Executor& executor, std::unique_ptr handler, std::shared_ptr stats, @@ -80,8 +78,7 @@ ReactiveSocket::disconnectedClient( return socket; } -std::unique_ptr -ReactiveSocket::fromServerConnection( +std::unique_ptr ReactiveSocket::fromServerConnection( folly::Executor& executor, std::unique_ptr connection, std::unique_ptr handler, @@ -101,8 +98,7 @@ ReactiveSocket::fromServerConnection( return socket; } -std::unique_ptr -ReactiveSocket::disconnectedServer( +std::unique_ptr ReactiveSocket::disconnectedServer( folly::Executor& executor, std::shared_ptr handler, std::shared_ptr stats, @@ -120,7 +116,8 @@ ReactiveSocket::disconnectedServer( return socket; } -yarpl::Reference> ReactiveSocket::requestChannel( +yarpl::Reference> +ReactiveSocket::requestChannel( yarpl::Reference> responseSink) { debugCheckCorrectExecutor(); checkNotClosed(); @@ -152,8 +149,7 @@ void ReactiveSocket::requestFireAndForget(Payload request) { connection_->requestFireAndForget(std::move(request)); } -void ReactiveSocket::metadataPush( - std::unique_ptr metadata) { +void ReactiveSocket::metadataPush(std::unique_ptr metadata) { debugCheckCorrectExecutor(); checkNotClosed(); connection_->metadataPush(std::move(metadata)); diff --git a/test/deprecated/ReactiveSocket.h b/test/deprecated/ReactiveSocket.h index 9984c6575..d082a9a70 100644 --- a/test/deprecated/ReactiveSocket.h +++ b/test/deprecated/ReactiveSocket.h @@ -3,10 +3,10 @@ #pragma once #include -#include "src/internal/Common.h" -#include "src/RSocketParameters.h" #include "src/Payload.h" +#include "src/RSocketParameters.h" #include "src/RSocketStats.h" +#include "src/internal/Common.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscription.h" @@ -24,7 +24,7 @@ class RequestHandler; folly::Executor& defaultExecutor(); - // TODO eliminate this class and use RSocketStateMachine directly +// TODO eliminate this class and use RSocketStateMachine directly class ReactiveSocket { public: ReactiveSocket(ReactiveSocket&&) = delete; diff --git a/test/deprecated/ReactiveSocketConcurrencyTest.cpp b/test/deprecated/ReactiveSocketConcurrencyTest.cpp index 8e8f15873..cbae20a38 100644 --- a/test/deprecated/ReactiveSocketConcurrencyTest.cpp +++ b/test/deprecated/ReactiveSocketConcurrencyTest.cpp @@ -11,13 +11,13 @@ #include #include -#include "test/test_utils/MockStats.h" -#include "test/deprecated/ReactiveSocket.h" -#include "src/framing/FramedDuplexConnection.h" #include "src/framing/FrameSerializer_v0_1.h" +#include "src/framing/FramedDuplexConnection.h" +#include "test/deprecated/ReactiveSocket.h" +#include "test/streams/Mocks.h" #include "test/test_utils/InlineConnection.h" #include "test/test_utils/MockRequestHandler.h" -#include "test/streams/Mocks.h" +#include "test/test_utils/MockStats.h" using namespace ::testing; using namespace ::rsocket; @@ -58,62 +58,65 @@ class ClientSideConcurrencyTest : public testing::Test { defaultExecutor(), std::move(serverConn), std::move(serverHandler)); EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // request is called from the thread1 - // but delivered on thread2 - thread1.getEventBase()->runInEventBaseThreadAndWait( - [&]() { sub->request(2); }); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + // request is called from the thread1 + // but delivered on thread2 + thread1.getEventBase()->runInEventBaseThreadAndWait( + [&]() { sub->request(2); }); + })); // The request reaches the other end and triggers new responder to be set // up. EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); + .WillOnce(Invoke([&]( + Payload& request, + StreamId streamId, + yarpl::Reference> response) { + serverOutput = response; + serverOutput->onSubscribe(serverOutputSub); + })); EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); + .WillOnce(Invoke([&]( + Payload& request, + StreamId streamId, + yarpl::Reference> response) { + serverOutput = response; + serverOutput->onSubscribe(serverOutputSub); + })); EXPECT_CALL(serverHandlerRef, handleRequestChannel_(_, _, _)) .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); + .WillOnce(Invoke([&]( + Payload& request, + StreamId streamId, + yarpl::Reference> response) { + EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { + EXPECT_CALL(*serverInput, onSubscribe_(_)) + .WillOnce(Invoke( + [&](yarpl::Reference sub) { EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); serverInputSub = sub; sub->request(2); })); - EXPECT_CALL(*serverInput, onNext_(_)) - .WillOnce(Invoke([&](Payload& payload) { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - serverInputSub->cancel(); - serverInputSub = nullptr; - })); - EXPECT_CALL(*serverInput, onComplete_()).WillOnce(Invoke([&]() { + EXPECT_CALL(*serverInput, onNext_(_)) + .WillOnce(Invoke([&](Payload& payload) { + EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); + serverInputSub->cancel(); + serverInputSub = nullptr; + })); + EXPECT_CALL(*serverInput, onComplete_()) + .WillOnce(Invoke([&]() { EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); })); - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); + serverOutput = response; + serverOutput->onSubscribe(serverOutputSub); - return serverInput; - })); + return serverInput; + })); EXPECT_CALL(*serverOutputSub, request_(_)) // The server delivers them immediately. @@ -133,18 +136,20 @@ class ClientSideConcurrencyTest : public testing::Test { } })); - EXPECT_CALL(*serverOutputSub, cancel_()).WillOnce(Invoke([&]() { - serverOutput->onComplete(); - serverOutput = nullptr; - })); - - EXPECT_CALL(*clientInput, onComplete_()).WillOnce(Invoke([&]() { - if (!clientTerminatesInteraction_) { - clientInputSub->cancel(); - clientInputSub = nullptr; - done(); - } - })); + EXPECT_CALL(*serverOutputSub, cancel_()) + .WillOnce(Invoke([&]() { + serverOutput->onComplete(); + serverOutput = nullptr; + })); + + EXPECT_CALL(*clientInput, onComplete_()) + .WillOnce(Invoke([&]() { + if (!clientTerminatesInteraction_) { + clientInputSub->cancel(); + clientInputSub = nullptr; + done(); + } + })); } ~ClientSideConcurrencyTest() { @@ -175,16 +180,19 @@ class ClientSideConcurrencyTest : public testing::Test { std::unique_ptr clientSock; std::unique_ptr serverSock; - yarpl::Reference>> clientInput{ - make_ref>>()}; + yarpl::Reference>> + clientInput{ + make_ref>>()}; yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; - yarpl::Reference> serverOutputSub{ - make_ref>()}; + yarpl::Reference> + serverOutputSub{ + make_ref>()}; - yarpl::Reference>> serverInput{ - make_ref>>()}; + yarpl::Reference>> + serverInput{ + make_ref>>()}; yarpl::Reference serverInputSub; bool clientTerminatesInteraction_{true}; @@ -217,13 +225,15 @@ TEST_F(ClientSideConcurrencyTest, DISABLED_RequestChannelTest) { clientOutput = clientSock->requestChannel(clientInput); }); - auto clientOutputSub = make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)).WillOnce(Invoke([&](size_t) { - thread1.getEventBase()->runInEventBaseThread([clientOutput]() { - // first payload for the server RequestHandler - clientOutput->onNext(Payload(originalPayload())); - }); - })); + auto clientOutputSub = + make_ref>(); + EXPECT_CALL(*clientOutputSub, request_(1)) + .WillOnce(Invoke([&](size_t) { + thread1.getEventBase()->runInEventBaseThread([clientOutput]() { + // first payload for the server RequestHandler + clientOutput->onNext(Payload(originalPayload())); + }); + })); EXPECT_CALL(*clientOutputSub, request_(2)) .WillOnce(Invoke([clientOutput](int64_t) { // second payload for the server input subscriber @@ -270,10 +280,11 @@ class ServerSideConcurrencyTest : public testing::Test { }); EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(3); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + sub->request(3); + })); // The request reaches the other end and triggers new responder to be set // up. EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) @@ -281,7 +292,8 @@ class ServerSideConcurrencyTest : public testing::Test { .WillOnce(Invoke( [&](Payload& request, StreamId streamId, - const yarpl::Reference>& response) { + const yarpl::Reference>& + response) { serverOutput = response; serverOutput->onSubscribe(serverOutputSub); })); @@ -290,7 +302,8 @@ class ServerSideConcurrencyTest : public testing::Test { .WillOnce(Invoke( [&](Payload& request, StreamId streamId, - const yarpl::Reference>& response) { + const yarpl::Reference>& + response) { serverOutput = response; serverOutput->onSubscribe(serverOutputSub); })); @@ -299,23 +312,26 @@ class ServerSideConcurrencyTest : public testing::Test { .WillOnce(Invoke( [&](Payload& request, StreamId streamId, - const yarpl::Reference>& response) { + const yarpl::Reference>& + response) { clientTerminatesInteraction_ = false; EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { - serverInputSub = sub; - thread1.getEventBase()->runInEventBaseThreadAndWait( - [&]() { sub->request(2); }); - })); + .WillOnce(Invoke( + [&](yarpl::Reference sub) { + serverInputSub = sub; + thread1.getEventBase()->runInEventBaseThreadAndWait( + [&]() { sub->request(2); }); + })); // TODO(t15917213): Re-enable this assertion! // EXPECT_CALL(*serverInput, onNext_(_)).Times(1); // because we cancel the stream in onSubscribe - EXPECT_CALL(*serverInput, onComplete_()).WillOnce(Invoke([&]() { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - })); + EXPECT_CALL(*serverInput, onComplete_()) + .WillOnce(Invoke([&]() { + EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); + })); serverOutput = response; serverOutput->onSubscribe(serverOutputSub); @@ -348,19 +364,21 @@ class ServerSideConcurrencyTest : public testing::Test { } })); - EXPECT_CALL(*serverOutputSub, cancel_()).WillRepeatedly(Invoke([&]() { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - serverOutput->onComplete(); - serverOutput = nullptr; - })); - - EXPECT_CALL(*clientInput, onComplete_()).WillOnce(Invoke([&]() { - if (!clientTerminatesInteraction_) { - clientInputSub->cancel(); - clientInputSub = nullptr; - done(); - } - })); + EXPECT_CALL(*serverOutputSub, cancel_()) + .WillRepeatedly(Invoke([&]() { + EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); + serverOutput->onComplete(); + serverOutput = nullptr; + })); + + EXPECT_CALL(*clientInput, onComplete_()) + .WillOnce(Invoke([&]() { + if (!clientTerminatesInteraction_) { + clientInputSub->cancel(); + clientInputSub = nullptr; + done(); + } + })); } ~ServerSideConcurrencyTest() { @@ -391,16 +409,19 @@ class ServerSideConcurrencyTest : public testing::Test { std::unique_ptr clientSock; std::unique_ptr serverSock; - yarpl::Reference>> clientInput{ - make_ref>>()}; + yarpl::Reference>> + clientInput{ + make_ref>>()}; yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; - yarpl::Reference> serverOutputSub{ - make_ref>()}; + yarpl::Reference> + serverOutputSub{ + make_ref>()}; - yarpl::Reference>> serverInput{ - make_ref>>()}; + yarpl::Reference>> + serverInput{ + make_ref>>()}; yarpl::Reference serverInputSub; bool clientTerminatesInteraction_{true}; @@ -426,7 +447,8 @@ TEST_F(ServerSideConcurrencyTest, DISABLED_RequestStreamTest) { TEST_F(ServerSideConcurrencyTest, DISABLED_RequestChannelTest) { auto clientOutput = clientSock->requestChannel(clientInput); - auto clientOutputSub = make_ref>(); + auto clientOutputSub = + make_ref>(); EXPECT_CALL(*clientOutputSub, request_(1)) .WillOnce(Invoke([clientOutput](size_t n) { // first payload for the server RequestHandler @@ -471,9 +493,8 @@ class InitialRequestNDeliveredTest : public testing::Test { // allow receiving frames from the automaton subscription->request(std::numeric_limits::max()); })); - EXPECT_CALL(*testOutputSubscriber, onComplete_()).WillOnce(Invoke([&]() { - done = true; - })); + EXPECT_CALL(*testOutputSubscriber, onComplete_()) + .WillOnce(Invoke([&]() { done = true; })); testConnection->setInput(testOutputSubscriber); testConnectionSub->onSubscribe(testInputSubscription); @@ -499,7 +520,8 @@ class InitialRequestNDeliveredTest : public testing::Test { .WillOnce(Invoke( [&](Payload& request, StreamId streamId, - const yarpl::Reference>& response) { + const yarpl::Reference>& + response) { thread2.getEventBase()->runInEventBaseThread([response, this] { /* sleep override */ std::this_thread::sleep_for( std::chrono::milliseconds(5)); @@ -511,7 +533,8 @@ class InitialRequestNDeliveredTest : public testing::Test { .WillOnce(Invoke( [&](Payload& request, StreamId streamId, - const yarpl::Reference>& response) { + const yarpl::Reference>& + response) { thread2.getEventBase()->runInEventBaseThread([response, this] { /* sleep override */ std::this_thread::sleep_for( std::chrono::milliseconds(5)); diff --git a/test/deprecated/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp index 3cde6157a..b3143d6de 100644 --- a/test/deprecated/ReactiveSocketTest.cpp +++ b/test/deprecated/ReactiveSocketTest.cpp @@ -1,24 +1,24 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include +#include #include #include #include #include -#include #include #include #include #include #include "src/framing/FrameTransport.h" +#include "src/internal/FollyKeepaliveTimer.h" #include "src/temporary_home/NullRequestHandler.h" #include "test/deprecated/ReactiveSocket.h" -#include "src/internal/FollyKeepaliveTimer.h" +#include "test/streams/Mocks.h" #include "test/test_utils/InlineConnection.h" #include "test/test_utils/MockKeepaliveTimer.h" #include "test/test_utils/MockRequestHandler.h" #include "test/test_utils/MockStats.h" -#include "test/streams/Mocks.h" using namespace ::testing; using namespace ::rsocket; @@ -50,12 +50,18 @@ TEST(ReactiveSocketTest, RequestChannel) { auto serverConn = std::make_unique(); clientConn->connectTo(*serverConn); - auto clientInput = make_ref>>(); - auto serverInput = make_ref>>(); - auto clientOutputSub = make_ref>(); - auto serverOutputSub = make_ref>(); - yarpl::Reference clientInputSub, serverInputSub; - yarpl::Reference> clientOutput, serverOutput; + auto clientInput = + make_ref>>(); + auto serverInput = + make_ref>>(); + auto clientOutputSub = + make_ref>(); + auto serverOutputSub = + make_ref>(); + yarpl::Reference clientInputSub, + serverInputSub; + yarpl::Reference> clientOutput, + serverOutput; auto requestHandler = std::make_unique>(); EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); @@ -85,8 +91,10 @@ TEST(ReactiveSocketTest, RequestChannel) { // Client creates a channel. EXPECT_CALL(*clientInput, onSubscribe_(_)) .InSequence(s) - .WillOnce(Invoke( - [&](yarpl::Reference sub) { clientInputSub = sub; })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + })); // The initial payload is requested automatically. EXPECT_CALL(*clientOutputSub, request_(1)) .InSequence(s) @@ -108,11 +116,12 @@ TEST(ReactiveSocketTest, RequestChannel) { })); EXPECT_CALL(*serverInput, onSubscribe_(_)) .InSequence(s) - .WillOnce(Invoke([&](yarpl::Reference sub) { - serverInputSub = sub; - // Client requests two payloads. - clientInputSub->request(2); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + serverInputSub = sub; + // Client requests two payloads. + clientInputSub->request(2); + })); EXPECT_CALL(*serverOutputSub, request_(2)) .InSequence(s) // The server delivers them immediately. @@ -177,8 +186,10 @@ TEST(ReactiveSocketTest, RequestStreamComplete) { auto serverConn = std::make_unique(); clientConn->connectTo(*serverConn); - auto clientInput = make_ref>>(); - auto serverOutputSub = make_ref>(); + auto clientInput = + make_ref>>(); + auto serverOutputSub = + make_ref>(); yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; @@ -210,11 +221,12 @@ TEST(ReactiveSocketTest, RequestStreamComplete) { // Client creates a stream EXPECT_CALL(*clientInput, onSubscribe_(_)) .InSequence(s) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request two payloads immediately. - clientInputSub->request(2); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + // Request two payloads immediately. + clientInputSub->request(2); + })); // The request reaches the other end and triggers new responder to be set up. EXPECT_CALL( serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) @@ -272,8 +284,10 @@ TEST(ReactiveSocketTest, RequestStreamCancel) { auto serverConn = std::make_unique(); clientConn->connectTo(*serverConn); - auto clientInput = make_ref>>(); - auto serverOutputSub = make_ref>(); + auto clientInput = + make_ref>>(); + auto serverOutputSub = + make_ref>(); yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; @@ -305,11 +319,12 @@ TEST(ReactiveSocketTest, RequestStreamCancel) { // Client creates a stream EXPECT_CALL(*clientInput, onSubscribe_(_)) .InSequence(s) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request two payloads immediately. - clientInputSub->request(2); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + // Request two payloads immediately. + clientInputSub->request(2); + })); // The request reaches the other end and triggers new responder to be set up. EXPECT_CALL( serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) @@ -364,8 +379,10 @@ TEST(ReactiveSocketTest, RequestStream) { auto serverConn = std::make_unique(); clientConn->connectTo(*serverConn); - auto clientInput = make_ref>>(); - auto serverOutputSub = make_ref>(); + auto clientInput = + make_ref>>(); + auto serverOutputSub = + make_ref>(); yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; @@ -373,7 +390,7 @@ TEST(ReactiveSocketTest, RequestStream) { EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); -auto clientSock = ReactiveSocket::fromClientConnection( + auto clientSock = ReactiveSocket::fromClientConnection( defaultExecutor(), std::move(clientConn), // No interactions on this mock, the client will not accept any requests. @@ -397,11 +414,12 @@ auto clientSock = ReactiveSocket::fromClientConnection( // Client creates a subscription. EXPECT_CALL(*clientInput, onSubscribe_(_)) .InSequence(s) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request two payloads immediately. - clientInputSub->request(2); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + // Request two payloads immediately. + clientInputSub->request(2); + })); // The request reaches the other end and triggers new responder to be set up. EXPECT_CALL( serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) @@ -480,13 +498,15 @@ TEST(ReactiveSocketTest, RequestStreamSendsOneRequest) { const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - auto responseSubscriber = make_ref>(); + auto responseSubscriber = + make_ref>(); yarpl::Reference clientInputSub; EXPECT_CALL(*responseSubscriber, onSubscribe_(_)) .Times(1) - .WillOnce(Invoke([&](yarpl::Reference subscription) { - clientInputSub = subscription; - })); + .WillOnce(Invoke( + [&](yarpl::Reference subscription) { + clientInputSub = subscription; + })); EXPECT_CALL(*testOutputSubscriber, onNext_(_)).Times(0); socket->requestStream(Payload(originalPayload->clone()), responseSubscriber); @@ -520,8 +540,10 @@ TEST(ReactiveSocketTest, RequestStreamSurplusResponse) { auto serverConn = std::make_unique(); clientConn->connectTo(*serverConn); - auto clientInput = make_ref>>(); - auto serverOutputSub = make_ref>(); + auto clientInput = + make_ref>>(); + auto serverOutputSub = + make_ref>(); yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; @@ -553,11 +575,12 @@ TEST(ReactiveSocketTest, RequestStreamSurplusResponse) { // Client creates a subscription. EXPECT_CALL(*clientInput, onSubscribe_(_)) .InSequence(s) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request one payload immediately. - clientInputSub->request(1); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + // Request one payload immediately. + clientInputSub->request(1); + })); // The request reaches the other end and triggers new responder to be set up. EXPECT_CALL( serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) @@ -565,7 +588,8 @@ TEST(ReactiveSocketTest, RequestStreamSurplusResponse) { .WillOnce(Invoke( [&](Payload& request, StreamId streamId, - const yarpl::Reference>& response) { + const yarpl::Reference>& + response) { serverOutput = response; serverOutput->onSubscribe(serverOutputSub); })); @@ -582,9 +606,9 @@ TEST(ReactiveSocketTest, RequestStreamSurplusResponse) { EXPECT_CALL(*clientInput, onError_(_)).Times(1).InSequence(s); EXPECT_CALL(*clientInput, onComplete_()).Times(0); // // Client closes the subscription in response. - EXPECT_CALL(*serverOutputSub, cancel_()).InSequence(s).WillOnce(Invoke([&]() { - serverOutput->onComplete(); - })); + EXPECT_CALL(*serverOutputSub, cancel_()) + .InSequence(s) + .WillOnce(Invoke([&]() { serverOutput->onComplete(); })); // Kick off the magic. clientSock->requestStream(Payload(originalPayload->clone()), clientInput); @@ -599,12 +623,13 @@ TEST(ReactiveSocketTest, RequestResponse) { auto serverConn = std::make_unique(); clientConn->connectTo(*serverConn); - auto clientInput = make_ref>>(); - auto serverOutputSub = make_ref>(); + auto clientInput = + make_ref>>(); + auto serverOutputSub = + make_ref>(); yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; - auto requestHandler = std::make_unique>(); EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); @@ -632,11 +657,12 @@ TEST(ReactiveSocketTest, RequestResponse) { // Client creates a subscription. EXPECT_CALL(*clientInput, onSubscribe_(_)) .InSequence(s) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request payload immediately. - clientInputSub->request(1); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + // Request payload immediately. + clientInputSub->request(1); + })); // The request reaches the other end and triggers new responder to be set up. EXPECT_CALL( @@ -665,9 +691,8 @@ TEST(ReactiveSocketTest, RequestResponse) { // had COMPELTE flag set EXPECT_CALL(*clientInput, onComplete_()).InSequence(s); - EXPECT_CALL(*serverOutputSub, cancel_()).WillOnce(Invoke([&]() { - serverOutput->onComplete(); - })); + EXPECT_CALL(*serverOutputSub, cancel_()) + .WillOnce(Invoke([&]() { serverOutput->onComplete(); })); // Kick off the magic. clientSock->requestResponse(Payload(originalPayload->clone()), clientInput); @@ -706,13 +731,15 @@ TEST(ReactiveSocketTest, RequestResponseSendsOneRequest) { const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - auto responseSubscriber = make_ref>(); + auto responseSubscriber = + make_ref>(); yarpl::Reference clientInputSub; EXPECT_CALL(*responseSubscriber, onSubscribe_(_)) .Times(1) - .WillOnce(Invoke([&](yarpl::Reference subscription) { - clientInputSub = subscription; - })); + .WillOnce(Invoke( + [&](yarpl::Reference subscription) { + clientInputSub = subscription; + })); EXPECT_CALL(*testOutputSubscriber, onNext_(_)).Times(0); socket->requestResponse( @@ -845,8 +872,7 @@ TEST(ReactiveSocketTest, SetupData) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - SetupParameters( - "text/plain", "text/plain", Payload("meta", "data"))); + SetupParameters("text/plain", "text/plain", Payload("meta", "data"))); auto serverHandler = std::make_unique>(); EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); @@ -900,8 +926,7 @@ TEST(ReactiveSocketTest, SetupWithKeepaliveAndStats) { std::move(clientConn), // No interactions on this mock, the client will not accept any requests. std::move(requestHandler), - SetupParameters( - "text/plain", "text/plain", Payload("meta", "data")), + SetupParameters("text/plain", "text/plain", Payload("meta", "data")), clientStats, std::move(clientKeepalive)); @@ -930,7 +955,7 @@ TEST(ReactiveSocketTest, GoodKeepalive) { auto requestHandler = std::make_unique>(); EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); + EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); clientSock = ReactiveSocket::fromClientConnection( *th->getEventBase(), @@ -938,8 +963,7 @@ TEST(ReactiveSocketTest, GoodKeepalive) { // No interactions on this mock, the client will not accept any // requests. std::move(requestHandler), - SetupParameters( - "text/plain", "text/plain", Payload("meta", "data")), + SetupParameters("text/plain", "text/plain", Payload("meta", "data")), clientStats, std::move(clientKeepalive)); @@ -968,17 +992,26 @@ TEST(ReactiveSocketTest, DISABLED_Destructor) { // instead? auto clientStats = std::make_shared>(); auto serverStats = std::make_shared>(); - std::array>>, 2> + std::array< + yarpl::Reference>>, + 2> clientInputs; - clientInputs[0] = make_ref>>(); - clientInputs[1] = make_ref>>(); - - std::array>, 2> serverOutputSubs; - serverOutputSubs[0] = make_ref>(); - serverOutputSubs[1] = make_ref>(); - - std::array, 2> clientInputSubs; - std::array>, 2> serverOutputs; + clientInputs[0] = + make_ref>>(); + clientInputs[1] = + make_ref>>(); + + std::array>, 2> + serverOutputSubs; + serverOutputSubs[0] = + make_ref>(); + serverOutputSubs[1] = + make_ref>(); + + std::array, 2> + clientInputSubs; + std::array>, 2> + serverOutputs; EXPECT_CALL(*clientStats, socketCreated()).Times(1); EXPECT_CALL(*serverStats, socketCreated()).Times(1); @@ -1019,12 +1052,12 @@ TEST(ReactiveSocketTest, DISABLED_Destructor) { // Client creates a subscription. EXPECT_CALL(*clientInputs[i], onSubscribe_(_)) .InSequence(s) - .WillOnce( - Invoke([i, &clientInputSubs](yarpl::Reference sub) { - clientInputSubs[i] = sub; - // Request two payloads immediately. - sub->request(2); - })); + .WillOnce(Invoke([i, &clientInputSubs]( + yarpl::Reference sub) { + clientInputSubs[i] = sub; + // Request two payloads immediately. + sub->request(2); + })); // The request reaches the other end and triggers new responder to be set // up. EXPECT_CALL( @@ -1054,8 +1087,9 @@ TEST(ReactiveSocketTest, DISABLED_Destructor) { Invoke([i, &serverOutputs]() { serverOutputs[i]->onComplete(); })); EXPECT_CALL(*clientInputs[i], onError_(_)) .InSequence(s1) - .WillOnce(Invoke([i, &clientInputSubs]( - const std::exception_ptr& ex) { LOG(INFO) << folly::exceptionStr(ex); })); + .WillOnce(Invoke([i, &clientInputSubs](const std::exception_ptr& ex) { + LOG(INFO) << folly::exceptionStr(ex); + })); } // Kick off the magic. @@ -1123,14 +1157,14 @@ TEST(ReactiveSocketTest, CloseWithError) { EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) .WillRepeatedly(Invoke([&](auto&) { - // TODO this has become somewhat odd ... - // it used to receive ReactiveSocket in the callback - // but no longer does as part of the refactor away from - // using ReactiveSocket.h - // so to make this test pass for now it uses the clientSock - // reference it creates outside of this callback - clientSock->closeConnectionError(errString.str()); - return nullptr; + // TODO this has become somewhat odd ... + // it used to receive ReactiveSocket in the callback + // but no longer does as part of the refactor away from + // using ReactiveSocket.h + // so to make this test pass for now it uses the clientSock + // reference it creates outside of this callback + clientSock->closeConnectionError(errString.str()); + return nullptr; })); auto serverSock = ReactiveSocket::disconnectedServer( @@ -1155,7 +1189,7 @@ class ReactiveSocketIgnoreRequestTest : public testing::Test { auto requestHandler = std::make_unique>(); EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); + EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); clientSock = ReactiveSocket::fromClientConnection( defaultExecutor(), @@ -1172,10 +1206,11 @@ class ReactiveSocketIgnoreRequestTest : public testing::Test { // Client request. EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(2); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + sub->request(2); + })); // // server RequestHandler is ignoring the request, we expect terminating @@ -1193,14 +1228,15 @@ class ReactiveSocketIgnoreRequestTest : public testing::Test { } static Payload testPayload() { - return Payload("foo"); + return Payload("foo"); } std::unique_ptr clientSock; std::unique_ptr serverSock; - yarpl::Reference>> clientInput{ - make_ref>>()}; + yarpl::Reference>> + clientInput{ + make_ref>>()}; yarpl::Reference clientInputSub; }; @@ -1215,13 +1251,13 @@ TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestStream) { TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestChannel) { auto clientOutput = clientSock->requestChannel(clientInput); - auto clientOutputSub = make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)).WillOnce(Invoke([clientOutput](size_t) { - clientOutput->onNext(testPayload()); - })); - EXPECT_CALL(*clientOutputSub, cancel_()).WillOnce(Invoke([clientOutput]() { - clientOutput->onComplete(); - })); + auto clientOutputSub = + make_ref>(); + EXPECT_CALL(*clientOutputSub, request_(1)) + .WillOnce(Invoke( + [clientOutput](size_t) { clientOutput->onNext(testPayload()); })); + EXPECT_CALL(*clientOutputSub, cancel_()) + .WillOnce(Invoke([clientOutput]() { clientOutput->onComplete(); })); clientOutput->onSubscribe(clientOutputSub); } @@ -1257,10 +1293,11 @@ class ReactiveSocketOnErrorOnShutdownTest : public testing::Test { defaultExecutor(), std::move(serverConn), std::move(serverHandler)); EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(2); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + sub->request(2); + })); EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) .Times(AtMost(1)) @@ -1292,10 +1329,11 @@ class ReactiveSocketOnErrorOnShutdownTest : public testing::Test { yarpl::Reference> response) { EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { - serverInputSub = sub; - sub->request(2); - })); + .WillOnce(Invoke( + [&](yarpl::Reference sub) { + serverInputSub = sub; + sub->request(2); + })); EXPECT_CALL(*serverInput, onComplete_()).Times(1); serverOutput = response; @@ -1309,10 +1347,11 @@ class ReactiveSocketOnErrorOnShutdownTest : public testing::Test { EXPECT_CALL(*clientInput, onNext_(_)).Times(0); EXPECT_CALL(*clientInput, onComplete_()).Times(0); - EXPECT_CALL(*serverOutputSub, cancel_()).WillOnce(Invoke([&]() { - serverOutput->onComplete(); - serverOutput = nullptr; - })); + EXPECT_CALL(*serverOutputSub, cancel_()) + .WillOnce(Invoke([&]() { + serverOutput->onComplete(); + serverOutput = nullptr; + })); EXPECT_CALL(*clientInput, onError_(_)) .WillOnce(Invoke([&](const std::exception_ptr) { @@ -1327,16 +1366,19 @@ class ReactiveSocketOnErrorOnShutdownTest : public testing::Test { const std::unique_ptr originalPayload{ folly::IOBuf::copyBuffer("foo")}; - yarpl::Reference>> clientInput{ - make_ref>>()}; + yarpl::Reference>> + clientInput{ + make_ref>>()}; yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; - yarpl::Reference> serverOutputSub{ - make_ref>()}; + yarpl::Reference> + serverOutputSub{ + make_ref>()}; - yarpl::Reference>> serverInput{ - make_ref>>()}; + yarpl::Reference>> + serverInput{ + make_ref>>()}; yarpl::Reference serverInputSub; }; @@ -1351,15 +1393,18 @@ TEST_F(ReactiveSocketOnErrorOnShutdownTest, DISABLED_RequestStream) { TEST_F(ReactiveSocketOnErrorOnShutdownTest, DISABLED_RequestChannel) { auto clientOutput = clientSock->requestChannel(clientInput); - auto clientOutputSub = make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)).WillOnce(Invoke([&](size_t) { - // this will initiate the interaction - clientOutput->onNext(Payload(originalPayload->clone())); - })); - EXPECT_CALL(*clientOutputSub, cancel_()).WillOnce(Invoke([&]() { - clientOutput->onComplete(); - clientOutput = nullptr; - })); + auto clientOutputSub = + make_ref>(); + EXPECT_CALL(*clientOutputSub, request_(1)) + .WillOnce(Invoke([&](size_t) { + // this will initiate the interaction + clientOutput->onNext(Payload(originalPayload->clone())); + })); + EXPECT_CALL(*clientOutputSub, cancel_()) + .WillOnce(Invoke([&]() { + clientOutput->onComplete(); + clientOutput = nullptr; + })); clientOutput->onSubscribe(clientOutputSub); } @@ -1430,7 +1475,7 @@ class ReactiveSocketEmptyPayloadTest : public testing::Test { auto requestHandler = std::make_unique>(); EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); + EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); clientSock = ReactiveSocket::fromClientConnection( defaultExecutor(), @@ -1452,87 +1497,96 @@ class ReactiveSocketEmptyPayloadTest : public testing::Test { defaultExecutor(), std::move(serverConn), std::move(serverHandler)); EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(2); - })); + .WillOnce( + Invoke([&](yarpl::Reference sub) { + clientInputSub = sub; + sub->request(2); + })); EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - CHECK(!request) << "incoming request is expected to be empty"; - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); + .WillOnce(Invoke([&]( + Payload& request, + StreamId streamId, + yarpl::Reference> response) { + CHECK(!request) << "incoming request is expected to be empty"; + serverOutput = response; + serverOutput->onSubscribe(serverOutputSub); + })); EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - CHECK(!request) << "incoming request is expected to be empty"; - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); + .WillOnce(Invoke([&]( + Payload& request, + StreamId streamId, + yarpl::Reference> response) { + CHECK(!request) << "incoming request is expected to be empty"; + serverOutput = response; + serverOutput->onSubscribe(serverOutputSub); + })); EXPECT_CALL(serverHandlerRef, handleRequestChannel_(_, _, _)) .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - CHECK(!request) << "incoming request is expected to be empty"; - - EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke([&](yarpl::Reference sub) { + .WillOnce(Invoke([&]( + Payload& request, + StreamId streamId, + yarpl::Reference> response) { + CHECK(!request) << "incoming request is expected to be empty"; + + EXPECT_CALL(*serverInput, onSubscribe_(_)) + .WillOnce(Invoke( + [&](yarpl::Reference sub) { serverInputSub = sub; sub->request(2); })); - EXPECT_CALL(*serverInput, onComplete_()).Times(1); - EXPECT_CALL(*serverInput, onError_(_)).Times(1).WillOnce(Invoke([&](std::exception_ptr ex) { - LOG(ERROR) << folly::exceptionStr(ex); + EXPECT_CALL(*serverInput, onComplete_()).Times(1); + EXPECT_CALL(*serverInput, onError_(_)) + .Times(1) + .WillOnce(Invoke([&](std::exception_ptr ex) { + LOG(ERROR) << folly::exceptionStr(ex); })); - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); + serverOutput = response; + serverOutput->onSubscribe(serverOutputSub); - return serverInput; - })); + return serverInput; + })); EXPECT_CALL(*clientInput, onComplete_()).Times(1); - EXPECT_CALL(*clientInput, onError_(_)).Times(1).WillOnce(Invoke([&](std::exception_ptr ex) { - LOG(ERROR) << folly::exceptionStr(ex); - })); - - EXPECT_CALL(*serverOutputSub, request_(_)).WillOnce(Invoke([&](size_t n) { - CHECK_GT(n, 0); - EXPECT_CALL(*clientInput, onNext_(_)) - .Times(n) - .WillRepeatedly(Invoke([&](Payload& p) { CHECK(!p); })); - while (n--) { - serverOutput->onNext(Payload()); - } - serverOutput->onComplete(); - serverOutput = nullptr; - })); + EXPECT_CALL(*clientInput, onError_(_)) + .Times(1) + .WillOnce(Invoke([&](std::exception_ptr ex) { + LOG(ERROR) << folly::exceptionStr(ex); + })); + + EXPECT_CALL(*serverOutputSub, request_(_)) + .WillOnce(Invoke([&](size_t n) { + CHECK_GT(n, 0); + EXPECT_CALL(*clientInput, onNext_(_)) + .Times(n) + .WillRepeatedly(Invoke([&](Payload& p) { CHECK(!p); })); + while (n--) { + serverOutput->onNext(Payload()); + } + serverOutput->onComplete(); + serverOutput = nullptr; + })); } std::unique_ptr clientSock; std::unique_ptr serverSock; - yarpl::Reference>> clientInput{ - make_ref>>()}; + yarpl::Reference>> + clientInput{ + make_ref>>()}; yarpl::Reference clientInputSub; yarpl::Reference> serverOutput; yarpl::Reference> serverOutputSub{ make_ref>()}; - yarpl::Reference>> serverInput{ - make_ref>>()}; + yarpl::Reference>> + serverInput{ + make_ref>>()}; yarpl::Reference serverInputSub; }; @@ -1546,7 +1600,8 @@ TEST_F(ReactiveSocketEmptyPayloadTest, DISABLED_RequestStream) { TEST_F(ReactiveSocketEmptyPayloadTest, DISABLED_RequestChannel) { auto clientOutput = clientSock->requestChannel(clientInput); - auto clientOutputSub = make_ref>(); + auto clientOutputSub = + make_ref>(); int send = 3; EXPECT_CALL(*clientOutputSub, request_(_)) diff --git a/test/deprecated/SubscriberBaseTest.cpp b/test/deprecated/SubscriberBaseTest.cpp index bdfc4e0c6..ca1d52e0d 100644 --- a/test/deprecated/SubscriberBaseTest.cpp +++ b/test/deprecated/SubscriberBaseTest.cpp @@ -78,9 +78,8 @@ TEST(SubscriberBaseTest, OnNextDelivered) { [&](std::shared_ptr s) { outSubscription = s; })); EXPECT_CALL(*subscriber, onNextImpl_(_)).Times(3); - EXPECT_CALL(*subscriber, onCompleteImpl_()).WillOnce(Invoke([&]() { - done = true; - })); + EXPECT_CALL(*subscriber, onCompleteImpl_()) + .WillOnce(Invoke([&]() { done = true; })); EXPECT_CALL(*subscriber, onErrorImpl_(_)).Times(0); auto subscription = std::make_shared(); diff --git a/test/framing/FramedReaderTest.cpp b/test/framing/FramedReaderTest.cpp index d184bf21b..bb7e7a66d 100644 --- a/test/framing/FramedReaderTest.cpp +++ b/test/framing/FramedReaderTest.cpp @@ -7,12 +7,12 @@ #include #include #include "src/framing/FrameSerializer.h" -#include "test/deprecated/ReactiveSocket.h" #include "src/framing/FramedDuplexConnection.h" #include "src/framing/FramedReader.h" +#include "test/deprecated/ReactiveSocket.h" +#include "test/streams/Mocks.h" #include "test/test_utils/InlineConnection.h" #include "test/test_utils/MockRequestHandler.h" -#include "test/streams/Mocks.h" using namespace ::testing; using namespace ::rsocket; @@ -194,17 +194,17 @@ TEST(FramedReaderTest, InvalidDataStream) { // Dump 1 invalid frame and expect an error auto inputSubscription = std::make_shared(); auto sub = testConnection->getOutput(); - EXPECT_CALL(*inputSubscription, request_(_)).WillOnce(Invoke([&](auto) { - auto invalidFrameSizePayload = - folly::IOBuf::createCombined(sizeof(int32_t)); - folly::io::Appender appender( - invalidFrameSizePayload.get(), /* do not grow */ 0); - appender.writeBE(1); - sub->onNext(std::move(invalidFrameSizePayload)); - })); - EXPECT_CALL(*inputSubscription, cancel_()).WillOnce(Invoke([&sub]() { - sub->onComplete(); - })); + EXPECT_CALL(*inputSubscription, request_(_)) + .WillOnce(Invoke([&](auto) { + auto invalidFrameSizePayload = + folly::IOBuf::createCombined(sizeof(int32_t)); + folly::io::Appender appender( + invalidFrameSizePayload.get(), /* do not grow */ 0); + appender.writeBE(1); + sub->onNext(std::move(invalidFrameSizePayload)); + })); + EXPECT_CALL(*inputSubscription, cancel_()) + .WillOnce(Invoke([&sub]() { sub->onComplete(); })); auto testOutputSubscriber = std::make_shared>>(); diff --git a/test/handlers/HelloStreamRequestHandler.h b/test/handlers/HelloStreamRequestHandler.h index 261293c94..c2009b703 100644 --- a/test/handlers/HelloStreamRequestHandler.h +++ b/test/handlers/HelloStreamRequestHandler.h @@ -3,10 +3,10 @@ #pragma once #include -#include "src/RSocketResponder.h" -#include "src/temporary_home/NullRequestHandler.h" #include "src/Payload.h" +#include "src/RSocketResponder.h" #include "src/internal/ReactiveStreamsCompat.h" +#include "src/temporary_home/NullRequestHandler.h" #include "src/temporary_home/SubscriptionBase.h" #include "yarpl/Flowable.h" @@ -17,9 +17,8 @@ class HelloStreamRequestHandler : public RSocketResponder { public: /// Handles a new inbound Stream requested by the other end. yarpl::Reference> - handleRequestStream( - rsocket::Payload request, - rsocket::StreamId streamId) override; + handleRequestStream(rsocket::Payload request, rsocket::StreamId streamId) + override; }; } } diff --git a/test/integration/ClientUtils.h b/test/integration/ClientUtils.h index 53de0dbfe..990a12667 100644 --- a/test/integration/ClientUtils.h +++ b/test/integration/ClientUtils.h @@ -4,13 +4,13 @@ #include -#include "src/internal/ClientResumeStatusCallback.h" #include "src/framing/FrameTransport.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "test/deprecated/ReactiveSocket.h" -#include "src/internal/FollyKeepaliveTimer.h" #include "src/framing/FramedDuplexConnection.h" +#include "src/internal/ClientResumeStatusCallback.h" +#include "src/internal/FollyKeepaliveTimer.h" +#include "src/temporary_home/NullRequestHandler.h" #include "src/transports/tcp/TcpDuplexConnection.h" +#include "test/deprecated/ReactiveSocket.h" namespace rsocket { namespace tests { @@ -43,30 +43,34 @@ class ResumeCallback : public ClientResumeStatusCallback { class ClientRequestHandler : public DefaultRequestHandler { public: void onSubscriptionPaused( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "Subscription Paused"; } void onSubscriptionResumed( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "Subscription Resumed"; } - void onSubscriberPaused(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberPaused( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "Subscriber Paused"; } - void onSubscriberResumed(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberResumed( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "Subscriber Resumed"; } }; class MySubscriber : public yarpl::flowable::Subscriber { public: - - void onSubscribe(yarpl::Reference sub) noexcept override { + void onSubscribe( + yarpl::Reference sub) noexcept override { subscription_ = sub; onSubscribe_(); } diff --git a/test/integration/ServerFixture.cpp b/test/integration/ServerFixture.cpp index 6040bbd6d..eedd03f02 100644 --- a/test/integration/ServerFixture.cpp +++ b/test/integration/ServerFixture.cpp @@ -1,11 +1,10 @@ // Copyright 2004-present Facebook. All Rights Reserved. +#include "test/integration/ServerFixture.h" #include #include -#include "test/integration/ServerFixture.h" #include - using namespace ::rsocket; using namespace yarpl; @@ -25,7 +24,8 @@ std::vector< class ServerSubscription : public yarpl::flowable::Subscription { public: - explicit ServerSubscription(yarpl::Reference> requester) + explicit ServerSubscription( + yarpl::Reference> requester) : requester_(std::move(requester)) {} void request(int64_t n) noexcept override { @@ -50,7 +50,8 @@ class ServerRequestHandler : public DefaultRequestHandler { void handleRequestStream( Payload request, StreamId streamId, - const yarpl::Reference>& requester) noexcept override { + const yarpl::Reference>& + requester) noexcept override { LOG(INFO) << "Received RequestStream"; requester->onSubscribe(make_ref(requester)); } @@ -72,39 +73,42 @@ class ServerRequestHandler : public DefaultRequestHandler { return nullptr; } - bool handleResume( - ResumeParameters) noexcept override { + bool handleResume(ResumeParameters) noexcept override { LOG(INFO) << "Received Resume. NOT IMPLEMENTED"; return false; } - void handleCleanResume( - yarpl::Reference response) noexcept override { + void handleCleanResume(yarpl::Reference + response) noexcept override { LOG(INFO) << "Received CleanResume. NOT IMPLEMENTED"; } - void handleDirtyResume( - yarpl::Reference response) noexcept override { + void handleDirtyResume(yarpl::Reference + response) noexcept override { LOG(INFO) << "Received DirtyResume. NOT IMPLEMENTED"; } void onSubscriptionPaused( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "SubscriptionPaused. NOT IMPLEMENTED"; } void onSubscriptionResumed( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "SubscriptionResumed. NOT IMPLEMENTED"; } - void onSubscriberPaused(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberPaused( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "SubscriberPaused. NOT IMPLEMENTED"; } - void onSubscriberResumed(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberResumed( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "SubscriberResumed. NOT IMPLEMENTED"; } }; diff --git a/test/integration/ServerFixture.h b/test/integration/ServerFixture.h index 1a12d269d..949eabef5 100644 --- a/test/integration/ServerFixture.h +++ b/test/integration/ServerFixture.h @@ -4,12 +4,12 @@ #include +#include "src/framing/FramedDuplexConnection.h" #include "src/temporary_home/NullRequestHandler.h" -#include "test/deprecated/ReactiveSocket.h" #include "src/temporary_home/ServerConnectionAcceptor.h" #include "src/temporary_home/SubscriptionBase.h" -#include "src/framing/FramedDuplexConnection.h" #include "src/transports/tcp/TcpDuplexConnection.h" +#include "test/deprecated/ReactiveSocket.h" // A fixture class to init/destroy a ReactiveSocket server. This can be used // to run different types of unittests. The server's processes the request(n) diff --git a/test/integration/WarmResumptionTest.cpp b/test/integration/WarmResumptionTest.cpp index 3aa6e99f3..3b7ffe1d1 100644 --- a/test/integration/WarmResumptionTest.cpp +++ b/test/integration/WarmResumptionTest.cpp @@ -39,14 +39,12 @@ TEST_F(ServerFixture, DISABLED_BasicWarmResumption) { std::unique_lock lk(cvM); // Get a few subscriptions (happens right after connecting) - EXPECT_CALL(*mySub, onSubscribe_()).WillOnce(Invoke([&]() { - mySub->request(3); - })); + EXPECT_CALL(*mySub, onSubscribe_()) + .WillOnce(Invoke([&]() { mySub->request(3); })); EXPECT_CALL(*mySub, onNext_("1")); EXPECT_CALL(*mySub, onNext_("2")); - EXPECT_CALL(*mySub, onNext_("3")).WillOnce(Invoke([&](std::string) { - cv.notify_all(); - })); + EXPECT_CALL(*mySub, onNext_("3")) + .WillOnce(Invoke([&](std::string) { cv.notify_all(); })); // Create a RSocket and RequestStream clientEvb->runInEventBaseThreadAndWait([&]() { @@ -71,9 +69,8 @@ TEST_F(ServerFixture, DISABLED_BasicWarmResumption) { // Get subscriptions for buffered request (happens right after // reconnecting) EXPECT_CALL(*mySub, onNext_("4")); - EXPECT_CALL(*mySub, onNext_("5")).WillOnce(Invoke([&](std::string) { - cv.notify_all(); - })); + EXPECT_CALL(*mySub, onNext_("5")) + .WillOnce(Invoke([&](std::string) { cv.notify_all(); })); // Reconnect clientEvb->runInEventBaseThreadAndWait([&]() { diff --git a/test/resumption/ReactiveSocketResumabilityTest.cpp b/test/resumption/ReactiveSocketResumabilityTest.cpp index 1a27c4c3d..309f149a7 100644 --- a/test/resumption/ReactiveSocketResumabilityTest.cpp +++ b/test/resumption/ReactiveSocketResumabilityTest.cpp @@ -4,11 +4,11 @@ #include #include "src/temporary_home/NullRequestHandler.h" -#include "test/test_utils/MockRequestHandler.h" #include "test/deprecated/ReactiveSocket.h" +#include "test/streams/Mocks.h" #include "test/test_utils/InlineConnection.h" +#include "test/test_utils/MockRequestHandler.h" #include "test/test_utils/MockStats.h" -#include "test/streams/Mocks.h" using namespace ::testing; using namespace ::rsocket; @@ -48,12 +48,14 @@ TEST(ReactiveSocketResumabilityTest, Disconnect) { SetupParameters("", "", Payload(), true), stats); - auto responseSubscriber = make_ref>(); + auto responseSubscriber = + make_ref>(); EXPECT_CALL(*responseSubscriber, onSubscribe_(_)) .Times(1) - .WillOnce(Invoke([&](yarpl::Reference subscription) { - subscription->request(std::numeric_limits::max()); - })); + .WillOnce(Invoke( + [&](yarpl::Reference subscription) { + subscription->request(std::numeric_limits::max()); + })); EXPECT_CALL(*responseSubscriber, onComplete_()).Times(0); EXPECT_CALL(*responseSubscriber, onError_(_)).Times(0); diff --git a/test/resumption/ResumeCacheTest.cpp b/test/resumption/ResumeCacheTest.cpp index aa1c5c066..a11b839b7 100644 --- a/test/resumption/ResumeCacheTest.cpp +++ b/test/resumption/ResumeCacheTest.cpp @@ -5,11 +5,11 @@ #include #include +#include "src/RSocketStats.h" #include "src/framing/Frame.h" +#include "src/framing/FrameSerializer_v0_1.h" #include "src/framing/FrameTransport.h" #include "src/internal/ResumeCache.h" -#include "src/RSocketStats.h" -#include "src/framing/FrameSerializer_v0_1.h" #include "test/test_utils/InlineConnection.h" #include "test/test_utils/MockStats.h" diff --git a/test/resumption/TcpResumeClient.cpp b/test/resumption/TcpResumeClient.cpp index a2229cca8..346e1e2e0 100644 --- a/test/resumption/TcpResumeClient.cpp +++ b/test/resumption/TcpResumeClient.cpp @@ -6,13 +6,13 @@ #include #include -#include "src/internal/ClientResumeStatusCallback.h" #include "src/framing/FrameTransport.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "test/deprecated/ReactiveSocket.h" -#include "src/internal/FollyKeepaliveTimer.h" #include "src/framing/FramedDuplexConnection.h" +#include "src/internal/ClientResumeStatusCallback.h" +#include "src/internal/FollyKeepaliveTimer.h" +#include "src/temporary_home/NullRequestHandler.h" #include "src/transports/tcp/TcpDuplexConnection.h" +#include "test/deprecated/ReactiveSocket.h" #include "test/test_utils/PrintSubscriber.h" #include "test/test_utils/StatsPrinter.h" @@ -58,22 +58,26 @@ class ResumeCallback : public ClientResumeStatusCallback { class ClientRequestHandler : public DefaultRequestHandler { public: void onSubscriptionPaused( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "subscription paused " << &subscription; } void onSubscriptionResumed( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { LOG(INFO) << "subscription resumed " << &subscription; } - void onSubscriberPaused(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberPaused( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "subscriber paused " << &subscriber; } - void onSubscriberResumed(const yarpl::Reference>& - subscriber) noexcept override { + void onSubscriberResumed( + const yarpl::Reference>& + subscriber) noexcept override { LOG(INFO) << "subscriber resumed " << &subscriber; } }; diff --git a/test/statemachine/PublisherBaseTest.cpp b/test/statemachine/PublisherBaseTest.cpp index 23d85c6f0..e230da366 100644 --- a/test/statemachine/PublisherBaseTest.cpp +++ b/test/statemachine/PublisherBaseTest.cpp @@ -1,8 +1,8 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include "test/deprecated/ReactiveSocket.h" -#include "src/temporary_home/SubscriberBase.h" #include "src/statemachine/PublisherBase.h" +#include "src/temporary_home/SubscriberBase.h" +#include "test/deprecated/ReactiveSocket.h" #include "test/test_utils/MockRequestHandler.h" #include @@ -14,20 +14,20 @@ using namespace yarpl; namespace { -class UserSubscriber : public yarpl::flowable::Subscriber, private PublisherBase { +class UserSubscriber : public yarpl::flowable::Subscriber, + private PublisherBase { public: UserSubscriber() : PublisherBase(5) {} using PublisherBase::pausePublisherStream; using PublisherBase::publisherSubscribe; - void onSubscribe( - yarpl::Reference subscription) noexcept override { + void onSubscribe(yarpl::Reference + subscription) noexcept override { publisherSubscribe(std::move(subscription)); } void onNext(::rsocket::Payload element) noexcept override { FAIL(); - } void onComplete() noexcept override { diff --git a/test/statemachine/RSocketStateMachineTest.cpp b/test/statemachine/RSocketStateMachineTest.cpp index 1ad58c23d..eba03b2f1 100644 --- a/test/statemachine/RSocketStateMachineTest.cpp +++ b/test/statemachine/RSocketStateMachineTest.cpp @@ -1,17 +1,17 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include #include #include #include #include #include -#include "src/statemachine/RSocketStateMachine.h" +#include #include "src/framing/FrameTransport.h" #include "src/framing/FramedDuplexConnection.h" #include "src/framing/FramedWriter.h" -#include "test/test_utils/InlineConnection.h" +#include "src/statemachine/RSocketStateMachine.h" #include "test/streams/Mocks.h" +#include "test/test_utils/InlineConnection.h" using namespace ::testing; using namespace ::rsocket; @@ -136,11 +136,12 @@ static void terminateTest( } })); } - EXPECT_CALL(*testOutputSubscriber, onComplete_()).WillOnce(Invoke([&]() { - if (inOnComplete) { - testOutputSubscriber->subscription()->cancel(); - } - })); + EXPECT_CALL(*testOutputSubscriber, onComplete_()) + .WillOnce(Invoke([&]() { + if (inOnComplete) { + testOutputSubscriber->subscription()->cancel(); + } + })); testConnection->setInput(testOutputSubscriber); testConnectionOutput->onSubscribe(inputSubscription); diff --git a/test/streams/Mocks.h b/test/streams/Mocks.h index d9d0696b0..a596b644b 100644 --- a/test/streams/Mocks.h +++ b/test/streams/Mocks.h @@ -2,14 +2,14 @@ #pragma once -#include -#include +#include #include #include -#include #include #include #include +#include +#include #include "src/internal/ReactiveStreamsCompat.h" namespace yarpl { @@ -31,8 +31,8 @@ class MockPublisher : public reactivestreams::Publisher { subscribe_, void(yarpl::Reference> subscriber)); - void subscribe( - yarpl::Reference> subscriber) noexcept override { + void subscribe(yarpl::Reference> + subscriber) noexcept override { subscribe_(std::move(subscriber)); } }; @@ -81,15 +81,17 @@ class MockSubscriber : public yarpl::flowable::Subscriber { VLOG(2) << "dtor MockSubscriber " << this; } - MOCK_METHOD1(onSubscribe_, void(yarpl::Reference subscription)); + MOCK_METHOD1( + onSubscribe_, + void(yarpl::Reference subscription)); MOCK_METHOD1_T(onNext_, void(T& value)); MOCK_METHOD0(onComplete_, void()); MOCK_METHOD1(onError_, void(const std::exception_ptr ex)); - void onSubscribe( - yarpl::Reference subscription) noexcept override { - subscription_ = yarpl::make_ref( - std::move(subscription), checkpoint_); + void onSubscribe(yarpl::Reference + subscription) noexcept override { + subscription_ = + yarpl::make_ref(std::move(subscription), checkpoint_); // We allow registering the same subscriber with multiple Publishers. EXPECT_CALL(*checkpoint_, Call()).Times(testing::AtLeast(1)); onSubscribe_(subscription_); @@ -161,12 +163,9 @@ class MockPublisher : public Publisher { VLOG(2) << "dtor MockPublisher " << this; } - MOCK_METHOD1_T( - subscribe_, - void(std::shared_ptr> subscriber)); + MOCK_METHOD1_T(subscribe_, void(std::shared_ptr> subscriber)); - void subscribe( - std::shared_ptr> subscriber) noexcept override { + void subscribe(std::shared_ptr> subscriber) noexcept override { subscribe_(std::move(subscriber)); } }; diff --git a/test/test_utils/InlineConnectionTest.cpp b/test/test_utils/InlineConnectionTest.cpp index 25755f56f..4dfb8cd81 100644 --- a/test/test_utils/InlineConnectionTest.cpp +++ b/test/test_utils/InlineConnectionTest.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. -#include #include #include #include +#include #include "InlineConnection.h" #include "test/streams/Mocks.h" @@ -67,18 +67,22 @@ TEST(InlineConnectionTest, PingPong) { ASSERT_TRUE(folly::IOBufEqual()(originalPayload, payload)); })); - EXPECT_CALL(*outputSub[1], cancel_()).InSequence(s).WillOnce(Invoke([&]() { - output[1] - ->onComplete(); // "Unsubscribe handshake". Calls input[0]->onComplete() - inputSub[1]->cancel(); // Close the other direction. // equivalent to - // outputSub[0]->cancel(); - })); + EXPECT_CALL(*outputSub[1], cancel_()) + .InSequence(s) + .WillOnce(Invoke([&]() { + output[1]->onComplete(); // "Unsubscribe handshake". Calls + // input[0]->onComplete() + inputSub[1]->cancel(); // Close the other direction. // equivalent to + // outputSub[0]->cancel(); + })); EXPECT_CALL(*input[0], onComplete_()) .InSequence(s); // This finishes the handshake. - EXPECT_CALL(*outputSub[0], cancel_()).InSequence(s).WillOnce(Invoke([&]() { - output[0] - ->onComplete(); // "Unsubscribe handshake". Calls input[1]->onComplete() - })); + EXPECT_CALL(*outputSub[0], cancel_()) + .InSequence(s) + .WillOnce(Invoke([&]() { + output[0]->onComplete(); // "Unsubscribe handshake". Calls + // input[1]->onComplete() + })); EXPECT_CALL(*input[1], onComplete_()) .InSequence(s); // This finishes the handshake. diff --git a/test/test_utils/MockRequestHandler.h b/test/test_utils/MockRequestHandler.h index 241cfc488..1ed7cd1c2 100644 --- a/test/test_utils/MockRequestHandler.h +++ b/test/test_utils/MockRequestHandler.h @@ -39,30 +39,30 @@ class MockRequestHandler : public RequestHandler { void(std::unique_ptr& request)); MOCK_METHOD1( handleSetupPayload_, - std::shared_ptr( - SetupParameters& request)); - MOCK_METHOD1( - handleResume_, - bool(ResumeParameters& resumeParams)); + std::shared_ptr(SetupParameters& request)); + MOCK_METHOD1(handleResume_, bool(ResumeParameters& resumeParams)); yarpl::Reference> handleRequestChannel( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override { + const yarpl::Reference>& + response) noexcept override { return handleRequestChannel_(request, streamId, response); } void handleRequestStream( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override { + const yarpl::Reference>& + response) noexcept override { handleRequestStream_(request, streamId, response); } void handleRequestResponse( Payload request, StreamId streamId, - const yarpl::Reference>& response) noexcept override { + const yarpl::Reference>& + response) noexcept override { handleRequestResponse_(request, streamId, response); } @@ -82,29 +82,32 @@ class MockRequestHandler : public RequestHandler { return handleSetupPayload_(request); } - bool handleResume( - ResumeParameters resumeParams) noexcept override { + bool handleResume(ResumeParameters resumeParams) noexcept override { return handleResume_(resumeParams); } - void handleCleanResume( - yarpl::Reference response) noexcept override {} - void handleDirtyResume( - yarpl::Reference response) noexcept override {} + void handleCleanResume(yarpl::Reference + response) noexcept override {} + void handleDirtyResume(yarpl::Reference + response) noexcept override {} MOCK_METHOD1( onSubscriptionPaused_, void(const yarpl::Reference&)); void onSubscriptionPaused( - const yarpl::Reference& subscription) noexcept override { + const yarpl::Reference& + subscription) noexcept override { onSubscriptionPaused_(std::move(subscription)); } void onSubscriptionResumed( - const yarpl::Reference& subscription) noexcept override {} - void onSubscriberPaused(const yarpl::Reference>& - subscriber) noexcept override {} - void onSubscriberResumed(const yarpl::Reference>& - subscriber) noexcept override {} + const yarpl::Reference& + subscription) noexcept override {} + void onSubscriberPaused( + const yarpl::Reference>& + subscriber) noexcept override {} + void onSubscriberResumed( + const yarpl::Reference>& + subscriber) noexcept override {} MOCK_METHOD0(socketOnConnected, void()); diff --git a/test/test_utils/PrintSubscriber.cpp b/test/test_utils/PrintSubscriber.cpp index 7b11d3720..f065b28de 100644 --- a/test/test_utils/PrintSubscriber.cpp +++ b/test/test_utils/PrintSubscriber.cpp @@ -1,9 +1,9 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include "PrintSubscriber.h" +#include #include #include -#include #include namespace rsocket { @@ -27,6 +27,7 @@ void PrintSubscriber::onComplete() noexcept { } void PrintSubscriber::onError(std::exception_ptr ex) noexcept { - LOG(INFO) << "PrintSubscriber " << this << " onError " << folly::exceptionStr(ex); + LOG(INFO) << "PrintSubscriber " << this << " onError " + << folly::exceptionStr(ex); } } diff --git a/test/test_utils/PrintSubscriber.h b/test/test_utils/PrintSubscriber.h index 8d8959d3c..b1c1d5ef0 100644 --- a/test/test_utils/PrintSubscriber.h +++ b/test/test_utils/PrintSubscriber.h @@ -10,8 +10,8 @@ class PrintSubscriber : public yarpl::flowable::Subscriber { public: ~PrintSubscriber(); - void onSubscribe( - yarpl::Reference subscription) noexcept override; + void onSubscribe(yarpl::Reference + subscription) noexcept override; void onNext(Payload element) noexcept override; void onComplete() noexcept override; void onError(std::exception_ptr ex) noexcept override; diff --git a/yarpl/examples/FlowableExamples.cpp b/yarpl/examples/FlowableExamples.cpp index 61f64483a..2beb0c8c8 100644 --- a/yarpl/examples/FlowableExamples.cpp +++ b/yarpl/examples/FlowableExamples.cpp @@ -36,7 +36,7 @@ std::string getThreadId() { void fromPublisherExample() { auto onSubscribe = [](Reference> subscriber) { class Subscription : public ::yarpl::flowable::Subscription { - public: + public: virtual void request(int64_t delta) override { // TODO } diff --git a/yarpl/examples/yarpl-playground.cpp b/yarpl/examples/yarpl-playground.cpp index 9a1548338..c3cfc0f99 100644 --- a/yarpl/examples/yarpl-playground.cpp +++ b/yarpl/examples/yarpl-playground.cpp @@ -7,7 +7,7 @@ int main() { std::cout << "*** Run yarpl::flowable::v examples ***" << std::endl; FlowableExamples::run(); - + // std::cout << "*** Run ObservableExamples ***" << std::endl; // ObservableExamples::run(); } diff --git a/yarpl/include/yarpl/Refcounted.h b/yarpl/include/yarpl/Refcounted.h index 2d2b8fe81..908196d96 100644 --- a/yarpl/include/yarpl/Refcounted.h +++ b/yarpl/include/yarpl/Refcounted.h @@ -178,33 +178,33 @@ class Reference { T* pointer_{nullptr}; }; -template< typename T, typename U> -bool operator==( const Reference& lhs, const Reference& rhs ) noexcept { +template +bool operator==(const Reference& lhs, const Reference& rhs) noexcept { return lhs.get() == rhs.get(); } -template< typename T, typename U> -bool operator!=( const Reference& lhs, const Reference& rhs ) noexcept { +template +bool operator!=(const Reference& lhs, const Reference& rhs) noexcept { return lhs.get() != rhs.get(); } -template< typename T > -bool operator==( const Reference& lhs, std::nullptr_t) noexcept { +template +bool operator==(const Reference& lhs, std::nullptr_t) noexcept { return lhs.get() == nullptr; } -template< typename T > -bool operator!=( const Reference& lhs, std::nullptr_t) noexcept { +template +bool operator!=(const Reference& lhs, std::nullptr_t) noexcept { return lhs.get() != nullptr; } -template< typename T > -bool operator==( std::nullptr_t, const Reference& rhs ) noexcept { +template +bool operator==(std::nullptr_t, const Reference& rhs) noexcept { return rhs.get() == nullptr; } -template< typename T > -bool operator!=( std::nullptr_t, const Reference& rhs ) noexcept { +template +bool operator!=(std::nullptr_t, const Reference& rhs) noexcept { return rhs.get() != nullptr; } //////////////////////////////////////////////////////////////////////////////// diff --git a/yarpl/include/yarpl/flowable/FlowableOperator.h b/yarpl/include/yarpl/flowable/FlowableOperator.h index 4adcfc969..2005fa95e 100644 --- a/yarpl/include/yarpl/flowable/FlowableOperator.h +++ b/yarpl/include/yarpl/flowable/FlowableOperator.h @@ -34,7 +34,8 @@ class FlowableOperator : public Flowable { /// against Operators. Each operator subscription has two functions: as a /// subscriber for the previous stage; as a subscription for the next one, /// the user-supplied subscriber being the last of the pipeline stages. - class Subscription : public ::yarpl::flowable::Subscription, public Subscriber { + class Subscription : public ::yarpl::flowable::Subscription, + public Subscriber { public: Subscription( Reference> flowable, @@ -49,7 +50,8 @@ class FlowableOperator : public Flowable { void onSubscribe( Reference<::yarpl::flowable::Subscription> subscription) override { upstream_ = std::move(subscription); - subscriber_->onSubscribe(Reference<::yarpl::flowable::Subscription>(this)); + subscriber_->onSubscribe( + Reference<::yarpl::flowable::Subscription>(this)); } void onComplete() override { @@ -128,8 +130,7 @@ class MapOperator : public FlowableOperator { std::move(subscriber)) {} void onNext(U value) override { - auto subscriber = - FlowableOperator::Subscription::subscriber_.get(); + auto subscriber = FlowableOperator::Subscription::subscriber_.get(); auto* flowable = FlowableOperator::Subscription::flowable_.get(); auto* map = static_cast(flowable); subscriber->onNext(map->function_(std::move(value))); @@ -142,9 +143,10 @@ class MapOperator : public FlowableOperator { template < typename U, typename F, - typename = typename std::enable_if::value>::type> + typename = + typename std::enable_if::value>::type> class FilterOperator : public FlowableOperator { -public: + public: FilterOperator(Reference> upstream, F&& function) : FlowableOperator(std::move(upstream)), function_(std::forward(function)) {} @@ -156,19 +158,18 @@ class FilterOperator : public FlowableOperator { Reference>(this), std::move(subscriber)))); } -private: + private: class Subscription : public FlowableOperator::Subscription { - public: + public: Subscription( Reference> flowable, Reference> subscriber) : FlowableOperator::Subscription( - std::move(flowable), - std::move(subscriber)) {} + std::move(flowable), + std::move(subscriber)) {} void onNext(U value) override { - auto subscriber = - FlowableOperator::Subscription::subscriber_.get(); + auto subscriber = FlowableOperator::Subscription::subscriber_.get(); auto* flowable = FlowableOperator::Subscription::flowable_.get(); auto* filter = static_cast(flowable); if (filter->function_(value)) { @@ -178,7 +179,7 @@ class FilterOperator : public FlowableOperator { } } - private: + private: void callSuperRequest(int64_t delta) { FlowableOperator::Subscription::request(delta); } diff --git a/yarpl/include/yarpl/observable/ObservableOperator.h b/yarpl/include/yarpl/observable/ObservableOperator.h index 3b7d5ef9f..e8b2c66f3 100644 --- a/yarpl/include/yarpl/observable/ObservableOperator.h +++ b/yarpl/include/yarpl/observable/ObservableOperator.h @@ -35,7 +35,8 @@ class ObservableOperator : public Observable { /// against Operators. Each operator subscription has two functions: as a /// subscriber for the previous stage; as a subscription for the next one, /// the user-supplied subscriber being the last of the pipeline stages. - class Subscription : public ::yarpl::observable::Subscription, public Observer { + class Subscription : public ::yarpl::observable::Subscription, + public Observer { public: Subscription( Reference> flowable, @@ -49,7 +50,8 @@ class ObservableOperator : public Observable { void onSubscribe( Reference<::yarpl::observable::Subscription> subscription) override { upstream_ = std::move(subscription); - subscriber_->onSubscribe(Reference<::yarpl::observable::Subscription>(this)); + subscriber_->onSubscribe( + Reference<::yarpl::observable::Subscription>(this)); } void onComplete() override { @@ -126,38 +128,39 @@ class MapOperator : public ObservableOperator { F function_; }; -template< +template < typename U, typename F, - typename = typename std::enable_if::value>::type> + typename = + typename std::enable_if::value>::type> class FilterOperator : public ObservableOperator { -public: - FilterOperator(Reference > upstream, F &&function) + public: + FilterOperator(Reference> upstream, F&& function) : ObservableOperator(std::move(upstream)), function_(std::forward(function)) {} - void subscribe(Reference > subscriber) override { + void subscribe(Reference> subscriber) override { ObservableOperator::upstream_->subscribe( // Note: implicit cast to a reference to a subscriber. Reference(new Subscription( Reference>(this), std::move(subscriber)))); } -private: + private: class Subscription : public ObservableOperator::Subscription { - public: + public: Subscription( - Reference > flowable, - Reference > subscriber) + Reference> flowable, + Reference> subscriber) : ObservableOperator::Subscription( - std::move(flowable), - std::move(subscriber)) {} + std::move(flowable), + std::move(subscriber)) {} void onNext(U value) override { - auto *subscriber = + auto* subscriber = ObservableOperator::Subscription::subscriber_.get(); - auto *flowable = ObservableOperator::Subscription::flowable_.get(); - auto *filter = static_cast(flowable); + auto* flowable = ObservableOperator::Subscription::flowable_.get(); + auto* filter = static_cast(flowable); if (filter->function_(value)) { subscriber->onNext(std::move(value)); } @@ -250,7 +253,6 @@ class SubscribeOnOperator : public ObservableOperator { } private: - // Trampoline to call superclass method; gcc bug 58972. void callSuperCancel() { ObservableOperator::Subscription::cancel(); diff --git a/yarpl/include/yarpl/observable/Observables.h b/yarpl/include/yarpl/observable/Observables.h index b32fc476a..32b36239f 100644 --- a/yarpl/include/yarpl/observable/Observables.h +++ b/yarpl/include/yarpl/observable/Observables.h @@ -10,7 +10,7 @@ namespace observable { class Observables { public: static Reference> range(int64_t start, int64_t end) { - auto lambda = [ start, end ](Reference> observer) { + auto lambda = [start, end](Reference> observer) { for (int64_t i = start; i < end; ++i) { observer->onNext(i); } @@ -48,9 +48,9 @@ class Observables { template < typename T, typename OnSubscribe, - typename = typename std::enable_if>), - void>::value>::type> + typename = typename std::enable_if< + std::is_callable>), void>::value>:: + type> static Reference> create(OnSubscribe&& function) { return Reference>(new FromPublisherOperator( std::forward(function))); diff --git a/yarpl/include/yarpl/observable/Observers.h b/yarpl/include/yarpl/observable/Observers.h index 5c9377af9..ae7dcbe34 100644 --- a/yarpl/include/yarpl/observable/Observers.h +++ b/yarpl/include/yarpl/observable/Observers.h @@ -22,21 +22,15 @@ class Observers { typename Next, typename Error = void (*)(std::exception_ptr), typename Complete = void (*)()> - using EnableIfCompatible = - typename std::enable_if< - std::is_callable::value && - std::is_callable::value && - std::is_callable::value>::type; + using EnableIfCompatible = typename std::enable_if< + std::is_callable::value && + std::is_callable::value && + std::is_callable::value>::type; public: - template < - typename T, - typename Next, - typename = EnableIfCompatible> - static auto create( - Next&& next) { - return Reference>( - new Base(std::forward(next))); + template > + static auto create(Next&& next) { + return Reference>(new Base(std::forward(next))); } template < @@ -44,9 +38,7 @@ class Observers { typename Next, typename Error, typename = EnableIfCompatible> - static auto create( - Next&& next, - Error&& error) { + static auto create(Next&& next, Error&& error) { return Reference>(new WithError( std::forward(next), std::forward(error))); } @@ -57,10 +49,7 @@ class Observers { typename Error, typename Complete, typename = EnableIfCompatible> - static auto create( - Next&& next, - Error&& error, - Complete&& complete) { + static auto create(Next&& next, Error&& error, Complete&& complete) { return Reference>( new WithErrorAndComplete( std::forward(next), @@ -72,8 +61,7 @@ class Observers { template class Base : public Observer { public: - explicit Base(Next&& next) - : next_(std::forward(next)) {} + explicit Base(Next&& next) : next_(std::forward(next)) {} void onNext(T value) override { next_(std::move(value)); @@ -100,10 +88,7 @@ class Observers { template class WithErrorAndComplete : public WithError { public: - WithErrorAndComplete( - Next&& next, - Error&& error, - Complete&& complete) + WithErrorAndComplete(Next&& next, Error&& error, Complete&& complete) : WithError( std::forward(next), std::forward(error)), diff --git a/yarpl/include/yarpl/single/Single.h b/yarpl/include/yarpl/single/Single.h index 5dc2c8c89..b562366c7 100644 --- a/yarpl/include/yarpl/single/Single.h +++ b/yarpl/include/yarpl/single/Single.h @@ -15,9 +15,8 @@ template class FromPublisherOperator; // specialization of Single -template +template class SingleVoidFromPublisherOperator; - } template @@ -60,8 +59,9 @@ class Single : public virtual Refcounted { OnSubscribe(Reference>), void>::value>::type> static auto create(OnSubscribe&& function) { - return Reference>(new details::FromPublisherOperator( - std::forward(function))); + return Reference>( + new details::FromPublisherOperator( + std::forward(function))); } template @@ -137,10 +137,10 @@ class FromPublisherOperator : public Single { OnSubscribe function_; }; -template +template class SingleVoidFromPublisherOperator : public Single { public: - explicit SingleVoidFromPublisherOperator(OnSubscribe &&function) + explicit SingleVoidFromPublisherOperator(OnSubscribe&& function) : function_(std::move(function)) {} void subscribe(Reference> subscriber) override { diff --git a/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h b/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h index 71ef9e59c..35764f1f3 100644 --- a/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h +++ b/yarpl/src/yarpl/flowable/sources/Flowable_FromObservable.h @@ -20,7 +20,6 @@ template class FlowableFromObservableSubscription : public yarpl::flowable::Subscription, public yarpl::observable::Observer { - public: FlowableFromObservableSubscription( Reference> observable, @@ -96,7 +95,6 @@ class FlowableFromObservableSubscription } private: - void release() { observable_.reset(); subscriber_.reset(); diff --git a/yarpl/src/yarpl/single/SingleSubscriptions.cpp b/yarpl/src/yarpl/single/SingleSubscriptions.cpp index 00a62c646..663539311 100644 --- a/yarpl/src/yarpl/single/SingleSubscriptions.cpp +++ b/yarpl/src/yarpl/single/SingleSubscriptions.cpp @@ -36,11 +36,14 @@ bool CallbackSubscription::isCancelled() const { return cancelled_; } -Reference SingleSubscriptions::create(std::function onCancel) { - return Reference(new CallbackSubscription(std::move(onCancel))); +Reference SingleSubscriptions::create( + std::function onCancel) { + return Reference( + new CallbackSubscription(std::move(onCancel))); } -Reference SingleSubscriptions::create(std::atomic_bool& cancelled) { +Reference SingleSubscriptions::create( + std::atomic_bool& cancelled) { return create([&cancelled]() { cancelled = true; }); } @@ -48,7 +51,8 @@ Reference SingleSubscriptions::empty() { return Reference(new AtomicBoolSubscription()); } -Reference SingleSubscriptions::atomicBoolSubscription() { +Reference +SingleSubscriptions::atomicBoolSubscription() { return Reference(new AtomicBoolSubscription()); } } // single diff --git a/yarpl/test/FlowableTest.cpp b/yarpl/test/FlowableTest.cpp index e00d130a7..a6974c48c 100644 --- a/yarpl/test/FlowableTest.cpp +++ b/yarpl/test/FlowableTest.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include @@ -20,7 +20,8 @@ class CollectingSubscriber : public Subscriber { std::is_copy_constructible::value, "CollectingSubscriber needs to copy the value in order to collect it"); - CollectingSubscriber(int64_t requestCount = 100) : requestCount_(requestCount) {} + CollectingSubscriber(int64_t requestCount = 100) + : requestCount_(requestCount) {} void onSubscribe(Reference subscription) override { Subscriber::onSubscribe(subscription); @@ -43,8 +44,7 @@ class CollectingSubscriber : public Subscriber { try { std::rethrow_exception(ex); - } - catch (const std::exception& e) { + } catch (const std::exception& e) { errorMsg_ = e.what(); } } @@ -77,7 +77,9 @@ class CollectingSubscriber : public Subscriber { /// flowable. Return the items that were sent to the subscriber. If some /// exception was sent, the exception is thrown. template -std::vector run(Reference> flowable, uint64_t requestCount = 100) { +std::vector run( + Reference> flowable, + uint64_t requestCount = 100) { auto collector = make_ref>(requestCount); flowable->subscribe(collector); return collector->values(); @@ -110,33 +112,26 @@ TEST(FlowableTest, JustFlowable) { TEST(FlowableTest, JustIncomplete) { ASSERT_EQ(std::size_t{0}, Refcounted::objects()); - auto flowable = Flowables::justN({"a", "b", "c"}) - ->take(2); - EXPECT_EQ( - run(std::move(flowable)), - std::vector({"a", "b"})); + auto flowable = Flowables::justN({"a", "b", "c"})->take(2); + EXPECT_EQ(run(std::move(flowable)), std::vector({"a", "b"})); ASSERT_EQ(std::size_t{0}, Refcounted::objects()); - flowable = Flowables::justN({"a", "b", "c"}) - ->take(2) - ->take(1); - EXPECT_EQ( - run(std::move(flowable)), - std::vector({"a"})); + flowable = Flowables::justN({"a", "b", "c"})->take(2)->take(1); + EXPECT_EQ(run(std::move(flowable)), std::vector({"a"})); flowable.reset(); ASSERT_EQ(std::size_t{0}, Refcounted::objects()); flowable = Flowables::justN( - {"a", "b", "c", "d", "e", "f", "g", "h", "i"}) - ->map([](std::string s) { - s[0] = ::toupper(s[0]); - return s; - }) - ->take(5); + {"a", "b", "c", "d", "e", "f", "g", "h", "i"}) + ->map([](std::string s) { + s[0] = ::toupper(s[0]); + return s; + }) + ->take(5); EXPECT_EQ( - run(std::move(flowable)), - std::vector({"A", "B", "C", "D", "E"})); + run(std::move(flowable)), + std::vector({"A", "B", "C", "D", "E"})); flowable.reset(); ASSERT_EQ(std::size_t{0}, Refcounted::objects()); } @@ -162,19 +157,17 @@ TEST(FlowableTest, RangeWithMap) { TEST(FlowableTest, RangeWithFilterRequestMoreItems) { ASSERT_EQ(std::size_t{0}, Refcounted::objects()); - auto flowable = Flowables::range(0, 10) - ->filter([](int64_t v) { return v % 2 != 0; }); - EXPECT_EQ( - run(std::move(flowable)), std::vector({1, 3, 5, 7, 9})); + auto flowable = + Flowables::range(0, 10)->filter([](int64_t v) { return v % 2 != 0; }); + EXPECT_EQ(run(std::move(flowable)), std::vector({1, 3, 5, 7, 9})); EXPECT_EQ(std::size_t{0}, Refcounted::objects()); } TEST(FlowableTest, RangeWithFilterRequestLessItems) { ASSERT_EQ(std::size_t{0}, Refcounted::objects()); - auto flowable = Flowables::range(0, 10) - ->filter([](int64_t v) { return v % 2 != 0; }); - EXPECT_EQ( - run(std::move(flowable), 5), std::vector({1, 3, 5, 7, 9})); + auto flowable = + Flowables::range(0, 10)->filter([](int64_t v) { return v % 2 != 0; }); + EXPECT_EQ(run(std::move(flowable), 5), std::vector({1, 3, 5, 7, 9})); EXPECT_EQ(std::size_t{0}, Refcounted::objects()); } @@ -227,10 +220,9 @@ TEST(FlowableTest, SubscribersComplete) { bool completed = false; auto subscriber = Subscribers::create( - [](int) { unreachable(); }, - [](std::exception_ptr) { unreachable(); }, - [&] { completed = true; } - ); + [](int) { unreachable(); }, + [](std::exception_ptr) { unreachable(); }, + [&] { completed = true; }); flowable->subscribe(std::move(subscriber)); flowable.reset(); @@ -249,10 +241,9 @@ TEST(FlowableTest, SubscribersError) { bool errored = false; auto subscriber = Subscribers::create( - [](int) { unreachable(); }, - [&](std::exception_ptr) { errored = true; }, - [] { unreachable(); } - ); + [](int) { unreachable(); }, + [&](std::exception_ptr) { errored = true; }, + [] { unreachable(); }); flowable->subscribe(std::move(subscriber)); flowable.reset(); diff --git a/yarpl/test/Observable_test.cpp b/yarpl/test/Observable_test.cpp index efe28246e..903775bdb 100644 --- a/yarpl/test/Observable_test.cpp +++ b/yarpl/test/Observable_test.cpp @@ -5,9 +5,9 @@ #include #include "yarpl/Observable.h" -#include "yarpl/schedulers/ThreadScheduler.h" #include "yarpl/flowable/Subscriber.h" #include "yarpl/flowable/Subscribers.h" +#include "yarpl/schedulers/ThreadScheduler.h" #include "Tuple.h" @@ -359,9 +359,9 @@ TEST(Observable, RangeWithMap) { ASSERT_EQ(0u, Refcounted::objects()); auto observable = Observables::range(1, 4) - ->map([](int64_t v) { return v * v; }) - ->map([](int64_t v) { return v * v; }) - ->map([](int64_t v) { return std::to_string(v); }); + ->map([](int64_t v) { return v * v; }) + ->map([](int64_t v) { return v * v; }) + ->map([](int64_t v) { return std::to_string(v); }); EXPECT_EQ( run(std::move(observable)), std::vector({"1", "16", "81"})); @@ -370,10 +370,9 @@ TEST(Observable, RangeWithMap) { TEST(Observable, RangeWithFilter) { ASSERT_EQ(std::size_t{0}, Refcounted::objects()); - auto observable = Observables::range(0, 10) - ->filter([](int64_t v) { return v % 2 != 0; }); - EXPECT_EQ( - run(std::move(observable)), std::vector({1, 3, 5, 7, 9})); + auto observable = + Observables::range(0, 10)->filter([](int64_t v) { return v % 2 != 0; }); + EXPECT_EQ(run(std::move(observable)), std::vector({1, 3, 5, 7, 9})); EXPECT_EQ(std::size_t{0}, Refcounted::objects()); } @@ -428,10 +427,9 @@ TEST(Observable, ObserversComplete) { bool completed = false; auto observer = Observers::create( - [](int) { unreachable(); }, - [](std::exception_ptr) { unreachable(); }, - [&] { completed = true; } - ); + [](int) { unreachable(); }, + [](std::exception_ptr) { unreachable(); }, + [&] { completed = true; }); observable->subscribe(std::move(observer)); observable.reset(); @@ -450,10 +448,9 @@ TEST(Observable, ObserversError) { bool errored = false; auto observer = Observers::create( - [](int) { unreachable(); }, - [&](std::exception_ptr) { errored = true; }, - [] { unreachable(); } - ); + [](int) { unreachable(); }, + [&](std::exception_ptr) { errored = true; }, + [] { unreachable(); }); observable->subscribe(std::move(observer)); observable.reset(); @@ -467,7 +464,7 @@ TEST(Observable, CancelReleasesObjects) { EXPECT_EQ(0u, Refcounted::objects()); auto lambda = [](Reference> observer) { - // we will send nothing + // we will send nothing }; auto observable = Observable::create(std::move(lambda)); diff --git a/yarpl/test/ReferenceTest.cpp b/yarpl/test/ReferenceTest.cpp index 161760820..218d31831 100644 --- a/yarpl/test/ReferenceTest.cpp +++ b/yarpl/test/ReferenceTest.cpp @@ -16,7 +16,6 @@ namespace { template class MySubscriber : public Subscriber {}; - } TEST(ReferenceTest, Upcast) { diff --git a/yarpl/test/SubscriptionHelper_test.cpp b/yarpl/test/SubscriptionHelper_test.cpp index d8eb6ca5f..e175af81d 100644 --- a/yarpl/test/SubscriptionHelper_test.cpp +++ b/yarpl/test/SubscriptionHelper_test.cpp @@ -8,94 +8,94 @@ using namespace yarpl::flowable::internal; TEST(SubscriptionHelper, addSmall) { - std::atomic rn{0}; - SubscriptionHelper::addCredits(&rn, 10); - ASSERT_EQ(rn, 10); + std::atomic rn{0}; + SubscriptionHelper::addCredits(&rn, 10); + ASSERT_EQ(rn, 10); } TEST(SubscriptionHelper, addSmall2) { - std::atomic rn{0}; - SubscriptionHelper::addCredits(&rn, 10); - SubscriptionHelper::addCredits(&rn, 5); - SubscriptionHelper::addCredits(&rn, 20); - ASSERT_EQ(rn, 35); + std::atomic rn{0}; + SubscriptionHelper::addCredits(&rn, 10); + SubscriptionHelper::addCredits(&rn, 5); + SubscriptionHelper::addCredits(&rn, 20); + ASSERT_EQ(rn, 35); } TEST(SubscriptionHelper, DISABLED_addOverflow) { - std::atomic rn{0}; - SubscriptionHelper::addCredits(&rn, INT64_MAX); - ASSERT_EQ(rn, INT64_MAX); + std::atomic rn{0}; + SubscriptionHelper::addCredits(&rn, INT64_MAX); + ASSERT_EQ(rn, INT64_MAX); } TEST(SubscriptionHelper, DISABLED_addOverflow2) { - std::atomic rn{6789}; - SubscriptionHelper::addCredits(&rn, INT64_MAX); - ASSERT_EQ(rn, INT64_MAX); + std::atomic rn{6789}; + SubscriptionHelper::addCredits(&rn, INT64_MAX); + ASSERT_EQ(rn, INT64_MAX); } TEST(SubscriptionHelper, DISABLED_addOverflow3) { - std::atomic rn{INT64_MAX}; - SubscriptionHelper::addCredits(&rn, INT64_MAX); - ASSERT_EQ(rn, INT64_MAX); + std::atomic rn{INT64_MAX}; + SubscriptionHelper::addCredits(&rn, INT64_MAX); + ASSERT_EQ(rn, INT64_MAX); } TEST(SubscriptionHelper, addNegative) { - std::atomic rn{0}; - SubscriptionHelper::addCredits(&rn, -9876); - ASSERT_EQ(rn, 0); + std::atomic rn{0}; + SubscriptionHelper::addCredits(&rn, -9876); + ASSERT_EQ(rn, 0); } TEST(SubscriptionHelper, addNegative2) { - std::atomic rn{9999}; - SubscriptionHelper::addCredits(&rn, -9876); - ASSERT_EQ(rn, 9999); + std::atomic rn{9999}; + SubscriptionHelper::addCredits(&rn, -9876); + ASSERT_EQ(rn, 9999); } TEST(SubscriptionHelper, addCancel) { - std::atomic rn{9999}; - bool didCancel = SubscriptionHelper::addCancel(&rn); - ASSERT_EQ(rn, INT64_MIN); - ASSERT_TRUE(SubscriptionHelper::isCancelled(&rn)); - ASSERT_TRUE(didCancel); + std::atomic rn{9999}; + bool didCancel = SubscriptionHelper::addCancel(&rn); + ASSERT_EQ(rn, INT64_MIN); + ASSERT_TRUE(SubscriptionHelper::isCancelled(&rn)); + ASSERT_TRUE(didCancel); } TEST(SubscriptionHelper, addCancel2) { - std::atomic rn{9999}; - SubscriptionHelper::addCancel(&rn); - bool didCancel = SubscriptionHelper::addCancel(&rn); - ASSERT_EQ(rn, INT64_MIN); - ASSERT_TRUE(SubscriptionHelper::isCancelled(&rn)); - ASSERT_FALSE(didCancel); + std::atomic rn{9999}; + SubscriptionHelper::addCancel(&rn); + bool didCancel = SubscriptionHelper::addCancel(&rn); + ASSERT_EQ(rn, INT64_MIN); + ASSERT_TRUE(SubscriptionHelper::isCancelled(&rn)); + ASSERT_FALSE(didCancel); } TEST(SubscriptionHelper, addCancel3) { - std::atomic rn{9999}; - SubscriptionHelper::addCancel(&rn); - // it should stay cancelled once cancelled - SubscriptionHelper::addCredits(&rn, 1); - ASSERT_TRUE(SubscriptionHelper::isCancelled(&rn)); + std::atomic rn{9999}; + SubscriptionHelper::addCancel(&rn); + // it should stay cancelled once cancelled + SubscriptionHelper::addCredits(&rn, 1); + ASSERT_TRUE(SubscriptionHelper::isCancelled(&rn)); } TEST(SubscriptionHelper, isInfinite) { - std::atomic rn{0}; - SubscriptionHelper::addCredits(&rn, INT64_MAX); - ASSERT_TRUE(SubscriptionHelper::isInfinite(&rn)); + std::atomic rn{0}; + SubscriptionHelper::addCredits(&rn, INT64_MAX); + ASSERT_TRUE(SubscriptionHelper::isInfinite(&rn)); } TEST(SubscriptionHelper, consumeSmall) { - std::atomic rn{100}; - SubscriptionHelper::consumeCredits(&rn, 10); - ASSERT_EQ(rn, 90); + std::atomic rn{100}; + SubscriptionHelper::consumeCredits(&rn, 10); + ASSERT_EQ(rn, 90); } TEST(SubscriptionHelper, consumeExact) { - std::atomic rn{100}; - SubscriptionHelper::consumeCredits(&rn, 100); - ASSERT_EQ(rn, 0); + std::atomic rn{100}; + SubscriptionHelper::consumeCredits(&rn, 100); + ASSERT_EQ(rn, 0); } TEST(SubscriptionHelper, consumeTooMany) { - std::atomic rn{100}; - SubscriptionHelper::consumeCredits(&rn, 110); - ASSERT_EQ(rn, 0); + std::atomic rn{100}; + SubscriptionHelper::consumeCredits(&rn, 110); + ASSERT_EQ(rn, 0); } \ No newline at end of file From 652d93c6a23743bad6cc63754229e7bfc63cd06a Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 09:39:57 -0700 Subject: [PATCH 16/31] Purge Obsolete Unit Tests (#445) * Purge Obsolete Unit Tests Most tests are now obsolete as they use old Subscriber/Subscription types and old ReactiveSocket.h APIs. It was decided that it is much easier to clean house and rewrite new unit tests against the new APIs, so purging and will start rewriting over next couple days (after a few more API changes this purge make easier). * Travis & Tests - no more separate rsocket_tests - yarpl is no longer in the experimental folder --- .travis.yml | 12 +- CMakeLists.txt | 166 +- test/ServerConnectionAcceptorTest.cpp | 304 ---- test/deprecated/ReactiveSocket.cpp | 279 --- test/deprecated/ReactiveSocket.h | 132 -- .../ReactiveSocketConcurrencyTest.cpp | 606 ------ test/deprecated/ReactiveSocketTest.cpp | 1621 ----------------- test/deprecated/SubscriberBaseTest.cpp | 162 -- test/framing/FrameTransportTest.cpp | 24 - test/framing/FramedReaderTest.cpp | 270 --- test/framing/FramedWriterTest.cpp | 181 -- test/integration/ClientUtils.h | 145 -- test/integration/ServerFixture.cpp | 220 --- test/integration/ServerFixture.h | 39 - test/integration/WarmResumptionTest.cpp | 87 - test/internal/ReactiveStreamsMocksCompat.h | 21 - .../ReactiveSocketResumabilityTest.cpp | 85 - test/resumption/ResumeCacheTest.cpp | 264 --- .../ResumeIdentificationTokenTest.cpp | 32 - test/resumption/TcpResumeClient.cpp | 195 -- test/resumption/TcpResumeServer.cpp | 301 --- test/statemachine/PublisherBaseTest.cpp | 63 - test/statemachine/RSocketStateMachineTest.cpp | 261 --- test/{ => statemachine}/StreamStateTest.cpp | 0 test/streams/Mocks.h | 280 --- test/test_utils/InlineConnection.cpp | 153 -- test/test_utils/InlineConnection.h | 70 - test/test_utils/InlineConnectionTest.cpp | 95 - 28 files changed, 55 insertions(+), 6013 deletions(-) delete mode 100644 test/ServerConnectionAcceptorTest.cpp delete mode 100644 test/deprecated/ReactiveSocket.cpp delete mode 100644 test/deprecated/ReactiveSocket.h delete mode 100644 test/deprecated/ReactiveSocketConcurrencyTest.cpp delete mode 100644 test/deprecated/ReactiveSocketTest.cpp delete mode 100644 test/deprecated/SubscriberBaseTest.cpp delete mode 100644 test/framing/FrameTransportTest.cpp delete mode 100644 test/framing/FramedReaderTest.cpp delete mode 100644 test/framing/FramedWriterTest.cpp delete mode 100644 test/integration/ClientUtils.h delete mode 100644 test/integration/ServerFixture.cpp delete mode 100644 test/integration/ServerFixture.h delete mode 100644 test/integration/WarmResumptionTest.cpp delete mode 100644 test/internal/ReactiveStreamsMocksCompat.h delete mode 100644 test/resumption/ReactiveSocketResumabilityTest.cpp delete mode 100644 test/resumption/ResumeCacheTest.cpp delete mode 100644 test/resumption/ResumeIdentificationTokenTest.cpp delete mode 100644 test/resumption/TcpResumeClient.cpp delete mode 100644 test/resumption/TcpResumeServer.cpp delete mode 100644 test/statemachine/PublisherBaseTest.cpp delete mode 100644 test/statemachine/RSocketStateMachineTest.cpp rename test/{ => statemachine}/StreamStateTest.cpp (100%) delete mode 100644 test/streams/Mocks.h delete mode 100644 test/test_utils/InlineConnection.cpp delete mode 100644 test/test_utils/InlineConnection.h delete mode 100644 test/test_utils/InlineConnectionTest.cpp diff --git a/.travis.yml b/.travis.yml index 6afe5d5a9..ea3df8a56 100644 --- a/.travis.yml +++ b/.travis.yml @@ -78,14 +78,14 @@ script: - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_CXX_FLAGS="${CXX_FLAGS}" -DCMAKE_EXE_LINKER_FLAGS="${CXX_LINKER_FLAGS}" -DMETA_CXX_STD=$CPP_VERSION - make -j8 - ./tests - - ./rsocket_tests - - ./experimental/yarpl/yarpl-tests + - ./yarpl/yarpl-tests - cd .. - ./scripts/prepare_tck_drivers.sh - - ./scripts/tck_test.sh -c cpp -s cpp - - ./scripts/tck_test.sh -c java -s java - - ./scripts/tck_test.sh -c java -s cpp - - ./scripts/tck_test.sh -c cpp -s java +# Commenting out TCK until it is upgraded to new APIs +# - ./scripts/tck_test.sh -c cpp -s cpp +# - ./scripts/tck_test.sh -c java -s java +# - ./scripts/tck_test.sh -c java -s cpp +# - ./scripts/tck_test.sh -c cpp -s java after_success: - if [ -n "$GCC_VERSION" ]; then lcov --directory . --capture --output-file coverage.info; fi # capture coverage info diff --git a/CMakeLists.txt b/CMakeLists.txt index cd02601cb..5e9d86023 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,40 +240,18 @@ enable_testing() add_executable( tests + test/Test.cpp test/RSocketClientServerTest.cpp + test/PayloadTest.cpp test/handlers/HelloStreamRequestHandler.h test/handlers/HelloStreamRequestHandler.cpp - test/statemachine/RSocketStateMachineTest.cpp - test/framing/FramedReaderTest.cpp - test/framing/FramedWriterTest.cpp - test/statemachine/PublisherBaseTest.cpp test/framing/FrameTest.cpp - test/test_utils/InlineConnection.cpp - test/test_utils/InlineConnection.h - test/test_utils/InlineConnectionTest.cpp test/test_utils/MockKeepaliveTimer.h test/test_utils/MockRequestHandler.h test/test_utils/MockStats.h - test/deprecated/ReactiveSocketConcurrencyTest.cpp - test/deprecated/ReactiveSocketTest.cpp - test/deprecated/SubscriberBaseTest.cpp - test/Test.cpp test/internal/FollyKeepaliveTimerTest.cpp - test/resumption/ReactiveSocketResumabilityTest.cpp test/internal/AllowanceSemaphoreTest.cpp - test/resumption/ResumeIdentificationTokenTest.cpp - test/ServerConnectionAcceptorTest.cpp - test/PayloadTest.cpp - test/resumption/ResumeCacheTest.cpp - test/StreamStateTest.cpp - test/integration/ClientUtils.h - test/integration/ServerFixture.h - test/integration/ServerFixture.cpp - test/integration/WarmResumptionTest.cpp - test/streams/Mocks.h - test/framing/FrameTransportTest.cpp - test/deprecated/ReactiveSocket.cpp - test/deprecated/ReactiveSocket.h + test/statemachine/StreamStateTest.cpp ) target_link_libraries( @@ -294,98 +272,52 @@ add_dependencies(tests gmock ReactiveSocket) add_test(NAME ReactiveSocketTests COMMAND tests) -add_executable( - tckclient - tck-test/client.cpp - tck-test/TestFileParser.cpp - tck-test/TestFileParser.h - tck-test/TestSubscriber.cpp - tck-test/TestSubscriber.h - tck-test/TestSuite.cpp - tck-test/TestSuite.h - tck-test/TestInterpreter.cpp - tck-test/TestInterpreter.h - tck-test/TypedCommands.h - test/deprecated/ReactiveSocket.cpp - test/deprecated/ReactiveSocket.h -) - -target_link_libraries( - tckclient - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) - -add_executable( - tckserver - tck-test/server.cpp - tck-test/MarbleProcessor.cpp - tck-test/MarbleProcessor.h - test/test_utils/StatsPrinter.cpp - test/test_utils/StatsPrinter.h - test/deprecated/ReactiveSocket.cpp - test/deprecated/ReactiveSocket.h -) - -target_link_libraries( - tckserver - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${DOUBLE-CONVERSION} - ${CMAKE_THREAD_LIBS_INIT}) - -add_executable( - tcpresumeclient - test/resumption/TcpResumeClient.cpp - test/test_utils/PrintSubscriber.cpp - test/test_utils/PrintSubscriber.h - test/test_utils/StatsPrinter.cpp - test/test_utils/StatsPrinter.h - test/deprecated/ReactiveSocket.cpp - test/deprecated/ReactiveSocket.h -) - -target_link_libraries( - tcpresumeclient - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) - -add_dependencies(tcpresumeclient gmock) - -add_executable( - tcpresumeserver - test/resumption/TcpResumeServer.cpp - test/test_utils/PrintSubscriber.cpp - test/test_utils/PrintSubscriber.h - test/test_utils/StatsPrinter.cpp - test/test_utils/StatsPrinter.h - test/deprecated/ReactiveSocket.cpp - test/deprecated/ReactiveSocket.h -) - -target_link_libraries( - tcpresumeserver - ReactiveSocket - yarpl - ${FOLLY_LIBRARIES} - ${GFLAGS_LIBRARY} - ${GMOCK_LIBS} - ${GLOG_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) - -add_dependencies(tcpresumeserver gmock) +#add_executable( +# tckclient +# tck-test/client.cpp +# tck-test/TestFileParser.cpp +# tck-test/TestFileParser.h +# tck-test/TestSubscriber.cpp +# tck-test/TestSubscriber.h +# tck-test/TestSuite.cpp +# tck-test/TestSuite.h +# tck-test/TestInterpreter.cpp +# tck-test/TestInterpreter.h +# tck-test/TypedCommands.h +# test/deprecated/ReactiveSocket.cpp +# test/deprecated/ReactiveSocket.h +#) +# +#target_link_libraries( +# tckclient +# ReactiveSocket +# yarpl +# ${FOLLY_LIBRARIES} +# ${GFLAGS_LIBRARY} +# ${GLOG_LIBRARY} +# ${CMAKE_THREAD_LIBS_INIT}) +# +#add_executable( +# tckserver +# tck-test/server.cpp +# tck-test/MarbleProcessor.cpp +# tck-test/MarbleProcessor.h +# test/test_utils/StatsPrinter.cpp +# test/test_utils/StatsPrinter.h +# test/deprecated/ReactiveSocket.cpp +# test/deprecated/ReactiveSocket.h +#) +# +#target_link_libraries( +# tckserver +# ReactiveSocket +# yarpl +# ${FOLLY_LIBRARIES} +# ${GFLAGS_LIBRARY} +# ${GMOCK_LIBS} +# ${GLOG_LIBRARY} +# ${DOUBLE-CONVERSION} +# ${CMAKE_THREAD_LIBS_INIT}) ######################################## # Examples diff --git a/test/ServerConnectionAcceptorTest.cpp b/test/ServerConnectionAcceptorTest.cpp deleted file mode 100644 index 60afcbf0a..000000000 --- a/test/ServerConnectionAcceptorTest.cpp +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include "src/RSocketParameters.h" -#include "src/framing/FrameProcessor.h" -#include "src/framing/FrameSerializer.h" -#include "src/framing/FrameTransport.h" -#include "src/framing/FramedDuplexConnection.h" -#include "src/temporary_home/ServerConnectionAcceptor.h" -#include "test/streams/Mocks.h" -#include "test/test_utils/InlineConnection.h" - -using namespace rsocket; -using namespace testing; - -class MockConnectionHandler : public ConnectionHandler { - public: - void setupNewSocket( - std::shared_ptr frameTransport, - SetupParameters setupPayload) override { - doSetupNewSocket(std::move(frameTransport), setupPayload); - } - - MOCK_METHOD2( - doSetupNewSocket, - void(std::shared_ptr, SetupParameters&)); - - MOCK_METHOD2( - resumeSocket, - bool(std::shared_ptr, ResumeParameters)); - - MOCK_METHOD2( - connectionError, - void(std::shared_ptr, folly::exception_wrapper ex)); -}; - -struct MockFrameProcessor : public FrameProcessor { - void processFrame(std::unique_ptr frame) override { - processFrame_(frame); - } - - MOCK_METHOD1(processFrame_, void(std::unique_ptr&)); - MOCK_METHOD1(onTerminal, void(folly::exception_wrapper)); -}; - -class ServerConnectionAcceptorTest : public Test { - public: - ServerConnectionAcceptorTest() : acceptor_(ProtocolVersion::Unknown) { - handler_ = std::make_shared>(); - - clientConnection_ = std::make_unique(); - serverConnection_ = std::make_unique(); - clientConnection_->connectTo(*serverConnection_); - - auto testInputSubscription = std::make_shared(); - - clientInput_ = - std::make_shared>>(); - EXPECT_CALL(*clientInput_, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - - clientConnection_->setInput(clientInput_); - clientOutput_ = clientConnection_->getOutput(); - clientOutput_->onSubscribe(testInputSubscription); - } - - std::unique_ptr clientConnection_; - std::unique_ptr serverConnection_; - std::shared_ptr>> clientInput_; - std::shared_ptr>> clientOutput_; - std::shared_ptr handler_; - ServerConnectionAcceptor acceptor_; -}; - -TEST_F(ServerConnectionAcceptorTest, BrokenFrame) { - EXPECT_CALL(*handler_, connectionError(_, _)); - EXPECT_CALL(*clientInput_, onError_(_)); - - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onNext(folly::IOBuf::create(0)); - clientOutput_->onComplete(); -} - -TEST_F(ServerConnectionAcceptorTest, EarlyDisconnect) { - EXPECT_CALL(*handler_, connectionError(_, _)); - EXPECT_CALL(*clientInput_, onComplete_()); - - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onComplete(); -} - -TEST_F(ServerConnectionAcceptorTest, EarlyError) { - EXPECT_CALL(*handler_, connectionError(_, _)); - EXPECT_CALL(*clientInput_, onError_(_)); - - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onError(std::runtime_error("need to go")); -} - -TEST_F(ServerConnectionAcceptorTest, SetupFrame) { - SetupParameters setupPayload( - "metadataMimeType", "dataMimeType", Payload(), true); - EXPECT_CALL(*handler_, doSetupNewSocket(_, _)) - .WillOnce(Invoke([&]( - std::shared_ptr transport, SetupParameters& payload) { - ASSERT_EQ(setupPayload.token, payload.token); - ASSERT_EQ(setupPayload.metadataMimeType, payload.metadataMimeType); - ASSERT_EQ(setupPayload.dataMimeType, payload.dataMimeType); - transport->close(folly::exception_wrapper()); - })); - - auto frameSerializer = FrameSerializer::createCurrentVersion(); - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onNext(frameSerializer->serializeOut(Frame_SETUP( - setupPayload.resumable ? FrameFlags::RESUME_ENABLE : FrameFlags::EMPTY, - FrameSerializer::getCurrentProtocolVersion().major, - FrameSerializer::getCurrentProtocolVersion().minor, - 500, - Frame_SETUP::kMaxLifetime, - setupPayload.token, - setupPayload.metadataMimeType, - setupPayload.dataMimeType, - Payload()))); - clientOutput_->onNext(frameSerializer->serializeOut( - Frame_REQUEST_FNF(1, FrameFlags::EMPTY, Payload()))); - clientOutput_->onComplete(); -} - -TEST_F(ServerConnectionAcceptorTest, ResumeFrameNoSession) { - std::unique_ptr data; - EXPECT_CALL(*clientInput_, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& buffer) { - data = std::move(buffer); - })); - - ResumeParameters resumeParams( - ResumeIdentificationToken::generateNew(), - 1, - 2, - FrameSerializer::getCurrentProtocolVersion()); - EXPECT_CALL(*handler_, resumeSocket(_, _)).WillOnce(Return(false)); - - auto frameSerializer = FrameSerializer::createCurrentVersion(); - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onNext(frameSerializer->serializeOut(Frame_RESUME( - resumeParams.token, - resumeParams.serverPosition, - resumeParams.clientPosition, - FrameSerializer::getCurrentProtocolVersion()))); - - Frame_ERROR errorFrame; - ASSERT_TRUE(data != nullptr); - EXPECT_TRUE(frameSerializer->deserializeFrom(errorFrame, std::move(data))); - EXPECT_EQ(errorFrame.errorCode_, ErrorCode::CONNECTION_ERROR); - - clientOutput_->onComplete(); -} - -TEST_F(ServerConnectionAcceptorTest, ResumeFrame) { - ResumeParameters resumeParams( - ResumeIdentificationToken::generateNew(), - 1, - 2, - FrameSerializer::getCurrentProtocolVersion()); - EXPECT_CALL(*handler_, resumeSocket(_, _)) - .WillOnce(Invoke( - [&](std::shared_ptr transport, - ResumeParameters params) -> bool { - EXPECT_EQ(resumeParams.token, params.token); - // FIXME: This isn't sent in 0.1 frames - // ASSERT_EQ(resumeParams.clientPosition, params.clientPosition); - EXPECT_EQ(resumeParams.serverPosition, params.serverPosition); - transport->close(folly::exception_wrapper()); - return true; - })); - - auto frameSerializer = FrameSerializer::createCurrentVersion(); - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onNext(frameSerializer->serializeOut(Frame_RESUME( - resumeParams.token, - resumeParams.serverPosition, - resumeParams.clientPosition, - FrameSerializer::getCurrentProtocolVersion()))); - clientOutput_->onComplete(); -} - -TEST_F(ServerConnectionAcceptorTest, VerifyTransport) { - ResumeParameters resumeParams( - ResumeIdentificationToken::generateNew(), - 1, - 2, - FrameSerializer::getCurrentProtocolVersion()); - std::weak_ptr wfp; - std::shared_ptr transport_; - EXPECT_CALL(*handler_, resumeSocket(_, _)) - .WillOnce(Invoke( - [&](std::shared_ptr transport, - ResumeParameters params) -> bool { - auto fp = std::make_shared(); - wfp = fp; - transport->setFrameProcessor(std::move(fp)); - transport_ = transport; - return true; - })); - - auto frameSerializer = FrameSerializer::createCurrentVersion(); - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onNext(frameSerializer->serializeOut(Frame_RESUME( - resumeParams.token, - resumeParams.serverPosition, - resumeParams.clientPosition, - FrameSerializer::getCurrentProtocolVersion()))); - EXPECT_TRUE(wfp.use_count() > 0); - clientOutput_->onComplete(); - transport_->close(folly::exception_wrapper()); -} - -TEST_F(ServerConnectionAcceptorTest, VerifyAsyncProcessorFrame) { - ResumeParameters resumeParams( - ResumeIdentificationToken::generateNew(), - 1, - 2, - FrameSerializer::getCurrentProtocolVersion()); - std::shared_ptr transport_; - EXPECT_CALL(*handler_, resumeSocket(_, _)) - .WillOnce(Invoke( - [&](std::shared_ptr transport, - ResumeParameters params) -> bool { - // Only capture the transport, wait with setting the processor. - transport_ = transport; - return true; - })); - - auto frameSerializer = FrameSerializer::createCurrentVersion(); - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onNext(frameSerializer->serializeOut(Frame_RESUME( - resumeParams.token, - resumeParams.serverPosition, - resumeParams.clientPosition, - FrameSerializer::getCurrentProtocolVersion()))); - - // The transport won't have a processor now, try sending a frame - clientOutput_->onNext(frameSerializer->serializeOut( - Frame_REQUEST_FNF(1, FrameFlags::EMPTY, Payload()))); - - auto processor = std::make_shared>(); - EXPECT_CALL(*processor, onTerminal(_)).Times(Exactly(0)); - EXPECT_CALL(*processor, processFrame_(_)) - .WillOnce(Invoke([&](std::unique_ptr& frame) { - Frame_REQUEST_FNF fnfFrame; - EXPECT_TRUE( - frameSerializer->deserializeFrom(fnfFrame, std::move(frame))); - })); - - transport_->setFrameProcessor(processor); - - // Teardown will cause a terminal callback - Mock::VerifyAndClearExpectations(processor.get()); - clientOutput_->onComplete(); - transport_->close(folly::exception_wrapper()); -} - -TEST_F(ServerConnectionAcceptorTest, VerifyAsyncProcessorTerminal) { - ResumeParameters resumeParams( - ResumeIdentificationToken::generateNew(), - 1, - 2, - FrameSerializer::getCurrentProtocolVersion()); - std::shared_ptr transport_; - EXPECT_CALL(*handler_, resumeSocket(_, _)) - .WillOnce(Invoke( - [&](std::shared_ptr transport, - ResumeParameters params) -> bool { - // Only capture the transport, wait with setting the processor. - transport_ = transport; - return true; - })); - - auto frameSerializer = FrameSerializer::createCurrentVersion(); - acceptor_.accept(std::move(serverConnection_), handler_); - clientOutput_->onNext(frameSerializer->serializeOut(Frame_RESUME( - resumeParams.token, - resumeParams.serverPosition, - resumeParams.clientPosition, - FrameSerializer::getCurrentProtocolVersion()))); - - // The transport won't have a processor now, try sending terminal. - clientOutput_->onError(std::runtime_error("too bad")); - - auto processor = std::make_shared>(); - EXPECT_CALL(*processor, onTerminal(_)) - .WillOnce(Invoke([&](folly::exception_wrapper ex) { - EXPECT_THAT(ex.what().toStdString(), HasSubstr("too bad")); - })); - - transport_->setFrameProcessor(processor); - - transport_->close(folly::exception_wrapper()); -} diff --git a/test/deprecated/ReactiveSocket.cpp b/test/deprecated/ReactiveSocket.cpp deleted file mode 100644 index eb2e5641a..000000000 --- a/test/deprecated/ReactiveSocket.cpp +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include "ReactiveSocket.h" - -#include -#include -#include -#include -#include - -#include "src/framing/FrameTransport.h" -#include "src/internal/ClientResumeStatusCallback.h" -#include "src/statemachine/RSocketStateMachine.h" -#include "src/temporary_home/RequestHandler.h" - -namespace rsocket { - -ReactiveSocket::~ReactiveSocket() { - debugCheckCorrectExecutor(); - - // Force connection closure, this will trigger terminal signals to be - // delivered to all stream automata. - close(); -} - -ReactiveSocket::ReactiveSocket( - ReactiveSocketMode mode, - std::shared_ptr handler, - std::shared_ptr stats, - std::unique_ptr keepaliveTimer, - folly::Executor& executor) - : connection_(std::make_shared( - executor, - std::move(handler), - std::move(stats), - std::move(keepaliveTimer), - mode)), - executor_(executor) { - debugCheckCorrectExecutor(); - connection_->stats().socketCreated(); -} - -std::unique_ptr ReactiveSocket::fromClientConnection( - folly::Executor& executor, - std::unique_ptr connection, - std::unique_ptr handler, - SetupParameters setupPayload, - std::shared_ptr stats, - std::unique_ptr keepaliveTimer) { - auto socket = disconnectedClient( - executor, - std::move(handler), - std::move(stats), - std::move(keepaliveTimer), - setupPayload.protocolVersion); - socket->clientConnect( - std::make_shared(std::move(connection)), - std::move(setupPayload)); - return socket; -} - -std::unique_ptr ReactiveSocket::disconnectedClient( - folly::Executor& executor, - std::unique_ptr handler, - std::shared_ptr stats, - std::unique_ptr keepaliveTimer, - ProtocolVersion protocolVersion) { - std::unique_ptr socket(new ReactiveSocket( - ReactiveSocketMode::CLIENT, - std::move(handler), - std::move(stats), - std::move(keepaliveTimer), - executor)); - socket->connection_->setFrameSerializer( - protocolVersion == ProtocolVersion::Unknown - ? FrameSerializer::createCurrentVersion() - : FrameSerializer::createFrameSerializer(protocolVersion)); - return socket; -} - -std::unique_ptr ReactiveSocket::fromServerConnection( - folly::Executor& executor, - std::unique_ptr connection, - std::unique_ptr handler, - std::shared_ptr stats, - const RSocketParameters& RSocketParameters) { - // TODO: isResumable should come as a flag on Setup frame and it should be - // exposed to the application code. We should then remove this parameter - auto socket = disconnectedServer( - executor, - std::move(handler), - std::move(stats), - RSocketParameters.protocolVersion); - - socket->serverConnect( - std::make_shared(std::move(connection)), - RSocketParameters); - return socket; -} - -std::unique_ptr ReactiveSocket::disconnectedServer( - folly::Executor& executor, - std::shared_ptr handler, - std::shared_ptr stats, - ProtocolVersion protocolVersion) { - std::unique_ptr socket(new ReactiveSocket( - ReactiveSocketMode::SERVER, - std::move(handler), - std::move(stats), - nullptr, - executor)); - if (protocolVersion != ProtocolVersion::Unknown) { - socket->connection_->setFrameSerializer( - FrameSerializer::createFrameSerializer(protocolVersion)); - } - return socket; -} - -yarpl::Reference> -ReactiveSocket::requestChannel( - yarpl::Reference> responseSink) { - debugCheckCorrectExecutor(); - checkNotClosed(); - return connection_->streamsFactory().createChannelRequester( - std::move(responseSink)); -} - -void ReactiveSocket::requestStream( - Payload request, - yarpl::Reference> responseSink) { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->streamsFactory().createStreamRequester( - std::move(request), std::move(responseSink)); -} - -void ReactiveSocket::requestResponse( - Payload payload, - yarpl::Reference> responseSink) { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->streamsFactory().createRequestResponseRequester( - std::move(payload), std::move(responseSink)); -} - -void ReactiveSocket::requestFireAndForget(Payload request) { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->requestFireAndForget(std::move(request)); -} - -void ReactiveSocket::metadataPush(std::unique_ptr metadata) { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->metadataPush(std::move(metadata)); -} - -void ReactiveSocket::clientConnect( - std::shared_ptr frameTransport, - SetupParameters setupPayload) { - CHECK(frameTransport && !frameTransport->isClosed()); - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->setResumable(setupPayload.resumable); - - if (setupPayload.protocolVersion != ProtocolVersion::Unknown) { - CHECK_EQ( - setupPayload.protocolVersion, - connection_->getSerializerProtocolVersion()); - } - - connection_->setUpFrame(std::move(frameTransport), std::move(setupPayload)); -} - -void ReactiveSocket::serverConnect( - std::shared_ptr frameTransport, - const RSocketParameters& socketParams) { - debugCheckCorrectExecutor(); - connection_->setResumable(socketParams.resumable); - connection_->connect( - std::move(frameTransport), true, socketParams.protocolVersion); -} - -void ReactiveSocket::close() { - debugCheckCorrectExecutor(); - connection_->close( - folly::exception_wrapper(), StreamCompletionSignal::SOCKET_CLOSED); -} - -void ReactiveSocket::disconnect() { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->disconnect(folly::exception_wrapper()); -} - -void ReactiveSocket::closeConnectionError(const std::string& reason) { - debugCheckCorrectExecutor(); - connection_->closeWithError(Frame_ERROR::connectionError(reason)); -} - -std::shared_ptr ReactiveSocket::detachFrameTransport() { - debugCheckCorrectExecutor(); - checkNotClosed(); - return connection_->detachFrameTransport(); -} - -void ReactiveSocket::onConnected(std::function listener) { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->addConnectedListener(std::move(listener)); -} - -void ReactiveSocket::onDisconnected(ErrorCallback listener) { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->addDisconnectedListener(std::move(listener)); -} - -void ReactiveSocket::onClosed(ErrorCallback listener) { - debugCheckCorrectExecutor(); - checkNotClosed(); - connection_->addClosedListener(std::move(listener)); -} - -void ReactiveSocket::tryClientResume( - const ResumeIdentificationToken& token, - std::shared_ptr frameTransport, - std::unique_ptr resumeCallback) { - // TODO: verify/assert that the new frameTransport is on the same event base - debugCheckCorrectExecutor(); - checkNotClosed(); - CHECK(frameTransport && !frameTransport->isClosed()); - connection_->tryClientResume( - token, std::move(frameTransport), std::move(resumeCallback)); -} - -bool ReactiveSocket::tryResumeServer( - std::shared_ptr frameTransport, - const ResumeParameters& resumeParams) { - CHECK(resumeParams.protocolVersion != ProtocolVersion::Unknown); - - // TODO: verify/assert that the new frameTransport is on the same event base - debugCheckCorrectExecutor(); - checkNotClosed(); - - // if the server was still connected we will disconnected it with a clear - // error message - connection_->disconnect( - std::runtime_error("resuming server on a different connection")); - // TODO: verify, we should not be receiving any frames, not a single one - return connection_->connect( - std::move(frameTransport), - /*sendPendingFrames=*/false, - resumeParams.protocolVersion) && - connection_->resumeFromPositionOrClose( - resumeParams.serverPosition, resumeParams.clientPosition); -} - -void ReactiveSocket::checkNotClosed() const { - CHECK(!connection_->isClosed()) << "ReactiveSocket already closed"; -} - -DuplexConnection* ReactiveSocket::duplexConnection() const { - debugCheckCorrectExecutor(); - return connection_->duplexConnection(); -} - -void ReactiveSocket::debugCheckCorrectExecutor() const { - DCHECK( - !dynamic_cast(&executor_) || - dynamic_cast(&executor_)->isInEventBaseThread()); -} - -bool ReactiveSocket::isClosed() { - debugCheckCorrectExecutor(); - return connection_->isClosed(); -} - -} // reactivesocket diff --git a/test/deprecated/ReactiveSocket.h b/test/deprecated/ReactiveSocket.h deleted file mode 100644 index d082a9a70..000000000 --- a/test/deprecated/ReactiveSocket.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#pragma once - -#include -#include "src/Payload.h" -#include "src/RSocketParameters.h" -#include "src/RSocketStats.h" -#include "src/internal/Common.h" -#include "yarpl/flowable/Subscriber.h" -#include "yarpl/flowable/Subscription.h" - -namespace folly { -class Executor; -} - -namespace rsocket { - -class ClientResumeStatusCallback; -class RSocketStateMachine; -class DuplexConnection; -class FrameTransport; -class RequestHandler; - -folly::Executor& defaultExecutor(); - -// TODO eliminate this class and use RSocketStateMachine directly -class ReactiveSocket { - public: - ReactiveSocket(ReactiveSocket&&) = delete; - ReactiveSocket& operator=(ReactiveSocket&&) = delete; - ReactiveSocket(const ReactiveSocket&) = delete; - ReactiveSocket& operator=(const ReactiveSocket&) = delete; - - ~ReactiveSocket(); - - static std::unique_ptr fromClientConnection( - folly::Executor& executor, - std::unique_ptr connection, - std::unique_ptr handler, - SetupParameters setupPayload = SetupParameters(), - std::shared_ptr stats = RSocketStats::noop(), - std::unique_ptr keepaliveTimer = - std::unique_ptr(nullptr)); - - static std::unique_ptr disconnectedClient( - folly::Executor& executor, - std::unique_ptr handler, - std::shared_ptr stats = RSocketStats::noop(), - std::unique_ptr keepaliveTimer = - std::unique_ptr(nullptr), - ProtocolVersion protocolVersion = ProtocolVersion::Unknown); - - static std::unique_ptr fromServerConnection( - folly::Executor& executor, - std::unique_ptr connection, - std::unique_ptr handler, - std::shared_ptr stats = RSocketStats::noop(), - const RSocketParameters& socketParameters = - RSocketParameters(/*resumable=*/false, ProtocolVersion::Unknown)); - - static std::unique_ptr disconnectedServer( - folly::Executor& executor, - std::shared_ptr handler, - std::shared_ptr stats = RSocketStats::noop(), - ProtocolVersion protocolVersion = ProtocolVersion::Unknown); - - yarpl::Reference> requestChannel( - yarpl::Reference> responseSink); - - void requestStream( - Payload payload, - yarpl::Reference> responseSink); - - void requestResponse( - Payload payload, - yarpl::Reference> responseSink); - - void requestFireAndForget(Payload request); - - void metadataPush(std::unique_ptr metadata); - - void clientConnect( - std::shared_ptr frameTransport, - SetupParameters setupPayload = SetupParameters()); - - void serverConnect( - std::shared_ptr frameTransport, - const RSocketParameters& socketParams); - - void close(); - void disconnect(); - - void closeConnectionError(const std::string& reason); - - std::shared_ptr detachFrameTransport(); - - void onConnected(std::function listener); - void onDisconnected(ErrorCallback listener); - void onClosed(ErrorCallback listener); - - void tryClientResume( - const ResumeIdentificationToken& token, - std::shared_ptr frameTransport, - std::unique_ptr resumeCallback); - - bool tryResumeServer( - std::shared_ptr frameTransport, - const ResumeParameters& resumeParams); - - folly::Executor& executor() { - return executor_; - } - - DuplexConnection* duplexConnection() const; - bool isClosed(); - - private: - ReactiveSocket( - ReactiveSocketMode mode, - std::shared_ptr handler, - std::shared_ptr stats, - std::unique_ptr keepaliveTimer, - folly::Executor& executor); - - void checkNotClosed() const; - void debugCheckCorrectExecutor() const; - - std::shared_ptr connection_; - folly::Executor& executor_; -}; -} diff --git a/test/deprecated/ReactiveSocketConcurrencyTest.cpp b/test/deprecated/ReactiveSocketConcurrencyTest.cpp deleted file mode 100644 index cbae20a38..000000000 --- a/test/deprecated/ReactiveSocketConcurrencyTest.cpp +++ /dev/null @@ -1,606 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "src/framing/FrameSerializer_v0_1.h" -#include "src/framing/FramedDuplexConnection.h" -#include "test/deprecated/ReactiveSocket.h" -#include "test/streams/Mocks.h" -#include "test/test_utils/InlineConnection.h" -#include "test/test_utils/MockRequestHandler.h" -#include "test/test_utils/MockStats.h" - -using namespace ::testing; -using namespace ::rsocket; -using namespace yarpl; - -class ClientSideConcurrencyTest : public testing::Test { - public: - ClientSideConcurrencyTest() { - auto serverConn = std::make_unique(); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - thread2.getEventBase()->runImmediatelyOrRunInEventBaseThreadAndWait([&] { - auto clientConn = std::make_unique(); - clientConn->connectTo(*serverConn); - clientSock = ReactiveSocket::fromClientConnection( - *thread2.getEventBase(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any - // requests. - std::move(requestHandler), - SetupParameters("", "", Payload()), - RSocketStats::noop(), - nullptr); - }); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .WillRepeatedly(Return(nullptr)); - - serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // request is called from the thread1 - // but delivered on thread2 - thread1.getEventBase()->runInEventBaseThreadAndWait( - [&]() { sub->request(2); }); - })); - // The request reaches the other end and triggers new responder to be set - // up. - EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(serverHandlerRef, handleRequestChannel_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - - EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke( - [&](yarpl::Reference sub) { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - serverInputSub = sub; - sub->request(2); - })); - EXPECT_CALL(*serverInput, onNext_(_)) - .WillOnce(Invoke([&](Payload& payload) { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - serverInputSub->cancel(); - serverInputSub = nullptr; - })); - EXPECT_CALL(*serverInput, onComplete_()) - .WillOnce(Invoke([&]() { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - })); - - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - - return serverInput; - })); - - EXPECT_CALL(*serverOutputSub, request_(_)) - // The server delivers them immediately. - .WillOnce(Invoke( - [&](size_t) { serverOutput->onNext(Payload(originalPayload())); })); - EXPECT_CALL(*clientInput, onNext_(_)) - // Client receives the payload. We will complete the interaction - .WillOnce(Invoke([&](Payload&) { - // cancel is called from the thread1 - // but delivered on thread2 - if (clientTerminatesInteraction_) { - thread1.getEventBase()->runInEventBaseThreadAndWait([&]() { - clientInputSub->cancel(); - clientInputSub = nullptr; - done(); - }); - } - })); - - EXPECT_CALL(*serverOutputSub, cancel_()) - .WillOnce(Invoke([&]() { - serverOutput->onComplete(); - serverOutput = nullptr; - })); - - EXPECT_CALL(*clientInput, onComplete_()) - .WillOnce(Invoke([&]() { - if (!clientTerminatesInteraction_) { - clientInputSub->cancel(); - clientInputSub = nullptr; - done(); - } - })); - } - - ~ClientSideConcurrencyTest() { - auto socketMW = folly::makeMoveWrapper(clientSock); - thread2.getEventBase()->runImmediatelyOrRunInEventBaseThreadAndWait( - [socketMW]() mutable { socketMW->reset(); }); - } - - void done() { - std::unique_lock lock(mtx); - isDone_ = true; - cv.notify_one(); - } - - void wainUntilDone() { - std::unique_lock lock(mtx); - cv.wait(lock, [&]() { return isDone_; }); - } - - static std::unique_ptr originalPayload() { - return folly::IOBuf::copyBuffer("foo"); - } - - // we want these to be the first members, to be destroyed as last - folly::ScopedEventBaseThread thread1; - folly::ScopedEventBaseThread thread2; - - std::unique_ptr clientSock; - std::unique_ptr serverSock; - - yarpl::Reference>> - clientInput{ - make_ref>>()}; - yarpl::Reference clientInputSub; - - yarpl::Reference> serverOutput; - yarpl::Reference> - serverOutputSub{ - make_ref>()}; - - yarpl::Reference>> - serverInput{ - make_ref>>()}; - yarpl::Reference serverInputSub; - - bool clientTerminatesInteraction_{true}; - - std::mutex mtx; - std::condition_variable cv; - bool isDone_{false}; -}; - -TEST_F(ClientSideConcurrencyTest, DISABLED_RequestResponseTest) { - thread2.getEventBase()->runInEventBaseThread([&] { - clientSock->requestResponse(Payload(originalPayload()), clientInput); - }); - wainUntilDone(); - LOG(INFO) << "test done"; -} - -TEST_F(ClientSideConcurrencyTest, DISABLED_RequestStreamTest) { - thread2.getEventBase()->runInEventBaseThread([&] { - clientSock->requestStream(Payload(originalPayload()), clientInput); - }); - wainUntilDone(); -} - -TEST_F(ClientSideConcurrencyTest, DISABLED_RequestChannelTest) { - clientTerminatesInteraction_ = false; - - yarpl::Reference> clientOutput; - thread2.getEventBase()->runInEventBaseThreadAndWait([&clientOutput, this] { - clientOutput = clientSock->requestChannel(clientInput); - }); - - auto clientOutputSub = - make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)) - .WillOnce(Invoke([&](size_t) { - thread1.getEventBase()->runInEventBaseThread([clientOutput]() { - // first payload for the server RequestHandler - clientOutput->onNext(Payload(originalPayload())); - }); - })); - EXPECT_CALL(*clientOutputSub, request_(2)) - .WillOnce(Invoke([clientOutput](int64_t) { - // second payload for the server input subscriber - clientOutput->onNext(Payload(originalPayload())); - })); - EXPECT_CALL(*clientOutputSub, cancel_()).Times(1); - - thread1.getEventBase()->runInEventBaseThread( - [clientOutput, clientOutputSub]() { - clientOutput->onSubscribe(clientOutputSub); - }); - - wainUntilDone(); -} - -class ServerSideConcurrencyTest : public testing::Test { - public: - ServerSideConcurrencyTest() { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any - // requests. - std::make_unique>(), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .WillRepeatedly(Return(nullptr)); - - thread2.getEventBase()->runImmediatelyOrRunInEventBaseThreadAndWait([&] { - serverSock = ReactiveSocket::fromServerConnection( - *thread2.getEventBase(), - std::move(serverConn), - std::move(serverHandler), - RSocketStats::noop(), - RSocketParameters(false, ProtocolVersion::Unknown)); - }); - - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(3); - })); - // The request reaches the other end and triggers new responder to be set - // up. - EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - const yarpl::Reference>& - response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - const yarpl::Reference>& - response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(serverHandlerRef, handleRequestChannel_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - const yarpl::Reference>& - response) { - clientTerminatesInteraction_ = false; - - EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke( - [&](yarpl::Reference sub) { - serverInputSub = sub; - thread1.getEventBase()->runInEventBaseThreadAndWait( - [&]() { sub->request(2); }); - })); - - // TODO(t15917213): Re-enable this assertion! - // EXPECT_CALL(*serverInput, onNext_(_)).Times(1); - - // because we cancel the stream in onSubscribe - EXPECT_CALL(*serverInput, onComplete_()) - .WillOnce(Invoke([&]() { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - })); - - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - - return serverInput; - })); - - EXPECT_CALL(*serverOutputSub, request_(_)) - // The server delivers them immediately. - .WillOnce(Invoke([&](size_t) { - thread1.getEventBase()->runInEventBaseThreadAndWait( - [&]() { serverOutput->onNext(Payload(originalPayload())); }); - thread1.getEventBase()->runInEventBaseThreadAndWait([&]() { - if (serverInputSub) { - serverInputSub->cancel(); - serverInputSub = nullptr; - } - }); - })); - EXPECT_CALL(*clientInput, onNext_(_)) - // Client receives the payload. We will complete the interaction - .WillOnce(Invoke([&](Payload&) { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - // cancel is called from the thread1 - // but delivered on thread2 - if (clientTerminatesInteraction_) { - clientInputSub->cancel(); - clientInputSub = nullptr; - done(); - } - })); - - EXPECT_CALL(*serverOutputSub, cancel_()) - .WillRepeatedly(Invoke([&]() { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - serverOutput->onComplete(); - serverOutput = nullptr; - })); - - EXPECT_CALL(*clientInput, onComplete_()) - .WillOnce(Invoke([&]() { - if (!clientTerminatesInteraction_) { - clientInputSub->cancel(); - clientInputSub = nullptr; - done(); - } - })); - } - - ~ServerSideConcurrencyTest() { - auto socketMW = folly::makeMoveWrapper(serverSock); - thread2.getEventBase()->runImmediatelyOrRunInEventBaseThreadAndWait( - [socketMW]() mutable { socketMW->reset(); }); - } - - void done() { - std::unique_lock lock(mtx); - isDone_ = true; - cv.notify_one(); - } - - void wainUntilDone() { - std::unique_lock lock(mtx); - cv.wait(lock, [&]() { return isDone_; }); - } - - // we want these to be the first members to be destroyed as last - folly::ScopedEventBaseThread thread1; - folly::ScopedEventBaseThread thread2; - - static std::unique_ptr originalPayload() { - return folly::IOBuf::copyBuffer("foo"); - } - - std::unique_ptr clientSock; - std::unique_ptr serverSock; - - yarpl::Reference>> - clientInput{ - make_ref>>()}; - yarpl::Reference clientInputSub; - - yarpl::Reference> serverOutput; - yarpl::Reference> - serverOutputSub{ - make_ref>()}; - - yarpl::Reference>> - serverInput{ - make_ref>>()}; - yarpl::Reference serverInputSub; - - bool clientTerminatesInteraction_{true}; - - std::mutex mtx; - std::condition_variable cv; - bool isDone_{false}; -}; - -// TODO(t17618830): please fix and enable -TEST_F(ServerSideConcurrencyTest, DISABLED_RequestResponseTest) { - clientSock->requestResponse(Payload(originalPayload()), clientInput); - wainUntilDone(); -} - -// TODO(t17618830): please fix and enable -TEST_F(ServerSideConcurrencyTest, DISABLED_RequestStreamTest) { - clientSock->requestStream(Payload(originalPayload()), clientInput); - wainUntilDone(); -} - -// TODO(t17618830): please fix and enable -TEST_F(ServerSideConcurrencyTest, DISABLED_RequestChannelTest) { - auto clientOutput = clientSock->requestChannel(clientInput); - - auto clientOutputSub = - make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)) - .WillOnce(Invoke([clientOutput](size_t n) { - // first payload for the server RequestHandler - clientOutput->onNext(Payload(originalPayload())); - })); - EXPECT_CALL(*clientOutputSub, request_(2)) - .WillOnce(Invoke([clientOutput, this](size_t n) { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - // second payload for the server input subscriber - clientOutput->onNext(Payload(originalPayload())); - })); - EXPECT_CALL(*clientOutputSub, cancel_()) - .WillOnce(Invoke([clientOutput, this]() { - EXPECT_TRUE(thread2.getEventBase()->isInEventBaseThread()); - clientOutput->onComplete(); - })); - - clientOutput->onSubscribe(clientOutputSub); - clientOutput = nullptr; - - wainUntilDone(); -} - -class InitialRequestNDeliveredTest : public testing::Test { - public: - InitialRequestNDeliveredTest() { - auto serverSocketConnection = std::make_unique(); - auto testInlineConnection = std::make_unique(); - - serverSocketConnection->connectTo(*testInlineConnection); - - testConnection = std::make_unique( - std::move(testInlineConnection), inlineExecutor()); - - testConnectionSub = testConnection->getOutput(); - testInputSubscription = std::make_shared(); - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - EXPECT_CALL(*testOutputSubscriber, onComplete_()) - .WillOnce(Invoke([&]() { done = true; })); - - testConnection->setInput(testOutputSubscriber); - testConnectionSub->onSubscribe(testInputSubscription); - - validatingSubscription = make_ref(); - - EXPECT_CALL(*validatingSubscription, request_(_)) - .WillOnce(Invoke([&](int64_t n) { - EXPECT_EQ(expectedRequestN, n); - serverSocket.reset(); - })); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .WillRepeatedly(Return(nullptr)); - - EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - const yarpl::Reference>& - response) { - thread2.getEventBase()->runInEventBaseThread([response, this] { - /* sleep override */ std::this_thread::sleep_for( - std::chrono::milliseconds(5)); - response->onSubscribe(validatingSubscription); - }); - })); - EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - const yarpl::Reference>& - response) { - thread2.getEventBase()->runInEventBaseThread([response, this] { - /* sleep override */ std::this_thread::sleep_for( - std::chrono::milliseconds(5)); - response->onSubscribe(validatingSubscription); - }); - })); - - serverSocket = ReactiveSocket::fromServerConnection( - eventBase_, - std::make_unique( - std::move(serverSocketConnection), inlineExecutor()), - std::move(serverHandler), - RSocketStats::noop(), - RSocketParameters(false, ProtocolVersion::Unknown)); - - Frame_SETUP frameSetup( - FrameFlags::EMPTY, - 0, - 1, - Frame_SETUP::kMaxKeepaliveTime, - Frame_SETUP::kMaxLifetime, - ResumeIdentificationToken::generateNew(), - "", - "", - Payload()); - testConnectionSub->onNext( - FrameSerializer::createCurrentVersion()->serializeOut( - std::move(frameSetup))); - } - - void loopEventBaseUntilDone() { - while (!done) { - eventBase_.loop(); - } - } - - // we want these to be the first members, to be destroyed as the last - folly::ScopedEventBaseThread thread2; - - std::unique_ptr serverSocket; - std::shared_ptr testInputSubscription; - std::unique_ptr testConnection; - std::shared_ptr>> testConnectionSub; - yarpl::Reference validatingSubscription; - - const size_t kStreamId{1}; - const int64_t kRequestN{500}; - - std::atomic done{false}; - int64_t expectedRequestN{kRequestN}; - folly::EventBase eventBase_; - FrameSerializerV0_1 frameSerializer; -}; - -TEST_F(InitialRequestNDeliveredTest, DISABLED_RequestResponse) { - expectedRequestN = 1; - Frame_REQUEST_RESPONSE requestFrame(kStreamId, FrameFlags::EMPTY, Payload()); - testConnectionSub->onNext( - frameSerializer.serializeOut(std::move(requestFrame))); - loopEventBaseUntilDone(); -} - -TEST_F(InitialRequestNDeliveredTest, DISABLED_RequestStream) { - Frame_REQUEST_STREAM requestFrame( - kStreamId, FrameFlags::EMPTY, kRequestN, Payload()); - testConnectionSub->onNext( - frameSerializer.serializeOut(std::move(requestFrame))); - loopEventBaseUntilDone(); -} diff --git a/test/deprecated/ReactiveSocketTest.cpp b/test/deprecated/ReactiveSocketTest.cpp deleted file mode 100644 index b3143d6de..000000000 --- a/test/deprecated/ReactiveSocketTest.cpp +++ /dev/null @@ -1,1621 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "src/framing/FrameTransport.h" -#include "src/internal/FollyKeepaliveTimer.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "test/deprecated/ReactiveSocket.h" -#include "test/streams/Mocks.h" -#include "test/test_utils/InlineConnection.h" -#include "test/test_utils/MockKeepaliveTimer.h" -#include "test/test_utils/MockRequestHandler.h" -#include "test/test_utils/MockStats.h" - -using namespace ::testing; -using namespace ::rsocket; -using namespace std::string_literals; -using namespace yarpl; - -MATCHER_P( - Equals, - payload, - "Payloads " + std::string(negation ? "don't" : "") + "match") { - return folly::IOBufEqual()(*payload, arg.data); -} - -MATCHER_P( - Equals2, - payload, - "Payloads " + std::string(negation ? "don't" : "") + "match") { - return folly::IOBufEqual()(*payload, arg); -} - -DECLARE_string(rs_use_protocol_version); - -TEST(ReactiveSocketTest, RequestChannel) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto clientInput = - make_ref>>(); - auto serverInput = - make_ref>>(); - auto clientOutputSub = - make_ref>(); - auto serverOutputSub = - make_ref>(); - yarpl::Reference clientInputSub, - serverInputSub; - yarpl::Reference> clientOutput, - serverOutput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client creates a channel. - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .InSequence(s) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - })); - // The initial payload is requested automatically. - EXPECT_CALL(*clientOutputSub, request_(1)) - .InSequence(s) - // Client sends the initial request. - .WillOnce(Invoke([&](size_t) { - clientOutput->onNext(Payload(originalPayload->clone())); - })); - // The request reaches the other end and triggers new responder to be set up. - EXPECT_CALL( - serverHandlerRef, handleRequestChannel_(Equals(&originalPayload), _, _)) - .InSequence(s) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - return serverInput; - })); - EXPECT_CALL(*serverInput, onSubscribe_(_)) - .InSequence(s) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - serverInputSub = sub; - // Client requests two payloads. - clientInputSub->request(2); - })); - EXPECT_CALL(*serverOutputSub, request_(2)) - .InSequence(s) - // The server delivers them immediately. - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - serverOutput->onNext(Payload(originalPayload->clone())); - })); - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s) - // Client receives the first payload and requests one. - .WillOnce(Invoke([&](Payload&) { clientInputSub->request(1); })); - // Client receives the second payload. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))).InSequence(s); - // Server now requests two payloads. - EXPECT_CALL(*serverOutputSub, request_(1)) - .InSequence(s) - .WillOnce(Invoke([&](size_t) { serverInputSub->request(2); })); - EXPECT_CALL(*clientOutputSub, request_(2)) - .InSequence(s) - // Client responds with the first one. - .WillOnce(Invoke([&](size_t) { - clientOutput->onNext(Payload(originalPayload->clone())); - })); - EXPECT_CALL(*serverInput, onNext_(Equals(&originalPayload))) - .InSequence(s) - // Server sends one in return. - .WillOnce( - Invoke([&](Payload& p) { serverOutput->onNext(std::move(p)); })); - // Client sends the second one. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s) - .WillOnce( - Invoke([&](Payload& p) { clientOutput->onNext(std::move(p)); })); - Sequence s0, s1, s2, s3; - EXPECT_CALL(*serverInput, onNext_(Equals(&originalPayload))) - .InSequence(s, s0, s1, s2, s3) - // Server closes the channel in response. - .WillOnce(Invoke([&](Payload&) { - serverOutput->onComplete(); - serverInputSub->cancel(); - })); - EXPECT_CALL(*serverOutputSub, cancel_()).InSequence(s0); - EXPECT_CALL(*serverInput, onComplete_()).InSequence(s1); - EXPECT_CALL(*clientInput, onComplete_()) - .InSequence(s2) - .WillOnce(Invoke([&]() { clientInputSub->cancel(); })); - EXPECT_CALL(*clientOutputSub, cancel_()) - .InSequence(s3) - .WillOnce(Invoke([&]() { clientOutput->onComplete(); })); - - // Kick off the magic. - clientOutput = clientSock->requestChannel(clientInput); - clientOutput->onSubscribe(clientOutputSub); -} - -TEST(ReactiveSocketTest, RequestStreamComplete) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto clientInput = - make_ref>>(); - auto serverOutputSub = - make_ref>(); - yarpl::Reference clientInputSub; - yarpl::Reference> serverOutput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client creates a stream - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .InSequence(s) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request two payloads immediately. - clientInputSub->request(2); - })); - // The request reaches the other end and triggers new responder to be set up. - EXPECT_CALL( - serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) - .InSequence(s) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(*serverOutputSub, request_(2)) - .InSequence(s) - // The server delivers them immediately. - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - serverOutput->onNext(Payload(originalPayload->clone())); - })); - // Client receives the first payload. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))).InSequence(s); - // Client receives the second payload and requests one more. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s) - .WillOnce(Invoke([&](Payload&) { clientInputSub->request(1); })); - // Server now sends one more payload with the complete bit set. - EXPECT_CALL(*serverOutputSub, request_(1)) - .InSequence(s) - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - })); - // Client receives the third (and last) payload - Sequence s0, s1; - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s, s0, s1) - // Server closes the subscription by calling onComplete() in response - // to sending the final item - .WillOnce(Invoke([&](Payload&) { - EXPECT_CALL(*serverOutputSub, cancel_()).InSequence(s0); - serverOutput->onComplete(); - })); - EXPECT_CALL(*clientInput, onComplete_()) - .InSequence(s1) - .WillOnce(Invoke([&]() { clientInputSub->cancel(); })); - - // Kick off the magic. - clientSock->requestStream(Payload(originalPayload->clone()), clientInput); -} - -TEST(ReactiveSocketTest, RequestStreamCancel) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto clientInput = - make_ref>>(); - auto serverOutputSub = - make_ref>(); - yarpl::Reference clientInputSub; - yarpl::Reference> serverOutput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client creates a stream - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .InSequence(s) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request two payloads immediately. - clientInputSub->request(2); - })); - // The request reaches the other end and triggers new responder to be set up. - EXPECT_CALL( - serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) - .InSequence(s) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(*serverOutputSub, request_(2)) - .InSequence(s) - // The server delivers them immediately. - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - serverOutput->onNext(Payload(originalPayload->clone())); - })); - // Client receives the first payload. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))).InSequence(s); - // Client receives the second payload and requests one more. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s) - .WillOnce(Invoke([&](Payload&) { clientInputSub->request(1); })); - // Server now sends one more payload. - EXPECT_CALL(*serverOutputSub, request_(1)) - .InSequence(s) - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - })); - // Client receives the third (and last) payload - Sequence s0, s1; - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s, s0, s1) - // Client closes the subscription in response. - .WillOnce(Invoke([&](Payload&) { clientInputSub->cancel(); })); - EXPECT_CALL(*serverOutputSub, cancel_()) - .InSequence(s0) - .WillOnce(Invoke([&]() { serverOutput->onComplete(); })); - EXPECT_CALL(*clientInput, onComplete_()).InSequence(s1); - - // Kick off the magic. - clientSock->requestStream(Payload(originalPayload->clone()), clientInput); -} - -TEST(ReactiveSocketTest, RequestStream) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto clientInput = - make_ref>>(); - auto serverOutputSub = - make_ref>(); - yarpl::Reference clientInputSub; - yarpl::Reference> serverOutput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client creates a subscription. - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .InSequence(s) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request two payloads immediately. - clientInputSub->request(2); - })); - // The request reaches the other end and triggers new responder to be set up. - EXPECT_CALL( - serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) - .InSequence(s) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(*serverOutputSub, request_(2)) - .InSequence(s) - // The server delivers them immediately. - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - serverOutput->onNext(Payload(originalPayload->clone())); - })); - // Client receives the first payload. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))).InSequence(s); - // Client receives the second payload and requests one more. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s) - .WillOnce(Invoke([&](Payload&) { clientInputSub->request(1); })); - // Server now sends one more payload. - EXPECT_CALL(*serverOutputSub, request_(1)) - .InSequence(s) - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - })); - // Client receives the third (and last) payload. - Sequence s0, s1; - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s, s0, s1) - // Client closes the subscription in response. - .WillOnce(Invoke([&](Payload&) { clientInputSub->cancel(); })); - EXPECT_CALL(*serverOutputSub, cancel_()) - .InSequence(s0) - .WillOnce(Invoke([&]() { serverOutput->onComplete(); })); - EXPECT_CALL(*clientInput, onComplete_()).InSequence(s1); - - // Kick off the magic. - clientSock->requestStream(Payload(originalPayload->clone()), clientInput); -} - -TEST(ReactiveSocketTest, RequestStreamSendsOneRequest) { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - - clientConn->connectTo(*serverConn); - - auto testInputSubscription = std::make_shared(); - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - - serverConn->setInput(testOutputSubscriber); - auto sub = serverConn->getOutput(); - sub->onSubscribe(testInputSubscription); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - EXPECT_CALL(*requestHandler, socketOnDisconnected(_)).Times(1); - - auto socket = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - std::move(requestHandler), - SetupParameters()); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - auto responseSubscriber = - make_ref>(); - yarpl::Reference clientInputSub; - EXPECT_CALL(*responseSubscriber, onSubscribe_(_)) - .Times(1) - .WillOnce(Invoke( - [&](yarpl::Reference subscription) { - clientInputSub = subscription; - })); - EXPECT_CALL(*testOutputSubscriber, onNext_(_)).Times(0); - - socket->requestStream(Payload(originalPayload->clone()), responseSubscriber); - - EXPECT_CALL(*testOutputSubscriber, onNext_(_)) - .Times(1) - .WillOnce(Invoke([&](std::unique_ptr& frame) { - auto frameSerializer = FrameSerializer::createCurrentVersion(); - auto frameType = frameSerializer->peekFrameType(*frame); - Frame_REQUEST_STREAM request; - ASSERT_EQ(FrameType::REQUEST_STREAM, frameType); - ASSERT_TRUE( - frameSerializer->deserializeFrom(request, std::move(frame))); - ASSERT_EQ("foo", request.payload_.moveDataToString()); - ASSERT_EQ((uint32_t)7, request.requestN_); - })); - - clientInputSub->request(7); - - socket->disconnect(); - socket->close(); - sub->onComplete(); -} - -TEST(ReactiveSocketTest, RequestStreamSurplusResponse) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto clientInput = - make_ref>>(); - auto serverOutputSub = - make_ref>(); - yarpl::Reference clientInputSub; - yarpl::Reference> serverOutput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client creates a subscription. - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .InSequence(s) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request one payload immediately. - clientInputSub->request(1); - })); - // The request reaches the other end and triggers new responder to be set up. - EXPECT_CALL( - serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) - .InSequence(s) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - const yarpl::Reference>& - response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(*serverOutputSub, request_(1)) - .InSequence(s) - // The server delivers immediately, but an extra one. - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - serverOutput->onNext(Payload(originalPayload->clone())); - })); - // Client receives the first payload. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))).InSequence(s); - // Client receives error instead of the second payload. - EXPECT_CALL(*clientInput, onError_(_)).Times(1).InSequence(s); - EXPECT_CALL(*clientInput, onComplete_()).Times(0); - // // Client closes the subscription in response. - EXPECT_CALL(*serverOutputSub, cancel_()) - .InSequence(s) - .WillOnce(Invoke([&]() { serverOutput->onComplete(); })); - - // Kick off the magic. - clientSock->requestStream(Payload(originalPayload->clone()), clientInput); -} - -TEST(ReactiveSocketTest, RequestResponse) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto clientInput = - make_ref>>(); - auto serverOutputSub = - make_ref>(); - yarpl::Reference clientInputSub; - yarpl::Reference> serverOutput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler)); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client creates a subscription. - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .InSequence(s) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - // Request payload immediately. - clientInputSub->request(1); - })); - - // The request reaches the other end and triggers new responder to be set up. - EXPECT_CALL( - serverHandlerRef, handleRequestResponse_(Equals(&originalPayload), _, _)) - .InSequence(s) - .WillOnce(Invoke( - [&](Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - - EXPECT_CALL(*serverOutputSub, request_(_)) - .InSequence(s) - // The server deliver the response immediately. - .WillOnce(Invoke([&](size_t) { - serverOutput->onNext(Payload(originalPayload->clone())); - })); - - // Client receives the only payload and closes the subscription in response. - EXPECT_CALL(*clientInput, onNext_(Equals(&originalPayload))) - .InSequence(s) - .WillOnce(Invoke([&](Payload&) { clientInputSub->cancel(); })); - // Client also receives onComplete() call since the response frame received - // had COMPELTE flag set - EXPECT_CALL(*clientInput, onComplete_()).InSequence(s); - - EXPECT_CALL(*serverOutputSub, cancel_()) - .WillOnce(Invoke([&]() { serverOutput->onComplete(); })); - - // Kick off the magic. - clientSock->requestResponse(Payload(originalPayload->clone()), clientInput); -} - -TEST(ReactiveSocketTest, RequestResponseSendsOneRequest) { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - - clientConn->connectTo(*serverConn); - - auto testInputSubscription = std::make_shared(); - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - - serverConn->setInput(testOutputSubscriber); - auto sub = serverConn->getOutput(); - sub->onSubscribe(testInputSubscription); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - EXPECT_CALL(*requestHandler, socketOnDisconnected(_)).Times(1); - - auto socket = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - std::move(requestHandler), - SetupParameters()); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - auto responseSubscriber = - make_ref>(); - yarpl::Reference clientInputSub; - EXPECT_CALL(*responseSubscriber, onSubscribe_(_)) - .Times(1) - .WillOnce(Invoke( - [&](yarpl::Reference subscription) { - clientInputSub = subscription; - })); - EXPECT_CALL(*testOutputSubscriber, onNext_(_)).Times(0); - - socket->requestResponse( - Payload(originalPayload->clone()), responseSubscriber); - - EXPECT_CALL(*testOutputSubscriber, onNext_(_)) - .Times(1) - .WillOnce(Invoke([&](std::unique_ptr& frame) { - auto frameSerializer = FrameSerializer::createCurrentVersion(); - auto frameType = frameSerializer->peekFrameType(*frame); - Frame_REQUEST_RESPONSE request; - ASSERT_EQ(FrameType::REQUEST_RESPONSE, frameType); - ASSERT_TRUE( - frameSerializer->deserializeFrom(request, std::move(frame))); - ASSERT_EQ("foo", request.payload_.moveDataToString()); - })); - - clientInputSub->request(7); - - socket->disconnect(); - socket->close(); - sub->onComplete(); -} - -TEST(ReactiveSocketTest, RequestFireAndForget) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - StrictMock> clientInput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client sends a fire-and-forget - EXPECT_CALL( - serverHandlerRef, - handleFireAndForgetRequest_(Equals(&originalPayload), _)) - .InSequence(s); - - clientSock->requestFireAndForget(Payload(originalPayload->clone())); -} - -TEST(ReactiveSocketTest, RequestMetadataPush) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - StrictMock> clientInput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Client sends a fire-and-forget - EXPECT_CALL(serverHandlerRef, handleMetadataPush_(Equals2(&originalPayload))) - .InSequence(s); - - clientSock->metadataPush(originalPayload->clone()); -} - -TEST(ReactiveSocketTest, SetupData) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - StrictMock> clientInput; - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("text/plain", "text/plain", Payload("meta", "data"))); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); -} - -TEST(ReactiveSocketTest, SetupWithKeepaliveAndStats) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - StrictMock> clientInput; - auto clientStats = std::make_shared>(); - ; - std::unique_ptr clientKeepalive = - std::make_unique(); - - EXPECT_CALL(*clientKeepalive, keepaliveTime()) - .WillRepeatedly(Return(std::chrono::milliseconds(10))); - EXPECT_CALL(*clientKeepalive, start(_)).InSequence(s); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - EXPECT_CALL(*clientKeepalive, stop()).InSequence(s); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("text/plain", "text/plain", Payload("meta", "data")), - clientStats, - std::move(clientKeepalive)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); -} - -TEST(ReactiveSocketTest, GoodKeepalive) { - // When a socket is closed with an error (e.g., no response to keepalive) - // ensure that clients can reset their pointers and rsocket can finish - // cleanups and exit - folly::Baton<> baton; - auto th = std::make_unique(); - - auto serverConn = std::make_unique(); - std::unique_ptr clientSock; - auto keepalive_time = 10; - - th->getEventBase()->runInEventBaseThreadAndWait([&]() { - auto clientConn = std::make_unique(); - clientConn->connectTo(*serverConn); - auto clientStats = std::make_shared>(); - - auto clientKeepalive = std::make_unique( - *th->getEventBase(), std::chrono::milliseconds(keepalive_time)); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - clientSock = ReactiveSocket::fromClientConnection( - *th->getEventBase(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any - // requests. - std::move(requestHandler), - SetupParameters("text/plain", "text/plain", Payload("meta", "data")), - clientStats, - std::move(clientKeepalive)); - - clientSock->onClosed([&](const folly::exception_wrapper& ex) { - // socket is closed, time to cleanup - clientSock.reset(); - baton.post(); - }); - - }); - // wait for keepalive failure to happen - baton.wait(); - ASSERT_EQ(nullptr, clientSock); -} - -TEST(ReactiveSocketTest, DISABLED_Destructor) { - // InlineConnection forwards appropriate calls in-line, hence the order of - // mock calls will be deterministic. - Sequence s; - - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - // TODO: since we don't assert anything, should we just use the StatsPrinter - // instead? - auto clientStats = std::make_shared>(); - auto serverStats = std::make_shared>(); - std::array< - yarpl::Reference>>, - 2> - clientInputs; - clientInputs[0] = - make_ref>>(); - clientInputs[1] = - make_ref>>(); - - std::array>, 2> - serverOutputSubs; - serverOutputSubs[0] = - make_ref>(); - serverOutputSubs[1] = - make_ref>(); - - std::array, 2> - clientInputSubs; - std::array>, 2> - serverOutputs; - - EXPECT_CALL(*clientStats, socketCreated()).Times(1); - EXPECT_CALL(*serverStats, socketCreated()).Times(1); - EXPECT_CALL(*clientStats, socketClosed(_)).Times(1); - EXPECT_CALL(*serverStats, socketClosed(_)).Times(1); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload()), - clientStats); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .InSequence(s) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), - std::move(serverConn), - std::move(serverHandler), - serverStats); - - const auto originalPayload = folly::IOBuf::copyBuffer("foo"); - - // Two independent subscriptions. - for (size_t i = 0; i < 2; ++i) { - // Client creates a subscription. - EXPECT_CALL(*clientInputs[i], onSubscribe_(_)) - .InSequence(s) - .WillOnce(Invoke([i, &clientInputSubs]( - yarpl::Reference sub) { - clientInputSubs[i] = sub; - // Request two payloads immediately. - sub->request(2); - })); - // The request reaches the other end and triggers new responder to be set - // up. - EXPECT_CALL( - serverHandlerRef, handleRequestStream_(Equals(&originalPayload), _, _)) - .InSequence(s) - .WillOnce(Invoke([i, &serverOutputs, &serverOutputSubs]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutputs[i] = response; - serverOutputs[i]->onSubscribe(serverOutputSubs[i]); - })); - Sequence s0, s1; - EXPECT_CALL(*serverOutputSubs[i], request_(2)) - .InSequence(s, s0, s1) - .WillOnce(Invoke([i, &serverSock](size_t) { - if (i == 1) { - // The second subscription tears down server-side instance of - // ReactiveSocket immediately upon receiving request(n) signal. - serverSock.reset(); - } - })); - // Subscriptions will be terminated by ReactiveSocket implementation. - EXPECT_CALL(*serverOutputSubs[i], cancel_()) - .InSequence(s0) - .WillOnce( - Invoke([i, &serverOutputs]() { serverOutputs[i]->onComplete(); })); - EXPECT_CALL(*clientInputs[i], onError_(_)) - .InSequence(s1) - .WillOnce(Invoke([i, &clientInputSubs](const std::exception_ptr& ex) { - LOG(INFO) << folly::exceptionStr(ex); - })); - } - - // Kick off the magic. - for (size_t i = 0; i < 2; ++i) { - clientSock->requestStream( - Payload(originalPayload->clone()), clientInputs[i]); - } - - // clientSock.reset(nullptr); - // serverSock.reset(nullptr); -} - -TEST(ReactiveSocketTest, ReactiveSocketOverInlineConnection) { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - // we don't expect any call other than setup payload - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .WillRepeatedly(Return(nullptr)); - - auto serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); -} - -TEST(ReactiveSocketTest, CloseWithError) { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - // We don't expect any call other than setup payload. - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - const folly::StringPiece errString{"Hahaha"}; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .WillRepeatedly(Invoke([&](auto&) { - // TODO this has become somewhat odd ... - // it used to receive ReactiveSocket in the callback - // but no longer does as part of the refactor away from - // using ReactiveSocket.h - // so to make this test pass for now it uses the clientSock - // reference it creates outside of this callback - clientSock->closeConnectionError(errString.str()); - return nullptr; - })); - - auto serverSock = ReactiveSocket::disconnectedServer( - defaultExecutor(), std::move(serverHandler)); - - serverSock->onClosed([&](auto const& exn) { - EXPECT_TRUE( - folly::StringPiece{exn.what().toStdString()}.contains(errString)); - }); - - serverSock->serverConnect( - std::make_shared(std::move(serverConn)), - RSocketParameters(false, FrameSerializer::getCurrentProtocolVersion())); -} - -class ReactiveSocketIgnoreRequestTest : public testing::Test { - public: - ReactiveSocketIgnoreRequestTest() { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any - // requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), - std::move(serverConn), - std::make_unique()); - - // Client request. - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(2); - })); - - // - // server RequestHandler is ignoring the request, we expect terminating - // response - // - - EXPECT_CALL(*clientInput, onNext_(_)).Times(0); - EXPECT_CALL(*clientInput, onComplete_()).Times(0); - EXPECT_CALL(*clientInput, onError_(_)) - .WillOnce(Invoke([&](const std::exception_ptr& ex) { - LOG(INFO) << "expected error: " << folly::exceptionStr(ex); - clientInputSub->cancel(); - clientInputSub = nullptr; - })); - } - - static Payload testPayload() { - return Payload("foo"); - } - - std::unique_ptr clientSock; - std::unique_ptr serverSock; - - yarpl::Reference>> - clientInput{ - make_ref>>()}; - yarpl::Reference clientInputSub; -}; - -TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestResponse) { - clientSock->requestResponse(testPayload(), clientInput); -} - -TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestStream) { - clientSock->requestStream(testPayload(), clientInput); -} - -TEST_F(ReactiveSocketIgnoreRequestTest, IgnoreRequestChannel) { - auto clientOutput = clientSock->requestChannel(clientInput); - - auto clientOutputSub = - make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)) - .WillOnce(Invoke( - [clientOutput](size_t) { clientOutput->onNext(testPayload()); })); - EXPECT_CALL(*clientOutputSub, cancel_()) - .WillOnce(Invoke([clientOutput]() { clientOutput->onComplete(); })); - - clientOutput->onSubscribe(clientOutputSub); -} - -class ReactiveSocketOnErrorOnShutdownTest : public testing::Test { - public: - ReactiveSocketOnErrorOnShutdownTest() { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any - // requests. - std::move(requestHandler), - SetupParameters("", "", Payload())); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .WillRepeatedly(Return(nullptr)); - - serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(2); - })); - - EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - serverSock.reset(); // should close everything, but streams should end - // with onError - })); - EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - serverSock.reset(); // should close everything, but streams should end - // with onError - })); - EXPECT_CALL(serverHandlerRef, handleRequestChannel_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - - EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke( - [&](yarpl::Reference sub) { - serverInputSub = sub; - sub->request(2); - })); - EXPECT_CALL(*serverInput, onComplete_()).Times(1); - - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - serverSock.reset(); // should close everything, but streams should end - // with onError - - return serverInput; - })); - - EXPECT_CALL(*clientInput, onNext_(_)).Times(0); - EXPECT_CALL(*clientInput, onComplete_()).Times(0); - - EXPECT_CALL(*serverOutputSub, cancel_()) - .WillOnce(Invoke([&]() { - serverOutput->onComplete(); - serverOutput = nullptr; - })); - - EXPECT_CALL(*clientInput, onError_(_)) - .WillOnce(Invoke([&](const std::exception_ptr) { - clientInputSub->cancel(); - clientInputSub = nullptr; - })); - } - - std::unique_ptr clientSock; - std::unique_ptr serverSock; - - const std::unique_ptr originalPayload{ - folly::IOBuf::copyBuffer("foo")}; - - yarpl::Reference>> - clientInput{ - make_ref>>()}; - yarpl::Reference clientInputSub; - - yarpl::Reference> serverOutput; - yarpl::Reference> - serverOutputSub{ - make_ref>()}; - - yarpl::Reference>> - serverInput{ - make_ref>>()}; - yarpl::Reference serverInputSub; -}; - -TEST_F(ReactiveSocketOnErrorOnShutdownTest, DISABLED_RequestResponse) { - clientSock->requestResponse(Payload(originalPayload->clone()), clientInput); -} - -TEST_F(ReactiveSocketOnErrorOnShutdownTest, DISABLED_RequestStream) { - clientSock->requestStream(Payload(originalPayload->clone()), clientInput); -} - -TEST_F(ReactiveSocketOnErrorOnShutdownTest, DISABLED_RequestChannel) { - auto clientOutput = clientSock->requestChannel(clientInput); - - auto clientOutputSub = - make_ref>(); - EXPECT_CALL(*clientOutputSub, request_(1)) - .WillOnce(Invoke([&](size_t) { - // this will initiate the interaction - clientOutput->onNext(Payload(originalPayload->clone())); - })); - EXPECT_CALL(*clientOutputSub, cancel_()) - .WillOnce(Invoke([&]() { - clientOutput->onComplete(); - clientOutput = nullptr; - })); - - clientOutput->onSubscribe(clientOutputSub); -} - -using IOBufPtr = std::unique_ptr; - -class MockDuplexConnection : public DuplexConnection { - public: - MOCK_METHOD1(setInput, void(std::shared_ptr>)); - MOCK_METHOD0(getOutput, std::shared_ptr>()); -}; - -class ReactiveSocketRegressionTest : public Test { - private: - std::unique_ptr> requestHandlerPtr_; - - protected: - ReactiveSocketRegressionTest() - : requestHandlerPtr_(std::make_unique>()), - requestHandler_(*requestHandlerPtr_) { - auto connectionPtr = std::make_unique(); - auto& connection = *connectionPtr; - EXPECT_CALL(connection, setInput(_)).WillOnce(SaveArg<0>(&input_)); - EXPECT_CALL(connection, getOutput()) - .WillOnce(Return(std::make_shared>())); - - EXPECT_CALL(requestHandler_, handleSetupPayload_(_)) - .WillRepeatedly(Return(nullptr)); - - EXPECT_CALL(requestHandler_, socketOnConnected()).Times(1); - EXPECT_CALL(requestHandler_, socketOnClosed(_)).Times(1); - - socket_ = ReactiveSocket::fromServerConnection( - defaultExecutor(), - std::move(connectionPtr), - std::move(requestHandlerPtr_), - RSocketStats::noop(), - RSocketParameters(false, FrameSerializer::getCurrentProtocolVersion())); - } - - MockRequestHandler& requestHandler_; - std::shared_ptr> input_; - std::unique_ptr socket_; -}; - -TEST_F(ReactiveSocketRegressionTest, NoCrashOnUnknownStream) { - input_->onNext(folly::IOBuf::copyBuffer( - "\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00"s)); -} - -TEST_F(ReactiveSocketRegressionTest, MetadataFrameWithoutMetadataFlag) { - // This is to make the expectation explicit. Technically it is not necessary - // because requestHandler_ is a strict mock. - EXPECT_CALL(requestHandler_, handleMetadataPush_(_)).Times(0); - input_->onNext(folly::IOBuf::copyBuffer( - "\x00\x0d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"s)); -} - -class ReactiveSocketEmptyPayloadTest : public testing::Test { - public: - ReactiveSocketEmptyPayloadTest() { - auto clientConn = std::make_unique(); - auto serverConn = std::make_unique(); - clientConn->connectTo(*serverConn); - - auto connectionSetup = SetupParameters("", "", Payload()); - connectionSetup.protocolVersion = ProtocolVersion(1, 0); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - clientSock = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(clientConn), - // No interactions on this mock, the client will not accept any - // requests. - std::move(requestHandler), - std::move(connectionSetup)); - - auto serverHandler = std::make_unique>(); - EXPECT_CALL(*serverHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*serverHandler, socketOnClosed(_)).Times(1); - auto& serverHandlerRef = *serverHandler; - - EXPECT_CALL(serverHandlerRef, handleSetupPayload_(_)) - .WillRepeatedly(Return(nullptr)); - - serverSock = ReactiveSocket::fromServerConnection( - defaultExecutor(), std::move(serverConn), std::move(serverHandler)); - - EXPECT_CALL(*clientInput, onSubscribe_(_)) - .WillOnce( - Invoke([&](yarpl::Reference sub) { - clientInputSub = sub; - sub->request(2); - })); - - EXPECT_CALL(serverHandlerRef, handleRequestResponse_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - CHECK(!request) << "incoming request is expected to be empty"; - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(serverHandlerRef, handleRequestStream_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - CHECK(!request) << "incoming request is expected to be empty"; - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - })); - EXPECT_CALL(serverHandlerRef, handleRequestChannel_(_, _, _)) - .Times(AtMost(1)) - .WillOnce(Invoke([&]( - Payload& request, - StreamId streamId, - yarpl::Reference> response) { - CHECK(!request) << "incoming request is expected to be empty"; - - EXPECT_CALL(*serverInput, onSubscribe_(_)) - .WillOnce(Invoke( - [&](yarpl::Reference sub) { - serverInputSub = sub; - sub->request(2); - })); - - EXPECT_CALL(*serverInput, onComplete_()).Times(1); - EXPECT_CALL(*serverInput, onError_(_)) - .Times(1) - .WillOnce(Invoke([&](std::exception_ptr ex) { - LOG(ERROR) << folly::exceptionStr(ex); - })); - - serverOutput = response; - serverOutput->onSubscribe(serverOutputSub); - - return serverInput; - })); - - EXPECT_CALL(*clientInput, onComplete_()).Times(1); - EXPECT_CALL(*clientInput, onError_(_)) - .Times(1) - .WillOnce(Invoke([&](std::exception_ptr ex) { - LOG(ERROR) << folly::exceptionStr(ex); - })); - - EXPECT_CALL(*serverOutputSub, request_(_)) - .WillOnce(Invoke([&](size_t n) { - CHECK_GT(n, 0); - EXPECT_CALL(*clientInput, onNext_(_)) - .Times(n) - .WillRepeatedly(Invoke([&](Payload& p) { CHECK(!p); })); - while (n--) { - serverOutput->onNext(Payload()); - } - serverOutput->onComplete(); - serverOutput = nullptr; - })); - } - - std::unique_ptr clientSock; - std::unique_ptr serverSock; - - yarpl::Reference>> - clientInput{ - make_ref>>()}; - yarpl::Reference clientInputSub; - - yarpl::Reference> serverOutput; - yarpl::Reference> serverOutputSub{ - make_ref>()}; - - yarpl::Reference>> - serverInput{ - make_ref>>()}; - yarpl::Reference serverInputSub; -}; - -TEST_F(ReactiveSocketEmptyPayloadTest, DISABLED_RequestResponse) { - clientSock->requestResponse(Payload(), clientInput); -} - -TEST_F(ReactiveSocketEmptyPayloadTest, DISABLED_RequestStream) { - clientSock->requestStream(Payload(), clientInput); -} - -TEST_F(ReactiveSocketEmptyPayloadTest, DISABLED_RequestChannel) { - auto clientOutput = clientSock->requestChannel(clientInput); - auto clientOutputSub = - make_ref>(); - - int send = 3; - EXPECT_CALL(*clientOutputSub, request_(_)) - .WillRepeatedly(Invoke([&](size_t n) { - CHECK(n >= 1); - while (n > 0 && send > 0) { - clientOutput->onNext(Payload()); - --n; - --send; - } - - if (!send) { - clientOutput->onComplete(); - } - })); - clientOutput->onSubscribe(clientOutputSub); -} diff --git a/test/deprecated/SubscriberBaseTest.cpp b/test/deprecated/SubscriberBaseTest.cpp deleted file mode 100644 index ca1d52e0d..000000000 --- a/test/deprecated/SubscriberBaseTest.cpp +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include "src/temporary_home/SubscriberBase.h" -#include "test/streams/Mocks.h" - -using namespace ::testing; -using namespace ::rsocket; - -class SubscriberBaseMock : public SubscriberBaseT { - public: - SubscriberBaseMock() : ExecutorBase(defaultExecutor()) {} - explicit SubscriberBaseMock(folly::Executor& executor) - : ExecutorBase(executor) {} - - MOCK_METHOD1( - onSubscribeImpl_, - void(std::shared_ptr subscription)); - MOCK_METHOD1(onNextImpl_, void(int value)); - MOCK_METHOD0(onCompleteImpl_, void()); - MOCK_METHOD1_T(onErrorImpl_, void(folly::exception_wrapper ex)); - - private: - void onSubscribeImpl( - std::shared_ptr subscription) noexcept override final { - onSubscribeImpl_(subscription); - } - - void onNextImpl(int value) noexcept override final { - onNextImpl_(value); - } - - void onCompleteImpl() noexcept override final { - onCompleteImpl_(); - } - - void onErrorImpl(folly::exception_wrapper ex) noexcept override final { - onErrorImpl_(std::move(ex)); - } -}; - -TEST(SubscriberBaseTest, NoSignalAfterCancel) { - auto subscriber = std::make_shared(); - - std::shared_ptr outSubscription; - EXPECT_CALL(*subscriber, onSubscribeImpl_(_)) - .WillOnce(Invoke([&](std::shared_ptr s) { - outSubscription = s; - s->cancel(); - })); - - EXPECT_CALL(*subscriber, onNextImpl_(_)).Times(0); - EXPECT_CALL(*subscriber, onCompleteImpl_()).Times(0); - EXPECT_CALL(*subscriber, onErrorImpl_(_)).Times(0); - - auto subscription = std::make_shared(); - std::shared_ptr> ptr = subscriber; - ptr->onSubscribe(subscription); - - ptr->onNext(1); - ptr->onNext(2); - ptr->onNext(3); - ptr->onComplete(); - ptr->onError(std::runtime_error("error")); -} - -TEST(SubscriberBaseTest, OnNextDelivered) { - folly::ScopedEventBaseThread thread2; - std::atomic done{false}; - - auto subscriber = - std::make_shared(*thread2.getEventBase()); - - std::shared_ptr outSubscription; - EXPECT_CALL(*subscriber, onSubscribeImpl_(_)) - .WillOnce(Invoke( - [&](std::shared_ptr s) { outSubscription = s; })); - - EXPECT_CALL(*subscriber, onNextImpl_(_)).Times(3); - EXPECT_CALL(*subscriber, onCompleteImpl_()) - .WillOnce(Invoke([&]() { done = true; })); - EXPECT_CALL(*subscriber, onErrorImpl_(_)).Times(0); - - auto subscription = std::make_shared(); - std::shared_ptr> ptr = subscriber; - ptr->onSubscribe(subscription); - - ptr->onNext(1); - ptr->onNext(2); - ptr->onNext(3); - ptr->onComplete(); - - while (!done) - ; -} - -TEST(SubscriberBaseTest, CancelStopsOnNext) { - folly::ScopedEventBaseThread thread2; - std::atomic done{false}; - - auto subscriber = - std::make_shared(*thread2.getEventBase()); - - std::shared_ptr outSubscription; - EXPECT_CALL(*subscriber, onSubscribeImpl_(_)) - .WillOnce(Invoke( - [&](std::shared_ptr s) { outSubscription = s; })); - - EXPECT_CALL(*subscriber, onNextImpl_(_)) - .WillOnce(Invoke([&](int) {})) - .WillOnce(Invoke([&](int) { - outSubscription->cancel(); - done = true; - })); - EXPECT_CALL(*subscriber, onCompleteImpl_()).Times(0); - EXPECT_CALL(*subscriber, onErrorImpl_(_)).Times(0); - - auto subscription = std::make_shared(); - std::shared_ptr> ptr = subscriber; - ptr->onSubscribe(subscription); - - ptr->onNext(1); - ptr->onNext(2); - ptr->onNext(3); - - while (!done) - ; -} - -TEST(SubscriberBaseTest, SubscriptionRequest) { - auto subscriber = std::make_shared(); - - std::shared_ptr outSubscription; - EXPECT_CALL(*subscriber, onSubscribeImpl_(_)) - .WillOnce( - Invoke([&](std::shared_ptr s) { s->request(0); })); - - auto originalSubscription = std::make_shared>(); - EXPECT_CALL(*originalSubscription, request_(_)).Times(1); - EXPECT_CALL(*originalSubscription, cancel_()).Times(1); - - auto subscription = std::make_shared(); - std::shared_ptr> ptr = subscriber; - ptr->onSubscribe(originalSubscription); - ptr->onComplete(); -} - -TEST(SubscriberBaseTest, SubscriptionCancel) { - auto subscriber = std::make_shared(); - - std::shared_ptr outSubscription; - EXPECT_CALL(*subscriber, onSubscribeImpl_(_)) - .WillOnce(Invoke([&](std::shared_ptr s) { s->cancel(); })); - - auto originalSubscription = std::make_shared>(); - EXPECT_CALL(*originalSubscription, cancel_()).Times(1); - - auto subscription = std::make_shared(); - std::shared_ptr> ptr = subscriber; - ptr->onSubscribe(originalSubscription); -} diff --git a/test/framing/FrameTransportTest.cpp b/test/framing/FrameTransportTest.cpp deleted file mode 100644 index 4df80c67e..000000000 --- a/test/framing/FrameTransportTest.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include "src/framing/FrameTransport.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "test/test_utils/InlineConnection.h" - -using namespace ::testing; -using namespace ::rsocket; - -TEST(FrameTransportTest, OnSubscribeAfterClose) { - class NullSubscription : public rsocket::Subscription { - public: - // Subscription methods - void request(size_t n) noexcept override {} - void cancel() noexcept override {} - }; - - FrameTransport transport(std::make_unique()); - transport.close(std::runtime_error("test_close")); - static_cast>&>(transport) - .onSubscribe(std::make_shared()); - // if we got here, we passed all the checks in the onSubscribe method -} diff --git a/test/framing/FramedReaderTest.cpp b/test/framing/FramedReaderTest.cpp deleted file mode 100644 index bb7e7a66d..000000000 --- a/test/framing/FramedReaderTest.cpp +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include - -#include -#include -#include -#include -#include "src/framing/FrameSerializer.h" -#include "src/framing/FramedDuplexConnection.h" -#include "src/framing/FramedReader.h" -#include "test/deprecated/ReactiveSocket.h" -#include "test/streams/Mocks.h" -#include "test/test_utils/InlineConnection.h" -#include "test/test_utils/MockRequestHandler.h" - -using namespace ::testing; -using namespace ::rsocket; - -TEST(FramedReaderTest, Read1Frame) { - auto frameSubscriber = - std::make_shared>>(); - auto wireSubscription = std::make_shared(); - - std::string msg1("value1value1"); - - auto payload1 = folly::IOBuf::create(0); - folly::io::Appender a1(payload1.get(), 10); - a1.writeBE(msg1.size() + sizeof(int32_t)); - folly::format("{}", msg1.c_str())(a1); - - auto framedReader = std::make_shared( - frameSubscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - - EXPECT_CALL(*frameSubscriber, onSubscribe_(_)).Times(1); - - framedReader->onSubscribe(wireSubscription); - - EXPECT_CALL(*frameSubscriber, onNext_(_)).Times(0); - EXPECT_CALL(*frameSubscriber, onError_(_)).Times(0); - EXPECT_CALL(*frameSubscriber, onComplete_()).Times(0); - - framedReader->onNext(std::move(payload1)); - - EXPECT_CALL(*frameSubscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& p) { - ASSERT_EQ(msg1, p->moveToFbString().toStdString()); - })); - - EXPECT_CALL(*wireSubscription, request_(_)).Times(1); - - frameSubscriber->subscription()->request(3); - - // to delete objects - EXPECT_CALL(*frameSubscriber, onComplete_()).Times(1); - EXPECT_CALL(*wireSubscription, cancel_()).Times(1); - - frameSubscriber->subscription()->cancel(); - framedReader->onComplete(); -} - -TEST(FramedReaderTest, Read3Frames) { - auto frameSubscriber = - std::make_shared>>(); - auto wireSubscription = std::make_shared(); - - std::string msg1("value1value1"); - std::string msg2("value2value2"); - std::string msg3("value3value3"); - - auto payload1 = folly::IOBuf::create(0); - folly::io::Appender a1(payload1.get(), 10); - a1.writeBE(msg1.size() + sizeof(int32_t)); - folly::format("{}", msg1.c_str())(a1); - a1.writeBE(msg2.size() + sizeof(int32_t)); - folly::format("{}", msg2.c_str())(a1); - - auto payload2 = folly::IOBuf::create(0); - folly::io::Appender a2(payload2.get(), 10); - a2.writeBE(msg3.size() + sizeof(int32_t)); - folly::format("{}", msg3.c_str())(a2); - - folly::IOBufQueue bufQueue; - bufQueue.append(std::move(payload1)); - bufQueue.append(std::move(payload2)); - - auto framedReader = std::make_shared( - frameSubscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - - EXPECT_CALL(*frameSubscriber, onSubscribe_(_)).Times(1); - - framedReader->onSubscribe(wireSubscription); - - EXPECT_CALL(*frameSubscriber, onNext_(_)).Times(0); - EXPECT_CALL(*frameSubscriber, onError_(_)).Times(0); - EXPECT_CALL(*frameSubscriber, onComplete_()).Times(0); - - framedReader->onNext(bufQueue.move()); - - EXPECT_CALL(*frameSubscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& p) { - ASSERT_EQ(msg1, p->moveToFbString().toStdString()); - })) - .WillOnce(Invoke([&](std::unique_ptr& p) { - ASSERT_EQ(msg2, p->moveToFbString().toStdString()); - })) - .WillOnce(Invoke([&](std::unique_ptr& p) { - ASSERT_EQ(msg3, p->moveToFbString().toStdString()); - })); - - frameSubscriber->subscription()->request(3); - - // to delete objects - EXPECT_CALL(*frameSubscriber, onComplete_()).Times(1); - EXPECT_CALL(*wireSubscription, cancel_()).Times(1); - - frameSubscriber->subscription()->cancel(); - framedReader->onComplete(); -} - -TEST(FramedReaderTest, Read1FrameIncomplete) { - auto frameSubscriber = - std::make_shared>>(); - auto wireSubscription = std::make_shared(); - - std::string part1("val"); - std::string part2("ueXXX"); - std::string msg1 = part1 + part2; - - auto framedReader = std::make_shared( - frameSubscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - framedReader->onSubscribe(wireSubscription); - - EXPECT_CALL(*frameSubscriber, onNext_(_)).Times(0); - EXPECT_CALL(*frameSubscriber, onError_(_)).Times(0); - EXPECT_CALL(*frameSubscriber, onComplete_()).Times(0); - - frameSubscriber->subscription()->request(3); - - auto payload = folly::IOBuf::create(0); - { - folly::io::Appender appender(payload.get(), 10); - appender.writeBE(msg1.size() + sizeof(int32_t)); - } - - framedReader->onNext(std::move(payload)); - - payload = folly::IOBuf::create(0); - { - folly::io::Appender appender(payload.get(), 10); - folly::format("{}", part1.c_str())(appender); - } - - framedReader->onNext(std::move(payload)); - - payload = folly::IOBuf::create(0); - { - folly::io::Appender appender(payload.get(), 10); - folly::format("{}", part2.c_str())(appender); - } - - EXPECT_CALL(*frameSubscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& p) { - ASSERT_EQ(msg1, p->moveToFbString().toStdString()); - })); - - framedReader->onNext(std::move(payload)); - // to delete objects - EXPECT_CALL(*frameSubscriber, onComplete_()).Times(1); - EXPECT_CALL(*wireSubscription, cancel_()).Times(1); - - frameSubscriber->subscription()->cancel(); - framedReader->onComplete(); -} - -TEST(FramedReaderTest, InvalidDataStream) { - auto rsConnection = std::make_unique(); - auto testConnection = std::make_unique(); - - rsConnection->connectTo(*testConnection); - - auto framedRsAutomatonConnection = std::make_unique( - std::move(rsConnection), inlineExecutor()); - - // Dump 1 invalid frame and expect an error - auto inputSubscription = std::make_shared(); - auto sub = testConnection->getOutput(); - EXPECT_CALL(*inputSubscription, request_(_)) - .WillOnce(Invoke([&](auto) { - auto invalidFrameSizePayload = - folly::IOBuf::createCombined(sizeof(int32_t)); - folly::io::Appender appender( - invalidFrameSizePayload.get(), /* do not grow */ 0); - appender.writeBE(1); - sub->onNext(std::move(invalidFrameSizePayload)); - })); - EXPECT_CALL(*inputSubscription, cancel_()) - .WillOnce(Invoke([&sub]() { sub->onComplete(); })); - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - EXPECT_CALL(*testOutputSubscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& p) { - // SETUP frame with leading frame size - })); - - EXPECT_CALL(*testOutputSubscriber, onComplete_()).Times(0); - EXPECT_CALL(*testOutputSubscriber, onError_(_)).Times(1); - - testConnection->setInput(testOutputSubscriber); - sub->onSubscribe(inputSubscription); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto reactiveSocket = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(framedRsAutomatonConnection), - // No interactions on this mock, the client will not accept any - // requests. - std::move(requestHandler), - SetupParameters("", "", Payload("test client payload"))); -} - -// TODO(lehecka): verify FramedReader protocol autodetection mechanism -// with this test -// make sure it will never crash -// -// TEST(FramedReaderTest, ReadEmptyPayload) { -// auto frameSubscriber = std::make_shared< -// NiceMock>>>(); -// -// auto payload = folly::IOBuf::create(0); -// auto frameSize = sizeof(int32_t); -// folly::io::Appender a(payload.get(), frameSize); -// a.writeBE(frameSize); -// -// auto framedReader = std::make_shared( -// frameSubscriber, -// inlineExecutor(), -// std::make_shared( -// FrameSerializer::getCurrentProtocolVersion())); -// -// framedReader->onSubscribe(std::make_shared>()); -// framedReader->onNext(std::move(payload)); -// -// EXPECT_CALL(*frameSubscriber, onNext_(_)) -// .WillOnce(Invoke([&](std::unique_ptr& p) { -// ASSERT_EQ("", p->moveToFbString().toStdString()); -// })); -// EXPECT_CALL(*frameSubscriber, onError_(_)).Times(0); -// -// frameSubscriber->subscription()->request(1); -// framedReader->onComplete(); -// } diff --git a/test/framing/FramedWriterTest.cpp b/test/framing/FramedWriterTest.cpp deleted file mode 100644 index 00bb097b0..000000000 --- a/test/framing/FramedWriterTest.cpp +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include - -#include -#include -#include -#include -#include "src/framing/FrameSerializer.h" -#include "src/framing/FramedWriter.h" -#include "test/streams/Mocks.h" - -using namespace ::testing; -using namespace ::rsocket; - -TEST(FramedWriterTest, Subscribe) { - auto subscriber = - std::make_shared>>(); - auto subscription = std::make_shared(); - - EXPECT_CALL(*subscriber, onSubscribe_(_)).Times(1); - EXPECT_CALL(*subscription, cancel_()).Times(1); - - auto writer = std::make_shared( - subscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - writer->onSubscribe(subscription); - - // to delete objects - subscriber->subscription()->cancel(); - writer->onComplete(); -} - -TEST(FramedWriterTest, Error) { - auto subscriber = - std::make_shared>>(); - auto subscription = std::make_shared(); - - auto writer = std::make_shared( - subscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - - EXPECT_CALL(*subscription, cancel_()).Times(1); - writer->onSubscribe(subscription); - - // calls passed thru - EXPECT_CALL(*subscriber, onError_(_)).Times(1); - writer->onError(std::runtime_error("error1")); - - // subscriber.subscription()->cancel(); -} - -TEST(FramedWriterTest, Complete) { - auto subscriber = - std::make_shared>>(); - auto subscription = std::make_shared(); - - auto writer = std::make_shared( - subscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - - EXPECT_CALL(*subscription, cancel_()).Times(1); - writer->onSubscribe(subscription); - - // calls passed thru - EXPECT_CALL(*subscriber, onComplete_()).Times(1); - writer->onComplete(); - - // subscriber.subscription()->cancel(); -} - -static void nextSingleFrameTest(int headroom) { - auto subscriber = - std::make_shared>>(); - auto subscription = std::make_shared(); - - EXPECT_CALL(*subscriber, onError_(_)).Times(0); - EXPECT_CALL(*subscriber, onComplete_()).Times(0); - EXPECT_CALL(*subscription, cancel_()).Times(0); - - std::string msg("hello"); - - EXPECT_CALL(*subscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& p) { - ASSERT_EQ( - folly::to( - '\0', '\0', '\0', char(msg.size() + sizeof(int32_t)), msg), - p->moveToFbString().toStdString()); - })); - - auto writer = std::make_shared( - subscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - writer->onSubscribe(subscription); - writer->onNext(folly::IOBuf::copyBuffer(msg, headroom)); - - // to delete objects - EXPECT_CALL(*subscriber, onComplete_()).Times(1); - EXPECT_CALL(*subscription, cancel_()).Times(1); - - // TODO: cancel should be called automatically - subscriber->subscription()->cancel(); - writer->onComplete(); -} - -TEST(FramedWriterTest, NextSingleFrameNoHeadroom) { - nextSingleFrameTest(0); -} - -TEST(FramedWriterTest, NextSingleFrameWithHeadroom) { - nextSingleFrameTest(sizeof(int32_t)); -} - -static void nextTwoFramesTest(int headroom) { - auto subscriber = - std::make_shared>>(); - auto subscription = std::make_shared(); - - EXPECT_CALL(*subscriber, onError_(_)).Times(0); - EXPECT_CALL(*subscriber, onComplete_()).Times(0); - EXPECT_CALL(*subscription, cancel_()).Times(0); - - std::string msg1("hello"); - std::string msg2("world"); - - std::unique_ptr payloadChain; - - EXPECT_CALL(*subscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& p) { - EXPECT_EQ(payloadChain, nullptr); - payloadChain = std::move(p); - })) - .WillOnce(Invoke([&](std::unique_ptr& p) { - payloadChain->prependChain(std::move(p)); - ASSERT_EQ( - folly::to( - '\0', - '\0', - '\0', - char(msg1.size() + sizeof(int32_t)), - msg1, - '\0', - '\0', - '\0', - char(msg2.size() + sizeof(int32_t)), - msg2), - payloadChain->moveToFbString().toStdString()); - })); - - auto writer = std::make_shared( - subscriber, - inlineExecutor(), - std::make_shared( - FrameSerializer::getCurrentProtocolVersion())); - writer->onSubscribe(subscription); - writer->onNext(folly::IOBuf::copyBuffer(msg1, headroom)); - writer->onNext(folly::IOBuf::copyBuffer(msg2, headroom)); - - // to delete objects - EXPECT_CALL(*subscriber, onComplete_()).Times(1); - EXPECT_CALL(*subscription, cancel_()).Times(1); - - subscriber->subscription()->cancel(); - writer->onComplete(); -} - -TEST(FramedWriterTest, NextTwoFramesNoHeadroom) { - nextTwoFramesTest(0); -} - -TEST(FramedWriterTest, NextTwoFramesWithHeadroom) { - nextTwoFramesTest(sizeof(int32_t)); -} diff --git a/test/integration/ClientUtils.h b/test/integration/ClientUtils.h deleted file mode 100644 index 990a12667..000000000 --- a/test/integration/ClientUtils.h +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include - -#include - -#include "src/framing/FrameTransport.h" -#include "src/framing/FramedDuplexConnection.h" -#include "src/internal/ClientResumeStatusCallback.h" -#include "src/internal/FollyKeepaliveTimer.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "src/transports/tcp/TcpDuplexConnection.h" -#include "test/deprecated/ReactiveSocket.h" - -namespace rsocket { -namespace tests { - -class MyConnectCallback : public folly::AsyncSocket::ConnectCallback { - public: - virtual ~MyConnectCallback() = default; - - void connectSuccess() noexcept override {} - - void connectErr(const folly::AsyncSocketException& ex) noexcept override { - LOG(INFO) << "Connect Error" << ex.what(); - } -}; - -class ResumeCallback : public ClientResumeStatusCallback { - void onResumeOk() noexcept override { - LOG(INFO) << "Resumption Succeeded"; - } - - void onResumeError(folly::exception_wrapper ex) noexcept override { - LOG(INFO) << "Resumption Error: " << ex.what(); - } - - void onConnectionError(folly::exception_wrapper ex) noexcept override { - LOG(INFO) << "Resumption Connection Error: " << ex.what(); - } -}; - -class ClientRequestHandler : public DefaultRequestHandler { - public: - void onSubscriptionPaused( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "Subscription Paused"; - } - - void onSubscriptionResumed( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "Subscription Resumed"; - } - - void onSubscriberPaused( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "Subscriber Paused"; - } - - void onSubscriberResumed( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "Subscriber Resumed"; - } -}; - -class MySubscriber : public yarpl::flowable::Subscriber { - public: - void onSubscribe( - yarpl::Reference sub) noexcept override { - subscription_ = sub; - onSubscribe_(); - } - - void onNext(Payload element) noexcept override { - VLOG(1) << "Receiving " << element; - onNext_(element.moveDataToString()); - } - - MOCK_METHOD0(onSubscribe_, void()); - MOCK_METHOD1(onNext_, void(std::string)); - - void onComplete() noexcept override {} - - void onError(std::exception_ptr ex) noexcept override {} - - // methods for testing - void request(int64_t n) { - subscription_->request(n); - } - - private: - yarpl::Reference subscription_; -}; - -// Utility function to create a FrameTransport. -std::shared_ptr getFrameTransport( - folly::EventBase* eventBase, - folly::AsyncSocket::ConnectCallback* connectCb, - uint32_t port) { - folly::SocketAddress addr; - addr.setFromLocalPort(folly::to(port)); - folly::AsyncSocket::UniquePtr socket(new folly::AsyncSocket(eventBase)); - socket->connect(connectCb, addr); - LOG(INFO) << "Attempting connection to " << addr.describe(); - std::unique_ptr connection = - std::make_unique( - std::move(socket), inlineExecutor(), RSocketStats::noop()); - std::unique_ptr framedConnection = - std::make_unique( - std::move(connection), *eventBase); - return std::make_shared(std::move(framedConnection)); -} - -// Utility function to create a ReactiveSocket. -std::unique_ptr getRSocket(folly::EventBase* eventBase) { - std::unique_ptr rsocket; - std::unique_ptr requestHandler = - std::make_unique(); - rsocket = ReactiveSocket::disconnectedClient( - *eventBase, - std::move(requestHandler), - RSocketStats::noop(), - std::make_unique( - *eventBase, std::chrono::seconds(10))); - rsocket->onConnected([]() { LOG(INFO) << "ClientSocket connected"; }); - rsocket->onDisconnected([](const folly::exception_wrapper& ex) { - LOG(INFO) << "ClientSocket disconnected: " << ex.what(); - }); - rsocket->onClosed([](const folly::exception_wrapper& ex) { - LOG(INFO) << "ClientSocket closed: " << ex.what(); - }); - return rsocket; -} - -// Utility function to create a SetupPayload -SetupParameters getSetupPayload(ResumeIdentificationToken token) { - return SetupParameters( - "text/plain", "text/plain", Payload("meta", "data"), true, token); -} -} -} diff --git a/test/integration/ServerFixture.cpp b/test/integration/ServerFixture.cpp deleted file mode 100644 index eedd03f02..000000000 --- a/test/integration/ServerFixture.cpp +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include "test/integration/ServerFixture.h" -#include -#include -#include - -using namespace ::rsocket; -using namespace yarpl; - -using folly::AsyncServerSocket; -using folly::AsyncSocket; -using folly::EventBase; -using folly::SocketAddress; -using testing::Test; - -DEFINE_int32(port, 0, "Port to listen to"); - -namespace { - -std::vector< - std::pair, ResumeIdentificationToken>> - g_reactiveSockets; - -class ServerSubscription : public yarpl::flowable::Subscription { - public: - explicit ServerSubscription( - yarpl::Reference> requester) - : requester_(std::move(requester)) {} - - void request(int64_t n) noexcept override { - LOG(INFO) << "Received request(" << n << ")"; - for (int64_t i = 0; i < n; i++) { - VLOG(1) << "Sending " << sentCounter_ + 1; - requester_->onNext(Payload(std::to_string(++sentCounter_))); - } - } - - void cancel() noexcept override { - LOG(INFO) << "Received Cancel. NOT IMPLEMENTED"; - } - - private: - size_t sentCounter_{0}; - yarpl::Reference> requester_; -}; - -class ServerRequestHandler : public DefaultRequestHandler { - public: - void handleRequestStream( - Payload request, - StreamId streamId, - const yarpl::Reference>& - requester) noexcept override { - LOG(INFO) << "Received RequestStream"; - requester->onSubscribe(make_ref(requester)); - } - - void handleFireAndForgetRequest( - Payload request, - StreamId streamId) noexcept override { - LOG(INFO) << "Received FireAndForget. NOT IMPLEMENTED"; - } - - void handleMetadataPush( - std::unique_ptr request) noexcept override { - LOG(INFO) << "Received MetadataPush. NOT IMPLEMENTED"; - } - - std::shared_ptr handleSetupPayload( - SetupParameters request) noexcept override { - LOG(INFO) << "Received SetupPayload. NOT IMPLEMENTED"; - return nullptr; - } - - bool handleResume(ResumeParameters) noexcept override { - LOG(INFO) << "Received Resume. NOT IMPLEMENTED"; - return false; - } - - void handleCleanResume(yarpl::Reference - response) noexcept override { - LOG(INFO) << "Received CleanResume. NOT IMPLEMENTED"; - } - - void handleDirtyResume(yarpl::Reference - response) noexcept override { - LOG(INFO) << "Received DirtyResume. NOT IMPLEMENTED"; - } - - void onSubscriptionPaused( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "SubscriptionPaused. NOT IMPLEMENTED"; - } - - void onSubscriptionResumed( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "SubscriptionResumed. NOT IMPLEMENTED"; - } - - void onSubscriberPaused( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "SubscriberPaused. NOT IMPLEMENTED"; - } - - void onSubscriberResumed( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "SubscriberResumed. NOT IMPLEMENTED"; - } -}; - -class MyConnectionHandler : public ConnectionHandler { - public: - MyConnectionHandler(EventBase& eventBase) : eventBase_(eventBase) {} - - void setupNewSocket( - std::shared_ptr frameTransport, - SetupParameters setupPayload) override { - LOG(INFO) << "ServerSocket. SETUP socket from client"; - - std::unique_ptr requestHandler = - std::make_unique(); - std::unique_ptr rs = ReactiveSocket::disconnectedServer( - eventBase_, std::move(requestHandler), RSocketStats::noop()); - - rs->onConnected([]() { LOG(INFO) << "ServerSocket Connected"; }); - rs->onDisconnected([rs = rs.get()](const folly::exception_wrapper& ex) { - LOG(INFO) << "ServerSocket Disconnected: " << ex.what(); - }); - rs->onClosed([](const folly::exception_wrapper& ex) { - LOG(INFO) << "ServerSocket Closed: " << ex.what(); - }); - rs->serverConnect(std::move(frameTransport), setupPayload); - g_reactiveSockets.emplace_back(std::move(rs), setupPayload.token); - } - - bool resumeSocket( - std::shared_ptr frameTransport, - ResumeParameters resumeParams) override { - LOG(INFO) << "ServerSocket. RESUME socket from client [" - << resumeParams.token << "]"; - CHECK_EQ(1, g_reactiveSockets.size()); - CHECK(g_reactiveSockets[0].second == resumeParams.token); - auto result = g_reactiveSockets[0].first->tryResumeServer( - frameTransport, resumeParams); - LOG(INFO) << "Resume " << (result ? "SUCCEEDED" : "FAILED"); - return true; - } - - void connectionError( - std::shared_ptr, - folly::exception_wrapper ex) override { - LOG(WARNING) << "ServerSocket. ConnectionError: " << ex.what(); - } - - private: - EventBase& eventBase_; - std::shared_ptr stats_; -}; - -class MyAcceptCallback : public AsyncServerSocket::AcceptCallback { - public: - MyAcceptCallback(EventBase& eventBase) - : eventBase_(eventBase), - connectionHandler_(std::make_shared(eventBase)), - connectionAcceptor_(ProtocolVersion::Latest) {} - - virtual void connectionAccepted( - int fd, - const SocketAddress& clientAddr) noexcept override { - LOG(INFO) << "Connection Accepted from " << clientAddr.describe(); - auto socket = - folly::AsyncSocket::UniquePtr(new AsyncSocket(&eventBase_, fd)); - auto connection = std::make_unique( - std::move(socket), inlineExecutor(), RSocketStats::noop()); - auto framedConnection = std::make_unique( - std::move(connection), eventBase_); - connectionAcceptor_.accept(std::move(framedConnection), connectionHandler_); - } - - virtual void acceptError(const std::exception& ex) noexcept override { - LOG(INFO) << "Connection Accept Error: " << ex.what(); - } - - private: - EventBase& eventBase_; - std::shared_ptr connectionHandler_; - ServerConnectionAcceptor connectionAcceptor_; -}; -} - -ServerFixture::ServerFixture() - : myAcceptCallback_(std::make_unique(eventBase_)) { - serverAcceptThread_ = std::thread([=]() { eventBase_.loopForever(); }); - serverAcceptSocket_.reset(new AsyncServerSocket(&eventBase_)); - eventBase_.runInEventBaseThreadAndWait([=]() { - folly::SocketAddress addr; - addr.setFromLocalPort(folly::to(FLAGS_port)); - serverAcceptSocket_->bind(addr); - serverAcceptSocket_->addAcceptCallback( - myAcceptCallback_.get(), &eventBase_); - serverAcceptSocket_->listen(10); - serverAcceptSocket_->startAccepting(); - LOG(INFO) << "Server listening on " << serverAcceptSocket_->getAddress(); - serverListenPort_ = serverAcceptSocket_->getAddress().getPort(); - }); -} - -ServerFixture::~ServerFixture() { - eventBase_.runInEventBaseThreadAndWait([=]() { - g_reactiveSockets.clear(); - serverAcceptSocket_.reset(); - }); - eventBase_.terminateLoopSoon(); - serverAcceptThread_.join(); -} diff --git a/test/integration/ServerFixture.h b/test/integration/ServerFixture.h deleted file mode 100644 index 949eabef5..000000000 --- a/test/integration/ServerFixture.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include - -#include - -#include "src/framing/FramedDuplexConnection.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ServerConnectionAcceptor.h" -#include "src/temporary_home/SubscriptionBase.h" -#include "src/transports/tcp/TcpDuplexConnection.h" -#include "test/deprecated/ReactiveSocket.h" - -// A fixture class to init/destroy a ReactiveSocket server. This can be used -// to run different types of unittests. The server's processes the request(n) -// methods and sends n frames. The frame content is just the frame number. -class ServerFixture : public testing::Test { - public: - // ReactiveSocket requires a specific order in which objects need to be - // created and destroyed. The constructor and destructor ensure the order - // is respected. - ServerFixture(); - ~ServerFixture(); - - // The EventBase which runs the server thread. - folly::EventBase eventBase_; - - // The thread which listens and accepts connections from clients. - std::thread serverAcceptThread_; - - // The socket on which the server listens to client connections. - folly::AsyncServerSocket::UniquePtr serverAcceptSocket_; - - // Callback methods for accept actions. - std::unique_ptr myAcceptCallback_; - - // Port used by server to listen to new connections - uint16_t serverListenPort_{0}; -}; diff --git a/test/integration/WarmResumptionTest.cpp b/test/integration/WarmResumptionTest.cpp deleted file mode 100644 index 3b7ffe1d1..000000000 --- a/test/integration/WarmResumptionTest.cpp +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include - -#include -#include - -#include - -#include "test/integration/ClientUtils.h" -#include "test/integration/ServerFixture.h" - -using namespace std::chrono_literals; -using namespace ::rsocket; -using namespace ::testing; -using namespace yarpl; - -using folly::ScopedEventBaseThread; - -// A very simple test which tests a basic warm resumption workflow. -// This setup can be used to test varying scenarious in warm resumption. -TEST_F(ServerFixture, DISABLED_BasicWarmResumption) { - ScopedEventBaseThread eventBaseThread; - auto clientEvb = eventBaseThread.getEventBase(); - tests::MyConnectCallback connectCb; - auto token = ResumeIdentificationToken::generateNew(); - std::unique_ptr rsocket; - auto mySub = make_ref(); - Sequence s; - SCOPE_EXIT { - clientEvb->runInEventBaseThreadAndWait([&]() { rsocket.reset(); }); - }; - - // The thread running this test, and the thread running the clientEvb - // have to synchronized with a barrier. - std::mutex cvM; - std::condition_variable cv; - std::unique_lock lk(cvM); - - // Get a few subscriptions (happens right after connecting) - EXPECT_CALL(*mySub, onSubscribe_()) - .WillOnce(Invoke([&]() { mySub->request(3); })); - EXPECT_CALL(*mySub, onNext_("1")); - EXPECT_CALL(*mySub, onNext_("2")); - EXPECT_CALL(*mySub, onNext_("3")) - .WillOnce(Invoke([&](std::string) { cv.notify_all(); })); - - // Create a RSocket and RequestStream - clientEvb->runInEventBaseThreadAndWait([&]() { - rsocket = tests::getRSocket(clientEvb); - rsocket->requestStream(Payload("from client"), mySub); - rsocket->clientConnect( - tests::getFrameTransport(clientEvb, &connectCb, serverListenPort_), - tests::getSetupPayload(token)); - }); - - // Wait for few packets to exchange before disconnecting OR error out. - EXPECT_EQ( - std::cv_status::no_timeout, - cv.wait_until(lk, std::chrono::system_clock::now() + 1000ms)); - - // Disconnect - clientEvb->runInEventBaseThreadAndWait([&]() { rsocket->disconnect(); }); - - // This request should be buffered - mySub->request(2); - - // Get subscriptions for buffered request (happens right after - // reconnecting) - EXPECT_CALL(*mySub, onNext_("4")); - EXPECT_CALL(*mySub, onNext_("5")) - .WillOnce(Invoke([&](std::string) { cv.notify_all(); })); - - // Reconnect - clientEvb->runInEventBaseThreadAndWait([&]() { - rsocket->tryClientResume( - token, - tests::getFrameTransport(clientEvb, &connectCb, serverListenPort_), - std::make_unique()); - }); - - // Wait for the remaining frames to make it OR error out. - EXPECT_EQ( - std::cv_status::no_timeout, - cv.wait_until(lk, std::chrono::system_clock::now() + 1000ms)); -} \ No newline at end of file diff --git a/test/internal/ReactiveStreamsMocksCompat.h b/test/internal/ReactiveStreamsMocksCompat.h deleted file mode 100644 index a0035e2bb..000000000 --- a/test/internal/ReactiveStreamsMocksCompat.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#pragma once - -#include "test/streams/Mocks.h" - -namespace folly { -class exception_wrapper; -} - -/// This header defines aliases to the mocks provided by the ReactiveStream -/// specification, which replace std::exception_ptr with more efficient -/// folly::exception_wrapper. -namespace rsocket { - -template -using MockSubscriber = - reactivestreams::MockSubscriber; - -using MockSubscription = reactivestreams::MockSubscription; -} diff --git a/test/resumption/ReactiveSocketResumabilityTest.cpp b/test/resumption/ReactiveSocketResumabilityTest.cpp deleted file mode 100644 index 309f149a7..000000000 --- a/test/resumption/ReactiveSocketResumabilityTest.cpp +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include - -#include "src/temporary_home/NullRequestHandler.h" -#include "test/deprecated/ReactiveSocket.h" -#include "test/streams/Mocks.h" -#include "test/test_utils/InlineConnection.h" -#include "test/test_utils/MockRequestHandler.h" -#include "test/test_utils/MockStats.h" - -using namespace ::testing; -using namespace ::rsocket; -using namespace yarpl; - -TEST(ReactiveSocketResumabilityTest, Disconnect) { - auto socketConnection = std::make_unique(); - auto testConnection = std::make_unique(); - - socketConnection->connectTo(*testConnection); - - auto testInputSubscription = std::make_shared(); - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - - testConnection->setInput(testOutputSubscriber); - auto sub = testConnection->getOutput(); - sub->onSubscribe(testInputSubscription); - - auto stats = std::make_shared(); - - auto requestHandler = std::make_unique>(); - EXPECT_CALL(*requestHandler, socketOnConnected()).Times(1); - EXPECT_CALL(*requestHandler, socketOnDisconnected(_)).Times(1); - EXPECT_CALL(*requestHandler, socketOnClosed(_)).Times(1); - - auto socket = ReactiveSocket::fromClientConnection( - defaultExecutor(), - std::move(socketConnection), - std::move(requestHandler), - SetupParameters("", "", Payload(), true), - stats); - - auto responseSubscriber = - make_ref>(); - EXPECT_CALL(*responseSubscriber, onSubscribe_(_)) - .Times(1) - .WillOnce(Invoke( - [&](yarpl::Reference subscription) { - subscription->request(std::numeric_limits::max()); - })); - - EXPECT_CALL(*responseSubscriber, onComplete_()).Times(0); - EXPECT_CALL(*responseSubscriber, onError_(_)).Times(0); - - socket->requestResponse(Payload(), responseSubscriber); - - EXPECT_CALL(*testOutputSubscriber, onComplete_()).Times(1); - EXPECT_CALL(*testOutputSubscriber, onError_(_)).Times(0); - EXPECT_CALL(*testInputSubscription, cancel_()).Times(1); - EXPECT_CALL(*stats, socketDisconnected()).Times(1); - EXPECT_CALL(*stats, socketClosed(_)).Times(0); - - socket->disconnect(); - - Mock::VerifyAndClearExpectations(responseSubscriber.get()); - Mock::VerifyAndClearExpectations(testOutputSubscriber.get()); - Mock::VerifyAndClearExpectations(testInputSubscription.get()); - Mock::VerifyAndClearExpectations(stats.get()); - - EXPECT_CALL(*responseSubscriber, onError_(_)).Times(1); - EXPECT_CALL(*stats, socketDisconnected()).Times(0); - EXPECT_CALL(*stats, socketClosed(_)).Times(1); - - socket->close(); - socket.reset(); - sub->onComplete(); -} diff --git a/test/resumption/ResumeCacheTest.cpp b/test/resumption/ResumeCacheTest.cpp deleted file mode 100644 index a11b839b7..000000000 --- a/test/resumption/ResumeCacheTest.cpp +++ /dev/null @@ -1,264 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include - -#include "src/RSocketStats.h" -#include "src/framing/Frame.h" -#include "src/framing/FrameSerializer_v0_1.h" -#include "src/framing/FrameTransport.h" -#include "src/internal/ResumeCache.h" -#include "test/test_utils/InlineConnection.h" -#include "test/test_utils/MockStats.h" - -using namespace ::testing; -using namespace ::rsocket; - -class FrameTransportMock : public FrameTransport { - public: - FrameTransportMock() : FrameTransport(std::make_unique()) {} - - MOCK_METHOD1(outputFrameOrEnqueue_, void(std::unique_ptr&)); - - void outputFrameOrEnqueue(std::unique_ptr frame) override { - outputFrameOrEnqueue_(frame); - } -}; - -class ResumeCacheTest : public Test { - protected: - std::unique_ptr frameSerializer_{ - FrameSerializer::createCurrentVersion()}; -}; - -TEST_F(ResumeCacheTest, EmptyCache) { - ResumeCache cache(RSocketStats::noop()); - FrameTransportMock transport; - - EXPECT_CALL(transport, outputFrameOrEnqueue_(_)).Times(0); - - EXPECT_EQ(0, cache.lastResetPosition()); - EXPECT_EQ(0, cache.position()); - EXPECT_TRUE(cache.isPositionAvailable(0)); - EXPECT_FALSE(cache.isPositionAvailable(1)); - cache.sendFramesFromPosition(0, transport); - - cache.resetUpToPosition(0); - - EXPECT_EQ(0, cache.lastResetPosition()); - EXPECT_EQ(0, cache.position()); - EXPECT_TRUE(cache.isPositionAvailable(0)); - EXPECT_FALSE(cache.isPositionAvailable(1)); - cache.sendFramesFromPosition(0, transport); -} - -TEST_F(ResumeCacheTest, OneFrame) { - ResumeCache cache(RSocketStats::noop()); - FrameTransportMock transport; - - auto frame1 = frameSerializer_->serializeOut(Frame_CANCEL(0)); - const auto frame1Size = frame1->computeChainDataLength(); - - cache.trackSentFrame( - *frame1, FrameType::CANCEL, folly::Optional(0)); - - EXPECT_EQ(0, cache.lastResetPosition()); - EXPECT_EQ((ResumePosition)frame1Size, cache.position()); - EXPECT_TRUE(cache.isPositionAvailable(0)); - EXPECT_TRUE(cache.isPositionAvailable(frame1Size)); - - cache.resetUpToPosition(0); - - EXPECT_EQ(0, cache.lastResetPosition()); - EXPECT_EQ((ResumePosition)frame1Size, cache.position()); - EXPECT_TRUE(cache.isPositionAvailable(0)); - EXPECT_TRUE(cache.isPositionAvailable(frame1Size)); - - EXPECT_FALSE(cache.isPositionAvailable(frame1Size - 1)); // misaligned - - EXPECT_CALL(transport, outputFrameOrEnqueue_(_)) - .WillOnce(Invoke([=](std::unique_ptr& buf) { - EXPECT_EQ(frame1Size, buf->computeChainDataLength()); - })); - - cache.sendFramesFromPosition(0, transport); - cache.sendFramesFromPosition(frame1Size, transport); - - cache.resetUpToPosition(frame1Size); - - EXPECT_EQ((ResumePosition)frame1Size, cache.lastResetPosition()); - EXPECT_EQ((ResumePosition)frame1Size, cache.position()); - EXPECT_FALSE(cache.isPositionAvailable(0)); - EXPECT_TRUE(cache.isPositionAvailable(frame1Size)); - - cache.sendFramesFromPosition(frame1Size, transport); -} - -TEST_F(ResumeCacheTest, TwoFrames) { - ResumeCache cache(RSocketStats::noop()); - FrameTransportMock transport; - - auto frame1 = frameSerializer_->serializeOut(Frame_CANCEL(0)); - const auto frame1Size = frame1->computeChainDataLength(); - - auto frame2 = frameSerializer_->serializeOut(Frame_REQUEST_N(0, 2)); - const auto frame2Size = frame2->computeChainDataLength(); - - cache.trackSentFrame( - *frame1, FrameType::CANCEL, folly::Optional(0)); - cache.trackSentFrame( - *frame2, FrameType::REQUEST_N, folly::Optional(0)); - - EXPECT_EQ(0, cache.lastResetPosition()); - EXPECT_EQ((ResumePosition)(frame1Size + frame2Size), cache.position()); - EXPECT_TRUE(cache.isPositionAvailable(0)); - EXPECT_TRUE(cache.isPositionAvailable(frame1Size)); - EXPECT_TRUE(cache.isPositionAvailable(frame1Size + frame2Size)); - - EXPECT_CALL(transport, outputFrameOrEnqueue_(_)) - .WillOnce(Invoke([&](std::unique_ptr& buf) { - EXPECT_EQ(frame1Size, buf->computeChainDataLength()); - })) - .WillOnce(Invoke([&](std::unique_ptr& buf) { - EXPECT_EQ(frame2Size, buf->computeChainDataLength()); - })); - - cache.sendFramesFromPosition(0, transport); - - cache.resetUpToPosition(frame1Size); - - EXPECT_EQ((ResumePosition)frame1Size, cache.lastResetPosition()); - EXPECT_EQ((ResumePosition)(frame1Size + frame2Size), cache.position()); - EXPECT_FALSE(cache.isPositionAvailable(0)); - EXPECT_TRUE(cache.isPositionAvailable(frame1Size)); - EXPECT_TRUE(cache.isPositionAvailable(frame1Size + frame2Size)); - - EXPECT_CALL(transport, outputFrameOrEnqueue_(_)) - .WillOnce(Invoke([&](std::unique_ptr& buf) { - EXPECT_EQ(frame2Size, buf->computeChainDataLength()); - })); - - cache.sendFramesFromPosition(frame1Size, transport); -} - -TEST_F(ResumeCacheTest, Stats) { - auto stats = std::make_shared>(); - ResumeCache cache(stats); - - auto frame1 = frameSerializer_->serializeOut(Frame_CANCEL(0)); - auto frame1Size = frame1->computeChainDataLength(); - EXPECT_CALL(*stats, resumeBufferChanged(1, frame1Size)); - cache.trackSentFrame( - *frame1, FrameType::CANCEL, folly::Optional(0)); - - auto frame2 = frameSerializer_->serializeOut(Frame_REQUEST_N(0, 3)); - auto frame2Size = frame2->computeChainDataLength(); - EXPECT_CALL(*stats, resumeBufferChanged(1, frame2Size)).Times(2); - cache.trackSentFrame( - *frame2, FrameType::REQUEST_N, folly::Optional(0)); - cache.trackSentFrame( - *frame2, FrameType::REQUEST_N, folly::Optional(0)); - - EXPECT_CALL(*stats, resumeBufferChanged(-1, -frame1Size)); - cache.resetUpToPosition(frame1Size); - EXPECT_CALL(*stats, resumeBufferChanged(-2, -2 * frame2Size)); -} - -TEST_F(ResumeCacheTest, EvictFIFO) { - auto frame = frameSerializer_->serializeOut(Frame_CANCEL(0)); - const auto frameSize = frame->computeChainDataLength(); - - // construct cache with capacity of 2 frameSize - ResumeCache cache(RSocketStats::noop(), frameSize * 2); - - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - - // first 2 frames should be presented in the cache - EXPECT_TRUE(cache.isPositionAvailable(0)); - EXPECT_TRUE(cache.isPositionAvailable(frameSize)); - EXPECT_TRUE(cache.isPositionAvailable(frameSize * 2)); - - // add third frame, and this frame should evict first frame - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - EXPECT_FALSE(cache.isPositionAvailable(0)); - - // cache size should also be adjusted by resetUpToPosition - cache.resetUpToPosition(frameSize * 2); - EXPECT_FALSE(cache.isPositionAvailable(frameSize)); - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - EXPECT_TRUE(cache.isPositionAvailable(frameSize * 2)); - EXPECT_TRUE(cache.isPositionAvailable(frameSize * 3)); - EXPECT_TRUE(cache.isPositionAvailable(frameSize * 4)); - - // create a huge frame and try to cache it - auto hugeFrame = folly::IOBuf::createChain(frameSize * 3, frameSize * 3); - for (int i = 0; i < 3; i++) { - hugeFrame->appendChain(frame->clone()); - } - EXPECT_EQ(hugeFrame->computeChainDataLength(), frameSize * 3); - cache.trackSentFrame( - *hugeFrame, FrameType::CANCEL, folly::Optional(0)); - // cache should be cleared - EXPECT_FALSE(cache.isPositionAvailable(frameSize * 2)); - EXPECT_FALSE(cache.isPositionAvailable(frameSize * 3)); - EXPECT_FALSE(cache.isPositionAvailable(frameSize * 4 + 1)); - - // caching small frames shouldn't be affected - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - EXPECT_FALSE(cache.isPositionAvailable(frameSize * 4 + 1)); - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - EXPECT_FALSE(cache.isPositionAvailable(frameSize * 5 + 1)); -} - -TEST_F(ResumeCacheTest, EvictStats) { - auto stats = std::make_shared>(); - - auto frame = frameSerializer_->serializeOut(Frame_CANCEL(0)); - const auto frameSize = frame->computeChainDataLength(); - - // construct cache with capacity of 2 frameSize - ResumeCache cache(stats, frameSize * 2); - - { - InSequence dummy; - // Two added - EXPECT_CALL(*stats, resumeBufferChanged(1, frameSize)); - EXPECT_CALL(*stats, resumeBufferChanged(1, frameSize)); - // One evicted, one added - EXPECT_CALL(*stats, resumeBufferChanged(-1, -frameSize)); - EXPECT_CALL(*stats, resumeBufferChanged(1, frameSize)); - // Destruction - EXPECT_CALL(*stats, resumeBufferChanged(-2, -frameSize * 2)); - } - - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - - EXPECT_EQ(frameSize * 2, cache.size()); -} - -TEST_F(ResumeCacheTest, PositionSmallFrame) { - auto frame = frameSerializer_->serializeOut(Frame_CANCEL(0)); - const auto frameSize = frame->computeChainDataLength(); - - // Cache is larger than frame - ResumeCache cache(RSocketStats::noop(), frameSize * 2); - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - EXPECT_EQ( - frame->computeChainDataLength(), static_cast(cache.position())); -} - -TEST_F(ResumeCacheTest, PositionLargeFrame) { - auto frame = frameSerializer_->serializeOut(Frame_CANCEL(0)); - const auto frameSize = frame->computeChainDataLength(); - - // Cache is smaller than frame - ResumeCache cache(RSocketStats::noop(), frameSize / 2); - cache.trackSentFrame(*frame, FrameType::CANCEL, folly::Optional(0)); - EXPECT_EQ( - frame->computeChainDataLength(), static_cast(cache.position())); -} diff --git a/test/resumption/ResumeIdentificationTokenTest.cpp b/test/resumption/ResumeIdentificationTokenTest.cpp deleted file mode 100644 index ee61b97a6..000000000 --- a/test/resumption/ResumeIdentificationTokenTest.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include "src/internal/Common.h" -#include "test/streams/Mocks.h" - -using namespace ::testing; -using namespace ::rsocket; - -TEST(ResumeIdentificationTokenTest, ToString) { - ResumeIdentificationToken token; - token.set({{0x12, - 0x34, - 0x56, - 0x78, - 0x9a, - 0xbc, - 0xde, - 0xff, - 0xed, - 0xcb, - 0xa9, - 0x87, - 0x65, - 0x43, - 0x21, - 0x00}}); - std::ostringstream out; - out << token; - ASSERT_EQ("0x123456789abcdeffedcba98765432100", out.str()); -} diff --git a/test/resumption/TcpResumeClient.cpp b/test/resumption/TcpResumeClient.cpp deleted file mode 100644 index 346e1e2e0..000000000 --- a/test/resumption/TcpResumeClient.cpp +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include -#include - -#include "src/framing/FrameTransport.h" -#include "src/framing/FramedDuplexConnection.h" -#include "src/internal/ClientResumeStatusCallback.h" -#include "src/internal/FollyKeepaliveTimer.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "src/transports/tcp/TcpDuplexConnection.h" -#include "test/deprecated/ReactiveSocket.h" -#include "test/test_utils/PrintSubscriber.h" -#include "test/test_utils/StatsPrinter.h" - -using namespace ::testing; -using namespace ::rsocket; -using namespace ::folly; -using namespace yarpl; - -DEFINE_string(host, "localhost", "host to connect to"); -DEFINE_int32(port, 9898, "host:port to connect to"); - -namespace { -class Callback : public AsyncSocket::ConnectCallback { - public: - virtual ~Callback() = default; - - void connectSuccess() noexcept override {} - - void connectErr(const AsyncSocketException& ex) noexcept override { - std::cout << "TODO error" << ex.what() << " " << ex.getType() << "\n"; - } -}; - -class ResumeCallback : public ClientResumeStatusCallback { - void onResumeOk() noexcept override { - LOG(INFO) << "resumeOk"; - } - - // Called when an ERROR frame with CONNECTION_ERROR is received during - // resuming operation - void onResumeError(folly::exception_wrapper ex) noexcept override { - LOG(INFO) << "resumeError: " << ex.what(); - } - - // Called when the resume operation was interrupted due to network - // the application code may try to resume again. - void onConnectionError(folly::exception_wrapper ex) noexcept override { - LOG(INFO) << "connectionError: " << ex.what(); - } -}; -} - -class ClientRequestHandler : public DefaultRequestHandler { - public: - void onSubscriptionPaused( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "subscription paused " << &subscription; - } - - void onSubscriptionResumed( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "subscription resumed " << &subscription; - } - - void onSubscriberPaused( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "subscriber paused " << &subscriber; - } - - void onSubscriberResumed( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "subscriber resumed " << &subscriber; - } -}; - -int main(int argc, char* argv[]) { - FLAGS_logtostderr = true; - FLAGS_minloglevel = 0; - -#ifdef OSS - google::ParseCommandLineFlags(&argc, &argv, true); -#else - gflags::ParseCommandLineFlags(&argc, &argv, true); -#endif - - google::InitGoogleLogging(argv[0]); - google::InstallFailureSignalHandler(); - - ScopedEventBaseThread eventBaseThread; - - std::unique_ptr reactiveSocket; - Callback callback; - auto stats = std::make_shared(); - - auto token = ResumeIdentificationToken::generateNew(); - - eventBaseThread.getEventBase()->runInEventBaseThreadAndWait([&]() { - folly::SocketAddress addr(FLAGS_host, FLAGS_port, true); - - folly::AsyncSocket::UniquePtr socket( - new folly::AsyncSocket(eventBaseThread.getEventBase())); - socket->connect(&callback, addr); - - LOG(INFO) << "attempting connection to " << addr.describe(); - - std::unique_ptr connection = - std::make_unique( - std::move(socket), inlineExecutor(), stats); - std::unique_ptr framedConnection = - std::make_unique( - std::move(connection), *eventBaseThread.getEventBase()); - std::unique_ptr requestHandler = - std::make_unique(); - - reactiveSocket = ReactiveSocket::disconnectedClient( - *eventBaseThread.getEventBase(), - std::move(requestHandler), - stats, - std::make_unique( - *eventBaseThread.getEventBase(), std::chrono::seconds(10))); - - reactiveSocket->onConnected([]() { LOG(INFO) << "socket connected"; }); - reactiveSocket->onDisconnected([](const folly::exception_wrapper& ex) { - LOG(INFO) << "socket disconnect: " << ex.what(); - }); - reactiveSocket->onClosed([](const folly::exception_wrapper& ex) { - LOG(INFO) << "socket closed: " << ex.what(); - }); - - LOG(INFO) << "requestStream:"; - reactiveSocket->requestStream( - Payload("from client"), make_ref()); - - LOG(INFO) << "connecting RS ..."; - reactiveSocket->clientConnect( - std::make_shared(std::move(framedConnection)), - SetupParameters( - "text/plain", "text/plain", Payload("meta", "data"), true, token)); - }); - - std::string input; - std::getline(std::cin, input); - - eventBaseThread.getEventBase()->runInEventBaseThreadAndWait([&]() { - LOG(INFO) << "disconnecting RS ..."; - reactiveSocket->disconnect(); - LOG(INFO) << "requestStream:"; - reactiveSocket->requestStream( - Payload("from client2"), make_ref()); - }); - - std::getline(std::cin, input); - - eventBaseThread.getEventBase()->runInEventBaseThreadAndWait([&]() { - folly::SocketAddress addr(FLAGS_host, FLAGS_port, true); - - LOG(INFO) << "new TCP connection ..."; - folly::AsyncSocket::UniquePtr socketResume( - new folly::AsyncSocket(eventBaseThread.getEventBase())); - socketResume->connect(&callback, addr); - - std::unique_ptr connectionResume = - std::make_unique( - std::move(socketResume), inlineExecutor(), stats); - std::unique_ptr framedConnectionResume = - std::make_unique( - std::move(connectionResume), inlineExecutor()); - - LOG(INFO) << "try resume ..."; - reactiveSocket->tryClientResume( - token, - std::make_shared(std::move(framedConnectionResume)), - std::make_unique()); - }); - - std::getline(std::cin, input); - - // TODO why need to shutdown in eventbase? - eventBaseThread.getEventBase()->runInEventBaseThreadAndWait( - [&reactiveSocket]() { - LOG(INFO) << "releasing RS"; - reactiveSocket.reset(nullptr); - }); - - return 0; -} diff --git a/test/resumption/TcpResumeServer.cpp b/test/resumption/TcpResumeServer.cpp deleted file mode 100644 index bec701223..000000000 --- a/test/resumption/TcpResumeServer.cpp +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include - -#include "src/framing/FrameTransport.h" -#include "src/framing/FramedDuplexConnection.h" -#include "src/temporary_home/NullRequestHandler.h" -#include "src/temporary_home/ServerConnectionAcceptor.h" -#include "src/temporary_home/SubscriptionBase.h" -#include "src/transports/tcp/TcpDuplexConnection.h" -#include "test/deprecated/ReactiveSocket.h" -#include "test/test_utils/PrintSubscriber.h" -#include "test/test_utils/StatsPrinter.h" - -using namespace ::testing; -using namespace ::rsocket; -using namespace ::folly; -using namespace yarpl; - -DEFINE_string(address, "9898", "host:port to listen to"); - -namespace { - -std::vector< - std::pair, ResumeIdentificationToken>> - g_reactiveSockets; - -class ServerSubscription : public yarpl::flowable::Subscription { - public: - explicit ServerSubscription( - yarpl::Reference> response) - : response_(std::move(response)) {} - - ~ServerSubscription() { - LOG(INFO) << "~ServerSubscription " << this; - } - - // Subscription methods - void request(int64_t n) noexcept override { - LOG(INFO) << "request " << this; - response_->onNext(Payload("from server")); - response_->onNext(Payload("from server2")); - LOG(INFO) << "calling onComplete"; - if (auto response = std::move(response_)) { - response->onComplete(); - } - // response_.onError(std::runtime_error("XXX")); - } - - void cancel() noexcept override { - LOG(INFO) << "cancel " << this; - } - - private: - yarpl::Reference> response_; -}; - -class ServerRequestHandler : public DefaultRequestHandler { - public: - explicit ServerRequestHandler(std::shared_ptr streamState) - : streamState_(streamState) {} - - /// Handles a new inbound Stream requested by the other end. - void handleRequestStream( - Payload request, - StreamId streamId, - const yarpl::Reference>& - response) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleRequestStream " << request; - - response->onSubscribe(make_ref(response)); - } - - void handleFireAndForgetRequest( - Payload request, - StreamId streamId) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleFireAndForgetRequest " << request - << "\n"; - } - - void handleMetadataPush( - std::unique_ptr request) noexcept override { - LOG(INFO) << "ServerRequestHandler.handleMetadataPush " - << request->moveToFbString() << "\n"; - } - - std::shared_ptr handleSetupPayload( - SetupParameters request) noexcept override { - CHECK(false) << "unexpected call"; - return nullptr; - } - - bool handleResume(ResumeParameters) noexcept override { - CHECK(false) << "unexpected call"; - return false; - } - - void handleCleanResume(yarpl::Reference - response) noexcept override { - LOG(INFO) << "clean resume stream" - << "\n"; - } - - void handleDirtyResume(yarpl::Reference - response) noexcept override { - LOG(INFO) << "dirty resume stream" - << "\n"; - } - - void onSubscriptionPaused( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "subscription paused " << &subscription; - } - - void onSubscriptionResumed( - const yarpl::Reference& - subscription) noexcept override { - LOG(INFO) << "subscription resumed " << &subscription; - } - - void onSubscriberPaused( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "subscriber paused " << &subscriber; - } - - void onSubscriberResumed( - const yarpl::Reference>& - subscriber) noexcept override { - LOG(INFO) << "subscriber resumed " << &subscriber; - } - - private: - // only keeping one - std::shared_ptr streamState_; -}; - -class MyConnectionHandler : public ConnectionHandler { - public: - MyConnectionHandler(EventBase& eventBase, std::shared_ptr stats) - : eventBase_(eventBase), stats_(std::move(stats)) {} - - void setupNewSocket( - std::shared_ptr frameTransport, - SetupParameters setupPayload) override { - LOG(INFO) << "MyConnectionHandler::setupNewSocket " << setupPayload; - - std::unique_ptr requestHandler = - std::make_unique(nullptr); - - std::unique_ptr rs = ReactiveSocket::disconnectedServer( - eventBase_, std::move(requestHandler), stats_); - - rs->onConnected([]() { LOG(INFO) << "socket connected"; }); - rs->onDisconnected([rs = rs.get()](const folly::exception_wrapper& ex) { - LOG(INFO) << "socket disconnect: " << ex.what(); - // to verify these frames will be queued up - rs->requestStream( - Payload("from server resume"), make_ref()); - }); - rs->onClosed([](const folly::exception_wrapper& ex) { - LOG(INFO) << "socket closed: " << ex.what(); - }); - - if (g_reactiveSockets.empty()) { - LOG(INFO) << "requestStream"; - // not permited to make requests at this moment - // rs->requestStream( - // Payload("from server"), std::make_shared()); - } - - LOG(INFO) << "serverConnecting ..."; - rs->serverConnect(std::move(frameTransport), setupPayload); - - LOG(INFO) << "RS " << rs.get(); - - g_reactiveSockets.emplace_back(std::move(rs), setupPayload.token); - } - - bool resumeSocket( - std::shared_ptr frameTransport, - ResumeParameters resumeParams) override { - LOG(INFO) << "MyConnectionHandler::resumeSocket resume token [" - << resumeParams.token << "]"; - - CHECK_EQ(1, g_reactiveSockets.size()); - CHECK(g_reactiveSockets[0].second == resumeParams.token); - - LOG(INFO) << "tryResumeServer..."; - auto result = g_reactiveSockets[0].first->tryResumeServer( - frameTransport, resumeParams); - LOG(INFO) << "resume " << (result ? "SUCCEEDED" : "FAILED"); - - return true; - } - - void connectionError( - std::shared_ptr, - folly::exception_wrapper ex) override { - LOG(WARNING) << "Connection failed: " << ex.what(); - } - - private: - EventBase& eventBase_; - std::shared_ptr stats_; -}; - -class Callback : public AsyncServerSocket::AcceptCallback { - public: - Callback(EventBase& eventBase, std::shared_ptr stats) - : eventBase_(eventBase), - stats_(stats), - connectionHandler_( - std::make_shared(eventBase, stats)), - connectionAcceptor_(ProtocolVersion::Unknown) {} - - virtual void connectionAccepted( - int fd, - const SocketAddress& clientAddr) noexcept override { - LOG(INFO) << "connectionAccepted" << clientAddr.describe(); - - auto socket = - folly::AsyncSocket::UniquePtr(new AsyncSocket(&eventBase_, fd)); - - auto connection = std::make_unique( - std::move(socket), inlineExecutor(), stats_); - auto framedConnection = std::make_unique( - std::move(connection), ProtocolVersion::Unknown, eventBase_); - - connectionAcceptor_.accept(std::move(framedConnection), connectionHandler_); - } - - virtual void acceptError(const std::exception& ex) noexcept override { - LOG(INFO) << "acceptError" << ex.what(); - } - - void shutdown() { - shuttingDown = true; - g_reactiveSockets.clear(); - } - - private: - // only one for demo purposes. Should be token dependent. - std::shared_ptr streamState_; - EventBase& eventBase_; - std::shared_ptr stats_; - bool shuttingDown{false}; - std::shared_ptr connectionHandler_; - ServerConnectionAcceptor connectionAcceptor_; -}; -} - -int main(int argc, char* argv[]) { - FLAGS_logtostderr = true; - FLAGS_minloglevel = 0; - -#ifdef OSS - google::ParseCommandLineFlags(&argc, &argv, true); -#else - gflags::ParseCommandLineFlags(&argc, &argv, true); -#endif - - google::InitGoogleLogging(argv[0]); - google::InstallFailureSignalHandler(); - - auto statsPrinter = std::make_shared(); - - EventBase eventBase; - auto thread = std::thread([&eventBase]() { eventBase.loopForever(); }); - - Callback callback(eventBase, statsPrinter); - - auto serverSocket = AsyncServerSocket::newSocket(&eventBase); - - eventBase.runInEventBaseThreadAndWait( - [&callback, &eventBase, &serverSocket]() { - folly::SocketAddress addr; - addr.setFromLocalIpPort(FLAGS_address); - - serverSocket->bind(addr); - serverSocket->addAcceptCallback(&callback, &eventBase); - serverSocket->listen(10); - serverSocket->startAccepting(); - - LOG(INFO) << "server listening on "; - for (auto i : serverSocket->getAddresses()) - LOG(INFO) << i.describe() << ' '; - }); - - std::string name; - std::getline(std::cin, name); - - eventBase.runInEventBaseThreadAndWait([&callback]() { callback.shutdown(); }); - eventBase.terminateLoopSoon(); - - thread.join(); -} diff --git a/test/statemachine/PublisherBaseTest.cpp b/test/statemachine/PublisherBaseTest.cpp deleted file mode 100644 index e230da366..000000000 --- a/test/statemachine/PublisherBaseTest.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include "src/statemachine/PublisherBase.h" -#include "src/temporary_home/SubscriberBase.h" -#include "test/deprecated/ReactiveSocket.h" -#include "test/test_utils/MockRequestHandler.h" - -#include -#include - -using namespace ::testing; -using namespace ::rsocket; -using namespace yarpl; - -namespace { - -class UserSubscriber : public yarpl::flowable::Subscriber, - private PublisherBase { - public: - UserSubscriber() : PublisherBase(5) {} - using PublisherBase::pausePublisherStream; - using PublisherBase::publisherSubscribe; - - void onSubscribe(yarpl::Reference - subscription) noexcept override { - publisherSubscribe(std::move(subscription)); - } - - void onNext(::rsocket::Payload element) noexcept override { - FAIL(); - } - - void onComplete() noexcept override { - FAIL(); - } - - void onError(const std::exception_ptr) noexcept override { - FAIL(); - } -}; - -class UserSubscription : public yarpl::flowable::Subscription { - void request(int64_t n) noexcept override { - EXPECT_EQ(5ll, n); - } - - void cancel() noexcept override { - FAIL(); - } -}; -} - -TEST(PublisherBaseTest, GetsPassedOriginalSubscription) { - MockRequestHandler requestHandler; - auto subscription = make_ref(); - auto userSubscriber = make_ref(); - - EXPECT_CALL(requestHandler, onSubscriptionPaused_(Eq(subscription))); - - userSubscriber->onSubscribe(subscription); - userSubscriber->pausePublisherStream(requestHandler); - userSubscriber.reset(); -} diff --git a/test/statemachine/RSocketStateMachineTest.cpp b/test/statemachine/RSocketStateMachineTest.cpp deleted file mode 100644 index eba03b2f1..000000000 --- a/test/statemachine/RSocketStateMachineTest.cpp +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include -#include -#include -#include "src/framing/FrameTransport.h" -#include "src/framing/FramedDuplexConnection.h" -#include "src/framing/FramedWriter.h" -#include "src/statemachine/RSocketStateMachine.h" -#include "test/streams/Mocks.h" -#include "test/test_utils/InlineConnection.h" - -using namespace ::testing; -using namespace ::rsocket; - -static std::unique_ptr makeInvalidFrameHeader() { - // Create a header without the stream id - folly::IOBufQueue queue(folly::IOBufQueue::cacheChainLength()); - - queue.append(folly::IOBuf::create(sizeof(uint16_t))); - - folly::io::QueueAppender appender(&queue, /* do not grow */ 0); - appender.writeBE(static_cast(FrameType::REQUEST_N)); - return queue.move(); -} - -TEST(ConnectionAutomatonTest, InvalidFrameHeader) { - auto automatonConnection = std::make_unique(); - auto testConnection = std::make_unique(); - - automatonConnection->connectTo(*testConnection); - - // Dump 1 invalid frame and expect an error - - auto inputSubscription = std::make_shared(); - auto testConnectionOutput = testConnection->getOutput(); - - EXPECT_CALL(*inputSubscription, request_(_)) - .Times(AtMost(2)) - .WillOnce(Invoke([&](size_t n) { - testConnectionOutput->onNext(makeInvalidFrameHeader()); - })) - .WillOnce( - /*this call is because of async scheduling on executor*/ Return()); - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - EXPECT_CALL(*testOutputSubscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& frame) { - auto frameSerializer = FrameSerializer::createCurrentVersion(); - auto frameType = frameSerializer->peekFrameType(*frame); - Frame_ERROR error; - ASSERT_EQ(FrameType::ERROR, frameType); - bool deserialized = - frameSerializer->deserializeFrom(error, std::move(frame)); - ASSERT_TRUE(deserialized); - ASSERT_EQ("invalid frame", error.payload_.moveDataToString()); - })); - EXPECT_CALL(*testOutputSubscriber, onComplete_()).Times(1); - EXPECT_CALL(*testOutputSubscriber, onError_(_)).Times(0); - - testConnection->setInput(testOutputSubscriber); - testConnectionOutput->onSubscribe(inputSubscription); - - std::shared_ptr connectionAutomaton; - connectionAutomaton = std::make_shared( - defaultExecutor(), - std::make_shared(), - RSocketStats::noop(), - nullptr, - ReactiveSocketMode::CLIENT); - connectionAutomaton->connect( - std::make_shared(std::move(automatonConnection)), - true, - FrameSerializer::getCurrentProtocolVersion()); - connectionAutomaton->close( - folly::exception_wrapper(), StreamCompletionSignal::CONNECTION_END); - testConnectionOutput->onComplete(); -} - -static void terminateTest( - bool inOnSubscribe, - bool inOnNext, - bool inOnComplete, - bool inRequest) { - auto automatonConnection = std::make_unique(); - auto testConnection = std::make_unique(); - - automatonConnection->connectTo(*testConnection); - - auto inputSubscription = std::make_shared(); - auto testConnectionOutput = testConnection->getOutput(); - - if (!inOnSubscribe) { - auto&& expexctation = - EXPECT_CALL(*inputSubscription, request_(_)) - .Times(AtMost(2)) - .WillOnce(Invoke([&](size_t n) { - if (inRequest) { - testConnectionOutput->onComplete(); - } else { - testConnectionOutput->onNext(makeInvalidFrameHeader()); - } - })); - - if (!inRequest) { - expexctation.WillOnce( - /*this call is because of async scheduling on executor*/ Return()); - } - } - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - if (inOnSubscribe) { - subscription->cancel(); - } else { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - } - })); - if (!inOnSubscribe && !inRequest) { - EXPECT_CALL(*testOutputSubscriber, onNext_(_)) - .WillOnce(Invoke([&](std::unique_ptr& frame) { - if (inOnNext) { - testOutputSubscriber->subscription()->cancel(); - } - })); - } - EXPECT_CALL(*testOutputSubscriber, onComplete_()) - .WillOnce(Invoke([&]() { - if (inOnComplete) { - testOutputSubscriber->subscription()->cancel(); - } - })); - - testConnection->setInput(testOutputSubscriber); - testConnectionOutput->onSubscribe(inputSubscription); - - std::shared_ptr connectionAutomaton; - connectionAutomaton = std::make_shared( - defaultExecutor(), - std::make_shared(), - RSocketStats::noop(), - nullptr, - ReactiveSocketMode::CLIENT); - connectionAutomaton->connect( - std::make_shared(std::move(automatonConnection)), - true, - FrameSerializer::getCurrentProtocolVersion()); - connectionAutomaton->close( - folly::exception_wrapper(), StreamCompletionSignal::CONNECTION_END); - - if (!inRequest) { - testConnectionOutput->onComplete(); - } -} - -TEST(ConnectionAutomatonTest, CleanTerminateOnSubscribe) { - terminateTest(true, false, false, false); -} - -TEST(ConnectionAutomatonTest, CleanTerminateOnNext) { - terminateTest(false, true, false, false); -} - -TEST(ConnectionAutomatonTest, CleanTerminateOnComplete) { - terminateTest(true, true, true, false); -} - -TEST(ConnectionAutomatonTest, CleanTerminateRequest) { - terminateTest(false, true, false, true); -} - -TEST(ConnectionAutomatonTest, RefuseFrame) { - auto automatonConnection = std::make_unique(); - auto testConnection = std::make_unique(); - - automatonConnection->connectTo(*testConnection); - - auto framedAutomatonConnection = std::make_unique( - std::move(automatonConnection), inlineExecutor()); - - auto framedTestConnection = std::make_unique( - std::move(testConnection), inlineExecutor()); - auto framedTestConnectionOutput = framedTestConnection->getOutput(); - - // dump 3 frames to RSocketStateMachine - // the first frame should be refused and the connection closed - // the last 2 frames should be ignored - // everything should die gracefully - - static const int streamId = 1; - auto inputSubscription = std::make_shared(); - - Sequence s; - - auto testOutputSubscriber = - std::make_shared>>(); - EXPECT_CALL(*testOutputSubscriber, onSubscribe_(_)) - .InSequence(s) - .WillOnce(Invoke([&](std::shared_ptr subscription) { - // allow receiving frames from the automaton - subscription->request(std::numeric_limits::max()); - })); - - EXPECT_CALL(*inputSubscription, request_(_)) - .Times(AtMost(2)) - .InSequence(s) - .WillOnce(Invoke([&](size_t n) { - auto framedWriter = - std::dynamic_pointer_cast(framedTestConnectionOutput); - CHECK(framedWriter); - auto frameSerializer = FrameSerializer::createCurrentVersion(); - std::vector> frames; - frames.push_back( - frameSerializer->serializeOut(Frame_REQUEST_N(streamId, 1))); - frames.push_back( - frameSerializer->serializeOut(Frame_REQUEST_N(streamId + 1, 1))); - frames.push_back( - frameSerializer->serializeOut(Frame_REQUEST_N(streamId + 2, 1))); - - framedWriter->onNextMultiple(std::move(frames)); - })) - .WillOnce( - /*this call is because of async scheduling on executor*/ Return()); - EXPECT_CALL(*testOutputSubscriber, onNext_(_)) - .InSequence(s) - .WillOnce(Invoke([&](std::unique_ptr& frame) { - auto frameType = - FrameSerializer::createCurrentVersion()->peekFrameType(*frame); - ASSERT_EQ(FrameType::ERROR, frameType); - })); - EXPECT_CALL(*testOutputSubscriber, onComplete_()).Times(1).InSequence(s); - - framedTestConnection->setInput(testOutputSubscriber); - framedTestConnectionOutput->onSubscribe(inputSubscription); - - std::shared_ptr connectionAutomaton; - connectionAutomaton = std::make_shared( - defaultExecutor(), - std::make_shared(), - RSocketStats::noop(), - nullptr, - ReactiveSocketMode::CLIENT); - connectionAutomaton->connect( - std::make_shared(std::move(framedAutomatonConnection)), - true, - FrameSerializer::getCurrentProtocolVersion()); - connectionAutomaton->close( - folly::exception_wrapper(), StreamCompletionSignal::CONNECTION_END); -} diff --git a/test/StreamStateTest.cpp b/test/statemachine/StreamStateTest.cpp similarity index 100% rename from test/StreamStateTest.cpp rename to test/statemachine/StreamStateTest.cpp diff --git a/test/streams/Mocks.h b/test/streams/Mocks.h deleted file mode 100644 index a596b644b..000000000 --- a/test/streams/Mocks.h +++ /dev/null @@ -1,280 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include "src/internal/ReactiveStreamsCompat.h" - -namespace yarpl { -namespace flowable { - -/// GoogleMock-compatible Publisher implementation for fast prototyping. -/// UnmanagedMockPublisher's lifetime MUST be managed externally. -template -class MockPublisher : public reactivestreams::Publisher { - public: - MockPublisher() { - VLOG(2) << "ctor MockPublisher " << this; - } - ~MockPublisher() { - VLOG(2) << "dtor MockPublisher " << this; - } - - MOCK_METHOD1_T( - subscribe_, - void(yarpl::Reference> subscriber)); - - void subscribe(yarpl::Reference> - subscriber) noexcept override { - subscribe_(std::move(subscriber)); - } -}; - -/// GoogleMock-compatible Subscriber implementation for fast prototyping. -/// MockSubscriber MUST be heap-allocated, as it manages its own lifetime. -/// For the same reason putting mock instance in a smart pointer is a poor idea. -/// Can only be instanciated for CopyAssignable E type. - -using CheckpointPtr = std::shared_ptr>; - -template -class MockSubscriber : public yarpl::flowable::Subscriber { - class SubscriptionShim : public yarpl::flowable::Subscription { - public: - explicit SubscriptionShim( - yarpl::Reference originalSubscription, - CheckpointPtr checkpoint) - : originalSubscription_(std::move(originalSubscription)), - checkpoint_(std::move(checkpoint)) { - VLOG(2) << "ctor SubscriptionShim " << this; - } - ~SubscriptionShim() { - VLOG(2) << "dtor SubscriptionShim " << this; - } - - void request(int64_t n) noexcept override final { - originalSubscription_->request(n); - } - - void cancel() noexcept override final { - checkpoint_->Call(); - originalSubscription_->cancel(); - } - - private: - yarpl::Reference originalSubscription_; - CheckpointPtr checkpoint_; - }; - - public: - MockSubscriber() { - VLOG(2) << "ctor MockSubscriber " << this; - } - ~MockSubscriber() { - VLOG(2) << "dtor MockSubscriber " << this; - } - - MOCK_METHOD1( - onSubscribe_, - void(yarpl::Reference subscription)); - MOCK_METHOD1_T(onNext_, void(T& value)); - MOCK_METHOD0(onComplete_, void()); - MOCK_METHOD1(onError_, void(const std::exception_ptr ex)); - - void onSubscribe(yarpl::Reference - subscription) noexcept override { - subscription_ = - yarpl::make_ref(std::move(subscription), checkpoint_); - // We allow registering the same subscriber with multiple Publishers. - EXPECT_CALL(*checkpoint_, Call()).Times(testing::AtLeast(1)); - onSubscribe_(subscription_); - } - - void onNext(T element) noexcept override { - onNext_(element); - } - - void onComplete() noexcept override { - checkpoint_->Call(); - onComplete_(); - subscription_ = nullptr; - } - - void onError(const std::exception_ptr ex) noexcept override { - checkpoint_->Call(); - onError_(ex); - subscription_ = nullptr; - } - - yarpl::flowable::Subscription* subscription() const { - return subscription_.get(); - } - - private: - yarpl::Reference subscription_; - CheckpointPtr checkpoint_{std::make_shared>()}; -}; - -/// GoogleMock-compatible Subscriber implementation for fast prototyping. -/// MockSubscriber MUST be heap-allocated, as it manages its own lifetime. -/// For the same reason putting mock instance in a smart pointer is a poor idea. -class MockSubscription : public yarpl::flowable::Subscription { - public: - MockSubscription() { - VLOG(2) << "ctor MockSubscription " << this; - } - ~MockSubscription() { - VLOG(2) << "dtor MockSubscription " << this; - } - - MOCK_METHOD1(request_, void(int64_t n)); - MOCK_METHOD0(cancel_, void()); - - void request(int64_t n) noexcept override { - request_(n); - } - - void cancel() noexcept override { - cancel_(); - } -}; - -} // flowable -} // yarpl - -namespace rsocket { - -/// GoogleMock-compatible Publisher implementation for fast prototyping. -/// UnmanagedMockPublisher's lifetime MUST be managed externally. -template -class MockPublisher : public Publisher { - public: - MockPublisher() { - VLOG(2) << "ctor MockPublisher " << this; - } - ~MockPublisher() { - VLOG(2) << "dtor MockPublisher " << this; - } - - MOCK_METHOD1_T(subscribe_, void(std::shared_ptr> subscriber)); - - void subscribe(std::shared_ptr> subscriber) noexcept override { - subscribe_(std::move(subscriber)); - } -}; - -/// GoogleMock-compatible Subscriber implementation for fast prototyping. -/// MockSubscriber MUST be heap-allocated, as it manages its own lifetime. -/// For the same reason putting mock instance in a smart pointer is a poor idea. -/// Can only be instanciated for CopyAssignable E type. - -using CheckpointPtr = std::shared_ptr>; - -template -class MockSubscriber : public Subscriber { - class SubscriptionShim : public Subscription { - public: - explicit SubscriptionShim( - std::shared_ptr originalSubscription, - CheckpointPtr checkpoint) - : originalSubscription_(std::move(originalSubscription)), - checkpoint_(std::move(checkpoint)) { - VLOG(2) << "ctor SubscriptionShim " << this; - } - ~SubscriptionShim() { - VLOG(2) << "dtor SubscriptionShim " << this; - } - - void request(size_t n) noexcept override final { - originalSubscription_->request(n); - } - - void cancel() noexcept override final { - checkpoint_->Call(); - originalSubscription_->cancel(); - } - - private: - std::shared_ptr originalSubscription_; - CheckpointPtr checkpoint_; - }; - - public: - MockSubscriber() { - VLOG(2) << "ctor MockSubscriber " << this; - } - ~MockSubscriber() { - VLOG(2) << "dtor MockSubscriber " << this; - } - - MOCK_METHOD1(onSubscribe_, void(std::shared_ptr subscription)); - MOCK_METHOD1_T(onNext_, void(T& value)); - MOCK_METHOD0(onComplete_, void()); - MOCK_METHOD1(onError_, void(folly::exception_wrapper ex)); - - void onSubscribe( - std::shared_ptr subscription) noexcept override { - subscription_ = std::make_shared( - std::move(subscription), checkpoint_); - // We allow registering the same subscriber with multiple Publishers. - EXPECT_CALL(*checkpoint_, Call()).Times(testing::AtLeast(1)); - onSubscribe_(subscription_); - } - - void onNext(T element) noexcept override { - onNext_(element); - } - - void onComplete() noexcept override { - checkpoint_->Call(); - onComplete_(); - subscription_ = nullptr; - } - - void onError(folly::exception_wrapper ex) noexcept override { - checkpoint_->Call(); - onError_(ex); - subscription_ = nullptr; - } - - Subscription* subscription() const { - return subscription_.get(); - } - - private: - std::shared_ptr subscription_; - CheckpointPtr checkpoint_{std::make_shared>()}; -}; - -/// GoogleMock-compatible Subscriber implementation for fast prototyping. -/// MockSubscriber MUST be heap-allocated, as it manages its own lifetime. -/// For the same reason putting mock instance in a smart pointer is a poor idea. -class MockSubscription : public Subscription { - public: - MockSubscription() { - VLOG(2) << "ctor MockSubscription " << this; - } - ~MockSubscription() { - VLOG(2) << "dtor MockSubscription " << this; - } - - MOCK_METHOD1(request_, void(size_t n)); - MOCK_METHOD0(cancel_, void()); - - void request(size_t n) noexcept override { - request_(n); - } - - void cancel() noexcept override { - cancel_(); - } -}; - -} // reactivesocket diff --git a/test/test_utils/InlineConnection.cpp b/test/test_utils/InlineConnection.cpp deleted file mode 100644 index fef1d80bc..000000000 --- a/test/test_utils/InlineConnection.cpp +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include "InlineConnection.h" -#include -#include -#include -#include "test/streams/Mocks.h" - -namespace rsocket { - -InlineConnection::~InlineConnection() { - this_->instanceTerminated_ = true; -} - -void InlineConnection::connectTo(InlineConnection& other) { - ASSERT_FALSE(other_); - ASSERT_FALSE(other.other_); - other.other_ = this_; - other_ = other.this_; -} - -void InlineConnection::setInput( - std::shared_ptr>> inputSink) { - using namespace ::testing; - - CHECK(other_); - CHECK(!this_->inputSink_); - this_->inputSink_ = std::move(inputSink); - // If `other_->outputSubscription_` is not empty, we can provide the - // subscription to newly registered `inputSink`. - // Otherwise, we only record the sink and wait for appropriate sequence of - // calls to happen on the other end. - if (other_->outputSubscription_) { - this_->inputSink_->onSubscribe(other_->outputSubscription_); - ASSERT_TRUE(!this_->inputSinkCompleted_ || !this_->inputSinkError_); - // If there are any pending signals, we deliver them now. - if (this_->inputSinkCompleted_) { - this_->inputSink_->onComplete(); - } else if (this_->inputSinkError_) { - this_->inputSink_->onError(this_->inputSinkError_); - } - } else { - // No other signal can precede Subscriber::onSubscribe. Since that one was - // not delivered to other end's output subscriber, no other signal could be - // delivered to this subscription. - ASSERT_FALSE(this_->inputSinkCompleted_); - ASSERT_FALSE(this_->inputSinkError_); - } -} - -std::shared_ptr>> -InlineConnection::getOutput() { - CHECK(other_); - - using namespace ::testing; - auto outputSink = - std::make_shared>>(); - - // A check point for either of the terminal signals. - auto* checkpoint = new MockFunction(); - - auto this__ = this_; - auto other__ = other_; - - Sequence s; - EXPECT_CALL(*outputSink, onSubscribe_(_)) - .Times(AtMost(1)) - .InSequence(s) - .WillOnce( - Invoke([this__, other__](std::shared_ptr subscription) { - ASSERT_FALSE(this__->outputSubscription_); - this__->outputSubscription_ = std::move(subscription); - // If `other_->inputSink_` is not empty, we can provide the - // subscriber - // with newly received subscription. - // Otherwise, we only record the subscription and wait for - // appropriate - // sequence of calls to happen on the other end. - if (other__->inputSink_) { - other__->inputSink_->onSubscribe(this__->outputSubscription_); - } - })); - EXPECT_CALL(*outputSink, onNext_(_)) - .Times(AnyNumber()) - .InSequence(s) - .WillRepeatedly( - Invoke([this__, other__](std::unique_ptr& frame) { - ASSERT_TRUE(other__); - ASSERT_TRUE(other__->outputSubscription_); - // The handshake must be completed and Subscription::request(n) must - // be - // invoked on the other end's input, in order for ::onNext to be - // called - // on this end's output. - ASSERT_TRUE(other__->inputSink_); - // calling onNext can result in calling terminating signals - // (onComplete/onError/cancel) - // and releasing shared_ptrs which may destroy object instances - // while - // onNext method is still on the stack - // we will protect against such bugs by keeping a strong reference - // to - // the object while in onNext method - auto otherInputSink = other__->inputSink_; - otherInputSink->onNext(std::move(frame)); - })); - EXPECT_CALL(*outputSink, onComplete_()) - .Times(AtMost(1)) - .InSequence(s) - .WillOnce(Invoke([this__, other__, checkpoint]() { - checkpoint->Call(); - ASSERT_TRUE(other__); - ASSERT_FALSE(this__->inputSinkCompleted_); - ASSERT_FALSE(this__->inputSinkError_); - this__->inputSinkCompleted_ = true; - // We now have two possible situations: - // * `other_->inputSink_` is not empty, we forward the signal, - // * otherwise, we only record the signal and wait for appropriate - // sequence of calls to happen on the other end. - if (other__->inputSink_) { - ASSERT_TRUE(other__->outputSubscription_); - other__->inputSink_->onComplete(); - } - })); - EXPECT_CALL(*outputSink, onError_(_)) - .Times(AtMost(1)) - .InSequence(s) - .WillOnce( - Invoke([this__, other__, checkpoint](folly::exception_wrapper ex) { - checkpoint->Call(); - ASSERT_TRUE(other__); - ASSERT_TRUE(other__->outputSubscription_); - ASSERT_FALSE(this__->inputSinkCompleted_); - ASSERT_FALSE(this__->inputSinkError_); - this__->inputSinkError_ = ex; - // We now have two possible situations: - // * `other_->inputSink_` is not empty, we forward the signal, - // * otherwise, we only record the signal and wait for appropriate - // sequence of calls to happen on the other end. - if (other__->inputSink_) { - other__->inputSink_->onError(std::move(ex)); - } - })); - EXPECT_CALL(*checkpoint, Call()) - .InSequence(s) - .WillOnce(Invoke([checkpoint]() { - Mock::VerifyAndClearExpectations(checkpoint); - delete checkpoint; - })); - - return outputSink; -} -} diff --git a/test/test_utils/InlineConnection.h b/test/test_utils/InlineConnection.h deleted file mode 100644 index b95211fd4..000000000 --- a/test/test_utils/InlineConnection.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#pragma once - -#include -#include "src/DuplexConnection.h" -#include "src/internal/ReactiveStreamsCompat.h" - -namespace rsocket { - -/// An intra-thread implementation of DuplexConnection that synchronously passes -/// signals to the other connection it was connected to. -/// -/// Accessing an input or an output of the InlineConnection before it has been -/// connected to another instance yields an undefined behaviour. Both connected -/// instances must outlive any of the inputs or outputs obtained from them. -/// -/// This class is not thread-safe. -class InlineConnection : public DuplexConnection { - public: - InlineConnection() = default; - - // Noncopyable - InlineConnection(const InlineConnection&) = delete; - InlineConnection& operator=(const InlineConnection&) = delete; - // Nonmovable - InlineConnection(InlineConnection&&) = delete; - InlineConnection& operator=(InlineConnection&&) = delete; - ~InlineConnection(); - /// Connects this end of a DuplexConnection to another one. - /// - /// This method may be invoked at most once per lifetime of the object and - /// implicitly connects the `other` to this instance. Must be invoked before - /// accessing input or output of the connection. - void connectTo(InlineConnection& other); - - void setInput(std::shared_ptr>> - inputSink) override; - - std::shared_ptr>> getOutput() - override; - - private: - // This is to allow 2 instances of InlineConnection to point at each other - // and write assertions about each other even if one InlineConnection - // instance is destroyed, the other can validate state of the first one. - // This is the case when client ReactiveSocket instance will be connected - // to server ReactiveSocket over 2 instances of InlineConnection. When one - // instance of ReactiveSocket is destroyed, the second one can still get - // cleanly destroyed with all the validations in the terminating methods - // (onComplete/onError/cancel) of the associated InlineConnection - struct SharedState { - std::shared_ptr>> inputSink_; - /// @{ - /// Store pending terminal signal that would be sent to the input, if it was - /// set at the time the signal was issued. Both fields being false indicate - /// a - /// situation where no terminal signal has been sent. - bool inputSinkCompleted_{false}; - folly::exception_wrapper inputSinkError_; - /// @} - std::shared_ptr outputSubscription_; - bool instanceTerminated_{false}; - }; - - std::shared_ptr other_; - std::shared_ptr this_{std::make_shared()}; - std::shared_ptr>> outputSink_; -}; -} diff --git a/test/test_utils/InlineConnectionTest.cpp b/test/test_utils/InlineConnectionTest.cpp deleted file mode 100644 index 4dfb8cd81..000000000 --- a/test/test_utils/InlineConnectionTest.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include -#include -#include -#include -#include "InlineConnection.h" -#include "test/streams/Mocks.h" - -using namespace ::testing; -using namespace ::rsocket; - -TEST(InlineConnectionTest, PingPong) { - // InlineConnection forward appropriate calls in-line, hence the order of mock - // calls will be deterministic. - Sequence s; - std::array end; - end[0].connectTo(end[1]); - - std::array>>, 2> - input; - input[0] = std::make_shared>>(); - input[1] = std::make_shared>>(); - std::array>>, 2> - output; - - std::array, 2> outputSub; - outputSub[0] = std::make_shared(); - outputSub[1] = std::make_shared(); - std::array, 2> inputSub; - - for (size_t i = 0; i < 2; ++i) { - EXPECT_CALL(*input[i], onSubscribe_(_)) - .InSequence(s) - .WillRepeatedly(Invoke([&inputSub, i]( - std::shared_ptr sub) { inputSub[i] = sub; })); - } - - // Register inputs and outputs in two different orders for two different - // "directions" of the connection. - end[0].setInput(input[0]); - output[1] = end[1].getOutput(); - output[1]->onSubscribe(outputSub[1]); - output[0] = end[0].getOutput(); - output[0]->onSubscribe(outputSub[0]); - end[1].setInput(input[1]); - - auto originalPayload = folly::IOBuf::copyBuffer("request1"); - EXPECT_CALL(*outputSub[1], request_(1)).InSequence(s); - EXPECT_CALL(*outputSub[0], request_(1)) - .InSequence(s) - .WillOnce( - Invoke([&](size_t) { output[0]->onNext(originalPayload->clone()); })); - EXPECT_CALL(*input[1], onNext_(_)) - .InSequence(s) - .WillOnce(Invoke([&](std::unique_ptr& payload) { - ASSERT_TRUE(folly::IOBufEqual()(originalPayload, payload)); - // We know Subscription::request(1) has been called on the corresponding - // subscription. - output[1]->onNext(std::move(payload)); - })); - EXPECT_CALL(*input[0], onNext_(_)) - .InSequence(s) - .WillOnce(Invoke([&](std::unique_ptr& payload) { - // We know Subscription::request(1) has been called on the corresponding - // subscription. - ASSERT_TRUE(folly::IOBufEqual()(originalPayload, payload)); - })); - - EXPECT_CALL(*outputSub[1], cancel_()) - .InSequence(s) - .WillOnce(Invoke([&]() { - output[1]->onComplete(); // "Unsubscribe handshake". Calls - // input[0]->onComplete() - inputSub[1]->cancel(); // Close the other direction. // equivalent to - // outputSub[0]->cancel(); - })); - EXPECT_CALL(*input[0], onComplete_()) - .InSequence(s); // This finishes the handshake. - EXPECT_CALL(*outputSub[0], cancel_()) - .InSequence(s) - .WillOnce(Invoke([&]() { - output[0]->onComplete(); // "Unsubscribe handshake". Calls - // input[1]->onComplete() - })); - EXPECT_CALL(*input[1], onComplete_()) - .InSequence(s); // This finishes the handshake. - - // Make sure flow control allows us to send response back to this end. - inputSub[0]->request(1); - // Perform the ping - inputSub[1]->request(1); - // Let's shut everything down from the end that requested the ping. - inputSub[0]->cancel(); // equivalent to outputSub[1]->cancel() -} From 2dce62c2c746f81d7da7d5b9259761d62ebd2355 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Wed, 17 May 2017 09:50:02 -0700 Subject: [PATCH 17/31] Start of RequestResponse Unit Test (#446) RequestResponse Unit Test --- CMakeLists.txt | 3 +- src/RSocketServer.cpp | 14 +++++--- test/RSocketClientServerTest.cpp | 49 +++------------------------ test/RSocketTests.h | 52 +++++++++++++++++++++++++++++ test/RequestResponseTest.cpp | 48 ++++++++++++++++++++++++++ yarpl/include/yarpl/single/Single.h | 23 +++++++++++++ 6 files changed, 138 insertions(+), 51 deletions(-) create mode 100644 test/RSocketTests.h create mode 100644 test/RequestResponseTest.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e9d86023..525276393 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,7 +251,8 @@ add_executable( test/test_utils/MockStats.h test/internal/FollyKeepaliveTimerTest.cpp test/internal/AllowanceSemaphoreTest.cpp - test/statemachine/StreamStateTest.cpp + test/RSocketTests.h + test/RequestResponseTest.cpp ) target_link_libraries( diff --git a/src/RSocketServer.cpp b/src/RSocketServer.cpp index 0fd99ab01..ae415e1a0 100644 --- a/src/RSocketServer.cpp +++ b/src/RSocketServer.cpp @@ -32,9 +32,11 @@ class RSocketServerConnectionHandler : public virtual RSocketConnectionHandler { // Enqueue another event to remove and delete it. We cannot delete // the RSocketStateMachine now as it still needs to finish processing // the onClosed handlers in the stack frame above us. - executor_.add([this, stateMachine] { - server_->removeConnection(stateMachine); - }); + // TODO => Ben commented out to get unit tests working + // executor_.add([this, stateMachine] { + // server_->removeConnection(stateMachine); + // }); + }); server_->addConnection(std::move(stateMachine), executor_); @@ -78,9 +80,11 @@ RSocketServer::~RSocketServer() { } } + // TODO => Ben commented out to get unit tests working + // Wait for all ReactiveSockets to close. - shutdown_->wait(); - DCHECK(sockets_.lock()->empty()); + // shutdown_->wait(); + // DCHECK(sockets_.lock()->empty()); // All requests are fully finished, worker threads can be safely killed off. } diff --git a/test/RSocketClientServerTest.cpp b/test/RSocketClientServerTest.cpp index 3e71824e3..b382ce121 100644 --- a/test/RSocketClientServerTest.cpp +++ b/test/RSocketClientServerTest.cpp @@ -3,55 +3,14 @@ #include #include -#include - -#include "src/RSocket.h" -#include "src/transports/tcp/TcpConnectionAcceptor.h" -#include "src/transports/tcp/TcpConnectionFactory.h" -#include "test/handlers/HelloStreamRequestHandler.h" +#include "RSocketTests.h" using namespace rsocket; using namespace rsocket::tests; - -namespace { - -std::random_device device; -std::uniform_int_distribution dis(9000, 10000); - -// Helps prevent against port collisions. -uint16_t randPort() { - auto const n = dis(device); - return static_cast(n); -} - -std::unique_ptr makeServer(uint16_t port) { - TcpConnectionAcceptor::Options opts; - opts.threads = 2; - opts.port = port; - - // RSocket server accepting on TCP. - auto rs = RSocket::createServer( - std::make_unique(std::move(opts))); - - // Global request handler. - auto handler = std::make_shared(); - - rs->start([handler](auto r) { return handler; }); - - return rs; -} - -std::unique_ptr makeClient(uint16_t port) { - folly::SocketAddress address; - address.setFromHostPort("localhost", port); - return RSocket::createClient( - std::make_unique(std::move(address))); -} - -} // namespace +using namespace rsocket::tests::client_server; TEST(RSocketClientServer, StartAndShutdown) { - makeServer(randPort()); + makeServer(randPort(), std::make_shared()); makeClient(randPort()); } @@ -59,7 +18,7 @@ TEST(RSocketClientServer, StartAndShutdown) { // wrong EventBase for the AsyncSocket. TEST(RSocketClientServer, DISABLED_SimpleConnect) { auto const port = randPort(); - auto server = makeServer(port); + auto server = makeServer(port, std::make_shared()); auto client = makeClient(port); auto requester = client->connect().get(); } diff --git a/test/RSocketTests.h b/test/RSocketTests.h new file mode 100644 index 000000000..2a615ff6b --- /dev/null +++ b/test/RSocketTests.h @@ -0,0 +1,52 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include +#include + +#include + +#include "src/RSocket.h" +#include "src/transports/tcp/TcpConnectionAcceptor.h" +#include "src/transports/tcp/TcpConnectionFactory.h" +#include "test/handlers/HelloStreamRequestHandler.h" + +namespace rsocket { +namespace tests { +namespace client_server { + +// Helps prevent against port collisions. +inline uint16_t randPort() { + std::random_device device; + std::uniform_int_distribution dis(9000, 65000); + + auto const n = dis(device); + return static_cast(n); +} + +inline std::unique_ptr makeServer( + uint16_t port, + std::shared_ptr responder) { + TcpConnectionAcceptor::Options opts; + opts.threads = 2; + opts.port = port; + + // RSocket server accepting on TCP. + auto rs = RSocket::createServer( + std::make_unique(std::move(opts))); + + rs->start([responder](auto r) { return responder; }); + + return rs; +} + +inline std::unique_ptr makeClient(uint16_t port) { + folly::SocketAddress address; + address.setFromHostPort("localhost", port); + return RSocket::createClient( + std::make_unique(std::move(address))); +} +} +} +} // namespace \ No newline at end of file diff --git a/test/RequestResponseTest.cpp b/test/RequestResponseTest.cpp new file mode 100644 index 000000000..64c8166f1 --- /dev/null +++ b/test/RequestResponseTest.cpp @@ -0,0 +1,48 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include +#include + +#include "RSocketTests.h" +#include "yarpl/Single.h" + +using namespace yarpl; +using namespace yarpl::single; +using namespace rsocket; +using namespace rsocket::tests; +using namespace rsocket::tests::client_server; +using namespace std::chrono_literals; + +namespace { +class TestHandler : public rsocket::RSocketResponder { + public: + Reference> handleRequestResponse( + Payload request, + StreamId streamId) override { + std::cout << "HelloRequestResponseRequestHandler.handleRequestResponse " + << request << std::endl; + + // string from payload data + auto requestString = request.moveDataToString(); + + return Single::create([name = std::move(requestString)]( + auto subscriber) { + + std::stringstream ss; + ss << "Hello " << name << "!"; + std::string s = ss.str(); + subscriber->onSuccess(Payload(s, "metadata")); + }); + } +}; +} + +TEST(RequestResponseTest, StartAndShutdown) { + auto port = randPort(); + auto server = makeServer(port, std::make_shared()); + auto client = makeClient(port); + auto requester = client->connect().get(); + requester->requestResponse(Payload("Jane"))->subscribeBlocking([](Payload p) { + std::cout << "Received >> " << p.moveDataToString() << std::endl; + }); +} \ No newline at end of file diff --git a/yarpl/include/yarpl/single/Single.h b/yarpl/include/yarpl/single/Single.h index b562366c7..b8bccde49 100644 --- a/yarpl/include/yarpl/single/Single.h +++ b/yarpl/include/yarpl/single/Single.h @@ -1,5 +1,6 @@ #pragma once +#include #include "../Refcounted.h" #include "SingleObserver.h" #include "SingleObservers.h" @@ -53,6 +54,28 @@ class Single : public virtual Refcounted { subscribe(SingleObservers::create(next, error)); } + /** + * Blocking subscribe that accepts lambdas. + * + * This blocks the current thread waiting on the response. + * + * @param success + */ + template < + typename Success, + typename = typename std::enable_if< + std::is_callable::value>::type> + void subscribeBlocking(Success&& next) { + auto waiting_ = std::make_shared>(); + subscribe(SingleObservers::create( + [ next = std::forward(next), waiting_ ](T t) { + next(std::move(t)); + waiting_->post(); + })); + // TODO get errors and throw if one is received + waiting_->wait(); + } + template < typename OnSubscribe, typename = typename std::enable_if Date: Wed, 17 May 2017 16:08:52 -0700 Subject: [PATCH 18/31] Disable ASAN for yarpl-tests on macOS (#449) It has never worked for the yarpl tests, so I'm confused as to why it was enabled. Here's what I get 100% of the time when running yarpl/yarpl-tests: $ ./yarpl/yarpl-tests [==========] Running 51 tests from 7 test cases. [----------] Global test environment set-up. [----------] 17 tests from Observable [ RUN ] Observable.SingleOnNext [ OK ] Observable.SingleOnNext (98 ms) [ RUN ] Observable.MultiOnNext [ OK ] Observable.MultiOnNext (0 ms) [ RUN ] Observable.OnError [ OK ] Observable.OnError (0 ms) ASAN:DEADLYSIGNAL ================================================================= ==69355==ERROR: AddressSanitizer: SEGV on unknown address 0x61100007f740 (pc 0x000100b2c207 bp 0x7fff5f4fe260 sp 0x7fff5f4fe230 T0) #0 0x100b2c206 in testing::TestCase::GetMutableTestInfo(int) (yarpl-tests:x86_64+0x10042b206) #1 0x100b2c57e in testing::TestCase::Run() (yarpl-tests:x86_64+0x10042b57e) #2 0x100b3ab5b in testing::internal::UnitTestImpl::RunAllTests() (yarpl-tests:x86_64+0x100439b5b) #3 0x100b6a5f9 in bool testing::internal::HandleSehExceptionsInMethodIfSupported(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (yarpl-tests:x86_64+0x1004695f9) #4 0x100b3a566 in bool testing::internal::HandleExceptionsInMethodIfSupported(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (yarpl-tests:x86_64+0x100439566) #5 0x100b3a417 in testing::UnitTest::Run() (yarpl-tests:x86_64+0x100439417) #6 0x10070344e in RUN_ALL_TESTS() (yarpl-tests:x86_64+0x10000244e) #7 0x10070321f in main (yarpl-tests:x86_64+0x10000221f) #8 0x7fffc67b8234 in start (libdyld.dylib:x86_64+0x5234) ==69355==Register values: rax = 0x00006110000098c0 rbx = 0x00007fff5f4fe840 rcx = 0x000000000000ebd0 rdx = 0x000000000000ebd0 rdi = 0x000061200000b000 rsi = 0x0000000000000012 rbp = 0x00007fff5f4fe260 rsp = 0x00007fff5f4fe230 r8 = 0x0000000000000000 r9 = 0x000000010298b760 r10 = 0x0000000000000000 r11 = 0x0000000000012068 r12 = 0x0000000000000000 r13 = 0x0000000000000000 r14 = 0x0000000000000000 r15 = 0x0000000000000000 AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV (yarpl-tests:x86_64+0x10042b206) in testing::TestCase::GetMutableTestInfo(int) ==69355==ABORTING [1] 69355 abort ./yarpl/yarpl-tests --- yarpl/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/yarpl/CMakeLists.txt b/yarpl/CMakeLists.txt index 66e8e4095..d67d3fd6b 100644 --- a/yarpl/CMakeLists.txt +++ b/yarpl/CMakeLists.txt @@ -19,6 +19,12 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-weak-vtables -Wno-padded") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer") +# The yarpl-tests binary constantly fails with an ASAN error in gtest internal +# code on macOS. +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-sanitize=address") +endif() + # Configuration for Debug build mode. #set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") From 723029832a864ffbccaaa220f77b68fb885f7816 Mon Sep 17 00:00:00 2001 From: Alexander Malyshev Date: Thu, 18 May 2017 00:46:39 -0700 Subject: [PATCH 19/31] Make yarpl depend on pthreads (#452) Needed this change to build yarpl on Arch Linux, otherwise the thread scheduler code fails to link. --- yarpl/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/yarpl/CMakeLists.txt b/yarpl/CMakeLists.txt index d67d3fd6b..c1a32a361 100644 --- a/yarpl/CMakeLists.txt +++ b/yarpl/CMakeLists.txt @@ -86,8 +86,14 @@ target_include_directories( yarpl PUBLIC "${PROJECT_SOURCE_DIR}/include" # allow include paths such as "yarpl/observable.h" PUBLIC "${PROJECT_SOURCE_DIR}/src" # allow include paths such as "yarpl/flowable/FlowableRange.h" + ) + +target_link_libraries( + yarpl + ${CMAKE_THREAD_LIBS_INIT} ) + # Executable for Experimenting add_executable( yarpl-playground From 3542381e00be65747a802265bb0ae03fb7781b32 Mon Sep 17 00:00:00 2001 From: Alexander Malyshev Date: Thu, 18 May 2017 01:17:39 -0700 Subject: [PATCH 20/31] Hopefully fix RSocketStateMachine leak (#451) Seems like we need to close it in ~RSocketRequester. LSAN warnings stop for me locally, but I'm not 100% sure of the logic here. --- src/RSocketRequester.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/RSocketRequester.cpp b/src/RSocketRequester.cpp index 383871e97..b56dd73a3 100644 --- a/src/RSocketRequester.cpp +++ b/src/RSocketRequester.cpp @@ -35,6 +35,7 @@ RSocketRequester::RSocketRequester( RSocketRequester::~RSocketRequester() { LOG(INFO) << "RSocketRequester => destroy"; + stateMachine_->close(folly::exception_wrapper(), StreamCompletionSignal::CONNECTION_END); } yarpl::Reference> From 82608ce9b7feafd67fb93314135f40074aa73a1e Mon Sep 17 00:00:00 2001 From: Alexander Malyshev Date: Thu, 18 May 2017 01:42:00 -0700 Subject: [PATCH 21/31] Fix build on Arch (#450) Missing gflags includes strikes again --- benchmarks/RequestResponseLatency.cpp | 2 ++ benchmarks/RequestResponseThroughput.cpp | 2 ++ benchmarks/StreamThroughput.cpp | 2 ++ 3 files changed, 6 insertions(+) diff --git a/benchmarks/RequestResponseLatency.cpp b/benchmarks/RequestResponseLatency.cpp index 2a1b8e534..97db5403c 100644 --- a/benchmarks/RequestResponseLatency.cpp +++ b/benchmarks/RequestResponseLatency.cpp @@ -9,6 +9,8 @@ #include #include #include +#include + #include "src/RSocket.h" #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" diff --git a/benchmarks/RequestResponseThroughput.cpp b/benchmarks/RequestResponseThroughput.cpp index f3af74563..67c452a11 100644 --- a/benchmarks/RequestResponseThroughput.cpp +++ b/benchmarks/RequestResponseThroughput.cpp @@ -9,6 +9,8 @@ #include #include #include +#include + #include "src/RSocket.h" #include "src/transports/tcp/TcpConnectionFactory.h" #include "yarpl/Flowable.h" diff --git a/benchmarks/StreamThroughput.cpp b/benchmarks/StreamThroughput.cpp index a434c1717..a168e8278 100644 --- a/benchmarks/StreamThroughput.cpp +++ b/benchmarks/StreamThroughput.cpp @@ -9,6 +9,8 @@ #include #include #include +#include + #include "src/RSocket.h" #include "src/temporary_home/OldNewBridge.h" #include "src/transports/tcp/TcpConnectionFactory.h" From 2e7760c4d24987c4831f07689de843b5887cb508 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Thu, 18 May 2017 09:54:42 +0100 Subject: [PATCH 22/31] Threading safety (#453) * Adding automatic thread scheduling for application code calls * formatting * formatting * adding comments --- CMakeLists.txt | 8 +- src/RSocketRequester.cpp | 109 ++++++++++--------- src/RSocketServer.cpp | 21 ++-- src/internal/ScheduledRSocketResponder.cpp | 81 ++++++++++++++ src/internal/ScheduledRSocketResponder.h | 49 +++++++++ src/internal/ScheduledSingleObserver.h | 68 ++++++++++++ src/internal/ScheduledSubscriber.h | 120 +++++++++++++++++++++ src/internal/ScheduledSubscription.cpp | 36 +++++++ src/internal/ScheduledSubscription.h | 32 ++++++ 9 files changed, 465 insertions(+), 59 deletions(-) create mode 100644 src/internal/ScheduledRSocketResponder.cpp create mode 100644 src/internal/ScheduledRSocketResponder.h create mode 100644 src/internal/ScheduledSingleObserver.h create mode 100644 src/internal/ScheduledSubscriber.h create mode 100644 src/internal/ScheduledSubscription.cpp create mode 100644 src/internal/ScheduledSubscription.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 525276393..6fb2f4230 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -216,7 +216,13 @@ add_library( src/framing/FrameSerializer_v0_1.cpp src/framing/FrameSerializer_v0_1.h src/framing/FrameSerializer_v1_0.cpp - src/framing/FrameSerializer_v1_0.h) + src/framing/FrameSerializer_v1_0.h + src/internal/ScheduledSubscription.cpp + src/internal/ScheduledSubscription.h + src/internal/ScheduledSubscriber.h + src/internal/ScheduledRSocketResponder.cpp + src/internal/ScheduledRSocketResponder.h + src/internal/ScheduledSingleObserver.h) target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/yarpl/include") target_include_directories(ReactiveSocket PUBLIC "${PROJECT_SOURCE_DIR}/yarpl/src") diff --git a/src/RSocketRequester.cpp b/src/RSocketRequester.cpp index b56dd73a3..e24243254 100644 --- a/src/RSocketRequester.cpp +++ b/src/RSocketRequester.cpp @@ -1,11 +1,10 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include "RSocketRequester.h" - #include "src/temporary_home/OldNewBridge.h" #include "yarpl/Flowable.h" - #include +#include "internal/ScheduledSubscriber.h" using namespace rsocket; using namespace folly; @@ -41,24 +40,27 @@ RSocketRequester::~RSocketRequester() { yarpl::Reference> RSocketRequester::requestChannel( yarpl::Reference> - requestStream) { - auto& eb = eventBase_; - auto srs = stateMachine_; + requestStream) { return yarpl::flowable::Flowables::fromPublisher([ - &eb, - requestStream = std::move(requestStream), - srs = std::move(srs) - ](yarpl::Reference> subscriber) mutable { - eb.runInEventBaseThread([ + eb = &eventBase_, requestStream = std::move(requestStream), - subscriber = std::move(subscriber), - srs = std::move(srs) + srs = stateMachine_ + ](yarpl::Reference> + subscriber) mutable { + eb->runInEventBaseThread([ + requestStream = std::move(requestStream), + subscriber = std::move(subscriber), + srs = std::move(srs), + eb ]() mutable { auto responseSink = srs->streamsFactory().createChannelRequester( - std::move(std::move(subscriber))); - // TODO the responseSink needs to be wrapped with thread scheduling + yarpl::make_ref>( + std::move(subscriber), *eb)); + // responseSink is wrapped with thread scheduling // so all emissions happen on the right thread - requestStream->subscribe(std::move(responseSink)); + requestStream->subscribe( + yarpl::make_ref>(std::move(responseSink), + *eb)); }); }); } @@ -66,17 +68,21 @@ RSocketRequester::requestChannel( yarpl::Reference> RSocketRequester::requestStream(Payload request) { return yarpl::flowable::Flowables::fromPublisher([ - eb = &eventBase_, - request = std::move(request), - srs = stateMachine_ - ](yarpl::Reference> subscriber) mutable { - eb->runInEventBaseThread([ + eb = &eventBase_, request = std::move(request), - subscriber = std::move(subscriber), - srs = std::move(srs) + srs = stateMachine_ + ](yarpl::Reference> + subscriber) mutable { + eb->runInEventBaseThread([ + request = std::move(request), + subscriber = std::move(subscriber), + srs = std::move(srs), + eb ]() mutable { srs->streamsFactory().createStreamRequester( - std::move(request), std::move(subscriber)); + std::move(request), + yarpl::make_ref>( + std::move(subscriber), *eb)); }); }); } @@ -88,11 +94,11 @@ RSocketRequester::requestResponse(Payload request) { public: SingleToSubscriberBridge( yarpl::Reference> - singleSubscriber) + singleSubscriber) : singleSubscriber_{std::move(singleSubscriber)} {} void onSubscribe(yarpl::Reference - subscription) noexcept override { + subscription) override { // register cancellation callback with SingleSubscriber auto singleSubscription = yarpl::single::SingleSubscriptions::create( [subscription] { subscription->cancel(); }); @@ -100,15 +106,19 @@ RSocketRequester::requestResponse(Payload request) { singleSubscriber_->onSubscribe(std::move(singleSubscription)); // kick off request (TODO this is not needed once we use the proper type) + // this is executed on the correct subscription's eventBase subscription->request(1); } - void onNext(Payload payload) noexcept override { + + void onNext(Payload payload) override { singleSubscriber_->onSuccess(std::move(payload)); } - void onComplete() noexcept override { + + void onComplete() override { // ignore as we're done once we get a single value back } - void onError(std::exception_ptr ex) noexcept override { + + void onError(std::exception_ptr ex) override { DLOG(ERROR) << folly::exceptionStr(ex); singleSubscriber_->onError(std::move(ex)); } @@ -118,32 +128,33 @@ RSocketRequester::requestResponse(Payload request) { }; return yarpl::single::Single::create( - [ eb = &eventBase_, request = std::move(request), srs = stateMachine_ ]( - yarpl::Reference> - subscriber) mutable { - eb->runInEventBaseThread([ - request = std::move(request), - subscriber = std::move(subscriber), - srs = std::move(srs) - ]() mutable { - srs->streamsFactory().createRequestResponseRequester( - std::move(request), - make_ref(std::move(subscriber))); - }); - }); + [eb = &eventBase_, request = std::move(request), srs = stateMachine_]( + yarpl::Reference> + subscriber) mutable { + eb->runInEventBaseThread([ + request = std::move(request), + subscriber = std::move(subscriber), + srs = std::move(srs) + ]() mutable { + srs->streamsFactory().createRequestResponseRequester( + std::move(request), + make_ref(std::move(subscriber))); + }); + }); } yarpl::Reference> RSocketRequester::fireAndForget( rsocket::Payload request) { return yarpl::single::Single::create([ - eb = &eventBase_, - request = std::move(request), - srs = stateMachine_ - ](yarpl::Reference> subscriber) mutable { - eb->runInEventBaseThread([ + eb = &eventBase_, request = std::move(request), - subscriber = std::move(subscriber), - srs = std::move(srs) + srs = stateMachine_ + ](yarpl::Reference> + subscriber) mutable { + eb->runInEventBaseThread([ + request = std::move(request), + subscriber = std::move(subscriber), + srs = std::move(srs) ]() mutable { // TODO pass in SingleSubscriber for underlying layers to // call onSuccess/onError once put on network @@ -156,7 +167,7 @@ yarpl::Reference> RSocketRequester::fireAndForget( void RSocketRequester::metadataPush(std::unique_ptr metadata) { eventBase_.runInEventBaseThread( - [ this, metadata = std::move(metadata) ]() mutable { + [this, metadata = std::move(metadata)]() mutable { stateMachine_->metadataPush(std::move(metadata)); }); } diff --git a/src/RSocketServer.cpp b/src/RSocketServer.cpp index ae415e1a0..4ce85b95c 100644 --- a/src/RSocketServer.cpp +++ b/src/RSocketServer.cpp @@ -1,11 +1,10 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include "RSocketServer.h" - #include - #include "RSocketConnectionHandler.h" #include "src/statemachine/RSocketStateMachine.h" +#include "src/internal/ScheduledRSocketResponder.h" using namespace rsocket; @@ -16,12 +15,16 @@ class RSocketServerConnectionHandler : public virtual RSocketConnectionHandler { RSocketServerConnectionHandler( RSocketServer* server, OnAccept onAccept, - folly::Executor& executor) - : server_{server}, onAccept_{std::move(onAccept)}, executor_{executor} {} + folly::EventBase& eventBase) + : server_{server}, onAccept_{std::move(onAccept)}, eventBase_{eventBase} {} std::shared_ptr getHandler( std::shared_ptr request) override { - return onAccept_(std::move(request)); + auto responder = onAccept_(std::move(request)); + if(responder) { + return std::make_shared(std::move(responder), eventBase_); + } + return nullptr; } void manageSocket( @@ -39,13 +42,13 @@ class RSocketServerConnectionHandler : public virtual RSocketConnectionHandler { }); - server_->addConnection(std::move(stateMachine), executor_); + server_->addConnection(std::move(stateMachine), eventBase_); } private: RSocketServer* server_; OnAccept onAccept_; - folly::Executor& executor_; + folly::EventBase& eventBase_; }; RSocketServer::RSocketServer( @@ -99,12 +102,12 @@ void RSocketServer::start(OnAccept onAccept) { lazyAcceptor_ ->start([ this, onAccept = std::move(onAccept) ]( - std::unique_ptr conn, folly::Executor & executor) { + std::unique_ptr conn, folly::EventBase& eventBase) { LOG(INFO) << "Going to accept duplex connection"; auto connectionHandler_ = std::make_shared( - this, onAccept, executor); + this, onAccept, eventBase); // FIXME(alexanderm): This isn't thread safe acceptor_.accept(std::move(conn), std::move(connectionHandler_)); diff --git a/src/internal/ScheduledRSocketResponder.cpp b/src/internal/ScheduledRSocketResponder.cpp new file mode 100644 index 000000000..a41bd7152 --- /dev/null +++ b/src/internal/ScheduledRSocketResponder.cpp @@ -0,0 +1,81 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "ScheduledRSocketResponder.h" +#include +#include "ScheduledSubscriber.h" +#include "ScheduledSingleObserver.h" + +namespace rsocket { + +ScheduledRSocketResponder::ScheduledRSocketResponder( + std::shared_ptr inner, + folly::EventBase& eventBase) : inner_(std::move(inner)), + eventBase_(eventBase) {} + +yarpl::Reference> +ScheduledRSocketResponder::handleRequestResponse( + Payload request, + StreamId streamId) { + auto innerFlowable = inner_->handleRequestResponse(std::move(request), + streamId); + return yarpl::single::Singles::create( + [innerFlowable = std::move(innerFlowable), eventBase = &eventBase_]( + yarpl::Reference> + observer) { + innerFlowable->subscribe(yarpl::make_ref< + ScheduledSingleObserver> + (std::move(observer), *eventBase)); + }); +} + +yarpl::Reference> +ScheduledRSocketResponder::handleRequestStream( + Payload request, + StreamId streamId) { + auto innerFlowable = inner_->handleRequestStream(std::move(request), + streamId); + return yarpl::flowable::Flowables::fromPublisher( + [innerFlowable = std::move(innerFlowable), eventBase = &eventBase_]( + yarpl::Reference> + subscriber) { + innerFlowable->subscribe(yarpl::make_ref< + ScheduledSubscriber> + (std::move(subscriber), *eventBase)); + }); +} + +yarpl::Reference> +ScheduledRSocketResponder::handleRequestChannel( + Payload request, + yarpl::Reference> + requestStream, + StreamId streamId) { + auto requestStreamFlowable = yarpl::flowable::Flowables::fromPublisher( + [requestStream = std::move(requestStream), eventBase = &eventBase_]( + yarpl::Reference> + subscriber) { + requestStream->subscribe(yarpl::make_ref< + ScheduledSubscriptionSubscriber> + (std::move(subscriber), *eventBase)); + }); + auto innerFlowable = inner_->handleRequestChannel(std::move(request), + std::move( + requestStreamFlowable), + streamId); + return yarpl::flowable::Flowables::fromPublisher( + [innerFlowable = std::move(innerFlowable), eventBase = &eventBase_]( + yarpl::Reference> + subscriber) { + innerFlowable->subscribe(yarpl::make_ref< + ScheduledSubscriber> + (std::move(subscriber), *eventBase)); + }); +} + +void ScheduledRSocketResponder::handleFireAndForget( + Payload request, + StreamId streamId) { + inner_->handleFireAndForget(std::move(request), streamId); +} + +} // rsocket diff --git a/src/internal/ScheduledRSocketResponder.h b/src/internal/ScheduledRSocketResponder.h new file mode 100644 index 000000000..1756e85da --- /dev/null +++ b/src/internal/ScheduledRSocketResponder.h @@ -0,0 +1,49 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include "src/RSocketResponder.h" + +namespace folly { +class EventBase; +} + +namespace rsocket { + +// +// A decorated RSocketResponder object which schedules the calls from +// application code to RSocket on the provided EventBase +// +class ScheduledRSocketResponder : public RSocketResponder { + public: + ScheduledRSocketResponder( + std::shared_ptr inner, + folly::EventBase& eventBase); + + yarpl::Reference> + handleRequestResponse( + Payload request, + StreamId streamId) override; + + yarpl::Reference> + handleRequestStream( + Payload request, + StreamId streamId) override; + + yarpl::Reference> + handleRequestChannel( + Payload request, + yarpl::Reference> + requestStream, + StreamId streamId) override; + + void handleFireAndForget( + Payload request, + StreamId streamId) override; + + private: + std::shared_ptr inner_; + folly::EventBase& eventBase_; +}; + +} // rsocket diff --git a/src/internal/ScheduledSingleObserver.h b/src/internal/ScheduledSingleObserver.h new file mode 100644 index 000000000..4a20d1090 --- /dev/null +++ b/src/internal/ScheduledSingleObserver.h @@ -0,0 +1,68 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include "yarpl/single/SingleObserver.h" +#include "yarpl/single/Singles.h" +#include + + +namespace rsocket { + +// +// A decorated RSocketResponder object which schedules the calls from +// application code to RSocket on the provided EventBase +// This class should be used to wrap a SingleObserver returned to the +// application code so that calls to on{Subscribe,Success,Error} are +// scheduled on the right EventBase. +// +template +class ScheduledSingleObserver : public yarpl::single::SingleObserver { + public: + ScheduledSingleObserver( + yarpl::Reference> observer, + folly::EventBase& eventBase) : + inner_(std::move(observer)), eventBase_(eventBase) {} + + void onSubscribe( + yarpl::Reference subscription) override { + if (eventBase_.isInEventBaseThread()) { + inner_->onSubscribe(std::move(subscription)); + } else { + eventBase_.runInEventBaseThread( + [inner = inner_, subscription = std::move(subscription)] + { + inner->onSubscribe(std::move(subscription)); + }); + } + } + + // No further calls to the subscription after this method is invoked. + void onSuccess(T value) override { + if (eventBase_.isInEventBaseThread()) { + inner_->onSuccess(std::move(value)); + } else { + eventBase_.runInEventBaseThread( + [inner = inner_, value = std::move(value)]() mutable { + inner->onSuccess(std::move(value)); + }); + } + } + + // No further calls to the subscription after this method is invoked. + void onError(const std::exception_ptr ex) override { + if (eventBase_.isInEventBaseThread()) { + inner_->onError(std::move(ex)); + } else { + eventBase_.runInEventBaseThread( + [inner = inner_, ex = std::move(ex)]() mutable { + inner->onError(std::move(ex)); + }); + } + } + + private: + yarpl::Reference> inner_; + folly::EventBase& eventBase_; +}; +} // rsocket diff --git a/src/internal/ScheduledSubscriber.h b/src/internal/ScheduledSubscriber.h new file mode 100644 index 000000000..47868993d --- /dev/null +++ b/src/internal/ScheduledSubscriber.h @@ -0,0 +1,120 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include "ScheduledSubscription.h" +#include "yarpl/flowable/Subscriber.h" +#include + +namespace rsocket { + +// +// A decorator of the Subscriber object which schedules the method calls on the +// provided EventBase. +// This class should be used to wrap a Subscriber returned to the application +// code so that calls to on{Subscribe,Next,Complete,Error} are scheduled on the +// right EventBase. +// + +template +class ScheduledSubscriber : public yarpl::flowable::Subscriber { + public: + ScheduledSubscriber( + yarpl::Reference> inner, + folly::EventBase& eventBase) : inner_(std::move(inner)), + eventBase_(eventBase) {} + + void onSubscribe( + yarpl::Reference subscription) override { + if (eventBase_.isInEventBaseThread()) { + inner_->onSubscribe(std::move(subscription)); + } else { + eventBase_.runInEventBaseThread( + [inner = inner_, subscription = std::move(subscription)] + { + inner->onSubscribe(std::move(subscription)); + }); + } + } + + // No further calls to the subscription after this method is invoked. + void onComplete() override { + if (eventBase_.isInEventBaseThread()) { + inner_->onComplete(); + } else { + eventBase_.runInEventBaseThread( + [inner = inner_] + { + inner->onComplete(); + }); + } + } + + void onError(const std::exception_ptr ex) override { + if (eventBase_.isInEventBaseThread()) { + inner_->onError(std::move(ex)); + } else { + eventBase_.runInEventBaseThread( + [inner = inner_, ex = std::move(ex)]() mutable { + inner->onError(std::move(ex)); + }); + } + } + + void onNext(T value) override { + if (eventBase_.isInEventBaseThread()) { + inner_->onNext(std::move(value)); + } else { + eventBase_.runInEventBaseThread( + [inner = inner_, value = std::move(value)]() mutable { + inner->onNext(std::move(value)); + }); + } + } + + private: + yarpl::Reference> inner_; + folly::EventBase& eventBase_; +}; + +// +// A decorator of a Subscriber object which schedules the method calls on the +// provided EventBase. +// This class is to wrap the Subscriber provided from the application code to +// the library. The Subscription passed to onSubscribe method needs to be +// wrapped in the ScheduledSubscription since the application code calls +// request and cancel from any thread. +// +template +class ScheduledSubscriptionSubscriber : public yarpl::flowable::Subscriber { + public: + ScheduledSubscriptionSubscriber( + yarpl::Reference> inner, + folly::EventBase& eventBase) : inner_(std::move(inner)), + eventBase_(eventBase) {} + + void onSubscribe( + yarpl::Reference subscription) override { + inner_->onSubscribe( + yarpl::make_ref(subscription, eventBase_)); + } + + // No further calls to the subscription after this method is invoked. + void onComplete() override { + inner_->onComplete(); + } + + void onError(const std::exception_ptr ex) override { + inner_->onError(std::move(ex)); + } + + void onNext(T value) override { + inner_->onNext(std::move(value)); + } + + private: + yarpl::Reference> inner_; + folly::EventBase& eventBase_; +}; + +} // rsocket diff --git a/src/internal/ScheduledSubscription.cpp b/src/internal/ScheduledSubscription.cpp new file mode 100644 index 000000000..ffc713e72 --- /dev/null +++ b/src/internal/ScheduledSubscription.cpp @@ -0,0 +1,36 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "ScheduledSubscription.h" +#include + +namespace rsocket { + +ScheduledSubscription::ScheduledSubscription( + yarpl::Reference inner, + folly::EventBase& eventBase) : inner_(std::move(inner)), + eventBase_(eventBase) { +} + +void ScheduledSubscription::request(int64_t n) noexcept { + if (eventBase_.isInEventBaseThread()) { + inner_->request(n); + } else { + eventBase_.runInEventBaseThread([inner = inner_, n] + { + inner->request(n); + }); + } +} + +void ScheduledSubscription::cancel() noexcept { + if (eventBase_.isInEventBaseThread()) { + inner_->cancel(); + } else { + eventBase_.runInEventBaseThread([inner = inner_] + { + inner->cancel(); + }); + } +} + +} // rsocket diff --git a/src/internal/ScheduledSubscription.h b/src/internal/ScheduledSubscription.h new file mode 100644 index 000000000..9e595472f --- /dev/null +++ b/src/internal/ScheduledSubscription.h @@ -0,0 +1,32 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include "yarpl/flowable/Subscription.h" + +namespace folly { +class EventBase; +} + +namespace rsocket { + +// +// A decorator of the Subscription object which schedules the method calls on the +// provided EventBase +// +class ScheduledSubscription : public yarpl::flowable::Subscription { + public: + ScheduledSubscription( + yarpl::Reference inner, + folly::EventBase& eventBase); + + void request(int64_t n) noexcept override; + + void cancel() noexcept override; + + private: + yarpl::Reference inner_; + folly::EventBase& eventBase_; +}; + +} // rsocket From 336d88ed8ad406fb81941309b00d21e76bc34754 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Thu, 18 May 2017 02:57:49 -0700 Subject: [PATCH 23/31] RequestResponse Test and SingleTestObserver (#454) - failing tests related to Single that Ondrej will help with --- test/RequestResponseTest.cpp | 18 +- yarpl/CMakeLists.txt | 1 + yarpl/include/yarpl/single/SingleOperator.h | 55 +++--- .../include/yarpl/single/SingleTestObserver.h | 179 ++++++++++++++++++ yarpl/include/yarpl/single/Singles.h | 12 +- yarpl/test/Single_test.cpp | 74 ++++++-- 6 files changed, 273 insertions(+), 66 deletions(-) create mode 100644 yarpl/include/yarpl/single/SingleTestObserver.h diff --git a/test/RequestResponseTest.cpp b/test/RequestResponseTest.cpp index 64c8166f1..e23740282 100644 --- a/test/RequestResponseTest.cpp +++ b/test/RequestResponseTest.cpp @@ -5,6 +5,7 @@ #include "RSocketTests.h" #include "yarpl/Single.h" +#include "yarpl/single/SingleTestObserver.h" using namespace yarpl; using namespace yarpl::single; @@ -19,12 +20,7 @@ class TestHandler : public rsocket::RSocketResponder { Reference> handleRequestResponse( Payload request, StreamId streamId) override { - std::cout << "HelloRequestResponseRequestHandler.handleRequestResponse " - << request << std::endl; - - // string from payload data auto requestString = request.moveDataToString(); - return Single::create([name = std::move(requestString)]( auto subscriber) { @@ -37,12 +33,16 @@ class TestHandler : public rsocket::RSocketResponder { }; } -TEST(RequestResponseTest, StartAndShutdown) { +TEST(RequestResponseTest, Hello) { auto port = randPort(); auto server = makeServer(port, std::make_shared()); auto client = makeClient(port); auto requester = client->connect().get(); - requester->requestResponse(Payload("Jane"))->subscribeBlocking([](Payload p) { - std::cout << "Received >> " << p.moveDataToString() << std::endl; - }); + + auto to = SingleTestObserver::create(); + requester->requestResponse(Payload("Jane")) + ->map([](auto p) { return p.moveDataToString(); }) + ->subscribe(to); + to->awaitTerminalEvent(); + to->assertOnSuccessValue("Hello Jane!"); } \ No newline at end of file diff --git a/yarpl/CMakeLists.txt b/yarpl/CMakeLists.txt index c1a32a361..b9f941f65 100644 --- a/yarpl/CMakeLists.txt +++ b/yarpl/CMakeLists.txt @@ -69,6 +69,7 @@ add_library( include/yarpl/single/SingleObservers.h include/yarpl/single/SingleSubscription.h include/yarpl/single/SingleSubscriptions.h + include/yarpl/single/SingleTestObserver.h src/yarpl/single/SingleSubscriptions.cpp # Flowable private src/yarpl/Refcounted.cpp diff --git a/yarpl/include/yarpl/single/SingleOperator.h b/yarpl/include/yarpl/single/SingleOperator.h index 7cd598c6c..082fe8026 100644 --- a/yarpl/include/yarpl/single/SingleOperator.h +++ b/yarpl/include/yarpl/single/SingleOperator.h @@ -11,7 +11,7 @@ namespace single { /** * Base (helper) class for operators. Operators are templated on two types: * D (downstream) and U (upstream). Operators are created by method calls on - * an upstream Single, and are Singles themselves. Multi-stage + * an upstream Single, and are Observables themselves. Multi-stage * pipelines * can be built: a Single heading a sequence of Operators. */ @@ -22,8 +22,8 @@ class SingleOperator : public Single { : upstream_(std::move(upstream)) {} void subscribe(Reference> subscriber) override { - upstream_->subscribe(Reference( - new Subscription(Reference>(this), std::move(subscriber)))); + upstream_->subscribe(Reference(new SingleSubscription( + Reference>(this), std::move(subscriber)))); } protected: @@ -35,37 +35,32 @@ class SingleOperator : public Single { /// against Operators. Each operator subscription has two functions: as a /// subscriber for the previous stage; as a subscription for the next one, /// the user-supplied subscriber being the last of the pipeline stages. - class Subscription : public ::yarpl::single::SingleSubscription, - public SingleObserver { + class SingleSubscription : public ::yarpl::single::SingleSubscription, + public SingleObserver { public: - Subscription( + SingleSubscription( Reference> flowable, Reference> subscriber) : flowable_(std::move(flowable)), subscriber_(std::move(subscriber)) {} - ~Subscription() { + ~SingleSubscription() { subscriber_.reset(); } void onSubscribe( Reference<::yarpl::single::SingleSubscription> subscription) override { - upstream_ = std::move(subscription); + upstreamSubscription_ = std::move(subscription); subscriber_->onSubscribe( Reference<::yarpl::single::SingleSubscription>(this)); } - void onComplete() override { - subscriber_->onComplete(); - upstream_.reset(); - } - void onError(const std::exception_ptr error) override { subscriber_->onError(error); - upstream_.reset(); + upstreamSubscription_.reset(); } void cancel() override { - upstream_->cancel(); + upstreamSubscription_->cancel(); } protected: @@ -82,7 +77,7 @@ class SingleOperator : public Single { /// calls should be forwarded upstream. Note that `this` is also a /// subscriber for the upstream stage: thus, there are cycles; all of /// the objects drop their references at cancel/complete. - Reference<::yarpl::single::SingleSubscription> upstream_; + Reference<::yarpl::single::SingleSubscription> upstreamSubscription_; }; Reference> upstream_; @@ -102,25 +97,29 @@ class MapOperator : public SingleOperator { void subscribe(Reference> subscriber) override { SingleOperator::upstream_->subscribe( // Note: implicit cast to a reference to a subscriber. - Reference(new Subscription( + Reference(new SingleSubscription( Reference>(this), std::move(subscriber)))); } private: - class Subscription : public SingleOperator::Subscription { + class SingleSubscription : public SingleOperator::SingleSubscription { public: - Subscription( - Reference> single, + SingleSubscription( + Reference> flowable, Reference> subscriber) - : SingleOperator::Subscription( - std::move(single), + : SingleOperator::SingleSubscription( + std::move(flowable), std::move(subscriber)) {} - void onNext(U value) override { - auto* subscriber = SingleOperator::Subscription::subscriber_.get(); - auto* single = SingleOperator::Subscription::flowable_.get(); - auto* map = static_cast(single); - subscriber->onNext(map->function_(std::move(value))); + void onSuccess(U value) override { + auto* subscriber = + SingleOperator::SingleSubscription::subscriber_.get(); + auto* flowable = + SingleOperator::SingleSubscription::flowable_.get(); + auto* map = static_cast(flowable); + subscriber->onSuccess(map->function_(std::move(value))); + + SingleOperator::SingleSubscription::upstreamSubscription_.reset(); } }; @@ -141,5 +140,5 @@ class FromPublisherOperator : public Single { OnSubscribe function_; }; -} // single +} // observable } // yarpl diff --git a/yarpl/include/yarpl/single/SingleTestObserver.h b/yarpl/include/yarpl/single/SingleTestObserver.h new file mode 100644 index 000000000..068fc34d0 --- /dev/null +++ b/yarpl/include/yarpl/single/SingleTestObserver.h @@ -0,0 +1,179 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include +#include +#include +#include +#include "Single.h" +#include "SingleObserver.h" + +namespace yarpl { +namespace single { + +/** + * A utility class for unit testing or experimenting with Single. + * + * Example usage: + * + * auto single = ... + * auto to = SingleTestObserver::create(); + * single->subscribe(to); + * ts->awaitTerminalEvent(); + * ts->assert... + * + * If you have a SingleObserver impl with specific logic you want used, + * you can pass it into the SingleTestObserver and the on* events will be + * delegated to your implementation. + * + * For example: + * + * auto to = SingleTestObserver::create(make_ref()); + * single->subscribe(to); + * + * Now when 'single' is subscribed to, the SingleTestObserver behavior + * will be used, but 'MyObserver' on* methods will also be invoked. + * + * @tparam T + */ +template +class SingleTestObserver : public yarpl::single::SingleObserver { + public: + /** + * Create a SingleTestObserver that will subscribe and store the value it + * receives. + * + * @return + */ + static Reference> create() { + return make_ref>(); + } + + /** + * Create a SingleTestObserver that will delegate all on* method calls + * to the provided SingleObserver. + * + * This will store the value it receives to allow assertions. + * @return + */ + static Reference> create( + Reference> delegate) { + return make_ref>(std::move(delegate)); + } + + SingleTestObserver() : delegate_(nullptr) {} + + explicit SingleTestObserver(Reference> delegate) + : delegate_(std::move(delegate)) {} + + void onSubscribe(Reference subscription) override { + if (delegate_) { + subscription_ = subscription; // copy + delegate_->onSubscribe(std::move(subscription)); + } else { + subscription_ = std::move(subscription); + } + } + + void onSuccess(T t) override { + if (delegate_) { + value_ = t; // take copy + delegate_->onSuccess(std::move(t)); + } else { + value_ = std::move(t); + } + terminated_ = true; + terminalEventCV_.notify_all(); + } + + void onError(const std::exception_ptr ex) override { + if (delegate_) { + delegate_->onError(ex); + } + e_ = ex; + terminated_ = true; + terminalEventCV_.notify_all(); + } + + /** + * Block the current thread until either onSuccess or onError is called. + */ + void awaitTerminalEvent() { + // now block this thread + std::unique_lock lk(m_); + // if shutdown gets implemented this would then be released by it + terminalEventCV_.wait(lk, [this] { return terminated_; }); + } + + /** + * If an onSuccess call was not received throw a runtime_error + */ + void assertSuccess() { + if (!terminated_) { + throw std::runtime_error("Did not receive terminal event."); + } + if (e_) { + throw std::runtime_error("Received onError instead of onSuccess"); + } + } + + void assertOnSuccessValue(T t) { + assertSuccess(); + if (value_ != t) { + std::stringstream ss; + ss << "value == " << value_ << ", but expected " << t; + throw std::runtime_error(ss.str()); + } + } + + /** + * Get a reference to the received value if onSuccess was called. + * + * @return + */ + T& getOnSuccessValue() { + return value_; + } + + /** + * If the onError exception_ptr points to an error containing + * the given msg, complete successfully, otherwise throw a runtime_error + */ + void assertOnErrorMessage(std::string msg) { + if (e_ == nullptr) { + std::stringstream ss; + ss << "exception_ptr == nullptr, but expected " << msg; + throw std::runtime_error(ss.str()); + } + try { + std::rethrow_exception(e_); + } catch (std::runtime_error& re) { + if (re.what() != msg) { + std::stringstream ss; + ss << "Error message is: " << re.what() << " but expected: " << msg; + throw std::runtime_error(ss.str()); + } + } catch (...) { + throw std::runtime_error("Expects an std::runtime_error"); + } + } + + /** + * Submit SingleSubscription->cancel(); + */ + void cancel() { + subscription_->cancel(); + } + + private: + Reference> delegate_; + T value_; + std::exception_ptr e_; + bool terminated_{false}; + std::mutex m_; + std::condition_variable terminalEventCV_; + Reference subscription_; +}; +} +} diff --git a/yarpl/include/yarpl/single/Singles.h b/yarpl/include/yarpl/single/Singles.h index 58e2dd773..1db1cbf53 100644 --- a/yarpl/include/yarpl/single/Singles.h +++ b/yarpl/include/yarpl/single/Singles.h @@ -12,9 +12,7 @@ class Singles { template static Reference> just(const T& value) { auto lambda = [value](Reference> observer) { - // # requested should be > 0. Ignoring the actual parameter. - observer->onNext(value); - observer->onComplete(); + observer->onSuccess(value); }; return Single::create(std::move(lambda)); @@ -31,14 +29,6 @@ class Singles { std::forward(function))); } - template - static Reference> empty() { - auto lambda = [](Reference> observer) { - observer->onComplete(); - }; - return Single::create(std::move(lambda)); - } - template static Reference> error(std::exception_ptr ex) { auto lambda = [ex](Reference> observer) { diff --git a/yarpl/test/Single_test.cpp b/yarpl/test/Single_test.cpp index 6d789a831..c8188578f 100644 --- a/yarpl/test/Single_test.cpp +++ b/yarpl/test/Single_test.cpp @@ -2,9 +2,11 @@ #include #include +#include #include #include "yarpl/Single.h" +#include "yarpl/single/SingleTestObserver.h" #include "Tuple.h" @@ -22,12 +24,10 @@ TEST(Single, SingleOnNext) { ASSERT_EQ(std::size_t{1}, Refcounted::objects()); - std::vector v; - a->subscribe(SingleObservers::create( - [&v](const int& value) { v.push_back(value); })); - - ASSERT_EQ(std::size_t{1}, Refcounted::objects()); - EXPECT_EQ(v.at(0), 1); + auto to = SingleTestObserver::create(); + a->subscribe(to); + to->awaitTerminalEvent(); + to->assertOnSuccessValue(1); } ASSERT_EQ(std::size_t{0}, Refcounted::objects()); } @@ -44,17 +44,55 @@ TEST(Single, OnError) { } }); - a->subscribe(SingleObservers::create( - [](int value) { /* do nothing */ }, - [&errorMessage](const std::exception_ptr e) { - try { - std::rethrow_exception(e); - } catch (const std::runtime_error& ex) { - errorMessage = std::string(ex.what()); - } - })); - - EXPECT_EQ("something broke!", errorMessage); + auto to = SingleTestObserver::create(); + a->subscribe(to); + to->awaitTerminalEvent(); + to->assertOnErrorMessage("something broke!"); + } + ASSERT_EQ(std::size_t{0}, Refcounted::objects()); +} + +TEST(Single, Just) { + { + ASSERT_EQ(std::size_t{0}, Refcounted::objects()); + auto a = Singles::just(1); + + auto to = SingleTestObserver::create(); + a->subscribe(to); + to->awaitTerminalEvent(); + to->assertOnSuccessValue(1); } ASSERT_EQ(std::size_t{0}, Refcounted::objects()); -} \ No newline at end of file +} + +TEST(Single, Error) { + ASSERT_EQ(std::size_t{0}, Refcounted::objects()); + { + std::string errorMessage("DEFAULT->No Error Message"); + auto a = Singles::error(std::runtime_error("something broke!")); + + auto to = SingleTestObserver::create(); + a->subscribe(to); + to->awaitTerminalEvent(); + to->assertOnErrorMessage("something broke!"); + } + ASSERT_EQ(std::size_t{0}, Refcounted::objects()); +} + +TEST(Single, SingleMap) { + { + ASSERT_EQ(std::size_t{0}, Refcounted::objects()); + auto a = Single::create([](Reference> obs) { + obs->onSubscribe(SingleSubscriptions::empty()); + obs->onSuccess(1); + }); + + ASSERT_EQ(std::size_t{1}, Refcounted::objects()); + + auto to = SingleTestObserver::create(); + a->map([](int v) { return "hello"; })->subscribe(to); + to->awaitTerminalEvent(); + to->assertOnSuccessValue("hello"); + } + ASSERT_EQ(std::size_t{0}, Refcounted::objects()); +} From f4f1c2d0194f3894fdd909abee8cc32c49c2b4a1 Mon Sep 17 00:00:00 2001 From: Ben Christensen Date: Thu, 18 May 2017 03:44:04 -0700 Subject: [PATCH 24/31] Async RequestStream test (#455) - and fixed Flowables::range to match other ReactiveX implementations. it is {start, count} not {start, end} --- CMakeLists.txt | 1 + test/RequestStreamTest.cpp | 93 +++++++++ yarpl/CMakeLists.txt | 2 +- yarpl/include/yarpl/flowable/Flowables.h | 12 +- yarpl/include/yarpl/flowable/TestSubscriber.h | 188 ++++++++++++++++++ yarpl/test/FlowableTest.cpp | 4 +- 6 files changed, 295 insertions(+), 5 deletions(-) create mode 100644 test/RequestStreamTest.cpp create mode 100644 yarpl/include/yarpl/flowable/TestSubscriber.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6fb2f4230..729a724e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -259,6 +259,7 @@ add_executable( test/internal/AllowanceSemaphoreTest.cpp test/RSocketTests.h test/RequestResponseTest.cpp + test/RequestStreamTest.cpp ) target_link_libraries( diff --git a/test/RequestStreamTest.cpp b/test/RequestStreamTest.cpp new file mode 100644 index 000000000..25cbe8c6e --- /dev/null +++ b/test/RequestStreamTest.cpp @@ -0,0 +1,93 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include + +#include "RSocketTests.h" +#include "yarpl/Flowable.h" +#include "yarpl/flowable/TestSubscriber.h" + +using namespace yarpl; +using namespace yarpl::flowable; +using namespace rsocket; +using namespace rsocket::tests; +using namespace rsocket::tests::client_server; + +namespace { +class TestHandlerSync : public rsocket::RSocketResponder { + public: + Reference> handleRequestStream( + Payload request, + StreamId streamId) override { + // string from payload data + auto requestString = request.moveDataToString(); + + return Flowables::range(1, 10)->map([name = std::move(requestString)]( + int64_t v) { + std::stringstream ss; + ss << "Hello " << name << " " << v << "!"; + std::string s = ss.str(); + return Payload(s, "metadata"); + }); + } +}; + +TEST(RequestStreamTest, HelloSync) { + auto port = randPort(); + auto server = makeServer(port, std::make_shared()); + auto client = makeClient(port); + auto requester = client->connect().get(); + auto ts = TestSubscriber::create(); + requester->requestStream(Payload("Bob")) + ->map([](auto p) { return p.moveDataToString(); }) + ->subscribe(ts); + ts->awaitTerminalEvent(); + ts->assertSuccess(); + ts->assertValueCount(10); + ts->assertValueAt(0, "Hello Bob 1!"); + ts->assertValueAt(9, "Hello Bob 10!"); +} + +class TestHandlerAsync : public rsocket::RSocketResponder { + public: + Reference> handleRequestStream( + Payload request, + StreamId streamId) override { + // string from payload data + auto requestString = request.moveDataToString(); + + return Flowables::fromPublisher< + Payload>([requestString = std::move(requestString)]( + Reference> subscriber) { + std::thread([ + requestString = std::move(requestString), + subscriber = std::move(subscriber) + ]() { + Flowables::range(1, 40) + ->map([name = std::move(requestString)](int64_t v) { + std::stringstream ss; + ss << "Hello " << name << " " << v << "!"; + std::string s = ss.str(); + return Payload(s, "metadata"); + }) + ->subscribe(subscriber); + }).detach(); + }); + } +}; +} + +TEST(RequestStreamTest, HelloAsync) { + auto port = randPort(); + auto server = makeServer(port, std::make_shared()); + auto client = makeClient(port); + auto requester = client->connect().get(); + auto ts = TestSubscriber::create(); + requester->requestStream(Payload("Bob")) + ->map([](auto p) { return p.moveDataToString(); }) + ->subscribe(ts); + ts->awaitTerminalEvent(); + ts->assertSuccess(); + ts->assertValueCount(40); + ts->assertValueAt(0, "Hello Bob 1!"); + ts->assertValueAt(39, "Hello Bob 40!"); +} \ No newline at end of file diff --git a/yarpl/CMakeLists.txt b/yarpl/CMakeLists.txt index b9f941f65..3f30ba050 100644 --- a/yarpl/CMakeLists.txt +++ b/yarpl/CMakeLists.txt @@ -81,7 +81,7 @@ add_library( # Scheduler include/yarpl/schedulers/ThreadScheduler.h src/yarpl/schedulers/ThreadScheduler.cpp -) + include/yarpl/flowable/TestSubscriber.h) target_include_directories( yarpl diff --git a/yarpl/include/yarpl/flowable/Flowables.h b/yarpl/include/yarpl/flowable/Flowables.h index ce5eef821..e7516c8fb 100644 --- a/yarpl/include/yarpl/flowable/Flowables.h +++ b/yarpl/include/yarpl/flowable/Flowables.h @@ -11,11 +11,19 @@ namespace flowable { class Flowables { public: - static Reference> range(int64_t start, int64_t end) { - auto lambda = [ start, end, i = start ]( + /** + * Emit a sequence of numbers. + * + * @param start starting value + * @param count how many to emit + * @return + */ + static Reference> range(int64_t start, int64_t count) { + auto lambda = [ start, count, i = start ]( Subscriber & subscriber, int64_t requested) mutable { int64_t emitted = 0; bool done = false; + int64_t end = start + count; while (i < end && emitted < requested) { subscriber.onNext(i++); diff --git a/yarpl/include/yarpl/flowable/TestSubscriber.h b/yarpl/include/yarpl/flowable/TestSubscriber.h new file mode 100644 index 000000000..a1c9a8239 --- /dev/null +++ b/yarpl/include/yarpl/flowable/TestSubscriber.h @@ -0,0 +1,188 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include +#include +#include +#include +#include "Flowable.h" +#include "Subscriber.h" + +namespace yarpl { +namespace flowable { + +/** + * A utility class for unit testing or experimenting with Flowable. + * + * Example usage: + * + * auto flowable = ... + * auto ts = TestSubscriber::create(); + * flowable->subscribe(to); + * ts->awaitTerminalEvent(); + * ts->assert... + * + * @tparam T + */ +template +class TestSubscriber : public Subscriber { + public: + /** + * Create a TestSubscriber that will subscribe and store the value it + * receives. + * + * @return + */ + static Reference> create() { + return make_ref>(); + } + + /** + * Create a TestSubscriber that will delegate all on* method calls + * to the provided Subscriber. + * + * This will store the value it receives to allow assertions. + * @return + */ + static Reference> create( + Reference> delegate) { + return make_ref>(std::move(delegate)); + } + + TestSubscriber() : delegate_(nullptr) {} + + explicit TestSubscriber(Reference> delegate) + : delegate_(std::move(delegate)) {} + + void onSubscribe(Reference subscription) override { + if (delegate_) { + subscription_ = subscription; // copy + delegate_->onSubscribe(std::move(subscription)); + } else { + subscription_ = std::move(subscription); + } + subscription_->request(Flowable::NO_FLOW_CONTROL); + } + + void onNext(T t) override { + if (delegate_) { + values_.push_back(t); + delegate_->onNext(std::move(t)); + } else { + values_.push_back(std::move(t)); + } + } + + void onComplete() override { + if (delegate_) { + delegate_->onComplete(); + } + terminated_ = true; + terminalEventCV_.notify_all(); + } + + void onError(const std::exception_ptr ex) override { + if (delegate_) { + delegate_->onError(ex); + } + e_ = ex; + terminated_ = true; + terminalEventCV_.notify_all(); + } + + /** + * Block the current thread until either onSuccess or onError is called. + */ + void awaitTerminalEvent() { + // now block this thread + std::unique_lock lk(m_); + // if shutdown gets implemented this would then be released by it + terminalEventCV_.wait(lk, [this] { return terminated_; }); + } + + void assertValueCount(size_t count) { + if (values_.size() != count) { + std::stringstream ss; + ss << "Value count " << values_.size() << " does not match " << count; + throw std::runtime_error(ss.str()); + } + } + + int64_t getValueCount() { + return values_.size(); + } + + T& getValueAt(size_t index) { + return values_[index]; + } + + void assertValueAt(int64_t index, T expected) { + if (index < getValueCount()) { + T& v = getValueAt(index); + if (expected != v) { + std::stringstream ss; + ss << "Expected: " << expected << " Actual: " << v; + throw std::runtime_error(ss.str()); + } + } else { + std::stringstream ss; + ss << "Index " << index << " is larger than received values " + << values_.size(); + throw std::runtime_error(ss.str()); + } + } + + /** + * If an onComplete call was not received throw a runtime_error + */ + void assertSuccess() { + if (!terminated_) { + throw std::runtime_error("Did not receive terminal event."); + } + if (e_) { + throw std::runtime_error("Received onError instead of onSuccess"); + } + } + + /** + * If the onError exception_ptr points to an error containing + * the given msg, complete successfully, otherwise throw a runtime_error + */ + void assertOnErrorMessage(std::string msg) { + if (e_ == nullptr) { + std::stringstream ss; + ss << "exception_ptr == nullptr, but expected " << msg; + throw std::runtime_error(ss.str()); + } + try { + std::rethrow_exception(e_); + } catch (std::runtime_error& re) { + if (re.what() != msg) { + std::stringstream ss; + ss << "Error message is: " << re.what() << " but expected: " << msg; + throw std::runtime_error(ss.str()); + } + } catch (...) { + throw std::runtime_error("Expects an std::runtime_error"); + } + } + + /** + * Submit Subscription->cancel(); + */ + void cancel() { + subscription_->cancel(); + } + + private: + Reference> delegate_; + std::vector values_; + std::exception_ptr e_; + bool terminated_{false}; + std::mutex m_; + std::condition_variable terminalEventCV_; + Reference subscription_; +}; +} +} \ No newline at end of file diff --git a/yarpl/test/FlowableTest.cpp b/yarpl/test/FlowableTest.cpp index a6974c48c..d12eae165 100644 --- a/yarpl/test/FlowableTest.cpp +++ b/yarpl/test/FlowableTest.cpp @@ -139,14 +139,14 @@ TEST(FlowableTest, JustIncomplete) { TEST(FlowableTest, Range) { ASSERT_EQ(std::size_t{0}, Refcounted::objects()); EXPECT_EQ( - run(Flowables::range(10, 15)), + run(Flowables::range(10, 5)), std::vector({10, 11, 12, 13, 14})); EXPECT_EQ(std::size_t{0}, Refcounted::objects()); } TEST(FlowableTest, RangeWithMap) { ASSERT_EQ(std::size_t{0}, Refcounted::objects()); - auto flowable = Flowables::range(1, 4) + auto flowable = Flowables::range(1, 3) ->map([](int64_t v) { return v * v; }) ->map([](int64_t v) { return v * v; }) ->map([](int64_t v) { return std::to_string(v); }); From 38161b52fddae276f5649f598ff561e153144186 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Thu, 18 May 2017 16:29:19 +0100 Subject: [PATCH 25/31] Fixing yarpl tests (#456) * fixing yarpl tests * fixing build * polishing.. * fixing tests --- yarpl/CMakeLists.txt | 2 +- .../include/yarpl/flowable/FlowableOperator.h | 97 ++++++------ yarpl/include/yarpl/flowable/Subscriber.h | 2 +- .../yarpl/observable/ObservableOperator.h | 142 ++++++++++-------- yarpl/include/yarpl/observable/Observer.h | 2 +- yarpl/include/yarpl/observable/Subscription.h | 2 +- yarpl/include/yarpl/single/SingleOperator.h | 95 ++++++------ .../include/yarpl/single/SingleTestObserver.h | 1 + yarpl/src/yarpl/Refcounted.cpp | 2 + yarpl/test/FlowableTest.cpp | 3 +- yarpl/test/Observable_test.cpp | 1 - yarpl/test/ReferenceTest.cpp | 12 +- 12 files changed, 189 insertions(+), 172 deletions(-) diff --git a/yarpl/CMakeLists.txt b/yarpl/CMakeLists.txt index 3f30ba050..4e04b2028 100644 --- a/yarpl/CMakeLists.txt +++ b/yarpl/CMakeLists.txt @@ -22,7 +22,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer") # The yarpl-tests binary constantly fails with an ASAN error in gtest internal # code on macOS. if(APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-sanitize=address") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-sanitize=address,undefined") endif() # Configuration for Debug build mode. diff --git a/yarpl/include/yarpl/flowable/FlowableOperator.h b/yarpl/include/yarpl/flowable/FlowableOperator.h index 2005fa95e..acd33a1dc 100644 --- a/yarpl/include/yarpl/flowable/FlowableOperator.h +++ b/yarpl/include/yarpl/flowable/FlowableOperator.h @@ -1,7 +1,7 @@ #pragma once +#include #include - #include "../Flowable.h" #include "Subscriber.h" #include "Subscription.h" @@ -20,11 +20,6 @@ class FlowableOperator : public Flowable { explicit FlowableOperator(Reference> upstream) : upstream_(std::move(upstream)) {} - void subscribe(Reference> subscriber) override { - upstream_->subscribe(Reference( - new Subscription(Reference>(this), std::move(subscriber)))); - } - protected: /// /// \brief An Operator's subscription. @@ -36,52 +31,66 @@ class FlowableOperator : public Flowable { /// the user-supplied subscriber being the last of the pipeline stages. class Subscription : public ::yarpl::flowable::Subscription, public Subscriber { - public: + protected: Subscription( Reference> flowable, Reference> subscriber) : flowable_(std::move(flowable)), subscriber_(std::move(subscriber)) { + assert(flowable_); + assert(subscriber_); + // We expect to be heap-allocated; until this subscription finishes // (is canceled; completes; error's out), hold a reference so we are // not deallocated (by the subscriber). Refcounted::incRef(*this); } - void onSubscribe( - Reference<::yarpl::flowable::Subscription> subscription) override { - upstream_ = std::move(subscription); - subscriber_->onSubscribe( - Reference<::yarpl::flowable::Subscription>(this)); - } - - void onComplete() override { - subscriber_->onComplete(); - release(); + template + TOperator* getFlowableAs() { + return static_cast(flowable_.get()); } - void onError(const std::exception_ptr error) override { - subscriber_->onError(error); - release(); + void subscriberOnNext(D value) { + subscriber_->onNext(std::move(value)); } void request(int64_t delta) override { upstream_->request(delta); } + // this method should be used to terminate the operators + void terminate() { + subscriber_->onComplete(); // should break the cycle to this + upstream_->cancel(); // should break the cycle to this + Refcounted::decRef(*this); + } + void cancel() override { upstream_->cancel(); - release(); + subscriber_.reset(); // breaking the cycle + Refcounted::decRef(*this); } private: - void release() { - flowable_.reset(); - subscriber_.reset(); - upstream_.reset(); + void onSubscribe( + Reference<::yarpl::flowable::Subscription> subscription) override { + upstream_ = std::move(subscription); + subscriber_->onSubscribe( + Reference<::yarpl::flowable::Subscription>(this)); + } + + void onComplete() override { + subscriber_->onComplete(); + upstream_.reset(); // breaking the cycle + Refcounted::decRef(*this); + } + + void onError(const std::exception_ptr error) override { + subscriber_->onError(error); + upstream_.reset(); // breaking the cycle Refcounted::decRef(*this); } - protected: /// The Flowable has the lambda, and other creation parameters. Reference> flowable_; @@ -121,6 +130,7 @@ class MapOperator : public FlowableOperator { private: class Subscription : public FlowableOperator::Subscription { + using Super = typename FlowableOperator::Subscription; public: Subscription( Reference> flowable, @@ -130,10 +140,8 @@ class MapOperator : public FlowableOperator { std::move(subscriber)) {} void onNext(U value) override { - auto subscriber = FlowableOperator::Subscription::subscriber_.get(); - auto* flowable = FlowableOperator::Subscription::flowable_.get(); - auto* map = static_cast(flowable); - subscriber->onNext(map->function_(std::move(value))); + auto* map = Super::template getFlowableAs(); + Super::subscriberOnNext(map->function_(std::move(value))); } }; @@ -160,6 +168,7 @@ class FilterOperator : public FlowableOperator { private: class Subscription : public FlowableOperator::Subscription { + using Super = typename FlowableOperator::Subscription; public: Subscription( Reference> flowable, @@ -169,20 +178,15 @@ class FilterOperator : public FlowableOperator { std::move(subscriber)) {} void onNext(U value) override { - auto subscriber = FlowableOperator::Subscription::subscriber_.get(); - auto* flowable = FlowableOperator::Subscription::flowable_.get(); - auto* filter = static_cast(flowable); + auto* filter = Super::template getFlowableAs(); if (filter->function_(value)) { - subscriber->onNext(std::move(value)); + Super::subscriberOnNext(std::move(value)); } else { - callSuperRequest(1l); + Super::request(1l); } } private: - void callSuperRequest(int64_t delta) { - FlowableOperator::Subscription::request(delta); - } }; F function_; @@ -202,6 +206,7 @@ class TakeOperator : public FlowableOperator { private: class Subscription : public FlowableOperator::Subscription { + using Super = typename FlowableOperator::Subscription; public: Subscription( Reference> flowable, @@ -216,11 +221,10 @@ class TakeOperator : public FlowableOperator { if (limit_-- > 0) { if (pending_ > 0) --pending_; - FlowableOperator::Subscription::subscriber_->onNext( + Super::subscriberOnNext( std::move(value)); if (limit_ == 0) { - FlowableOperator::Subscription::cancel(); - FlowableOperator::Subscription::onComplete(); + Super::terminate(); } } } @@ -229,7 +233,7 @@ class TakeOperator : public FlowableOperator { delta = std::min(delta, limit_ - pending_); if (delta > 0) { pending_ += delta; - FlowableOperator::Subscription::upstream_->request(delta); + Super::request(delta); } } @@ -258,6 +262,7 @@ class SubscribeOnOperator : public FlowableOperator { private: class Subscription : public FlowableOperator::Subscription { + using Super = typename FlowableOperator::Subscription; public: Subscription( Reference> flowable, @@ -277,20 +282,18 @@ class SubscribeOnOperator : public FlowableOperator { } void onNext(T value) override { - auto* subscriber = - FlowableOperator::Subscription::subscriber_.get(); - subscriber->onNext(std::move(value)); + Super::subscriberOnNext(std::move(value)); } private: // Trampoline to call superclass method; gcc bug 58972. void callSuperRequest(int64_t delta) { - FlowableOperator::Subscription::request(delta); + Super::request(delta); } // Trampoline to call superclass method; gcc bug 58972. void callSuperCancel() { - FlowableOperator::Subscription::cancel(); + Super::cancel(); } std::unique_ptr worker_; diff --git a/yarpl/include/yarpl/flowable/Subscriber.h b/yarpl/include/yarpl/flowable/Subscriber.h index a87d8294f..5bb1ed46b 100644 --- a/yarpl/include/yarpl/flowable/Subscriber.h +++ b/yarpl/include/yarpl/flowable/Subscriber.h @@ -27,7 +27,7 @@ class Subscriber : public virtual Refcounted { subscription_.reset(); } - virtual void onNext(T) {} + virtual void onNext(T) = 0; protected: Subscription* subscription() { diff --git a/yarpl/include/yarpl/observable/ObservableOperator.h b/yarpl/include/yarpl/observable/ObservableOperator.h index e8b2c66f3..bae4b5efb 100644 --- a/yarpl/include/yarpl/observable/ObservableOperator.h +++ b/yarpl/include/yarpl/observable/ObservableOperator.h @@ -21,11 +21,6 @@ class ObservableOperator : public Observable { explicit ObservableOperator(Reference> upstream) : upstream_(std::move(upstream)) {} - void subscribe(Reference> subscriber) override { - upstream_->subscribe(Reference(new Subscription( - Reference>(this), std::move(subscriber)))); - } - protected: /// /// \brief An Operator's subscription. @@ -37,50 +32,69 @@ class ObservableOperator : public Observable { /// the user-supplied subscriber being the last of the pipeline stages. class Subscription : public ::yarpl::observable::Subscription, public Observer { - public: + protected: Subscription( - Reference> flowable, - Reference> subscriber) - : flowable_(std::move(flowable)), subscriber_(std::move(subscriber)) {} + Reference> observable, + Reference> observer) + : observable_(std::move(observable)), observer_(std::move(observer)) { + assert(observable_); + assert(observer_); + } ~Subscription() { - subscriber_.reset(); + observer_.reset(); + } + + template + TOperator* getObservableAs() { + return static_cast(observable_.get()); } + // this method should be used to terminate the operators + void terminate() { + observer_->onComplete(); // should break the cycle to this + upstream_->cancel(); // should break the cycle to this + } + + void observerOnNext(D value) { + observer_->onNext(std::move(value)); + } + + private: void onSubscribe( Reference<::yarpl::observable::Subscription> subscription) override { upstream_ = std::move(subscription); - subscriber_->onSubscribe( + observer_->onSubscribe( Reference<::yarpl::observable::Subscription>(this)); } void onComplete() override { - subscriber_->onComplete(); - upstream_.reset(); + observer_->onComplete(); + upstream_.reset(); // breaking the cycle } void onError(const std::exception_ptr error) override { - subscriber_->onError(error); - upstream_.reset(); + observer_->onError(error); + upstream_.reset(); // breaking the cycle } void cancel() override { upstream_->cancel(); + observer_.reset(); // breaking the cycle } - protected: /// The Observable has the lambda, and other creation parameters. - Reference> flowable_; + Reference> observable_; - /// This subscription controls the life-cycle of the subscriber. The - /// subscriber is retained as long as calls on it can be made. (Note: - /// the subscriber in turn maintains a reference on this subscription + /// This subscription controls the life-cycle of the observer. The + /// observer is retained as long as calls on it can be made. (Note: + /// the observer in turn maintains a reference on this subscription /// object until cancellation and/or completion.) - Reference> subscriber_; + Reference> observer_; /// In an active pipeline, cancel and (possibly modified) request(n) /// calls should be forwarded upstream. Note that `this` is also a - /// subscriber for the upstream stage: thus, there are cycles; all of + /// observer for the upstream stage: thus, there are cycles; all of /// the objects drop their references at cancel/complete. Reference<::yarpl::observable::Subscription> upstream_; }; @@ -99,29 +113,27 @@ class MapOperator : public ObservableOperator { : ObservableOperator(std::move(upstream)), function_(std::forward(function)) {} - void subscribe(Reference> subscriber) override { + void subscribe(Reference> observer) override { ObservableOperator::upstream_->subscribe( - // Note: implicit cast to a reference to a subscriber. + // Note: implicit cast to a reference to a observer. Reference(new Subscription( - Reference>(this), std::move(subscriber)))); + Reference>(this), std::move(observer)))); } private: class Subscription : public ObservableOperator::Subscription { + using Super = typename ObservableOperator::Subscription; public: Subscription( - Reference> flowable, - Reference> subscriber) + Reference> observable, + Reference> observer) : ObservableOperator::Subscription( - std::move(flowable), - std::move(subscriber)) {} + std::move(observable), + std::move(observer)) {} void onNext(U value) override { - auto* subscriber = - ObservableOperator::Subscription::subscriber_.get(); - auto* flowable = ObservableOperator::Subscription::flowable_.get(); - auto* map = static_cast(flowable); - subscriber->onNext(map->function_(std::move(value))); + auto* map = Super::template getObservableAs(); + Super::observerOnNext(map->function_(std::move(value))); } }; @@ -139,30 +151,28 @@ class FilterOperator : public ObservableOperator { : ObservableOperator(std::move(upstream)), function_(std::forward(function)) {} - void subscribe(Reference> subscriber) override { + void subscribe(Reference> observer) override { ObservableOperator::upstream_->subscribe( - // Note: implicit cast to a reference to a subscriber. + // Note: implicit cast to a reference to a observer. Reference(new Subscription( - Reference>(this), std::move(subscriber)))); + Reference>(this), std::move(observer)))); } private: class Subscription : public ObservableOperator::Subscription { + using Super = typename ObservableOperator::Subscription; public: Subscription( - Reference> flowable, - Reference> subscriber) + Reference> observable, + Reference> observer) : ObservableOperator::Subscription( - std::move(flowable), - std::move(subscriber)) {} + std::move(observable), + std::move(observer)) {} void onNext(U value) override { - auto* subscriber = - ObservableOperator::Subscription::subscriber_.get(); - auto* flowable = ObservableOperator::Subscription::flowable_.get(); - auto* filter = static_cast(flowable); + auto* filter = Super::template getObservableAs(); if (filter->function_(value)) { - subscriber->onNext(std::move(value)); + Super::observerOnNext(std::move(value)); } } }; @@ -176,33 +186,33 @@ class TakeOperator : public ObservableOperator { TakeOperator(Reference> upstream, int64_t limit) : ObservableOperator(std::move(upstream)), limit_(limit) {} - void subscribe(Reference> subscriber) override { + void subscribe(Reference> observer) override { ObservableOperator::upstream_->subscribe( Reference(new Subscription( - Reference>(this), limit_, std::move(subscriber)))); + Reference>(this), limit_, std::move(observer)))); } private: class Subscription : public ObservableOperator::Subscription { + using Super = typename ObservableOperator::Subscription; public: Subscription( - Reference> flowable, + Reference> observable, int64_t limit, - Reference> subscriber) + Reference> observer) : ObservableOperator::Subscription( - std::move(flowable), - std::move(subscriber)), + std::move(observable), + std::move(observer)), limit_(limit) {} void onNext(T value) override { if (limit_-- > 0) { if (pending_ > 0) --pending_; - ObservableOperator::Subscription::subscriber_->onNext( + Super::observerOnNext( std::move(value)); if (limit_ == 0) { - ObservableOperator::Subscription::cancel(); - ObservableOperator::Subscription::onComplete(); + Super::terminate(); } } } @@ -222,24 +232,24 @@ class SubscribeOnOperator : public ObservableOperator { : ObservableOperator(std::move(upstream)), worker_(scheduler.createWorker()) {} - void subscribe(Reference> subscriber) override { + void subscribe(Reference> observer) override { ObservableOperator::upstream_->subscribe( Reference(new Subscription( Reference>(this), std::move(worker_), - std::move(subscriber)))); + std::move(observer)))); } private: class Subscription : public ObservableOperator::Subscription { public: Subscription( - Reference> flowable, + Reference> observable, std::unique_ptr worker, - Reference> subscriber) + Reference> observer) : ObservableOperator::Subscription( - std::move(flowable), - std::move(subscriber)), + std::move(observable), + std::move(observer)), worker_(std::move(worker)) {} void cancel() override { @@ -247,9 +257,9 @@ class SubscribeOnOperator : public ObservableOperator { } void onNext(T value) override { - auto* subscriber = - ObservableOperator::Subscription::subscriber_.get(); - subscriber->onNext(std::move(value)); + auto* observer = + ObservableOperator::Subscription::observer_.get(); + observer->onNext(std::move(value)); } private: @@ -270,8 +280,8 @@ class FromPublisherOperator : public Observable { explicit FromPublisherOperator(OnSubscribe&& function) : function_(std::move(function)) {} - void subscribe(Reference> subscriber) override { - function_(std::move(subscriber)); + void subscribe(Reference> observer) override { + function_(std::move(observer)); } private: diff --git a/yarpl/include/yarpl/observable/Observer.h b/yarpl/include/yarpl/observable/Observer.h index d02a7fe6c..7a63ad3cc 100644 --- a/yarpl/include/yarpl/observable/Observer.h +++ b/yarpl/include/yarpl/observable/Observer.h @@ -26,7 +26,7 @@ class Observer : public virtual Refcounted { subscription_.reset(); } - virtual void onNext(T) {} + virtual void onNext(T) = 0; protected: Subscription* subscription() { diff --git a/yarpl/include/yarpl/observable/Subscription.h b/yarpl/include/yarpl/observable/Subscription.h index 73b19511d..399c9e24a 100644 --- a/yarpl/include/yarpl/observable/Subscription.h +++ b/yarpl/include/yarpl/observable/Subscription.h @@ -11,7 +11,7 @@ class Subscription : public virtual Refcounted { virtual void cancel() = 0; protected: - Subscription() {} + Subscription() = default; }; } // observable diff --git a/yarpl/include/yarpl/single/SingleOperator.h b/yarpl/include/yarpl/single/SingleOperator.h index 082fe8026..e53ea8966 100644 --- a/yarpl/include/yarpl/single/SingleOperator.h +++ b/yarpl/include/yarpl/single/SingleOperator.h @@ -21,11 +21,6 @@ class SingleOperator : public Single { explicit SingleOperator(Reference> upstream) : upstream_(std::move(upstream)) {} - void subscribe(Reference> subscriber) override { - upstream_->subscribe(Reference(new SingleSubscription( - Reference>(this), std::move(subscriber)))); - } - protected: /// /// \brief An Operator's subscription. @@ -33,49 +28,60 @@ class SingleOperator : public Single { /// When a pipeline chain is active, each Single has a corresponding /// subscription. Except for the first one, the subscriptions are created /// against Operators. Each operator subscription has two functions: as a - /// subscriber for the previous stage; as a subscription for the next one, - /// the user-supplied subscriber being the last of the pipeline stages. - class SingleSubscription : public ::yarpl::single::SingleSubscription, - public SingleObserver { - public: - SingleSubscription( - Reference> flowable, - Reference> subscriber) - : flowable_(std::move(flowable)), subscriber_(std::move(subscriber)) {} + /// observer for the previous stage; as a subscription for the next one, + /// the user-supplied observer being the last of the pipeline stages. + class Subscription : public ::yarpl::single::SingleSubscription, + public SingleObserver { + protected: + Subscription( + Reference> single, + Reference> observer) + : single_(std::move(single)), observer_(std::move(observer)) {} - ~SingleSubscription() { - subscriber_.reset(); + ~Subscription() { + observer_.reset(); } + void observerOnSuccess(D value) { + observer_->onSuccess(std::move(value)); + upstreamSubscription_.reset(); // should break the cycle to this + } + + template + TOperator* getObservableAs() { + return static_cast(single_.get()); + } + + private: void onSubscribe( Reference<::yarpl::single::SingleSubscription> subscription) override { upstreamSubscription_ = std::move(subscription); - subscriber_->onSubscribe( + observer_->onSubscribe( Reference<::yarpl::single::SingleSubscription>(this)); } void onError(const std::exception_ptr error) override { - subscriber_->onError(error); - upstreamSubscription_.reset(); + observer_->onError(error); + upstreamSubscription_.reset(); // should break the cycle to this } void cancel() override { upstreamSubscription_->cancel(); + observer_.reset(); // breaking the cycle } - protected: /// The Single has the lambda, and other creation parameters. - Reference> flowable_; + Reference> single_; - /// This subscription controls the life-cycle of the subscriber. The - /// subscriber is retained as long as calls on it can be made. (Note: - /// the subscriber in turn maintains a reference on this subscription + /// This subscription controls the life-cycle of the observer. The + /// observer is retained as long as calls on it can be made. (Note: + /// the observer in turn maintains a reference on this subscription /// object until cancellation and/or completion.) - Reference> subscriber_; + Reference> observer_; /// In an active pipeline, cancel and (possibly modified) request(n) /// calls should be forwarded upstream. Note that `this` is also a - /// subscriber for the upstream stage: thus, there are cycles; all of + /// observer for the upstream stage: thus, there are cycles; all of /// the objects drop their references at cancel/complete. Reference<::yarpl::single::SingleSubscription> upstreamSubscription_; }; @@ -94,32 +100,27 @@ class MapOperator : public SingleOperator { : SingleOperator(std::move(upstream)), function_(std::forward(function)) {} - void subscribe(Reference> subscriber) override { + void subscribe(Reference> observer) override { SingleOperator::upstream_->subscribe( - // Note: implicit cast to a reference to a subscriber. - Reference(new SingleSubscription( - Reference>(this), std::move(subscriber)))); + // Note: implicit cast to a reference to a observer. + Reference(new Subscription( + Reference>(this), std::move(observer)))); } private: - class SingleSubscription : public SingleOperator::SingleSubscription { + class Subscription : public SingleOperator::Subscription { + using Super = typename SingleOperator::Subscription; public: - SingleSubscription( - Reference> flowable, - Reference> subscriber) - : SingleOperator::SingleSubscription( - std::move(flowable), - std::move(subscriber)) {} + Subscription( + Reference> single, + Reference> observer) + : SingleOperator::Subscription( + std::move(single), + std::move(observer)) {} void onSuccess(U value) override { - auto* subscriber = - SingleOperator::SingleSubscription::subscriber_.get(); - auto* flowable = - SingleOperator::SingleSubscription::flowable_.get(); - auto* map = static_cast(flowable); - subscriber->onSuccess(map->function_(std::move(value))); - - SingleOperator::SingleSubscription::upstreamSubscription_.reset(); + auto* map = Super::template getObservableAs(); + Super::observerOnSuccess(map->function_(std::move(value))); } }; @@ -132,8 +133,8 @@ class FromPublisherOperator : public Single { explicit FromPublisherOperator(OnSubscribe&& function) : function_(std::move(function)) {} - void subscribe(Reference> subscriber) override { - function_(std::move(subscriber)); + void subscribe(Reference> observer) override { + function_(std::move(observer)); } private: diff --git a/yarpl/include/yarpl/single/SingleTestObserver.h b/yarpl/include/yarpl/single/SingleTestObserver.h index 068fc34d0..015e67883 100644 --- a/yarpl/include/yarpl/single/SingleTestObserver.h +++ b/yarpl/include/yarpl/single/SingleTestObserver.h @@ -83,6 +83,7 @@ class SingleTestObserver : public yarpl::single::SingleObserver { } else { value_ = std::move(t); } + subscription_ = nullptr; terminated_ = true; terminalEventCV_.notify_all(); } diff --git a/yarpl/src/yarpl/Refcounted.cpp b/yarpl/src/yarpl/Refcounted.cpp index a9277e458..7bf736ec7 100644 --- a/yarpl/src/yarpl/Refcounted.cpp +++ b/yarpl/src/yarpl/Refcounted.cpp @@ -1,3 +1,5 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + #include "yarpl/Refcounted.h" namespace yarpl { diff --git a/yarpl/test/FlowableTest.cpp b/yarpl/test/FlowableTest.cpp index d12eae165..841cfa4d4 100644 --- a/yarpl/test/FlowableTest.cpp +++ b/yarpl/test/FlowableTest.cpp @@ -29,7 +29,6 @@ class CollectingSubscriber : public Subscriber { } void onNext(T next) override { - Subscriber::onNext(next); values_.push_back(std::move(next)); } @@ -176,7 +175,7 @@ TEST(FlowableTest, SimpleTake) { EXPECT_EQ( run(Flowables::range(0, 100)->take(3)), std::vector({0, 1, 2})); EXPECT_EQ( - run(Flowables::range(10, 15)), + run(Flowables::range(10, 5)), std::vector({10, 11, 12, 13, 14})); EXPECT_EQ(std::size_t{0}, Refcounted::objects()); } diff --git a/yarpl/test/Observable_test.cpp b/yarpl/test/Observable_test.cpp index 903775bdb..386e42ee1 100644 --- a/yarpl/test/Observable_test.cpp +++ b/yarpl/test/Observable_test.cpp @@ -29,7 +29,6 @@ class CollectingObserver : public Observer { "CollectingSubscriber needs to copy the value in order to collect it"); void onNext(T next) override { - Observer::onNext(next); values_.push_back(std::move(next)); } diff --git a/yarpl/test/ReferenceTest.cpp b/yarpl/test/ReferenceTest.cpp index 218d31831..3bc462a33 100644 --- a/yarpl/test/ReferenceTest.cpp +++ b/yarpl/test/ReferenceTest.cpp @@ -15,7 +15,9 @@ using yarpl::flowable::Subscriber; namespace { template -class MySubscriber : public Subscriber {}; +class MySubscriber : public Subscriber { + void onNext(T) override {} +}; } TEST(ReferenceTest, Upcast) { @@ -35,7 +37,7 @@ TEST(ReferenceTest, Upcast) { } TEST(RefcountedTest, CopyAssign) { - using Sub = Subscriber; + using Sub = MySubscriber; Reference a(new Sub()); Reference b(a); EXPECT_EQ(2u, a->count()); @@ -47,7 +49,7 @@ TEST(RefcountedTest, CopyAssign) { } TEST(RefcountedTest, MoveAssign) { - using Sub = Subscriber; + using Sub = MySubscriber; Reference a(new Sub()); Reference b(a); EXPECT_EQ(2u, a->count()); @@ -58,7 +60,7 @@ TEST(RefcountedTest, MoveAssign) { } TEST(RefcountedTest, CopyAssignTemplate) { - using Sub = Subscriber; + using Sub = MySubscriber; Reference a(new Sub()); Reference b(a); EXPECT_EQ(2u, a->count()); @@ -71,7 +73,7 @@ TEST(RefcountedTest, CopyAssignTemplate) { } TEST(RefcountedTest, MoveAssignTemplate) { - using Sub = Subscriber; + using Sub = MySubscriber; Reference a(new Sub()); Reference b(a); EXPECT_EQ(2u, a->count()); From fedac2726a26c1daff10461750e197b4637bb238 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Thu, 18 May 2017 17:10:22 +0100 Subject: [PATCH 26/31] removing unused methods from RequestHandler (#457) --- src/statemachine/RSocketStateMachine.cpp | 52 +---------------------- src/temporary_home/NullRequestHandler.cpp | 14 ------ src/temporary_home/NullRequestHandler.h | 9 ---- src/temporary_home/RequestHandler.h | 18 -------- 4 files changed, 2 insertions(+), 91 deletions(-) diff --git a/src/statemachine/RSocketStateMachine.cpp b/src/statemachine/RSocketStateMachine.cpp index 86c6775dd..189487ccc 100644 --- a/src/statemachine/RSocketStateMachine.cpp +++ b/src/statemachine/RSocketStateMachine.cpp @@ -449,34 +449,6 @@ void RSocketStateMachine::handleConnectionFrame( } return; } - case FrameType::SETUP: { - Frame_SETUP frame; - if (!deserializeFrameOrError(frame, std::move(payload))) { - return; - } - if (!!(frame.header_.flags_ & FrameFlags::RESUME_ENABLE)) { - remoteResumeable_ = true; - } else { - remoteResumeable_ = false; - } - if (!!(frame.header_.flags_ & FrameFlags::LEASE)) { - // TODO(yschimke) We don't have the correct lease and wait logic above - // yet - LOG(ERROR) << "ignoring setup frame with lease"; - } - - SetupParameters setupPayload; - frame.moveToSetupPayload(setupPayload); - - // this should be already set to the correct version - if (frameSerializer_->protocolVersion() != setupPayload.protocolVersion) { - closeWithError(Frame_ERROR::badSetupFrame("invalid protocol version")); - return; - } - - requestHandler_->handleSetupPayload(std::move(setupPayload)); - return; - } case FrameType::METADATA_PUSH: { Frame_METADATA_PUSH frame; if (deserializeFrameOrError(frame, std::move(payload))) { @@ -484,28 +456,6 @@ void RSocketStateMachine::handleConnectionFrame( } return; } - case FrameType::RESUME: { - if (mode_ == ReactiveSocketMode::SERVER && isResumable_) { - Frame_RESUME frame; - if (!deserializeFrameOrError(frame, std::move(payload))) { - return; - } - - auto resumed = requestHandler_->handleResume(ResumeParameters( - frame.token_, - frame.lastReceivedServerPosition_, - frame.clientPosition_, - ProtocolVersion(frame.versionMajor_, frame.versionMinor_))); - - if (!resumed) { - closeWithError(Frame_ERROR::connectionError("can not resume")); - } - } else { - closeWithError( - Frame_ERROR::connectionError("RS not resumable. Can not resume")); - } - return; - } case FrameType::RESUME_OK: { Frame_RESUME_OK frame; if (!deserializeFrameOrError(frame, std::move(payload))) { @@ -547,6 +497,8 @@ void RSocketStateMachine::handleConnectionFrame( StreamCompletionSignal::ERROR); return; } + case FrameType::SETUP: // this should be processed in ServerConnectionAcceptor + case FrameType::RESUME: // this should be processed in ServerConnectionAcceptor case FrameType::RESERVED: case FrameType::LEASE: case FrameType::REQUEST_RESPONSE: diff --git a/src/temporary_home/NullRequestHandler.cpp b/src/temporary_home/NullRequestHandler.cpp index 00d9fdec8..235d7493e 100644 --- a/src/temporary_home/NullRequestHandler.cpp +++ b/src/temporary_home/NullRequestHandler.cpp @@ -50,20 +50,6 @@ void NullRequestHandler::handleFireAndForgetRequest( void NullRequestHandler::handleMetadataPush( std::unique_ptr /*request*/) noexcept {} -std::shared_ptr NullRequestHandler::handleSetupPayload( - SetupParameters /*request*/) noexcept { - return nullptr; -} - -bool NullRequestHandler::handleResume(ResumeParameters) noexcept { - return false; -} - -void NullRequestHandler::handleCleanResume( - Reference /* response */) noexcept {} - -void NullRequestHandler::handleDirtyResume( - Reference /* response */) noexcept {} void NullRequestHandler::onSubscriptionPaused( const Reference&) noexcept {} diff --git a/src/temporary_home/NullRequestHandler.h b/src/temporary_home/NullRequestHandler.h index cf3c94f62..6e9bb6995 100644 --- a/src/temporary_home/NullRequestHandler.h +++ b/src/temporary_home/NullRequestHandler.h @@ -60,15 +60,6 @@ class NullRequestHandler : public RequestHandler { void handleMetadataPush( std::unique_ptr request) noexcept override; - std::shared_ptr handleSetupPayload( - SetupParameters request) noexcept override; - - bool handleResume(ResumeParameters) noexcept override; - - void handleCleanResume(yarpl::Reference - response) noexcept override; - void handleDirtyResume(yarpl::Reference - response) noexcept override; void onSubscriptionPaused( const yarpl::Reference& diff --git a/src/temporary_home/RequestHandler.h b/src/temporary_home/RequestHandler.h index bfc37bd98..3c3bec0c6 100644 --- a/src/temporary_home/RequestHandler.h +++ b/src/temporary_home/RequestHandler.h @@ -48,24 +48,6 @@ class RequestHandler { virtual void handleMetadataPush( std::unique_ptr request) noexcept = 0; - /// Temporary home - this should eventually be an input to asking for a - /// RequestHandler so negotiation is possible - virtual std::shared_ptr handleSetupPayload( - SetupParameters request) noexcept = 0; - - /// Temporary home - this should accompany handleSetupPayload - /// Return stream state for the given token. Return nullptr to disable resume - virtual bool handleResume(ResumeParameters resumeParams) noexcept = 0; - - // Handle a stream that can resume in a "clean" state. Client and Server are - // up-to-date. - virtual void handleCleanResume( - yarpl::Reference response) noexcept = 0; - - // Handle a stream that can resume in a "dirty" state. Client is "behind" - // Server. - virtual void handleDirtyResume( - yarpl::Reference response) noexcept = 0; // TODO: cleanup the methods above virtual void onSubscriptionPaused( From bdb5591c1db9260a9b6cbaf5b2ab53957e27b0bd Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Thu, 18 May 2017 17:10:56 +0100 Subject: [PATCH 27/31] disabling broken tcp tests (#459) --- test/RequestResponseTest.cpp | 2 +- test/RequestStreamTest.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/RequestResponseTest.cpp b/test/RequestResponseTest.cpp index e23740282..18e792329 100644 --- a/test/RequestResponseTest.cpp +++ b/test/RequestResponseTest.cpp @@ -33,7 +33,7 @@ class TestHandler : public rsocket::RSocketResponder { }; } -TEST(RequestResponseTest, Hello) { +TEST(RequestResponseTest, DISABLED_Hello) { auto port = randPort(); auto server = makeServer(port, std::make_shared()); auto client = makeClient(port); diff --git a/test/RequestStreamTest.cpp b/test/RequestStreamTest.cpp index 25cbe8c6e..16584242e 100644 --- a/test/RequestStreamTest.cpp +++ b/test/RequestStreamTest.cpp @@ -31,7 +31,7 @@ class TestHandlerSync : public rsocket::RSocketResponder { } }; -TEST(RequestStreamTest, HelloSync) { +TEST(RequestStreamTest, DISABLED_HelloSync) { auto port = randPort(); auto server = makeServer(port, std::make_shared()); auto client = makeClient(port); @@ -76,7 +76,7 @@ class TestHandlerAsync : public rsocket::RSocketResponder { }; } -TEST(RequestStreamTest, HelloAsync) { +TEST(RequestStreamTest, DISABLED_HelloAsync) { auto port = randPort(); auto server = makeServer(port, std::make_shared()); auto client = makeClient(port); From dbf7fe9a7fc27deeaf411d1b6be37eea4c4cd0e4 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Thu, 18 May 2017 20:47:44 +0100 Subject: [PATCH 28/31] TcpDuplexConnection supports multiple subscribes (#458) * TcpDuplexConnection supports multiple calls to getOutput/setInput * move setup and resume frame handling from StandardReactiveSocket to ConnectionAutomaton * rebasing * fixing resume server test * fixing build after merge --- src/internal/Common.h | 1 - src/transports/tcp/TcpDuplexConnection.cpp | 163 +++++++++++++++------ src/transports/tcp/TcpDuplexConnection.h | 8 + 3 files changed, 125 insertions(+), 47 deletions(-) diff --git a/src/internal/Common.h b/src/internal/Common.h index 62a2e512a..b2aaee294 100644 --- a/src/internal/Common.h +++ b/src/internal/Common.h @@ -25,7 +25,6 @@ typedef Range StringPiece; namespace rsocket { -class ReactiveSocket; enum class FrameType : uint8_t; std::string to_string(FrameType); diff --git a/src/transports/tcp/TcpDuplexConnection.cpp b/src/transports/tcp/TcpDuplexConnection.cpp index 3bcbfe2c5..48acebe18 100644 --- a/src/transports/tcp/TcpDuplexConnection.cpp +++ b/src/transports/tcp/TcpDuplexConnection.cpp @@ -10,81 +10,74 @@ namespace rsocket { using namespace ::folly; class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, - public ::folly::AsyncTransportWrapper::ReadCallback, - public SubscriptionBase, - public SubscriberBaseT> { + public ::folly::AsyncTransportWrapper::ReadCallback { public: explicit TcpReaderWriter( folly::AsyncSocket::UniquePtr&& socket, - folly::Executor& executor, std::shared_ptr stats) - : ExecutorBase(executor), - stats_(std::move(stats)), - socket_(std::move(socket)) {} + : socket_(std::move(socket)), stats_(std::move(stats)) {} ~TcpReaderWriter() { - socket_->close(); + CHECK(isClosed()); + DCHECK(!inputSubscriber_); } void setInput( std::shared_ptr>> inputSubscriber) { + if (isClosed()) { + inputSubscriber->onComplete(); + return; + } + CHECK(!inputSubscriber_); inputSubscriber_ = std::move(inputSubscriber); - inputSubscriber_->onSubscribe(SubscriptionBase::shared_from_this()); + // safe to call repeatedly socket_->setReadCB(this); } - const std::shared_ptr stats_; - - private: - void onSubscribeImpl( - std::shared_ptr subscription) noexcept override { - // no flow control at tcp level, since we can't know the size of messages - subscription->request(std::numeric_limits::max()); - } - - void onNextImpl(std::unique_ptr element) noexcept override { - send(std::move(element)); - } - - void onCompleteImpl() noexcept override { - closeFromWriter(); - } - - void onErrorImpl(folly::exception_wrapper ex) noexcept override { - closeFromWriter(); - } - - void requestImpl(size_t n) noexcept override { - // ignored for now, currently flow control is only at higher layers - } - - void cancelImpl() noexcept override { - closeFromReader(); + void setOutputSubscription(std::shared_ptr subscription) { + if (isClosed()) { + subscription->cancel(); + } else { + // no flow control at tcp level, since we can't know the size of messages + subscription->request(std::numeric_limits::max()); + outputSubscription_ = std::move(subscription); + } } void send(std::unique_ptr element) { + if (isClosed()) { + return; + } + stats_->bytesWritten(element->computeChainDataLength()); socket_->writeChain(this, std::move(element)); } void closeFromWriter() { + if (isClosed()) { + return; + } + socket_->close(); } void closeFromReader() { - socket_->close(); + closeFromWriter(); } + private: void writeSuccess() noexcept override {} + void writeErr( size_t bytesWritten, const ::folly::AsyncSocketException& ex) noexcept override { if (auto subscriber = std::move(inputSubscriber_)) { subscriber->onError(ex); } + close(); } void getReadBuffer(void** bufReturn, size_t* lenReturn) noexcept override { @@ -93,7 +86,6 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, void readDataAvailable(size_t len) noexcept override { readBuffer_.postallocate(len); - stats_->bytesRead(len); if (inputSubscriber_) { @@ -105,12 +97,14 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, if (auto subscriber = std::move(inputSubscriber_)) { subscriber->onComplete(); } + close(); } void readErr(const folly::AsyncSocketException& ex) noexcept override { if (auto subscriber = std::move(inputSubscriber_)) { subscriber->onError(ex); } + close(); } bool isBufferMovable() noexcept override { @@ -122,37 +116,114 @@ class TcpReaderWriter : public ::folly::AsyncTransportWrapper::WriteCallback, inputSubscriber_->onNext(std::move(readBuf)); } + bool isClosed() const { + return !socket_; + } + + void close() { + if (auto socket = std::move(socket_)) { + socket->close(); + } + if (auto outputSubscription = std::move(outputSubscription_)) { + outputSubscription->cancel(); + } + } + folly::IOBufQueue readBuffer_{folly::IOBufQueue::cacheChainLength()}; folly::AsyncSocket::UniquePtr socket_; + const std::shared_ptr stats_; std::shared_ptr>> inputSubscriber_; + std::shared_ptr outputSubscription_; +}; + +class TcpOutputSubscriber + : public SubscriberBaseT> { + public: + TcpOutputSubscriber( + std::shared_ptr tcpReaderWriter, + folly::Executor& executor) + : ExecutorBase(executor), tcpReaderWriter_(std::move(tcpReaderWriter)) {} + + void onSubscribeImpl( + std::shared_ptr subscription) noexcept override { + if (tcpReaderWriter_) { + // no flow control at tcp level, since we can't know the size of messages + subscription->request(std::numeric_limits::max()); + tcpReaderWriter_->setOutputSubscription(std::move(subscription)); + } else { + LOG(ERROR) << "trying to resubscribe on a closed subscriber"; + subscription->cancel(); + } + } + + void onNextImpl(std::unique_ptr element) noexcept override { + CHECK(tcpReaderWriter_); + tcpReaderWriter_->send(std::move(element)); + } + + void onCompleteImpl() noexcept override { + CHECK(tcpReaderWriter_); + auto tcpReaderWriter = std::move(tcpReaderWriter_); + tcpReaderWriter->closeFromWriter(); + } + + void onErrorImpl(folly::exception_wrapper ex) noexcept override { + onCompleteImpl(); + } + + private: + std::shared_ptr tcpReaderWriter_; +}; + +class TcpInputSubscription : public SubscriptionBase { + public: + TcpInputSubscription( + std::shared_ptr tcpReaderWriter, + folly::Executor& executor) + : ExecutorBase(executor), tcpReaderWriter_(std::move(tcpReaderWriter)) { + CHECK(tcpReaderWriter_); + } + + void requestImpl(size_t n) noexcept override { + // TcpDuplexConnection doesnt support propper flow control + } + + void cancelImpl() noexcept override { + tcpReaderWriter_->closeFromReader(); + } + + private: + std::shared_ptr tcpReaderWriter_; }; TcpDuplexConnection::TcpDuplexConnection( folly::AsyncSocket::UniquePtr&& socket, folly::Executor& executor, std::shared_ptr stats) - : tcpReaderWriter_(std::make_shared( - std::move(socket), - executor, - std::move(stats))) { - tcpReaderWriter_->stats_->duplexConnectionCreated("tcp", this); + : tcpReaderWriter_( + std::make_shared(std::move(socket), stats)), + stats_(stats), + executor_(executor) { + stats_->duplexConnectionCreated("tcp", this); } TcpDuplexConnection::~TcpDuplexConnection() { - tcpReaderWriter_->stats_->duplexConnectionClosed("tcp", this); + stats_->duplexConnectionClosed("tcp", this); } std::shared_ptr>> TcpDuplexConnection::getOutput() { - return tcpReaderWriter_; + return std::make_shared(tcpReaderWriter_, executor_); } void TcpDuplexConnection::setInput( std::shared_ptr>> inputSubscriber) { + inputSubscriber->onSubscribe( + std::make_shared(tcpReaderWriter_, executor_)); tcpReaderWriter_->setInput(std::move(inputSubscriber)); } -} // reactivesocket +} // rsocket diff --git a/src/transports/tcp/TcpDuplexConnection.h b/src/transports/tcp/TcpDuplexConnection.h index 428d4f3d9..c981b2b4a 100644 --- a/src/transports/tcp/TcpDuplexConnection.h +++ b/src/transports/tcp/TcpDuplexConnection.h @@ -19,6 +19,12 @@ class TcpDuplexConnection : public DuplexConnection { std::shared_ptr stats = RSocketStats::noop()); ~TcpDuplexConnection(); + // + // both getOutput and setOutput are ok to be called multiple times + // on a single instance of TcpDuplexConnection + // the latest input/output will be used + // + std::shared_ptr>> getOutput() override; @@ -27,5 +33,7 @@ class TcpDuplexConnection : public DuplexConnection { private: std::shared_ptr tcpReaderWriter_; + std::shared_ptr stats_; + folly::Executor& executor_; }; } // reactivesocket From d08889d12268879ad313724ca1ea396b57ab9b83 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Thu, 18 May 2017 21:13:38 +0100 Subject: [PATCH 29/31] replacing initializer list with ctor (#460) --- benchmarks/RequestResponseLatency.cpp | 2 +- benchmarks/RequestResponseThroughput.cpp | 2 +- benchmarks/StreamThroughput.cpp | 2 +- src/transports/tcp/TcpConnectionAcceptor.h | 10 +++++++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/benchmarks/RequestResponseLatency.cpp b/benchmarks/RequestResponseLatency.cpp index 97db5403c..54fb00ec8 100644 --- a/benchmarks/RequestResponseLatency.cpp +++ b/benchmarks/RequestResponseLatency.cpp @@ -163,7 +163,7 @@ class BM_RsFixture : public benchmark::Fixture { : host_(FLAGS_host), port_(static_cast(FLAGS_port)), serverRs_(RSocket::createServer(std::make_unique( - TcpConnectionAcceptor::Options{port_}))), + TcpConnectionAcceptor::Options(port_)))), handler_(std::make_shared()) { FLAGS_v = 0; FLAGS_minloglevel = 6; diff --git a/benchmarks/RequestResponseThroughput.cpp b/benchmarks/RequestResponseThroughput.cpp index 67c452a11..9dab00e39 100644 --- a/benchmarks/RequestResponseThroughput.cpp +++ b/benchmarks/RequestResponseThroughput.cpp @@ -164,7 +164,7 @@ class BM_RsFixture : public benchmark::Fixture { : host_(FLAGS_host), port_(static_cast(FLAGS_port)), serverRs_(RSocket::createServer(std::make_unique( - TcpConnectionAcceptor::Options{port_}))), + TcpConnectionAcceptor::Options(port_)))), handler_(std::make_shared()) { FLAGS_v = 0; FLAGS_minloglevel = 6; diff --git a/benchmarks/StreamThroughput.cpp b/benchmarks/StreamThroughput.cpp index a168e8278..82488a1ee 100644 --- a/benchmarks/StreamThroughput.cpp +++ b/benchmarks/StreamThroughput.cpp @@ -161,7 +161,7 @@ class BM_RsFixture : public benchmark::Fixture { : host_(FLAGS_host), port_(static_cast(FLAGS_port)), serverRs_(RSocket::createServer(std::make_unique( - TcpConnectionAcceptor::Options{port_}))), + TcpConnectionAcceptor::Options(port_)))), handler_(std::make_shared()) { FLAGS_minloglevel = 100; serverRs_->start([this](auto r) { return handler_; }); diff --git a/src/transports/tcp/TcpConnectionAcceptor.h b/src/transports/tcp/TcpConnectionAcceptor.h index 1502f83e8..f33b7fd84 100644 --- a/src/transports/tcp/TcpConnectionAcceptor.h +++ b/src/transports/tcp/TcpConnectionAcceptor.h @@ -19,14 +19,18 @@ namespace rsocket { class TcpConnectionAcceptor : public ConnectionAcceptor { public: struct Options { + explicit Options(uint16_t port_ = 8080, size_t threads_ = 1, + int backlog_ = 10) : port(port_), threads(threads_), + backlog(backlog_) {} + /// Port to listen on for TCP requests. - uint16_t port{8080}; + uint16_t port; /// Number of worker threads processing requests. - size_t threads{1}; + size_t threads; /// Number of connections to buffer before accept handlers process them. - int backlog{10}; + int backlog; }; ////////////////////////////////////////////////////////////////////////////// From 43db4a4334a078e5e15ed472cfde7003ae2ad842 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Thu, 18 May 2017 21:28:33 +0100 Subject: [PATCH 30/31] Flowables::fromGenerator operator (#461) * move setup and resume frame handling from StandardReactiveSocket to ConnectionAutomaton * Flowables::fromGenerator operator * fixing reference cycle after cancel * addressing feedback * reverting change in FlowableOperator --- yarpl/include/yarpl/flowable/Flowable.h | 3 +- yarpl/include/yarpl/flowable/Flowables.h | 19 ++++++++ yarpl/test/FlowableTest.cpp | 55 +++++++++++++++++++++--- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/yarpl/include/yarpl/flowable/Flowable.h b/yarpl/include/yarpl/flowable/Flowable.h index 8d02ebcdc..7c4f0545f 100644 --- a/yarpl/include/yarpl/flowable/Flowable.h +++ b/yarpl/include/yarpl/flowable/Flowable.h @@ -231,7 +231,8 @@ class Flowable : public virtual Refcounted { // Don't destroy a locked mutex. lock.unlock(); - return release(); + release(); + return; } // If no more items can be emitted now, wait for a request(n). diff --git a/yarpl/include/yarpl/flowable/Flowables.h b/yarpl/include/yarpl/flowable/Flowables.h index e7516c8fb..dad7bfade 100644 --- a/yarpl/include/yarpl/flowable/Flowables.h +++ b/yarpl/include/yarpl/flowable/Flowables.h @@ -116,6 +116,25 @@ class Flowables { return Flowable::create(std::move(lambda)); } + template + static Reference> fromGenerator(TGenerator generator) { + auto lambda = [generator = std::move(generator)] + (Subscriber& subscriber, int64_t requested) { + int64_t generated = 0; + try { + while (generated < requested) { + subscriber.onNext(generator()); + ++generated; + } + return std::make_tuple(generated, false); + } catch(...) { + subscriber.onError(std::current_exception()); + return std::make_tuple(generated, true); + } + }; + return Flowable::create(std::move(lambda)); + } + private: Flowables() = delete; }; diff --git a/yarpl/test/FlowableTest.cpp b/yarpl/test/FlowableTest.cpp index 841cfa4d4..13227f4bd 100644 --- a/yarpl/test/FlowableTest.cpp +++ b/yarpl/test/FlowableTest.cpp @@ -16,11 +16,7 @@ void unreachable() { template class CollectingSubscriber : public Subscriber { public: - static_assert( - std::is_copy_constructible::value, - "CollectingSubscriber needs to copy the value in order to collect it"); - - CollectingSubscriber(int64_t requestCount = 100) + explicit CollectingSubscriber(int64_t requestCount = 100) : requestCount_(requestCount) {} void onSubscribe(Reference subscription) override { @@ -64,6 +60,10 @@ class CollectingSubscriber : public Subscriber { return errorMsg_; } + void cancelSubscription() { + Subscriber::subscription()->cancel(); + } + private: std::vector values_; std::string errorMsg_; @@ -210,6 +210,51 @@ TEST(FlowableTest, FlowableEmpty) { EXPECT_EQ(collector->error(), false); } +TEST(FlowableTest, FlowableFromGenerator) { + EXPECT_EQ(0u, Refcounted::objects()); + + auto flowable = Flowables::fromGenerator>( + [] {return std::unique_ptr();} + ); + EXPECT_EQ(1u, Refcounted::objects()); + + auto collector = make_ref>>(10); + flowable->subscribe(collector); + + EXPECT_EQ(collector->complete(), false); + EXPECT_EQ(collector->error(), false); + EXPECT_EQ(std::size_t{10}, collector->values().size()); + + collector->cancelSubscription(); + + flowable.reset(); + collector.reset(); + EXPECT_EQ(0u, Refcounted::objects()); +} + +TEST(FlowableTest, FlowableFromGeneratorException) { + EXPECT_EQ(0u, Refcounted::objects()); + + int count = 5; + auto flowable = Flowables::fromGenerator>( + [&] { + while (count--) { return std::unique_ptr(); } + throw std::runtime_error("error from generator"); + }); + EXPECT_EQ(1u, Refcounted::objects()); + + auto collector = make_ref>>(10); + flowable->subscribe(collector); + + EXPECT_EQ(collector->complete(), false); + EXPECT_EQ(collector->error(), true); + EXPECT_EQ(std::size_t{5}, collector->values().size()); + + collector.reset(); + flowable.reset(); + EXPECT_EQ(0u, Refcounted::objects()); +} + TEST(FlowableTest, SubscribersComplete) { EXPECT_EQ(0u, Refcounted::objects()); From e33c6ca4514076797b2a098657d3eaa6e497c097 Mon Sep 17 00:00:00 2001 From: Ondrej Lehecka Date: Fri, 19 May 2017 10:42:27 +0100 Subject: [PATCH 31/31] disable asan for gcc5 and gcc6 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ea3df8a56..5225eb462 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ matrix: sources: - ubuntu-toolchain-r-test - - env: GCC_VERSION=5 BUILD_TYPE=Debug CPP_VERSION=14 ASAN=On + - env: GCC_VERSION=5 BUILD_TYPE=Debug CPP_VERSION=14 ASAN=Off os: linux addons: &gcc5 apt: @@ -40,7 +40,7 @@ matrix: sources: - ubuntu-toolchain-r-test - - env: GCC_VERSION=6 BUILD_TYPE=Debug CPP_VERSION=14 ASAN=On + - env: GCC_VERSION=6 BUILD_TYPE=Debug CPP_VERSION=14 ASAN=Off os: linux addons: &gcc6 apt: