Reviewer comments

reviewable/pr13883/r11
ncteisen 7 years ago
parent e9587db853
commit b50f74f502
  1. 136
      test/core/channel/channel_trace_test.cc

@ -34,16 +34,17 @@
namespace grpc_core {
namespace testing {
namespace {
static void add_simple_trace_event(RefCountedPtr<ChannelTrace> tracer) {
void AddSimpleTrace(RefCountedPtr<ChannelTrace> tracer) {
tracer->AddTraceEvent(grpc_slice_from_static_string("simple trace"),
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"),
GRPC_CHANNEL_READY);
}
// checks for the existence of all the required members of the tracer.
static void validate_trace(RefCountedPtr<ChannelTrace> tracer,
size_t expected_num_event_logged, size_t max_nodes) {
void ValidateChannelTrace(RefCountedPtr<ChannelTrace> tracer,
size_t expected_num_event_logged, size_t max_nodes) {
if (!max_nodes) return;
char* json_str = tracer->RenderTrace();
grpc_json* json = grpc_json_parse_string(json_str);
@ -53,8 +54,7 @@ static void validate_trace(RefCountedPtr<ChannelTrace> tracer,
gpr_free(json_str);
}
static void validate_trace_data_matches_uuid_lookup(
RefCountedPtr<ChannelTrace> tracer) {
void ValidateTraceDataMatchedUuidLookup(RefCountedPtr<ChannelTrace> tracer) {
intptr_t uuid = tracer->GetUuid();
if (uuid == -1) return; // Doesn't make sense to lookup if tracing disabled
char* tracer_json_str = tracer->RenderTrace();
@ -68,12 +68,12 @@ static void validate_trace_data_matches_uuid_lookup(
// Tests basic ChannelTrace functionality like construction, adding trace, and
// lookups by uuid.
static void test_basic_channel_trace(size_t max_nodes) {
void TestBasicChannelTrace(size_t max_nodes) {
grpc_core::ExecCtx exec_ctx;
RefCountedPtr<ChannelTrace> tracer = MakeRefCounted<ChannelTrace>(max_nodes);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
validate_trace_data_matches_uuid_lookup(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
ValidateTraceDataMatchedUuidLookup(tracer);
tracer->AddTraceEvent(
grpc_slice_from_static_string("trace three"),
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"),
@ -81,81 +81,83 @@ static void test_basic_channel_trace(size_t max_nodes) {
GRPC_CHANNEL_IDLE);
tracer->AddTraceEvent(grpc_slice_from_static_string("trace four"),
GRPC_ERROR_NONE, GRPC_CHANNEL_SHUTDOWN);
validate_trace(tracer, 4, max_nodes);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
validate_trace(tracer, 6, max_nodes);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
validate_trace(tracer, 10, max_nodes);
validate_trace_data_matches_uuid_lookup(tracer);
ValidateChannelTrace(tracer, 4, max_nodes);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
ValidateChannelTrace(tracer, 6, max_nodes);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
ValidateChannelTrace(tracer, 10, max_nodes);
ValidateTraceDataMatchedUuidLookup(tracer);
tracer.reset(nullptr);
}
// Calls basic test with various values for max_nodes (including 0, which turns
// the tracer off).
TEST(ChannelTracerTest, BasicTest) {
test_basic_channel_trace(0);
test_basic_channel_trace(1);
test_basic_channel_trace(2);
test_basic_channel_trace(6);
test_basic_channel_trace(10);
test_basic_channel_trace(15);
}
// Tests more complex functionality, like a parent channel tracking
// subchannles. This exercises the ref/unref patterns since the parent tracer
// and this function will both hold refs to the subchannel.
static void test_complex_channel_trace(size_t max_nodes) {
void TestComplexChannelTrace(size_t max_nodes) {
grpc_core::ExecCtx exec_ctx;
RefCountedPtr<ChannelTrace> tracer = MakeRefCounted<ChannelTrace>(max_nodes);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
RefCountedPtr<ChannelTrace> sc1 = MakeRefCounted<ChannelTrace>(max_nodes);
tracer->AddTraceEvent(grpc_slice_from_static_string("subchannel one created"),
GRPC_ERROR_NONE, GRPC_CHANNEL_IDLE, sc1);
validate_trace(tracer, 3, max_nodes);
add_simple_trace_event(sc1);
add_simple_trace_event(sc1);
add_simple_trace_event(sc1);
validate_trace(sc1, 3, max_nodes);
add_simple_trace_event(sc1);
add_simple_trace_event(sc1);
add_simple_trace_event(sc1);
validate_trace(sc1, 6, max_nodes);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
validate_trace(tracer, 5, max_nodes);
validate_trace_data_matches_uuid_lookup(tracer);
ValidateChannelTrace(tracer, 3, max_nodes);
AddSimpleTrace(sc1);
AddSimpleTrace(sc1);
AddSimpleTrace(sc1);
ValidateChannelTrace(sc1, 3, max_nodes);
AddSimpleTrace(sc1);
AddSimpleTrace(sc1);
AddSimpleTrace(sc1);
ValidateChannelTrace(sc1, 6, max_nodes);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
ValidateChannelTrace(tracer, 5, max_nodes);
ValidateTraceDataMatchedUuidLookup(tracer);
RefCountedPtr<ChannelTrace> sc2 = MakeRefCounted<ChannelTrace>(max_nodes);
tracer->AddTraceEvent(grpc_slice_from_static_string("subchannel two created"),
GRPC_ERROR_NONE, GRPC_CHANNEL_IDLE, sc2);
tracer->AddTraceEvent(
grpc_slice_from_static_string("subchannel one inactive"), GRPC_ERROR_NONE,
GRPC_CHANNEL_IDLE, sc1);
validate_trace(tracer, 7, max_nodes);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
validate_trace_data_matches_uuid_lookup(tracer);
ValidateChannelTrace(tracer, 7, max_nodes);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
ValidateTraceDataMatchedUuidLookup(tracer);
tracer.reset(nullptr);
sc1.reset(nullptr);
sc2.reset(nullptr);
}
} // anonymous namespace
// Calls basic test with various values for max_nodes (including 0, which turns
// the tracer off).
TEST(ChannelTracerTest, BasicTest) {
TestBasicChannelTrace(0);
TestBasicChannelTrace(1);
TestBasicChannelTrace(2);
TestBasicChannelTrace(6);
TestBasicChannelTrace(10);
TestBasicChannelTrace(15);
}
// Calls the complex test with a sweep of sizes for max_nodes.
TEST(ChannelTracerTest, ComplexTest) {
test_complex_channel_trace(0);
test_complex_channel_trace(1);
test_complex_channel_trace(2);
test_complex_channel_trace(6);
test_complex_channel_trace(10);
test_complex_channel_trace(15);
TestComplexChannelTrace(0);
TestComplexChannelTrace(1);
TestComplexChannelTrace(2);
TestComplexChannelTrace(6);
TestComplexChannelTrace(10);
TestComplexChannelTrace(15);
}
// Test a case in which the parent channel has subchannels and the subchannels
@ -164,19 +166,19 @@ TEST(ChannelTracerTest, ComplexTest) {
TEST(ChannelTracerTest, TestNesting) {
grpc_core::ExecCtx exec_ctx;
RefCountedPtr<ChannelTrace> tracer = MakeRefCounted<ChannelTrace>(10);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
RefCountedPtr<ChannelTrace> sc1 = MakeRefCounted<ChannelTrace>(5);
tracer->AddTraceEvent(grpc_slice_from_static_string("subchannel one created"),
GRPC_ERROR_NONE, GRPC_CHANNEL_IDLE, sc1);
add_simple_trace_event(sc1);
AddSimpleTrace(sc1);
RefCountedPtr<ChannelTrace> conn1 = MakeRefCounted<ChannelTrace>(5);
// nesting one level deeper.
sc1->AddTraceEvent(grpc_slice_from_static_string("connection one created"),
GRPC_ERROR_NONE, GRPC_CHANNEL_IDLE, conn1);
add_simple_trace_event(conn1);
add_simple_trace_event(tracer);
add_simple_trace_event(tracer);
AddSimpleTrace(conn1);
AddSimpleTrace(tracer);
AddSimpleTrace(tracer);
RefCountedPtr<ChannelTrace> sc2 = MakeRefCounted<ChannelTrace>(5);
tracer->AddTraceEvent(grpc_slice_from_static_string("subchannel two created"),
GRPC_ERROR_NONE, GRPC_CHANNEL_IDLE, sc2);
@ -185,7 +187,7 @@ TEST(ChannelTracerTest, TestNesting) {
tracer->AddTraceEvent(
grpc_slice_from_static_string("subchannel one inactive"), GRPC_ERROR_NONE,
GRPC_CHANNEL_IDLE, sc1);
add_simple_trace_event(tracer);
AddSimpleTrace(tracer);
tracer.reset(nullptr);
sc1.reset(nullptr);
sc2.reset(nullptr);

Loading…
Cancel
Save