// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: BUSL-1.1 package intention import ( "testing" "github.com/hashicorp/consul/agent" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/testrpc" "github.com/stretchr/testify/require" ) func TestGetFromArgs(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") } t.Parallel() a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() testrpc.WaitForTestAgent(t, a.RPC, "dc1") // Create some intentions. //nolint:staticcheck id0, _, err := client.Connect().IntentionCreate(&api.Intention{ SourceName: "a", DestinationName: "b", Action: api.IntentionActionAllow, }, nil) require.NoError(t, err) // Ensure "y" is L7 _, _, err = client.ConfigEntries().Set(&api.ServiceConfigEntry{ Kind: api.ServiceDefaults, Name: "y", Protocol: "http", }, nil) require.NoError(t, err) _, err = client.Connect().IntentionUpsert(&api.Intention{ SourceName: "x", DestinationName: "y", Permissions: []*api.IntentionPermission{ { Action: api.IntentionActionAllow, HTTP: &api.IntentionHTTPPermission{ PathExact: "/foo", }, }, }, }, nil) require.NoError(t, err) t.Run("l4 intention", func(t *testing.T) { t.Run("one arg", func(t *testing.T) { ixn, err := GetFromArgs(client, []string{id0}) require.NoError(t, err) require.Equal(t, id0, ixn.ID) require.Equal(t, "a", ixn.SourceName) require.Equal(t, "b", ixn.DestinationName) require.Equal(t, api.IntentionActionAllow, ixn.Action) require.Empty(t, ixn.Permissions) }) t.Run("two args", func(t *testing.T) { ixn, err := GetFromArgs(client, []string{"a", "b"}) require.NoError(t, err) require.Equal(t, id0, ixn.ID) require.Equal(t, "a", ixn.SourceName) require.Equal(t, "b", ixn.DestinationName) require.Equal(t, api.IntentionActionAllow, ixn.Action) require.Empty(t, ixn.Permissions) }) }) t.Run("l7 intention", func(t *testing.T) { t.Run("two args", func(t *testing.T) { ixn, err := GetFromArgs(client, []string{"x", "y"}) require.NoError(t, err) require.Empty(t, ixn.ID) require.Equal(t, "x", ixn.SourceName) require.Equal(t, "y", ixn.DestinationName) require.Empty(t, ixn.Action) require.Equal(t, []*api.IntentionPermission{{ Action: api.IntentionActionAllow, HTTP: &api.IntentionHTTPPermission{ PathExact: "/foo", }, }}, ixn.Permissions) }) }) t.Run("missing intention", func(t *testing.T) { t.Run("one arg", func(t *testing.T) { fakeID := "59208cab-b431-422e-87dc-290b18513082" _, err := GetFromArgs(client, []string{fakeID}) require.Error(t, err) }) t.Run("two args", func(t *testing.T) { _, err := GetFromArgs(client, []string{"c", "d"}) require.Error(t, err) }) }) }