mirror of https://github.com/hashicorp/consul
104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: BUSL-1.1
|
||
|
|
||
|
package structs
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/consul/api"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestDeduplicate(t *testing.T) {
|
||
|
type testCase struct {
|
||
|
templatedPolicies ACLTemplatedPolicies
|
||
|
expectedCount int
|
||
|
}
|
||
|
tcases := map[string]testCase{
|
||
|
"multiple-of-the-same-template": {
|
||
|
templatedPolicies: ACLTemplatedPolicies{
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyServiceName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "api",
|
||
|
},
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyServiceName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "api",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
expectedCount: 1,
|
||
|
},
|
||
|
"separate-templates-with-matching-variables": {
|
||
|
templatedPolicies: ACLTemplatedPolicies{
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyNodeName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "api",
|
||
|
},
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyServiceName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "api",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
expectedCount: 2,
|
||
|
},
|
||
|
"separate-templates-with-multiple-matching-variables": {
|
||
|
templatedPolicies: ACLTemplatedPolicies{
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyServiceName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "api",
|
||
|
},
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyNodeName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "api",
|
||
|
},
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyNodeName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "web",
|
||
|
},
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyServiceName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "api",
|
||
|
},
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyDNSName,
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyServiceName,
|
||
|
TemplateVariables: &ACLTemplatedPolicyVariables{
|
||
|
Name: "web",
|
||
|
},
|
||
|
},
|
||
|
&ACLTemplatedPolicy{
|
||
|
TemplateName: api.ACLTemplatedPolicyDNSName,
|
||
|
},
|
||
|
},
|
||
|
expectedCount: 5,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for name, tcase := range tcases {
|
||
|
t.Run(name, func(t *testing.T) {
|
||
|
policies := tcase.templatedPolicies.Deduplicate()
|
||
|
|
||
|
require.Equal(t, tcase.expectedCount, len(policies))
|
||
|
})
|
||
|
}
|
||
|
}
|