mirror of https://github.com/status-im/consul.git
128 lines
3.0 KiB
Go
128 lines
3.0 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestAPI_ConfigEntries_IngressGateway(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
c, s := makeClient(t)
|
||
|
defer s.Stop()
|
||
|
|
||
|
config_entries := c.ConfigEntries()
|
||
|
|
||
|
ingress1 := &IngressGatewayConfigEntry{
|
||
|
Kind: IngressGateway,
|
||
|
Name: "foo",
|
||
|
}
|
||
|
|
||
|
ingress2 := &IngressGatewayConfigEntry{
|
||
|
Kind: IngressGateway,
|
||
|
Name: "bar",
|
||
|
}
|
||
|
|
||
|
// set it
|
||
|
_, wm, err := config_entries.Set(ingress1, nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, wm)
|
||
|
require.NotEqual(t, 0, wm.RequestTime)
|
||
|
|
||
|
// also set the second one
|
||
|
_, wm, err = config_entries.Set(ingress2, nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, wm)
|
||
|
require.NotEqual(t, 0, wm.RequestTime)
|
||
|
|
||
|
// get it
|
||
|
entry, qm, err := config_entries.Get(IngressGateway, "foo", nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, qm)
|
||
|
require.NotEqual(t, 0, qm.RequestTime)
|
||
|
|
||
|
// verify it
|
||
|
readIngress, ok := entry.(*IngressGatewayConfigEntry)
|
||
|
require.True(t, ok)
|
||
|
require.Equal(t, ingress1.Kind, readIngress.Kind)
|
||
|
require.Equal(t, ingress1.Name, readIngress.Name)
|
||
|
|
||
|
// update it
|
||
|
ingress1.Listeners = []IngressListener{
|
||
|
{
|
||
|
Port: 2222,
|
||
|
Protocol: "tcp",
|
||
|
Services: []IngressService{
|
||
|
{
|
||
|
Name: "asdf",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
// CAS fail
|
||
|
written, _, err := config_entries.CAS(ingress1, 0, nil)
|
||
|
require.NoError(t, err)
|
||
|
require.False(t, written)
|
||
|
|
||
|
// CAS success
|
||
|
written, wm, err = config_entries.CAS(ingress1, readIngress.ModifyIndex, nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, wm)
|
||
|
require.NotEqual(t, 0, wm.RequestTime)
|
||
|
require.True(t, written)
|
||
|
|
||
|
// update no cas
|
||
|
ingress2.Listeners = []IngressListener{
|
||
|
{
|
||
|
Port: 3333,
|
||
|
Protocol: "http",
|
||
|
Services: []IngressService{
|
||
|
{
|
||
|
Name: "qwer",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
_, wm, err = config_entries.Set(ingress2, nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, wm)
|
||
|
require.NotEqual(t, 0, wm.RequestTime)
|
||
|
|
||
|
// list them
|
||
|
entries, qm, err := config_entries.List(IngressGateway, nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, qm)
|
||
|
require.NotEqual(t, 0, qm.RequestTime)
|
||
|
require.Len(t, entries, 2)
|
||
|
|
||
|
for _, entry = range entries {
|
||
|
switch entry.GetName() {
|
||
|
case "foo":
|
||
|
// this also verifies that the update value was persisted and
|
||
|
// the updated values are seen
|
||
|
readIngress, ok = entry.(*IngressGatewayConfigEntry)
|
||
|
require.True(t, ok)
|
||
|
require.Equal(t, ingress1.Kind, readIngress.Kind)
|
||
|
require.Equal(t, ingress1.Name, readIngress.Name)
|
||
|
require.Equal(t, ingress1.Listeners, readIngress.Listeners)
|
||
|
case "bar":
|
||
|
readIngress, ok = entry.(*IngressGatewayConfigEntry)
|
||
|
require.True(t, ok)
|
||
|
require.Equal(t, ingress2.Kind, readIngress.Kind)
|
||
|
require.Equal(t, ingress2.Name, readIngress.Name)
|
||
|
require.Equal(t, ingress2.Listeners, readIngress.Listeners)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// delete it
|
||
|
wm, err = config_entries.Delete(IngressGateway, "foo", nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, wm)
|
||
|
require.NotEqual(t, 0, wm.RequestTime)
|
||
|
|
||
|
// verify deletion
|
||
|
entry, qm, err = config_entries.Get(IngressGateway, "foo", nil)
|
||
|
require.Error(t, err)
|
||
|
}
|