532450996a
The current check in ServerCallImpl is theoretically unsafe (#3059). Move that check into the stub, and expand the unit tests to cover other interesting edge cases on the server side: client sends one, but zero requests received at onHalfClose client sends one, but > 1 requests received at onHalfClose server sends one, but zero responses sent at onComplete server sends one, but > 1 responses sent via onNext fixes #2243 fixes #3059 |
||
---|---|---|
.. | ||
android | ||
gradle/wrapper | ||
src | ||
thrift | ||
README.md | ||
build.gradle | ||
gradlew | ||
gradlew.bat | ||
pom.xml | ||
settings.gradle |
README.md
grpc Examples
The examples require grpc-java to already be built. You are strongly encouraged to check out a git release tag, since there will already be a build of grpc available. Otherwise you must follow COMPILING.
You may want to read through the Quick Start Guide before trying out the examples.
To build the examples, run in this directory:
$ ./gradlew installDist
This creates the scripts hello-world-server
, hello-world-client
,
route-guide-server
, and route-guide-client
in the
build/install/examples/bin/
directory that run the examples. Each
example requires the server to be running before starting the client.
For example, to try the hello world example first run:
$ ./build/install/examples/bin/hello-world-server
And in a different terminal window run:
$ ./build/install/examples/bin/hello-world-client
That's it!
Please refer to gRPC Java's README and tutorial for more information.
Maven
If you prefer to use Maven:
$ mvn verify
$ # Run the server
$ mvn exec:java -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldServer
$ # In another terminal run the client
$ mvn exec:java -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldClient
Unit test examples
Examples for unit testing gRPC clients and servers are located in examples/src/test.
In general, we DO NOT allow overriding the client stub.
We encourage users to leverage InProcessTransport
as demonstrated in the examples to
write unit tests. InProcessTransport
is light-weight and runs the server
and client in the same process without any socket/TCP connection.
For testing a gRPC client, create the client with a real stub using an InProcessChannel, and test it against an InProcessServer with a mock/fake service implementation.
For testing a gRPC server, create the server as an InProcessServer, and test it against a real client stub with an InProcessChannel.
The gRPC-java library also provides a JUnit rule, GrpcServerRule, to do the starting up and shutting down boilerplate for you.