commit 2f6fedb4b23cea27e74172a1a3718e869bb33478
parent 351b2e1570a66ae90ef2d2ce7c38e3818977a708
Author: Matsuda Kenji <info@mtkn.jp>
Date: Mon, 11 Sep 2023 08:29:21 +0900
add test for hasPerm()
Diffstat:
3 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/server.go b/server.go
@@ -361,7 +361,7 @@ func sWrite(s *Server, r *Req) {
}
file := fid.File
- if ok, err := hasPerm(file, fid.Uid, 0444); !ok || err != nil {
+ if ok, err := hasPerm(file, fid.Uid, AWRITE); !ok || err != nil {
fi, _ := file.Stat()
stat := fi.Sys().(*Stat)
log.Printf("uid: %s, %s\n", stat.Uid, fid.Uid)
diff --git a/uid.go b/uid.go
@@ -5,6 +5,7 @@ import (
"io/fs"
)
+// p is logical OR of AREAD, AWRITE, AEXEC.
func hasPerm(f File, uid string, p fs.FileMode) (bool, error) {
fi, err := f.Stat()
if err != nil {
diff --git a/uid_test.go b/uid_test.go
@@ -0,0 +1,44 @@
+package lib9p
+
+import (
+ "io"
+ "io/fs"
+ "testing"
+)
+
+type permFile struct {
+ mode FileMode
+ uid string
+ gid string
+}
+
+func (f permFile) Child() ([]File, error) { return nil, nil }
+func (f permFile) Stat() (*FileInfo, error) {
+ return &FileInfo{Stat: Stat{Mode: f.mode, Uid: f.uid, Gid: f.gid}}, nil
+}
+func (f permFile) Close() error { return nil }
+func (f permFile) Read(b []byte) (int, error) { return 0, io.EOF }
+
+func TestHasPerm(t *testing.T) {
+ tests := []struct {
+ file permFile
+ uid string
+ perm fs.FileMode
+ want bool
+ }{
+ {permFile{0777, "bocchi", "kessoku"}, "bocchi", 04, true},
+ }
+
+ for i, test := range tests {
+ got, err := hasPerm(test.file, test.uid, test.perm)
+ if err != nil {
+ t.Errorf("hasPerm: %v", err)
+ continue
+ }
+ if got != test.want {
+ t.Errorf("hasPerm(file[%d], %s, %O) == %t\n",
+ i, test.uid, test.perm, got)
+ continue
+ }
+ }
+}
+\ No newline at end of file