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

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")
}