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