blob: 43df7a47200c1c0d2ee1dadb69131342a7eecf6b [file] [log] [blame]
// Copyright 2022 The Chromium 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 "test/mock_driver.h"
#include "third_party/abseil-cpp/absl/base/macros.h"
namespace ipcz::test {
namespace {
MockDriver*& GetDriverPtr() {
static MockDriver* driver = nullptr;
return driver;
}
MockDriver& GetDriver() {
MockDriver*& ptr = GetDriverPtr();
ABSL_ASSERT(ptr != nullptr);
return *ptr;
}
IpczResult IPCZ_API Close(IpczDriverHandle handle,
uint32_t flags,
const void* options) {
return GetDriver().Close(handle, flags, options);
}
IpczResult IPCZ_API Serialize(IpczDriverHandle handle,
IpczDriverHandle transport,
uint32_t flags,
const void* options,
void* data,
size_t* num_bytes,
IpczDriverHandle* handles,
size_t* num_handles) {
return GetDriver().Serialize(handle, transport, flags, options, data,
num_bytes, handles, num_handles);
}
IpczResult IPCZ_API Deserialize(const void* data,
size_t num_bytes,
const IpczDriverHandle* handles,
size_t num_handles,
IpczDriverHandle transport,
uint32_t flags,
const void* options,
IpczDriverHandle* driver_handle) {
return GetDriver().Deserialize(data, num_bytes, handles, num_handles,
transport, flags, options, driver_handle);
}
IpczResult IPCZ_API CreateTransports(IpczDriverHandle transport0,
IpczDriverHandle transport1,
uint32_t flags,
const void* options,
IpczDriverHandle* new_transport0,
IpczDriverHandle* new_transport1) {
return GetDriver().CreateTransports(transport0, transport1, flags, options,
new_transport0, new_transport1);
}
IpczResult IPCZ_API ActivateTransport(IpczDriverHandle driver_transport,
IpczHandle transport,
IpczTransportActivityHandler handler,
uint32_t flags,
const void* options) {
return GetDriver().ActivateTransport(driver_transport, transport, handler,
flags, options);
}
IpczResult IPCZ_API DeactivateTransport(IpczDriverHandle driver_transport,
uint32_t flags,
const void* options) {
return GetDriver().DeactivateTransport(driver_transport, flags, options);
}
IpczResult IPCZ_API Transmit(IpczDriverHandle driver_transport,
const void* data,
size_t num_bytes,
const IpczDriverHandle* handles,
size_t num_handles,
uint32_t flags,
const void* options) {
return GetDriver().Transmit(driver_transport, data, num_bytes, handles,
num_handles, flags, options);
}
IpczResult IPCZ_API AllocateSharedMemory(size_t num_bytes,
uint32_t flags,
const void* options,
IpczDriverHandle* driver_memory) {
return GetDriver().AllocateSharedMemory(num_bytes, flags, options,
driver_memory);
}
IpczResult GetSharedMemoryInfo(IpczDriverHandle driver_memory,
uint32_t flags,
const void* options,
IpczSharedMemoryInfo* info) {
return GetDriver().GetSharedMemoryInfo(driver_memory, flags, options, info);
}
IpczResult IPCZ_API DuplicateSharedMemory(IpczDriverHandle driver_memory,
uint32_t flags,
const void* options,
IpczDriverHandle* new_driver_memory) {
return GetDriver().DuplicateSharedMemory(driver_memory, flags, options,
new_driver_memory);
}
IpczResult IPCZ_API MapSharedMemory(IpczDriverHandle driver_memory,
uint32_t flags,
const void* options,
void** address,
IpczDriverHandle* driver_mapping) {
return GetDriver().MapSharedMemory(driver_memory, flags, options, address,
driver_mapping);
}
IpczResult IPCZ_API GenerateRandomBytes(size_t num_bytes,
uint32_t flags,
const void* options,
void* buffer) {
return GetDriver().GenerateRandomBytes(num_bytes, flags, options, buffer);
}
} // namespace
MockDriver::MockDriver() {
MockDriver*& ptr = GetDriverPtr();
ABSL_ASSERT(ptr == nullptr);
ptr = this;
}
MockDriver::~MockDriver() {
MockDriver*& ptr = GetDriverPtr();
ABSL_ASSERT(ptr == this);
ptr = nullptr;
}
const IpczDriver kMockDriver = {
sizeof(kMockDriver),
Close,
Serialize,
Deserialize,
CreateTransports,
ActivateTransport,
DeactivateTransport,
Transmit,
AllocateSharedMemory,
GetSharedMemoryInfo,
DuplicateSharedMemory,
MapSharedMemory,
GenerateRandomBytes,
};
} // namespace ipcz::test