aboutsummaryrefslogtreecommitdiff
path: root/cmd/bolt/import_test.go
blob: 263f561304b103aaa94679a39c7b74acba583faf (plain) (blame)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main_test

import (
	"io/ioutil"
	"testing"

	"github.com/boltdb/bolt"
	. "github.com/boltdb/bolt/cmd/bolt"
	"github.com/stretchr/testify/assert"
)

// Ensure that a database can be imported.
func TestImport(t *testing.T) {
	SetTestMode(true)

	// Write input file.
	input := tempfile()
	assert.NoError(t, ioutil.WriteFile(input, []byte(`[{"type":"bucket","key":"ZW1wdHk=","value":[]},{"type":"bucket","key":"d2lkZ2V0cw==","value":[{"key":"YmFy","value":""},{"key":"Zm9v","value":"MDAwMA=="}]},{"type":"bucket","key":"d29vaml0cw==","value":[{"key":"YmF6","value":"WFhYWA=="},{"type":"bucket","key":"d29vaml0cy9zdWJidWNrZXQ=","value":[{"key":"YmF0","value":"QQ=="}]}]}]`), 0600))

	// Import database.
	path := tempfile()
	output := run("import", path, "--input", input)
	assert.Equal(t, ``, output)

	// Open database and verify contents.
	db, err := bolt.Open(path, 0600)
	assert.NoError(t, err)
	db.View(func(tx *bolt.Tx) error {
		assert.NotNil(t, tx.Bucket([]byte("empty")))

		b := tx.Bucket([]byte("widgets"))
		if assert.NotNil(t, b) {
			assert.Equal(t, []byte("0000"), b.Get([]byte("foo")))
			assert.Equal(t, []byte(""), b.Get([]byte("bar")))
		}

		b = tx.Bucket([]byte("woojits"))
		if assert.NotNil(t, b) {
			assert.Equal(t, []byte("XXXX"), b.Get([]byte("baz")))

			b = b.Bucket([]byte("woojits/subbucket"))
			assert.Equal(t, []byte("A"), b.Get([]byte("bat")))
		}

		return nil
	})
	db.Close()
}

// Ensure that an error is reported if the database is not found.
func TestImport_NotFound(t *testing.T) {
	SetTestMode(true)
	output := run("import", "path/to/db", "--input", "no/such/file")
	assert.Equal(t, "open no/such/file: no such file or directory", output)
}