|
|
@ -8,6 +8,7 @@ import ( |
|
|
|
"time" |
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/go-hclog" |
|
|
|
"github.com/hashicorp/go-hclog" |
|
|
|
|
|
|
|
"github.com/hashicorp/go-uuid" |
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
|
|
|
|
|
|
|
@ -791,23 +792,7 @@ func TestAgentAntiEntropy_Services_ACLDeny(t *testing.T) { |
|
|
|
defer a.Shutdown() |
|
|
|
defer a.Shutdown() |
|
|
|
testrpc.WaitForLeader(t, a.RPC, "dc1") |
|
|
|
testrpc.WaitForLeader(t, a.RPC, "dc1") |
|
|
|
|
|
|
|
|
|
|
|
// Create the ACL
|
|
|
|
token := createToken(t, a, testRegisterRules) |
|
|
|
arg := structs.ACLRequest{ |
|
|
|
|
|
|
|
Datacenter: "dc1", |
|
|
|
|
|
|
|
Op: structs.ACLSet, |
|
|
|
|
|
|
|
ACL: structs.ACL{ |
|
|
|
|
|
|
|
Name: "User token", |
|
|
|
|
|
|
|
Type: structs.ACLTokenTypeClient, |
|
|
|
|
|
|
|
Rules: testRegisterRules, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
WriteRequest: structs.WriteRequest{ |
|
|
|
|
|
|
|
Token: "root", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var token string |
|
|
|
|
|
|
|
if err := a.RPC("ACL.Apply", &arg, &token); err != nil { |
|
|
|
|
|
|
|
t.Fatalf("err: %v", err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create service (disallowed)
|
|
|
|
// Create service (disallowed)
|
|
|
|
srv1 := &structs.NodeService{ |
|
|
|
srv1 := &structs.NodeService{ |
|
|
@ -929,6 +914,40 @@ func TestAgentAntiEntropy_Services_ACLDeny(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type RPC interface { |
|
|
|
|
|
|
|
RPC(method string, args interface{}, reply interface{}) error |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func createToken(t *testing.T, rpc RPC, policyRules string) string { |
|
|
|
|
|
|
|
t.Helper() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reqPolicy := structs.ACLPolicySetRequest{ |
|
|
|
|
|
|
|
Datacenter: "dc1", |
|
|
|
|
|
|
|
Policy: structs.ACLPolicy{ |
|
|
|
|
|
|
|
Name: "the-policy", |
|
|
|
|
|
|
|
Rules: policyRules, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
WriteRequest: structs.WriteRequest{Token: "root"}, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
err := rpc.RPC("ACL.PolicySet", &reqPolicy, &structs.ACLPolicy{}) |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
token, err := uuid.GenerateUUID() |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reqToken := structs.ACLTokenSetRequest{ |
|
|
|
|
|
|
|
Datacenter: "dc1", |
|
|
|
|
|
|
|
ACLToken: structs.ACLToken{ |
|
|
|
|
|
|
|
SecretID: token, |
|
|
|
|
|
|
|
Policies: []structs.ACLTokenPolicyLink{{Name: "the-policy"}}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
WriteRequest: structs.WriteRequest{Token: "root"}, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
err = rpc.RPC("ACL.TokenSet", &reqToken, &structs.ACLToken{}) |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
return token |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func TestAgentAntiEntropy_Checks(t *testing.T) { |
|
|
|
func TestAgentAntiEntropy_Checks(t *testing.T) { |
|
|
|
if testing.Short() { |
|
|
|
if testing.Short() { |
|
|
|
t.Skip("too slow for testing.Short") |
|
|
|
t.Skip("too slow for testing.Short") |
|
|
@ -1222,23 +1241,7 @@ func TestAgentAntiEntropy_Checks_ACLDeny(t *testing.T) { |
|
|
|
|
|
|
|
|
|
|
|
testrpc.WaitForLeader(t, a.RPC, dc) |
|
|
|
testrpc.WaitForLeader(t, a.RPC, dc) |
|
|
|
|
|
|
|
|
|
|
|
// Create the ACL
|
|
|
|
token := createToken(t, a, testRegisterRules) |
|
|
|
arg := structs.ACLRequest{ |
|
|
|
|
|
|
|
Datacenter: dc, |
|
|
|
|
|
|
|
Op: structs.ACLSet, |
|
|
|
|
|
|
|
ACL: structs.ACL{ |
|
|
|
|
|
|
|
Name: "User token", |
|
|
|
|
|
|
|
Type: structs.ACLTokenTypeClient, |
|
|
|
|
|
|
|
Rules: testRegisterRules, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
WriteRequest: structs.WriteRequest{ |
|
|
|
|
|
|
|
Token: "root", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var token string |
|
|
|
|
|
|
|
if err := a.RPC("ACL.Apply", &arg, &token); err != nil { |
|
|
|
|
|
|
|
t.Fatalf("err: %v", err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create services using the root token
|
|
|
|
// Create services using the root token
|
|
|
|
srv1 := &structs.NodeService{ |
|
|
|
srv1 := &structs.NodeService{ |
|
|
|