arnaucube
arnaucube/arboPublic Self-hosted repository
arbo/helpers_test.go
helpers_test.goRaw
  1package arbo
  2
  3import (
  4	"bytes"
  5	"io"
  6	"io/ioutil"
  7	"os"
  8	"testing"
  9	"time"
 10
 11	qt "github.com/frankban/quicktest"
 12	"go.vocdoni.io/dvote/db/badgerdb"
 13)
 14
 15func checkRoots(c *qt.C, tree1, tree2 *Tree) {
 16	if !bytes.Equal(tree2.Root(), tree1.Root()) {
 17		dir := "err-dump"
 18		if _, err := os.Stat(dir); os.IsNotExist(err) {
 19			err := os.Mkdir(dir, os.ModePerm)
 20			c.Assert(err, qt.IsNil)
 21		}
 22		// store tree1
 23		storeTree(c, tree1, dir+"/tree1")
 24
 25		// store tree2
 26		storeTree(c, tree2, dir+"/tree2")
 27
 28		c.Check(tree2.Root(), qt.DeepEquals, tree1.Root())
 29	}
 30}
 31
 32func storeTree(c *qt.C, tree *Tree, path string) {
 33	dump, err := tree.Dump(nil)
 34	c.Assert(err, qt.IsNil)
 35	err = ioutil.WriteFile(path+"-"+time.Now().String()+".debug", dump, 0600)
 36	c.Assert(err, qt.IsNil)
 37}
 38
 39// nolint:unused
 40func readTree(c *qt.C, tree *Tree, path string) {
 41	b, err := ioutil.ReadFile(path) //nolint:gosec
 42	c.Assert(err, qt.IsNil)
 43	err = tree.ImportDump(b)
 44	c.Assert(err, qt.IsNil)
 45}
 46
 47// nolint:unused
 48func importDumpLoopAdd(tree *Tree, b []byte) error {
 49	r := bytes.NewReader(b)
 50	var err error
 51	for {
 52		l := make([]byte, 2)
 53		_, err = io.ReadFull(r, l)
 54		if err == io.EOF {
 55			break
 56		} else if err != nil {
 57			return err
 58		}
 59		k := make([]byte, l[0])
 60		_, err = io.ReadFull(r, k)
 61		if err != nil {
 62			return err
 63		}
 64		v := make([]byte, l[1])
 65		_, err = io.ReadFull(r, v)
 66		if err != nil {
 67			return err
 68		}
 69		err = tree.Add(k, v)
 70		if err != nil {
 71			return err
 72		}
 73	}
 74	return nil
 75}
 76
 77func TestReadTreeDBG(t *testing.T) {
 78	t.Skip() // test just for debugging purposes, disabled by default
 79
 80	c := qt.New(t)
 81
 82	database1, err := badgerdb.New(badgerdb.Options{Path: c.TempDir()})
 83	c.Assert(err, qt.IsNil)
 84	tree1, err := NewTree(database1, 100, HashFunctionBlake2b)
 85	c.Assert(err, qt.IsNil)
 86
 87	database2, err := badgerdb.New(badgerdb.Options{Path: c.TempDir()})
 88	c.Assert(err, qt.IsNil)
 89	tree2, err := NewTree(database2, 100, HashFunctionBlake2b)
 90	c.Assert(err, qt.IsNil)
 91
 92	// tree1 is generated by a loop of .Add
 93	path := "err-dump/tree1-2021-06-03 16:45:54.104449306 +0200 CEST m=+0.073874545.debug"
 94	b, err := ioutil.ReadFile(path)
 95	c.Assert(err, qt.IsNil)
 96	err = importDumpLoopAdd(tree1, b)
 97	c.Assert(err, qt.IsNil)
 98
 99	// tree2 is generated by .AddBatch
100	path = "err-dump/tree2-2021-06-03 16:45:54.104525519 +0200 CEST m=+0.073950756.debug"
101	readTree(c, tree2, path)
102
103	// tree1.PrintGraphvizFirstNLevels(nil, 6)
104	// tree2.PrintGraphvizFirstNLevels(nil, 6)
105
106	c.Check(tree2.Root(), qt.DeepEquals, tree1.Root())
107}