Merge pull request #10262 from y-zeng/set_user_agent

Replace the existing user agent string in SetUserAgentPrefix
pull/10309/head
Yuchen Zeng 8 years ago committed by GitHub
commit ac4a7283ee
  1. 17
      src/cpp/common/channel_arguments.cc
  2. 16
      test/cpp/common/channel_arguments_test.cc

@ -133,14 +133,19 @@ void ChannelArguments::SetUserAgentPrefix(
return;
}
bool replaced = false;
auto strings_it = strings_.begin();
for (auto it = args_.begin(); it != args_.end(); ++it) {
const grpc_arg& arg = *it;
if (arg.type == GRPC_ARG_STRING &&
grpc::string(arg.key) == GRPC_ARG_PRIMARY_USER_AGENT_STRING) {
strings_.push_back(user_agent_prefix + " " + arg.value.string);
it->value.string = const_cast<char*>(strings_.back().c_str());
replaced = true;
break;
++strings_it;
if (arg.type == GRPC_ARG_STRING) {
if (grpc::string(arg.key) == GRPC_ARG_PRIMARY_USER_AGENT_STRING) {
GPR_ASSERT(arg.value.string == strings_it->c_str());
*(strings_it) = user_agent_prefix + " " + arg.value.string;
it->value.string = const_cast<char*>(strings_it->c_str());
replaced = true;
break;
}
++strings_it;
}
}
if (!replaced) {

@ -243,6 +243,22 @@ TEST_F(ChannelArgumentsTest, SetUserAgentPrefix) {
channel_args_.SetUserAgentPrefix(prefix);
EXPECT_TRUE(HasArg(arg0));
// Test if the user agent string is copied correctly
ChannelArguments new_channel_args(channel_args_);
grpc_channel_args args;
SetChannelArgs(new_channel_args, &args);
bool found = false;
for (size_t i = 0; i < args.num_args; i++) {
const grpc_arg& arg = args.args[i];
if (arg.type == GRPC_ARG_STRING &&
grpc::string(arg.key) == GRPC_ARG_PRIMARY_USER_AGENT_STRING) {
EXPECT_FALSE(found);
EXPECT_EQ(0, strcmp(arg.value.string, arg0.value.string));
found = true;
}
}
EXPECT_TRUE(found);
}
} // namespace testing

Loading…
Cancel
Save