lib9p

Go 9P library.
Log | Files | Refs | LICENSE

commit a94586d0442ad25992734e01060383b53d1fb46f
parent df0311fb8e59f861c9192903ee3310d79cd70669
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu, 21 Dec 2023 13:11:01 +0900

fix test for plan9

Diffstat:
Mdiskfs/uid.go | 1+
Adiskfs/uid_plan9.go | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adiskfs/uid_plan9_test.go | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdiskfs/uid_test.go | 1+
4 files changed, 145 insertions(+), 0 deletions(-)

diff --git a/diskfs/uid.go b/diskfs/uid.go @@ -1,3 +1,4 @@ +//go:build unix || windows package diskfs import ( diff --git a/diskfs/uid_plan9.go b/diskfs/uid_plan9.go @@ -0,0 +1,55 @@ +//go:build plan9 +package diskfs + +import ( + "os/exec" + "os/user" + "strings" +) + +func isGroupLeader(group, uid string) bool { + usr, err := user.Lookup(uid) + if err != nil { + return false + } + cmd := exec.Command("rc", "-c", "whois "+usr.Username+" | awk -F: '{print }'") + b, err := cmd.Output() + if err != nil { + return false + } + groups := strings.Split(string(b), "\n") + groups = groups[:len(groups) - 1] + cmd = exec.Command("rc", "-c", "whois "+usr.Username+" | awk -F: '{print }'") + b, err = cmd.Output() + if err != nil { + return false + } + leaders := strings.Split(string(b), "\n") + leaders = leaders[:len(leaders) - 1] + for i := 0; i < len(groups); i++ { + if groups[i] == group && uid == leaders[i] { + return true + } + } + return false +} + +func isGroupMember(group, uid string) bool { + usr, err := user.Lookup(uid) + if err != nil { + return false + } + cmd := exec.Command("rc", "-c", "whois "+usr.Username+" | awk -F: '{print }'") + b, err := cmd.Output() + if err != nil { + return false + } + groups := strings.Split(string(b), "\n") + groups = groups[:len(groups) - 1] + for i := 0; i < len(groups); i++ { + if groups[i] == group { + return true + } + } + return false +} diff --git a/diskfs/uid_plan9_test.go b/diskfs/uid_plan9_test.go @@ -0,0 +1,88 @@ +//go:build plan9 +package diskfs + +import ( + "os/exec" + "os/user" + "strconv" + "strings" + "testing" +) + +func TestIsGroupLeader(t *testing.T) { + usr, err := user.Current() + if err != nil { + t.Fatalf("get current user: %v", err) + } + cmd := exec.Command("rc", "-c", "whois "+usr.Username+" | awk -F: '{print }'") + b, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + groups := strings.Split(string(b), "\n") + groups = groups[:len(groups) - 1] + cmd = exec.Command("rc", "-c", "whois "+usr.Username+" | awk -F: '{print }'") + b, err = cmd.Output() + if err != nil { + t.Fatal(err) + } + leaders := strings.Split(string(b), "\n") + leaders = leaders[:len(leaders) - 1] + tests := []struct { + name string + uid string + group string + want bool + }{} + for i, grp := range groups { + tests = append(tests, struct { + name string + uid string + group string + want bool + }{strconv.Itoa(i), usr.Username, grp, usr.Username == leaders[i]}) + } + for _, test := range tests { + got := isGroupLeader(test.group, test.uid) + if got != test.want { + t.Errorf("%s: isGroupLeader(%s, %s) = %t, want: %t", + test.name, test.group, test.uid, got, test.want) + } + } +} + +func TestIsGroupMember(t *testing.T) { + usr, err := user.Current() + if err != nil { + t.Fatalf("get current user: %v", err) + } + cmd := exec.Command("rc", "-c", "whois "+usr.Username+" | awk -F: '{print }'") + b, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + groups := strings.Split(string(b), "\n") + groups = groups[:len(groups) - 1] + tests := []struct { + name string + uid string + group string + want bool + }{ + } + for i, grp := range groups { + tests = append(tests, struct { + name string + uid string + group string + want bool + }{strconv.Itoa(i), usr.Username, grp, true}) + } + for _, test := range tests { + got := isGroupMember(test.group, test.uid) + if got != test.want { + t.Errorf("%s: isGroupMember(%s, %s) = %t, want: %t", + test.name, test.group, test.uid, got, test.want) + } + } +} diff --git a/diskfs/uid_test.go b/diskfs/uid_test.go @@ -1,3 +1,4 @@ +//go:build unix || windows package diskfs import (