influxdb/cmd/integration_test.go

92 lines
2.0 KiB
Go

package cmd_test
import (
"io/ioutil"
"os"
"path/filepath"
client "github.com/influxdata/influxdb/client/v2"
"github.com/influxdata/influxdb/cmd/influxd/run"
"github.com/influxdata/influxdb/services/httpd"
)
type TestRunCommand struct {
*run.Command
// Temporary directory used for default data, meta, and wal dirs.
Dir string
}
func NewTestRunCommand(env map[string]string) *TestRunCommand {
dir, err := ioutil.TempDir("", "testrun-")
if err != nil {
panic(err)
}
cmd := run.NewCommand()
cmd.Getenv = func(k string) string {
// Return value in env map, if set.
if env != nil {
if v, ok := env[k]; ok {
return v
}
}
// If the key wasn't explicitly set in env, use some reasonable defaults for test.
switch k {
case "INFLUXDB_DATA_DIR":
return filepath.Join(dir, "data")
case "INFLUXDB_META_DIR":
return filepath.Join(dir, "meta")
case "INFLUXDB_DATA_WAL_DIR":
return filepath.Join(dir, "wal")
case "INFLUXDB_HTTP_BIND_ADDRESS":
return "localhost:0"
case "INFLUXDB_BIND_ADDRESS":
return "localhost:0"
case "INFLUXDB_REPORTING_DISABLED":
return "true"
default:
return ""
}
}
return &TestRunCommand{
Command: cmd,
Dir: dir,
}
}
// MustRun calls Command.Run and panics if there is an error.
func (c *TestRunCommand) MustRun() {
if err := c.Command.Run("-config", os.DevNull); err != nil {
panic(err)
}
}
// HTTPClient returns a new v2 HTTP client.
func (c *TestRunCommand) HTTPClient() client.Client {
cl, err := client.NewHTTPClient(client.HTTPConfig{
Addr: "http://" + c.BoundHTTPAddr(),
})
if err != nil {
panic(err)
}
return cl
}
// BoundHTTPAddr returns the bind address of the HTTP service, in form "localhost:65432".
func (c *TestRunCommand) BoundHTTPAddr() string {
for _, s := range c.Command.Server.Services {
if s, ok := s.(*httpd.Service); ok {
return s.BoundHTTPAddr()
}
}
panic("Did not find HTTPD service!")
}
func (c *TestRunCommand) Cleanup() {
c.Command.Close()
os.RemoveAll(c.Dir)
}