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