12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package config
- import (
- "encoding/json"
- "testing"
- "github.com/docker/docker/api/types/filters"
- "github.com/google/go-cmp/cmp"
- "gotest.tools/v3/assert"
- "gotest.tools/v3/fs"
- )
- func TestBuilderGC(t *testing.T) {
- tempFile := fs.NewFile(t, "config", fs.WithContent(`{
- "builder": {
- "gc": {
- "enabled": true,
- "policy": [
- {"keepStorage": "10GB", "filter": ["unused-for=2200h"]},
- {"keepStorage": "50GB", "filter": {"unused-for": {"3300h": true}}},
- {"keepStorage": "100GB", "all": true}
- ]
- }
- }
- }`))
- defer tempFile.Remove()
- configFile := tempFile.Path()
- cfg, err := MergeDaemonConfigurations(&Config{}, nil, configFile)
- assert.NilError(t, err)
- assert.Assert(t, cfg.Builder.GC.Enabled)
- f1 := filters.NewArgs()
- f1.Add("unused-for", "2200h")
- f2 := filters.NewArgs()
- f2.Add("unused-for", "3300h")
- expectedPolicy := []BuilderGCRule{
- {KeepStorage: "10GB", Filter: BuilderGCFilter(f1)},
- {KeepStorage: "50GB", Filter: BuilderGCFilter(f2)}, /* parsed from deprecated form */
- {KeepStorage: "100GB", All: true},
- }
- assert.DeepEqual(t, cfg.Builder.GC.Policy, expectedPolicy, cmp.AllowUnexported(BuilderGCFilter{}))
- // double check to please the skeptics
- assert.Assert(t, filters.Args(cfg.Builder.GC.Policy[0].Filter).UniqueExactMatch("unused-for", "2200h"))
- assert.Assert(t, filters.Args(cfg.Builder.GC.Policy[1].Filter).UniqueExactMatch("unused-for", "3300h"))
- }
- // TestBuilderGCFilterUnmarshal is a regression test for https://github.com/moby/moby/issues/44361,
- // where and incorrectly formatted gc filter option ("unused-for2200h",
- // missing a "=" separator). resulted in a panic during unmarshal.
- func TestBuilderGCFilterUnmarshal(t *testing.T) {
- var cfg BuilderGCConfig
- err := json.Unmarshal([]byte(`{"poliCy": [{"keepStorage": "10GB", "filter": ["unused-for2200h"]}]}`), &cfg)
- assert.Check(t, err)
- expectedPolicy := []BuilderGCRule{{
- KeepStorage: "10GB", Filter: BuilderGCFilter(filters.NewArgs(filters.Arg("unused-for2200h", ""))),
- }}
- assert.DeepEqual(t, cfg.Policy, expectedPolicy, cmp.AllowUnexported(BuilderGCFilter{}))
- }
|