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  }