Files
Alicho/tests/common/mock_objects.h
2025-10-28 10:27:49 +08:00

216 lines
9.2 KiB
C++

// ================================================================================================
// Audio Backend - 测试模拟对象
// ================================================================================================
#pragma once
#include <string>
#include <vector>
#include <memory>
#include <map>
#include <functional>
#include <gmock/gmock.h>
#include "communication/communication.h"
#include "engine/audio_buffer.h"
#include "plugin_host/core/plugin_interface.h"
#include "frontend/device/device_manager.h"
#include "frontend/network/transport_layer.h"
namespace audio_backend {
namespace test {
//===================================================================================================
// 音频设备模拟器
//===================================================================================================
class MockAudioDevice : public IAudioDevice {
public:
MOCK_METHOD(bool, initialize, (), (override));
MOCK_METHOD(bool, shutdown, (), (override));
MOCK_METHOD(bool, start, (), (override));
MOCK_METHOD(bool, stop, (), (override));
MOCK_METHOD(bool, is_started, (), (const, override));
MOCK_METHOD(AudioDeviceInfo, get_device_info, (), (const, override));
MOCK_METHOD(AudioDeviceStatus, get_status, (), (const, override));
MOCK_METHOD(size_t, read, (float* buffer, size_t frames), (override));
MOCK_METHOD(size_t, write, (const float* buffer, size_t frames), (override));
MOCK_METHOD(bool, set_callback, (AudioDeviceCallback callback), (override));
MOCK_METHOD(bool, set_sample_rate, (int sample_rate), (override));
MOCK_METHOD(bool, set_buffer_size, (int buffer_size), (override));
MOCK_METHOD(int, get_sample_rate, (), (const, override));
MOCK_METHOD(int, get_buffer_size, (), (const, override));
MOCK_METHOD(int, get_latency, (), (const, override));
};
//===================================================================================================
// 网络连接模拟器
//===================================================================================================
class MockNetworkTransport : public INetworkTransport {
public:
MOCK_METHOD(bool, initialize, (const NetworkConfig& config), (override));
MOCK_METHOD(bool, shutdown, (), (override));
MOCK_METHOD(bool, is_connected, (), (const, override));
MOCK_METHOD(ConnectionResult, connect, (const std::string& endpoint), (override));
MOCK_METHOD(bool, disconnect, (), (override));
MOCK_METHOD(SendResult, send, (const NetworkPacket& packet), (override));
MOCK_METHOD(ReceiveResult, receive, (NetworkPacket& packet, int timeout_ms), (override));
MOCK_METHOD(bool, set_callback, (NetworkCallback callback), (override));
MOCK_METHOD(NetworkStats, get_statistics, (), (const, override));
MOCK_METHOD(void, simulate_packet_loss, (float percentage), (override));
MOCK_METHOD(void, simulate_latency, (int latency_ms), (override));
MOCK_METHOD(void, simulate_jitter, (int jitter_ms), (override));
};
//===================================================================================================
// 通信模块模拟器
//===================================================================================================
class MockCommunicationManager : public ICommunicationManager {
public:
MOCK_METHOD(CommError, initialize, (), (override));
MOCK_METHOD(CommError, shutdown, (), (override));
MOCK_METHOD(bool, is_initialized, (), (const, override));
MOCK_METHOD(CommError, send_message, (const IMessage& message), (override));
MOCK_METHOD(CommError, register_message_handler, (const std::string& message_type, MessageHandler handler), (override));
MOCK_METHOD(CommError, unregister_message_handler, (const std::string& message_type), (override));
MOCK_METHOD(void, add_event_listener, (std::shared_ptr<ICommunicationEventListener> listener), (override));
MOCK_METHOD(void, remove_event_listener, (std::shared_ptr<ICommunicationEventListener> listener), (override));
MOCK_METHOD(const CommunicationStatistics&, get_statistics, (), (const, override));
MOCK_METHOD(void, reset_statistics, (), (override));
MOCK_METHOD(void, print_statistics, (), (const, override));
MOCK_METHOD(void, add_route, (const MessageRoute& route), (override));
MOCK_METHOD(void, remove_route, (const std::string& message_type), (override));
MOCK_METHOD(std::vector<MessageRoute>, get_routes, (), (const, override));
MOCK_METHOD(const CommunicationConfig&, config, (), (const, override));
};
//===================================================================================================
// 插件模拟器
//===================================================================================================
class MockPlugin : public IPlugin {
public:
MOCK_METHOD(bool, initialize, (const PluginInitParams& params), (override));
MOCK_METHOD(bool, terminate, (), (override));
MOCK_METHOD(bool, activate, (), (override));
MOCK_METHOD(bool, deactivate, (), (override));
MOCK_METHOD(PluginProcessStatus, process, (const ProcessContext& context), (override));
MOCK_METHOD(PluginInfo, get_info, (), (const, override));
MOCK_METHOD(ParameterInfo, get_parameter_info, (ParameterId param_id), (const, override));
MOCK_METHOD(float, get_parameter, (ParameterId param_id), (const, override));
MOCK_METHOD(bool, set_parameter, (ParameterId param_id, float value), (override));
MOCK_METHOD(bool, handle_event, (const PluginEvent& event), (override));
MOCK_METHOD(const PluginStatistics&, get_statistics, (), (const, override));
MOCK_METHOD(void, reset_statistics, (), (override));
};
//===================================================================================================
// 插件沙盒模拟器
//===================================================================================================
class MockSandbox : public ISandbox {
public:
MOCK_METHOD(bool, initialize, (const SandboxConfig& config), (override));
MOCK_METHOD(bool, shutdown, (), (override));
MOCK_METHOD(bool, is_initialized, (), (const, override));
MOCK_METHOD(PluginLoadResult, load_plugin, (const std::string& plugin_path, PluginInstanceId instance_id), (override));
MOCK_METHOD(bool, unload_plugin, (PluginInstanceId instance_id), (override));
MOCK_METHOD(void, set_resource_limits, (const ResourceLimits& limits), (override));
MOCK_METHOD(ResourceUsage, get_resource_usage, (PluginInstanceId instance_id), (const, override));
MOCK_METHOD(bool, is_plugin_loaded, (PluginInstanceId instance_id), (const, override));
MOCK_METHOD(void, set_crash_handler, (CrashHandler handler), (override));
MOCK_METHOD(SandboxStatistics, get_statistics, (), (const, override));
MOCK_METHOD(void, simulate_plugin_crash, (PluginInstanceId instance_id), (override));
};
//===================================================================================================
// 资源限制模拟器
//===================================================================================================
class ResourceLimiter {
public:
ResourceLimiter();
~ResourceLimiter();
void set_memory_limit(size_t bytes);
void set_cpu_limit(float percentage);
void set_io_limit(size_t bytes_per_sec);
void set_network_limit(size_t bytes_per_sec);
void reset_limits();
ResourceUsage get_current_usage() const;
bool is_limit_reached(ResourceType type) const;
private:
struct Impl;
std::unique_ptr<Impl> pimpl_;
};
//===================================================================================================
// 错误注入工具
//===================================================================================================
class ErrorInjector {
public:
using ErrorCallback = std::function<void()>;
ErrorInjector();
~ErrorInjector();
// 注册错误回调
void register_error(const std::string& component, const std::string& operation, ErrorCallback callback);
// 注入错误
bool inject_error(const std::string& component, const std::string& operation);
// 随机注入错误
bool inject_random_error();
// 设置错误注入概率
void set_error_probability(float probability);
// 重置所有错误
void reset();
private:
struct Impl;
std::unique_ptr<Impl> pimpl_;
};
//===================================================================================================
// 模拟音频数据生成器
//===================================================================================================
class MockAudioGenerator {
public:
enum class SignalType {
Sine,
Square,
Triangle,
Sawtooth,
Noise,
Silence
};
MockAudioGenerator(int sample_rate = 44100, int channels = 2);
~MockAudioGenerator();
// 设置信号类型
void set_signal_type(SignalType type);
// 设置频率
void set_frequency(float frequency_hz);
// 设置振幅
void set_amplitude(float amplitude);
// 设置相位
void set_phase(float phase_radians);
// 生成音频数据
void generate(float* buffer, size_t frames);
// 重置生成器状态
void reset();
private:
struct Impl;
std::unique_ptr<Impl> pimpl_;
};
} // namespace test
} // namespace audio_backend