mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-29 15:10:35 +03:00
resources/images: Make the image cache more robust
Also allow timeout to be set as a duration string, e.g. `30s`. Fixes #6501
This commit is contained in:
parent
031f948f87
commit
d6f7a9e28d
11 changed files with 85 additions and 32 deletions
|
@ -35,11 +35,12 @@ func TestImageOps(t *testing.T) {
|
|||
c.Assert(err, qt.IsNil)
|
||||
defer clean()
|
||||
|
||||
newBuilder := func() *sitesBuilder {
|
||||
newBuilder := func(timeout string) *sitesBuilder {
|
||||
|
||||
v := viper.New()
|
||||
v.Set("workingDir", workDir)
|
||||
v.Set("baseURL", "https://example.org")
|
||||
v.Set("timeout", timeout)
|
||||
|
||||
b := newTestSitesBuilder(t).WithWorkingDir(workDir)
|
||||
b.Fs = hugofs.NewDefault(v)
|
||||
|
@ -49,9 +50,17 @@ func TestImageOps(t *testing.T) {
|
|||
title: "My bundle"
|
||||
---
|
||||
|
||||
{{< imgproc >}}
|
||||
|
||||
`)
|
||||
|
||||
b.WithTemplatesAdded("index.html", `
|
||||
b.WithTemplatesAdded(
|
||||
"shortcodes/imgproc.html", `
|
||||
{{ $img := resources.Get "images/sunset.jpg" }}
|
||||
{{ $r := $img.Resize "129x239" }}
|
||||
IMG SHORTCODE: {{ $r.RelPermalink }}/{{ $r.Width }}
|
||||
`,
|
||||
"index.html", `
|
||||
{{ $p := .Site.GetPage "mybundle" }}
|
||||
{{ $img1 := resources.Get "images/sunset.jpg" }}
|
||||
{{ $img2 := $p.Resources.GetMatch "sunset.jpg" }}
|
||||
|
@ -83,7 +92,7 @@ BG3: {{ $blurryGrayscale3.RelPermalink }}/{{ $blurryGrayscale3.Width }}
|
|||
{{ $blurryGrayscale4 := $r.Filter $filters }}
|
||||
BG4: {{ $blurryGrayscale4.RelPermalink }}/{{ $blurryGrayscale4.Width }}
|
||||
|
||||
|
||||
{{ $p.Content }}
|
||||
|
||||
`)
|
||||
|
||||
|
@ -112,8 +121,8 @@ BG4: {{ $blurryGrayscale4.RelPermalink }}/{{ $blurryGrayscale4.Width }}
|
|||
out.Close()
|
||||
src.Close()
|
||||
|
||||
b := newBuilder()
|
||||
b.Build(BuildCfg{})
|
||||
// First build it with a very short timeout to trigger errors.
|
||||
b := newBuilder("10ns")
|
||||
|
||||
imgExpect := `
|
||||
Resized1: images/sunset.jpg|123|234|image/jpg|/images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_123x234_resize_q75_box.jpg|
|
||||
|
@ -126,16 +135,35 @@ BG1: /images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_2ae8bb993431ec1aec4
|
|||
BG2: /images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_2ae8bb993431ec1aec40fe59927b46b4.jpg/123
|
||||
BG3: /images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_ed7740a90b82802261c2fbdb98bc8082.jpg/123
|
||||
BG4: /images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_ed7740a90b82802261c2fbdb98bc8082.jpg/123
|
||||
IMG SHORTCODE: /images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_129x239_resize_q75_box.jpg/129
|
||||
`
|
||||
|
||||
b.AssertFileContent(filepath.Join(workDir, "public/index.html"), imgExpect)
|
||||
b.AssertImage(350, 219, "public/images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_350x0_resize_q75_box.a86fe88d894e5db613f6aa8a80538fefc25b20fa24ba0d782c057adcef616f56.jpg")
|
||||
assertImages := func() {
|
||||
b.Helper()
|
||||
b.AssertFileContent(filepath.Join(workDir, "public/index.html"), imgExpect)
|
||||
b.AssertImage(350, 219, "public/images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_350x0_resize_q75_box.a86fe88d894e5db613f6aa8a80538fefc25b20fa24ba0d782c057adcef616f56.jpg")
|
||||
b.AssertImage(129, 239, "public/images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_129x239_resize_q75_box.jpg")
|
||||
}
|
||||
|
||||
// Build it again to make sure we read images from file cache.
|
||||
b = newBuilder()
|
||||
err = b.BuildE(BuildCfg{})
|
||||
c.Assert(err, qt.Not(qt.IsNil))
|
||||
|
||||
b = newBuilder("30s")
|
||||
b.Build(BuildCfg{})
|
||||
|
||||
b.AssertFileContent(filepath.Join(workDir, "public/index.html"), imgExpect)
|
||||
assertImages()
|
||||
|
||||
// Truncate one image.
|
||||
imgInCache := filepath.Join(workDir, "resources/_gen/images/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_ed7740a90b82802261c2fbdb98bc8082.jpg")
|
||||
f, err := os.Create(imgInCache)
|
||||
c.Assert(err, qt.IsNil)
|
||||
f.Close()
|
||||
|
||||
// Build it again to make sure we read images from file cache.
|
||||
b = newBuilder("30s")
|
||||
b.Build(BuildCfg{})
|
||||
|
||||
assertImages()
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue