diff --git a/agent/agent.go b/agent/agent.go index 3de22c6ae..391cb388e 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -3263,7 +3263,10 @@ func (a *Agent) cancelCheckMonitors(checkID structs.CheckID) { check.Stop() delete(a.checkH2PINGs, checkID) } - + if check, ok := a.checkAliases[checkID]; ok { + check.Stop() + delete(a.checkAliases, checkID) + } } // updateTTLCheck is used to update the status of a TTL check via the Agent API. diff --git a/agent/agent_test.go b/agent/agent_test.go index 1c7671f76..028df6276 100644 --- a/agent/agent_test.go +++ b/agent/agent_test.go @@ -1912,7 +1912,7 @@ node_name = "` + a.Config.NodeName + `" } } -func TestAgent_AddCheck_Alias(t *testing.T) { +func TestAgent_Alias_AddRemove(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") } @@ -1922,29 +1922,39 @@ func TestAgent_AddCheck_Alias(t *testing.T) { a := NewTestAgent(t, "") defer a.Shutdown() - health := &structs.HealthCheck{ - Node: "foo", - CheckID: "aliashealth", - Name: "Alias health check", - Status: api.HealthCritical, - } - chk := &structs.CheckType{ - AliasService: "foo", - } - err := a.AddCheck(health, chk, false, "", ConfigSourceLocal) - require.NoError(t, err) + cid := structs.NewCheckID("aliashealth", nil) - // Ensure we have a check mapping - sChk := requireCheckExists(t, a, "aliashealth") - require.Equal(t, api.HealthCritical, sChk.Status) + testutil.RunStep(t, "add check", func(t *testing.T) { + health := &structs.HealthCheck{ + Node: "foo", + CheckID: cid.ID, + Name: "Alias health check", + Status: api.HealthCritical, + } + chk := &structs.CheckType{ + AliasService: "foo", + } + err := a.AddCheck(health, chk, false, "", ConfigSourceLocal) + require.NoError(t, err) - chkImpl, ok := a.checkAliases[structs.NewCheckID("aliashealth", nil)] - require.True(t, ok, "missing aliashealth check") - require.Equal(t, "", chkImpl.RPCReq.Token) + sChk := requireCheckExists(t, a, cid.ID) + require.Equal(t, api.HealthCritical, sChk.Status) - cs := a.State.CheckState(structs.NewCheckID("aliashealth", nil)) - require.NotNil(t, cs) - require.Equal(t, "", cs.Token) + chkImpl, ok := a.checkAliases[cid] + require.True(t, ok, "missing aliashealth check") + require.Equal(t, "", chkImpl.RPCReq.Token) + + cs := a.State.CheckState(cid) + require.NotNil(t, cs) + require.Equal(t, "", cs.Token) + }) + + testutil.RunStep(t, "remove check", func(t *testing.T) { + require.NoError(t, a.RemoveCheck(cid, false)) + + requireCheckMissing(t, a, cid.ID) + requireCheckMissingMap(t, a.checkAliases, cid.ID) + }) } func TestAgent_AddCheck_Alias_setToken(t *testing.T) {