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