From 476239f9e6243f1949b7c81671e34823a2d0c193 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Wed, 26 Jun 2019 14:13:02 +0200 Subject: [PATCH] nsscash: main_test: add group tests --- main_test.go | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/main_test.go b/main_test.go index 563f683..8a16258 100644 --- a/main_test.go +++ b/main_test.go @@ -191,9 +191,13 @@ func TestMainFetch(t *testing.T) { fetchPasswdInvalid, fetchPasswdLimits, fetchPasswd, - // Tests for plain + // Tests for plain and group fetchPlainEmpty, fetchPlain, + fetchGroupEmpty, + fetchGroupInvalid, + fetchGroupLimits, + fetchGroup, // Special tests fetchNoConfig, } @@ -499,6 +503,97 @@ path = "%[3]s" // Remaining functionality already tested in fetchPasswd() } +func fetchGroupEmpty(a args) { + t := a.t + mustWriteGroupConfig(t, a.url) + mustCreate(t, groupPath) + + *a.handler = func(w http.ResponseWriter, r *http.Request) { + // Empty response + } + + err := mainFetch(configPath) + mustBeErrorWithSubstring(t, err, + "refusing to use empty group file") + + mustNotExist(t, statePath, passwdPath, plainPath) + mustBeOld(t, groupPath) +} + +func fetchGroupInvalid(a args) { + t := a.t + mustWriteGroupConfig(t, a.url) + mustCreate(t, groupPath) + + *a.handler = func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/group" { + return + } + + fmt.Fprintln(w, "root:x::") + } + + err := mainFetch(configPath) + mustBeErrorWithSubstring(t, err, + "invalid gid in line") + + mustNotExist(t, statePath, passwdPath, plainPath) + mustBeOld(t, groupPath) +} + +func fetchGroupLimits(a args) { + t := a.t + mustWriteGroupConfig(t, a.url) + mustCreate(t, groupPath) + + *a.handler = func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/group" { + return + } + + fmt.Fprint(w, "root:x:0:") + for i := 0; i < 65536; i++ { + fmt.Fprint(w, "x") + } + fmt.Fprint(w, "\n") + } + + err := mainFetch(configPath) + mustBeErrorWithSubstring(t, err, + "group too large to serialize") + + mustNotExist(t, statePath, passwdPath, plainPath) + mustBeOld(t, groupPath) +} + +func fetchGroup(a args) { + t := a.t + mustWriteGroupConfig(t, a.url) + mustCreate(t, groupPath) + mustHaveHash(t, groupPath, "da39a3ee5e6b4b0d3255bfef95601890afd80709") + + *a.handler = func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/group" { + return + } + + fmt.Fprintln(w, "root:x:0:") + fmt.Fprintln(w, "daemon:x:1:andariel,duriel,mephisto,diablo,baal") + } + + err := mainFetch(configPath) + if err != nil { + t.Error(err) + } + + mustNotExist(t, passwdPath, plainPath) + mustBeNew(t, groupPath, statePath) + // The actual content of groupPath is verified by the NSS tests + mustHaveHash(t, groupPath, "8c27a8403278ba2e392b86d98d4dff1fdefcafdd") + + // Remaining functionality already tested in fetchPasswd() +} + func fetchNoConfig(a args) { t := a.t -- 2.43.2