blob: b3a78a8cd57354f161ad90e9013fef96197c84ba [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package message
import (
"bytes"
"reflect"
"testing"
"v.io/v23/context"
"v.io/v23/rpc/version"
)
func TestVarInt(t *testing.T) {
cases := []uint64{
0x00, 0x01,
0x7f, 0x80,
0xff, 0x100,
0xffff, 0x10000,
0xffffff, 0x1000000,
0xffffffff, 0x100000000,
0xffffffffff, 0x10000000000,
0xffffffffffff, 0x1000000000000,
0xffffffffffffff, 0x100000000000000,
0xffffffffffffffff,
}
ctx, cancel := context.RootContext()
defer cancel()
for _, want := range cases {
got, b, valid := readVarUint64(ctx, writeVarUint64(want, []byte{}))
if !valid {
t.Fatalf("error reading %x", want)
}
if len(b) != 0 {
t.Errorf("unexpected buffer remaining for %x: %v", want, b)
}
if got != want {
t.Errorf("got: %d want: %d", got, want)
}
}
}
func TestUninterpretedSetupOpts(t *testing.T) {
ctx, cancel := context.RootContext()
defer cancel()
ma := &Setup{Versions: version.RPCVersionRange{Min: 3, Max: 5},
PeerNaClPublicKey: &[32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31},
}
mb := &Setup{Versions: version.RPCVersionRange{Min: 3, Max: 5},
PeerNaClPublicKey: &[32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31},
uninterpretedOptions: []option{{opt: 7777, payload: []byte("wat")}},
}
encma, err := Append(ctx, ma, nil)
if err != nil {
t.Fatal(err)
}
encmb, err := Append(ctx, mb, nil)
if err != nil {
t.Fatal(err)
}
if bytes.Equal(encma, encmb) {
t.Errorf("uninterpreted opts were not encoded")
}
mc, err := Read(ctx, encmb)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(mc, mb) {
t.Errorf("uninterpreted options were no decoded correctly, got %v, want %v", mc, mb)
}
}