state: Remove unnecessary entMeta arg to EnsureConfigEntry
This commit is contained in:
parent
d2939d1c9a
commit
f929a7117e
|
@ -5,12 +5,13 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/acl"
|
"github.com/hashicorp/consul/acl"
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
"github.com/hashicorp/consul/sdk/testutil/retry"
|
"github.com/hashicorp/consul/sdk/testutil/retry"
|
||||||
"github.com/hashicorp/consul/testrpc"
|
"github.com/hashicorp/consul/testrpc"
|
||||||
msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConfigEntry_Apply(t *testing.T) {
|
func TestConfigEntry_Apply(t *testing.T) {
|
||||||
|
@ -253,7 +254,7 @@ func TestConfigEntry_Get(t *testing.T) {
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}
|
}
|
||||||
state := s1.fsm.State()
|
state := s1.fsm.State()
|
||||||
require.NoError(state.EnsureConfigEntry(1, entry, nil))
|
require.NoError(state.EnsureConfigEntry(1, entry))
|
||||||
|
|
||||||
args := structs.ConfigEntryQuery{
|
args := structs.ConfigEntryQuery{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
|
@ -316,11 +317,11 @@ operator = "read"
|
||||||
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
||||||
Kind: structs.ProxyDefaults,
|
Kind: structs.ProxyDefaults,
|
||||||
Name: structs.ProxyConfigGlobal,
|
Name: structs.ProxyConfigGlobal,
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
// This should fail since we don't have write perms for the "db" service.
|
// This should fail since we don't have write perms for the "db" service.
|
||||||
args := structs.ConfigEntryQuery{
|
args := structs.ConfigEntryQuery{
|
||||||
|
@ -374,8 +375,8 @@ func TestConfigEntry_List(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(state.EnsureConfigEntry(1, expected.Entries[0], nil))
|
require.NoError(state.EnsureConfigEntry(1, expected.Entries[0]))
|
||||||
require.NoError(state.EnsureConfigEntry(2, expected.Entries[1], nil))
|
require.NoError(state.EnsureConfigEntry(2, expected.Entries[1]))
|
||||||
|
|
||||||
args := structs.ConfigEntryQuery{
|
args := structs.ConfigEntryQuery{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
|
@ -428,10 +429,10 @@ func TestConfigEntry_ListAll(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, state.EnsureConfigEntry(1, entries[0], nil))
|
require.NoError(t, state.EnsureConfigEntry(1, entries[0]))
|
||||||
require.NoError(t, state.EnsureConfigEntry(2, entries[1], nil))
|
require.NoError(t, state.EnsureConfigEntry(2, entries[1]))
|
||||||
require.NoError(t, state.EnsureConfigEntry(3, entries[2], nil))
|
require.NoError(t, state.EnsureConfigEntry(3, entries[2]))
|
||||||
require.NoError(t, state.EnsureConfigEntry(4, entries[3], nil))
|
require.NoError(t, state.EnsureConfigEntry(4, entries[3]))
|
||||||
|
|
||||||
t.Run("all kinds", func(t *testing.T) {
|
t.Run("all kinds", func(t *testing.T) {
|
||||||
args := structs.ConfigEntryListAllRequest{
|
args := structs.ConfigEntryListAllRequest{
|
||||||
|
@ -529,15 +530,15 @@ operator = "read"
|
||||||
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
||||||
Kind: structs.ProxyDefaults,
|
Kind: structs.ProxyDefaults,
|
||||||
Name: structs.ProxyConfigGlobal,
|
Name: structs.ProxyConfigGlobal,
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "db",
|
Name: "db",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
// This should filter out the "db" service since we don't have permissions for it.
|
// This should filter out the "db" service since we don't have permissions for it.
|
||||||
args := structs.ConfigEntryQuery{
|
args := structs.ConfigEntryQuery{
|
||||||
|
@ -614,15 +615,15 @@ operator = "read"
|
||||||
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
||||||
Kind: structs.ProxyDefaults,
|
Kind: structs.ProxyDefaults,
|
||||||
Name: structs.ProxyConfigGlobal,
|
Name: structs.ProxyConfigGlobal,
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "db",
|
Name: "db",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
// This should filter out the "db" service since we don't have permissions for it.
|
// This should filter out the "db" service since we don't have permissions for it.
|
||||||
args := structs.ConfigEntryListAllRequest{
|
args := structs.ConfigEntryListAllRequest{
|
||||||
|
@ -687,7 +688,7 @@ func TestConfigEntry_Delete(t *testing.T) {
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}
|
}
|
||||||
state := s1.fsm.State()
|
state := s1.fsm.State()
|
||||||
require.NoError(t, state.EnsureConfigEntry(1, entry, nil))
|
require.NoError(t, state.EnsureConfigEntry(1, entry))
|
||||||
|
|
||||||
// Verify it's there.
|
// Verify it's there.
|
||||||
_, existing, err := state.ConfigEntry(nil, structs.ServiceDefaults, "foo", nil)
|
_, existing, err := state.ConfigEntry(nil, structs.ServiceDefaults, "foo", nil)
|
||||||
|
@ -773,11 +774,11 @@ operator = "write"
|
||||||
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
||||||
Kind: structs.ProxyDefaults,
|
Kind: structs.ProxyDefaults,
|
||||||
Name: structs.ProxyConfigGlobal,
|
Name: structs.ProxyConfigGlobal,
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
// This should fail since we don't have write perms for the "db" service.
|
// This should fail since we don't have write perms for the "db" service.
|
||||||
args := structs.ConfigEntryRequest{
|
args := structs.ConfigEntryRequest{
|
||||||
|
@ -848,17 +849,17 @@ func TestConfigEntry_ResolveServiceConfig(t *testing.T) {
|
||||||
Config: map[string]interface{}{
|
Config: map[string]interface{}{
|
||||||
"foo": 1,
|
"foo": 1,
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "bar",
|
Name: "bar",
|
||||||
Protocol: "grpc",
|
Protocol: "grpc",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
args := structs.ServiceConfigRequest{
|
args := structs.ServiceConfigRequest{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
|
@ -918,17 +919,17 @@ func TestConfigEntry_ResolveServiceConfig_Blocking(t *testing.T) {
|
||||||
Config: map[string]interface{}{
|
Config: map[string]interface{}{
|
||||||
"global": 1,
|
"global": 1,
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
Protocol: "grpc",
|
Protocol: "grpc",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "bar",
|
Name: "bar",
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
var index uint64
|
var index uint64
|
||||||
|
|
||||||
|
@ -1084,24 +1085,24 @@ func TestConfigEntry_ResolveServiceConfig_UpstreamProxyDefaultsProtocol(t *testi
|
||||||
Config: map[string]interface{}{
|
Config: map[string]interface{}{
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "bar",
|
Name: "bar",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "other",
|
Name: "other",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "alreadyprotocol",
|
Name: "alreadyprotocol",
|
||||||
Protocol: "grpc",
|
Protocol: "grpc",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
args := structs.ServiceConfigRequest{
|
args := structs.ServiceConfigRequest{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
|
@ -1158,7 +1159,7 @@ func TestConfigEntry_ResolveServiceConfig_ProxyDefaultsProtocol_UsedForAllUpstre
|
||||||
Config: map[string]interface{}{
|
Config: map[string]interface{}{
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
args := structs.ServiceConfigRequest{
|
args := structs.ServiceConfigRequest{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
|
@ -1264,15 +1265,15 @@ operator = "write"
|
||||||
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
require.NoError(state.EnsureConfigEntry(1, &structs.ProxyConfigEntry{
|
||||||
Kind: structs.ProxyDefaults,
|
Kind: structs.ProxyDefaults,
|
||||||
Name: structs.ProxyConfigGlobal,
|
Name: structs.ProxyConfigGlobal,
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(2, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}, nil))
|
}))
|
||||||
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
require.NoError(state.EnsureConfigEntry(3, &structs.ServiceConfigEntry{
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "db",
|
Name: "db",
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
// This should fail since we don't have write perms for the "db" service.
|
// This should fail since we don't have write perms for the "db" service.
|
||||||
args := structs.ServiceConfigRequest{
|
args := structs.ServiceConfigRequest{
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
|
|
||||||
"github.com/armon/go-metrics"
|
"github.com/armon/go-metrics"
|
||||||
"github.com/armon/go-metrics/prometheus"
|
"github.com/armon/go-metrics/prometheus"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/agent/consul/state"
|
"github.com/hashicorp/consul/agent/consul/state"
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
"github.com/hashicorp/consul/api"
|
"github.com/hashicorp/consul/api"
|
||||||
|
@ -575,7 +576,7 @@ func (c *FSM) applyConfigEntryOperation(buf []byte, index uint64) interface{} {
|
||||||
case structs.ConfigEntryUpsertCAS:
|
case structs.ConfigEntryUpsertCAS:
|
||||||
defer metrics.MeasureSinceWithLabels([]string{"fsm", "config_entry", req.Entry.GetKind()}, time.Now(),
|
defer metrics.MeasureSinceWithLabels([]string{"fsm", "config_entry", req.Entry.GetKind()}, time.Now(),
|
||||||
[]metrics.Label{{Name: "op", Value: "upsert"}})
|
[]metrics.Label{{Name: "op", Value: "upsert"}})
|
||||||
updated, err := c.state.EnsureConfigEntryCAS(index, req.Entry.GetRaftIndex().ModifyIndex, req.Entry, req.Entry.GetEnterpriseMeta())
|
updated, err := c.state.EnsureConfigEntryCAS(index, req.Entry.GetRaftIndex().ModifyIndex, req.Entry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -583,7 +584,7 @@ func (c *FSM) applyConfigEntryOperation(buf []byte, index uint64) interface{} {
|
||||||
case structs.ConfigEntryUpsert:
|
case structs.ConfigEntryUpsert:
|
||||||
defer metrics.MeasureSinceWithLabels([]string{"fsm", "config_entry", req.Entry.GetKind()}, time.Now(),
|
defer metrics.MeasureSinceWithLabels([]string{"fsm", "config_entry", req.Entry.GetKind()}, time.Now(),
|
||||||
[]metrics.Label{{Name: "op", Value: "upsert"}})
|
[]metrics.Label{{Name: "op", Value: "upsert"}})
|
||||||
if err := c.state.EnsureConfigEntry(index, req.Entry, req.Entry.GetEnterpriseMeta()); err != nil {
|
if err := c.state.EnsureConfigEntry(index, req.Entry); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -5,6 +5,10 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/hashicorp/go-msgpack/codec"
|
||||||
|
"github.com/hashicorp/go-raftchunking"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/acl"
|
"github.com/hashicorp/consul/acl"
|
||||||
"github.com/hashicorp/consul/agent/connect"
|
"github.com/hashicorp/consul/agent/connect"
|
||||||
"github.com/hashicorp/consul/agent/consul/state"
|
"github.com/hashicorp/consul/agent/consul/state"
|
||||||
|
@ -12,9 +16,6 @@ import (
|
||||||
"github.com/hashicorp/consul/api"
|
"github.com/hashicorp/consul/api"
|
||||||
"github.com/hashicorp/consul/lib/stringslice"
|
"github.com/hashicorp/consul/lib/stringslice"
|
||||||
"github.com/hashicorp/consul/sdk/testutil"
|
"github.com/hashicorp/consul/sdk/testutil"
|
||||||
"github.com/hashicorp/go-msgpack/codec"
|
|
||||||
"github.com/hashicorp/go-raftchunking"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFSM_SnapshotRestore_OSS(t *testing.T) {
|
func TestFSM_SnapshotRestore_OSS(t *testing.T) {
|
||||||
|
@ -226,8 +227,8 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) {
|
||||||
Kind: structs.ProxyDefaults,
|
Kind: structs.ProxyDefaults,
|
||||||
Name: "global",
|
Name: "global",
|
||||||
}
|
}
|
||||||
require.NoError(t, fsm.state.EnsureConfigEntry(18, serviceConfig, structs.DefaultEnterpriseMeta()))
|
require.NoError(t, fsm.state.EnsureConfigEntry(18, serviceConfig))
|
||||||
require.NoError(t, fsm.state.EnsureConfigEntry(19, proxyConfig, structs.DefaultEnterpriseMeta()))
|
require.NoError(t, fsm.state.EnsureConfigEntry(19, proxyConfig))
|
||||||
|
|
||||||
ingress := &structs.IngressGatewayConfigEntry{
|
ingress := &structs.IngressGatewayConfigEntry{
|
||||||
Kind: structs.IngressGateway,
|
Kind: structs.IngressGateway,
|
||||||
|
@ -244,7 +245,7 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, fsm.state.EnsureConfigEntry(20, ingress, structs.DefaultEnterpriseMeta()))
|
require.NoError(t, fsm.state.EnsureConfigEntry(20, ingress))
|
||||||
_, gatewayServices, err := fsm.state.GatewayServices(nil, "ingress", structs.DefaultEnterpriseMeta())
|
_, gatewayServices, err := fsm.state.GatewayServices(nil, "ingress", structs.DefaultEnterpriseMeta())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@ -416,7 +417,7 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, fsm.state.EnsureConfigEntry(26, serviceIxn, structs.DefaultEnterpriseMeta()))
|
require.NoError(t, fsm.state.EnsureConfigEntry(26, serviceIxn))
|
||||||
|
|
||||||
// Snapshot
|
// Snapshot
|
||||||
snap, err := fsm.Snapshot()
|
snap, err := fsm.Snapshot()
|
||||||
|
|
|
@ -2178,7 +2178,7 @@ func TestStateStore_ConnectServiceNodes_Gateways(t *testing.T) {
|
||||||
Name: "db",
|
Name: "db",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(watchFired(ws))
|
assert.True(watchFired(ws))
|
||||||
|
|
||||||
// Read everything back.
|
// Read everything back.
|
||||||
|
@ -3644,7 +3644,7 @@ func TestStateStore_CheckConnectServiceNodes_Gateways(t *testing.T) {
|
||||||
Name: "db",
|
Name: "db",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(watchFired(ws))
|
assert.True(watchFired(ws))
|
||||||
|
|
||||||
ws = memdb.NewWatchSet()
|
ws = memdb.NewWatchSet()
|
||||||
|
@ -4528,7 +4528,7 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) {
|
||||||
Name: "api",
|
Name: "api",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
// Read everything back.
|
// Read everything back.
|
||||||
|
@ -4572,7 +4572,7 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) {
|
||||||
Name: "api",
|
Name: "api",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.False(t, watchFired(ws))
|
assert.False(t, watchFired(ws))
|
||||||
|
|
||||||
idx, out, err = s.GatewayServices(ws, "gateway", nil)
|
idx, out, err = s.GatewayServices(ws, "gateway", nil)
|
||||||
|
@ -4625,7 +4625,7 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) {
|
||||||
SNI: "my-alt-domain",
|
SNI: "my-alt-domain",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
// Read everything back.
|
// Read everything back.
|
||||||
|
@ -4756,7 +4756,7 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) {
|
||||||
Name: "db",
|
Name: "db",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
idx, out, err = s.GatewayServices(ws, "gateway", nil)
|
idx, out, err = s.GatewayServices(ws, "gateway", nil)
|
||||||
|
@ -4787,7 +4787,7 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) {
|
||||||
Name: "*",
|
Name: "*",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
ws = memdb.NewWatchSet()
|
ws = memdb.NewWatchSet()
|
||||||
idx, out, err = s.GatewayServices(ws, "gateway2", nil)
|
idx, out, err = s.GatewayServices(ws, "gateway2", nil)
|
||||||
|
@ -4862,7 +4862,7 @@ func TestStateStore_GatewayServices_ServiceDeletion(t *testing.T) {
|
||||||
CAFile: "my_ca.pem",
|
CAFile: "my_ca.pem",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
// Listing with no results returns an empty list.
|
// Listing with no results returns an empty list.
|
||||||
|
@ -4881,7 +4881,7 @@ func TestStateStore_GatewayServices_ServiceDeletion(t *testing.T) {
|
||||||
Name: "*",
|
Name: "*",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
// Read everything back for first gateway.
|
// Read everything back for first gateway.
|
||||||
|
@ -5299,7 +5299,7 @@ func TestStateStore_GatewayServices_Ingress(t *testing.T) {
|
||||||
_, _, err := s.GatewayServices(ws, "ingress1", nil)
|
_, _, err := s.GatewayServices(ws, "ingress1", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Nil(t, s.EnsureConfigEntry(20, ingress1, nil))
|
require.Nil(t, s.EnsureConfigEntry(20, ingress1))
|
||||||
require.False(t, watchFired(ws))
|
require.False(t, watchFired(ws))
|
||||||
|
|
||||||
expected := structs.GatewayServices{
|
expected := structs.GatewayServices{
|
||||||
|
@ -5344,7 +5344,7 @@ func TestStateStore_GatewayServices_Ingress(t *testing.T) {
|
||||||
_, _, err := s.GatewayServices(ws, "ingress1", nil)
|
_, _, err := s.GatewayServices(ws, "ingress1", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Nil(t, s.EnsureConfigEntry(20, ingress1, nil))
|
require.Nil(t, s.EnsureConfigEntry(20, ingress1))
|
||||||
require.True(t, watchFired(ws))
|
require.True(t, watchFired(ws))
|
||||||
|
|
||||||
idx, results, err := s.GatewayServices(ws, "ingress1", nil)
|
idx, results, err := s.GatewayServices(ws, "ingress1", nil)
|
||||||
|
@ -5437,7 +5437,7 @@ func TestStateStore_GatewayServices_IngressProtocolFiltering(t *testing.T) {
|
||||||
testRegisterNode(t, s, 0, "node1")
|
testRegisterNode(t, s, 0, "node1")
|
||||||
testRegisterService(t, s, 1, "node1", "service1")
|
testRegisterService(t, s, 1, "node1", "service1")
|
||||||
testRegisterService(t, s, 2, "node1", "service2")
|
testRegisterService(t, s, 2, "node1", "service2")
|
||||||
assert.NoError(t, s.EnsureConfigEntry(4, ingress1, nil))
|
assert.NoError(t, s.EnsureConfigEntry(4, ingress1))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("no services from default tcp protocol", func(t *testing.T) {
|
t.Run("no services from default tcp protocol", func(t *testing.T) {
|
||||||
|
@ -5470,7 +5470,7 @@ func TestStateStore_GatewayServices_IngressProtocolFiltering(t *testing.T) {
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(5, svcDefaults, nil))
|
assert.NoError(t, s.EnsureConfigEntry(5, svcDefaults))
|
||||||
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
require.Equal(uint64(5), idx)
|
require.Equal(uint64(5), idx)
|
||||||
|
@ -5513,7 +5513,7 @@ func TestStateStore_GatewayServices_IngressProtocolFiltering(t *testing.T) {
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(6, proxyDefaults, nil))
|
assert.NoError(t, s.EnsureConfigEntry(6, proxyDefaults))
|
||||||
|
|
||||||
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -5543,7 +5543,7 @@ func TestStateStore_GatewayServices_IngressProtocolFiltering(t *testing.T) {
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Protocol: "grpc",
|
Protocol: "grpc",
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(7, svcDefaults, nil))
|
assert.NoError(t, s.EnsureConfigEntry(7, svcDefaults))
|
||||||
|
|
||||||
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -5583,7 +5583,7 @@ func TestStateStore_GatewayServices_IngressProtocolFiltering(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(8, ingress1, nil))
|
assert.NoError(t, s.EnsureConfigEntry(8, ingress1))
|
||||||
|
|
||||||
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
idx, results, err := s.GatewayServices(nil, "ingress1", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -5622,7 +5622,7 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(11, proxyDefaults, nil))
|
assert.NoError(t, s.EnsureConfigEntry(11, proxyDefaults))
|
||||||
|
|
||||||
// Register some ingress config entries.
|
// Register some ingress config entries.
|
||||||
wildcardIngress := &structs.IngressGatewayConfigEntry{
|
wildcardIngress := &structs.IngressGatewayConfigEntry{
|
||||||
|
@ -5640,7 +5640,7 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(12, wildcardIngress, nil))
|
assert.NoError(t, s.EnsureConfigEntry(12, wildcardIngress))
|
||||||
|
|
||||||
ingress1 := &structs.IngressGatewayConfigEntry{
|
ingress1 := &structs.IngressGatewayConfigEntry{
|
||||||
Kind: "ingress-gateway",
|
Kind: "ingress-gateway",
|
||||||
|
@ -5667,7 +5667,7 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(13, ingress1, nil))
|
assert.NoError(t, s.EnsureConfigEntry(13, ingress1))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
ingress2 := &structs.IngressGatewayConfigEntry{
|
ingress2 := &structs.IngressGatewayConfigEntry{
|
||||||
|
@ -5685,7 +5685,7 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(14, ingress2, nil))
|
assert.NoError(t, s.EnsureConfigEntry(14, ingress2))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
ingress3 := &structs.IngressGatewayConfigEntry{
|
ingress3 := &structs.IngressGatewayConfigEntry{
|
||||||
|
@ -5712,7 +5712,7 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(15, ingress3, nil))
|
assert.NoError(t, s.EnsureConfigEntry(15, ingress3))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
nothingIngress := &structs.IngressGatewayConfigEntry{
|
nothingIngress := &structs.IngressGatewayConfigEntry{
|
||||||
|
@ -5720,7 +5720,7 @@ func setupIngressState(t *testing.T, s *Store) memdb.WatchSet {
|
||||||
Name: "nothingIngress",
|
Name: "nothingIngress",
|
||||||
Listeners: []structs.IngressListener{},
|
Listeners: []structs.IngressListener{},
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(16, nothingIngress, nil))
|
assert.NoError(t, s.EnsureConfigEntry(16, nothingIngress))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
return ws
|
return ws
|
||||||
|
@ -5788,7 +5788,7 @@ func TestStateStore_DumpGatewayServices(t *testing.T) {
|
||||||
SNI: "my-alt-domain",
|
SNI: "my-alt-domain",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
// Read everything back.
|
// Read everything back.
|
||||||
|
@ -5849,7 +5849,7 @@ func TestStateStore_DumpGatewayServices(t *testing.T) {
|
||||||
SNI: "my-alt-domain",
|
SNI: "my-alt-domain",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.False(t, watchFired(ws))
|
assert.False(t, watchFired(ws))
|
||||||
|
|
||||||
idx, out, err := s.DumpGatewayServices(ws)
|
idx, out, err := s.DumpGatewayServices(ws)
|
||||||
|
@ -5984,7 +5984,7 @@ func TestStateStore_DumpGatewayServices(t *testing.T) {
|
||||||
Name: "db",
|
Name: "db",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
idx, out, err := s.DumpGatewayServices(ws)
|
idx, out, err := s.DumpGatewayServices(ws)
|
||||||
|
@ -6013,7 +6013,7 @@ func TestStateStore_DumpGatewayServices(t *testing.T) {
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}
|
}
|
||||||
assert.NoError(t, s.EnsureConfigEntry(25, svcDefault, nil))
|
assert.NoError(t, s.EnsureConfigEntry(25, svcDefault))
|
||||||
|
|
||||||
// Associate gateway with db and api
|
// Associate gateway with db and api
|
||||||
assert.Nil(t, s.EnsureConfigEntry(26, &structs.IngressGatewayConfigEntry{
|
assert.Nil(t, s.EnsureConfigEntry(26, &structs.IngressGatewayConfigEntry{
|
||||||
|
@ -6040,7 +6040,7 @@ func TestStateStore_DumpGatewayServices(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
// Read everything back.
|
// Read everything back.
|
||||||
|
@ -6814,7 +6814,7 @@ func TestCatalog_upstreamsFromRegistration_Ingress(t *testing.T) {
|
||||||
Config: map[string]interface{}{
|
Config: map[string]interface{}{
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
defaultMeta := structs.DefaultEnterpriseMeta()
|
defaultMeta := structs.DefaultEnterpriseMeta()
|
||||||
ingress := structs.NewServiceName("ingress", defaultMeta)
|
ingress := structs.NewServiceName("ingress", defaultMeta)
|
||||||
|
@ -6846,7 +6846,7 @@ func TestCatalog_upstreamsFromRegistration_Ingress(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
ws = memdb.NewWatchSet()
|
ws = memdb.NewWatchSet()
|
||||||
|
@ -6881,7 +6881,7 @@ func TestCatalog_upstreamsFromRegistration_Ingress(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
ws = memdb.NewWatchSet()
|
ws = memdb.NewWatchSet()
|
||||||
|
@ -6915,7 +6915,7 @@ func TestCatalog_upstreamsFromRegistration_Ingress(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
ws = memdb.NewWatchSet()
|
ws = memdb.NewWatchSet()
|
||||||
|
@ -6978,7 +6978,7 @@ func TestCatalog_upstreamsFromRegistration_Ingress(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
assert.True(t, watchFired(ws))
|
assert.True(t, watchFired(ws))
|
||||||
|
|
||||||
ws = memdb.NewWatchSet()
|
ws = memdb.NewWatchSet()
|
||||||
|
@ -7021,7 +7021,7 @@ func TestCatalog_cleanupGatewayWildcards_panic(t *testing.T) {
|
||||||
Config: map[string]interface{}{
|
Config: map[string]interface{}{
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
defaultMeta := structs.DefaultEnterpriseMeta()
|
defaultMeta := structs.DefaultEnterpriseMeta()
|
||||||
|
|
||||||
|
@ -7035,7 +7035,7 @@ func TestCatalog_cleanupGatewayWildcards_panic(t *testing.T) {
|
||||||
EnterpriseMeta: *defaultMeta,
|
EnterpriseMeta: *defaultMeta,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
require.NoError(t, s.EnsureConfigEntry(3, &structs.IngressGatewayConfigEntry{
|
require.NoError(t, s.EnsureConfigEntry(3, &structs.IngressGatewayConfigEntry{
|
||||||
Kind: "ingress-gateway",
|
Kind: "ingress-gateway",
|
||||||
|
@ -7052,7 +7052,7 @@ func TestCatalog_cleanupGatewayWildcards_panic(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
// Register two services that share a prefix, both will be covered by gateway wildcards above
|
// Register two services that share a prefix, both will be covered by gateway wildcards above
|
||||||
api := structs.NodeService{
|
api := structs.NodeService{
|
||||||
|
@ -7195,7 +7195,7 @@ func TestCatalog_DownstreamsForService(t *testing.T) {
|
||||||
|
|
||||||
for _, entry := range tc.entries {
|
for _, entry := range tc.entries {
|
||||||
require.NoError(t, entry.Normalize())
|
require.NoError(t, entry.Normalize())
|
||||||
require.NoError(t, s.EnsureConfigEntry(i, entry, nil))
|
require.NoError(t, s.EnsureConfigEntry(i, entry))
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7300,7 +7300,7 @@ func TestCatalog_DownstreamsForService_Updates(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, defaults.Normalize())
|
require.NoError(t, defaults.Normalize())
|
||||||
require.NoError(t, s.EnsureConfigEntry(5, &defaults, nil))
|
require.NoError(t, s.EnsureConfigEntry(5, &defaults))
|
||||||
|
|
||||||
router := structs.ServiceRouterConfigEntry{
|
router := structs.ServiceRouterConfigEntry{
|
||||||
Kind: structs.ServiceRouter,
|
Kind: structs.ServiceRouter,
|
||||||
|
@ -7319,7 +7319,7 @@ func TestCatalog_DownstreamsForService_Updates(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, router.Normalize())
|
require.NoError(t, router.Normalize())
|
||||||
require.NoError(t, s.EnsureConfigEntry(6, &router, nil))
|
require.NoError(t, s.EnsureConfigEntry(6, &router))
|
||||||
|
|
||||||
// We updated a relevant config entry
|
// We updated a relevant config entry
|
||||||
require.True(t, watchFired(ws))
|
require.True(t, watchFired(ws))
|
||||||
|
@ -7502,7 +7502,7 @@ func TestProtocolForIngressGateway(t *testing.T) {
|
||||||
require.NoError(t, entry.Normalize())
|
require.NoError(t, entry.Normalize())
|
||||||
require.NoError(t, entry.Validate())
|
require.NoError(t, entry.Validate())
|
||||||
|
|
||||||
require.NoError(t, s.EnsureConfigEntry(tc.idx, entry, structs.DefaultEnterpriseMeta()))
|
require.NoError(t, s.EnsureConfigEntry(tc.idx, entry))
|
||||||
}
|
}
|
||||||
|
|
||||||
tx := s.db.ReadTxn()
|
tx := s.db.ReadTxn()
|
||||||
|
|
|
@ -169,11 +169,11 @@ func configEntriesByKindTxn(tx ReadTxn, ws memdb.WatchSet, kind string, entMeta
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnsureConfigEntry is called to do an upsert of a given config entry.
|
// EnsureConfigEntry is called to do an upsert of a given config entry.
|
||||||
func (s *Store) EnsureConfigEntry(idx uint64, conf structs.ConfigEntry, entMeta *structs.EnterpriseMeta) error {
|
func (s *Store) EnsureConfigEntry(idx uint64, conf structs.ConfigEntry) error {
|
||||||
tx := s.db.WriteTxn(idx)
|
tx := s.db.WriteTxn(idx)
|
||||||
defer tx.Abort()
|
defer tx.Abort()
|
||||||
|
|
||||||
if err := ensureConfigEntryTxn(tx, idx, conf, entMeta); err != nil {
|
if err := ensureConfigEntryTxn(tx, idx, conf); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,9 +181,9 @@ func (s *Store) EnsureConfigEntry(idx uint64, conf structs.ConfigEntry, entMeta
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensureConfigEntryTxn upserts a config entry inside of a transaction.
|
// ensureConfigEntryTxn upserts a config entry inside of a transaction.
|
||||||
func ensureConfigEntryTxn(tx WriteTxn, idx uint64, conf structs.ConfigEntry, entMeta *structs.EnterpriseMeta) error {
|
func ensureConfigEntryTxn(tx WriteTxn, idx uint64, conf structs.ConfigEntry) error {
|
||||||
// Check for existing configuration.
|
// Check for existing configuration.
|
||||||
existing, err := firstConfigEntryWithTxn(tx, conf.GetKind(), conf.GetName(), entMeta)
|
existing, err := firstConfigEntryWithTxn(tx, conf.GetKind(), conf.GetName(), conf.GetEnterpriseMeta())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed configuration lookup: %s", err)
|
return fmt.Errorf("failed configuration lookup: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ func ensureConfigEntryTxn(tx WriteTxn, idx uint64, conf structs.ConfigEntry, ent
|
||||||
}
|
}
|
||||||
raftIndex.ModifyIndex = idx
|
raftIndex.ModifyIndex = idx
|
||||||
|
|
||||||
err = validateProposedConfigEntryInGraph(tx, conf.GetKind(), conf.GetName(), conf, entMeta)
|
err = validateProposedConfigEntryInGraph(tx, conf.GetKind(), conf.GetName(), conf, conf.GetEnterpriseMeta())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err // Err is already sufficiently decorated.
|
return err // Err is already sufficiently decorated.
|
||||||
}
|
}
|
||||||
|
@ -217,12 +217,12 @@ func ensureConfigEntryTxn(tx WriteTxn, idx uint64, conf structs.ConfigEntry, ent
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnsureConfigEntryCAS is called to do a check-and-set upsert of a given config entry.
|
// EnsureConfigEntryCAS is called to do a check-and-set upsert of a given config entry.
|
||||||
func (s *Store) EnsureConfigEntryCAS(idx, cidx uint64, conf structs.ConfigEntry, entMeta *structs.EnterpriseMeta) (bool, error) {
|
func (s *Store) EnsureConfigEntryCAS(idx, cidx uint64, conf structs.ConfigEntry) (bool, error) {
|
||||||
tx := s.db.WriteTxn(idx)
|
tx := s.db.WriteTxn(idx)
|
||||||
defer tx.Abort()
|
defer tx.Abort()
|
||||||
|
|
||||||
// Check for existing configuration.
|
// Check for existing configuration.
|
||||||
existing, err := firstConfigEntryWithTxn(tx, conf.GetKind(), conf.GetName(), entMeta)
|
existing, err := firstConfigEntryWithTxn(tx, conf.GetKind(), conf.GetName(), conf.GetEnterpriseMeta())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed configuration lookup: %s", err)
|
return false, fmt.Errorf("failed configuration lookup: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -243,7 +243,7 @@ func (s *Store) EnsureConfigEntryCAS(idx, cidx uint64, conf structs.ConfigEntry,
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ensureConfigEntryTxn(tx, idx, conf, entMeta); err != nil {
|
if err := ensureConfigEntryTxn(tx, idx, conf); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,11 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
|
||||||
"github.com/hashicorp/consul/sdk/testutil"
|
|
||||||
memdb "github.com/hashicorp/go-memdb"
|
memdb "github.com/hashicorp/go-memdb"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
|
"github.com/hashicorp/consul/sdk/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStore_ConfigEntry(t *testing.T) {
|
func TestStore_ConfigEntry(t *testing.T) {
|
||||||
|
@ -23,7 +24,7 @@ func TestStore_ConfigEntry(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
require.NoError(s.EnsureConfigEntry(0, expected, nil))
|
require.NoError(s.EnsureConfigEntry(0, expected))
|
||||||
|
|
||||||
idx, config, err := s.ConfigEntry(nil, structs.ProxyDefaults, "global", nil)
|
idx, config, err := s.ConfigEntry(nil, structs.ProxyDefaults, "global", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -38,7 +39,7 @@ func TestStore_ConfigEntry(t *testing.T) {
|
||||||
"DestinationServiceName": "bar",
|
"DestinationServiceName": "bar",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(s.EnsureConfigEntry(1, updated, nil))
|
require.NoError(s.EnsureConfigEntry(1, updated))
|
||||||
|
|
||||||
idx, config, err = s.ConfigEntry(nil, structs.ProxyDefaults, "global", nil)
|
idx, config, err = s.ConfigEntry(nil, structs.ProxyDefaults, "global", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -58,19 +59,19 @@ func TestStore_ConfigEntry(t *testing.T) {
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
}
|
}
|
||||||
require.NoError(s.EnsureConfigEntry(3, serviceConf, nil))
|
require.NoError(s.EnsureConfigEntry(3, serviceConf))
|
||||||
|
|
||||||
ws := memdb.NewWatchSet()
|
ws := memdb.NewWatchSet()
|
||||||
_, _, err = s.ConfigEntry(ws, structs.ServiceDefaults, "foo", nil)
|
_, _, err = s.ConfigEntry(ws, structs.ServiceDefaults, "foo", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
// Make an unrelated modification and make sure the watch doesn't fire.
|
// Make an unrelated modification and make sure the watch doesn't fire.
|
||||||
require.NoError(s.EnsureConfigEntry(4, updated, nil))
|
require.NoError(s.EnsureConfigEntry(4, updated))
|
||||||
require.False(watchFired(ws))
|
require.False(watchFired(ws))
|
||||||
|
|
||||||
// Update the watched config and make sure it fires.
|
// Update the watched config and make sure it fires.
|
||||||
serviceConf.Protocol = "http"
|
serviceConf.Protocol = "http"
|
||||||
require.NoError(s.EnsureConfigEntry(5, serviceConf, nil))
|
require.NoError(s.EnsureConfigEntry(5, serviceConf))
|
||||||
require.True(watchFired(ws))
|
require.True(watchFired(ws))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +88,7 @@ func TestStore_ConfigEntryCAS(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
require.NoError(s.EnsureConfigEntry(1, expected, nil))
|
require.NoError(s.EnsureConfigEntry(1, expected))
|
||||||
|
|
||||||
idx, config, err := s.ConfigEntry(nil, structs.ProxyDefaults, "global", nil)
|
idx, config, err := s.ConfigEntry(nil, structs.ProxyDefaults, "global", nil)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -102,7 +103,7 @@ func TestStore_ConfigEntryCAS(t *testing.T) {
|
||||||
"DestinationServiceName": "bar",
|
"DestinationServiceName": "bar",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
ok, err := s.EnsureConfigEntryCAS(2, 99, updated, nil)
|
ok, err := s.EnsureConfigEntryCAS(2, 99, updated)
|
||||||
require.False(ok)
|
require.False(ok)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
|
@ -113,7 +114,7 @@ func TestStore_ConfigEntryCAS(t *testing.T) {
|
||||||
require.Equal(expected, config)
|
require.Equal(expected, config)
|
||||||
|
|
||||||
// Update with a valid index
|
// Update with a valid index
|
||||||
ok, err = s.EnsureConfigEntryCAS(2, 1, updated, nil)
|
ok, err = s.EnsureConfigEntryCAS(2, 1, updated)
|
||||||
require.True(ok)
|
require.True(ok)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
|
@ -156,7 +157,7 @@ func TestStore_ConfigEntry_UpdateOver(t *testing.T) {
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
nextIndex := uint64(1)
|
nextIndex := uint64(1)
|
||||||
require.NoError(t, s.EnsureConfigEntry(nextIndex, initial.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(nextIndex, initial.Clone()))
|
||||||
|
|
||||||
idx, raw, err := s.ConfigEntry(nil, structs.ServiceIntentions, "api", nil)
|
idx, raw, err := s.ConfigEntry(nil, structs.ServiceIntentions, "api", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -184,7 +185,7 @@ func TestStore_ConfigEntry_UpdateOver(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
nextIndex++
|
nextIndex++
|
||||||
err := s.EnsureConfigEntry(nextIndex, updated.Clone(), nil)
|
err := s.EnsureConfigEntry(nextIndex, updated.Clone())
|
||||||
testutil.RequireErrorContains(t, err, "cannot set this field to a different value")
|
testutil.RequireErrorContains(t, err, "cannot set this field to a different value")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -205,7 +206,7 @@ func TestStore_ConfigEntry_UpdateOver(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
nextIndex++
|
nextIndex++
|
||||||
require.NoError(t, s.EnsureConfigEntry(nextIndex, updated.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(nextIndex, updated.Clone()))
|
||||||
|
|
||||||
// check
|
// check
|
||||||
idx, raw, err = s.ConfigEntry(nil, structs.ServiceIntentions, "api", nil)
|
idx, raw, err = s.ConfigEntry(nil, structs.ServiceIntentions, "api", nil)
|
||||||
|
@ -238,9 +239,9 @@ func TestStore_ConfigEntries(t *testing.T) {
|
||||||
Name: "test3",
|
Name: "test3",
|
||||||
}
|
}
|
||||||
|
|
||||||
require.NoError(s.EnsureConfigEntry(0, entry1, nil))
|
require.NoError(s.EnsureConfigEntry(0, entry1))
|
||||||
require.NoError(s.EnsureConfigEntry(1, entry2, nil))
|
require.NoError(s.EnsureConfigEntry(1, entry2))
|
||||||
require.NoError(s.EnsureConfigEntry(2, entry3, nil))
|
require.NoError(s.EnsureConfigEntry(2, entry3))
|
||||||
|
|
||||||
// Get all entries
|
// Get all entries
|
||||||
idx, entries, err := s.ConfigEntries(nil, nil)
|
idx, entries, err := s.ConfigEntries(nil, nil)
|
||||||
|
@ -269,7 +270,7 @@ func TestStore_ConfigEntries(t *testing.T) {
|
||||||
Kind: structs.ServiceDefaults,
|
Kind: structs.ServiceDefaults,
|
||||||
Name: "test2",
|
Name: "test2",
|
||||||
Protocol: "tcp",
|
Protocol: "tcp",
|
||||||
}, nil))
|
}))
|
||||||
require.True(watchFired(ws))
|
require.True(watchFired(ws))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,7 +292,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
{Weight: 100},
|
{Weight: 100},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "does not permit advanced routing or splitting behavior",
|
expectErr: "does not permit advanced routing or splitting behavior",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -312,7 +313,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
{Weight: 100},
|
{Weight: 100},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "does not permit advanced routing or splitting behavior",
|
expectErr: "does not permit advanced routing or splitting behavior",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -355,7 +356,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
},
|
},
|
||||||
EnterpriseMeta: *structs.DefaultEnterpriseMeta(),
|
EnterpriseMeta: *structs.DefaultEnterpriseMeta(),
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"splitter works with http protocol (from proxy-defaults)": {
|
"splitter works with http protocol (from proxy-defaults)": {
|
||||||
|
@ -389,7 +390,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
{Weight: 10, ServiceSubset: "v2"},
|
{Weight: 10, ServiceSubset: "v2"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"router fails with tcp protocol": {
|
"router fails with tcp protocol": {
|
||||||
|
@ -426,7 +427,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "does not permit advanced routing or splitting behavior",
|
expectErr: "does not permit advanced routing or splitting behavior",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -460,7 +461,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "does not permit advanced routing or splitting behavior",
|
expectErr: "does not permit advanced routing or splitting behavior",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -609,7 +610,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
Name: "main",
|
Name: "main",
|
||||||
Protocol: "tcp",
|
Protocol: "tcp",
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "does not permit advanced routing or splitting behavior",
|
expectErr: "does not permit advanced routing or splitting behavior",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -692,7 +693,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
Name: "main",
|
Name: "main",
|
||||||
Protocol: "tcp",
|
Protocol: "tcp",
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "does not permit advanced routing or splitting behavior",
|
expectErr: "does not permit advanced routing or splitting behavior",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -720,7 +721,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
{Weight: 10, Service: "other"},
|
{Weight: 10, Service: "other"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "uses inconsistent protocols",
|
expectErr: "uses inconsistent protocols",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -755,7 +756,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "uses inconsistent protocols",
|
expectErr: "uses inconsistent protocols",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -789,7 +790,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "uses inconsistent protocols",
|
expectErr: "uses inconsistent protocols",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -820,7 +821,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
Service: "other",
|
Service: "other",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: "uses inconsistent protocols",
|
expectErr: "uses inconsistent protocols",
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -848,7 +849,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
ServiceSubset: "v1",
|
ServiceSubset: "v1",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"cannot redirect to a subset that does not exist": {
|
"cannot redirect to a subset that does not exist": {
|
||||||
|
@ -868,7 +869,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
ServiceSubset: "v1",
|
ServiceSubset: "v1",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: `does not have a subset named "v1"`,
|
expectErr: `does not have a subset named "v1"`,
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -892,7 +893,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
Service: "other",
|
Service: "other",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: `detected circular resolver redirect`,
|
expectErr: `detected circular resolver redirect`,
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -922,7 +923,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
{Weight: 100, Service: "other"},
|
{Weight: 100, Service: "other"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return s.EnsureConfigEntry(0, entry, nil)
|
return s.EnsureConfigEntry(0, entry)
|
||||||
},
|
},
|
||||||
expectErr: `detected circular reference`,
|
expectErr: `detected circular reference`,
|
||||||
expectGraphErr: true,
|
expectGraphErr: true,
|
||||||
|
@ -937,7 +938,7 @@ func TestStore_ConfigEntry_GraphValidation(t *testing.T) {
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
for _, entry := range tc.entries {
|
for _, entry := range tc.entries {
|
||||||
require.NoError(t, entry.Normalize())
|
require.NoError(t, entry.Normalize())
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, entry, nil))
|
require.NoError(t, s.EnsureConfigEntry(0, entry))
|
||||||
}
|
}
|
||||||
|
|
||||||
err := tc.op(t, s)
|
err := tc.op(t, s)
|
||||||
|
@ -1245,7 +1246,7 @@ func TestStore_ReadDiscoveryChainConfigEntries_Overrides(t *testing.T) {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
for _, entry := range tc.entries {
|
for _, entry := range tc.entries {
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, entry, nil))
|
require.NoError(t, s.EnsureConfigEntry(0, entry))
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("without override", func(t *testing.T) {
|
t.Run("without override", func(t *testing.T) {
|
||||||
|
@ -1340,7 +1341,7 @@ func TestStore_ReadDiscoveryChainConfigEntries_SubsetSplit(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, entry, nil))
|
require.NoError(t, s.EnsureConfigEntry(0, entry))
|
||||||
}
|
}
|
||||||
|
|
||||||
_, entrySet, err := s.readDiscoveryChainConfigEntries(nil, "main", nil, nil)
|
_, entrySet, err := s.readDiscoveryChainConfigEntries(nil, "main", nil, nil)
|
||||||
|
@ -1361,14 +1362,14 @@ func TestStore_ValidateGatewayNamesCannotBeShared(t *testing.T) {
|
||||||
Kind: structs.IngressGateway,
|
Kind: structs.IngressGateway,
|
||||||
Name: "gateway",
|
Name: "gateway",
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, ingress, nil))
|
require.NoError(t, s.EnsureConfigEntry(0, ingress))
|
||||||
|
|
||||||
terminating := &structs.TerminatingGatewayConfigEntry{
|
terminating := &structs.TerminatingGatewayConfigEntry{
|
||||||
Kind: structs.TerminatingGateway,
|
Kind: structs.TerminatingGateway,
|
||||||
Name: "gateway",
|
Name: "gateway",
|
||||||
}
|
}
|
||||||
// Cannot have 2 gateways with same service name
|
// Cannot have 2 gateways with same service name
|
||||||
require.Error(t, s.EnsureConfigEntry(1, terminating, nil))
|
require.Error(t, s.EnsureConfigEntry(1, terminating))
|
||||||
|
|
||||||
ingress = &structs.IngressGatewayConfigEntry{
|
ingress = &structs.IngressGatewayConfigEntry{
|
||||||
Kind: structs.IngressGateway,
|
Kind: structs.IngressGateway,
|
||||||
|
@ -1377,14 +1378,14 @@ func TestStore_ValidateGatewayNamesCannotBeShared(t *testing.T) {
|
||||||
{Port: 8080},
|
{Port: 8080},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(2, ingress, nil))
|
require.NoError(t, s.EnsureConfigEntry(2, ingress))
|
||||||
require.NoError(t, s.DeleteConfigEntry(3, structs.IngressGateway, "gateway", nil))
|
require.NoError(t, s.DeleteConfigEntry(3, structs.IngressGateway, "gateway", nil))
|
||||||
|
|
||||||
// Adding the terminating gateway with same name should now work
|
// Adding the terminating gateway with same name should now work
|
||||||
require.NoError(t, s.EnsureConfigEntry(4, terminating, nil))
|
require.NoError(t, s.EnsureConfigEntry(4, terminating))
|
||||||
|
|
||||||
// Cannot have 2 gateways with same service name
|
// Cannot have 2 gateways with same service name
|
||||||
require.Error(t, s.EnsureConfigEntry(5, ingress, nil))
|
require.Error(t, s.EnsureConfigEntry(5, ingress))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
|
@ -1413,10 +1414,10 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
Name: "web",
|
Name: "web",
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, expected, nil))
|
require.NoError(t, s.EnsureConfigEntry(0, expected))
|
||||||
|
|
||||||
// Next configure http ingress to route to the http service
|
// Next configure http ingress to route to the http service
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, newIngress("http", "web"), nil))
|
require.NoError(t, s.EnsureConfigEntry(1, newIngress("http", "web")))
|
||||||
|
|
||||||
t.Run("via modification", func(t *testing.T) {
|
t.Run("via modification", func(t *testing.T) {
|
||||||
// Now redefine the target service as tcp
|
// Now redefine the target service as tcp
|
||||||
|
@ -1426,7 +1427,7 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
Protocol: "tcp",
|
Protocol: "tcp",
|
||||||
}
|
}
|
||||||
|
|
||||||
err := s.EnsureConfigEntry(2, expected, nil)
|
err := s.EnsureConfigEntry(2, expected)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), `has protocol "tcp"`)
|
require.Contains(t, err.Error(), `has protocol "tcp"`)
|
||||||
})
|
})
|
||||||
|
@ -1442,7 +1443,7 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
|
|
||||||
// First configure tcp ingress to route to a defaulted tcp service
|
// First configure tcp ingress to route to a defaulted tcp service
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, newIngress("tcp", "web"), nil))
|
require.NoError(t, s.EnsureConfigEntry(0, newIngress("tcp", "web")))
|
||||||
|
|
||||||
// Now redefine the target service as http
|
// Now redefine the target service as http
|
||||||
expected := &structs.ServiceConfigEntry{
|
expected := &structs.ServiceConfigEntry{
|
||||||
|
@ -1450,14 +1451,14 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
Name: "web",
|
Name: "web",
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, expected, nil))
|
require.NoError(t, s.EnsureConfigEntry(1, expected))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("tcp ingress fails with tcp upstream (defaulted) later changed to http", func(t *testing.T) {
|
t.Run("tcp ingress fails with tcp upstream (defaulted) later changed to http", func(t *testing.T) {
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
|
|
||||||
// First configure tcp ingress to route to a defaulted tcp service
|
// First configure tcp ingress to route to a defaulted tcp service
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, newIngress("tcp", "web"), nil))
|
require.NoError(t, s.EnsureConfigEntry(0, newIngress("tcp", "web")))
|
||||||
|
|
||||||
// Now redefine the target service as http
|
// Now redefine the target service as http
|
||||||
expected := &structs.ServiceConfigEntry{
|
expected := &structs.ServiceConfigEntry{
|
||||||
|
@ -1465,7 +1466,7 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
Name: "web",
|
Name: "web",
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, expected, nil))
|
require.NoError(t, s.EnsureConfigEntry(1, expected))
|
||||||
|
|
||||||
t.Run("and a router defined", func(t *testing.T) {
|
t.Run("and a router defined", func(t *testing.T) {
|
||||||
// This part should fail.
|
// This part should fail.
|
||||||
|
@ -1473,7 +1474,7 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
Kind: structs.ServiceRouter,
|
Kind: structs.ServiceRouter,
|
||||||
Name: "web",
|
Name: "web",
|
||||||
}
|
}
|
||||||
err := s.EnsureConfigEntry(2, expected2, nil)
|
err := s.EnsureConfigEntry(2, expected2)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), `has protocol "http"`)
|
require.Contains(t, err.Error(), `has protocol "http"`)
|
||||||
})
|
})
|
||||||
|
@ -1487,7 +1488,7 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
{Weight: 100},
|
{Weight: 100},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
err := s.EnsureConfigEntry(2, expected2, nil)
|
err := s.EnsureConfigEntry(2, expected2)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), `has protocol "http"`)
|
require.Contains(t, err.Error(), `has protocol "http"`)
|
||||||
})
|
})
|
||||||
|
@ -1495,7 +1496,7 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
|
|
||||||
t.Run("http ingress fails with tcp upstream (defaulted)", func(t *testing.T) {
|
t.Run("http ingress fails with tcp upstream (defaulted)", func(t *testing.T) {
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
err := s.EnsureConfigEntry(0, newIngress("http", "web"), nil)
|
err := s.EnsureConfigEntry(0, newIngress("http", "web"))
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), `has protocol "tcp"`)
|
require.Contains(t, err.Error(), `has protocol "tcp"`)
|
||||||
})
|
})
|
||||||
|
@ -1509,9 +1510,9 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
"protocol": "http2",
|
"protocol": "http2",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(0, expected, nil))
|
require.NoError(t, s.EnsureConfigEntry(0, expected))
|
||||||
|
|
||||||
err := s.EnsureConfigEntry(1, newIngress("http", "web"), nil)
|
err := s.EnsureConfigEntry(1, newIngress("http", "web"))
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), `has protocol "http2"`)
|
require.Contains(t, err.Error(), `has protocol "http2"`)
|
||||||
})
|
})
|
||||||
|
@ -1523,8 +1524,8 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
Name: "web",
|
Name: "web",
|
||||||
Protocol: "grpc",
|
Protocol: "grpc",
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, expected, nil))
|
require.NoError(t, s.EnsureConfigEntry(1, expected))
|
||||||
err := s.EnsureConfigEntry(2, newIngress("http", "web"), nil)
|
err := s.EnsureConfigEntry(2, newIngress("http", "web"))
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), `has protocol "grpc"`)
|
require.Contains(t, err.Error(), `has protocol "grpc"`)
|
||||||
})
|
})
|
||||||
|
@ -1536,18 +1537,18 @@ func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) {
|
||||||
Name: "web",
|
Name: "web",
|
||||||
Protocol: "http",
|
Protocol: "http",
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(2, expected, nil))
|
require.NoError(t, s.EnsureConfigEntry(2, expected))
|
||||||
require.NoError(t, s.EnsureConfigEntry(3, newIngress("http", "web"), nil))
|
require.NoError(t, s.EnsureConfigEntry(3, newIngress("http", "web")))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("http ingress ignores wildcard specifier", func(t *testing.T) {
|
t.Run("http ingress ignores wildcard specifier", func(t *testing.T) {
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
require.NoError(t, s.EnsureConfigEntry(4, newIngress("http", "*"), nil))
|
require.NoError(t, s.EnsureConfigEntry(4, newIngress("http", "*")))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("deleting ingress config entry ok", func(t *testing.T) {
|
t.Run("deleting ingress config entry ok", func(t *testing.T) {
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, newIngress("tcp", "web"), nil))
|
require.NoError(t, s.EnsureConfigEntry(1, newIngress("tcp", "web")))
|
||||||
require.NoError(t, s.DeleteConfigEntry(5, structs.IngressGateway, "gateway", nil))
|
require.NoError(t, s.DeleteConfigEntry(5, structs.IngressGateway, "gateway", nil))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1821,7 +1822,7 @@ func TestSourcesForTarget(t *testing.T) {
|
||||||
var i uint64 = 1
|
var i uint64 = 1
|
||||||
for _, entry := range tc.entries {
|
for _, entry := range tc.entries {
|
||||||
require.NoError(t, entry.Normalize())
|
require.NoError(t, entry.Normalize())
|
||||||
require.NoError(t, s.EnsureConfigEntry(i, entry, nil))
|
require.NoError(t, s.EnsureConfigEntry(i, entry))
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2023,7 +2024,7 @@ func TestTargetsForSource(t *testing.T) {
|
||||||
var i uint64 = 1
|
var i uint64 = 1
|
||||||
for _, entry := range tc.entries {
|
for _, entry := range tc.entries {
|
||||||
require.NoError(t, entry.Normalize())
|
require.NoError(t, entry.Normalize())
|
||||||
require.NoError(t, s.EnsureConfigEntry(i, entry, nil))
|
require.NoError(t, s.EnsureConfigEntry(i, entry))
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2258,7 +2259,7 @@ func TestStore_ValidateServiceIntentionsErrorOnIncompatibleProtocols(t *testing.
|
||||||
if op.deletion {
|
if op.deletion {
|
||||||
err = s.DeleteConfigEntry(nextIndex, op.entry.GetKind(), op.entry.GetName(), nil)
|
err = s.DeleteConfigEntry(nextIndex, op.entry.GetKind(), op.entry.GetName(), nil)
|
||||||
} else {
|
} else {
|
||||||
err = s.EnsureConfigEntry(nextIndex, op.entry, nil)
|
err = s.EnsureConfigEntry(nextIndex, op.entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isLast && tc.expectLastErr != "" {
|
if isLast && tc.expectLastErr != "" {
|
||||||
|
|
|
@ -290,7 +290,7 @@ func (s *Store) intentionMutationLegacyCreate(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ensureConfigEntryTxn(tx, idx, upsertEntry, upsertEntry.GetEnterpriseMeta()); err != nil {
|
if err := ensureConfigEntryTxn(tx, idx, upsertEntry); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ func (s *Store) intentionMutationLegacyUpdate(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ensureConfigEntryTxn(tx, idx, upsertEntry, upsertEntry.GetEnterpriseMeta()); err != nil {
|
if err := ensureConfigEntryTxn(tx, idx, upsertEntry); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,7 +380,7 @@ func (s *Store) intentionMutationDelete(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ensureConfigEntryTxn(tx, idx, upsertEntry, upsertEntry.GetEnterpriseMeta()); err != nil {
|
if err := ensureConfigEntryTxn(tx, idx, upsertEntry); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -428,7 +428,7 @@ func (s *Store) intentionMutationLegacyDelete(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ensureConfigEntryTxn(tx, idx, upsertEntry, upsertEntry.GetEnterpriseMeta()); err != nil {
|
if err := ensureConfigEntryTxn(tx, idx, upsertEntry); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,7 +476,7 @@ func (s *Store) intentionMutationUpsert(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ensureConfigEntryTxn(tx, idx, upsertEntry, upsertEntry.GetEnterpriseMeta()); err != nil {
|
if err := ensureConfigEntryTxn(tx, idx, upsertEntry); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,13 +4,14 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/hashicorp/go-memdb"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/acl"
|
"github.com/hashicorp/consul/acl"
|
||||||
"github.com/hashicorp/consul/agent/connect"
|
"github.com/hashicorp/consul/agent/connect"
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
"github.com/hashicorp/consul/sdk/testutil"
|
"github.com/hashicorp/consul/sdk/testutil"
|
||||||
"github.com/hashicorp/go-memdb"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -128,7 +129,7 @@ func TestStore_IntentionSetGet_basic(t *testing.T) {
|
||||||
lastIndex++
|
lastIndex++
|
||||||
require.NoError(t, configEntry.LegacyNormalize())
|
require.NoError(t, configEntry.LegacyNormalize())
|
||||||
require.NoError(t, configEntry.LegacyValidate())
|
require.NoError(t, configEntry.LegacyValidate())
|
||||||
require.NoError(t, s.EnsureConfigEntry(lastIndex, configEntry.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(lastIndex, configEntry.Clone()))
|
||||||
|
|
||||||
// Make sure the config entry index got updated instead of the old intentions one
|
// Make sure the config entry index got updated instead of the old intentions one
|
||||||
require.Equal(t, lastIndex, s.maxIndex(configTableName))
|
require.Equal(t, lastIndex, s.maxIndex(configTableName))
|
||||||
|
@ -190,7 +191,7 @@ func TestStore_IntentionSetGet_basic(t *testing.T) {
|
||||||
lastIndex++
|
lastIndex++
|
||||||
require.NoError(t, configEntry.LegacyNormalize())
|
require.NoError(t, configEntry.LegacyNormalize())
|
||||||
require.NoError(t, configEntry.LegacyValidate())
|
require.NoError(t, configEntry.LegacyValidate())
|
||||||
require.NoError(t, s.EnsureConfigEntry(lastIndex, configEntry.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(lastIndex, configEntry.Clone()))
|
||||||
|
|
||||||
// Change a value that isn't in the unique 4 tuple and check we don't
|
// Change a value that isn't in the unique 4 tuple and check we don't
|
||||||
// incorrectly consider this a duplicate when updating.
|
// incorrectly consider this a duplicate when updating.
|
||||||
|
@ -198,7 +199,7 @@ func TestStore_IntentionSetGet_basic(t *testing.T) {
|
||||||
lastIndex++
|
lastIndex++
|
||||||
require.NoError(t, configEntry.LegacyNormalize())
|
require.NoError(t, configEntry.LegacyNormalize())
|
||||||
require.NoError(t, configEntry.LegacyValidate())
|
require.NoError(t, configEntry.LegacyValidate())
|
||||||
require.NoError(t, s.EnsureConfigEntry(lastIndex, configEntry.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(lastIndex, configEntry.Clone()))
|
||||||
|
|
||||||
// Make sure the config entry index got updated instead of the old intentions one
|
// Make sure the config entry index got updated instead of the old intentions one
|
||||||
require.Equal(t, lastIndex, s.maxIndex(configTableName))
|
require.Equal(t, lastIndex, s.maxIndex(configTableName))
|
||||||
|
@ -783,7 +784,7 @@ func testStore_IntentionMutation(t *testing.T, s *Store) {
|
||||||
Type: structs.IntentionSourceConsul,
|
Type: structs.IntentionSourceConsul,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil))
|
}))
|
||||||
|
|
||||||
lastIndex++
|
lastIndex++
|
||||||
|
|
||||||
|
@ -867,7 +868,7 @@ func TestStore_IntentionSet_updateCreatedAt(t *testing.T) {
|
||||||
|
|
||||||
require.NoError(t, conf.LegacyNormalize())
|
require.NoError(t, conf.LegacyNormalize())
|
||||||
require.NoError(t, conf.LegacyValidate())
|
require.NoError(t, conf.LegacyValidate())
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read it back and verify
|
// Read it back and verify
|
||||||
|
@ -915,7 +916,7 @@ func TestStore_IntentionSet_metaNil(t *testing.T) {
|
||||||
// Insert
|
// Insert
|
||||||
require.NoError(t, conf.LegacyNormalize())
|
require.NoError(t, conf.LegacyNormalize())
|
||||||
require.NoError(t, conf.LegacyValidate())
|
require.NoError(t, conf.LegacyValidate())
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read it back and verify
|
// Read it back and verify
|
||||||
|
@ -968,7 +969,7 @@ func TestStore_IntentionSet_metaSet(t *testing.T) {
|
||||||
// Insert
|
// Insert
|
||||||
require.NoError(t, conf.LegacyNormalize())
|
require.NoError(t, conf.LegacyNormalize())
|
||||||
require.NoError(t, conf.LegacyValidate())
|
require.NoError(t, conf.LegacyValidate())
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read it back and verify
|
// Read it back and verify
|
||||||
|
@ -1024,7 +1025,7 @@ func TestStore_IntentionDelete(t *testing.T) {
|
||||||
// Insert
|
// Insert
|
||||||
require.NoError(t, conf.LegacyNormalize())
|
require.NoError(t, conf.LegacyNormalize())
|
||||||
require.NoError(t, conf.LegacyValidate())
|
require.NoError(t, conf.LegacyValidate())
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone(), nil))
|
require.NoError(t, s.EnsureConfigEntry(1, conf.Clone()))
|
||||||
|
|
||||||
// Make sure the index got updated.
|
// Make sure the index got updated.
|
||||||
require.Equal(t, s.maxIndex(configTableName), lastIndex)
|
require.Equal(t, s.maxIndex(configTableName), lastIndex)
|
||||||
|
@ -1163,7 +1164,7 @@ func TestStore_IntentionsList(t *testing.T) {
|
||||||
require.NoError(t, conf.LegacyNormalize())
|
require.NoError(t, conf.LegacyNormalize())
|
||||||
require.NoError(t, conf.LegacyValidate())
|
require.NoError(t, conf.LegacyValidate())
|
||||||
lastIndex++
|
lastIndex++
|
||||||
require.NoError(t, s.EnsureConfigEntry(lastIndex, conf, nil))
|
require.NoError(t, s.EnsureConfigEntry(lastIndex, conf))
|
||||||
}
|
}
|
||||||
|
|
||||||
expectIDs = []string{
|
expectIDs = []string{
|
||||||
|
@ -1315,7 +1316,7 @@ func TestStore_IntentionMatch_table(t *testing.T) {
|
||||||
require.NoError(t, conf.LegacyNormalize())
|
require.NoError(t, conf.LegacyNormalize())
|
||||||
require.NoError(t, conf.LegacyValidate())
|
require.NoError(t, conf.LegacyValidate())
|
||||||
lastIndex++
|
lastIndex++
|
||||||
require.NoError(t, s.EnsureConfigEntry(lastIndex, conf, &conf.EnterpriseMeta))
|
require.NoError(t, s.EnsureConfigEntry(lastIndex, conf))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1503,7 +1504,7 @@ func TestStore_IntentionMatchOne_table(t *testing.T) {
|
||||||
require.NoError(t, conf.LegacyNormalize())
|
require.NoError(t, conf.LegacyNormalize())
|
||||||
require.NoError(t, conf.LegacyValidate())
|
require.NoError(t, conf.LegacyValidate())
|
||||||
lastIndex++
|
lastIndex++
|
||||||
require.NoError(t, s.EnsureConfigEntry(lastIndex, conf, &conf.EnterpriseMeta))
|
require.NoError(t, s.EnsureConfigEntry(lastIndex, conf))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1590,7 +1591,7 @@ func TestStore_IntentionMatch_WatchesDuringUpgrade(t *testing.T) {
|
||||||
{Name: "web", Action: structs.IntentionActionAllow},
|
{Name: "web", Action: structs.IntentionActionAllow},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, conf, &conf.EnterpriseMeta))
|
require.NoError(t, s.EnsureConfigEntry(1, conf))
|
||||||
|
|
||||||
require.True(t, watchFired(ws))
|
require.True(t, watchFired(ws))
|
||||||
}
|
}
|
||||||
|
@ -1755,7 +1756,7 @@ func TestStore_IntentionDecision(t *testing.T) {
|
||||||
|
|
||||||
s := testConfigStateStore(t)
|
s := testConfigStateStore(t)
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
require.NoError(t, s.EnsureConfigEntry(1, entry, nil))
|
require.NoError(t, s.EnsureConfigEntry(1, entry))
|
||||||
}
|
}
|
||||||
|
|
||||||
tt := []struct {
|
tt := []struct {
|
||||||
|
|
Loading…
Reference in New Issue