github.com/kovansky/hugo@v0.92.3-0.20220224232819-63076e4ff19f/cache/filecache/filecache_config_test.go (about)

     1  // Copyright 2018 The Hugo Authors. All rights reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software
     9  // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package filecache
    15  
    16  import (
    17  	"path/filepath"
    18  	"runtime"
    19  	"strings"
    20  	"testing"
    21  	"time"
    22  
    23  	"github.com/spf13/afero"
    24  
    25  	"github.com/gohugoio/hugo/config"
    26  
    27  	qt "github.com/frankban/quicktest"
    28  )
    29  
    30  func TestDecodeConfig(t *testing.T) {
    31  	t.Parallel()
    32  
    33  	c := qt.New(t)
    34  
    35  	configStr := `
    36  resourceDir = "myresources"
    37  contentDir = "content"
    38  dataDir = "data"
    39  i18nDir = "i18n"
    40  layoutDir = "layouts"
    41  assetDir = "assets"
    42  archetypeDir = "archetypes"
    43  
    44  [caches]
    45  [caches.getJSON]
    46  maxAge = "10m"
    47  dir = "/path/to/c1"
    48  [caches.getCSV]
    49  maxAge = "11h"
    50  dir = "/path/to/c2"
    51  [caches.images]
    52  dir = "/path/to/c3"
    53  [caches.getResource]
    54  dir = "/path/to/c4"
    55  `
    56  
    57  	cfg, err := config.FromConfigString(configStr, "toml")
    58  	c.Assert(err, qt.IsNil)
    59  	fs := afero.NewMemMapFs()
    60  	decoded, err := DecodeConfig(fs, cfg)
    61  	c.Assert(err, qt.IsNil)
    62  
    63  	c.Assert(len(decoded), qt.Equals, 6)
    64  
    65  	c2 := decoded["getcsv"]
    66  	c.Assert(c2.MaxAge.String(), qt.Equals, "11h0m0s")
    67  	c.Assert(c2.Dir, qt.Equals, filepath.FromSlash("/path/to/c2/filecache/getcsv"))
    68  
    69  	c3 := decoded["images"]
    70  	c.Assert(c3.MaxAge, qt.Equals, time.Duration(-1))
    71  	c.Assert(c3.Dir, qt.Equals, filepath.FromSlash("/path/to/c3/filecache/images"))
    72  
    73  	c4 := decoded["getresource"]
    74  	c.Assert(c4.MaxAge, qt.Equals, time.Duration(-1))
    75  	c.Assert(c4.Dir, qt.Equals, filepath.FromSlash("/path/to/c4/filecache/getresource"))
    76  }
    77  
    78  func TestDecodeConfigIgnoreCache(t *testing.T) {
    79  	t.Parallel()
    80  
    81  	c := qt.New(t)
    82  
    83  	configStr := `
    84  resourceDir = "myresources"
    85  contentDir = "content"
    86  dataDir = "data"
    87  i18nDir = "i18n"
    88  layoutDir = "layouts"
    89  assetDir = "assets"
    90  archeTypedir = "archetypes"
    91  
    92  ignoreCache = true
    93  [caches]
    94  [caches.getJSON]
    95  maxAge = 1234
    96  dir = "/path/to/c1"
    97  [caches.getCSV]
    98  maxAge = 3456
    99  dir = "/path/to/c2"
   100  [caches.images]
   101  dir = "/path/to/c3"
   102  [caches.getResource]
   103  dir = "/path/to/c4"
   104  `
   105  
   106  	cfg, err := config.FromConfigString(configStr, "toml")
   107  	c.Assert(err, qt.IsNil)
   108  	fs := afero.NewMemMapFs()
   109  	decoded, err := DecodeConfig(fs, cfg)
   110  	c.Assert(err, qt.IsNil)
   111  
   112  	c.Assert(len(decoded), qt.Equals, 6)
   113  
   114  	for _, v := range decoded {
   115  		c.Assert(v.MaxAge, qt.Equals, time.Duration(0))
   116  	}
   117  }
   118  
   119  func TestDecodeConfigDefault(t *testing.T) {
   120  	c := qt.New(t)
   121  	cfg := newTestConfig()
   122  
   123  	if runtime.GOOS == "windows" {
   124  		cfg.Set("resourceDir", "c:\\cache\\resources")
   125  		cfg.Set("cacheDir", "c:\\cache\\thecache")
   126  
   127  	} else {
   128  		cfg.Set("resourceDir", "/cache/resources")
   129  		cfg.Set("cacheDir", "/cache/thecache")
   130  	}
   131  
   132  	fs := afero.NewMemMapFs()
   133  
   134  	decoded, err := DecodeConfig(fs, cfg)
   135  
   136  	c.Assert(err, qt.IsNil)
   137  
   138  	c.Assert(len(decoded), qt.Equals, 6)
   139  
   140  	imgConfig := decoded[cacheKeyImages]
   141  	jsonConfig := decoded[cacheKeyGetJSON]
   142  
   143  	if runtime.GOOS == "windows" {
   144  		c.Assert(imgConfig.Dir, qt.Equals, filepath.FromSlash("_gen/images"))
   145  	} else {
   146  		c.Assert(imgConfig.Dir, qt.Equals, "_gen/images")
   147  		c.Assert(jsonConfig.Dir, qt.Equals, "/cache/thecache/hugoproject/filecache/getjson")
   148  	}
   149  
   150  	c.Assert(imgConfig.isResourceDir, qt.Equals, true)
   151  	c.Assert(jsonConfig.isResourceDir, qt.Equals, false)
   152  }
   153  
   154  func TestDecodeConfigInvalidDir(t *testing.T) {
   155  	t.Parallel()
   156  
   157  	c := qt.New(t)
   158  
   159  	configStr := `
   160  resourceDir = "myresources"
   161  contentDir = "content"
   162  dataDir = "data"
   163  i18nDir = "i18n"
   164  layoutDir = "layouts"
   165  assetDir = "assets"
   166  archeTypedir = "archetypes"
   167  
   168  [caches]
   169  [caches.getJSON]
   170  maxAge = "10m"
   171  dir = "/"
   172  
   173  `
   174  	if runtime.GOOS == "windows" {
   175  		configStr = strings.Replace(configStr, "/", "c:\\\\", 1)
   176  	}
   177  
   178  	cfg, err := config.FromConfigString(configStr, "toml")
   179  	c.Assert(err, qt.IsNil)
   180  	fs := afero.NewMemMapFs()
   181  
   182  	_, err = DecodeConfig(fs, cfg)
   183  	c.Assert(err, qt.Not(qt.IsNil))
   184  }
   185  
   186  func newTestConfig() config.Provider {
   187  	cfg := config.New()
   188  	cfg.Set("workingDir", filepath.FromSlash("/my/cool/hugoproject"))
   189  	cfg.Set("contentDir", "content")
   190  	cfg.Set("dataDir", "data")
   191  	cfg.Set("resourceDir", "resources")
   192  	cfg.Set("i18nDir", "i18n")
   193  	cfg.Set("layoutDir", "layouts")
   194  	cfg.Set("archetypeDir", "archetypes")
   195  	cfg.Set("assetDir", "assets")
   196  
   197  	return cfg
   198  }