package host import ( "fmt" "os" "path/filepath" "testing" "github.com/carlosframework/platform/internal/registry" ) // With generations on, the advisory does not dial the activator's own link // at a managed route's canonical path (the checked dial would call it a peer // mismatch every hour). Any other link, or a path that is not a link, is // probed as before. func TestSocketAdvisorySkipsTheActivatorsOwnLink(t *testing.T) { dir := t.TempDir() own := filepath.Join(dir, "own.sock") foreign := filepath.Join(dir, "foreign.sock") plain := filepath.Join(dir, "plain.sock") for path, target := range map[string]string{own: "/run/carlos/g/aaaaaaaaaaaa.3.sock", foreign: "/run/carlos/elsewhere.sock"} { if err := os.Symlink(target, path); err != nil { t.Fatal(err) } } routes := []registry.Route{ {Host: "own.example.com", Kind: "instance", Hibernate: true, Socket: own}, {Host: "foreign.example.com", Kind: "instance", Hibernate: true, Socket: foreign}, {Host: "plain.example.com", Kind: "instance", Hibernate: true, Socket: plain}, } appSocket := func(string) (string, bool) { return "/run/carlos/g/aaaaaaaaaaaa.3.sock", true } var probed []string serving := advisorySocketServing(routes, appSocket, func(sock string) bool { probed = append(probed, sock) return true }) if serving(own) { t.Fatal("the activator's own link was reported as served by a stray") } if !serving(foreign) || !serving(plain) { t.Fatal("a foreign link or a plain path was not probed") } if fmt.Sprint(probed) != fmt.Sprint([]string{foreign, plain}) { t.Fatalf("probed %v, want the foreign link and the plain path only", probed) } }