diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-07-02 21:52:07 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-07-02 21:52:07 +0900 |
| commit | 82561d62b66f17c05604e87f18187bb3a91f00d2 (patch) | |
| tree | c1543f85b4458b7d5cb2cf7b1baa9dee318debfe /acl/acl_test.go | |
| parent | eec021cc4b4eb42bc9c8311755826828bfba1996 (diff) | |
system: move system access packages
These packages loosely belong in the "system" package and "system" provides high level wrappers for all of them.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'acl/acl_test.go')
| -rw-r--r-- | acl/acl_test.go | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/acl/acl_test.go b/acl/acl_test.go deleted file mode 100644 index cb5945d1..00000000 --- a/acl/acl_test.go +++ /dev/null @@ -1,125 +0,0 @@ -package acl_test - -import ( - "errors" - "os" - "path" - "reflect" - "testing" - - "git.gensokyo.uk/security/hakurei/acl" -) - -const testFileName = "acl.test" - -var ( - uid = os.Geteuid() - cred = int32(os.Geteuid()) -) - -func TestUpdatePerm(t *testing.T) { - if os.Getenv("GO_TEST_SKIP_ACL") == "1" { - t.Log("acl test skipped") - t.SkipNow() - } - - testFilePath := path.Join(t.TempDir(), testFileName) - - if f, err := os.Create(testFilePath); err != nil { - t.Fatalf("Create: error = %v", err) - } else { - if err = f.Close(); err != nil { - t.Fatalf("Close: error = %v", err) - } - } - defer func() { - if err := os.Remove(testFilePath); err != nil { - t.Fatalf("Remove: error = %v", err) - } - }() - - cur := getfacl(t, testFilePath) - - t.Run("default entry count", func(t *testing.T) { - if len(cur) != 3 { - t.Fatalf("unexpected test file acl length %d", len(cur)) - } - }) - - t.Run("default clear mask", func(t *testing.T) { - if err := acl.Update(testFilePath, uid); err != nil { - t.Fatalf("UpdatePerm: error = %v", err) - } - if cur = getfacl(t, testFilePath); len(cur) != 4 { - t.Fatalf("UpdatePerm: %v", cur) - } - }) - - t.Run("default clear consistency", func(t *testing.T) { - if err := acl.Update(testFilePath, uid); err != nil { - t.Fatalf("UpdatePerm: error = %v", err) - } - if val := getfacl(t, testFilePath); !reflect.DeepEqual(val, cur) { - t.Fatalf("UpdatePerm: %v, want %v", val, cur) - } - }) - - testUpdate(t, testFilePath, "r--", cur, fAclPermRead, acl.Read) - testUpdate(t, testFilePath, "-w-", cur, fAclPermWrite, acl.Write) - testUpdate(t, testFilePath, "--x", cur, fAclPermExecute, acl.Execute) - testUpdate(t, testFilePath, "-wx", cur, fAclPermWrite|fAclPermExecute, acl.Write, acl.Execute) - testUpdate(t, testFilePath, "r-x", cur, fAclPermRead|fAclPermExecute, acl.Read, acl.Execute) - testUpdate(t, testFilePath, "rw-", cur, fAclPermRead|fAclPermWrite, acl.Read, acl.Write) - testUpdate(t, testFilePath, "rwx", cur, fAclPermRead|fAclPermWrite|fAclPermExecute, acl.Read, acl.Write, acl.Execute) -} - -func testUpdate(t *testing.T, testFilePath, name string, cur []*getFAclResp, val fAclPerm, perms ...acl.Perm) { - t.Run(name, func(t *testing.T) { - t.Cleanup(func() { - if err := acl.Update(testFilePath, uid); err != nil { - t.Fatalf("UpdatePerm: error = %v", err) - } - if v := getfacl(t, testFilePath); !reflect.DeepEqual(v, cur) { - t.Fatalf("UpdatePerm: %v, want %v", v, cur) - } - }) - - if err := acl.Update(testFilePath, uid, perms...); err != nil { - t.Fatalf("UpdatePerm: error = %v", err) - } - r := respByCred(getfacl(t, testFilePath), fAclTypeUser, cred) - if r == nil { - t.Fatalf("UpdatePerm did not add an ACL entry") - } - if !r.equals(fAclTypeUser, cred, val) { - t.Fatalf("UpdatePerm(%s) = %s", name, r) - } - }) -} - -func getfacl(t *testing.T, name string) []*getFAclResp { - c := new(getFAclInvocation) - if err := c.run(name); err != nil { - t.Fatalf("getfacl: error = %v", err) - } - if len(c.pe) != 0 { - t.Errorf("errors encountered parsing getfacl output\n%s", errors.Join(c.pe...).Error()) - } - return c.val -} - -func respByCred(v []*getFAclResp, typ fAclType, cred int32) *getFAclResp { - j := -1 - for i, r := range v { - if r.typ == typ && r.cred == cred { - if j != -1 { - panic("invalid acl") - } - j = i - } - } - if j == -1 { - return nil - } - return v[j] -} |
