Files
threshold/internal/db/schema/migrations/oss/postgres_17_05_test.go
T

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)
})
}
}