]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Return original error on resources.GetRemote retry timeouts
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 4 Aug 2023 16:46:47 +0000 (18:46 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 4 Aug 2023 19:12:04 +0000 (21:12 +0200)
See #11327

resources/resource_factories/create/integration_test.go
resources/resource_factories/create/remote.go

index acd2cf3a14c31f27c4da7f6223297484f43fa1f8..0a522727a3bfc412a55d986c8cac9b41a133eb67 100644 (file)
@@ -21,6 +21,7 @@ import (
        "strings"
        "testing"
 
+       qt "github.com/frankban/quicktest"
        "github.com/gohugoio/hugo/hugolib"
 )
 
@@ -67,10 +68,10 @@ func TestGetRemoteRetry(t *testing.T) {
        t.Parallel()
 
        temporaryHTTPCodes := []int{408, 429, 500, 502, 503, 504}
-       numPages := 30
+       numPages := 20
 
        handler := func(w http.ResponseWriter, r *http.Request) {
-               if rand.Intn(4) == 0 {
+               if rand.Intn(3) == 0 {
                        w.WriteHeader(temporaryHTTPCodes[rand.Intn(len(temporaryHTTPCodes))])
                        return
                }
@@ -81,9 +82,10 @@ func TestGetRemoteRetry(t *testing.T) {
        srv := httptest.NewServer(http.HandlerFunc(handler))
        t.Cleanup(func() { srv.Close() })
 
-       files := `
+       filesTemplate := `
 -- hugo.toml --
 disableKinds = ["home", "taxonomy", "term"]
+timeout = "TIMEOUT"
 [security]
 [security.http]
 urls = ['.*']
@@ -93,7 +95,7 @@ mediaTypes = ['text/plain']
 {{ $opts := dict }}
 {{ with resources.GetRemote $url $opts }}
   {{ with .Err }}
-    {{ errorf "Unable to get remote resource: %s" . }}
+    {{ errorf "Got Err: %s. Data: %v" . .Data }}
   {{ else }}
     Content: {{ .Content }}
   {{ end }}
@@ -103,22 +105,41 @@ mediaTypes = ['text/plain']
 `
 
        for i := 0; i < numPages; i++ {
-               files += fmt.Sprintf("-- content/post/p%d.md --\n", i)
+               filesTemplate += fmt.Sprintf("-- content/post/p%d.md --\n", i)
        }
 
-       files = strings.ReplaceAll(files, "URL", srv.URL)
+       filesTemplate = strings.ReplaceAll(filesTemplate, "URL", srv.URL)
 
-       b := hugolib.NewIntegrationTestBuilder(
-               hugolib.IntegrationTestConfig{
-                       T:           t,
-                       TxtarString: files,
-               },
-       )
+       t.Run("OK", func(t *testing.T) {
+               files := strings.ReplaceAll(filesTemplate, "TIMEOUT", "60s")
+               b := hugolib.NewIntegrationTestBuilder(
+                       hugolib.IntegrationTestConfig{
+                               T:           t,
+                               TxtarString: files,
+                       },
+               )
 
-       b.Build()
+               b.Build()
 
-       for i := 0; i < numPages; i++ {
-               b.AssertFileContent(fmt.Sprintf("public/post/p%d/index.html", i), fmt.Sprintf("Content: Response for /post/p%d/.", i))
-       }
+               for i := 0; i < numPages; i++ {
+                       b.AssertFileContent(fmt.Sprintf("public/post/p%d/index.html", i), fmt.Sprintf("Content: Response for /post/p%d/.", i))
+               }
+       })
+
+       t.Run("Timeout", func(t *testing.T) {
+               files := strings.ReplaceAll(filesTemplate, "TIMEOUT", "100ms")
+               b, err := hugolib.NewIntegrationTestBuilder(
+                       hugolib.IntegrationTestConfig{
+                               T:           t,
+                               TxtarString: files,
+                       },
+               ).BuildE()
+
+               b.Assert(err, qt.IsNotNil)
+               b.AssertLogContains("Got Err")
+               b.AssertLogContains("Retry timeout")
+               b.AssertLogContains("ContentLength:0")
+
+       })
 
 }
index ce9c8088117c61ce7862cda3ed019951b3653935..488e8e70a8bb2c45aa17280ea9297b0e8a60b137 100644 (file)
@@ -159,7 +159,8 @@ func (c *Client) FromRemote(uri string, optionsm map[string]any) (resource.Resou
                                        if start.IsZero() {
                                                start = time.Now()
                                        } else if d := time.Since(start) + nextSleep; d >= c.rs.Cfg.Timeout() {
-                                               return nil, fmt.Errorf("timeout (configured to %s) fetching remote resource %s: last error: %w", c.rs.Cfg.Timeout(), uri, err)
+                                               c.rs.Logger.Errorf("Retry timeout (configured to %s) fetching remote resource.", c.rs.Cfg.Timeout())
+                                               return nil, err
                                        }
                                        time.Sleep(nextSleep)
                                        if nextSleep < nextSleepLimit {