github.com/hashicorp/go-plugin@v1.6.0/server_unix_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 //go:build !windows 5 // +build !windows 6 7 package plugin 8 9 import ( 10 "fmt" 11 "os" 12 "os/user" 13 "runtime" 14 "syscall" 15 "testing" 16 ) 17 18 func TestUnixSocketGroupPermissions(t *testing.T) { 19 if runtime.GOOS == "windows" { 20 t.Skip("go-plugin doesn't support unix sockets on Windows") 21 } 22 23 group, err := user.LookupGroupId(fmt.Sprintf("%d", os.Getgid())) 24 if err != nil { 25 t.Fatal(err) 26 } 27 for name, tc := range map[string]struct { 28 group string 29 }{ 30 "as integer": {fmt.Sprintf("%d", os.Getgid())}, 31 "as name": {group.Name}, 32 } { 33 t.Run(name, func(t *testing.T) { 34 ln, err := serverListener_unix(UnixSocketConfig{Group: tc.group}) 35 if err != nil { 36 t.Fatal(err) 37 } 38 defer ln.Close() 39 40 info, err := os.Lstat(ln.Addr().String()) 41 if err != nil { 42 t.Fatal(err) 43 } 44 if info.Mode()&os.ModePerm != 0o660 { 45 t.Fatal(info.Mode()) 46 } 47 stat, ok := info.Sys().(*syscall.Stat_t) 48 if !ok { 49 t.Fatal() 50 } 51 if stat.Gid != uint32(os.Getgid()) { 52 t.Fatalf("Expected %d, but got %d", os.Getgid(), stat.Gid) 53 } 54 }) 55 } 56 }