From 0088a7dc0914902d9db37cbf7efa79265f8b4c3a Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Sun, 21 Jan 2018 11:37:28 -0800 Subject: [PATCH] internal/database: add cert tests --- internal/database/cert.go | 6 +-- internal/database/cert_test.go | 78 ++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 internal/database/cert_test.go diff --git a/internal/database/cert.go b/internal/database/cert.go index 5ac48e5..44d5c10 100644 --- a/internal/database/cert.go +++ b/internal/database/cert.go @@ -1,8 +1,6 @@ package database import ( - "io" - "github.com/asdine/storm" "golang.org/x/crypto/acme/autocert" "golang.org/x/net/context" @@ -14,7 +12,6 @@ import ( // to implement certificate decryption, as that will be handled in the layer // above this DAO. type Certs interface { - io.Closer autocert.Cache GetAll(ctx context.Context) ([]CachedCert, error) @@ -22,10 +19,9 @@ type Certs interface { // CachedCert is an individual cached certificate in the database. type CachedCert struct { - Key string `storm:"id" db:"domain"` + Key string `storm:"id"` // Encrypted data - Data string `storm:"-" db:"data"` Body []byte // above as a byte slice } diff --git a/internal/database/cert_test.go b/internal/database/cert_test.go new file mode 100644 index 0000000..6bb042f --- /dev/null +++ b/internal/database/cert_test.go @@ -0,0 +1,78 @@ +package database + +import ( + "context" + "os" + "testing" + + "git.xeserv.us/xena/route/internal/routecrypto" + "github.com/Xe/uuid" +) + +const ( + cryptoKey = `I7EzBRcoFtbW6RuqKdFjxYTHC_bpQLPJO3zyS2R-sf8=` + certNameBase = "cert." + certValue = "hunter2" +) + +func testCerts(ctx context.Context, t *testing.T, c Certs) { + cn := certNameBase + uuid.New() + + t.Run("put", func(t *testing.T) { + data := certValue + uuid.New() + + err := c.Put(ctx, cn, []byte(data)) + if err != nil { + t.Fatal(err) + } + + data2, err := c.Get(ctx, cn) + if err != nil { + t.Fatal(err) + } + + if data != string(data2) { + t.Fatalf("expected data to be %q, got %q", data, string(data2)) + } + }) + + t.Run("get", func(t *testing.T) { + _, err := c.Get(ctx, cn) + if err != nil { + t.Fatal(err) + } + }) + + t.Run("delete", func(t *testing.T) { + err := c.Delete(ctx, cn) + if err != nil { + t.Fatal(err) + } + + _, err = c.Get(ctx, cn) + if err == nil { + t.Fatal("able to fetch a deleted item") + } + }) +} + +func TestBoltDBCertStorage(t *testing.T) { + k, err := routecrypto.ParseKey(cryptoKey) + if err != nil { + t.Fatal(err) + } + + p := uuid.New() + defer os.RemoveAll(p) + + st, err := NewBoltStorage(p, k) + if err != nil { + t.Fatal(err) + } + defer st.Close() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + testCerts(ctx, t, st.Certs()) +}