mirror of https://github.com/grpc/grpc.git
commit
3c09810ac9
69 changed files with 1084 additions and 294 deletions
@ -0,0 +1,86 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2016, 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/ext/census/trace_context.h" |
||||||
|
|
||||||
|
#include <grpc/census.h> |
||||||
|
#include <grpc/support/log.h> |
||||||
|
#include <stdbool.h> |
||||||
|
|
||||||
|
#include "third_party/nanopb/pb_decode.h" |
||||||
|
#include "third_party/nanopb/pb_encode.h" |
||||||
|
|
||||||
|
// This function assumes the TraceContext is valid.
|
||||||
|
size_t encode_trace_context(google_trace_TraceContext *ctxt, uint8_t *buffer, |
||||||
|
const size_t buf_size) { |
||||||
|
// Create a stream that will write to our buffer.
|
||||||
|
pb_ostream_t stream = pb_ostream_from_buffer(buffer, buf_size); |
||||||
|
|
||||||
|
// encode message
|
||||||
|
bool status = pb_encode(&stream, google_trace_TraceContext_fields, ctxt); |
||||||
|
|
||||||
|
if (!status) { |
||||||
|
gpr_log(GPR_DEBUG, "TraceContext encoding failed: %s", |
||||||
|
PB_GET_ERROR(&stream)); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
return stream.bytes_written; |
||||||
|
} |
||||||
|
|
||||||
|
bool decode_trace_context(google_trace_TraceContext *ctxt, uint8_t *buffer, |
||||||
|
const size_t nbytes) { |
||||||
|
// Create a stream that reads nbytes from the buffer.
|
||||||
|
pb_istream_t stream = pb_istream_from_buffer(buffer, nbytes); |
||||||
|
|
||||||
|
// decode message
|
||||||
|
bool status = pb_decode(&stream, google_trace_TraceContext_fields, ctxt); |
||||||
|
|
||||||
|
if (!status) { |
||||||
|
gpr_log(GPR_DEBUG, "TraceContext decoding failed: %s", |
||||||
|
PB_GET_ERROR(&stream)); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
// check fields
|
||||||
|
if (!ctxt->has_trace_id) { |
||||||
|
gpr_log(GPR_DEBUG, "Invalid TraceContext: missing trace_id"); |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (!ctxt->has_span_id) { |
||||||
|
gpr_log(GPR_DEBUG, "Invalid TraceContext: missing span_id"); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2016, 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. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
/* Functions for manipulating trace contexts as defined in
|
||||||
|
src/proto/census/trace.proto */ |
||||||
|
#ifndef GRPC_CORE_EXT_CENSUS_TRACE_CONTEXT_H |
||||||
|
#define GRPC_CORE_EXT_CENSUS_TRACE_CONTEXT_H |
||||||
|
|
||||||
|
#include "src/core/ext/census/gen/trace_context.pb.h" |
||||||
|
|
||||||
|
/* Maximum number of bytes required to encode a TraceContext (31)
|
||||||
|
1 byte for trace_id field |
||||||
|
1 byte for trace_id length |
||||||
|
1 byte for trace_id.hi field |
||||||
|
8 bytes for trace_id.hi (uint64_t) |
||||||
|
1 byte for trace_id.lo field |
||||||
|
8 bytes for trace_id.lo (uint64_t) |
||||||
|
1 byte for span_id field |
||||||
|
8 bytes for span_id (uint64_t) |
||||||
|
1 byte for is_sampled field |
||||||
|
1 byte for is_sampled (bool) */ |
||||||
|
#define TRACE_MAX_CONTEXT_SIZE 31 |
||||||
|
|
||||||
|
/* Encode a trace context (ctxt) into proto format to the buffer provided. The
|
||||||
|
size of buffer must be at least TRACE_MAX_CONTEXT_SIZE. On success, returns the |
||||||
|
number of bytes successfully encoded into buffer. On failure, returns 0. */ |
||||||
|
size_t encode_trace_context(google_trace_TraceContext *ctxt, uint8_t *buffer, |
||||||
|
const size_t buf_size); |
||||||
|
|
||||||
|
/* Decode a proto-encoded TraceContext from the provided buffer into the
|
||||||
|
TraceContext structure (ctxt). The function expects to be supplied the number |
||||||
|
of bytes to be read from buffer (nbytes). This function will also validate that |
||||||
|
the TraceContext has a span_id and a trace_id, and will return false if either |
||||||
|
of these do not exist. On success, returns true and false otherwise. */ |
||||||
|
bool decode_trace_context(google_trace_TraceContext *ctxt, uint8_t *buffer, |
||||||
|
const size_t nbytes); |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,53 @@ |
|||||||
|
# Copyright 2016, 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. |
||||||
|
|
||||||
|
"""Tests of Channel Args on client/server side.""" |
||||||
|
|
||||||
|
import unittest |
||||||
|
|
||||||
|
import grpc |
||||||
|
|
||||||
|
TEST_CHANNEL_ARGS = ( |
||||||
|
('arg1', b'bytes_val'), |
||||||
|
('arg2', 'str_val'), |
||||||
|
('arg3', 1), |
||||||
|
(b'arg4', 'str_val'), |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class ChannelArgsTest(unittest.TestCase): |
||||||
|
|
||||||
|
def test_client(self): |
||||||
|
grpc.insecure_channel('localhost:8080', options=TEST_CHANNEL_ARGS) |
||||||
|
|
||||||
|
def test_server(self): |
||||||
|
grpc.server(None, options=TEST_CHANNEL_ARGS) |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
unittest.main(verbosity=2) |
Binary file not shown.
@ -0,0 +1,3 @@ |
|||||||
|
trace_id { hi : 5; lo : 1 } |
||||||
|
span_id : 7 |
||||||
|
is_sampled : true |
Binary file not shown.
@ -0,0 +1,2 @@ |
|||||||
|
trace_id { hi : 5; lo : 1 } |
||||||
|
span_id : 7 |
Binary file not shown.
@ -0,0 +1,2 @@ |
|||||||
|
span_id : 7 |
||||||
|
is_sampled : true |
Binary file not shown.
@ -0,0 +1,2 @@ |
|||||||
|
trace_id { hi : 5; lo : 1 } |
||||||
|
is_sampled : true |
@ -0,0 +1,231 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2016, 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 <grpc/census.h> |
||||||
|
#include <grpc/support/log.h> |
||||||
|
#include <grpc/support/port_platform.h> |
||||||
|
#include <grpc/support/useful.h> |
||||||
|
#include <stdbool.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include "src/core/ext/census/base_resources.h" |
||||||
|
#include "src/core/ext/census/resource.h" |
||||||
|
#include "test/core/util/test_config.h" |
||||||
|
|
||||||
|
#include "src/core/ext/census/gen/trace_context.pb.h" |
||||||
|
#include "src/core/ext/census/trace_context.h" |
||||||
|
#include "third_party/nanopb/pb_decode.h" |
||||||
|
#include "third_party/nanopb/pb_encode.h" |
||||||
|
|
||||||
|
#define BUF_SIZE 256 |
||||||
|
|
||||||
|
/* Encodes a TraceContext structure (ctxt1) to a buffer, and then decodes it
|
||||||
|
to a second TraceContext (ctxt2). Validates that the resulting TraceContext |
||||||
|
has a span_id, trace_id, and that the values are equal to those in initial |
||||||
|
TraceContext. On success, returns true. If encode_trace_context returns 0, |
||||||
|
decode_trace_context fails, or the resulting TraceContext is missing a trace_id |
||||||
|
or span_id, it will return false. */ |
||||||
|
bool validate_encode_decode_context(google_trace_TraceContext *ctxt1, |
||||||
|
uint8_t *buffer, size_t buf_size) { |
||||||
|
google_trace_TraceContext ctxt2 = google_trace_TraceContext_init_zero; |
||||||
|
size_t msg_length; |
||||||
|
GPR_ASSERT(ctxt1->has_trace_id && ctxt1->has_span_id); |
||||||
|
|
||||||
|
msg_length = encode_trace_context(ctxt1, buffer, buf_size); |
||||||
|
if (msg_length == 0) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
if (!decode_trace_context(&ctxt2, buffer, msg_length)) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctxt2.has_trace_id || !ctxt2.has_span_id) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
GPR_ASSERT( |
||||||
|
ctxt1->trace_id.hi == ctxt2.trace_id.hi && |
||||||
|
ctxt1->trace_id.lo == ctxt2.trace_id.lo && |
||||||
|
ctxt1->span_id == ctxt2.span_id && |
||||||
|
ctxt1->has_is_sampled == ctxt2.has_is_sampled && |
||||||
|
(ctxt1->has_is_sampled ? ctxt1->is_sampled == ctxt2.is_sampled : true)); |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/* Decodes a proto-encoded TraceContext from a buffer. If decode_trace_context
|
||||||
|
fails or the resulting TraceContext is missing a trace_id or span_id it will |
||||||
|
return false, otherwise returns true. */ |
||||||
|
bool validate_decode_context(google_trace_TraceContext *ctxt, uint8_t *buffer, |
||||||
|
size_t msg_length) { |
||||||
|
// Validate the decoding of a context written to buffer.
|
||||||
|
if (!decode_trace_context(ctxt, buffer, msg_length)) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctxt->has_trace_id || !ctxt->has_span_id) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/* Read an encoded trace context from a file. Validates that the decoding
|
||||||
|
gives the expected result (succeed). */ |
||||||
|
static void read_and_validate_context_from_file(google_trace_TraceContext *ctxt, |
||||||
|
const char *file, |
||||||
|
const bool succeed) { |
||||||
|
uint8_t buffer[BUF_SIZE]; |
||||||
|
FILE *input = fopen(file, "rb"); |
||||||
|
GPR_ASSERT(input != NULL); |
||||||
|
size_t nbytes = fread(buffer, 1, BUF_SIZE, input); |
||||||
|
GPR_ASSERT(nbytes <= BUF_SIZE && feof(input) && !ferror(input)); |
||||||
|
bool res = validate_decode_context(ctxt, buffer, nbytes); |
||||||
|
GPR_ASSERT(res == succeed); |
||||||
|
GPR_ASSERT(fclose(input) == 0); |
||||||
|
} |
||||||
|
|
||||||
|
// Test full proto-buffer.
|
||||||
|
static void test_full() { |
||||||
|
google_trace_TraceContext ctxt = google_trace_TraceContext_init_zero; |
||||||
|
read_and_validate_context_from_file( |
||||||
|
&ctxt, "test/core/census/data/context_full.pb", true); |
||||||
|
} |
||||||
|
|
||||||
|
// Test empty proto-buffer.
|
||||||
|
static void test_empty() { |
||||||
|
google_trace_TraceContext ctxt = google_trace_TraceContext_init_zero; |
||||||
|
read_and_validate_context_from_file( |
||||||
|
&ctxt, "test/core/census/data/context_empty.pb", false); |
||||||
|
} |
||||||
|
|
||||||
|
// Test proto-buffer with only trace_id.
|
||||||
|
static void test_trace_only() { |
||||||
|
google_trace_TraceContext ctxt = google_trace_TraceContext_init_zero; |
||||||
|
read_and_validate_context_from_file( |
||||||
|
&ctxt, "test/core/census/data/context_trace_only.pb", false); |
||||||
|
} |
||||||
|
|
||||||
|
// Test proto-buffer with only span_id.
|
||||||
|
static void test_span_only() { |
||||||
|
google_trace_TraceContext ctxt = google_trace_TraceContext_init_zero; |
||||||
|
read_and_validate_context_from_file( |
||||||
|
&ctxt, "test/core/census/data/context_span_only.pb", false); |
||||||
|
} |
||||||
|
|
||||||
|
// Test proto-buffer without is_sampled value.
|
||||||
|
static void test_no_sample() { |
||||||
|
google_trace_TraceContext ctxt = google_trace_TraceContext_init_zero; |
||||||
|
read_and_validate_context_from_file( |
||||||
|
&ctxt, "test/core/census/data/context_no_sample.pb", true); |
||||||
|
GPR_ASSERT(ctxt.has_is_sampled == false && ctxt.is_sampled == false); |
||||||
|
} |
||||||
|
|
||||||
|
static void test_encode_decode() { |
||||||
|
uint8_t buffer[BUF_SIZE] = {0}; |
||||||
|
|
||||||
|
google_trace_TraceContext ctxt1 = google_trace_TraceContext_init_zero; |
||||||
|
ctxt1.has_trace_id = true; |
||||||
|
ctxt1.trace_id.has_hi = true; |
||||||
|
ctxt1.trace_id.has_lo = true; |
||||||
|
ctxt1.trace_id.lo = 1; |
||||||
|
ctxt1.trace_id.hi = 2; |
||||||
|
ctxt1.has_span_id = true; |
||||||
|
ctxt1.span_id = 3; |
||||||
|
validate_encode_decode_context(&ctxt1, buffer, sizeof(buffer)); |
||||||
|
|
||||||
|
google_trace_TraceContext ctxt2 = google_trace_TraceContext_init_zero; |
||||||
|
ctxt2.has_trace_id = true; |
||||||
|
ctxt2.trace_id.has_hi = false; |
||||||
|
ctxt2.trace_id.has_lo = false; |
||||||
|
ctxt2.has_span_id = true; |
||||||
|
validate_encode_decode_context(&ctxt2, buffer, sizeof(buffer)); |
||||||
|
} |
||||||
|
|
||||||
|
// Test a corrupted proto-buffer.
|
||||||
|
static void test_corrupt() { |
||||||
|
uint8_t buffer[BUF_SIZE] = {0}; |
||||||
|
google_trace_TraceContext ctxt1 = google_trace_TraceContext_init_zero; |
||||||
|
size_t msg_length; |
||||||
|
|
||||||
|
ctxt1.has_trace_id = true; |
||||||
|
ctxt1.trace_id.has_hi = true; |
||||||
|
ctxt1.trace_id.has_lo = true; |
||||||
|
ctxt1.trace_id.lo = 1; |
||||||
|
ctxt1.trace_id.hi = 2; |
||||||
|
ctxt1.has_span_id = true; |
||||||
|
ctxt1.span_id = 3; |
||||||
|
ctxt1.is_sampled = true; |
||||||
|
msg_length = encode_trace_context(&ctxt1, buffer, sizeof(buffer)); |
||||||
|
|
||||||
|
/* Corrupt some bytes. 255 (0xFF) should be illegal for the first byte of the
|
||||||
|
proto encoded object. */ |
||||||
|
buffer[0] = 255; |
||||||
|
|
||||||
|
bool res = validate_decode_context(&ctxt1, buffer, msg_length); |
||||||
|
GPR_ASSERT(res == false); |
||||||
|
} |
||||||
|
|
||||||
|
static void test_buffer_size() { |
||||||
|
// This buffer is too small, so the encode should fail.
|
||||||
|
uint8_t buffer[16] = {0}; |
||||||
|
google_trace_TraceContext ctxt1 = google_trace_TraceContext_init_zero; |
||||||
|
size_t msg_length; |
||||||
|
|
||||||
|
ctxt1.has_trace_id = true; |
||||||
|
ctxt1.trace_id.has_hi = true; |
||||||
|
ctxt1.trace_id.has_lo = true; |
||||||
|
ctxt1.trace_id.lo = 1; |
||||||
|
ctxt1.trace_id.hi = 2; |
||||||
|
ctxt1.has_span_id = true; |
||||||
|
ctxt1.span_id = 3; |
||||||
|
ctxt1.is_sampled = true; |
||||||
|
msg_length = encode_trace_context(&ctxt1, buffer, sizeof(buffer)); |
||||||
|
|
||||||
|
GPR_ASSERT(msg_length == 0); |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char **argv) { |
||||||
|
grpc_test_init(argc, argv); |
||||||
|
test_full(); |
||||||
|
test_empty(); |
||||||
|
test_trace_only(); |
||||||
|
test_span_only(); |
||||||
|
test_encode_decode(); |
||||||
|
test_corrupt(); |
||||||
|
test_no_sample(); |
||||||
|
test_buffer_size(); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,199 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" /> |
||||||
|
<ItemGroup Label="ProjectConfigurations"> |
||||||
|
<ProjectConfiguration Include="Debug|Win32"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Debug|x64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|Win32"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|x64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
</ItemGroup> |
||||||
|
<PropertyGroup Label="Globals"> |
||||||
|
<ProjectGuid>{14511310-FAE4-C287-31DC-D6F456D10AF3}</ProjectGuid> |
||||||
|
<IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> |
||||||
|
<IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||||
|
<PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> |
||||||
|
<PlatformToolset>v100</PlatformToolset> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> |
||||||
|
<PlatformToolset>v110</PlatformToolset> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> |
||||||
|
<PlatformToolset>v120</PlatformToolset> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> |
||||||
|
<PlatformToolset>v140</PlatformToolset> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||||
|
<ImportGroup Label="ExtensionSettings"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\global.props" /> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> |
||||||
|
</ImportGroup> |
||||||
|
<PropertyGroup Label="UserMacros" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)'=='Debug'"> |
||||||
|
<TargetName>census_trace_context_test</TargetName> |
||||||
|
<Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> |
||||||
|
<Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> |
||||||
|
<Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> |
||||||
|
<Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)'=='Release'"> |
||||||
|
<TargetName>census_trace_context_test</TargetName> |
||||||
|
<Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> |
||||||
|
<Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> |
||||||
|
<Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> |
||||||
|
<Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl> |
||||||
|
</PropertyGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<Optimization>Disabled</Optimization> |
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||||
|
<TreatWarningAsError>true</TreatWarningAsError> |
||||||
|
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||||
|
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||||
|
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<Optimization>Disabled</Optimization> |
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||||
|
<TreatWarningAsError>true</TreatWarningAsError> |
||||||
|
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||||
|
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||||
|
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<Optimization>MaxSpeed</Optimization> |
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||||
|
<TreatWarningAsError>true</TreatWarningAsError> |
||||||
|
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||||
|
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||||
|
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<Optimization>MaxSpeed</Optimization> |
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||||
|
<TreatWarningAsError>true</TreatWarningAsError> |
||||||
|
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||||
|
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||||
|
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
|
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="$(SolutionDir)\..\test\core\census\trace_context_test.c"> |
||||||
|
</ClCompile> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj"> |
||||||
|
<Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project> |
||||||
|
</ProjectReference> |
||||||
|
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj"> |
||||||
|
<Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project> |
||||||
|
</ProjectReference> |
||||||
|
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj"> |
||||||
|
<Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project> |
||||||
|
</ProjectReference> |
||||||
|
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> |
||||||
|
<Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project> |
||||||
|
</ProjectReference> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<None Include="packages.config" /> |
||||||
|
</ItemGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||||
|
<ImportGroup Label="ExtensionTargets"> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> |
||||||
|
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> |
||||||
|
</ImportGroup> |
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
||||||
|
<PropertyGroup> |
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> |
||||||
|
</PropertyGroup> |
||||||
|
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" /> |
||||||
|
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" /> |
||||||
|
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" /> |
||||||
|
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" /> |
||||||
|
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" /> |
||||||
|
</Target> |
||||||
|
</Project> |
||||||
|
|
@ -0,0 +1,21 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="$(SolutionDir)\..\test\core\census\trace_context_test.c"> |
||||||
|
<Filter>test\core\census</Filter> |
||||||
|
</ClCompile> |
||||||
|
</ItemGroup> |
||||||
|
|
||||||
|
<ItemGroup> |
||||||
|
<Filter Include="test"> |
||||||
|
<UniqueIdentifier>{ceb3b75d-b5bc-0966-6724-06fb51237d08}</UniqueIdentifier> |
||||||
|
</Filter> |
||||||
|
<Filter Include="test\core"> |
||||||
|
<UniqueIdentifier>{8d294ce5-d65c-2fef-28ab-43b4d23722c3}</UniqueIdentifier> |
||||||
|
</Filter> |
||||||
|
<Filter Include="test\core\census"> |
||||||
|
<UniqueIdentifier>{3981af30-20c0-647e-755f-fa184674d50a}</UniqueIdentifier> |
||||||
|
</Filter> |
||||||
|
</ItemGroup> |
||||||
|
</Project> |
||||||
|
|
Loading…
Reference in new issue