From 1433f52499a7d2e8324efb0629ec1b8076f66aeb Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Fri, 24 Jul 2015 20:51:39 -0700 Subject: [PATCH 1/8] Compile and run locally the interop C++ server before the tests --- src/objective-c/tests/run_tests.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/objective-c/tests/run_tests.sh b/src/objective-c/tests/run_tests.sh index 37fced3a62e..48829fc2439 100755 --- a/src/objective-c/tests/run_tests.sh +++ b/src/objective-c/tests/run_tests.sh @@ -32,10 +32,22 @@ set -e cd $(dirname $0) +# Compile the C++ interop server if it doesn't exist yet. This has to be done +# before pod install because the latter renames some C gRPC files and not the +# interop server references to them. +cd ../../.. +[ -f bins/dbg/interop_server ] || make CONFIG=dbg interop_server +cd - + # TODO(jcanizales): Remove when Cocoapods issue #3823 is resolved. export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES pod install +# Run the server. +../../../bins/dbg/interop_server --port=5050 & +# Kill it when this script exits. +trap 'kill -9 `jobs -p`' EXIT + # xcodebuild is very verbose. We filter its output and tell Bash to fail if any # element of the pipe fails. # TODO(jcanizales): Use xctool instead? Issue #2540. From ce8ee61008d330b300860f160338bd36eea0ec4d Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Fri, 24 Jul 2015 20:52:49 -0700 Subject: [PATCH 2/8] Temporarily point tests to localhost --- src/objective-c/tests/GRPCClientTests.m | 3 ++- src/objective-c/tests/InteropTests.m | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/objective-c/tests/GRPCClientTests.m b/src/objective-c/tests/GRPCClientTests.m index 3210ad70502..103e5ca3d49 100644 --- a/src/objective-c/tests/GRPCClientTests.m +++ b/src/objective-c/tests/GRPCClientTests.m @@ -43,7 +43,8 @@ // These are a few tests similar to InteropTests, but which use the generic gRPC client (GRPCCall) // rather than a generated proto library on top of it. -static NSString * const kHostAddress = @"grpc-test.sandbox.google.com"; +// grpc-test.sandbox.google.com +static NSString * const kHostAddress = @"http://localhost:5050"; static NSString * const kPackage = @"grpc.testing"; static NSString * const kService = @"TestService"; diff --git a/src/objective-c/tests/InteropTests.m b/src/objective-c/tests/InteropTests.m index 501f33317a1..b473d73422f 100644 --- a/src/objective-c/tests/InteropTests.m +++ b/src/objective-c/tests/InteropTests.m @@ -83,8 +83,10 @@ RMTTestService *_service; } +// grpc-test.sandbox.google.com + - (void)setUp { - _service = [[RMTTestService alloc] initWithHost:@"grpc-test.sandbox.google.com"]; + _service = [[RMTTestService alloc] initWithHost:@"http://localhost:5050"]; } // Tests as described here: https://github.com/grpc/grpc/blob/master/doc/interop-test-descriptions.md From 72b2701383ff270c9ad7186e90bde2987a8807c6 Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Fri, 24 Jul 2015 20:56:27 -0700 Subject: [PATCH 3/8] Disable tests: unknown method and bad access token MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit They don’t work against the local server. --- .../xcshareddata/xcschemes/AllTests.xcscheme | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme index 3a6e2c35912..a7e0ed110ec 100644 --- a/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme +++ b/src/objective-c/tests/Tests.xcodeproj/xcshareddata/xcschemes/AllTests.xcscheme @@ -38,6 +38,12 @@ ReferencedContainer = "container:Tests.xcodeproj"> + + + + From 0238b3ae47d9d1730feb2d25ec23a0e16f07e355 Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Thu, 30 Jul 2015 19:07:06 -0700 Subject: [PATCH 4/8] Generate deterministic UUIDs in the Pods project --- src/objective-c/tests/run_tests.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/objective-c/tests/run_tests.sh b/src/objective-c/tests/run_tests.sh index 48829fc2439..514fb07e57b 100755 --- a/src/objective-c/tests/run_tests.sh +++ b/src/objective-c/tests/run_tests.sh @@ -39,9 +39,8 @@ cd ../../.. [ -f bins/dbg/interop_server ] || make CONFIG=dbg interop_server cd - -# TODO(jcanizales): Remove when Cocoapods issue #3823 is resolved. -export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES -pod install +# Suppress error output because Cocoapods issue #3823 causes a flooding warning. +pod install 2>/dev/null # Run the server. ../../../bins/dbg/interop_server --port=5050 & From a0b3bfa35651d2e0223d0ccc5965ca413e7b4354 Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Thu, 30 Jul 2015 19:25:52 -0700 Subject: [PATCH 5/8] Start integrating ObjC tests in run_tests.py --- tools/run_tests/run_tests.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 1f44fc34fa8..0f02b4738b6 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -304,6 +304,25 @@ class CSharpLanguage(object): return 'csharp' +class ObjCLanguage(object): + + def test_specs(self, config, travis): + return [config.job_spec(['src/objective-c/tests/run_tests.sh'], None, + environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + + def make_targets(self): + return [] + + def build_steps(self): + return [] + + def supports_multi_config(self): + return False + + def __str__(self): + return 'objc' + + class Sanity(object): def test_specs(self, config, travis): @@ -369,6 +388,7 @@ _LANGUAGES = { 'python': PythonLanguage(), 'ruby': RubyLanguage(), 'csharp': CSharpLanguage(), + 'objc' : ObjCLanguage(), 'sanity': Sanity(), 'build': Build(), } From f4ff31a64208bac6c4ab87f9a848a3dc11b9797d Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Thu, 30 Jul 2015 20:37:52 -0700 Subject: [PATCH 6/8] Have tests podspecs make only the ObjC plugin --- .../generated_libraries/RemoteTestClient/RemoteTest.podspec | 3 +-- .../generated_libraries/RouteGuideClient/RouteGuide.podspec | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec index 7cc9a040fe0..8fc55f41b4d 100644 --- a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec +++ b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec @@ -9,8 +9,7 @@ Pod::Spec.new do |s| # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.prepare_command = <<-CMD cd ../../../.. - # TODO(jcanizales): Make only Objective-C plugin. - make plugins + make grpc_objective_c_plugin cd - protoc --plugin=protoc-gen-grpc=../../../../bins/opt/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto CMD diff --git a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec index 0e8dacd1c48..d38b72ccbea 100644 --- a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec +++ b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec @@ -9,8 +9,7 @@ Pod::Spec.new do |s| # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.prepare_command = <<-CMD cd ../../../.. - # TODO(jcanizales): Make only Objective-C plugin. - make plugins + make grpc_objective_c_plugin cd - protoc --plugin=protoc-gen-grpc=../../../../bins/opt/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto CMD From 856aca8d26c070c43c10b896d63c9b839da0fc66 Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Thu, 30 Jul 2015 20:42:08 -0700 Subject: [PATCH 7/8] Ensure the tests podspecs find the plugin they make --- .../generated_libraries/RemoteTestClient/RemoteTest.podspec | 4 ++-- .../generated_libraries/RouteGuideClient/RouteGuide.podspec | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec index 8fc55f41b4d..d897d1cf075 100644 --- a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec +++ b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec @@ -9,9 +9,9 @@ Pod::Spec.new do |s| # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.prepare_command = <<-CMD cd ../../../.. - make grpc_objective_c_plugin + make CONFIG=dbg grpc_objective_c_plugin cd - - protoc --plugin=protoc-gen-grpc=../../../../bins/opt/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto + protoc --plugin=protoc-gen-grpc=../../../../bins/dbg/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto CMD s.subspec "Messages" do |ms| diff --git a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec index d38b72ccbea..a6a7cf65f99 100644 --- a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec +++ b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec @@ -9,9 +9,9 @@ Pod::Spec.new do |s| # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.prepare_command = <<-CMD cd ../../../.. - make grpc_objective_c_plugin + make CONFIG=dbg grpc_objective_c_plugin cd - - protoc --plugin=protoc-gen-grpc=../../../../bins/opt/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto + protoc --plugin=protoc-gen-grpc=../../../../bins/dbg/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto CMD s.subspec "Messages" do |ms| From d0b32e9a55a11aa19263396c340b5f9f31119d2a Mon Sep 17 00:00:00 2001 From: Jorge Canizales Date: Thu, 30 Jul 2015 23:08:43 -0700 Subject: [PATCH 8/8] Make plugin & server, and pod install via run_tests.py --- .../RemoteTestClient/RemoteTest.podspec | 5 +-- .../RouteGuideClient/RouteGuide.podspec | 5 +-- src/objective-c/tests/build_tests.sh | 39 +++++++++++++++++++ src/objective-c/tests/run_tests.sh | 14 +------ tools/run_tests/run_tests.py | 4 +- 5 files changed, 45 insertions(+), 22 deletions(-) create mode 100755 src/objective-c/tests/build_tests.sh diff --git a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec index d897d1cf075..6b00efebb8b 100644 --- a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec +++ b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec @@ -8,10 +8,7 @@ Pod::Spec.new do |s| # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.prepare_command = <<-CMD - cd ../../../.. - make CONFIG=dbg grpc_objective_c_plugin - cd - - protoc --plugin=protoc-gen-grpc=../../../../bins/dbg/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto + protoc --plugin=protoc-gen-grpc=../../../../bins/$CONFIG/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto CMD s.subspec "Messages" do |ms| diff --git a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec index a6a7cf65f99..2c9cead7cf2 100644 --- a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec +++ b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec @@ -8,10 +8,7 @@ Pod::Spec.new do |s| # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.prepare_command = <<-CMD - cd ../../../.. - make CONFIG=dbg grpc_objective_c_plugin - cd - - protoc --plugin=protoc-gen-grpc=../../../../bins/dbg/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto + protoc --plugin=protoc-gen-grpc=../../../../bins/$CONFIG/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto CMD s.subspec "Messages" do |ms| diff --git a/src/objective-c/tests/build_tests.sh b/src/objective-c/tests/build_tests.sh new file mode 100755 index 00000000000..d98e0a769c6 --- /dev/null +++ b/src/objective-c/tests/build_tests.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright 2015, 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. + +set -e + +cd $(dirname $0) + +# The local test server needs to be compiled before this because pod install of +# gRPC renames some C gRPC files and not the server's code references to them. +# +# Suppress error output because Cocoapods issue #3823 causes a flooding warning. +pod install 2>/dev/null diff --git a/src/objective-c/tests/run_tests.sh b/src/objective-c/tests/run_tests.sh index 514fb07e57b..9afec687d68 100755 --- a/src/objective-c/tests/run_tests.sh +++ b/src/objective-c/tests/run_tests.sh @@ -32,18 +32,8 @@ set -e cd $(dirname $0) -# Compile the C++ interop server if it doesn't exist yet. This has to be done -# before pod install because the latter renames some C gRPC files and not the -# interop server references to them. -cd ../../.. -[ -f bins/dbg/interop_server ] || make CONFIG=dbg interop_server -cd - - -# Suppress error output because Cocoapods issue #3823 causes a flooding warning. -pod install 2>/dev/null - -# Run the server. -../../../bins/dbg/interop_server --port=5050 & +# Run the tests server. +../../../bins/$CONFIG/interop_server --port=5050 & # Kill it when this script exits. trap 'kill -9 `jobs -p`' EXIT diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 0f02b4738b6..a016924e401 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -311,10 +311,10 @@ class ObjCLanguage(object): environ=_FORCE_ENVIRON_FOR_WRAPPERS)] def make_targets(self): - return [] + return ['grpc_objective_c_plugin', 'interop_server'] def build_steps(self): - return [] + return [['src/objective-c/tests/build_tests.sh']] def supports_multi_config(self): return False