57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
package wire
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestWalkAndReplace(t *testing.T) {
|
|
original := AppendVarint(nil, 1, 42)
|
|
original = AppendString(original, 2, "old")
|
|
original = AppendBytes(original, 15, []byte{0, 1, 2})
|
|
modified, replaced, err := ReplaceBytes(original, 2, []byte("longer"))
|
|
if err != nil || !replaced {
|
|
t.Fatalf("replace: %v, %v", replaced, err)
|
|
}
|
|
v, ok, err := Varint(modified, 1)
|
|
if err != nil || !ok || v != 42 {
|
|
t.Fatalf("preserved varint: %d %v %v", v, ok, err)
|
|
}
|
|
x, ok, err := Bytes(modified, 2)
|
|
if err != nil || !ok || string(x) != "longer" {
|
|
t.Fatalf("replacement: %q %v %v", x, ok, err)
|
|
}
|
|
unknown, _, _ := Bytes(modified, 15)
|
|
if !bytes.Equal(unknown, []byte{0, 1, 2}) {
|
|
t.Fatalf("unknown field changed: %x", unknown)
|
|
}
|
|
}
|
|
|
|
func TestTruncated(t *testing.T) {
|
|
if err := Walk([]byte{0x12, 0x03, 0x01}, func(Field) error { return nil }); !errors.Is(err, ErrMalformed) {
|
|
t.Fatalf("expected malformed: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestReplaceVarintAndAppendMissing(t *testing.T) {
|
|
original := AppendVarint(nil, 1, 7)
|
|
original = AppendString(original, 2, "preserved")
|
|
modified, replaced, err := ReplaceVarint(original, 1, 300)
|
|
if err != nil || !replaced {
|
|
t.Fatalf("replace existing: replaced=%v err=%v", replaced, err)
|
|
}
|
|
value, found, err := Varint(modified, 1)
|
|
if err != nil || !found || value != 300 {
|
|
t.Fatalf("existing value=%d found=%v err=%v", value, found, err)
|
|
}
|
|
modified, replaced, err = ReplaceVarint(modified, 9, 0)
|
|
if err != nil || replaced {
|
|
t.Fatalf("append missing: replaced=%v err=%v", replaced, err)
|
|
}
|
|
value, found, err = Varint(modified, 9)
|
|
if err != nil || !found || value != 0 {
|
|
t.Fatalf("appended zero=%d found=%v err=%v", value, found, err)
|
|
}
|
|
}
|