Merge github.com:grpc/grpc into hpack_fix

pull/4033/head
Craig Tiller 9 years ago
commit 79e3251939
  1. 2
      include/grpc++/support/string_ref.h
  2. 3
      include/grpc/byte_buffer.h
  3. 19
      src/core/surface/byte_buffer_reader.c
  4. 2
      src/cpp/util/string_ref.cc
  5. 35
      test/core/surface/byte_buffer_reader_test.c
  6. 12
      tools/run_tests/post_tests_c.sh
  7. 3
      tools/run_tests/run_tests.py

@ -56,7 +56,7 @@ class string_ref {
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// constants
const static size_t npos = size_t(-1);
const static size_t npos;
// construct/copy.
string_ref() : data_(nullptr), length_(0) {}

@ -106,6 +106,9 @@ void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader);
int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
gpr_slice *slice);
/** Merge all data from \a reader into single slice */
gpr_slice grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader);
/** Returns a RAW byte buffer instance from the output of \a reader. */
grpc_byte_buffer *grpc_raw_byte_buffer_from_reader(
grpc_byte_buffer_reader *reader);

@ -31,6 +31,7 @@
*
*/
#include <string.h>
#include <grpc/byte_buffer_reader.h>
#include <grpc/compression.h>
@ -103,3 +104,21 @@ int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
}
return 0;
}
gpr_slice grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader) {
gpr_slice in_slice;
size_t bytes_read = 0;
const size_t input_size = grpc_byte_buffer_length(reader->buffer_out);
gpr_slice out_slice = gpr_slice_malloc(input_size);
gpr_uint8 *const outbuf = GPR_SLICE_START_PTR(out_slice); /* just an alias */
while (grpc_byte_buffer_reader_next(reader, &in_slice) != 0) {
const size_t slice_length = GPR_SLICE_LENGTH(in_slice);
memcpy(&(outbuf[bytes_read]), GPR_SLICE_START_PTR(in_slice), slice_length);
bytes_read += slice_length;
gpr_slice_unref(in_slice);
GPR_ASSERT(bytes_read <= input_size);
}
return out_slice;
}

@ -40,7 +40,7 @@
namespace grpc {
const size_t string_ref::npos;
const size_t string_ref::npos = size_t(-1);
string_ref& string_ref::operator=(const string_ref& rhs) {
data_ = rhs.data_;

@ -184,6 +184,39 @@ static void test_byte_buffer_from_reader(void) {
grpc_byte_buffer_destroy(buffer_from_reader);
}
static void test_readall(void) {
const char* lotsa_as[512];
const char* lotsa_bs[1024];
gpr_slice slices[2];
grpc_byte_buffer *buffer;
grpc_byte_buffer_reader reader;
gpr_slice slice_out;
LOG_TEST("test_readall");
memset(lotsa_as, 'a', 512);
memset(lotsa_bs, 'b', 1024);
/* use slices large enough to overflow inlining */
slices[0] = gpr_slice_malloc(512);
memcpy(GPR_SLICE_START_PTR(slices[0]), lotsa_as, 512);
slices[1] = gpr_slice_malloc(1024);
memcpy(GPR_SLICE_START_PTR(slices[1]), lotsa_bs, 1024);
buffer = grpc_raw_byte_buffer_create(slices, 2);
gpr_slice_unref(slices[0]);
gpr_slice_unref(slices[1]);
grpc_byte_buffer_reader_init(&reader, buffer);
slice_out = grpc_byte_buffer_reader_readall(&reader);
GPR_ASSERT(GPR_SLICE_LENGTH(slice_out) == 512 + 1024);
GPR_ASSERT(memcmp(GPR_SLICE_START_PTR(slice_out), lotsa_as, 512) == 0);
GPR_ASSERT(memcmp(&(GPR_SLICE_START_PTR(slice_out)[512]), lotsa_bs, 1024) ==
0);
gpr_slice_unref(slice_out);
grpc_byte_buffer_destroy(buffer);
}
int main(int argc, char **argv) {
grpc_test_init(argc, argv);
test_read_one_slice();
@ -192,6 +225,6 @@ int main(int argc, char **argv) {
test_read_gzip_compressed_slice();
test_read_deflate_compressed_slice();
test_byte_buffer_from_reader();
test_readall();
return 0;
}

@ -34,8 +34,12 @@ if [ "$CONFIG" != "gcov" ] ; then exit ; fi
root=$(readlink -f $(dirname $0)/../..)
out=$root/reports/c_cxx_coverage
tmp=$(mktemp)
tmp1=$(mktemp)
tmp2=$(mktemp)
cd $root
lcov --capture --directory . --output-file $tmp
genhtml $tmp --output-directory $out
rm $tmp
lcov --capture --directory . --output-file $tmp1
lcov --extract $tmp1 "$root/src/*" "$root/include/*" --output-file $tmp2
genhtml $tmp2 --output-directory $out
rm $tmp2
rm $tmp1

@ -844,6 +844,7 @@ def _build_and_run(
for _ in range(0, args.antagonists)]
port_server_port = 32767
_start_port_server(port_server_port)
resultset = None
try:
infinite_runs = runs_per_test == 0
one_run = set(
@ -889,7 +890,7 @@ def _build_and_run(
finally:
for antagonist in antagonists:
antagonist.kill()
if xml_report:
if xml_report and resultset:
report_utils.render_xml_report(resultset, xml_report)
number_failures, _ = jobset.run(

Loading…
Cancel
Save