1// Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com>
2// All rights reserved.
3//
4// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6
7package leveldb
8
9import (
10	"bytes"
11	"testing"
12)
13
14func decodeEncode(v *sessionRecord) (res bool, err error) {
15	b := new(bytes.Buffer)
16	err = v.encode(b)
17	if err != nil {
18		return
19	}
20	v2 := &sessionRecord{}
21	err = v.decode(b)
22	if err != nil {
23		return
24	}
25	b2 := new(bytes.Buffer)
26	err = v2.encode(b2)
27	if err != nil {
28		return
29	}
30	return bytes.Equal(b.Bytes(), b2.Bytes()), nil
31}
32
33func TestSessionRecord_EncodeDecode(t *testing.T) {
34	big := int64(1) << 50
35	v := &sessionRecord{}
36	i := int64(0)
37	test := func() {
38		res, err := decodeEncode(v)
39		if err != nil {
40			t.Fatalf("error when testing encode/decode sessionRecord: %v", err)
41		}
42		if !res {
43			t.Error("encode/decode test failed at iteration:", i)
44		}
45	}
46
47	for ; i < 4; i++ {
48		test()
49		v.addTable(3, big+300+i, big+400+i,
50			makeInternalKey(nil, []byte("foo"), uint64(big+500+1), keyTypeVal),
51			makeInternalKey(nil, []byte("zoo"), uint64(big+600+1), keyTypeDel))
52		v.delTable(4, big+700+i)
53		v.addCompPtr(int(i), makeInternalKey(nil, []byte("x"), uint64(big+900+1), keyTypeVal))
54	}
55
56	v.setComparer("foo")
57	v.setJournalNum(big + 100)
58	v.setPrevJournalNum(big + 99)
59	v.setNextFileNum(big + 200)
60	v.setSeqNum(uint64(big + 1000))
61	test()
62}
63