commit a94586d0442ad25992734e01060383b53d1fb46f
parent df0311fb8e59f861c9192903ee3310d79cd70669
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 21 Dec 2023 13:11:01 +0900
fix test for plan9
Diffstat:
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 (