blob: f106505fb3698aece002c25507d9ec91a4a08217 [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "arc/vm/vsock_proxy/vsock_stream.h"
#include <tuple>
#include <utility>
#include <base/files/scoped_file.h>
#include <gtest/gtest.h>
#include <google/protobuf/util/message_differencer.h>
#include "arc/vm/vsock_proxy/file_descriptor_util.h"
#include "arc/vm/vsock_proxy/message.pb.h"
namespace arc {
namespace {
TEST(VSockStreamTest, ReadWrite) {
auto sockpair = CreateSocketPair();
ASSERT_TRUE(sockpair.has_value());
base::ScopedFD fd1;
base::ScopedFD fd2;
std::tie(fd1, fd2) = std::move(sockpair).value();
arc_proxy::VSockMessage message;
message.mutable_data()->set_handle(10);
message.mutable_data()->set_blob("abcde");
{
VSockStream stream(std::move(fd1));
ASSERT_TRUE(stream.Write(message));
}
arc_proxy::VSockMessage read_message;
ASSERT_TRUE(VSockStream(std::move(fd2)).Read(&read_message));
EXPECT_TRUE(
google::protobuf::util::MessageDifferencer::Equals(message, read_message))
<< "expect: " << message.DebugString()
<< ", actual: " << read_message.DebugString();
}
} // namespace
} // namespace arc