blob: 94b3ab806a191ebfa048f9c45ee29908dd116863 [file] [log] [blame]
// Copyright 2023 The Fuchsia 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 <zxtest/zxtest.h>
#include "src/devices/misc/drivers/virtio-socket/socket.h"
class ConnectionTest : public zxtest::Test {
void SetUp() override {
zx::socket rx;
ASSERT_OK(zx::socket::create(ZX_SOCKET_DATAGRAM, &rx, &tx_));
connection_.emplace(
key_, std::move(rx),
[](zx_status_t, const zx_packet_signal_t*, fbl::RefPtr<virtio::SocketDevice::Connection>) {
},
0, lock_);
}
public:
fuchsia_hardware_vsock::wire::Addr addr_;
virtio::SocketDevice::ConnectionKey key_{addr_};
fbl::Mutex lock_;
zx::socket tx_;
std::optional<virtio::SocketDevice::Connection> connection_;
};
TEST_F(ConnectionTest, EmptyCredits) {
virtio::SocketDevice::CreditInfo info = connection_->GetCreditInfo();
ASSERT_EQ(info.fwd_count, 0);
}
TEST_F(ConnectionTest, WaitingCredits) {
uint8_t data[] = {1, 2, 3};
ASSERT_TRUE(connection_->Rx(data, sizeof(data)));
virtio::SocketDevice::CreditInfo info = connection_->GetCreditInfo();
ASSERT_EQ(info.fwd_count, 0);
}
TEST_F(ConnectionTest, ReadCredits) {
uint8_t data[] = {1, 2, 3};
ASSERT_TRUE(connection_->Rx(data, sizeof(data)));
ASSERT_OK(tx_.read(0, data, sizeof(data), nullptr));
virtio::SocketDevice::CreditInfo info = connection_->GetCreditInfo();
ASSERT_EQ(info.fwd_count, sizeof(data));
}