// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package autocert

import (
	"context"
	"io/ioutil"
	"os"
	"path/filepath"
	"reflect"
	"testing"
)

// make sure DirCache satisfies Cache interface
var _ Cache = DirCache("/")

func TestDirCache(t *testing.T) {
	dir, err := ioutil.TempDir("", "autocert")
	if err != nil {
		t.Fatal(err)
	}
	dir = filepath.Join(dir, "certs") // a nonexistent dir
	cache := DirCache(dir)
	ctx := context.Background()

	// test cache miss
	if _, err := cache.Get(ctx, "nonexistent"); err != ErrCacheMiss {
		t.Errorf("get: %v; want ErrCacheMiss", err)
	}

	// test put/get
	b1 := []byte{1}
	if err := cache.Put(ctx, "dummy", b1); err != nil {
		t.Fatalf("put: %v", err)
	}
	b2, err := cache.Get(ctx, "dummy")
	if err != nil {
		t.Fatalf("get: %v", err)
	}
	if !reflect.DeepEqual(b1, b2) {
		t.Errorf("b1 = %v; want %v", b1, b2)
	}
	name := filepath.Join(dir, "dummy")
	if _, err := os.Stat(name); err != nil {
		t.Error(err)
	}

	// test delete
	if err := cache.Delete(ctx, "dummy"); err != nil {
		t.Fatalf("delete: %v", err)
	}
	if _, err := cache.Get(ctx, "dummy"); err != ErrCacheMiss {
		t.Errorf("get: %v; want ErrCacheMiss", err)
	}
}
