You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
package response
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFrameHeader(t *testing.T) {
|
|
header := NewFrameHeader()
|
|
|
|
// 测试Set和Get
|
|
header.Set("key1", "value1")
|
|
val := header.Get("key1")
|
|
assert.Equal(t, "value1", val, "Expected value1")
|
|
|
|
// 测试不存在的key
|
|
val = header.Get("nonexistent")
|
|
assert.Nil(t, val, "Expected nil for nonexistent key")
|
|
}
|
|
|
|
func TestFrameHeaderConcurrent(t *testing.T) {
|
|
header := NewFrameHeader()
|
|
|
|
// 并发Set和Get
|
|
done := make(chan bool, 100)
|
|
for i := 0; i < 100; i++ {
|
|
go func(id int) {
|
|
key := string(rune(id))
|
|
header.Set(key, id)
|
|
val := header.Get(key)
|
|
assert.Equal(t, id, val)
|
|
done <- true
|
|
}(i)
|
|
}
|
|
|
|
// 等待所有goroutine完成
|
|
for i := 0; i < 100; i++ {
|
|
<-done
|
|
}
|
|
}
|
|
|
|
func TestFrameHeaderEncodeDecode(t *testing.T) {
|
|
header1 := NewFrameHeader()
|
|
header1.Set("key1", "value1")
|
|
header1.Set("key2", 42)
|
|
header1.Set("key3", true)
|
|
|
|
// 测试Encode
|
|
encoded, err := header1.Encode()
|
|
assert.NoError(t, err, "Encode should not return error")
|
|
assert.NotNil(t, encoded, "Encoded data should not be nil")
|
|
assert.Greater(t, len(encoded), 0, "Encoded data should not be empty")
|
|
|
|
// 测试Decode
|
|
header2 := NewFrameHeader()
|
|
err = header2.Decode(encoded)
|
|
assert.NoError(t, err, "Decode should not return error")
|
|
|
|
// 验证解码后的数据
|
|
assert.Equal(t, "value1", header2.Get("key1"), "Decoded key1 should match")
|
|
assert.Equal(t, float64(42), header2.Get("key2"), "Decoded key2 should match (JSON numbers are float64)")
|
|
assert.Equal(t, true, header2.Get("key3"), "Decoded key3 should match")
|
|
|
|
// 测试空header编码
|
|
emptyHeader := NewFrameHeader()
|
|
emptyEncoded, err := emptyHeader.Encode()
|
|
assert.NoError(t, err, "Encode empty header should not return error")
|
|
assert.Equal(t, []byte("{}"), emptyEncoded, "Empty header should encode to {}")
|
|
|
|
// 测试空数据解码
|
|
emptyHeader2 := NewFrameHeader()
|
|
err = emptyHeader2.Decode([]byte("{}"))
|
|
assert.NoError(t, err, "Decode empty JSON should not return error")
|
|
}
|
|
|