mirror of https://github.com/grpc/grpc.git
commit
e1613dcd31
160 changed files with 6749 additions and 4493 deletions
@ -1,11 +1,19 @@ |
|||||||
|
# C/C++ build outputs |
||||||
bins |
bins |
||||||
coverage |
|
||||||
deps |
|
||||||
*.gcno |
|
||||||
gens |
gens |
||||||
libs |
libs |
||||||
objs |
objs |
||||||
|
|
||||||
|
# gcov coverage data |
||||||
|
coverage |
||||||
|
*.gcno |
||||||
|
|
||||||
|
# profiler output |
||||||
|
*.prof |
||||||
|
|
||||||
|
# python compiled objects |
||||||
*.pyc |
*.pyc |
||||||
|
|
||||||
# cache for run_tests.py |
# cache for run_tests.py |
||||||
.run_tests_cache |
.run_tests_cache |
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,68 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* 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. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_ |
||||||
|
#define __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_ |
||||||
|
|
||||||
|
#include <grpc/support/port_platform.h> |
||||||
|
|
||||||
|
/* This is an abstraction around the typical pipe mechanism for waking up a
|
||||||
|
thread sitting in a poll() style call. */ |
||||||
|
|
||||||
|
#ifdef GPR_POSIX_SOCKET |
||||||
|
#include "src/core/iomgr/pollset_kick_posix.h" |
||||||
|
#else |
||||||
|
#error "No pollset kick support on platform" |
||||||
|
#endif |
||||||
|
|
||||||
|
void grpc_pollset_kick_global_init(void); |
||||||
|
void grpc_pollset_kick_global_destroy(void); |
||||||
|
|
||||||
|
void grpc_pollset_kick_init(grpc_pollset_kick_state *kick_state); |
||||||
|
void grpc_pollset_kick_destroy(grpc_pollset_kick_state *kick_state); |
||||||
|
|
||||||
|
/* Must be called before entering poll(). If return value is -1, this consumed
|
||||||
|
an existing kick. Otherwise the return value is an FD to add to the poll set. |
||||||
|
*/ |
||||||
|
int grpc_pollset_kick_pre_poll(grpc_pollset_kick_state *kick_state); |
||||||
|
|
||||||
|
/* Consume an existing kick. Must be called after poll returns that the fd was
|
||||||
|
readable, and before calling kick_post_poll. */ |
||||||
|
void grpc_pollset_kick_consume(grpc_pollset_kick_state *kick_state); |
||||||
|
|
||||||
|
/* Must be called after pre_poll, and after consume if applicable */ |
||||||
|
void grpc_pollset_kick_post_poll(grpc_pollset_kick_state *kick_state); |
||||||
|
|
||||||
|
void grpc_pollset_kick_kick(grpc_pollset_kick_state *kick_state); |
||||||
|
|
||||||
|
#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_ */ |
@ -0,0 +1,161 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* 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. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "src/core/iomgr/pollset_kick_posix.h" |
||||||
|
|
||||||
|
#include <errno.h> |
||||||
|
#include <string.h> |
||||||
|
#include <unistd.h> |
||||||
|
|
||||||
|
#include "src/core/iomgr/socket_utils_posix.h" |
||||||
|
#include <grpc/support/alloc.h> |
||||||
|
#include <grpc/support/log.h> |
||||||
|
|
||||||
|
/* This implementation is based on a freelist of pipes. */ |
||||||
|
|
||||||
|
typedef struct grpc_kick_pipe_info { |
||||||
|
int pipe_read_fd; |
||||||
|
int pipe_write_fd; |
||||||
|
struct grpc_kick_pipe_info *next; |
||||||
|
} grpc_kick_pipe_info; |
||||||
|
|
||||||
|
static grpc_kick_pipe_info *pipe_freelist = NULL; |
||||||
|
static gpr_mu pipe_freelist_mu; |
||||||
|
|
||||||
|
static grpc_kick_pipe_info *allocate_pipe() { |
||||||
|
grpc_kick_pipe_info *info; |
||||||
|
gpr_mu_lock(&pipe_freelist_mu); |
||||||
|
if (pipe_freelist != NULL) { |
||||||
|
info = pipe_freelist; |
||||||
|
pipe_freelist = pipe_freelist->next; |
||||||
|
} else { |
||||||
|
int pipefd[2]; |
||||||
|
/* TODO(klempner): Make this nonfatal */ |
||||||
|
GPR_ASSERT(0 == pipe(pipefd)); |
||||||
|
GPR_ASSERT(grpc_set_socket_nonblocking(pipefd[0], 1)); |
||||||
|
GPR_ASSERT(grpc_set_socket_nonblocking(pipefd[1], 1)); |
||||||
|
info = gpr_malloc(sizeof(*info)); |
||||||
|
info->pipe_read_fd = pipefd[0]; |
||||||
|
info->pipe_write_fd = pipefd[1]; |
||||||
|
info->next = NULL; |
||||||
|
} |
||||||
|
gpr_mu_unlock(&pipe_freelist_mu); |
||||||
|
return info; |
||||||
|
} |
||||||
|
|
||||||
|
static void free_pipe(grpc_kick_pipe_info *pipe_info) { |
||||||
|
/* TODO(klempner): Start closing pipes if the free list gets too large */ |
||||||
|
gpr_mu_lock(&pipe_freelist_mu); |
||||||
|
pipe_info->next = pipe_freelist; |
||||||
|
pipe_freelist = pipe_info; |
||||||
|
gpr_mu_unlock(&pipe_freelist_mu); |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_pollset_kick_global_init() { |
||||||
|
pipe_freelist = NULL; |
||||||
|
gpr_mu_init(&pipe_freelist_mu); |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_pollset_kick_global_destroy() { |
||||||
|
while (pipe_freelist != NULL) { |
||||||
|
grpc_kick_pipe_info *current = pipe_freelist; |
||||||
|
pipe_freelist = pipe_freelist->next; |
||||||
|
close(current->pipe_read_fd); |
||||||
|
close(current->pipe_write_fd); |
||||||
|
gpr_free(current); |
||||||
|
} |
||||||
|
gpr_mu_destroy(&pipe_freelist_mu); |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_pollset_kick_init(grpc_pollset_kick_state *kick_state) { |
||||||
|
gpr_mu_init(&kick_state->mu); |
||||||
|
kick_state->kicked = 0; |
||||||
|
kick_state->pipe_info = NULL; |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_pollset_kick_destroy(grpc_pollset_kick_state *kick_state) { |
||||||
|
gpr_mu_destroy(&kick_state->mu); |
||||||
|
GPR_ASSERT(kick_state->pipe_info == NULL); |
||||||
|
} |
||||||
|
|
||||||
|
int grpc_pollset_kick_pre_poll(grpc_pollset_kick_state *kick_state) { |
||||||
|
gpr_mu_lock(&kick_state->mu); |
||||||
|
if (kick_state->kicked) { |
||||||
|
kick_state->kicked = 0; |
||||||
|
gpr_mu_unlock(&kick_state->mu); |
||||||
|
return -1; |
||||||
|
} |
||||||
|
kick_state->pipe_info = allocate_pipe(); |
||||||
|
gpr_mu_unlock(&kick_state->mu); |
||||||
|
return kick_state->pipe_info->pipe_read_fd; |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_pollset_kick_consume(grpc_pollset_kick_state *kick_state) { |
||||||
|
char buf[128]; |
||||||
|
int r; |
||||||
|
|
||||||
|
for (;;) { |
||||||
|
r = read(kick_state->pipe_info->pipe_read_fd, buf, sizeof(buf)); |
||||||
|
if (r > 0) continue; |
||||||
|
if (r == 0) return; |
||||||
|
switch (errno) { |
||||||
|
case EAGAIN: |
||||||
|
return; |
||||||
|
case EINTR: |
||||||
|
continue; |
||||||
|
default: |
||||||
|
gpr_log(GPR_ERROR, "error reading pipe: %s", strerror(errno)); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_pollset_kick_post_poll(grpc_pollset_kick_state *kick_state) { |
||||||
|
gpr_mu_lock(&kick_state->mu); |
||||||
|
free_pipe(kick_state->pipe_info); |
||||||
|
kick_state->pipe_info = NULL; |
||||||
|
gpr_mu_unlock(&kick_state->mu); |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_pollset_kick_kick(grpc_pollset_kick_state *kick_state) { |
||||||
|
gpr_mu_lock(&kick_state->mu); |
||||||
|
if (kick_state->pipe_info != NULL) { |
||||||
|
char c = 0; |
||||||
|
while (write(kick_state->pipe_info->pipe_write_fd, &c, 1) != 1 && |
||||||
|
errno == EINTR) |
||||||
|
; |
||||||
|
} else { |
||||||
|
kick_state->kicked = 1; |
||||||
|
} |
||||||
|
gpr_mu_unlock(&kick_state->mu); |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* 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. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_ |
||||||
|
#define __GRPC_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_ |
||||||
|
|
||||||
|
#include <grpc/support/sync.h> |
||||||
|
|
||||||
|
struct grpc_kick_pipe_info; |
||||||
|
|
||||||
|
typedef struct grpc_pollset_kick_state { |
||||||
|
gpr_mu mu; |
||||||
|
int kicked; |
||||||
|
struct grpc_kick_pipe_info *pipe_info; |
||||||
|
} grpc_pollset_kick_state; |
||||||
|
|
||||||
|
#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_ */ |
@ -1,5 +1,17 @@ |
|||||||
|
#!/bin/sh |
||||||
# Loads the local shared library, and runs all of the test cases in tests/ |
# Loads the local shared library, and runs all of the test cases in tests/ |
||||||
# against it |
# against it |
||||||
|
set -e |
||||||
cd $(dirname $0) |
cd $(dirname $0) |
||||||
php -d extension_dir=../ext/grpc/modules/ -d extension=grpc.so \ |
default_extension_dir=`php -i | grep extension_dir | sed 's/.*=> //g'` |
||||||
/usr/local/bin/phpunit -v --debug --strict ../tests/unit_tests |
|
||||||
|
# sym-link in system supplied extensions |
||||||
|
for f in $default_extension_dir/*.so |
||||||
|
do |
||||||
|
ln -s $f ../ext/grpc/modules/$(basename $f) &> /dev/null || true |
||||||
|
done |
||||||
|
|
||||||
|
php \ |
||||||
|
-d extension_dir=../ext/grpc/modules/ \ |
||||||
|
-d extension=grpc.so \ |
||||||
|
`which phpunit` -v --debug --strict ../tests/unit_tests |
||||||
|
@ -0,0 +1,10 @@ |
|||||||
|
# This is the configuration used to check the rubocop source code. |
||||||
|
|
||||||
|
inherit_from: .rubocop_todo.yml |
||||||
|
|
||||||
|
AllCops: |
||||||
|
Exclude: |
||||||
|
- 'bin/apis/**/*' |
||||||
|
- 'bin/interop/test/**/*' |
||||||
|
- 'bin/math.rb' |
||||||
|
- 'bin/math_services.rb' |
@ -0,0 +1,52 @@ |
|||||||
|
# This configuration was generated by `rubocop --auto-gen-config` |
||||||
|
# on 2015-01-16 02:30:04 -0800 using RuboCop version 0.28.0. |
||||||
|
# The point is for the user to remove these configuration records |
||||||
|
# one by one as the offenses are removed from the code base. |
||||||
|
# Note that changes in the inspected code, or installation of new |
||||||
|
# versions of RuboCop, may require this file to be generated again. |
||||||
|
|
||||||
|
# Offense count: 3 |
||||||
|
# Lint/UselessAssignment: |
||||||
|
# Enabled: false |
||||||
|
|
||||||
|
# Offense count: 33 |
||||||
|
Metrics/AbcSize: |
||||||
|
Max: 39 |
||||||
|
|
||||||
|
# Offense count: 3 |
||||||
|
# Configuration parameters: CountComments. |
||||||
|
Metrics/ClassLength: |
||||||
|
Max: 231 |
||||||
|
|
||||||
|
# Offense count: 2 |
||||||
|
Metrics/CyclomaticComplexity: |
||||||
|
Max: 8 |
||||||
|
|
||||||
|
# Offense count: 36 |
||||||
|
# Configuration parameters: CountComments. |
||||||
|
Metrics/MethodLength: |
||||||
|
Max: 37 |
||||||
|
|
||||||
|
# Offense count: 8 |
||||||
|
# Configuration parameters: CountKeywordArgs. |
||||||
|
Metrics/ParameterLists: |
||||||
|
Max: 8 |
||||||
|
|
||||||
|
# Offense count: 2 |
||||||
|
Metrics/PerceivedComplexity: |
||||||
|
Max: 10 |
||||||
|
|
||||||
|
# Offense count: 7 |
||||||
|
# Configuration parameters: AllowedVariables. |
||||||
|
Style/GlobalVars: |
||||||
|
Enabled: false |
||||||
|
|
||||||
|
# Offense count: 1 |
||||||
|
# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles. |
||||||
|
Style/Next: |
||||||
|
Enabled: false |
||||||
|
|
||||||
|
# Offense count: 2 |
||||||
|
# Configuration parameters: Methods. |
||||||
|
Style/SingleLineBlockParams: |
||||||
|
Enabled: false |
@ -1,46 +1,44 @@ |
|||||||
# -*- ruby -*- |
# -*- ruby -*- |
||||||
require 'rake/extensiontask' |
require 'rake/extensiontask' |
||||||
require 'rspec/core/rake_task' |
require 'rspec/core/rake_task' |
||||||
|
require 'rubocop/rake_task' |
||||||
|
|
||||||
|
desc 'Run Rubocop to check for style violations' |
||||||
|
RuboCop::RakeTask.new |
||||||
|
|
||||||
Rake::ExtensionTask.new 'grpc' do |ext| |
Rake::ExtensionTask.new 'grpc' do |ext| |
||||||
ext.lib_dir = File.join('lib', 'grpc') |
ext.lib_dir = File.join('lib', 'grpc') |
||||||
end |
end |
||||||
|
|
||||||
SPEC_SUITES = [ |
SPEC_SUITES = [ |
||||||
{ :id => :wrapper, :title => 'wrapper layer', :files => %w(spec/*.rb) }, |
{ id: :wrapper, title: 'wrapper layer', files: %w(spec/*.rb) }, |
||||||
{ :id => :idiomatic, :title => 'idiomatic layer', :dir => %w(spec/generic), |
{ id: :idiomatic, title: 'idiomatic layer', dir: %w(spec/generic), |
||||||
:tag => '~bidi' }, |
tag: '~bidi' }, |
||||||
{ :id => :bidi, :title => 'bidi tests', :dir => %w(spec/generic), |
{ id: :bidi, title: 'bidi tests', dir: %w(spec/generic), |
||||||
:tag => 'bidi' } |
tag: 'bidi' } |
||||||
] |
] |
||||||
|
|
||||||
desc "Run all RSpec tests" |
desc 'Run all RSpec tests' |
||||||
namespace :spec do |
namespace :spec do |
||||||
namespace :suite do |
namespace :suite do |
||||||
SPEC_SUITES.each do |suite| |
SPEC_SUITES.each do |suite| |
||||||
desc "Run all specs in #{suite[:title]} spec suite" |
desc "Run all specs in #{suite[:title]} spec suite" |
||||||
RSpec::Core::RakeTask.new(suite[:id]) do |t| |
RSpec::Core::RakeTask.new(suite[:id]) do |t| |
||||||
spec_files = [] |
spec_files = [] |
||||||
if suite[:files] |
suite[:files].each { |f| spec_files += Dir[f] } if suite[:files] |
||||||
suite[:files].each { |f| spec_files += Dir[f] } |
|
||||||
end |
|
||||||
|
|
||||||
if suite[:dirs] |
if suite[:dirs] |
||||||
suite[:dirs].each { |f| spec_files += Dir["#{f}/**/*_spec.rb"] } |
suite[:dirs].each { |f| spec_files += Dir["#{f}/**/*_spec.rb"] } |
||||||
end |
end |
||||||
|
|
||||||
t.pattern = spec_files |
t.pattern = spec_files |
||||||
|
t.rspec_opts = "--tag #{suite[:tag]}" if suite[:tag] |
||||||
if suite[:tag] |
|
||||||
t.rspec_opts = "--tag #{suite[:tag]}" |
|
||||||
end |
|
||||||
end |
end |
||||||
end |
end |
||||||
end |
end |
||||||
end |
end |
||||||
|
|
||||||
task :default => "spec:suite:idiomatic" # this should be spec:suite:bidi |
task default: 'spec:suite:idiomatic' # this should be spec:suite:bidi |
||||||
task "spec:suite:wrapper" => :compile |
task 'spec:suite:wrapper' => :compile |
||||||
task "spec:suite:idiomatic" => "spec:suite:wrapper" |
task 'spec:suite:idiomatic' => 'spec:suite:wrapper' |
||||||
task "spec:suite:bidi" => "spec:suite:idiomatic" |
task 'spec:suite:bidi' => 'spec:suite:idiomatic' |
||||||
|
@ -1,31 +1,34 @@ |
|||||||
# encoding: utf-8 |
# encoding: utf-8 |
||||||
$:.push File.expand_path("../lib", __FILE__) |
$LOAD_PATH.push File.expand_path('../lib', __FILE__) |
||||||
require 'grpc/version' |
require 'grpc/version' |
||||||
|
|
||||||
Gem::Specification.new do |s| |
Gem::Specification.new do |s| |
||||||
s.name = "grpc" |
s.name = 'grpc' |
||||||
s.version = Google::RPC::VERSION |
s.version = Google::RPC::VERSION |
||||||
s.authors = ["One Platform Team"] |
s.authors = ['One Platform Team'] |
||||||
s.email = "stubby-team@google.com" |
s.email = 'stubby-team@google.com' |
||||||
s.homepage = "http://go/grpc" |
s.homepage = 'http://go/grpc' |
||||||
s.summary = 'Google RPC system in Ruby' |
s.summary = 'Google RPC system in Ruby' |
||||||
s.description = 'Send RPCs from Ruby' |
s.description = 'Send RPCs from Ruby' |
||||||
|
|
||||||
s.files = `git ls-files`.split("\n") |
s.files = `git ls-files`.split("\n") |
||||||
s.test_files = `git ls-files -- spec/*`.split("\n") |
s.test_files = `git ls-files -- spec/*`.split("\n") |
||||||
s.executables = `git ls-files -- examples/*.rb`.split("\n").map{ |f| File.basename(f) } |
s.executables = `git ls-files -- bin/*.rb`.split("\n").map do |f| |
||||||
|
File.basename(f) |
||||||
|
end |
||||||
s.require_paths = ['lib'] |
s.require_paths = ['lib'] |
||||||
s.platform = Gem::Platform::RUBY |
s.platform = Gem::Platform::RUBY |
||||||
|
|
||||||
s.add_dependency 'xray' |
s.add_dependency 'xray' |
||||||
s.add_dependency 'logging', '~> 1.8' |
s.add_dependency 'logging', '~> 1.8' |
||||||
s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1' |
s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1' |
||||||
s.add_dependency 'minitest', '~> 5.4' # not a dev dependency, used by the interop tests |
s.add_dependency 'minitest', '~> 5.4' # reqd for interop tests |
||||||
|
|
||||||
s.add_development_dependency "bundler", "~> 1.7" |
s.add_development_dependency 'bundler', '~> 1.7' |
||||||
s.add_development_dependency "rake", "~> 10.0" |
s.add_development_dependency 'rake', '~> 10.0' |
||||||
s.add_development_dependency 'rake-compiler', '~> 0' |
s.add_development_dependency 'rake-compiler', '~> 0' |
||||||
s.add_development_dependency 'rspec', "~> 3.0" |
s.add_development_dependency 'rubocop', '~> 0.28.0' |
||||||
|
s.add_development_dependency 'rspec', '~> 3.0' |
||||||
|
|
||||||
s.extensions = %w[ext/grpc/extconf.rb] |
s.extensions = %w(ext/grpc/extconf.rb) |
||||||
end |
end |
||||||
|
@ -0,0 +1,9 @@ |
|||||||
|
<%! |
||||||
|
import json |
||||||
|
%> |
||||||
|
|
||||||
|
${json.dumps([{"name": tgt.name, "language": tgt.language} |
||||||
|
for tgt in targets |
||||||
|
if tgt.build == "test" and tgt.name[-5:] == "_test"], |
||||||
|
sort_keys=True, indent=2)} |
||||||
|
|
@ -0,0 +1,7 @@ |
|||||||
|
#include <gperftools/profiler.h> |
||||||
|
|
||||||
|
int main() { |
||||||
|
ProfilerStart("/dev/null"); |
||||||
|
ProfilerStop(); |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,160 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2014, 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. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "test/core/end2end/end2end_tests.h" |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
#include <unistd.h> |
||||||
|
|
||||||
|
#include <grpc/byte_buffer.h> |
||||||
|
#include <grpc/support/alloc.h> |
||||||
|
#include <grpc/support/log.h> |
||||||
|
#include <grpc/support/time.h> |
||||||
|
#include <grpc/support/useful.h> |
||||||
|
#include "test/core/end2end/cq_verifier.h" |
||||||
|
|
||||||
|
enum { TIMEOUT = 200000 }; |
||||||
|
|
||||||
|
static void *tag(gpr_intptr t) { return (void *)t; } |
||||||
|
|
||||||
|
static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, |
||||||
|
const char *test_name, |
||||||
|
grpc_channel_args *client_args, |
||||||
|
grpc_channel_args *server_args) { |
||||||
|
grpc_end2end_test_fixture f; |
||||||
|
gpr_log(GPR_INFO, "%s/%s", test_name, config.name); |
||||||
|
f = config.create_fixture(client_args, server_args); |
||||||
|
config.init_client(&f, client_args); |
||||||
|
config.init_server(&f, server_args); |
||||||
|
return f; |
||||||
|
} |
||||||
|
|
||||||
|
static gpr_timespec n_seconds_time(int n) { |
||||||
|
return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); |
||||||
|
} |
||||||
|
|
||||||
|
static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } |
||||||
|
|
||||||
|
static void drain_cq(grpc_completion_queue *cq) { |
||||||
|
grpc_event *ev; |
||||||
|
grpc_completion_type type; |
||||||
|
do { |
||||||
|
ev = grpc_completion_queue_next(cq, five_seconds_time()); |
||||||
|
GPR_ASSERT(ev); |
||||||
|
type = ev->type; |
||||||
|
grpc_event_finish(ev); |
||||||
|
} while (type != GRPC_QUEUE_SHUTDOWN); |
||||||
|
} |
||||||
|
|
||||||
|
static void shutdown_server(grpc_end2end_test_fixture *f) { |
||||||
|
if (!f->server) return; |
||||||
|
grpc_server_destroy(f->server); |
||||||
|
f->server = NULL; |
||||||
|
} |
||||||
|
|
||||||
|
static void shutdown_client(grpc_end2end_test_fixture *f) { |
||||||
|
if (!f->client) return; |
||||||
|
grpc_channel_destroy(f->client); |
||||||
|
f->client = NULL; |
||||||
|
} |
||||||
|
|
||||||
|
static void end_test(grpc_end2end_test_fixture *f) { |
||||||
|
shutdown_server(f); |
||||||
|
shutdown_client(f); |
||||||
|
|
||||||
|
grpc_completion_queue_shutdown(f->server_cq); |
||||||
|
drain_cq(f->server_cq); |
||||||
|
grpc_completion_queue_destroy(f->server_cq); |
||||||
|
grpc_completion_queue_shutdown(f->client_cq); |
||||||
|
drain_cq(f->client_cq); |
||||||
|
grpc_completion_queue_destroy(f->client_cq); |
||||||
|
} |
||||||
|
|
||||||
|
static void test_early_server_shutdown_finishes_inflight_calls( |
||||||
|
grpc_end2end_test_config config) { |
||||||
|
grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL); |
||||||
|
grpc_call *c; |
||||||
|
grpc_call *s; |
||||||
|
gpr_timespec deadline = five_seconds_time(); |
||||||
|
cq_verifier *v_client = cq_verifier_create(f.client_cq); |
||||||
|
cq_verifier *v_server = cq_verifier_create(f.server_cq); |
||||||
|
|
||||||
|
c = grpc_channel_create_call(f.client, "/foo", "test.google.com", deadline); |
||||||
|
GPR_ASSERT(c); |
||||||
|
|
||||||
|
GPR_ASSERT(GRPC_CALL_OK == |
||||||
|
grpc_call_start_invoke(c, f.client_cq, tag(1), tag(2), tag(3), 0)); |
||||||
|
cq_expect_invoke_accepted(v_client, tag(1), GRPC_OP_OK); |
||||||
|
cq_verify(v_client); |
||||||
|
|
||||||
|
GPR_ASSERT(GRPC_CALL_OK == grpc_call_writes_done(c, tag(4))); |
||||||
|
cq_expect_finish_accepted(v_client, tag(4), GRPC_OP_OK); |
||||||
|
cq_verify(v_client); |
||||||
|
|
||||||
|
GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call(f.server, tag(100))); |
||||||
|
cq_expect_server_rpc_new(v_server, &s, tag(100), "/foo", "test.google.com", |
||||||
|
deadline, NULL); |
||||||
|
cq_verify(v_server); |
||||||
|
|
||||||
|
GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); |
||||||
|
GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); |
||||||
|
cq_expect_client_metadata_read(v_client, tag(2), NULL); |
||||||
|
cq_verify(v_client); |
||||||
|
|
||||||
|
/* shutdown the server */ |
||||||
|
grpc_server_shutdown_and_notify(f.server, tag(0xdead)); |
||||||
|
cq_verify_empty(v_server); |
||||||
|
|
||||||
|
grpc_call_start_write_status(s, GRPC_STATUS_OK, NULL, tag(103)); |
||||||
|
grpc_call_destroy(s); |
||||||
|
cq_expect_finish_accepted(v_server, tag(103), GRPC_OP_OK); |
||||||
|
cq_expect_finished(v_server, tag(102), NULL); |
||||||
|
cq_expect_server_shutdown(v_server, tag(0xdead)); |
||||||
|
cq_verify(v_server); |
||||||
|
|
||||||
|
cq_expect_finished_with_status(v_client, tag(3), GRPC_STATUS_OK, NULL, NULL); |
||||||
|
cq_verify(v_client); |
||||||
|
|
||||||
|
grpc_call_destroy(c); |
||||||
|
|
||||||
|
cq_verifier_destroy(v_client); |
||||||
|
cq_verifier_destroy(v_server); |
||||||
|
|
||||||
|
end_test(&f); |
||||||
|
config.tear_down_data(&f); |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_end2end_tests(grpc_end2end_test_config config) { |
||||||
|
test_early_server_shutdown_finishes_inflight_calls(config); |
||||||
|
} |
@ -0,0 +1,101 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* 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. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "src/core/iomgr/pollset_kick.h" |
||||||
|
|
||||||
|
#include <grpc/support/log.h> |
||||||
|
#include "test/core/util/test_config.h" |
||||||
|
|
||||||
|
static void test_allocation() { |
||||||
|
grpc_pollset_kick_state state; |
||||||
|
grpc_pollset_kick_init(&state); |
||||||
|
grpc_pollset_kick_destroy(&state); |
||||||
|
} |
||||||
|
|
||||||
|
static void test_non_kick() { |
||||||
|
grpc_pollset_kick_state state; |
||||||
|
int fd; |
||||||
|
|
||||||
|
grpc_pollset_kick_init(&state); |
||||||
|
fd = grpc_pollset_kick_pre_poll(&state); |
||||||
|
GPR_ASSERT(fd >= 0); |
||||||
|
|
||||||
|
grpc_pollset_kick_post_poll(&state); |
||||||
|
grpc_pollset_kick_destroy(&state); |
||||||
|
} |
||||||
|
|
||||||
|
static void test_basic_kick() { |
||||||
|
/* Kicked during poll */ |
||||||
|
grpc_pollset_kick_state state; |
||||||
|
int fd; |
||||||
|
grpc_pollset_kick_init(&state); |
||||||
|
|
||||||
|
fd = grpc_pollset_kick_pre_poll(&state); |
||||||
|
GPR_ASSERT(fd >= 0); |
||||||
|
|
||||||
|
grpc_pollset_kick_kick(&state); |
||||||
|
|
||||||
|
/* Now hypothetically we polled and found that we were kicked */ |
||||||
|
grpc_pollset_kick_consume(&state); |
||||||
|
|
||||||
|
grpc_pollset_kick_post_poll(&state); |
||||||
|
|
||||||
|
grpc_pollset_kick_destroy(&state); |
||||||
|
} |
||||||
|
|
||||||
|
static void test_non_poll_kick() { |
||||||
|
/* Kick before entering poll */ |
||||||
|
grpc_pollset_kick_state state; |
||||||
|
int fd; |
||||||
|
|
||||||
|
grpc_pollset_kick_init(&state); |
||||||
|
|
||||||
|
grpc_pollset_kick_kick(&state); |
||||||
|
fd = grpc_pollset_kick_pre_poll(&state); |
||||||
|
GPR_ASSERT(fd < 0); |
||||||
|
grpc_pollset_kick_destroy(&state); |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char **argv) { |
||||||
|
grpc_test_init(argc, argv); |
||||||
|
|
||||||
|
grpc_pollset_kick_global_init(); |
||||||
|
|
||||||
|
test_allocation(); |
||||||
|
test_basic_kick(); |
||||||
|
test_non_poll_kick(); |
||||||
|
test_non_kick(); |
||||||
|
|
||||||
|
grpc_pollset_kick_global_destroy(); |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
#!/usr/bin/python |
||||||
|
# produces cleaner build.json files |
||||||
|
|
||||||
|
import collections |
||||||
|
import json |
||||||
|
import os |
||||||
|
import sys |
||||||
|
|
||||||
|
TEST = (os.environ.get('TEST', 'false') == 'true') |
||||||
|
|
||||||
|
_TOP_LEVEL_KEYS = ['settings', 'filegroups', 'libs', 'targets'] |
||||||
|
_VERSION_KEYS = ['major', 'minor', 'micro', 'build'] |
||||||
|
_ELEM_KEYS = [ |
||||||
|
'name', |
||||||
|
'build', |
||||||
|
'language', |
||||||
|
'public_headers', |
||||||
|
'headers', |
||||||
|
'src', |
||||||
|
'deps'] |
||||||
|
|
||||||
|
def rebuild_as_ordered_dict(indict, special_keys): |
||||||
|
outdict = collections.OrderedDict() |
||||||
|
for key in special_keys: |
||||||
|
if key in indict: |
||||||
|
outdict[key] = indict[key] |
||||||
|
for key in sorted(indict.keys()): |
||||||
|
if key in special_keys: continue |
||||||
|
outdict[key] = indict[key] |
||||||
|
return outdict |
||||||
|
|
||||||
|
def clean_elem(indict): |
||||||
|
for name in ['public_headers', 'headers', 'src']: |
||||||
|
if name not in indict: continue |
||||||
|
inlist = indict[name] |
||||||
|
protos = set(x for x in inlist if os.path.splitext(x)[1] == '.proto') |
||||||
|
others = set(x for x in inlist if x not in protos) |
||||||
|
indict[name] = sorted(protos) + sorted(others) |
||||||
|
return rebuild_as_ordered_dict(indict, _ELEM_KEYS) |
||||||
|
|
||||||
|
for filename in sys.argv[1:]: |
||||||
|
with open(filename) as f: |
||||||
|
js = json.load(f) |
||||||
|
js = rebuild_as_ordered_dict(js, _TOP_LEVEL_KEYS) |
||||||
|
js['settings']['version'] = rebuild_as_ordered_dict( |
||||||
|
js['settings']['version'], _VERSION_KEYS) |
||||||
|
for grp in ['filegroups', 'libs', 'targets']: |
||||||
|
if grp not in js: continue |
||||||
|
js[grp] = sorted([clean_elem(x) for x in js[grp]], |
||||||
|
key=lambda x: (x.get('language', '_'), x['name'])) |
||||||
|
output = json.dumps(js, indent = 2) |
||||||
|
# massage out trailing whitespace |
||||||
|
lines = [] |
||||||
|
for line in output.splitlines(): |
||||||
|
lines.append(line.rstrip() + '\n') |
||||||
|
output = ''.join(lines) |
||||||
|
if TEST: |
||||||
|
with open(filename) as f: |
||||||
|
assert f.read() == output |
||||||
|
else: |
||||||
|
with open(filename, 'w') as f: |
||||||
|
f.write(output) |
||||||
|
|
@ -1,8 +1,9 @@ |
|||||||
#!/bin/bash |
#!/bin/bash |
||||||
set -ex |
set -e |
||||||
|
source $(dirname $0)/config.sh |
||||||
cd $(dirname $0)/../.. |
cd $(dirname $0)/../.. |
||||||
for dir in src test include |
for dir in src test include |
||||||
do |
do |
||||||
find $dir -name '*.c' -or -name '*.cc' -or -name '*.h' | xargs clang-format -i |
find $dir -name '*.c' -or -name '*.cc' -or -name '*.h' | xargs $CLANG_FORMAT -i |
||||||
done |
done |
||||||
|
|
||||||
|
@ -0,0 +1,11 @@ |
|||||||
|
CLANG_FORMAT=clang-format-3.5 |
||||||
|
|
||||||
|
set -ex |
||||||
|
|
||||||
|
if not hash $CLANG_FORMAT 2>/dev/null; then |
||||||
|
echo "$CLANG_FORMAT is needed but not installed" |
||||||
|
echo "perhaps try:" |
||||||
|
echo " sudo apt-get install $CLANG_FORMAT" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
@ -0,0 +1,21 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
set -ex |
||||||
|
|
||||||
|
# change to grpc repo root |
||||||
|
cd $(dirname $0)/../.. |
||||||
|
|
||||||
|
root=`pwd` |
||||||
|
export GRPC_LIB_SUBDIR=libs/opt |
||||||
|
|
||||||
|
# make the libraries |
||||||
|
make -j static_c |
||||||
|
|
||||||
|
# build php |
||||||
|
cd src/php |
||||||
|
|
||||||
|
cd ext/grpc |
||||||
|
phpize |
||||||
|
./configure --enable-grpc=$root |
||||||
|
make |
||||||
|
|
@ -0,0 +1,805 @@ |
|||||||
|
|
||||||
|
|
||||||
|
[ |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "alarm_heap_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "alarm_list_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "alarm_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "alpn_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "bin_encoder_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_hash_table_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_statistics_multiple_writers_circular_buffer_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_statistics_multiple_writers_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_statistics_performance_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_statistics_quick_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_statistics_small_log_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_stub_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "census_window_stats_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_status_conversion_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_stream_encoder_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_stream_map_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_transport_end2end_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "dualstack_socket_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "echo_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "fd_posix_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "fling_stream_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "fling_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_cancellable_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_cmdline_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_histogram_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_host_port_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_log_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_slice_buffer_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_slice_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_string_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_sync_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_thd_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_time_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "gpr_useful_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "grpc_base64_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "grpc_byte_buffer_reader_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "grpc_channel_stack_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "grpc_completion_queue_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "grpc_credentials_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "grpc_json_token_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "grpc_stream_op_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "hpack_parser_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "hpack_table_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "httpcli_format_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "httpcli_parser_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "httpcli_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "lame_client_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "message_compress_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "metadata_buffer_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "murmur_hash_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "no_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "poll_kick_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "resolve_address_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "secure_endpoint_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "sockaddr_utils_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "tcp_client_posix_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "tcp_posix_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "tcp_server_posix_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "time_averaged_stats_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "time_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "timeout_encoding_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "transport_metadata_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c++", |
||||||
|
"name": "channel_arguments_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c++", |
||||||
|
"name": "credentials_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c++", |
||||||
|
"name": "end2end_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c++", |
||||||
|
"name": "status_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c++", |
||||||
|
"name": "sync_client_async_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c++", |
||||||
|
"name": "thread_pool_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_cancel_after_accept_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_cancel_after_accept_and_writes_closed_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_cancel_after_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_cancel_before_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_cancel_in_a_vacuum_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_census_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_disappearing_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_early_server_shutdown_finishes_tags_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_graceful_server_shutdown_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_invoke_large_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_max_concurrent_streams_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_no_op_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_ping_pong_streaming_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_request_response_with_binary_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_request_response_with_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_request_response_with_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_simple_delayed_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_thread_stress_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fake_security_writes_done_hangs_with_pending_read_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_cancel_after_accept_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_cancel_after_accept_and_writes_closed_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_cancel_after_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_cancel_before_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_cancel_in_a_vacuum_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_census_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_disappearing_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_early_server_shutdown_finishes_tags_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_graceful_server_shutdown_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_invoke_large_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_max_concurrent_streams_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_no_op_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_ping_pong_streaming_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_request_response_with_binary_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_request_response_with_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_request_response_with_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_simple_delayed_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_thread_stress_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_fullstack_writes_done_hangs_with_pending_read_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_cancel_after_accept_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_cancel_after_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_cancel_before_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_census_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_disappearing_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_graceful_server_shutdown_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_invoke_large_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_max_concurrent_streams_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_no_op_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_ping_pong_streaming_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_request_response_with_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_simple_delayed_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_thread_stress_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_no_op_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_cancel_after_accept_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_cancel_after_accept_and_writes_closed_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_cancel_after_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_cancel_before_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_cancel_in_a_vacuum_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_census_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_disappearing_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_early_server_shutdown_finishes_tags_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_graceful_server_shutdown_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_invoke_large_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_max_concurrent_streams_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_no_op_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_ping_pong_streaming_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_request_response_with_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_request_response_with_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_simple_delayed_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_thread_stress_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_writes_done_hangs_with_pending_read_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_no_op_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_simple_request_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_thread_stress_test" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"language": "c", |
||||||
|
"name": "chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test" |
||||||
|
} |
||||||
|
] |
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue