Make sure to generate UUIDs when services are registered without one
This makes the behavior line up with the docs and expected behavior
This commit is contained in:
parent
3d6068f648
commit
95291ec5ed
|
@ -8,9 +8,11 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
|
"github.com/hashicorp/consul/types"
|
||||||
"github.com/hashicorp/consul/testutil/retry"
|
"github.com/hashicorp/consul/testutil/retry"
|
||||||
"github.com/hashicorp/serf/coordinate"
|
"github.com/hashicorp/serf/coordinate"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCatalogRegister_Service_InvalidAddress(t *testing.T) {
|
func TestCatalogRegister_Service_InvalidAddress(t *testing.T) {
|
||||||
|
@ -109,6 +111,34 @@ func TestCatalogNodes(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCatalog_RegisterNoID(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
a := NewTestAgent(t.Name(), "")
|
||||||
|
defer a.Shutdown()
|
||||||
|
|
||||||
|
// Register node
|
||||||
|
args := &structs.RegisterRequest{
|
||||||
|
Datacenter: "dc1",
|
||||||
|
Node: "foo",
|
||||||
|
Address: "127.0.0.1",
|
||||||
|
}
|
||||||
|
|
||||||
|
var out struct{}
|
||||||
|
require.NoError(t, a.RPC("Catalog.Register", args, &out))
|
||||||
|
|
||||||
|
req, _ := http.NewRequest("GET", "/v1/catalog/node/foo", nil)
|
||||||
|
resp := httptest.NewRecorder()
|
||||||
|
obj, err := a.srv.CatalogNodeServices(resp, req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Verify an index is set
|
||||||
|
assertIndex(t, resp)
|
||||||
|
|
||||||
|
node := obj.(*structs.NodeServices)
|
||||||
|
|
||||||
|
require.NotEqual(t, types.NodeID(""), node.Node.ID)
|
||||||
|
}
|
||||||
|
|
||||||
func TestCatalogNodes_MetaFilter(t *testing.T) {
|
func TestCatalogNodes_MetaFilter(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
a := NewTestAgent(t.Name(), "")
|
a := NewTestAgent(t.Name(), "")
|
||||||
|
|
|
@ -37,7 +37,15 @@ func (c *Catalog) Register(args *structs.RegisterRequest, reply *struct{}) error
|
||||||
if _, err := uuid.ParseUUID(string(args.ID)); err != nil {
|
if _, err := uuid.ParseUUID(string(args.ID)); err != nil {
|
||||||
return fmt.Errorf("Bad node ID: %v", err)
|
return fmt.Errorf("Bad node ID: %v", err)
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
id, err := uuid.GenerateUUID()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to generate ID: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
args.ID = types.NodeID(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Fetch the ACL token, if any.
|
// Fetch the ACL token, if any.
|
||||||
rule, err := c.srv.resolveToken(args.Token)
|
rule, err := c.srv.resolveToken(args.Token)
|
||||||
|
|
Loading…
Reference in New Issue