mirror of https://github.com/grpc/grpc.git
Allow MetadataMap to be a status in TrySeq (#28490)
* Enable metadata to be a 'status' for TrySeq Begins to allow us to return trailing metadata and get the right behaviors. * commentpull/28534/head
parent
066a50b9ca
commit
d2d2d0650a
8 changed files with 167 additions and 11 deletions
@ -0,0 +1,50 @@ |
||||
// Copyright 2021 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <gtest/gtest.h> |
||||
|
||||
#include "src/core/lib/promise/try_seq.h" |
||||
#include "src/core/lib/resource_quota/resource_quota.h" |
||||
#include "src/core/lib/transport/metadata_batch.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
static auto* g_memory_allocator = new MemoryAllocator( |
||||
ResourceQuota::Default()->memory_quota()->CreateMemoryAllocator("test")); |
||||
|
||||
using TestMap = MetadataMap<GrpcStatusMetadata>; |
||||
|
||||
TEST(PromiseTest, SucceedAndThenFail) { |
||||
auto arena = MakeScopedArena(1024, g_memory_allocator); |
||||
Poll<TestMap> r = TrySeq( |
||||
[&arena] { |
||||
TestMap m(arena.get()); |
||||
m.Set(GrpcStatusMetadata(), GRPC_STATUS_OK); |
||||
return m; |
||||
}, |
||||
[&arena]() { |
||||
TestMap m(arena.get()); |
||||
m.Set(GrpcStatusMetadata(), GRPC_STATUS_UNAVAILABLE); |
||||
return m; |
||||
})(); |
||||
EXPECT_EQ(absl::get<TestMap>(r).get(GrpcStatusMetadata()), |
||||
GRPC_STATUS_UNAVAILABLE); |
||||
} |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
int main(int argc, char** argv) { |
||||
::testing::InitGoogleTest(&argc, argv); |
||||
return RUN_ALL_TESTS(); |
||||
} |
Loading…
Reference in new issue