Revert "Allow the TestController to be used outside of our module."
This reverts commit e1010ba0
This commit is contained in:
1 parent
e1010ba055
commit
ff705bf3b2
2 files changed
+4
-112
No files matched your search
@@ -19,7 +19,6 @@ type TestController struct {
|
||||
b *base.Server
|
||||
c *Controller
|
||||
t *testing.T
|
||||
addr string // The address the Controller API is listening on
|
||||
client *api.Client
|
||||
ctx context.Context
|
||||
cancel context.CancelFunc
|
||||
@@ -42,10 +41,7 @@ func (tc *TestController) Cancel() {
|
||||
tc.cancel()
|
||||
}
|
||||
|
||||
func (tc *TestController) ApiAddress() string {
|
||||
if tc.addr != "" {
|
||||
return tc.addr
|
||||
}
|
||||
func (tc *TestController) buildClient() {
|
||||
var apiLn *base.ServerListener
|
||||
for _, listener := range tc.b.Listeners {
|
||||
if listener.Config.Purpose[0] == "api" {
|
||||
@@ -56,20 +52,17 @@ func (tc *TestController) ApiAddress() string {
|
||||
if apiLn == nil {
|
||||
tc.t.Fatal("could not find api listener")
|
||||
}
|
||||
|
||||
tcpAddr, ok := apiLn.Mux.Addr().(*net.TCPAddr)
|
||||
if !ok {
|
||||
tc.t.Fatal("could not parse address as a TCP addr")
|
||||
}
|
||||
tc.addr = fmt.Sprintf("http://%s:%d", tcpAddr.IP.String(), tcpAddr.Port)
|
||||
return tc.addr
|
||||
}
|
||||
|
||||
func (tc *TestController) buildClient() {
|
||||
addr := fmt.Sprintf("http://%s:%d", tcpAddr.IP.String(), tcpAddr.Port)
|
||||
client, err := api.NewClient(nil)
|
||||
if err != nil {
|
||||
tc.t.Fatal(fmt.Errorf("error creating client: %w", err))
|
||||
}
|
||||
if err := client.SetAddr(tc.ApiAddress()); err != nil {
|
||||
if err := client.SetAddr(addr); err != nil {
|
||||
tc.t.Fatal(fmt.Errorf("error setting client address: %w", err))
|
||||
}
|
||||
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/watchtower/internal/cmd/config"
|
||||
"github.com/hashicorp/watchtower/internal/servers/controller"
|
||||
)
|
||||
|
||||
func getOpts(opt ...Option) (*controller.TestControllerOpts, error) {
|
||||
opts := &option{
|
||||
tcOptions: &controller.TestControllerOpts{},
|
||||
}
|
||||
for _, o := range opt {
|
||||
if err := o(opts); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if opts.setWithConfigFile && opts.setWithConfigText {
|
||||
return nil, fmt.Errorf("Cannot provide both WithConfigFile and WithConfigText")
|
||||
}
|
||||
return opts.tcOptions, nil
|
||||
}
|
||||
|
||||
type option struct {
|
||||
tcOptions *controller.TestControllerOpts
|
||||
setWithConfigFile bool
|
||||
setWithConfigText bool
|
||||
setDisableDatabaseCreation bool
|
||||
setDefaultOrgId bool
|
||||
}
|
||||
|
||||
type Option func(*option) error
|
||||
|
||||
// WithConfigFile provides the given ConfigFile to the built TestController. This option can not be used if WithConfigText is used.
|
||||
func WithConfigFile(f string) Option {
|
||||
return func(c *option) error {
|
||||
if c.setWithConfigFile {
|
||||
return fmt.Errorf("WithConfigFile provided more than once.")
|
||||
}
|
||||
c.setWithConfigFile = true
|
||||
cfg, err := config.LoadFile(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.tcOptions.Config = cfg
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithConfigText configures the TestController sets up the Controller using the provided config text. This option cannot be used if WithConfigFile is used.
|
||||
func WithConfigText(ct string) Option {
|
||||
return func(c *option) error {
|
||||
if c.setWithConfigText {
|
||||
return fmt.Errorf("WithConfigText provided more than once.")
|
||||
}
|
||||
c.setWithConfigText = true
|
||||
cfg, err := config.Parse(ct)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.tcOptions.Config = cfg
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// DisableDatabaseCreation skips creating a database in docker and allows one to be provided through a tcOptions.
|
||||
func DisableDatabaseCreation() Option {
|
||||
return func(c *option) error {
|
||||
if c.setDisableDatabaseCreation {
|
||||
return fmt.Errorf("DisableDatabaseCreation provided more than once.")
|
||||
}
|
||||
c.setDisableDatabaseCreation = true
|
||||
c.tcOptions.DisableDatabaseCreation = true
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithDefaultOrgId sets the org id to the one provided here.
|
||||
func WithDefaultOrgId(id string) Option {
|
||||
return func(c *option) error {
|
||||
if c.setDefaultOrgId {
|
||||
return fmt.Errorf("WithDefaultOrgId provided more than once.")
|
||||
}
|
||||
c.setDefaultOrgId = true
|
||||
c.tcOptions.DefaultOrgId = id
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// NewTestController blocks until a new TestController is created, returns the url for the TestController and a function
|
||||
// that can be called to tear down the controller after it has been used for testing.
|
||||
func NewTestController(t *testing.T, opt ...Option) (string, func()) {
|
||||
conf, err := getOpts(opt...)
|
||||
if err != nil {
|
||||
t.Fatal("Couldn't create TestController: %v", err)
|
||||
}
|
||||
tc := controller.NewTestController(t, conf)
|
||||
return tc.ApiAddress(), tc.Shutdown
|
||||
}
|
||||
Reference in new issue
Block a user