Pārlūkot izejas kodu

Merge branch 'master' of github.com:grpc/grpc into codegen_lib

David Garcia Quintas 9 gadi atpakaļ
vecāks
revīzija
81932891af

+ 12 - 1
INSTALL.md

@@ -3,7 +3,7 @@
 For language-specific installation instructions for gRPC runtime, please
 For language-specific installation instructions for gRPC runtime, please
 refer to these documents
 refer to these documents
 
 
- * [C++](examples/cpp)
+ * [C++](examples/cpp): Currently to install gRPC for C++, you need to build from source as described below.
  * [C#](src/csharp): NuGet package `Grpc`
  * [C#](src/csharp): NuGet package `Grpc`
  * [Go](https://github.com/grpc/grpc-go): `go get google.golang.org/grpc`
  * [Go](https://github.com/grpc/grpc-go): `go get google.golang.org/grpc`
  * [Java](https://github.com/grpc/grpc-java)
  * [Java](https://github.com/grpc/grpc-java)
@@ -32,6 +32,17 @@ terminal:
  $ [sudo] xcode-select --install
  $ [sudo] xcode-select --install
 ```
 ```
 
 
+##Protoc
+
+By default gRPC uses [protocol buffers](https://github.com/google/protobuf),
+you will need the `protoc` compiler to generate stub server and client code.
+
+If you compile gRPC from source, as described below, the Makefile will
+automatically try and compile the `protoc` in third_party if you cloned the
+repository recursively and it detects that you don't already have it
+installed.
+
+
 #Build from Source
 #Build from Source
 
 
 For developers who are interested to contribute, here is how to compile the
 For developers who are interested to contribute, here is how to compile the

+ 1 - 1
examples/cpp/README.md

@@ -2,7 +2,7 @@
 
 
 ## Installation
 ## Installation
 
 
-To install gRPC on your system, follow the instructions [here](../../INSTALL.md).
+To install gRPC on your system, follow the instructions to build from source [here](../../INSTALL.md). This also installs the protocol buffer compiler `protoc` (if you don't have it already), and the C++ gRPC plugin for `protoc`.
 
 
 ## Hello C++ gRPC!
 ## Hello C++ gRPC!
 
 

+ 4 - 6
examples/php/README.md

@@ -4,16 +4,15 @@ gRPC in 3 minutes (PHP)
 PREREQUISITES
 PREREQUISITES
 -------------
 -------------
 
 
-This requires PHP 5.5 or greater.
+This requires `php` >=5.5, `phpize`, `pecl`, `phpunit`
 
 
 INSTALL
 INSTALL
 -------
 -------
- - On Mac OS X, install [homebrew][]. Run the following command to install gRPC.
+ - Install the gRPC PHP extension
 
 
    ```sh
    ```sh
-   $ curl -fsSL https://goo.gl/getgrpc | bash -s php
+   $ [sudo] pecl install grpc-beta
    ```
    ```
-   This will download and run the [gRPC install script][] and compile the gRPC PHP extension.
 
 
  - Clone this repository
  - Clone this repository
 
 
@@ -37,6 +36,7 @@ TRY IT!
    Please follow the instruction in [Node][] to run the server
    Please follow the instruction in [Node][] to run the server
    ```
    ```
    $ cd examples/node
    $ cd examples/node
+   $ npm install
    $ nodejs greeter_server.js
    $ nodejs greeter_server.js
    ```
    ```
 
 
@@ -58,7 +58,5 @@ TUTORIAL
 
 
 You can find a more detailed tutorial in [gRPC Basics: PHP][]
 You can find a more detailed tutorial in [gRPC Basics: PHP][]
 
 
-[homebrew]:http://brew.sh
-[gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install
 [Node]:https://github.com/grpc/grpc/tree/master/examples/node
 [Node]:https://github.com/grpc/grpc/tree/master/examples/node
 [gRPC Basics: PHP]:http://www.grpc.io/docs/tutorials/basic/php.html
 [gRPC Basics: PHP]:http://www.grpc.io/docs/tutorials/basic/php.html

+ 2 - 2
examples/python/route_guide/route_guide_server.py

@@ -1,4 +1,4 @@
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 # All rights reserved.
 #
 #
 # Redistribution and use in source and binary forms, with or without
 # Redistribution and use in source and binary forms, with or without
@@ -128,7 +128,7 @@ def serve():
     while True:
     while True:
       time.sleep(_ONE_DAY_IN_SECONDS)
       time.sleep(_ONE_DAY_IN_SECONDS)
   except KeyboardInterrupt:
   except KeyboardInterrupt:
-    server.stop()
+    server.stop(0)
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
   serve()
   serve()

+ 1 - 0
setup.py

@@ -165,6 +165,7 @@ COMMAND_CLASS = {
     'build_tagged_ext': precompiled.BuildTaggedExt,
     'build_tagged_ext': precompiled.BuildTaggedExt,
     'gather': commands.Gather,
     'gather': commands.Gather,
     'run_interop': commands.RunInterop,
     'run_interop': commands.RunInterop,
+    'test_lite': commands.TestLite
 }
 }
 
 
 # Ensure that package data is copied over before any commands have been run:
 # Ensure that package data is copied over before any commands have been run:

+ 1 - 1
src/node/README.md

@@ -5,7 +5,7 @@
 Beta
 Beta
 
 
 ## PREREQUISITES
 ## PREREQUISITES
-- `node`: This requires `node` to be installed. If you instead have the `nodejs` executable on Debian, you should install the [`nodejs-legacy`](https://packages.debian.org/sid/nodejs-legacy) package.
+- `node`: This requires `node` to be installed, version `0.12` or above. If you instead have the `nodejs` executable on Debian, you should install the [`nodejs-legacy`](https://packages.debian.org/sid/nodejs-legacy) package.
 
 
 ## INSTALLATION
 ## INSTALLATION
 
 

+ 85 - 32
src/php/README.md

@@ -9,14 +9,21 @@ Beta
 
 
 ## Environment
 ## Environment
 
 
-Prerequisite: PHP 5.5 or later, `phpunit`, `pecl`
+Prerequisite: `php` >=5.5, `phpize`, `pecl`, `phpunit`
 
 
-**Linux:**
+**Linux (Debian):**
 
 
 ```sh
 ```sh
 $ sudo apt-get install php5 php5-dev php-pear
 $ sudo apt-get install php5 php5-dev php-pear
 ```
 ```
 
 
+**Linux (CentOS):**
+
+```sh
+$ yum install php55w
+$ yum --enablerepo=remi,remi-php55 install php-devel php-pear
+```
+
 **Mac OS X:**
 **Mac OS X:**
 
 
 ```sh
 ```sh
@@ -24,11 +31,11 @@ $ curl -O http://pear.php.net/go-pear.phar
 $ sudo php -d detect_unicode=0 go-pear.phar
 $ sudo php -d detect_unicode=0 go-pear.phar
 ```
 ```
 
 
-**PHPUnit: (Both Linux and Mac OS X)**
+**PHPUnit:**
 ```sh
 ```sh
-$ curl https://phar.phpunit.de/phpunit.phar -o phpunit.phar
-$ chmod +x phpunit.phar
-$ sudo mv phpunit.phar /usr/local/bin/phpunit
+$ wget https://phar.phpunit.de/phpunit-old.phar
+$ chmod +x phpunit-old.phar
+$ sudo mv phpunit-old.phar /usr/bin/phpunit
 ```
 ```
 
 
 ## Quick Install
 ## Quick Install
@@ -39,15 +46,22 @@ Install the gRPC PHP extension
 sudo pecl install grpc-beta
 sudo pecl install grpc-beta
 ```
 ```
 
 
+This will compile and install the gRPC PHP extension into the standard PHP extension directory. You should be able to run the [unit tests](#unit-tests), with the PHP extension installed.
+
+To run tests with generated stub code from `.proto` files, you will also need the `composer`, `protoc` and `protoc-gen-php` binaries. You can find out how to get these [below](#generated-code-tests).
+
 ## Build from Source
 ## Build from Source
 
 
+
+### gRPC C core library
+
 Clone this repository
 Clone this repository
 
 
 ```sh
 ```sh
 $ git clone https://github.com/grpc/grpc.git
 $ git clone https://github.com/grpc/grpc.git
 ```
 ```
 
 
-Build and install the gRPC C core libraries
+Build and install the gRPC C core library
 
 
 ```sh
 ```sh
 $ cd grpc
 $ cd grpc
@@ -56,20 +70,15 @@ $ make
 $ sudo make install
 $ sudo make install
 ```
 ```
 
 
-Note: you may encounter a warning about the Protobuf compiler `protoc` 3.0.0+ not being installed. The following might help, and will be useful later on when we need to compile the `protoc-gen-php` tool.
+### gRPC PHP extension
 
 
-```sh
-$ cd grpc/third_party/protobuf
-$ sudo make install   # 'make' should have been run by core grpc
-```
-
-Install the gRPC PHP extension
+Install the gRPC PHP extension from PECL
 
 
 ```sh
 ```sh
 $ sudo pecl install grpc-beta
 $ sudo pecl install grpc-beta
 ```
 ```
 
 
-OR
+Or, compile from source
 
 
 ```sh
 ```sh
 $ cd grpc/src/php/ext/grpc
 $ cd grpc/src/php/ext/grpc
@@ -79,58 +88,98 @@ $ make
 $ sudo make install
 $ sudo make install
 ```
 ```
 
 
+### Update php.ini
+
 Add this line to your `php.ini` file, e.g. `/etc/php5/cli/php.ini`
 Add this line to your `php.ini` file, e.g. `/etc/php5/cli/php.ini`
 
 
 ```sh
 ```sh
 extension=grpc.so
 extension=grpc.so
 ```
 ```
 
 
-Install Composer
+## Unit Tests
+
+You will need the source code to run tests
+
+```sh
+$ git clone https://github.com/grpc/grpc.git
+$ cd grpc
+$ git pull --recurse-submodules && git submodule update --init --recursive
+```
+
+Run unit tests
 
 
 ```sh
 ```sh
 $ cd grpc/src/php
 $ cd grpc/src/php
+$ ./bin/run_tests.sh
+```
+
+## Generated Code Tests
+
+This section specifies the prerequisites for running the generated code tests, as well as how to run the tests themselves.
+
+### Composer
+
+If you don't have it already, install `composer` to pull in some runtime dependencies based on the `composer.json` file.
+
+```sh
 $ curl -sS https://getcomposer.org/installer | php
 $ curl -sS https://getcomposer.org/installer | php
 $ sudo mv composer.phar /usr/local/bin/composer
 $ sudo mv composer.phar /usr/local/bin/composer
+
+$ cd grpc/src/php
 $ composer install
 $ composer install
 ```
 ```
 
 
-## Unit Tests
+### Protobuf compiler
 
 
-Run unit tests
+Again if you don't have it already, you need to install the protobuf compiler `protoc`, version 3.0.0+.
+
+If you compiled the gRPC C core library from source above, the `protoc` binary should have been installed as well. If it hasn't been installed, you can run the following commands to install it.
 
 
 ```sh
 ```sh
-$ cd grpc/src/php
-$ ./bin/run_tests.sh
+$ cd grpc/third_party/protobuf
+$ sudo make install   # 'make' should have been run by core grpc
 ```
 ```
 
 
-## Generated Code Tests
+Alternatively, you can download `protoc` binaries from [the protocol buffers Github repository](https://github.com/google/protobuf/releases).
 
 
-Install `protoc-gen-php`
+
+### PHP protobuf compiler
+
+You need to install `protoc-gen-php` to generate stub class `.php` files from service definition `.proto` files.
 
 
 ```sh
 ```sh
-$ cd grpc/src/php/vendor/datto/protobuf-php
+$ cd grpc/src/php/vendor/datto/protobuf-php # if you had run `composer install` in the previous step
+
+OR
+
+$ git clone https://github.com/stanley-cheung/Protobuf-PHP # clone from github repo
+
 $ gem install rake ronn
 $ gem install rake ronn
 $ rake pear:package version=1.0
 $ rake pear:package version=1.0
 $ sudo pear install Protobuf-1.0.tgz
 $ sudo pear install Protobuf-1.0.tgz
 ```
 ```
 
 
-Generate client stub code
+### Client Stub
+
+Generate client stub classes from `.proto` files
 
 
 ```sh
 ```sh
 $ cd grpc/src/php
 $ cd grpc/src/php
 $ ./bin/generate_proto_php.sh
 $ ./bin/generate_proto_php.sh
 ```
 ```
 
 
-Run a local server serving the math services
+### Run test server
 
 
- - Please see [Node][] on how to run an example server
+Run a local server serving the math services. Please see [Node][] for how to run an example server.
 
 
 ```sh
 ```sh
-$ cd grpc/src/node
+$ cd grpc
 $ npm install
 $ npm install
-$ nodejs examples/math_server.js
+$ nodejs src/node/test/math/math_server.js
 ```
 ```
 
 
+### Run test client
+
 Run the generated code tests
 Run the generated code tests
 
 
 ```sh
 ```sh
@@ -161,13 +210,15 @@ $ sudo service apache2 restart
 Make sure the Node math server is still running, as above. 
 Make sure the Node math server is still running, as above. 
 
 
 ```sh
 ```sh
-$ cd grpc/src/node
-$ nodejs examples/math_server.js
+$ cd grpc
+$ npm install
+$ nodejs src/node/test/math/math_server.js
 ```
 ```
 
 
 Make sure you have run `composer install` to generate the `vendor/autoload.php` file
 Make sure you have run `composer install` to generate the `vendor/autoload.php` file
 
 
 ```sh
 ```sh
+$ cd grpc/src/php
 $ composer install
 $ composer install
 ```
 ```
 
 
@@ -229,13 +280,15 @@ $ sudo service php5-fpm restart
 Make sure the Node math server is still running, as above. 
 Make sure the Node math server is still running, as above. 
 
 
 ```sh
 ```sh
-$ cd grpc/src/node
-$ nodejs examples/math_server.js
+$ cd grpc
+$ npm install
+$ nodejs src/node/test/math/math_server.js
 ```
 ```
 
 
 Make sure you have run `composer install` to generate the `vendor/autoload.php` file
 Make sure you have run `composer install` to generate the `vendor/autoload.php` file
 
 
 ```sh
 ```sh
+$ cd grpc/src/php
 $ composer install
 $ composer install
 ```
 ```
 
 

+ 36 - 0
src/python/grpcio/commands.py

@@ -264,6 +264,42 @@ class Gather(setuptools.Command):
       self.distribution.fetch_build_eggs(self.distribution.tests_require)
       self.distribution.fetch_build_eggs(self.distribution.tests_require)
 
 
 
 
+class TestLite(setuptools.Command):
+  """Command to run tests without fetching or building anything."""
+
+  description = 'run tests without fetching or building anything.'
+  user_options = []
+
+  def initialize_options(self):
+    pass
+
+  def finalize_options(self):
+    # distutils requires this override.
+    pass
+
+  def run(self):
+    self._add_eggs_to_path()
+
+    import tests
+    loader = tests.Loader()
+    loader.loadTestsFromNames(['tests'])
+    runner = tests.Runner()
+    result = runner.run(loader.suite)
+    if not result.wasSuccessful():
+      sys.exit('Test failure')
+
+  def _add_eggs_to_path(self):
+    """Adds all egg files under .eggs to sys.path"""
+    # TODO(jtattemusch): there has to be a cleaner way to do this
+    import pkg_resources
+    eggs_dir = os.path.join(PYTHON_STEM, '../../../.eggs')
+    eggs = [os.path.join(eggs_dir, filename)
+            for filename in os.listdir(eggs_dir)
+            if filename.endswith('.egg')]
+    for egg in eggs:
+      sys.path.insert(0, pkg_resources.normalize_path(egg))
+
+
 class RunInterop(test.test):
 class RunInterop(test.test):
 
 
   description = 'run interop test client/server'
   description = 'run interop test client/server'

+ 15 - 4
test/cpp/qps/qps_worker.cc

@@ -101,6 +101,19 @@ static std::unique_ptr<Server> CreateServer(const ServerConfig& config) {
   abort();
   abort();
 }
 }
 
 
+class ScopedProfile GRPC_FINAL {
+ public:
+  ScopedProfile(const char* filename, bool enable) : enable_(enable) {
+    if (enable_) grpc_profiler_start(filename);
+  }
+  ~ScopedProfile() {
+    if (enable_) grpc_profiler_stop();
+  }
+
+ private:
+  const bool enable_;
+};
+
 class WorkerServiceImpl GRPC_FINAL : public WorkerService::Service {
 class WorkerServiceImpl GRPC_FINAL : public WorkerService::Service {
  public:
  public:
   WorkerServiceImpl(int server_port, QpsWorker* worker)
   WorkerServiceImpl(int server_port, QpsWorker* worker)
@@ -114,9 +127,8 @@ class WorkerServiceImpl GRPC_FINAL : public WorkerService::Service {
       return Status(StatusCode::RESOURCE_EXHAUSTED, "");
       return Status(StatusCode::RESOURCE_EXHAUSTED, "");
     }
     }
 
 
-    grpc_profiler_start("qps_client.prof");
+    ScopedProfile profile("qps_client.prof", false);
     Status ret = RunClientBody(ctx, stream);
     Status ret = RunClientBody(ctx, stream);
-    grpc_profiler_stop();
     return ret;
     return ret;
   }
   }
 
 
@@ -128,9 +140,8 @@ class WorkerServiceImpl GRPC_FINAL : public WorkerService::Service {
       return Status(StatusCode::RESOURCE_EXHAUSTED, "");
       return Status(StatusCode::RESOURCE_EXHAUSTED, "");
     }
     }
 
 
-    grpc_profiler_start("qps_server.prof");
+    ScopedProfile profile("qps_server.prof", false);
     Status ret = RunServerBody(ctx, stream);
     Status ret = RunServerBody(ctx, stream);
-    grpc_profiler_stop();
     return ret;
     return ret;
   }
   }
 
 

+ 1 - 1
tools/run_tests/run_python.sh

@@ -46,7 +46,7 @@ if [ "$CONFIG" = "gcov" ]
 then
 then
   tox
   tox
 else
 else
-  $ROOT/.tox/py27/bin/python $ROOT/setup.py test
+  $ROOT/.tox/py27/bin/python $ROOT/setup.py test_lite
 fi
 fi
 
 
 mkdir -p $ROOT/reports
 mkdir -p $ROOT/reports