Files
esengine/packages/network/tests/TsrpcTransport.test.ts

145 lines
4.6 KiB
TypeScript
Raw Normal View History

/**
* TSRPC传输层测试
*/
import 'reflect-metadata';
import { TsrpcTransport } from '../src/transport/TsrpcTransport';
import { NetworkConfig } from '../src/types/NetworkTypes';
// 简化测试,只验证基本功能
describe('TSRPC传输层测试', () => {
let serverTransport: TsrpcTransport;
let clientTransport: TsrpcTransport;
const serverConfig: NetworkConfig = {
port: 18888, // 使用不同端口避免冲突
host: 'localhost',
syncRate: 20
};
const clientConfig: NetworkConfig = {
port: 18888,
host: 'localhost'
};
beforeEach(() => {
serverTransport = new TsrpcTransport(serverConfig);
clientTransport = new TsrpcTransport(clientConfig);
});
afterEach(async () => {
if (serverTransport) {
await serverTransport.disconnect();
}
if (clientTransport) {
await clientTransport.disconnect();
}
});
describe('传输层创建', () => {
test('创建服务端传输层', () => {
expect(serverTransport).toBeDefined();
expect(serverTransport.getNetworkSide()).toBe('client'); // 默认为客户端
expect(serverTransport.isConnected()).toBe(false);
});
test('创建客户端传输层', () => {
expect(clientTransport).toBeDefined();
expect(clientTransport.getNetworkSide()).toBe('client');
expect(clientTransport.isConnected()).toBe(false);
});
});
describe('事件处理器设置', () => {
test('设置事件处理器', () => {
let connectedCalled = false;
let disconnectedCalled = false;
serverTransport.setEventHandlers({
onConnected: () => {
connectedCalled = true;
},
onDisconnected: () => {
disconnectedCalled = true;
}
});
// 验证事件处理器被正确设置
expect(connectedCalled).toBe(false);
expect(disconnectedCalled).toBe(false);
});
test('单独设置事件处理器', () => {
let errorCalled = false;
serverTransport.on('onError', (error) => {
errorCalled = true;
});
expect(errorCalled).toBe(false);
});
});
describe('基本功能验证', () => {
test('获取统计信息', () => {
const stats = serverTransport.getStats();
expect(stats).toHaveProperty('messagesSent');
expect(stats).toHaveProperty('messagesReceived');
expect(stats).toHaveProperty('bytesSent');
expect(stats).toHaveProperty('bytesReceived');
expect(stats).toHaveProperty('clientCount');
expect(stats).toHaveProperty('uptime');
// 初始值应该为0
expect(stats.messagesSent).toBe(0);
expect(stats.messagesReceived).toBe(0);
expect(stats.clientCount).toBe(0);
});
test('客户端模式方法调用异常处理', async () => {
// 客户端模式下调用服务端方法应该抛出错误
await expect(serverTransport.getServerStatus()).rejects.toThrow('只能在客户端模式下查询服务端状态');
await expect(serverTransport.ping()).rejects.toThrow('只能在客户端模式下发送心跳');
});
test('未初始化时发送消息异常处理', async () => {
const testMessage = {
type: 'test',
networkId: 1,
data: { test: 'data' },
timestamp: Date.now()
};
// 未连接时发送消息应该抛出错误
await expect(serverTransport.sendMessage(testMessage)).rejects.toThrow('传输层未初始化或状态错误');
await expect(serverTransport.sendSyncVar(1, 'TestComponent', 'testProp', 'testValue')).rejects.toThrow('传输层未初始化或状态错误');
await expect(serverTransport.sendRpcCall(1, 'TestComponent', 'testMethod', [], true)).rejects.toThrow('传输层未初始化或状态错误');
});
});
describe('网络配置', () => {
test('获取正确的网络端类型', async () => {
// 测试服务端模式
const config: NetworkConfig = {
port: 18889,
host: 'localhost'
};
const transport = new TsrpcTransport(config);
expect(transport.getNetworkSide()).toBe('client'); // 创建时默认为客户端
await transport.disconnect();
});
test('获取客户端ID和连接信息', () => {
expect(serverTransport.getClientId()).toBe(0); // 未连接时为0
expect(serverTransport.getConnectedClients()).toEqual([]); // 客户端模式返回空数组
expect(serverTransport.getClientCount()).toBe(0); // 客户端模式返回0
});
});
// 注意:由于在测试环境中启动真实的网络服务可能很复杂,
// 这里主要测试API的正确性和错误处理
// 真正的端到端网络测试需要在集成测试中进行
});