167 lines
3.6 KiB
Go
167 lines
3.6 KiB
Go
package oss_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/boundary/internal/db"
|
|
"github.com/hashicorp/boundary/internal/host"
|
|
"github.com/hashicorp/boundary/internal/host/static"
|
|
"github.com/hashicorp/boundary/internal/iam"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func Test_PreferredEndpointTable(t *testing.T) {
|
|
ctx := context.Background()
|
|
conn, _ := db.TestSetup(t, "postgres")
|
|
rw := db.New(conn)
|
|
rootWrapper := db.TestWrapper(t)
|
|
_, proj := iam.TestScopes(t, iam.TestRepo(t, conn, rootWrapper))
|
|
hc := static.TestCatalogs(t, conn, proj.PublicId, 1)[0]
|
|
hs := static.TestSets(t, conn, hc.PublicId, 1)[0]
|
|
|
|
type testCondition struct {
|
|
condition string
|
|
priority uint32
|
|
}
|
|
insertTests := []struct {
|
|
testName string
|
|
hostSetId string
|
|
conditions []testCondition
|
|
wantErrContains string
|
|
}{
|
|
{
|
|
testName: "invalid host set id",
|
|
hostSetId: "hsst_1234567890",
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 1,
|
|
condition: "dns:abcd",
|
|
},
|
|
{
|
|
priority: 2,
|
|
condition: "cidr:1.2.3.4",
|
|
},
|
|
},
|
|
wantErrContains: "host_set_fkey",
|
|
},
|
|
{
|
|
testName: "invalid condition prefix",
|
|
hostSetId: hs.PublicId,
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 1,
|
|
condition: "dsn:abcd",
|
|
},
|
|
},
|
|
wantErrContains: "condition_has_valid_prefix",
|
|
},
|
|
{
|
|
testName: "invalid condition length",
|
|
hostSetId: hs.PublicId,
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 1,
|
|
condition: "dns:",
|
|
},
|
|
},
|
|
wantErrContains: "condition_must_not_be_too_short",
|
|
},
|
|
{
|
|
testName: "invalid priority",
|
|
hostSetId: hs.PublicId,
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 0,
|
|
condition: "dns:abcd",
|
|
},
|
|
},
|
|
wantErrContains: "priority_must_be_greater_than_zero",
|
|
},
|
|
{
|
|
testName: "duplicate priority",
|
|
hostSetId: hs.PublicId,
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 1,
|
|
condition: "dns:abcd",
|
|
},
|
|
{
|
|
priority: 1,
|
|
condition: "cidr:1.2.3.4",
|
|
},
|
|
},
|
|
wantErrContains: "host_set_preferred_endpoint_pkey",
|
|
},
|
|
{
|
|
testName: "invalid char 1",
|
|
hostSetId: hs.PublicId,
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 1,
|
|
condition: "dns:ab|cd",
|
|
},
|
|
{
|
|
priority: 1,
|
|
condition: "cidr:1.2.3.4",
|
|
},
|
|
},
|
|
wantErrContains: "condition_does_not_contain_invalid_chars",
|
|
},
|
|
{
|
|
testName: "invalid char 2",
|
|
hostSetId: hs.PublicId,
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 1,
|
|
condition: "dns:abcd",
|
|
},
|
|
{
|
|
priority: 1,
|
|
condition: "cidr:1.2=.3.4",
|
|
},
|
|
},
|
|
wantErrContains: "condition_does_not_contain_invalid_chars",
|
|
},
|
|
{
|
|
testName: "valid",
|
|
hostSetId: hs.PublicId,
|
|
conditions: []testCondition{
|
|
{
|
|
priority: 1,
|
|
condition: "dns:abcd",
|
|
},
|
|
{
|
|
priority: 2,
|
|
condition: "cidr:1.2.3.4",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range insertTests {
|
|
t.Run("insert: "+tt.testName, func(t *testing.T) {
|
|
assert, require := assert.New(t), require.New(t)
|
|
_, err := rw.Exec(ctx, "delete from host_set_preferred_endpoint where host_set_id = ?", []interface{}{tt.hostSetId})
|
|
require.NoError(err)
|
|
|
|
// Add items to insert
|
|
var items []interface{}
|
|
for _, cond := range tt.conditions {
|
|
ep := host.AllocPreferredEndpoint()
|
|
ep.HostSetId = tt.hostSetId
|
|
ep.Condition = cond.condition
|
|
ep.Priority = cond.priority
|
|
items = append(items, ep)
|
|
}
|
|
err = rw.CreateItems(ctx, items)
|
|
if tt.wantErrContains != "" {
|
|
require.Error(err)
|
|
assert.Contains(err.Error(), tt.wantErrContains)
|
|
return
|
|
}
|
|
require.NoError(err)
|
|
})
|
|
}
|
|
}
|