mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-17 21:01:26 +02:00
98
cache/filecache/filecache_test.go
vendored
98
cache/filecache/filecache_test.go
vendored
@@ -17,6 +17,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -38,10 +39,29 @@ func TestFileCache(t *testing.T) {
|
|||||||
t.Parallel()
|
t.Parallel()
|
||||||
assert := require.New(t)
|
assert := require.New(t)
|
||||||
|
|
||||||
for _, cacheDir := range []string{"mycache", ""} {
|
tempWorkingDir, err := ioutil.TempDir("", "hugo_filecache_test_work")
|
||||||
|
assert.NoError(err)
|
||||||
|
defer os.Remove(tempWorkingDir)
|
||||||
|
|
||||||
|
tempCacheDir, err := ioutil.TempDir("", "hugo_filecache_test_cache")
|
||||||
|
assert.NoError(err)
|
||||||
|
defer os.Remove(tempCacheDir)
|
||||||
|
|
||||||
|
osfs := afero.NewOsFs()
|
||||||
|
|
||||||
|
existingCacheDir := helpers.GetTempDir("hugo_filecache_test_cache_existing", osfs)
|
||||||
|
existingWorkingDir := helpers.GetTempDir("hugo_filecache_test_work_existing", osfs)
|
||||||
|
|
||||||
|
for _, test := range []struct {
|
||||||
|
cacheDir string
|
||||||
|
workingDir string
|
||||||
|
}{
|
||||||
|
{tempCacheDir, tempWorkingDir},
|
||||||
|
{existingCacheDir, existingWorkingDir},
|
||||||
|
} {
|
||||||
|
|
||||||
configStr := `
|
configStr := `
|
||||||
workingDir = "/my/work"
|
workingDir = "WORKING_DIR"
|
||||||
resourceDir = "resources"
|
resourceDir = "resources"
|
||||||
cacheDir = "CACHEDIR"
|
cacheDir = "CACHEDIR"
|
||||||
contentDir = "content"
|
contentDir = "content"
|
||||||
@@ -57,37 +77,43 @@ maxAge = "10h"
|
|||||||
dir = ":cacheDir/c"
|
dir = ":cacheDir/c"
|
||||||
|
|
||||||
`
|
`
|
||||||
configStr = strings.Replace(configStr, "CACHEDIR", cacheDir, 1)
|
|
||||||
|
winPathSep := "\\\\"
|
||||||
|
|
||||||
|
replacer := strings.NewReplacer("CACHEDIR", test.cacheDir, "WORKING_DIR", test.workingDir)
|
||||||
|
|
||||||
|
configStr = replacer.Replace(configStr)
|
||||||
|
configStr = strings.Replace(configStr, "\\", winPathSep, -1)
|
||||||
|
|
||||||
cfg, err := config.FromConfigString(configStr, "toml")
|
cfg, err := config.FromConfigString(configStr, "toml")
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
|
|
||||||
fs := hugofs.NewMem(cfg)
|
fs := hugofs.NewFrom(osfs, cfg)
|
||||||
p, err := helpers.NewPathSpec(fs, cfg)
|
p, err := helpers.NewPathSpec(fs, cfg)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
|
|
||||||
caches, err := NewCaches(p)
|
caches, err := NewCaches(p)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
|
|
||||||
c := caches.Get("GetJSON")
|
cache := caches.Get("GetJSON")
|
||||||
assert.NotNil(c)
|
assert.NotNil(cache)
|
||||||
assert.Equal("10h0m0s", c.maxAge.String())
|
assert.Equal("10h0m0s", cache.maxAge.String())
|
||||||
|
|
||||||
bfs, ok := c.Fs.(*afero.BasePathFs)
|
bfs, ok := cache.Fs.(*afero.BasePathFs)
|
||||||
assert.True(ok)
|
assert.True(ok)
|
||||||
filename, err := bfs.RealPath("key")
|
filename, err := bfs.RealPath("key")
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
if cacheDir != "" {
|
if test.cacheDir != "" {
|
||||||
assert.Equal(filepath.FromSlash(cacheDir+"/c/"+filecacheRootDirname+"/getjson/key"), filename)
|
assert.Equal(filepath.Join(test.cacheDir, "c/"+filecacheRootDirname+"/getjson/key"), filename)
|
||||||
} else {
|
} else {
|
||||||
// Temp dir.
|
// Temp dir.
|
||||||
assert.Regexp(regexp.MustCompile(".*hugo_cache.*"+filecacheRootDirname+".*key"), filename)
|
assert.Regexp(regexp.MustCompile(".*hugo_cache.*"+filecacheRootDirname+".*key"), filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
c = caches.Get("images")
|
cache = caches.Get("Images")
|
||||||
assert.NotNil(c)
|
assert.NotNil(cache)
|
||||||
assert.Equal(time.Duration(-1), c.maxAge)
|
assert.Equal(time.Duration(-1), cache.maxAge)
|
||||||
bfs, ok = c.Fs.(*afero.BasePathFs)
|
bfs, ok = cache.Fs.(*afero.BasePathFs)
|
||||||
assert.True(ok)
|
assert.True(ok)
|
||||||
filename, _ = bfs.RealPath("key")
|
filename, _ = bfs.RealPath("key")
|
||||||
assert.Equal(filepath.FromSlash("_gen/images/key"), filename)
|
assert.Equal(filepath.FromSlash("_gen/images/key"), filename)
|
||||||
@@ -108,30 +134,32 @@ dir = ":cacheDir/c"
|
|||||||
return []byte("bcd"), nil
|
return []byte("bcd"), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < 2; i++ {
|
for _, c := range []*Cache{caches.ImageCache(), caches.AssetsCache(), caches.GetJSONCache(), caches.GetCSVCache()} {
|
||||||
info, r, err := c.GetOrCreate("a", rf("abc"))
|
for i := 0; i < 2; i++ {
|
||||||
assert.NoError(err)
|
info, r, err := c.GetOrCreate("a", rf("abc"))
|
||||||
assert.NotNil(r)
|
assert.NoError(err)
|
||||||
assert.Equal("a", info.Name)
|
assert.NotNil(r)
|
||||||
b, _ := ioutil.ReadAll(r)
|
assert.Equal("a", info.Name)
|
||||||
r.Close()
|
b, _ := ioutil.ReadAll(r)
|
||||||
assert.Equal("abc", string(b))
|
r.Close()
|
||||||
|
assert.Equal("abc", string(b))
|
||||||
|
|
||||||
info, b, err = c.GetOrCreateBytes("b", bf)
|
info, b, err = c.GetOrCreateBytes("b", bf)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
assert.NotNil(r)
|
assert.NotNil(r)
|
||||||
assert.Equal("b", info.Name)
|
assert.Equal("b", info.Name)
|
||||||
assert.Equal("bcd", string(b))
|
assert.Equal("bcd", string(b))
|
||||||
|
|
||||||
_, b, err = c.GetOrCreateBytes("a", bf)
|
_, b, err = c.GetOrCreateBytes("a", bf)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
assert.Equal("abc", string(b))
|
assert.Equal("abc", string(b))
|
||||||
|
|
||||||
_, r, err = c.GetOrCreate("a", rf("bcd"))
|
_, r, err = c.GetOrCreate("a", rf("bcd"))
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
b, _ = ioutil.ReadAll(r)
|
b, _ = ioutil.ReadAll(r)
|
||||||
r.Close()
|
r.Close()
|
||||||
assert.Equal("abc", string(b))
|
assert.Equal("abc", string(b))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.NotNil(caches.Get("getJSON"))
|
assert.NotNil(caches.Get("getJSON"))
|
||||||
|
Reference in New Issue
Block a user