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.
 
 
 
 
 
 

66 lines
1.3 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package controller
import (
"testing"
"github.com/hashicorp/consul/internal/testing/golden"
"github.com/stretchr/testify/require"
)
func TestDependenciesGolden(t *testing.T) {
deps := Dependencies{
"t1": []string{"t2", "t3"},
"t2": []string{"t4"},
"t4": []string{"t1"},
}
mermaid := deps.ToMermaid()
expected := golden.Get(t, mermaid, "dependencies.golden")
require.Equal(t, expected, mermaid)
}
func TestValidateDependencies(t *testing.T) {
type testCase struct {
dependencies Dependencies
expectErr string
}
run := func(t *testing.T, tc testCase) {
err := tc.dependencies.validate()
if len(tc.expectErr) > 0 {
require.Contains(t, err.Error(), tc.expectErr)
} else {
require.NoError(t, err)
}
}
cases := map[string]testCase{
"empty": {
dependencies: nil,
},
"no circular dependencies": {
dependencies: Dependencies{
"t1": []string{"t2", "t3"},
"t2": []string{"t3"},
"t3": []string{"t4"},
"t4": nil,
},
},
"with circular dependency": {
dependencies: Dependencies{
"t1": []string{"t2", "t3"},
"t2": []string{"t1"},
},
expectErr: `circular dependency between "t1" and "t2"`,
},
}
for name, tc := range cases {
t.Run(name, func(t *testing.T) {
run(t, tc)
})
}
}