Merge branch 'master' into idle_process_connectivity_state

This commit is contained in:
murgatroid99 2017-09-25 13:53:26 -07:00
commit 6a3d80d059
16 changed files with 248 additions and 16 deletions

View File

@ -14,6 +14,9 @@ const root = __dirname;
gulp.task('install.all', 'Install dependencies for all subdirectory packages',
['js.core.install', 'native.core.install', 'health-check.install']);
gulp.task('install.all.windows', 'Install dependencies for all subdirectory packages for MS Windows',
['js.core.install', 'native.core.install.windows', 'health-check.install']);
gulp.task('lint', 'Emit linting errors in source and test files',
['js.core.lint', 'native.core.lint']);
@ -30,9 +33,18 @@ gulp.task('link', 'Link local packages together after building',
gulp.start('link.only');
});
gulp.task('setup', 'One-time setup for a clean repository', ['install.all', 'link']);
gulp.task('setup', 'One-time setup for a clean repository', ['install.all'], () => {
gulp.start('link');
});
gulp.task('setup.windows', 'One-time setup for a clean repository for MS Windows', ['install.all.windows'], () => {
gulp.start('link');
});
gulp.task('clean', 'Delete generated files', ['js.core.clean']);
gulp.task('clean', 'Delete generated files', ['js.core.clean', 'native.core.clean']);
gulp.task('clean.all', 'Delete all files created by tasks',
['js.core.clean.all', 'native.core.clean.all', 'health-check.clean.all',
'internal.test.clean.all']);
gulp.task('native.test.only', 'Run tests of native code without rebuilding anything',
['native.core.test', 'internal.test.test', 'health-check.test']);

26
install-nvm-windows.ps1 Normal file
View File

