|
|
|
@ -23,6 +23,7 @@ |
|
|
|
|
|
|
|
|
|
#include <string> |
|
|
|
|
|
|
|
|
|
#include "absl/strings/str_cat.h" |
|
|
|
|
#include "absl/strings/str_format.h" |
|
|
|
|
|
|
|
|
|
#include <grpc/grpc.h> |
|
|
|
@ -34,6 +35,7 @@ |
|
|
|
|
#include "src/core/lib/gpr/string.h" |
|
|
|
|
#include "src/core/lib/iomgr/exec_ctx.h" |
|
|
|
|
#include "src/core/lib/slice/slice_internal.h" |
|
|
|
|
#include "src/core/lib/transport/metadata_batch.h" |
|
|
|
|
#include "src/core/lib/transport/static_metadata.h" |
|
|
|
|
#include "test/core/util/test_config.h" |
|
|
|
|
|
|
|
|
@ -392,6 +394,67 @@ static void test_copied_static_metadata(bool dup_key, bool dup_value) { |
|
|
|
|
grpc_shutdown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_grpc_metadata_batch_get_value_with_absent_key(void) { |
|
|
|
|
grpc_init(); |
|
|
|
|
grpc_metadata_batch metadata; |
|
|
|
|
grpc_metadata_batch_init(&metadata); |
|
|
|
|
std::string concatenated_value; |
|
|
|
|
absl::optional<absl::string_view> value = grpc_metadata_batch_get_value( |
|
|
|
|
&metadata, "absent_key", &concatenated_value); |
|
|
|
|
GPR_ASSERT(value == absl::nullopt); |
|
|
|
|
grpc_metadata_batch_destroy(&metadata); |
|
|
|
|
grpc_shutdown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_grpc_metadata_batch_get_value_returns_one_value(void) { |
|
|
|
|
grpc_init(); |
|
|
|
|
const char* kKey = "some_key"; |
|
|
|
|
const char* kValue = "some_value"; |
|
|
|
|
grpc_metadata_batch metadata; |
|
|
|
|
grpc_metadata_batch_init(&metadata); |
|
|
|
|
grpc_linked_mdelem storage; |
|
|
|
|
storage.md = grpc_mdelem_from_slices( |
|
|
|
|
grpc_slice_intern(grpc_slice_from_static_string(kKey)), |
|
|
|
|
grpc_slice_intern(grpc_slice_from_static_string(kValue))); |
|
|
|
|
GPR_ASSERT(grpc_metadata_batch_link_head(&metadata, &storage) == |
|
|
|
|
GRPC_ERROR_NONE); |
|
|
|
|
std::string concatenated_value; |
|
|
|
|
absl::optional<absl::string_view> value = |
|
|
|
|
grpc_metadata_batch_get_value(&metadata, kKey, &concatenated_value); |
|
|
|
|
GPR_ASSERT(value.has_value()); |
|
|
|
|
GPR_ASSERT(value.value() == kValue); |
|
|
|
|
grpc_metadata_batch_destroy(&metadata); |
|
|
|
|
grpc_shutdown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_grpc_metadata_batch_get_value_returns_multiple_values(void) { |
|
|
|
|
grpc_init(); |
|
|
|
|
const char* kKey = "some_key"; |
|
|
|
|
const char* kValue1 = "value1"; |
|
|
|
|
const char* kValue2 = "value2"; |
|
|
|
|
grpc_metadata_batch metadata; |
|
|
|
|
grpc_metadata_batch_init(&metadata); |
|
|
|
|
grpc_linked_mdelem storage1; |
|
|
|
|
storage1.md = grpc_mdelem_from_slices( |
|
|
|
|
grpc_slice_intern(grpc_slice_from_static_string(kKey)), |
|
|
|
|
grpc_slice_intern(grpc_slice_from_static_string(kValue1))); |
|
|
|
|
GPR_ASSERT(grpc_metadata_batch_link_tail(&metadata, &storage1) == |
|
|
|
|
GRPC_ERROR_NONE); |
|
|
|
|
grpc_linked_mdelem storage2; |
|
|
|
|
storage2.md = grpc_mdelem_from_slices( |
|
|
|
|
grpc_slice_intern(grpc_slice_from_static_string(kKey)), |
|
|
|
|
grpc_slice_intern(grpc_slice_from_static_string(kValue2))); |
|
|
|
|
GPR_ASSERT(grpc_metadata_batch_link_tail(&metadata, &storage2) == |
|
|
|
|
GRPC_ERROR_NONE); |
|
|
|
|
std::string concatenated_value; |
|
|
|
|
absl::optional<absl::string_view> value = |
|
|
|
|
grpc_metadata_batch_get_value(&metadata, kKey, &concatenated_value); |
|
|
|
|
GPR_ASSERT(value.has_value()); |
|
|
|
|
GPR_ASSERT(value.value() == absl::StrCat(kValue1, ",", kValue2)); |
|
|
|
|
grpc_metadata_batch_destroy(&metadata); |
|
|
|
|
grpc_shutdown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main(int argc, char** argv) { |
|
|
|
|
grpc::testing::TestEnvironment env(argc, argv); |
|
|
|
|
grpc_init(); |
|
|
|
@ -410,6 +473,9 @@ int main(int argc, char** argv) { |
|
|
|
|
test_things_stick_around(); |
|
|
|
|
test_user_data_works(); |
|
|
|
|
test_user_data_works_for_allocated_md(); |
|
|
|
|
test_grpc_metadata_batch_get_value_with_absent_key(); |
|
|
|
|
test_grpc_metadata_batch_get_value_returns_one_value(); |
|
|
|
|
test_grpc_metadata_batch_get_value_returns_multiple_values(); |
|
|
|
|
grpc_shutdown(); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|