blob: 4e3601c9d9f8a6699a21d7481ae181ed679f966e [file] [log] [blame]
// Copyright 2019 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 "usb/request-cpp.h"
#include <unittest/unittest.h>
namespace {
using Request = usb::Request<void>;
constexpr size_t kParentReqSize = sizeof(usb_request_t);
constexpr size_t kReqSize = Request::RequestSize(kParentReqSize);
bool TrivialLifetimeTest() {
BEGIN_TEST;
usb::RequestPool pool;
END_TEST;
}
bool SingleRequestTest() {
BEGIN_TEST;
std::optional<Request> request;
ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
ZX_OK);
usb::RequestPool pool;
EXPECT_TRUE(pool.Get(kReqSize) == std::nullopt);
pool.Add(*std::move(request));
EXPECT_TRUE(pool.Get(kReqSize + 1) == std::nullopt);
EXPECT_TRUE(pool.Get(kReqSize) != std::nullopt);
EXPECT_TRUE(pool.Get(kReqSize) == std::nullopt);
END_TEST;
}
bool MultipleRequestTest() {
BEGIN_TEST;
usb::RequestPool pool;
for (size_t i = 0; i < 10; i++) {
std::optional<Request> request;
ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
ZX_OK);
pool.Add(*std::move(request));
}
for (size_t i = 0; i < 10; i++) {
EXPECT_TRUE(pool.Get(kReqSize) != std::nullopt);
}
EXPECT_TRUE(pool.Get(kReqSize) == std::nullopt);
END_TEST;
}
bool MultipleSizeTest() {
BEGIN_TEST;
usb::RequestPool pool;
for (size_t i = 0; i < 10; i++) {
const size_t size = kParentReqSize + i * 8;
std::optional<Request> request;
ASSERT_EQ(Request::Alloc(&request, 0, 0, size),
ZX_OK);
pool.Add(*std::move(request));
}
for (size_t i = 0; i < 10; i++) {
const size_t size = Request::RequestSize(kParentReqSize + i * 8);
EXPECT_TRUE(pool.Get(size) != std::nullopt);
EXPECT_TRUE(pool.Get(size) == std::nullopt);
}
END_TEST;
}
bool ReleaseTest() {
BEGIN_TEST;
usb::RequestPool pool;
for (size_t i = 0; i < 10; i++) {
std::optional<Request> request;
ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
ZX_OK);
pool.Add(*std::move(request));
}
pool.Release();
EXPECT_TRUE(pool.Get(kReqSize) == std::nullopt);
END_TEST;
}
} // namespace
BEGIN_TEST_CASE(UsbRequestPoolTests)
RUN_TEST_SMALL(TrivialLifetimeTest)
RUN_TEST_SMALL(SingleRequestTest)
RUN_TEST_SMALL(MultipleRequestTest)
RUN_TEST_SMALL(MultipleSizeTest)
RUN_TEST_SMALL(ReleaseTest)
END_TEST_CASE(UsbRequestPoolTests)