Add source to worker tags table (#2087)
* Remove the server_id from session table, change it to worker_id on session_connection
This is step 1 in updating the worker table. The worker is becoming a public resource so it must have
a public id. We drop the server_id column on the session_connection table and add the worker_id column
so we can use the wt_public_key type. Since db migrations are applied while the controller is offline,
it should be safe to assume all session connections are not in a running state, thus allowing us to null
out all the worker ids in the session_connection table.
For now we don't have very good enforcement of the wt_public_id contraints, since the id is currently
defined in the worker config, but this will soon change and the worker's id will be generated by the
controller.
* Adding worker tag db writing test.
* Move the server table back to the top.
* Update comment for the worker object.
* Update comment for the worker table.
* Add worker tag sources ("config" or "api")
* Revert renaming of UpsertWorker until later.
* Remove no longer needed files.
* Moving the TestWorker into the servers package. Fix the worker tags test.
* Update internal/proto/controller/storage/servers/store/v1/worker.proto
Co-authored-by: Irena Rindos <irenarindos@users.noreply.github.com>
* Place the repos back together so they can be refactored in a different PR.
Co-authored-by: Irena Rindos <irenarindos@users.noreply.github.com>
This commit is contained in:
1 parent
12044af824
commit
3fbf901739
18 files changed
+171
-93
No files matched your search
@@ -71,7 +71,7 @@ func TestStatus(t *testing.T) {
|
||||
target.WithSessionConnectionLimit(-1),
|
||||
)
|
||||
|
||||
worker1 := session.TestWorker(t, conn, wrapper)
|
||||
worker1 := servers.TestWorker(t, conn, wrapper)
|
||||
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
@@ -239,7 +239,7 @@ func TestStatusSessionClosed(t *testing.T) {
|
||||
target.WithSessionConnectionLimit(-1),
|
||||
)
|
||||
|
||||
worker1 := session.TestWorker(t, conn, wrapper)
|
||||
worker1 := servers.TestWorker(t, conn, wrapper)
|
||||
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
@@ -421,7 +421,7 @@ func TestStatusDeadConnection(t *testing.T) {
|
||||
target.WithSessionConnectionLimit(-1),
|
||||
)
|
||||
|
||||
worker1 := session.TestWorker(t, conn, wrapper)
|
||||
worker1 := servers.TestWorker(t, conn, wrapper)
|
||||
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
|
||||
@@ -59,6 +59,19 @@ create trigger worker_update_time_column before update on server_worker
|
||||
for each row execute procedure update_time_column();
|
||||
|
||||
-- Create table worker tag
|
||||
create table server_worker_tag_enm (
|
||||
source text primary key
|
||||
constraint only_predefined_server_worker_tag_sources_allowed
|
||||
check (
|
||||
source in ('configuration', 'api')
|
||||
)
|
||||
);
|
||||
|
||||
insert into server_worker_tag_enm (source)
|
||||
values
|
||||
('configuration'),
|
||||
('api');
|
||||
|
||||
create table server_worker_tag (
|
||||
worker_id wt_public_id
|
||||
constraint server_worker_fkey
|
||||
@@ -67,7 +80,12 @@ create table server_worker_tag (
|
||||
on update cascade,
|
||||
key wt_tagpair,
|
||||
value wt_tagpair,
|
||||
primary key(worker_id, key, value)
|
||||
source text not null
|
||||
constraint server_worker_tag_enm_fkey
|
||||
references server_worker_tag_enm(source)
|
||||
on delete restrict
|
||||
on update cascade,
|
||||
primary key(worker_id, key, value, source)
|
||||
);
|
||||
|
||||
-- Aaand drop server_tag
|
||||
|
||||
@@ -55,4 +55,8 @@ message WorkerTag {
|
||||
// value is the value
|
||||
// @inject_tag: `gorm:"default:null"`
|
||||
string value = 30;
|
||||
|
||||
// source is the source of the tag. Either 'configuration' or 'api'.
|
||||
// @inject_tag: `gorm:"default:not_null"`
|
||||
string source = 40;
|
||||
}
|
||||
@@ -2,5 +2,5 @@ package servers
|
||||
|
||||
const (
|
||||
deleteWhereCreateTimeSql = `create_time < ?`
|
||||
deleteTagsSql = `worker_id = ?`
|
||||
deleteConfigTagsSql = `source = 'configuration' and worker_id = ?`
|
||||
)
|
||||
@@ -119,7 +119,8 @@ func (r *Repository) listControllersWithReader(ctx context.Context, reader db.Re
|
||||
|
||||
// ListTagsForWorkers returns a map from the worker's id to the list of Tags
|
||||
// that are for that worker. All options are ignored.
|
||||
func (r *Repository) ListTagsForWorkers(ctx context.Context, workerIds []string, opt ...Option) (map[string][]*Tag, error) {
|
||||
func (r *Repository) ListTagsForWorkers(ctx context.Context, workerIds []string, _ ...Option) (map[string][]*Tag, error) {
|
||||
const op = "servers.ListTagsForWorkers"
|
||||
var workerTags []*store.WorkerTag
|
||||
if err := r.reader.SearchWhere(
|
||||
ctx,
|
||||
@@ -128,7 +129,7 @@ func (r *Repository) ListTagsForWorkers(ctx context.Context, workerIds []string,
|
||||
[]interface{}{workerIds},
|
||||
db.WithLimit(-1),
|
||||
); err != nil {
|
||||
return nil, errors.Wrap(ctx, err, "servers.ListTagsForWorkers", errors.WithMsg(fmt.Sprintf("worker IDs %v", workerIds)))
|
||||
return nil, errors.Wrap(ctx, err, op, errors.WithMsg(fmt.Sprintf("worker IDs %v", workerIds)))
|
||||
}
|
||||
|
||||
ret := make(map[string][]*Tag, len(workerIds))
|
||||
@@ -185,7 +186,7 @@ func (r *Repository) UpsertWorker(ctx context.Context, worker *Worker, opt ...Op
|
||||
// delete all tags for the given worker, then add the new ones
|
||||
// we've been sent.
|
||||
if opts.withUpdateTags {
|
||||
_, err = w.Delete(ctx, &store.WorkerTag{}, db.WithWhere(deleteTagsSql, worker.GetPublicId()))
|
||||
_, err = w.Delete(ctx, &store.WorkerTag{}, db.WithWhere(deleteConfigTagsSql, worker.GetPublicId()))
|
||||
if err != nil {
|
||||
return errors.Wrap(ctx, err, op+":DeleteTags", errors.WithMsg(worker.GetPublicId()))
|
||||
}
|
||||
@@ -204,6 +205,7 @@ func (r *Repository) UpsertWorker(ctx context.Context, worker *Worker, opt ...Op
|
||||
WorkerId: worker.GetPublicId(),
|
||||
Key: v.Key,
|
||||
Value: v.Value,
|
||||
Source: string(ConfigurationTagSource),
|
||||
})
|
||||
}
|
||||
if err = w.CreateItems(ctx, tags); err != nil {
|
||||
|
||||
@@ -194,7 +194,7 @@ func TestTagUpdatingListing(t *testing.T) {
|
||||
require.Equal(exp, tags)
|
||||
}
|
||||
|
||||
func TestListServersWithLiveness(t *testing.T) {
|
||||
func TestListWorkersWithLiveness(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
|
||||
@@ -157,6 +157,9 @@ type WorkerTag struct {
|
||||
// value is the value
|
||||
// @inject_tag: `gorm:"default:null"`
|
||||
Value string `protobuf:"bytes,30,opt,name=value,proto3" json:"value,omitempty" gorm:"default:null"`
|
||||
// source is the source of the tag. Either 'configuration' or 'api'.
|
||||
// @inject_tag: `gorm:"default:null"`
|
||||
Source string `protobuf:"bytes,40,opt,name=source,proto3" json:"source,omitempty" gorm:"default:null"`
|
||||
}
|
||||
|
||||
func (x *WorkerTag) Reset() {
|
||||
@@ -212,6 +215,13 @@ func (x *WorkerTag) GetValue() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkerTag) GetSource() string {
|
||||
if x != nil {
|
||||
return x.Source
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var File_controller_storage_servers_store_v1_worker_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_controller_storage_servers_store_v1_worker_proto_rawDesc = []byte{
|
||||
@@ -244,16 +254,17 @@ var file_controller_storage_servers_store_v1_worker_proto_rawDesc = []byte{
|
||||
0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x46, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x63,
|
||||
0x6f, 0x70, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x50, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22,
|
||||
0x50, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09,
|
||||
0x68, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09,
|
||||
0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
|
||||
0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||
0x65, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
|
||||
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61,
|
||||
0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76,
|
||||
0x65, 0x72, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74,
|
||||
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,
|
||||
0x6e, 0x61, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72,
|
||||
0x65, 0x3b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
+12
-19
@@ -10,10 +10,8 @@ import (
|
||||
"github.com/hashicorp/boundary/internal/db/timestamp"
|
||||
"github.com/hashicorp/boundary/internal/iam"
|
||||
"github.com/hashicorp/boundary/internal/kms"
|
||||
"github.com/hashicorp/boundary/internal/servers/store"
|
||||
"github.com/hashicorp/boundary/internal/types/scope"
|
||||
wrapping "github.com/hashicorp/go-kms-wrapping/v2"
|
||||
"github.com/hashicorp/go-uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
)
|
||||
@@ -39,7 +37,7 @@ func TestKkmsKey(ctx context.Context, t *testing.T, conn *db.DB, wrapper wrappin
|
||||
return testKey
|
||||
}
|
||||
|
||||
func TestRootCertificate(ctx context.Context, t *testing.T, conn *db.DB, kmsKey string) *store.RootCertificate {
|
||||
func TestRootCertificate(ctx context.Context, t *testing.T, conn *db.DB, kmsKey string) *RootCertificate {
|
||||
t.Helper()
|
||||
rw := db.New(conn)
|
||||
|
||||
@@ -55,10 +53,10 @@ func TestRootCertificate(ctx context.Context, t *testing.T, conn *db.DB, kmsKey
|
||||
rootCertKeys, kmsKey, CurrentState)
|
||||
err = rw.Create(ctx, cert)
|
||||
require.NoError(t, err)
|
||||
return cert.RootCertificate
|
||||
return cert
|
||||
}
|
||||
|
||||
func TestWorkerAuth(ctx context.Context, t *testing.T, conn *db.DB, worker *store.Worker, kmsKey string) *store.WorkerAuth {
|
||||
func TestWorkerAuth(ctx context.Context, t *testing.T, conn *db.DB, worker *Worker, kmsKey string) *WorkerAuth {
|
||||
t.Helper()
|
||||
rw := db.New(conn)
|
||||
wSignPubKey := populateBytes(defaultLength)
|
||||
@@ -78,30 +76,25 @@ func TestWorkerAuth(ctx context.Context, t *testing.T, conn *db.DB, worker *stor
|
||||
err = rw.Create(ctx, workerAuth)
|
||||
require.NoError(t, err)
|
||||
|
||||
return workerAuth.WorkerAuth
|
||||
return workerAuth
|
||||
}
|
||||
|
||||
func TestWorker(t *testing.T, conn *db.DB, wrapper wrapping.Wrapper) *store.Worker {
|
||||
func TestWorker(t *testing.T, conn *db.DB, wrapper wrapping.Wrapper) *Worker {
|
||||
t.Helper()
|
||||
rw := db.New(conn)
|
||||
kms := kms.TestKms(t, conn, wrapper)
|
||||
serversRepo, err := NewRepository(rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
|
||||
id, err := uuid.GenerateUUID()
|
||||
id, err := newWorkerId(context.Background())
|
||||
require.NoError(t, err)
|
||||
id = "test-session-worker-" + id
|
||||
|
||||
name := "test-worker-" + id
|
||||
worker := &Worker{
|
||||
Worker: &store.Worker{
|
||||
PublicId: id,
|
||||
Name: name,
|
||||
Address: "127.0.0.1",
|
||||
ScopeId: scope.Global.String(),
|
||||
},
|
||||
}
|
||||
|
||||
worker := NewWorker(scope.Global.String(),
|
||||
WithPublicId(id),
|
||||
WithName(name),
|
||||
WithAddress("127.0.0.1"))
|
||||
_, _, err = serversRepo.UpsertWorker(context.Background(), worker)
|
||||
require.NoError(t, err)
|
||||
return worker.Worker
|
||||
return worker
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package servers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/db"
|
||||
"github.com/hashicorp/boundary/internal/types/scope"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestTestWorker(t *testing.T) {
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrapper := db.TestWrapper(t)
|
||||
tWorker := TestWorker(t, conn, wrapper)
|
||||
assert.NotNil(t, tWorker)
|
||||
assert.True(t, strings.HasPrefix(tWorker.GetPublicId(), WorkerPrefix))
|
||||
|
||||
lkpWorker := NewWorker(scope.Global.String(), WithPublicId(tWorker.GetPublicId()))
|
||||
rw := db.New(conn)
|
||||
require.NoError(t, rw.LookupById(context.Background(), lkpWorker))
|
||||
assert.NotNil(t, lkpWorker)
|
||||
}
|
||||
@@ -13,14 +13,6 @@ type Worker struct {
|
||||
Tags []*Tag `gorm:"-"`
|
||||
}
|
||||
|
||||
// A Tag is a custom key/value pair which can be attached to a Worker.
|
||||
// Multiple Tags may contain the same key and different values in which
|
||||
// case both key/value pairs are valid.
|
||||
type Tag struct {
|
||||
Key string
|
||||
Value string
|
||||
}
|
||||
|
||||
// NewWorker returns a new Worker. Valid options are WithName, WithDescription
|
||||
// WithAddress, and WithWorkerTags. All other options are ignored.
|
||||
func NewWorker(scopeId string, opt ...Option) *Worker {
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package servers
|
||||
|
||||
// A Tag is a custom key/value pair which can be attached to a Worker.
|
||||
// Multiple Tags may contain the same key and different values in which
|
||||
// case both key/value pairs are valid. Tags can be sourced from either the
|
||||
// worker's configuration or the api. key/value pairs can be the same from
|
||||
// different sources.
|
||||
type Tag struct {
|
||||
Key string
|
||||
Value string
|
||||
}
|
||||
|
||||
type TagSource string
|
||||
|
||||
const (
|
||||
ConfigurationTagSource TagSource = "configuration"
|
||||
ApiTagSource TagSource = "api"
|
||||
)
|
||||
|
||||
func (t TagSource) isValid() bool {
|
||||
return t == ConfigurationTagSource || t == ApiTagSource
|
||||
}
|
||||
|
||||
func (t TagSource) String() string {
|
||||
return string(t)
|
||||
}
|
||||
@@ -6,19 +6,16 @@ import (
|
||||
|
||||
"github.com/hashicorp/boundary/internal/db"
|
||||
"github.com/hashicorp/boundary/internal/servers/store"
|
||||
"github.com/hashicorp/boundary/internal/types/scope"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestWorkerTags_Create(t *testing.T) {
|
||||
t.Parallel()
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrapper := db.TestWrapper(t)
|
||||
rw := db.New(conn)
|
||||
|
||||
workerPublicid, err := newWorkerId(context.Background())
|
||||
require.NoError(t, err)
|
||||
worker := NewWorker(scope.Global.String(), WithPublicId(workerPublicid))
|
||||
worker := TestWorker(t, conn, wrapper)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
@@ -26,12 +23,41 @@ func TestWorkerTags_Create(t *testing.T) {
|
||||
wantCreateErr bool
|
||||
}{
|
||||
{
|
||||
name: "success",
|
||||
name: "success api source",
|
||||
want: &store.WorkerTag{
|
||||
WorkerId: worker.GetPublicId(),
|
||||
Key: "key",
|
||||
Value: "value",
|
||||
Source: ApiTagSource.String(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "success config source",
|
||||
want: &store.WorkerTag{
|
||||
WorkerId: worker.GetPublicId(),
|
||||
Key: "key",
|
||||
Value: "value",
|
||||
Source: ConfigurationTagSource.String(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "unknown source",
|
||||
want: &store.WorkerTag{
|
||||
WorkerId: worker.GetPublicId(),
|
||||
Key: "key",
|
||||
Value: "value",
|
||||
Source: "unknown",
|
||||
},
|
||||
wantCreateErr: true,
|
||||
},
|
||||
{
|
||||
name: "no source",
|
||||
want: &store.WorkerTag{
|
||||
WorkerId: worker.GetPublicId(),
|
||||
Key: "key",
|
||||
Value: "value",
|
||||
},
|
||||
wantCreateErr: true,
|
||||
},
|
||||
{
|
||||
name: "bad worker id",
|
||||
@@ -56,6 +82,7 @@ func TestWorkerTags_Create(t *testing.T) {
|
||||
WorkerId: worker.GetPublicId(),
|
||||
Value: "value",
|
||||
},
|
||||
wantCreateErr: true,
|
||||
},
|
||||
{
|
||||
name: "missing value",
|
||||
@@ -63,6 +90,7 @@ func TestWorkerTags_Create(t *testing.T) {
|
||||
WorkerId: worker.GetPublicId(),
|
||||
Key: "key",
|
||||
},
|
||||
wantCreateErr: true,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -72,6 +100,8 @@ func TestWorkerTags_Create(t *testing.T) {
|
||||
err := rw.Create(context.Background(), tt.want)
|
||||
if tt.wantCreateErr {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"github.com/hashicorp/boundary/internal/iam"
|
||||
"github.com/hashicorp/boundary/internal/kms"
|
||||
"github.com/hashicorp/boundary/internal/oplog"
|
||||
"github.com/hashicorp/boundary/internal/servers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -358,8 +359,8 @@ func TestRepository_orphanedConnections(t *testing.T) {
|
||||
|
||||
// Create two "workers". One will remain untouched while the other "goes
|
||||
// away and comes back" (worker 2).
|
||||
worker1 := TestWorker(t, conn, wrapper)
|
||||
worker2 := TestWorker(t, conn, wrapper)
|
||||
worker1 := servers.TestWorker(t, conn, wrapper)
|
||||
worker2 := servers.TestWorker(t, conn, wrapper)
|
||||
|
||||
// Create a few sessions on each, activate, and authorize a connection
|
||||
var connIds []string
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/servers"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/db"
|
||||
@@ -35,7 +36,7 @@ func TestService_AuthorizeConnection(t *testing.T) {
|
||||
composedOf.ExpirationTime = exp
|
||||
}
|
||||
s := TestSession(t, conn, wrapper, composedOf)
|
||||
srv := TestWorker(t, conn, wrapper)
|
||||
srv := servers.TestWorker(t, conn, wrapper)
|
||||
testServer = srv.PublicId
|
||||
tofu := TestTofu(t)
|
||||
_, _, err := repo.ActivateSession(context.Background(), s.PublicId, s.Version, tofu)
|
||||
|
||||
@@ -68,7 +68,7 @@ func TestWorkerStatusReport(t *testing.T) {
|
||||
{
|
||||
name: "No Sessions",
|
||||
caseFn: func(t *testing.T) testCase {
|
||||
worker := session.TestWorker(t, conn, wrapper)
|
||||
worker := servers.TestWorker(t, conn, wrapper)
|
||||
return testCase{
|
||||
worker: worker,
|
||||
req: []session.StateReport{},
|
||||
@@ -79,7 +79,7 @@ func TestWorkerStatusReport(t *testing.T) {
|
||||
{
|
||||
name: "No Sessions already canceled",
|
||||
caseFn: func(t *testing.T) testCase {
|
||||
worker := session.TestWorker(t, conn, wrapper)
|
||||
worker := servers.TestWorker(t, conn, wrapper)
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
HostId: h.GetPublicId(),
|
||||
@@ -111,7 +111,7 @@ func TestWorkerStatusReport(t *testing.T) {
|
||||
{
|
||||
name: "Still Active",
|
||||
caseFn: func(t *testing.T) testCase {
|
||||
worker := session.TestWorker(t, conn, wrapper)
|
||||
worker := servers.TestWorker(t, conn, wrapper)
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
HostId: h.GetPublicId(),
|
||||
@@ -145,7 +145,7 @@ func TestWorkerStatusReport(t *testing.T) {
|
||||
{
|
||||
name: "SessionClosed",
|
||||
caseFn: func(t *testing.T) testCase {
|
||||
worker := session.TestWorker(t, conn, wrapper)
|
||||
worker := servers.TestWorker(t, conn, wrapper)
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
HostId: h.GetPublicId(),
|
||||
@@ -185,7 +185,7 @@ func TestWorkerStatusReport(t *testing.T) {
|
||||
{
|
||||
name: "MultipleSessionsClosed",
|
||||
caseFn: func(t *testing.T) testCase {
|
||||
worker := session.TestWorker(t, conn, wrapper)
|
||||
worker := servers.TestWorker(t, conn, wrapper)
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
HostId: h.GetPublicId(),
|
||||
@@ -252,7 +252,7 @@ func TestWorkerStatusReport(t *testing.T) {
|
||||
{
|
||||
name: "OrphanedConnection",
|
||||
caseFn: func(t *testing.T) testCase {
|
||||
worker := session.TestWorker(t, conn, wrapper)
|
||||
worker := servers.TestWorker(t, conn, wrapper)
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
HostId: h.GetPublicId(),
|
||||
@@ -303,7 +303,7 @@ func TestWorkerStatusReport(t *testing.T) {
|
||||
{
|
||||
name: "MultipleSessionsAndOrphanedConnections",
|
||||
caseFn: func(t *testing.T) testCase {
|
||||
worker := session.TestWorker(t, conn, wrapper)
|
||||
worker := servers.TestWorker(t, conn, wrapper)
|
||||
sess := session.TestSession(t, conn, wrapper, session.ComposedOf{
|
||||
UserId: uId,
|
||||
HostId: h.GetPublicId(),
|
||||
|
||||
@@ -44,8 +44,8 @@ func TestSessionConnectionCleanupJob(t *testing.T) {
|
||||
|
||||
// Create two "workers". One will remain untouched while the other "goes
|
||||
// away and comes back" (worker 2).
|
||||
worker1 := TestWorker(t, conn, wrapper)
|
||||
worker2 := TestWorker(t, conn, wrapper)
|
||||
worker1 := servers.TestWorker(t, conn, wrapper)
|
||||
worker2 := servers.TestWorker(t, conn, wrapper)
|
||||
|
||||
// Create a few sessions on each, activate, and authorize a connection
|
||||
var connIds []string
|
||||
@@ -196,10 +196,10 @@ func TestCloseConnectionsForDeadWorkers(t *testing.T) {
|
||||
// firstly, the last worker will have no connections at all, and we will be
|
||||
// closing the others in stages to test multiple servers being closed at
|
||||
// once.
|
||||
worker1 := TestWorker(t, conn, wrapper)
|
||||
worker2 := TestWorker(t, conn, wrapper)
|
||||
worker3 := TestWorker(t, conn, wrapper)
|
||||
worker4 := TestWorker(t, conn, wrapper)
|
||||
worker1 := servers.TestWorker(t, conn, wrapper)
|
||||
worker2 := servers.TestWorker(t, conn, wrapper)
|
||||
worker3 := servers.TestWorker(t, conn, wrapper)
|
||||
worker4 := servers.TestWorker(t, conn, wrapper)
|
||||
|
||||
// Create sessions on the first three, activate, and authorize connections
|
||||
var worker1ConnIds, worker2ConnIds, worker3ConnIds []string
|
||||
@@ -471,7 +471,7 @@ func TestCloseWorkerlessConnections(t *testing.T) {
|
||||
}
|
||||
|
||||
// Setup deleted worker connections
|
||||
deletedWorker := TestWorker(t, conn, wrapper)
|
||||
deletedWorker := servers.TestWorker(t, conn, wrapper)
|
||||
dActiveConn := createConnection(deletedWorker.GetPublicId())
|
||||
dClosedConn := createConnection(deletedWorker.GetPublicId())
|
||||
connRepo.closeConnections(ctx, []CloseWith{{
|
||||
@@ -484,7 +484,7 @@ func TestCloseWorkerlessConnections(t *testing.T) {
|
||||
require.NoError(err)
|
||||
|
||||
// Non deleted worker case
|
||||
activeWorker := TestWorker(t, conn, wrapper)
|
||||
activeWorker := servers.TestWorker(t, conn, wrapper)
|
||||
activeConn := createConnection(activeWorker.GetPublicId())
|
||||
closedConn := createConnection(activeWorker.GetPublicId())
|
||||
connRepo.closeConnections(ctx, []CloseWith{{
|
||||
|
||||
@@ -6,8 +6,6 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/types/scope"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/auth/password"
|
||||
"github.com/hashicorp/boundary/internal/authtoken"
|
||||
"github.com/hashicorp/boundary/internal/db"
|
||||
@@ -16,12 +14,10 @@ import (
|
||||
"github.com/hashicorp/boundary/internal/host/static"
|
||||
"github.com/hashicorp/boundary/internal/iam"
|
||||
"github.com/hashicorp/boundary/internal/kms"
|
||||
"github.com/hashicorp/boundary/internal/servers"
|
||||
"github.com/hashicorp/boundary/internal/target"
|
||||
"github.com/hashicorp/boundary/internal/target/tcp"
|
||||
wrapping "github.com/hashicorp/go-kms-wrapping/v2"
|
||||
"github.com/hashicorp/go-secure-stdlib/base62"
|
||||
"github.com/hashicorp/go-uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
)
|
||||
@@ -180,28 +176,6 @@ func TestTofu(t testing.TB) []byte {
|
||||
return []byte(tofu)
|
||||
}
|
||||
|
||||
// TestWorker inserts a worker into the db to satisfy foreign key constraints.
|
||||
func TestWorker(t *testing.T, conn *db.DB, wrapper wrapping.Wrapper, opt ...Option) *servers.Worker {
|
||||
t.Helper()
|
||||
rw := db.New(conn)
|
||||
kms := kms.TestKms(t, conn, wrapper)
|
||||
serversRepo, err := servers.NewRepository(rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
|
||||
id, err := uuid.GenerateUUID()
|
||||
require.NoError(t, err)
|
||||
id = "test_session_worker-" + id
|
||||
|
||||
name := "test-worker-" + id
|
||||
worker := servers.NewWorker(scope.Global.String(),
|
||||
servers.WithPublicId(id),
|
||||
servers.WithName(name),
|
||||
servers.WithAddress("127.0.0.1"))
|
||||
_, _, err = serversRepo.UpsertWorker(context.Background(), worker)
|
||||
require.NoError(t, err)
|
||||
return worker
|
||||
}
|
||||
|
||||
// TestCert is a temporary test func that intentionally doesn't take testing.T
|
||||
// as a parameter. It's currently used in controller.jobTestingHandler() and
|
||||
// should be deprecated once that function is refactored to use sessions properly.
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"github.com/hashicorp/boundary/internal/db"
|
||||
"github.com/hashicorp/boundary/internal/iam"
|
||||
"github.com/hashicorp/boundary/internal/servers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -73,7 +74,7 @@ func Test_TestWorker(t *testing.T) {
|
||||
require := require.New(t)
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrapper := db.TestWrapper(t)
|
||||
w := TestWorker(t, conn, wrapper)
|
||||
w := servers.TestWorker(t, conn, wrapper)
|
||||
require.NotNil(w)
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user