@ -0,0 +1,26 @@
# Copyright 2017 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.
# We're going to store nvm-windows in the .\nvm directory.
$env:NVM_HOME = (Get-Item -Path ".\" -Verbose).FullName + "\nvm"
# Downloading and unpacking nvm-windows
Invoke-WebRequest -Uri https://github.com/coreybutler/nvm-windows/releases/download/1.1.5/nvm-noinstall.zip -OutFile nvm-noinstall.zip
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::ExtractToDirectory("nvm-noinstall.zip", "nvm")
$env:Path = $env:NVM_HOME + ";" + $env:Path
Out-File -Encoding "OEM" nvm\settings.txt
nvm root $env:NVM_HOME
"%*" | Out-File -Encoding "OEM" nvm\elevate.cmd

22
kokoro.bat Normal file
View File

@ -0,0 +1,22 @@
@rem Copyright 2017 gRPC authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@echo "Starting Windows test"
cd /d %~dp0
git submodule update --init
git submodule foreach --recursive git submodule update --init
.\run-tests.bat

38
merge_kokoro_logs.js Normal file
View File

@ -0,0 +1,38 @@
const xml2js = require('xml2js');
const fs = require('fs');
const path = require('path');
const util = require('util');
const readFile = util.promisify(fs.readFile);
const writeFile = util.promisify(fs.writeFile);
const readDir = util.promisify(fs.readdir);
const rootDir = __dirname;
readDir(rootDir + '/reports')
.then((dirNames) =>
Promise.all(dirNames.map((dirName) =>
readDir(path.resolve(rootDir, 'reports', dirName))
.then((fileNames) =>
Promise.all(fileNames.map((name) =>
readFile(path.resolve(rootDir, 'reports', dirName, name))
.then((content) => {
let parser = new xml2js.Parser();
const parseString = util.promisify(parser.parseString.bind(parser));
return parseString(content);
})
))
)
.then((objects) => {
let merged = objects[0];
merged.testsuites.testsuite = Array.prototype.concat.apply([], objects.map((obj) => obj.testsuites.testsuite));
let builder = new xml2js.Builder();
let xml = builder.buildObject(merged);
let resultName = path.resolve(rootDir, 'reports', dirName, 'sponge_log.xml');
console.log(`Writing ${resultName}`);
return writeFile(resultName, xml);
})
))
)
.catch((error) => {
console.error(error);
});

View File

@ -15,6 +15,7 @@
"express": "^4.15.4",
"google-auth-library": "^0.11.0",
"lodash": "^4.17.4",
"mocha-jenkins-reporter": "^0.3.9",
"poisson-process": "^0.2.2"
},
"devDependencies": {
@ -32,7 +33,8 @@
"mocha": "^3.5.3",
"through2": "^2.0.3",
"tslint": "^5.5.0",
"typescript": "^2.5.1"
"typescript": "^2.5.1",
"xml2js": "^0.4.19"
},
"contributors": [
{

View File

@ -3,6 +3,7 @@ const help = require('gulp-help');
const mocha = require('gulp-mocha');
const execa = require('execa');
const path = require('path');
const del = require('del');
const gulp = help(_gulp);
@ -10,8 +11,15 @@ const healthCheckDir = __dirname;
const baseDir = path.resolve(healthCheckDir, '..', '..');
const testDir = path.resolve(healthCheckDir, 'test');
gulp.task('health-check.clean.links', 'Delete npm links', () => {
return del(path.resolve(healthCheckDir, 'node_modules/grpc'));
});
gulp.task('health-check.clean.all', 'Delete all code created by tasks',
['health-check.clean.links']);
gulp.task('health-check.install', 'Install health check dependencies', () => {
return execa('npm', ['install'], {cwd: healthCheckDir, stdio: 'inherit'});
return execa('npm', ['install', '--unsafe-perm'], {cwd: healthCheckDir, stdio: 'inherit'});
});
gulp.task('health-check.link.add', 'Link local copy of grpc', ['health-check.install'], () => {
@ -20,5 +28,5 @@ gulp.task('health-check.link.add', 'Link local copy of grpc', ['health-check.ins
gulp.task('health-check.test', 'Run health check tests',
() => {
return gulp.src(`${testDir}/*.js`).pipe(mocha());
return gulp.src(`${testDir}/*.js`).pipe(mocha({reporter: 'mocha-jenkins-reporter'}));
});

View File

@ -81,7 +81,7 @@ function makeCompileFn(globs) {
}
gulp.task('js.core.install', 'Install native core dependencies', () => {
return execa('npm', ['install'], {cwd: jsCoreDir, stdio: 'inherit'});
return execa('npm', ['install', '--unsafe-perm'], {cwd: jsCoreDir, stdio: 'inherit'});
});
/**
@ -103,6 +103,9 @@ gulp.task('js.core.clean', 'Deletes transpiled code.', () => {
return del(outDir);
});
gulp.task('js.core.clean.all', 'Deletes all files added by targets',
['js.core.clean']);
/**
* Transpiles TypeScript files in src/ to JavaScript according to the settings
* found in tsconfig.json.
@ -124,7 +127,7 @@ gulp.task('js.core.test.compile', 'After dep tasks, transpiles test/.', ['js.cor
gulp.task('js.core.test', 'After dep tasks, runs all tests.',
['js.core.test.compile'], () => {
return gulp.src(`${outDir}/test/**/*.js`)
.pipe(mocha());
.pipe(mocha({reporter: 'mocha-jenkins-reporter'}));
}
);

View File

@ -8,6 +8,7 @@ const jshint = require('gulp-jshint');
const mocha = require('gulp-mocha');
const execa = require('execa');
const path = require('path');
const del = require('del');
const nativeCoreDir = __dirname;
const srcDir = path.resolve(nativeCoreDir, 'src');
@ -16,12 +17,29 @@ const testDir = path.resolve(nativeCoreDir, 'test');
const pkg = require('./package');
const jshintConfig = pkg.jshintConfig;
gulp.task('native.core.clean', 'Delete generated files', () => {
return del([path.resolve(nativeCoreDir, 'build'),
path.resolve(nativeCoreDir, 'ext/node')]);
});
gulp.task('native.core.clean.all', 'Delete all files created by tasks',
['native.core.clean']);
gulp.task('native.core.install', 'Install native core dependencies', () => {
return execa('npm', ['install', '--build-from-source'],
return execa('npm', ['install', '--build-from-source', '--unsafe-perm'],
{cwd: nativeCoreDir, stdio: 'inherit'});
});
gulp.task('native.core.link.create', 'Create npm link', ['native.core.install'], () => {
gulp.task('native.core.install.windows', 'Install native core dependencies for MS Windows', () => {
return execa('npm', ['install', '--build-from-source'],
{cwd: nativeCoreDir, stdio: 'inherit'}).catch(() =>
del(path.resolve(process.env.USERPROFILE, '.node-gyp', process.versions.node, 'include/node/openssl'), { force: true }).then(() =>
execa('npm', ['install', '--build-from-source'],
{cwd: nativeCoreDir, stdio: 'inherit'})
))
});
gulp.task('native.core.link.create', 'Create npm link', () => {
return execa('npm', ['link'], {cwd: nativeCoreDir, stdio: 'inherit'});
});
@ -32,9 +50,9 @@ gulp.task('native.core.lint', 'Emits linting errors', () => {
});
gulp.task('native.core.build', 'Build native package', () => {
return execa('node-pre-gyp', ['build'], {cwd: nativeCoreDir, stdio: 'inherit'});
return execa('npm', ['run', 'build'], {cwd: nativeCoreDir, stdio: 'inherit'});
});
gulp.task('native.core.test', 'Run all tests', ['native.core.build'], () => {
return gulp.src(`${testDir}/*.js`).pipe(mocha());
return gulp.src(`${testDir}/*.js`).pipe(mocha({reporter: 'mocha-jenkins-reporter'}));
});

View File

@ -21,6 +21,7 @@
"scripts": {
"lint": "node ./node_modules/jshint/bin/jshint src test index.js --exclude-path=.jshintignore",
"test": "./node_modules/.bin/mocha test && npm run-script lint",
"build": "./node_modules/.bin/node-pre-gyp build",
"electron-build": "./node_modules/.bin/node-pre-gyp configure build --runtime=electron --disturl=https://atom.io/download/atom-shell",
"gen_docs": "./node_modules/.bin/jsdoc -c jsdoc_conf.json",
"coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha test",
@ -46,7 +47,6 @@
"istanbul": "^0.4.4",
"jsdoc": "^3.3.2",
"minimist": "^1.1.0",
"mocha-jenkins-reporter": "^0.2.3",
"poisson-process": "^0.2.1"
},
"engines": {

46
run-tests.bat Normal file
View File

@ -0,0 +1,46 @@
@rem Copyright 2017 gRPC authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
SET ROOT=%~dp0
cd /d %~dp0
PowerShell -Command .\install-nvm-windows.ps1
SET NVM_HOME=%ROOT%nvm
SET NVM_SYMLINK=%ROOT%nvm\nodejs
SET PATH=%NVM_HOME%;%NVM_SYMLINK%;%PATH%
nvm version
nvm install 8.5.0
nvm use 8.5.0
call npm install || goto :error
for %%v in (4.8.4 6.11.3 7.9.0 8.5.0) do (
nvm install %%v
nvm use %%v
node -e "console.log(process.versions)"
call .\node_modules\.bin\gulp clean.all || goto :error
call .\node_modules\.bin\gulp setup.windows || goto :error
call .\node_modules\.bin\gulp native.test || goto :error
)
if %errorlevel% neq 0 exit /b %errorlevel%
goto :EOF
:error
exit /b 1

View File

@ -29,11 +29,20 @@ if [ ! -n "$node_versions" ] ; then
node_versions="4 5 6 7 8"
fi
set +ex
nvm install 8
nvm install lts/*
nvm use lts/*
set -ex
npm install --unsafe-perm
mkdir -p reports
# TODO(mlumish): Add electron tests
for version in ${node_versions}
do
git clean -f -d -x
# Install and setup node for the version we want.
set +ex
echo "Switching to node version $version"
@ -41,14 +50,22 @@ do
nvm use $version
set -ex
mkdir -p "reports/node$version"
# Install dependencies and link packages together.
npm install
./node_modules/.bin/gulp clean.all
./node_modules/.bin/gulp setup
# Rebuild libraries and run tests.
./node_modules/.bin/gulp native.test || FAILED="true"
JUNIT_REPORT_PATH="reports/node$version/" JUNIT_REPORT_STACK=1 ./node_modules/.bin/gulp native.test || FAILED="true"
done
set +ex
nvm use 8
set -ex
node merge_kokoro_logs.js
if [ "$FAILED" != "" ]
then
exit 1

View File

@ -15,6 +15,9 @@
#
# This script updates the gRPC submodule to a given reference and run tests
# cd to gRPC-node root directory
cd $(dirname $0)
cd packages/grpc-native-core/deps/grpc/
# PR references are needed to test PRs from grpc/grpc

View File

@ -3,6 +3,7 @@ const help = require('gulp-help');
const mocha = require('gulp-mocha');
const execa = require('execa');
const path = require('path');
const del = require('del');
// gulp-help monkeypatches tasks to have an additional description parameter
const gulp = help(_gulp);
@ -10,10 +11,17 @@ const gulp = help(_gulp);
const testDir = __dirname;
const apiTestDir = path.resolve(testDir, 'api');
gulp.task('internal.test.clean.links', 'Delete npm links', () => {
return del(path.resolve(testDir, 'node_modules/grpc'));
});
gulp.task('internal.test.clean.all', 'Delete all files created by tasks',
['internal.test.clean.links']);
gulp.task('internal.test.link.add', 'Link local copies of grpc packages', () => {
return execa('npm', ['link', 'grpc'], {cwd: testDir, stdio: 'inherit'});
});
gulp.task('internal.test.test', 'Run API-level tests', () => {
return gulp.src(`${apiTestDir}/*.js`).pipe(mocha());
return gulp.src(`${apiTestDir}/*.js`).pipe(mocha({reporter: 'mocha-jenkins-reporter'}));
});

View File

@ -17,3 +17,8 @@
# Location of the continuous shell script in repository.
build_file: "grpc-node/kokoro.sh"
timeout_mins: 60
action {
define_artifacts {
regex: "github/grpc-node/reports/**/sponge_log.xml"
}
}

View File

@ -17,3 +17,8 @@
# Location of the continuous shell script in repository.
build_file: "grpc-node/kokoro.sh"
timeout_mins: 60
action {
define_artifacts {
regex: "github/grpc-node/reports/**/sponge_log.xml"
}
}

19
test/kokoro/windows.cfg Normal file
View File

@ -0,0 +1,19 @@
# Copyright 2017 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.
# Config file for Kokoro (in protobuf text format)
# Location of the continuous shell script in repository.
build_file: "grpc-node/kokoro.bat"
timeout_mins: 60