From 2c86e064f0466affdae38cfd6785566a77e8bd03 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 9 Mar 2018 15:02:42 -0800 Subject: [PATCH 1/7] Add Node pure JS interop client --- .../interoptest/grpc_interop_node/Dockerfile | 3 +- tools/run_tests/run_interop_tests.py | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile index 17671a384ed..b480d31da28 100644 --- a/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile +++ b/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile @@ -75,7 +75,8 @@ RUN /bin/bash -l -c "nvm install 4 && npm config set cache /tmp/npm-cache && npm RUN /bin/bash -l -c "nvm install 5 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 6 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 8 && npm config set cache /tmp/npm-cache && npm install -g npm" -RUN /bin/bash -l -c "nvm alias default 8" +RUN /bin/bash -l -c "nvm install 9 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm alias default 9" # Prepare ccache RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/g++ diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 4a9c282d236..1283b518363 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -384,6 +384,34 @@ class NodeLanguage: def __str__(self): return 'node' +class NodePureJSLanguage: + + def __init__(self): + self.client_cwd = '../grpc-node' + self.server_cwd = '../grpc-node' + self.safename = str(self) + + def client_cmd(self, args): + return [ + 'packages/grpc-native-core/deps/grpc/tools/run_tests/interop/with_nvm.sh', + 'node', '--require', './test/fixtures/native_js', + 'test/interop/interop_client.js' + ] + args + + def cloud_to_prod_env(self): + return {} + + def global_env(self): + return {} + + def unimplemented_test_cases(self): + return _SKIP_COMPRESSION + _SKIP_DATA_FRAME_PADDING + + def unimplemented_test_cases_server(self): + return [] + + def __str__(self): + return 'nodepurejs' class PHPLanguage: @@ -559,6 +587,7 @@ _LANGUAGES = { 'java': JavaLanguage(), 'javaokhttp': JavaOkHttpClient(), 'node': NodeLanguage(), + 'nodepurejs': NodePureJSLanguage(), 'php': PHPLanguage(), 'php7': PHP7Language(), 'objc': ObjcLanguage(), @@ -676,7 +705,7 @@ def auth_options(language, test_case): if test_case in ['jwt_token_creds', 'per_rpc_creds', 'oauth2_auth_token']: if language in [ 'csharp', 'csharpcoreclr', 'node', 'php', 'php7', 'python', - 'ruby' + 'ruby', 'nodepurejs' ]: env['GOOGLE_APPLICATION_CREDENTIALS'] = key_filepath else: From 9eb82a446196443fb60cb9bc91b6b46f75aa3775 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 9 Mar 2018 15:45:45 -0800 Subject: [PATCH 2/7] Regenerate Dockerfiles, fix image name reference, don't use mixed fixtures for Node --- templates/tools/dockerfile/node_deps.include | 3 ++- tools/dockerfile/test/multilang_jessie_x64/Dockerfile | 3 ++- tools/dockerfile/test/node_jessie_x64/Dockerfile | 3 ++- tools/run_tests/run_interop_tests.py | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/templates/tools/dockerfile/node_deps.include b/templates/tools/dockerfile/node_deps.include index 2f7d0d3abbc..bee3087b3fa 100644 --- a/templates/tools/dockerfile/node_deps.include +++ b/templates/tools/dockerfile/node_deps.include @@ -9,4 +9,5 @@ RUN /bin/bash -l -c "nvm install 4 && npm config set cache /tmp/npm-cache && npm RUN /bin/bash -l -c "nvm install 5 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 6 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 8 && npm config set cache /tmp/npm-cache && npm install -g npm" -RUN /bin/bash -l -c "nvm alias default 8" \ No newline at end of file +RUN /bin/bash -l -c "nvm install 9 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm alias default 9" \ No newline at end of file diff --git a/tools/dockerfile/test/multilang_jessie_x64/Dockerfile b/tools/dockerfile/test/multilang_jessie_x64/Dockerfile index 362c061f6df..5818ff9fb44 100644 --- a/tools/dockerfile/test/multilang_jessie_x64/Dockerfile +++ b/tools/dockerfile/test/multilang_jessie_x64/Dockerfile @@ -104,7 +104,8 @@ RUN /bin/bash -l -c "nvm install 4 && npm config set cache /tmp/npm-cache && npm RUN /bin/bash -l -c "nvm install 5 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 6 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 8 && npm config set cache /tmp/npm-cache && npm install -g npm" -RUN /bin/bash -l -c "nvm alias default 8" +RUN /bin/bash -l -c "nvm install 9 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm alias default 9" #================= # PHP dependencies diff --git a/tools/dockerfile/test/node_jessie_x64/Dockerfile b/tools/dockerfile/test/node_jessie_x64/Dockerfile index 9f19e76bf51..05c8319495e 100644 --- a/tools/dockerfile/test/node_jessie_x64/Dockerfile +++ b/tools/dockerfile/test/node_jessie_x64/Dockerfile @@ -90,7 +90,8 @@ RUN /bin/bash -l -c "nvm install 4 && npm config set cache /tmp/npm-cache && npm RUN /bin/bash -l -c "nvm install 5 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 6 && npm config set cache /tmp/npm-cache && npm install -g npm" RUN /bin/bash -l -c "nvm install 8 && npm config set cache /tmp/npm-cache && npm install -g npm" -RUN /bin/bash -l -c "nvm alias default 8" +RUN /bin/bash -l -c "nvm install 9 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm alias default 9" # Prepare ccache RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/g++ diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 1283b518363..9d00169560e 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -394,7 +394,7 @@ class NodePureJSLanguage: def client_cmd(self, args): return [ 'packages/grpc-native-core/deps/grpc/tools/run_tests/interop/with_nvm.sh', - 'node', '--require', './test/fixtures/native_js', + 'node', '--require', './test/fixtures/js_js', 'test/interop/interop_client.js' ] + args @@ -411,7 +411,7 @@ class NodePureJSLanguage: return [] def __str__(self): - return 'nodepurejs' + return 'node' class PHPLanguage: From 9d2275864ae1a0c7c45ea00e3a54f45e98176016 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 12 Mar 2018 11:27:53 -0700 Subject: [PATCH 3/7] Use different docker image for Node pure JS interop tests --- .../Dockerfile.template | 23 ++++++ .../grpc_interop_nodepurejs/Dockerfile | 77 +++++++++++++++++++ .../grpc_interop_nodepurejs/build_interop.sh | 34 ++++++++ tools/run_tests/run_interop_tests.py | 4 +- 4 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 templates/tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile.template create mode 100644 tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile create mode 100755 tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh diff --git a/templates/tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile.template b/templates/tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile.template new file mode 100644 index 00000000000..e53d863c92d --- /dev/null +++ b/templates/tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile.template @@ -0,0 +1,23 @@ +%YAML 1.2 +--- | + # Copyright 2015 gRPC authors. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + + FROM debian:jessie + + <%include file="../../apt_get_basic.include"/> + <%include file="../../node_deps.include"/> + <%include file="../../run_tests_addons.include"/> + # Define the default command. + CMD ["bash"] diff --git a/tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile new file mode 100644 index 00000000000..7f3b20aea2b --- /dev/null +++ b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/Dockerfile @@ -0,0 +1,77 @@ +# Copyright 2015 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM debian:jessie + +# Install Git and basic packages. +RUN apt-get update && apt-get install -y \ + autoconf \ + autotools-dev \ + build-essential \ + bzip2 \ + ccache \ + curl \ + dnsutils \ + gcc \ + gcc-multilib \ + git \ + golang \ + gyp \ + lcov \ + libc6 \ + libc6-dbg \ + libc6-dev \ + libgtest-dev \ + libtool \ + make \ + perl \ + strace \ + python-dev \ + python-setuptools \ + python-yaml \ + telnet \ + unzip \ + wget \ + zip && apt-get clean + +#================ +# Build profiling +RUN apt-get update && apt-get install -y time && apt-get clean + +#================== +# Node dependencies + +# Install nvm +RUN touch .profile +RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash +# Install all versions of node that we want to test +RUN /bin/bash -l -c "nvm install 4 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm install 5 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm install 6 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm install 8 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm install 9 && npm config set cache /tmp/npm-cache && npm install -g npm" +RUN /bin/bash -l -c "nvm alias default 9" +# Prepare ccache +RUN ln -s /usr/bin/ccache /usr/local/bin/gcc +RUN ln -s /usr/bin/ccache /usr/local/bin/g++ +RUN ln -s /usr/bin/ccache /usr/local/bin/cc +RUN ln -s /usr/bin/ccache /usr/local/bin/c++ +RUN ln -s /usr/bin/ccache /usr/local/bin/clang +RUN ln -s /usr/bin/ccache /usr/local/bin/clang++ + + +RUN mkdir /var/local/jenkins + +# Define the default command. +CMD ["bash"] diff --git a/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh new file mode 100755 index 00000000000..6d714babf9a --- /dev/null +++ b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Copyright 2015 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Builds Node interop server and client in a base image. +set -e + +mkdir -p /var/local/git +git clone /var/local/jenkins/grpc-node /var/local/git/grpc-node +# clone gRPC submodules, use data from locally cloned submodules where possible +(cd /var/local/jenkins/grpc-node/ && git submodule foreach 'cd /var/local/git/grpc-node \ +&& git submodule update --init --recursive --reference /var/local/jenkins/grpc-node/${name} \ +${name}') + +# copy service account keys if available +cp -r /var/local/jenkins/service_account $HOME || true + +cd /var/local/git/grpc-node + +# build Node interop client & server +npm install -g gulp +npm install +gulp js.core.install diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 9d00169560e..ba4ab3bd362 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -384,6 +384,7 @@ class NodeLanguage: def __str__(self): return 'node' + class NodePureJSLanguage: def __init__(self): @@ -411,7 +412,8 @@ class NodePureJSLanguage: return [] def __str__(self): - return 'node' + return 'nodepurejs' + class PHPLanguage: From 06210a103e14cb734b76f894739369dffe6889cc Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 12 Mar 2018 12:51:27 -0700 Subject: [PATCH 4/7] Node pure JS interop: add missing install line, skip more tests --- .../interoptest/grpc_interop_nodepurejs/build_interop.sh | 1 + tools/run_tests/run_interop_tests.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh index 6d714babf9a..5e0c85f7bb8 100755 --- a/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh +++ b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh @@ -32,3 +32,4 @@ cd /var/local/git/grpc-node npm install -g gulp npm install gulp js.core.install +gulp protobuf.install diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index ba4ab3bd362..925e63c6d76 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -406,7 +406,9 @@ class NodePureJSLanguage: return {} def unimplemented_test_cases(self): - return _SKIP_COMPRESSION + _SKIP_DATA_FRAME_PADDING + return _SKIP_COMPRESSION + _SKIP_DATA_FRAME_PADDING + _AUTH_TEST_CASES + + ['cancel_after_begin', 'cancel_after_first_response', + 'timeout_on_sleeping_server'] def unimplemented_test_cases_server(self): return [] From e0e110e2e0bf89fbbbaf9269f53df0a7d7dc4dc4 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 12 Mar 2018 13:00:06 -0700 Subject: [PATCH 5/7] Fix syntax error --- tools/run_tests/run_interop_tests.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 925e63c6d76..80184cb525e 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -406,9 +406,9 @@ class NodePureJSLanguage: return {} def unimplemented_test_cases(self): - return _SKIP_COMPRESSION + _SKIP_DATA_FRAME_PADDING + _AUTH_TEST_CASES + - ['cancel_after_begin', 'cancel_after_first_response', - 'timeout_on_sleeping_server'] + return (_SKIP_COMPRESSION + _SKIP_DATA_FRAME_PADDING + _AUTH_TEST_CASES + + ['cancel_after_begin', 'cancel_after_first_response', + 'timeout_on_sleeping_server']) def unimplemented_test_cases_server(self): return [] From ac21e04cf7567d999e92f99dd00e763f5c054aca Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 12 Mar 2018 14:06:53 -0700 Subject: [PATCH 6/7] Fix python script style --- tools/run_tests/run_interop_tests.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 80184cb525e..5a1c0f51e30 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -406,9 +406,11 @@ class NodePureJSLanguage: return {} def unimplemented_test_cases(self): - return (_SKIP_COMPRESSION + _SKIP_DATA_FRAME_PADDING + _AUTH_TEST_CASES + - ['cancel_after_begin', 'cancel_after_first_response', - 'timeout_on_sleeping_server']) + return ( + _SKIP_COMPRESSION + _SKIP_DATA_FRAME_PADDING + _AUTH_TEST_CASES + [ + 'cancel_after_begin', 'cancel_after_first_response', + 'timeout_on_sleeping_server' + ]) def unimplemented_test_cases_server(self): return [] From a7ed100c2e54e07567efbc137effdff9fffbf047 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Mon, 12 Mar 2018 15:04:32 -0700 Subject: [PATCH 7/7] Add another missing install line --- .../interoptest/grpc_interop_nodepurejs/build_interop.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh index 5e0c85f7bb8..d41ccacd2f9 100755 --- a/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh +++ b/tools/dockerfile/interoptest/grpc_interop_nodepurejs/build_interop.sh @@ -33,3 +33,4 @@ npm install -g gulp npm install gulp js.core.install gulp protobuf.install +gulp internal.test.install