2023-10-16 15:53:31 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2023-08-10 21:23:42 +00:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestAPI_ConfigEntries_HTTPRoute(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
c, s := makeClient(t)
|
|
|
|
defer s.Stop()
|
|
|
|
|
|
|
|
configEntries := c.ConfigEntries()
|
|
|
|
route1 := &HTTPRouteConfigEntry{
|
|
|
|
Kind: HTTPRoute,
|
|
|
|
Name: "route1",
|
|
|
|
}
|
|
|
|
|
|
|
|
route2 := &HTTPRouteConfigEntry{
|
|
|
|
Kind: HTTPRoute,
|
|
|
|
Name: "route2",
|
|
|
|
}
|
|
|
|
|
|
|
|
// set it
|
|
|
|
_, wm, err := configEntries.Set(route1, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, wm)
|
|
|
|
require.NotEqual(t, 0, wm.RequestTime)
|
|
|
|
|
|
|
|
// also set the second one
|
|
|
|
_, wm, err = configEntries.Set(route2, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, wm)
|
|
|
|
require.NotEqual(t, 0, wm.RequestTime)
|
|
|
|
|
|
|
|
// get it
|
|
|
|
entry, qm, err := configEntries.Get(HTTPRoute, "route1", nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, qm)
|
|
|
|
require.NotEqual(t, 0, qm.RequestTime)
|
|
|
|
|
|
|
|
// verify it
|
|
|
|
readRoute, ok := entry.(*HTTPRouteConfigEntry)
|
|
|
|
require.True(t, ok)
|
|
|
|
require.Equal(t, route1.Kind, readRoute.Kind)
|
|
|
|
require.Equal(t, route1.Name, readRoute.Name)
|
|
|
|
require.Equal(t, route1.Meta, readRoute.Meta)
|
|
|
|
require.Equal(t, route1.Meta, readRoute.GetMeta())
|
|
|
|
|
|
|
|
// update it
|
|
|
|
route1.Rules = []HTTPRouteRule{
|
|
|
|
{
|
|
|
|
Filters: HTTPFilters{
|
|
|
|
URLRewrite: &URLRewrite{
|
|
|
|
Path: "abc",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
// CAS fail
|
|
|
|
written, _, err := configEntries.CAS(route1, 0, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.False(t, written)
|
|
|
|
|
|
|
|
// CAS success
|
|
|
|
written, wm, err = configEntries.CAS(route1, readRoute.ModifyIndex, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, wm)
|
|
|
|
require.NotEqual(t, 0, wm.RequestTime)
|
|
|
|
require.True(t, written)
|
|
|
|
|
|
|
|
// re-setting should not yield an error
|
|
|
|
_, wm, err = configEntries.Set(route1, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, wm)
|
|
|
|
require.NotEqual(t, 0, wm.RequestTime)
|
|
|
|
|
|
|
|
route2.Rules = []HTTPRouteRule{
|
|
|
|
{
|
|
|
|
Filters: HTTPFilters{
|
|
|
|
URLRewrite: &URLRewrite{
|
|
|
|
Path: "def",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
_, wm, err = configEntries.Set(route2, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, wm)
|
|
|
|
require.NotEqual(t, 0, wm.RequestTime)
|
|
|
|
|
|
|
|
// list them
|
|
|
|
entries, qm, err := configEntries.List(HTTPRoute, 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 "route1":
|
|
|
|
// this also verifies that the update value was persisted and
|
|
|
|
// the updated values are seen
|
|
|
|
readRoute, ok = entry.(*HTTPRouteConfigEntry)
|
|
|
|
require.True(t, ok)
|
|
|
|
require.Equal(t, route1.Kind, readRoute.Kind)
|
|
|
|
require.Equal(t, route1.Name, readRoute.Name)
|
|
|
|
require.Len(t, readRoute.Rules, 1)
|
|
|
|
|
|
|
|
require.Equal(t, route1.Rules, readRoute.Rules)
|
|
|
|
case "route2":
|
|
|
|
readRoute, ok = entry.(*HTTPRouteConfigEntry)
|
|
|
|
require.True(t, ok)
|
|
|
|
require.Equal(t, route2.Kind, readRoute.Kind)
|
|
|
|
require.Equal(t, route2.Name, readRoute.Name)
|
|
|
|
require.Len(t, readRoute.Rules, 1)
|
|
|
|
|
|
|
|
require.Equal(t, route2.Rules, readRoute.Rules)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// delete it
|
|
|
|
wm, err = configEntries.Delete(HTTPRoute, "route1", nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, wm)
|
|
|
|
require.NotEqual(t, 0, wm.RequestTime)
|
|
|
|
|
|
|
|
// verify deletion
|
|
|
|
_, _, err = configEntries.Get(HTTPRoute, "route1", nil)
|
|
|
|
require.Error(t, err)
|
|
|
|
}
|