Commit 86c1eb34 authored by Sigurdur Asgeirsson's avatar Sigurdur Asgeirsson Committed by Commit Bot

Fix deserialization of AckRequest and Ack events.

Also run all events through serialization and deserialization in the
ports_unittests to make sure new event types go through this in a
unittest.

Bug: 1003391
Change-Id: I3347308db5e1c339b9f639b1cb32a5d41600d97b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2024185
Commit-Queue: Sigurður Ásgeirsson <siggi@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#736104}
parent 3895ab03
...@@ -121,6 +121,12 @@ ScopedEvent Event::Deserialize(const void* buffer, size_t num_bytes) { ...@@ -121,6 +121,12 @@ ScopedEvent Event::Deserialize(const void* buffer, size_t num_bytes) {
return ObserveClosureEvent::Deserialize(port_name, header + 1, data_size); return ObserveClosureEvent::Deserialize(port_name, header + 1, data_size);
case Type::kMergePort: case Type::kMergePort:
return MergePortEvent::Deserialize(port_name, header + 1, data_size); return MergePortEvent::Deserialize(port_name, header + 1, data_size);
case Type::kUserMessageReadAckRequest:
return UserMessageReadAckRequestEvent::Deserialize(port_name, header + 1,
data_size);
case Type::kUserMessageReadAck:
return UserMessageReadAckEvent::Deserialize(port_name, header + 1,
data_size);
default: default:
DVLOG(2) << "Ingoring unknown port event type: " DVLOG(2) << "Ingoring unknown port event type: "
<< static_cast<uint32_t>(header->type); << static_cast<uint32_t>(header->type);
......
...@@ -403,6 +403,26 @@ class PortsTest : public testing::Test, public MessageRouter { ...@@ -403,6 +403,26 @@ class PortsTest : public testing::Test, public MessageRouter {
return; return;
} }
// Serialize and de-serialize all forwarded events.
size_t buf_size = event->GetSerializedSize();
std::unique_ptr<char[]> buf(new char[buf_size]);
event->Serialize(buf.get());
ScopedEvent copy = Event::Deserialize(buf.get(), buf_size);
// This should always succeed unless serialization or deserialization
// is broken. In that case, the loss of events should cause a test failure.
ASSERT_TRUE(copy);
// Also copy the payload for user messages.
if (event->type() == Event::Type::kUserMessage) {
UserMessageEvent* message_event =
static_cast<UserMessageEvent*>(event.get());
UserMessageEvent* message_copy =
static_cast<UserMessageEvent*>(copy.get());
message_copy->AttachMessage(std::make_unique<TestMessage>(
message_event->GetMessage<TestMessage>()->payload()));
}
it->second->EnqueueEvent(std::move(event)); it->second->EnqueueEvent(std::move(event));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment