1// Copyright 2016 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package autocert
6
7import (
8	"context"
9	"io/ioutil"
10	"os"
11	"path/filepath"
12	"reflect"
13	"testing"
14)
15
16// make sure DirCache satisfies Cache interface
17var _ Cache = DirCache("/")
18
19func TestDirCache(t *testing.T) {
20	dir, err := ioutil.TempDir("", "autocert")
21	if err != nil {
22		t.Fatal(err)
23	}
24	defer os.RemoveAll(dir)
25	dir = filepath.Join(dir, "certs") // a nonexistent dir
26	cache := DirCache(dir)
27	ctx := context.Background()
28
29	// test cache miss
30	if _, err := cache.Get(ctx, "nonexistent"); err != ErrCacheMiss {
31		t.Errorf("get: %v; want ErrCacheMiss", err)
32	}
33
34	// test put/get
35	b1 := []byte{1}
36	if err := cache.Put(ctx, "dummy", b1); err != nil {
37		t.Fatalf("put: %v", err)
38	}
39	b2, err := cache.Get(ctx, "dummy")
40	if err != nil {
41		t.Fatalf("get: %v", err)
42	}
43	if !reflect.DeepEqual(b1, b2) {
44		t.Errorf("b1 = %v; want %v", b1, b2)
45	}
46	name := filepath.Join(dir, "dummy")
47	if _, err := os.Stat(name); err != nil {
48		t.Error(err)
49	}
50
51	// test delete
52	if err := cache.Delete(ctx, "dummy"); err != nil {
53		t.Fatalf("delete: %v", err)
54	}
55	if _, err := cache.Get(ctx, "dummy"); err != ErrCacheMiss {
56		t.Errorf("get: %v; want ErrCacheMiss", err)
57	}
58}
59