2013-06-09 22:01:28 -04:00
|
|
|
package packer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2013-06-10 01:00:47 -04:00
|
|
|
type TestCache struct{}
|
|
|
|
|
|
|
|
func (TestCache) Lock(string) string {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
func (TestCache) Unlock(string) {}
|
|
|
|
|
|
|
|
func (TestCache) RLock(string) (string, bool) {
|
|
|
|
return "", false
|
|
|
|
}
|
|
|
|
|
|
|
|
func (TestCache) RUnlock(string) {}
|
|
|
|
|
2013-06-09 22:01:28 -04:00
|
|
|
func TestFileCache_Implements(t *testing.T) {
|
|
|
|
var raw interface{}
|
|
|
|
raw = &FileCache{}
|
|
|
|
if _, ok := raw.(Cache); !ok {
|
|
|
|
t.Fatal("FileCache must be a Cache")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFileCache(t *testing.T) {
|
|
|
|
cacheDir, err := ioutil.TempDir("", "packer")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("error creating temporary dir: %s", err)
|
|
|
|
}
|
|
|
|
defer os.RemoveAll(cacheDir)
|
|
|
|
|
|
|
|
cache := &FileCache{CacheDir: cacheDir}
|
2013-06-09 22:25:48 -04:00
|
|
|
path := cache.Lock("foo")
|
2013-06-09 22:01:28 -04:00
|
|
|
err = ioutil.WriteFile(path, []byte("data"), 0666)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("error writing: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
cache.Unlock("foo")
|
|
|
|
|
|
|
|
path, ok := cache.RLock("foo")
|
|
|
|
if !ok {
|
|
|
|
t.Fatal("cache says key doesn't exist")
|
|
|
|
}
|
|
|
|
defer cache.RUnlock("foo")
|
|
|
|
|
|
|
|
data, err := ioutil.ReadFile(path)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("error reading file: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(data) != "data" {
|
|
|
|
t.Fatalf("unknown data: %s", data)
|
|
|
|
}
|
|
|
|
}
|