Merge pull request #644 from foostan/add_validation_of_deregistration

Validate ServiceID/CheckID when deregistering.
This commit is contained in:
Ryan Uber 2015-01-27 21:39:35 -08:00
commit 6d27dc3548
3 changed files with 29 additions and 0 deletions

View File

@ -637,6 +637,11 @@ func (a *Agent) RemoveService(serviceID string, persist bool) error {
consul.ConsulServiceID)
}
// Validate ServiceID
if serviceID == "" {
return fmt.Errorf("ServiceID missing")
}
// Remove service immeidately
a.state.RemoveService(serviceID)
@ -757,6 +762,11 @@ func (a *Agent) AddCheck(check *structs.HealthCheck, chkType *CheckType, persist
// RemoveCheck is used to remove a health check.
// The agent will make a best effort to ensure it is deregistered
func (a *Agent) RemoveCheck(checkID string, persist bool) error {
// Validate CheckID
if checkID == "" {
return fmt.Errorf("CheckID missing")
}
// Add to the local state for anti-entropy
a.state.RemoveCheck(checkID)

View File

@ -247,6 +247,11 @@ func TestAgent_RemoveService(t *testing.T) {
t.Fatalf("should have errored")
}
// Remove without an ID
if err := agent.RemoveService("", false); err == nil {
t.Fatalf("should have errored")
}
// Removing a service with a single check works
{
srv := &structs.NodeService{
@ -406,6 +411,11 @@ func TestAgent_RemoveCheck(t *testing.T) {
t.Fatalf("err: %v", err)
}
// Remove without an ID
if err := agent.RemoveCheck("", false); err == nil {
t.Fatalf("should have errored")
}
health := &structs.HealthCheck{
Node: "foo",
CheckID: "mem",

View File

@ -1,6 +1,7 @@
package agent
import (
"fmt"
"log"
"reflect"
"strings"
@ -408,6 +409,10 @@ func (l *localState) syncChanges() error {
// deleteService is used to delete a service from the server
func (l *localState) deleteService(id string) error {
if id == "" {
return fmt.Errorf("ServiceID missing")
}
req := structs.DeregisterRequest{
Datacenter: l.config.Datacenter,
Node: l.config.NodeName,
@ -425,6 +430,10 @@ func (l *localState) deleteService(id string) error {
// deleteCheck is used to delete a service from the server
func (l *localState) deleteCheck(id string) error {
if id == "" {
return fmt.Errorf("CheckID missing")
}
req := structs.DeregisterRequest{
Datacenter: l.config.Datacenter,
Node: l.config.NodeName,