aboutsummaryrefslogtreecommitdiff
path: root/pw_log_rpc
diff options
context:
space:
mode:
authorCarlos Chinchilla <cachinchilla@google.com>2021-12-07 11:47:30 -0800
committerCQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>2021-12-07 21:11:48 +0000
commited87d60b425585a8338acbe1b3abb1fe4232d448 (patch)
tree3d0a27d67944faf68720c2a53146d826a178fe96 /pw_log_rpc
parent4a613e5a87149de352fcb5fe7f6ba5e5a9c161e6 (diff)
downloadpigweed-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.cc24
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());