OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / tendermint / go-crypto / keys / storage / filestorage / main_test.go
1 package filestorage
2
3 import (
4         "io/ioutil"
5         "os"
6         "path"
7         "testing"
8
9         "github.com/stretchr/testify/assert"
10         "github.com/stretchr/testify/require"
11         crypto "github.com/tendermint/go-crypto"
12         keys "github.com/tendermint/go-crypto/keys"
13 )
14
15 func TestBasicCRUD(t *testing.T) {
16         assert, require := assert.New(t), require.New(t)
17
18         dir, err := ioutil.TempDir("", "filestorage-test")
19         assert.Nil(err)
20         defer os.RemoveAll(dir)
21         store := New(dir)
22
23         name := "bar"
24         key := []byte("secret-key-here")
25         pubkey := crypto.GenPrivKeyEd25519().PubKey()
26         info := keys.Info{
27                 Name:   name,
28                 PubKey: pubkey.Wrap(),
29         }
30
31         // No data: Get and Delete return nothing
32         _, _, err = store.Get(name)
33         assert.NotNil(err)
34         err = store.Delete(name)
35         assert.NotNil(err)
36         // List returns empty list
37         l, err := store.List()
38         assert.Nil(err)
39         assert.Empty(l)
40
41         // Putting the key in the  store must work
42         err = store.Put(name, key, info)
43         assert.Nil(err)
44         // But a second time is a failure
45         err = store.Put(name, key, info)
46         assert.NotNil(err)
47
48         // Now, we can get and list properly
49         k, i, err := store.Get(name)
50         require.Nil(err, "%+v", err)
51         assert.Equal(key, k)
52         assert.Equal(info.Name, i.Name)
53         assert.Equal(info.PubKey, i.PubKey)
54         assert.NotEmpty(i.Address)
55         l, err = store.List()
56         require.Nil(err, "%+v", err)
57         assert.Equal(1, len(l))
58         assert.Equal(i, l[0])
59
60         // querying a non-existent key fails
61         _, _, err = store.Get("badname")
62         assert.NotNil(err)
63
64         // We can only delete once
65         err = store.Delete(name)
66         assert.Nil(err)
67         err = store.Delete(name)
68         assert.NotNil(err)
69
70         // and then Get and List don't work
71         _, _, err = store.Get(name)
72         assert.NotNil(err)
73         // List returns empty list
74         l, err = store.List()
75         assert.Nil(err)
76         assert.Empty(l)
77 }
78
79 func TestDirectoryHandling(t *testing.T) {
80         assert, require := assert.New(t), require.New(t)
81
82         // prepare a temp dir and make sure it is not there
83         newDir := path.Join(os.TempDir(), "file-test-dir")
84         _, err := os.Open(newDir)
85         assert.True(os.IsNotExist(err))
86         defer os.RemoveAll(newDir)
87
88         // now, check with two levels deep....
89         parentDir := path.Join(os.TempDir(), "missing-dir")
90         nestedDir := path.Join(parentDir, "lots", "of", "levels", "here")
91         _, err = os.Open(parentDir)
92         assert.True(os.IsNotExist(err))
93         defer os.RemoveAll(parentDir)
94
95         // create a new storage, and verify it creates the directory with good permissions
96         for _, dir := range []string{newDir, nestedDir, newDir} {
97                 New(dir)
98                 d, err := os.Open(dir)
99                 require.Nil(err)
100                 defer d.Close()
101
102                 stat, err := d.Stat()
103                 require.Nil(err)
104                 assert.Equal(dirPerm, stat.Mode()&os.ModePerm)
105         }
106 }