|
@@ -17,6 +17,7 @@
|
|
|
*/
|
|
|
|
|
|
#include <memory>
|
|
|
+#include <regex>
|
|
|
#include <unordered_map>
|
|
|
|
|
|
#include <gflags/gflags.h>
|
|
@@ -100,6 +101,34 @@ using grpc::testing::CreateChannelForTestCase;
|
|
|
using grpc::testing::GetServiceAccountJsonKey;
|
|
|
using grpc::testing::UpdateActions;
|
|
|
|
|
|
+namespace {
|
|
|
+
|
|
|
+// Parse the contents of FLAGS_additional_metadata into a map. Allow
|
|
|
+// alphanumeric characters and dashes in keys, and any character but semicolons
|
|
|
+// in values.
|
|
|
+std::multimap<grpc::string, grpc::string> ParseAdditionalMetadataFlag(
|
|
|
+ const grpc::string& flag) {
|
|
|
+ std::multimap<grpc::string, grpc::string> additional_metadata;
|
|
|
+
|
|
|
+ // Key in group 1; value in group 2.
|
|
|
+ std::regex re("([-a-zA-Z0-9]+):([^;]*);?");
|
|
|
+ auto metadata_entries_begin = std::sregex_iterator(
|
|
|
+ flag.begin(), flag.end(), re, std::regex_constants::match_continuous);
|
|
|
+ auto metadata_entries_end = std::sregex_iterator();
|
|
|
+
|
|
|
+ for (std::sregex_iterator i = metadata_entries_begin;
|
|
|
+ i != metadata_entries_end; ++i) {
|
|
|
+ std::smatch match = *i;
|
|
|
+ gpr_log(GPR_INFO, "Adding additional metadata with key %s and value %s",
|
|
|
+ match[1].str().c_str(), match[2].str().c_str());
|
|
|
+ additional_metadata.insert({match[1].str(), match[2].str()});
|
|
|
+ }
|
|
|
+
|
|
|
+ return additional_metadata;
|
|
|
+}
|
|
|
+
|
|
|
+} // namespace
|
|
|
+
|
|
|
int main(int argc, char** argv) {
|
|
|
grpc::testing::InitTest(&argc, &argv, true);
|
|
|
gpr_log(GPR_INFO, "Testing these cases: %s", FLAGS_test_case.c_str());
|
|
@@ -113,7 +142,7 @@ int main(int argc, char** argv) {
|
|
|
};
|
|
|
} else {
|
|
|
std::multimap<grpc::string, grpc::string> additional_metadata =
|
|
|
- grpc::testing::ParseAdditionalMetadataFlag(FLAGS_additional_metadata);
|
|
|
+ ParseAdditionalMetadataFlag(FLAGS_additional_metadata);
|
|
|
|
|
|
channel_creation_func = [test_case, additional_metadata]() {
|
|
|
std::vector<std::unique_ptr<
|