mirror of
https://github.com/status-im/consul.git
synced 2025-01-09 21:35:52 +00:00
d68edcecf4
Now that testutil uses t.Cleanup to remove the directory the caller no longer has to manage the removal
167 lines
3.4 KiB
Go
167 lines
3.4 KiB
Go
package bindingruleread
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/consul/agent"
|
|
"github.com/hashicorp/consul/api"
|
|
"github.com/hashicorp/consul/testrpc"
|
|
"github.com/hashicorp/go-uuid"
|
|
"github.com/mitchellh/cli"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
// activate testing auth method
|
|
_ "github.com/hashicorp/consul/agent/consul/authmethod/testauth"
|
|
)
|
|
|
|
func TestBindingRuleReadCommand_noTabs(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if strings.ContainsRune(New(cli.NewMockUi()).Help(), '\t') {
|
|
t.Fatal("help has tabs")
|
|
}
|
|
}
|
|
|
|
func TestBindingRuleReadCommand(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := agent.NewTestAgent(t, `
|
|
primary_datacenter = "dc1"
|
|
acl {
|
|
enabled = true
|
|
tokens {
|
|
master = "root"
|
|
}
|
|
}`)
|
|
|
|
defer a.Shutdown()
|
|
testrpc.WaitForLeader(t, a.RPC, "dc1")
|
|
|
|
client := a.Client()
|
|
|
|
// create an auth method in advance
|
|
{
|
|
_, _, err := client.ACL().AuthMethodCreate(
|
|
&api.ACLAuthMethod{
|
|
Name: "test",
|
|
Type: "testing",
|
|
},
|
|
&api.WriteOptions{Token: "root"},
|
|
)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
createRule := func(t *testing.T) string {
|
|
rule, _, err := client.ACL().BindingRuleCreate(
|
|
&api.ACLBindingRule{
|
|
AuthMethod: "test",
|
|
Description: "test rule",
|
|
BindType: api.BindingRuleBindTypeService,
|
|
BindName: "test-${serviceaccount.name}",
|
|
Selector: "serviceaccount.namespace==default",
|
|
},
|
|
&api.WriteOptions{Token: "root"},
|
|
)
|
|
require.NoError(t, err)
|
|
return rule.ID
|
|
}
|
|
|
|
t.Run("id required", func(t *testing.T) {
|
|
ui := cli.NewMockUi()
|
|
cmd := New(ui)
|
|
|
|
args := []string{
|
|
"-http-addr=" + a.HTTPAddr(),
|
|
"-token=root",
|
|
}
|
|
|
|
code := cmd.Run(args)
|
|
require.Equal(t, code, 1)
|
|
require.Contains(t, ui.ErrorWriter.String(), "Must specify the -id parameter")
|
|
})
|
|
|
|
t.Run("read by id not found", func(t *testing.T) {
|
|
fakeID, err := uuid.GenerateUUID()
|
|
require.NoError(t, err)
|
|
|
|
ui := cli.NewMockUi()
|
|
cmd := New(ui)
|
|
|
|
args := []string{
|
|
"-http-addr=" + a.HTTPAddr(),
|
|
"-token=root",
|
|
"-id=" + fakeID,
|
|
}
|
|
|
|
code := cmd.Run(args)
|
|
require.Equal(t, code, 1)
|
|
require.Contains(t, ui.ErrorWriter.String(), "Binding rule not found with ID")
|
|
})
|
|
|
|
t.Run("read by id", func(t *testing.T) {
|
|
id := createRule(t)
|
|
|
|
ui := cli.NewMockUi()
|
|
cmd := New(ui)
|
|
|
|
args := []string{
|
|
"-http-addr=" + a.HTTPAddr(),
|
|
"-token=root",
|
|
"-id=" + id,
|
|
}
|
|
|
|
code := cmd.Run(args)
|
|
require.Equal(t, code, 0)
|
|
require.Empty(t, ui.ErrorWriter.String())
|
|
|
|
output := ui.OutputWriter.String()
|
|
require.Contains(t, output, fmt.Sprintf("test rule"))
|
|
require.Contains(t, output, id)
|
|
})
|
|
|
|
t.Run("read by id prefix", func(t *testing.T) {
|
|
id := createRule(t)
|
|
|
|
ui := cli.NewMockUi()
|
|
cmd := New(ui)
|
|
|
|
args := []string{
|
|
"-http-addr=" + a.HTTPAddr(),
|
|
"-token=root",
|
|
"-id=" + id[0:5],
|
|
}
|
|
|
|
code := cmd.Run(args)
|
|
require.Equal(t, code, 0)
|
|
require.Empty(t, ui.ErrorWriter.String())
|
|
|
|
output := ui.OutputWriter.String()
|
|
require.Contains(t, output, fmt.Sprintf("test rule"))
|
|
require.Contains(t, output, id)
|
|
})
|
|
|
|
t.Run("read by id json formatted", func(t *testing.T) {
|
|
id := createRule(t)
|
|
|
|
ui := cli.NewMockUi()
|
|
cmd := New(ui)
|
|
|
|
args := []string{
|
|
"-http-addr=" + a.HTTPAddr(),
|
|
"-token=root",
|
|
"-id=" + id,
|
|
"-format=json",
|
|
}
|
|
|
|
code := cmd.Run(args)
|
|
require.Equal(t, code, 0)
|
|
require.Empty(t, ui.ErrorWriter.String())
|
|
|
|
output := ui.OutputWriter.String()
|
|
require.Contains(t, output, fmt.Sprintf("test rule"))
|
|
require.Contains(t, output, id)
|
|
})
|
|
}
|