diff options
author | W. Trevor King <wking@tremily.us> | 2018-05-10 11:06:53 -0700 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-05-11 16:26:35 +0000 |
commit | 89430ffe65636b45cab834c94f176c1dc1d8a167 (patch) | |
tree | ca0620a2f47e1a805f874826f67e3a912935e570 /pkg/hooks/hooks_test.go | |
parent | 4b22913e11208eb2a46085c1fede48a8e9168936 (diff) | |
download | podman-89430ffe65636b45cab834c94f176c1dc1d8a167.tar.gz podman-89430ffe65636b45cab834c94f176c1dc1d8a167.tar.bz2 podman-89430ffe65636b45cab834c94f176c1dc1d8a167.zip |
hooks: Order injection by collated JSON filename
We also considered ordering with sort.Strings, but Matthew rejected
that because it uses a byte-by-byte UTF-8 comparison [1] which would
fail many language-specific conventions [2].
There's some more discussion of the localeToLanguage mapping in [3].
Currently language.Parse does not handle either 'C' or 'POSIX',
returning:
und, language: tag is not well-formed
for both.
[1]: https://github.com/projectatomic/libpod/pull/686#issuecomment-387914358
[2]: https://en.wikipedia.org/wiki/Alphabetical_order#Language-specific_conventions
[3]: https://github.com/golang/go/issues/25340
Signed-off-by: W. Trevor King <wking@tremily.us>
Closes: #686
Approved by: mheon
Diffstat (limited to 'pkg/hooks/hooks_test.go')
-rw-r--r-- | pkg/hooks/hooks_test.go | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/pkg/hooks/hooks_test.go b/pkg/hooks/hooks_test.go index 109f6b046..9da2ec8b0 100644 --- a/pkg/hooks/hooks_test.go +++ b/pkg/hooks/hooks_test.go @@ -12,6 +12,7 @@ import ( rspec "github.com/opencontainers/runtime-spec/specs-go" current "github.com/projectatomic/libpod/pkg/hooks/1.0.0" "github.com/stretchr/testify/assert" + "golang.org/x/text/language" ) // path is the path to an example hook executable. @@ -26,13 +27,28 @@ func TestGoodNew(t *testing.T) { } defer os.RemoveAll(dir) - jsonPath := filepath.Join(dir, "a.json") - err = ioutil.WriteFile(jsonPath, []byte(fmt.Sprintf("{\"version\": \"1.0.0\", \"hook\": {\"path\": \"%s\"}, \"when\": {\"always\": true}, \"stages\": [\"prestart\", \"poststart\", \"poststop\"]}", path)), 0644) + for i, name := range []string{ + "01-my-hook.json", + "01-UPPERCASE.json", + "02-another-hook.json", + } { + jsonPath := filepath.Join(dir, name) + var extraStages string + if i == 0 { + extraStages = ", \"poststart\", \"poststop\"" + } + err = ioutil.WriteFile(jsonPath, []byte(fmt.Sprintf("{\"version\": \"1.0.0\", \"hook\": {\"path\": \"%s\", \"timeout\": %d}, \"when\": {\"always\": true}, \"stages\": [\"prestart\"%s]}", path, i+1, extraStages)), 0644) + if err != nil { + t.Fatal(err) + } + } + + lang, err := language.Parse("und-u-va-posix") if err != nil { t.Fatal(err) } - manager, err := New(ctx, []string{dir}) + manager, err := New(ctx, []string{dir}, lang) if err != nil { t.Fatal(err) } @@ -43,20 +59,34 @@ func TestGoodNew(t *testing.T) { t.Fatal(err) } + one := 1 + two := 2 + three := 3 assert.Equal(t, &rspec.Hooks{ Prestart: []rspec.Hook{ { - Path: path, + Path: path, + Timeout: &one, + }, + { + Path: path, + Timeout: &two, + }, + { + Path: path, + Timeout: &three, }, }, Poststart: []rspec.Hook{ { - Path: path, + Path: path, + Timeout: &one, }, }, Poststop: []rspec.Hook{ { - Path: path, + Path: path, + Timeout: &one, }, }, }, config.Hooks) @@ -77,7 +107,12 @@ func TestBadNew(t *testing.T) { t.Fatal(err) } - _, err = New(ctx, []string{dir}) + lang, err := language.Parse("und-u-va-posix") + if err != nil { + t.Fatal(err) + } + + _, err = New(ctx, []string{dir}, lang) if err == nil { t.Fatal("unexpected success") } |