diff options
author | Carlos Chinchilla <cachinchilla@google.com> | 2021-12-07 11:47:30 -0800 |
---|---|---|
committer | CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2021-12-07 21:11:48 +0000 |
commit | ed87d60b425585a8338acbe1b3abb1fe4232d448 (patch) | |
tree | 3d0a27d67944faf68720c2a53146d826a178fe96 /pw_log_rpc | |
parent | 4a613e5a87149de352fcb5fe7f6ba5e5a9c161e6 (diff) | |
download | pigweed-ed87d60b425585a8338acbe1b3abb1fe4232d448.tar.gz |
pw_log_rpc: Test buffer is released before re-open
Test that the RpcLogDrain::server_writer_ releases the buffer before the
writer is overwritten with a new call to Open().
Change-Id: I37f9e4dd7d81a11eac4a077ff0eff3481c3370e5
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/72664
Pigweed-Auto-Submit: Carlos Chinchilla <cachinchilla@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Diffstat (limited to 'pw_log_rpc')
-rw-r--r-- | pw_log_rpc/log_service_test.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/pw_log_rpc/log_service_test.cc b/pw_log_rpc/log_service_test.cc index e2e7db91a..6ebd177bf 100644 --- a/pw_log_rpc/log_service_test.cc +++ b/pw_log_rpc/log_service_test.cc @@ -938,6 +938,30 @@ TEST_F(LogServiceTest, FilterLogs) { EXPECT_EQ(entries_found, 3u); } +TEST_F(LogServiceTest, ReopenClosedLogStreamWithAcquiredBuffer) { + const uint32_t drain_channel_id = kCloseWriterOnErrorDrainId; + auto drain = drain_map_.GetDrainFromChannelId(drain_channel_id); + ASSERT_TRUE(drain.ok()); + + LogService log_service(drain_map_); + rpc::RawFakeChannelOutput<10, 128, 512> output; + rpc::Channel channel(rpc::Channel::Create<drain_channel_id>(&output)); + rpc::Server server(std::span(&channel, 1)); + + // Request logs. + rpc::RawServerWriter writer = rpc::RawServerWriter::Open<Logs::Listen>( + server, drain_channel_id, log_service); + EXPECT_EQ(drain.value()->Open(writer), OkStatus()); + // This drain closes on errors. + EXPECT_EQ(drain.value()->Flush(), OkStatus()); + + // Request log stream with a new writer. + writer = rpc::RawServerWriter::Open<Logs::Listen>( + server, drain_channel_id, log_service); + EXPECT_EQ(drain.value()->Open(writer), OkStatus()); + EXPECT_EQ(drain.value()->Flush(), OkStatus()); +} + void VerifyFilterRule(protobuf::Decoder& decoder, const Filter::Rule& expected_rule) { ASSERT_TRUE(decoder.Next().ok()); |