Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

103 lines
2.5 KiB

// 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))
})
}
}