216 lines
9.2 KiB
C++
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
|