blob: 2e77e19a5753dd1fdf03588d2292558839bf8e63 [file] [log] [blame]
// Copyright 2021 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 "src/devices/bin/driver_runtime/runtime_test_case.h"
// static
void RuntimeTestCase::SignalOnChannelReadable(fdf_handle_t ch, fdf_dispatcher_t* dispatcher,
sync_completion_t* completion) {
auto channel_read = std::make_unique<fdf::ChannelRead>(
ch, 0 /* options */,
[completion](fdf_dispatcher_t* dispatcher, fdf::ChannelRead* channel_read,
fdf_status_t status) {
sync_completion_signal(completion);
delete channel_read;
});
ASSERT_OK(channel_read->Begin(dispatcher));
channel_read.release(); // Will be deleted on callback.
}
// static
void RuntimeTestCase::WaitUntilReadReady(fdf_handle_t ch, fdf_dispatcher_t* dispatcher) {
sync_completion_t read_completion;
ASSERT_NO_FATAL_FAILURE(SignalOnChannelReadable(ch, dispatcher, &read_completion));
sync_completion_wait(&read_completion, ZX_TIME_INFINITE);
}
// static
void RuntimeTestCase::AssertRead(fdf_handle_t ch, void* want_data, size_t want_num_bytes,
zx_handle_t* want_handles, uint32_t want_num_handles,
fdf_arena_t** out_arena) {
fdf_arena_t* arena;
void* read_data;
uint32_t num_bytes;
zx_handle_t* handles;
uint32_t num_handles;
ASSERT_EQ(ZX_OK, fdf_channel_read(ch, 0, &arena, &read_data, &num_bytes, &handles, &num_handles));
ASSERT_EQ(num_bytes, want_num_bytes);
if (want_num_bytes > 0) {
ASSERT_NOT_NULL(arena);
ASSERT_TRUE(fdf_arena_contains(arena, read_data, num_bytes));
ASSERT_EQ(0, memcmp(want_data, read_data, want_num_bytes));
}
ASSERT_EQ(num_handles, want_num_handles);
if (want_num_handles > 0) {
ASSERT_NOT_NULL(arena);
ASSERT_TRUE(fdf_arena_contains(arena, handles, num_handles * sizeof(fdf_handle_t)));
ASSERT_EQ(0, memcmp(want_handles, handles, want_num_handles * sizeof(fdf_handle_t)));
}
if (arena) {
if (out_arena) {
*out_arena = arena;
} else {
fdf_arena_destroy(arena);
}
} else {
ASSERT_NULL(read_data);
ASSERT_NULL(handles);
}
}