mirror of https://github.com/grpc/grpc.git
commit
b519af8b10
15 changed files with 237 additions and 234 deletions
@ -1,217 +0,0 @@ |
||||
These instructions only cover building grpc C and C++ libraries under |
||||
typical unix systems. If you need more information, please try grpc's |
||||
wiki pages: |
||||
|
||||
https://github.com/google/grpc/wiki |
||||
|
||||
|
||||
************************* |
||||
* If you are in a hurry * |
||||
************************* |
||||
|
||||
On Linux (Debian): |
||||
|
||||
Note: you will need to add the Debian 'jessie-backports' distribution to your sources |
||||
file first. |
||||
|
||||
Add the following line to your `/etc/apt/sources.list` file: |
||||
|
||||
deb http://http.debian.net/debian jessie-backports main |
||||
|
||||
Install the gRPC library: |
||||
|
||||
$ [sudo] apt-get install libgrpc-dev |
||||
|
||||
OR |
||||
|
||||
$ git clone https://github.com/grpc/grpc.git |
||||
$ cd grpc |
||||
$ git submodule update --init |
||||
$ make |
||||
$ [sudo] make install |
||||
|
||||
You don't need anything else than GNU Make, gcc and autotools. Under a Debian |
||||
or Ubuntu system, this should boil down to the following packages: |
||||
|
||||
$ [sudo] apt-get install build-essential autoconf libtool |
||||
|
||||
Building the python wrapper requires the following: |
||||
|
||||
$ [sudo] apt-get install python-all-dev python-virtualenv |
||||
|
||||
If you want to install in a different directory than the default /usr/lib, you can |
||||
override it on the command line: |
||||
|
||||
$ [sudo] make install prefix=/opt |
||||
|
||||
|
||||
******************************* |
||||
* More detailled instructions * |
||||
******************************* |
||||
|
||||
Setting up dependencies |
||||
======================= |
||||
|
||||
Dependencies to compile the libraries |
||||
------------------------------------- |
||||
|
||||
grpc libraries have few external dependencies. If you need to compile and |
||||
install them, they are present in the third_party directory if you have |
||||
cloned the github repository recursively. If you didn't clone recursively, |
||||
you can still get them later by running the following command: |
||||
|
||||
$ git submodule update --init |
||||
|
||||
Note that the Makefile makes it much easier for you to compile from sources |
||||
if you were to clone recursively our git repository: it will automatically |
||||
compile zlib and OpenSSL, which are core requirements for grpc. Note this |
||||
creates grpc libraries that will have zlib and OpenSSL built-in inside of them, |
||||
which significantly increases the libraries' size. |
||||
|
||||
In order to decrease that size, you can manually install zlib and OpenSSL on |
||||
your system, so that the Makefile can use them instead. |
||||
|
||||
Under a Debian or Ubuntu system, one can acquire the development package |
||||
for zlib this way: |
||||
|
||||
# apt-get install zlib1g-dev |
||||
|
||||
To the best of our knowledge, no distribution has an OpenSSL package that |
||||
supports ALPN yet, so you would still have to depend on installing from source |
||||
for that particular dependency if you want to reduce the libraries' size. |
||||
|
||||
The recommended version of OpenSSL that provides ALPN support is available |
||||
at this URL: |
||||
|
||||
https://www.openssl.org/source/openssl-1.0.2.tar.gz |
||||
|
||||
|
||||
Dependencies to compile and run the tests |
||||
----------------------------------------- |
||||
|
||||
Compiling and running grpc plain-C tests dont't require any more dependency. |
||||
|
||||
|
||||
Compiling and running grpc C++ tests depend on protobuf 3.0.0, gtest and |
||||
gflags. Although gflags is provided in third_party, you will need to manually |
||||
install that dependency on your system to run these tests. |
||||
|
||||
Under a Debian or Ubuntu system, you can install the gtests and gflags packages |
||||
using apt-get: |
||||
|
||||
# apt-get install libgflags-dev libgtest-dev |
||||
|
||||
However, protobuf 3.0.0 isn't in a debian package yet, but the Makefile will |
||||
automatically try and compile the one present in third_party if you cloned the |
||||
repository recursively, and that it detects your system is lacking it. |
||||
|
||||
Compiling and installing protobuf 3.0.0 requires a few more dependencies in |
||||
itself, notably the autoconf suite. If you have apt-get, you can install |
||||
these dependencies this way: |
||||
|
||||
# apt-get install autoconf libtool |
||||
|
||||
If you want to run the tests using one of the sanitized configurations, you |
||||
will need clang and its instrumented libc++: |
||||
|
||||
# apt-get install clang libc++-dev |
||||
|
||||
Mac-specific notes: |
||||
------------------- |
||||
|
||||
For a Mac system, git is not available by default. You will first need to |
||||
install Xcode from the Mac AppStore and then run the following command from a |
||||
terminal: |
||||
|
||||
$ sudo xcode-select --install |
||||
|
||||
You should also install "port" following the instructions at |
||||
https://www.macports.org . This will reside in /opt/local/bin/port for |
||||
most Mac installations. Do the "git submodule" command listed above. |
||||
|
||||
Then execute the following for all the needed build dependencies |
||||
|
||||
$ sudo /opt/local/bin/port install autoconf automake libtool gflags cmake |
||||
$ mkdir ~/gtest-svn |
||||
$ svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn |
||||
$ mkdir mybuild |
||||
$ cd mybuild |
||||
$ cmake ../gtest-svn |
||||
$ make |
||||
$ make gtest.a gtest_main.a |
||||
$ sudo cp libgtest.a libgtest_main.a /opt/local/lib |
||||
$ sudo mkdir /opt/local/include/gtest |
||||
$ sudo cp -pr ../gtest-svn/include/gtest /opt/local/include/gtest |
||||
|
||||
If you are going to make changes and need to regenerate the projects file, |
||||
you will need to install certain modules for python. |
||||
|
||||
$ sudo easy_install simplejson mako |
||||
|
||||
Mingw-specific notes: |
||||
--------------------- |
||||
|
||||
While gRPC compiles properly under mingw, some more preparation work is needed. |
||||
The recommendation is to use msys2. The installation instructions are available |
||||
at that address: http://msys2.github.io/ |
||||
|
||||
Once this is installed, make sure you are using the following: MinGW-w64 Win64. |
||||
You'll be required to install a few more packages: |
||||
|
||||
$ pacman -S make mingw-w64-x86_64-gcc mingw-w64-x86_64-zlib autoconf automake libtool |
||||
|
||||
Please also install OpenSSL from that website: |
||||
|
||||
http://slproweb.com/products/Win32OpenSSL.html |
||||
|
||||
The package Win64 OpenSSL v1.0.2a should do. At that point you should be able |
||||
to compile gRPC with the following: |
||||
|
||||
$ export LDFLAGS="-L/mingw64/lib -L/c/OpenSSL-Win64" |
||||
$ export CPPFLAGS="-I/mingw64/include -I/c/OpenSSL-Win64/include" |
||||
$ make |
||||
|
||||
A word on OpenSSL |
||||
----------------- |
||||
|
||||
Secure HTTP2 requires the TLS extension ALPN (see rfc 7301 and |
||||
http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation |
||||
relies on OpenSSL's implementation. OpenSSL 1.0.2 is the first released version |
||||
of OpenSSL that has ALPN support, and this explains our dependency on it. |
||||
|
||||
Note that the Makefile supports compiling only the unsecure elements of grpc, |
||||
and if you do not have OpenSSL and do not want it, you can still proceed |
||||
with installing only the elements you require. However, we strongly recommend |
||||
the use of encryption for all network traffic, and discourage the use of grpc |
||||
without TLS. |
||||
|
||||
|
||||
Compiling |
||||
========= |
||||
|
||||
If you have all the dependencies mentioned above, you should simply be able |
||||
to go ahead and run "make" to compile grpc's C and C++ libraries: |
||||
|
||||
$ make |
||||
|
||||
|
||||
Testing |
||||
======= |
||||
|
||||
To build and run the tests, you can run the command: |
||||
|
||||
$ make test |
||||
|
||||
If you want to be able to run them in parallel, and get better output, you can |
||||
also use the python tool we have written: |
||||
|
||||
$ ./tools/run_tests/run_tests.py |
||||
|
||||
|
||||
Installing |
||||
========== |
||||
|
||||
Once everything is compiled, you should be able to install grpc C and C++ |
||||
libraries and headers: |
||||
|
||||
# make install |
@ -0,0 +1,46 @@ |
||||
#If you are in a hurry |
||||
|
||||
For language-specific installation instructions for gRPC runtime, please |
||||
refer to these documents |
||||
|
||||
* [C++](examples/cpp) |
||||
* [C#](src/csharp): NuGet package `Grpc` |
||||
* [Go](https://github.com/grpc/grpc-go): `go get google.golang.org/grpc` |
||||
* [Java](https://github.com/grpc/grpc-java) |
||||
* [Node](src/node): `npm install grpc` |
||||
* [Objective-C](src/objective-c) |
||||
* [PHP](src/php): `pecl install grpc-beta` |
||||
* [Python](src/python/grpcio): `pip install grpcio` |
||||
* [Ruby](src/ruby): `gem install grpc` |
||||
|
||||
|
||||
#Pre-requisites |
||||
|
||||
##Linux |
||||
|
||||
```sh |
||||
$ [sudo] apt-get install build-essential autoconf libtool |
||||
``` |
||||
|
||||
##Mac OSX |
||||
|
||||
For a Mac system, git is not available by default. You will first need to |
||||
install Xcode from the Mac AppStore and then run the following command from a |
||||
terminal: |
||||
|
||||
```sh |
||||
$ [sudo] xcode-select --install |
||||
``` |
||||
|
||||
#Build from Source |
||||
|
||||
For developers who are interested to contribute, here is how to compile the |
||||
gRPC C Core library. |
||||
|
||||
```sh |
||||
$ git clone https://github.com/grpc/grpc.git |
||||
$ cd grpc |
||||
$ git submodule update --init |
||||
$ make |
||||
$ [sudo] make install |
||||
``` |
@ -0,0 +1,62 @@ |
||||
[ |
||||
"_base_interface_test.AsyncEasyTest", |
||||
"_base_interface_test.AsyncPeasyTest", |
||||
"_base_interface_test.SyncEasyTest", |
||||
"_base_interface_test.SyncPeasyTest", |
||||
"_beta_features_test.BetaFeaturesTest", |
||||
"_beta_features_test.ContextManagementAndLifecycleTest", |
||||
"_channel_test.ChannelTest", |
||||
"_connectivity_channel_test.ChannelConnectivityTest", |
||||
"_core_over_links_base_interface_test.AsyncEasyTest", |
||||
"_core_over_links_base_interface_test.AsyncPeasyTest", |
||||
"_core_over_links_base_interface_test.SyncEasyTest", |
||||
"_core_over_links_base_interface_test.SyncPeasyTest", |
||||
"_crust_over_core_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", |
||||
"_crust_over_core_face_interface_test.DynamicInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_crust_over_core_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_crust_over_core_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", |
||||
"_crust_over_core_face_interface_test.GenericInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_crust_over_core_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_crust_over_core_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", |
||||
"_crust_over_core_face_interface_test.MultiCallableInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_crust_over_core_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.DynamicInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.GenericInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.MultiCallableInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_crust_over_core_over_links_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", |
||||
"_face_interface_test.DynamicInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", |
||||
"_face_interface_test.GenericInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", |
||||
"_face_interface_test.MultiCallableInvokerEventInvocationSynchronousEventServiceTest", |
||||
"_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", |
||||
"_implementations_test.ChannelCredentialsTest", |
||||
"_insecure_interop_test.InsecureInteropTest", |
||||
"_intermediary_low_test.CancellationTest", |
||||
"_intermediary_low_test.EchoTest", |
||||
"_intermediary_low_test.ExpirationTest", |
||||
"_intermediary_low_test.LonelyClientTest", |
||||
"_later_test.LaterTest", |
||||
"_logging_pool_test.LoggingPoolTest", |
||||
"_lonely_invocation_link_test.LonelyInvocationLinkTest", |
||||
"_low_test.HangingServerShutdown", |
||||
"_low_test.InsecureServerInsecureClient", |
||||
"_not_found_test.NotFoundTest", |
||||
"_sanity_test.Sanity", |
||||
"_secure_interop_test.SecureInteropTest", |
||||
"_transmission_test.RoundTripTest", |
||||
"_transmission_test.TransmissionTest", |
||||
"_utilities_test.ChannelConnectivityTest", |
||||
"beta_python_plugin_test.PythonPluginTest", |
||||
"cygrpc_test.InsecureServerInsecureClient", |
||||
"cygrpc_test.SecureServerSecureClient", |
||||
"cygrpc_test.TypeSmokeTest" |
||||
] |
@ -0,0 +1,30 @@ |
||||
# Copyright 2016, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
|
@ -0,0 +1,53 @@ |
||||
# Copyright 2016, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
import json |
||||
import unittest |
||||
|
||||
import tests |
||||
|
||||
|
||||
class Sanity(unittest.TestCase): |
||||
|
||||
def testTestsJsonUpToDate(self): |
||||
"""Autodiscovers all test suites and checks that tests.json is up to date""" |
||||
loader = tests.Loader() |
||||
loader.loadTestsFromNames(['tests']) |
||||
test_suite_names = [ |
||||
test_case_class.id().rsplit('.', 1)[0] |
||||
for test_case_class in tests._loader.iterate_suite_cases(loader.suite)] |
||||
test_suite_names = sorted(set(test_suite_names)) |
||||
|
||||
with open('src/python/grpcio/tests/tests.json') as tests_json_file: |
||||
tests_json = json.load(tests_json_file) |
||||
self.assertListEqual(test_suite_names, tests_json) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
unittest.main(verbosity=2) |
Loading…
Reference in new issue