| package agent |
|
|
| import ( |
| "encoding/json" |
| "fmt" |
| "strings" |
| "time" |
|
|
| "testing" |
|
|
| "github.com/stretchr/testify/assert" |
| ) |
|
|
| |
| func TestLargeDataSend(t *testing.T) { |
| |
| agent := NewAgent(AgentConfig{ |
| ServerURL: "ws://xx/api/v1/agents/ws", |
| Info: AgentInfo{ |
| ID: "test-large-data", |
| HostName: "test-host", |
| IP: "127.0.0.1", |
| Version: "0.1", |
| Metadata: "", |
| }, |
| }) |
| err := agent.connect() |
| assert.NoError(t, err) |
| |
| go agent.handleSend() |
| go agent.handleReceive() |
|
|
| |
| largeContent := generateLargeContent(1024 * 1024) |
|
|
| |
| largeResult := map[string]interface{}{ |
| "type": "large_data_test", |
| "timestamp": time.Now().Unix(), |
| "data_size": len(largeContent), |
| "content": largeContent, |
| "description": "测试发送大字节数据的能力", |
| "metadata": map[string]interface{}{ |
| "compression": false, |
| "encoding": "utf-8", |
| "chunks": 1, |
| }, |
| } |
|
|
| |
| jsonData, err := json.Marshal(largeResult) |
| assert.NoError(t, err, "大数据JSON序列化应该成功") |
|
|
| dataSize := len(jsonData) |
| t.Logf("生成的JSON数据大小: %d bytes (%.2f MB)", dataSize, float64(dataSize)/(1024*1024)) |
|
|
| |
| sessionId := "test-session-large-data" |
|
|
| |
| err = agent.SendTaskResult(sessionId, largeResult) |
| assert.NoError(t, err, "发送大数据任务结果应该成功") |
|
|
| |
| time.Sleep(5 * time.Second) |
|
|
| t.Log("大字节数据发送测试完成") |
| } |
|
|
| |
| func generateLargeContent(size int) string { |
| |
| template := "这是一段测试数据,用于验证大字节数据的传输能力。包含中文字符以测试编码处理。Data chunk %d. " |
|
|
| var builder strings.Builder |
| builder.Grow(size) |
|
|
| chunkCount := 0 |
| for builder.Len() < size { |
| chunk := fmt.Sprintf(template, chunkCount) |
| if builder.Len()+len(chunk) > size { |
| |
| remaining := size - builder.Len() |
| builder.WriteString(chunk[:remaining]) |
| break |
| } |
| builder.WriteString(chunk) |
| chunkCount++ |
| } |
|
|
| return builder.String() |
| } |
|
|