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	"github.com/syndtr/goleveldb/leveldb/opt"
14)
15
16func decodeEncode(v *sessionRecord) (res bool, err error) {
17	b := new(bytes.Buffer)
18	err = v.encode(b)
19	if err != nil {
20		return
21	}
22	v2 := &sessionRecord{}
23	err = v.decode(b, opt.DefaultNumLevel)
24	if err != nil {
25		return
26	}
27	b2 := new(bytes.Buffer)
28	err = v2.encode(b2)
29	if err != nil {
30		return
31	}
32	return bytes.Equal(b.Bytes(), b2.Bytes()), nil
33}
34
35func TestSessionRecord_EncodeDecode(t *testing.T) {
36	big := uint64(1) << 50
37	v := &sessionRecord{}
38	i := uint64(0)
39	test := func() {
40		res, err := decodeEncode(v)
41		if err != nil {
42			t.Fatalf("error when testing encode/decode sessionRecord: %v", err)
43		}
44		if !res {
45			t.Error("encode/decode test failed at iteration:", i)
46		}
47	}
48
49	for ; i < 4; i++ {
50		test()
51		v.addTable(3, big+300+i, big+400+i,
52			newIkey([]byte("foo"), big+500+1, ktVal),
53			newIkey([]byte("zoo"), big+600+1, ktDel))
54		v.delTable(4, big+700+i)
55		v.addCompPtr(int(i), newIkey([]byte("x"), big+900+1, ktVal))
56	}
57
58	v.setComparer("foo")
59	v.setJournalNum(big + 100)
60	v.setPrevJournalNum(big + 99)
61	v.setNextFileNum(big + 200)
62	v.setSeqNum(big + 1000)
63	test()
64}
65