From cfe36e91dead52a14cfdcc6236f5e3672c0767a8 Mon Sep 17 00:00:00 2001 From: Jim Lambert Date: Wed, 12 Aug 2020 10:11:57 -0400 Subject: [PATCH] basic repo --- internal/kms/repository.go | 43 ++++++++++++++++ internal/kms/repository_test.go | 91 +++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 internal/kms/repository.go create mode 100644 internal/kms/repository_test.go diff --git a/internal/kms/repository.go b/internal/kms/repository.go new file mode 100644 index 0000000000..a4c07b69fd --- /dev/null +++ b/internal/kms/repository.go @@ -0,0 +1,43 @@ +package kms + +import ( + "errors" + + "github.com/hashicorp/boundary/internal/db" + wrapping "github.com/hashicorp/go-kms-wrapping" +) + +// Repository is the iam database repository +type Repository struct { + reader db.Reader + writer db.Writer + wrapper wrapping.Wrapper + + // defaultLimit provides a default for limiting the number of results returned from the repo + defaultLimit int +} + +// NewRepository creates a new kms Repository. Supports the options: WithLimit +// which sets a default limit on results returned by repo operations. +func NewRepository(r db.Reader, w db.Writer, wrapper wrapping.Wrapper, opt ...Option) (*Repository, error) { + if r == nil { + return nil, errors.New("error creating db repository with nil reader") + } + if w == nil { + return nil, errors.New("error creating db repository with nil writer") + } + if wrapper == nil { + return nil, errors.New("error creating db repository with nil wrapper") + } + opts := getOpts(opt...) + if opts.withLimit == 0 { + // zero signals the boundary defaults should be used. + opts.withLimit = db.DefaultLimit + } + return &Repository{ + reader: r, + writer: w, + wrapper: wrapper, + defaultLimit: opts.withLimit, + }, nil +} diff --git a/internal/kms/repository_test.go b/internal/kms/repository_test.go new file mode 100644 index 0000000000..8b0d3c03da --- /dev/null +++ b/internal/kms/repository_test.go @@ -0,0 +1,91 @@ +package kms + +import ( + "testing" + + "github.com/hashicorp/boundary/internal/db" + wrapping "github.com/hashicorp/go-kms-wrapping" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestNewRepository(t *testing.T) { + t.Parallel() + conn, _ := db.TestSetup(t, "postgres") + rw := db.New(conn) + wrapper := db.TestWrapper(t) + type args struct { + r db.Reader + w db.Writer + wrapper wrapping.Wrapper + } + tests := []struct { + name string + args args + want *Repository + wantErr bool + wantErrString string + }{ + { + name: "valid", + args: args{ + r: rw, + w: rw, + wrapper: wrapper, + }, + want: &Repository{ + reader: rw, + writer: rw, + wrapper: wrapper, + defaultLimit: db.DefaultLimit, + }, + wantErr: false, + }, + { + name: "nil-wrapper", + args: args{ + r: rw, + w: rw, + wrapper: nil, + }, + want: nil, + wantErr: true, + wantErrString: "error creating db repository with nil wrapper", + }, + { + name: "nil-writer", + args: args{ + r: rw, + w: nil, + wrapper: wrapper, + }, + want: nil, + wantErr: true, + wantErrString: "error creating db repository with nil writer", + }, + { + name: "nil-reader", + args: args{ + r: nil, + w: rw, + wrapper: wrapper, + }, + want: nil, + wantErr: true, + wantErrString: "error creating db repository with nil reader", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert, require := assert.New(t), require.New(t) + got, err := NewRepository(tt.args.r, tt.args.w, tt.args.wrapper) + if tt.wantErr { + require.Error(err) + assert.Equal(err.Error(), tt.wantErrString) + return + } + require.NoError(err) + assert.Equal(tt.want, got) + }) + } +}