src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/daemon/activate_unix_test.go (about)

     1  //go:build unix
     2  
     3  package daemon
     4  
     5  import (
     6  	"io"
     7  	"os"
     8  	"os/user"
     9  	"testing"
    10  
    11  	"src.elv.sh/pkg/daemon/daemondefs"
    12  	"src.elv.sh/pkg/daemon/internal/api"
    13  	"src.elv.sh/pkg/must"
    14  )
    15  
    16  func TestActivate_InterruptsOutdatedServerAndSpawnsNewServer(t *testing.T) {
    17  	activated := 0
    18  	setupForActivate(t, func(name string, argv []string, attr *os.ProcAttr) error {
    19  		startServer(t, argv)
    20  		activated++
    21  		return nil
    22  	})
    23  	version := api.Version - 1
    24  	oldServer := startServerOpts(t, cli("sock", "db"), ServeOpts{Version: &version})
    25  
    26  	_, err := Activate(io.Discard,
    27  		&daemondefs.SpawnConfig{DbPath: "db", SockPath: "sock", RunDir: "."})
    28  	if err != nil {
    29  		t.Errorf("got error %v, want nil", err)
    30  	}
    31  	if activated != 1 {
    32  		t.Errorf("got activated %v times, want 1", activated)
    33  	}
    34  	oldServer.WaitQuit()
    35  }
    36  
    37  func TestActivate_FailsIfUnableToRemoveHangingSocket(t *testing.T) {
    38  	if u, err := user.Current(); err != nil || u.Uid == "0" {
    39  		t.Skip("current user is root or unknown")
    40  	}
    41  	activated := 0
    42  	setupForActivate(t, func(name string, argv []string, attr *os.ProcAttr) error {
    43  		activated++
    44  		return nil
    45  	})
    46  	must.MkdirAll("d")
    47  	makeHangingUnixSocket(t, "d/sock")
    48  	// Remove write permission so that removing d/sock will fail
    49  	os.Chmod("d", 0600)
    50  	defer os.Chmod("d", 0700)
    51  
    52  	_, err := Activate(io.Discard,
    53  		&daemondefs.SpawnConfig{DbPath: "db", SockPath: "d/sock", RunDir: "."})
    54  	if err == nil {
    55  		t.Errorf("got error nil, want non-nil")
    56  	}
    57  	if activated != 0 {
    58  		t.Errorf("got activated %v times, want 0", activated)
    59  	}
    60  }