1package salt
2
3import (
4	"context"
5	"crypto/sha1"
6	"crypto/sha256"
7	"testing"
8
9	uuid "github.com/hashicorp/go-uuid"
10	"github.com/hashicorp/vault/sdk/logical"
11)
12
13func TestSalt(t *testing.T) {
14	inm := &logical.InmemStorage{}
15	conf := &Config{}
16
17	salt, err := NewSalt(context.Background(), inm, conf)
18	if err != nil {
19		t.Fatalf("err: %v", err)
20	}
21
22	if !salt.DidGenerate() {
23		t.Fatalf("expected generation")
24	}
25
26	// Verify the salt exists
27	out, err := inm.Get(context.Background(), DefaultLocation)
28	if err != nil {
29		t.Fatalf("err: %v", err)
30	}
31	if out == nil {
32		t.Fatalf("missing salt")
33	}
34
35	// Create a new salt, should restore
36	salt2, err := NewSalt(context.Background(), inm, conf)
37	if err != nil {
38		t.Fatalf("err: %v", err)
39	}
40
41	if salt2.DidGenerate() {
42		t.Fatalf("unexpected generation")
43	}
44
45	// Check for a match
46	if salt.salt != salt2.salt {
47		t.Fatalf("salt mismatch: %s %s", salt.salt, salt2.salt)
48	}
49
50	// Verify a match
51	id := "foobarbaz"
52	sid1 := salt.SaltID(id)
53	sid2 := salt2.SaltID(id)
54
55	if sid1 != sid2 {
56		t.Fatalf("mismatch")
57	}
58}
59
60func TestSaltID(t *testing.T) {
61	salt, err := uuid.GenerateUUID()
62	if err != nil {
63		t.Fatal(err)
64	}
65	id := "foobarbaz"
66
67	sid1 := SaltID(salt, id, SHA1Hash)
68	sid2 := SaltID(salt, id, SHA1Hash)
69
70	if len(sid1) != sha1.Size*2 {
71		t.Fatalf("Bad len: %d %s", len(sid1), sid1)
72	}
73
74	if sid1 != sid2 {
75		t.Fatalf("mismatch")
76	}
77
78	sid1 = SaltID(salt, id, SHA256Hash)
79	sid2 = SaltID(salt, id, SHA256Hash)
80
81	if len(sid1) != sha256.Size*2 {
82		t.Fatalf("Bad len: %d", len(sid1))
83	}
84
85	if sid1 != sid2 {
86		t.Fatalf("mismatch")
87	}
88}
89