lib9p

Go 9P library.
Log | Files | Refs

commit 2f6fedb4b23cea27e74172a1a3718e869bb33478
parent 351b2e1570a66ae90ef2d2ce7c38e3818977a708
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Mon, 11 Sep 2023 08:29:21 +0900

add test for hasPerm()

Diffstat:
Mserver.go | 2+-
Muid.go | 1+
Auid_test.go | 45+++++++++++++++++++++++++++++++++++++++++++++
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