builder_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package config
  2. import (
  3. "encoding/json"
  4. "testing"
  5. "github.com/docker/docker/api/types/filters"
  6. "github.com/google/go-cmp/cmp"
  7. "gotest.tools/v3/assert"
  8. "gotest.tools/v3/fs"
  9. )
  10. func TestBuilderGC(t *testing.T) {
  11. tempFile := fs.NewFile(t, "config", fs.WithContent(`{
  12. "builder": {
  13. "gc": {
  14. "enabled": true,
  15. "policy": [
  16. {"keepStorage": "10GB", "filter": ["unused-for=2200h"]},
  17. {"keepStorage": "50GB", "filter": {"unused-for": {"3300h": true}}},
  18. {"keepStorage": "100GB", "all": true}
  19. ]
  20. }
  21. }
  22. }`))
  23. defer tempFile.Remove()
  24. configFile := tempFile.Path()
  25. cfg, err := MergeDaemonConfigurations(&Config{}, nil, configFile)
  26. assert.NilError(t, err)
  27. assert.Assert(t, cfg.Builder.GC.Enabled)
  28. f1 := filters.NewArgs()
  29. f1.Add("unused-for", "2200h")
  30. f2 := filters.NewArgs()
  31. f2.Add("unused-for", "3300h")
  32. expectedPolicy := []BuilderGCRule{
  33. {KeepStorage: "10GB", Filter: BuilderGCFilter(f1)},
  34. {KeepStorage: "50GB", Filter: BuilderGCFilter(f2)}, /* parsed from deprecated form */
  35. {KeepStorage: "100GB", All: true},
  36. }
  37. assert.DeepEqual(t, cfg.Builder.GC.Policy, expectedPolicy, cmp.AllowUnexported(BuilderGCFilter{}))
  38. // double check to please the skeptics
  39. assert.Assert(t, filters.Args(cfg.Builder.GC.Policy[0].Filter).UniqueExactMatch("unused-for", "2200h"))
  40. assert.Assert(t, filters.Args(cfg.Builder.GC.Policy[1].Filter).UniqueExactMatch("unused-for", "3300h"))
  41. }
  42. // TestBuilderGCFilterUnmarshal is a regression test for https://github.com/moby/moby/issues/44361,
  43. // where and incorrectly formatted gc filter option ("unused-for2200h",
  44. // missing a "=" separator). resulted in a panic during unmarshal.
  45. func TestBuilderGCFilterUnmarshal(t *testing.T) {
  46. var cfg BuilderGCConfig
  47. err := json.Unmarshal([]byte(`{"poliCy": [{"keepStorage": "10GB", "filter": ["unused-for2200h"]}]}`), &cfg)
  48. assert.Check(t, err)
  49. expectedPolicy := []BuilderGCRule{{
  50. KeepStorage: "10GB", Filter: BuilderGCFilter(filters.NewArgs(filters.Arg("unused-for2200h", ""))),
  51. }}
  52. assert.DeepEqual(t, cfg.Policy, expectedPolicy, cmp.AllowUnexported(BuilderGCFilter{}))
  53. }