feat: return error if API token required but not found (#310)
This commit is contained in:
parent
c3690d8584
commit
81de7e63dd
@ -85,6 +85,9 @@ func newApiClient(ctx *cli.Context, configSvc config.Service, injectToken bool)
|
||||
configParams.Host = parsedHost
|
||||
|
||||
if injectToken {
|
||||
if cfg.Token == "" {
|
||||
return nil, fmt.Errorf("API token required. Pass `--token`, set `INFLUX_TOKEN`, or use `influx config set --token` to specify your token value")
|
||||
}
|
||||
configParams.Token = &cfg.Token
|
||||
}
|
||||
if ctx.IsSet(traceIdFlagName) {
|
||||
|
175
cmd/influx/global_test.go
Normal file
175
cmd/influx/global_test.go
Normal file
@ -0,0 +1,175 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/influxdata/influx-cli/v2/api"
|
||||
"github.com/influxdata/influx-cli/v2/config"
|
||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
func TestNewAPIClient(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
cfg config.Config
|
||||
flags [][2]string
|
||||
injectToken bool
|
||||
assertions func(*testing.T, *api.APIClient)
|
||||
}{
|
||||
{
|
||||
name: "no token specified, without injectToken",
|
||||
cfg: config.Config{
|
||||
Name: "test",
|
||||
Active: true,
|
||||
Host: "http://localhost:8086",
|
||||
Org: "test",
|
||||
},
|
||||
assertions: func(t *testing.T, c *api.APIClient) {
|
||||
assert.Equal(t, "localhost:8086", c.GetConfig().Host)
|
||||
assert.Equal(t, "http", c.GetConfig().Scheme)
|
||||
assert.True(t, strings.HasPrefix(c.GetConfig().UserAgent, "influx/"))
|
||||
assert.NotContains(t, c.GetConfig().DefaultHeader, "Authorization")
|
||||
assert.Equal(t, false, c.GetConfig().Debug)
|
||||
transport := c.GetConfig().HTTPClient.Transport.(*http.Transport)
|
||||
assert.Equal(t, false, transport.TLSClientConfig.InsecureSkipVerify)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "no flags specified",
|
||||
cfg: config.Config{
|
||||
Name: "test",
|
||||
Active: true,
|
||||
Host: "http://localhost:8086",
|
||||
Token: "test",
|
||||
Org: "test",
|
||||
},
|
||||
injectToken: true,
|
||||
assertions: func(t *testing.T, c *api.APIClient) {
|
||||
assert.Equal(t, "localhost:8086", c.GetConfig().Host)
|
||||
assert.Equal(t, "http", c.GetConfig().Scheme)
|
||||
assert.True(t, strings.HasPrefix(c.GetConfig().UserAgent, "influx/"))
|
||||
assert.Equal(t, "Token test", c.GetConfig().DefaultHeader["Authorization"])
|
||||
assert.Equal(t, false, c.GetConfig().Debug)
|
||||
transport := c.GetConfig().HTTPClient.Transport.(*http.Transport)
|
||||
assert.Equal(t, false, transport.TLSClientConfig.InsecureSkipVerify)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "flags specified",
|
||||
cfg: config.Config{
|
||||
Name: "test",
|
||||
Active: true,
|
||||
Host: "http://localhost:8086",
|
||||
Token: "test",
|
||||
Org: "test",
|
||||
},
|
||||
flags: [][2]string{
|
||||
{"token", "token-from-flag"},
|
||||
{"host", "http://localhost:9999"},
|
||||
{"skip-verify", "true"},
|
||||
{"http-debug", "true"},
|
||||
{"trace-debug-id", "trace-id-from-flag"},
|
||||
},
|
||||
injectToken: true,
|
||||
assertions: func(t *testing.T, c *api.APIClient) {
|
||||
assert.Equal(t, "localhost:9999", c.GetConfig().Host)
|
||||
assert.Equal(t, "http", c.GetConfig().Scheme)
|
||||
assert.True(t, strings.HasPrefix(c.GetConfig().UserAgent, "influx/"))
|
||||
assert.Equal(t, "Token token-from-flag", c.GetConfig().DefaultHeader["Authorization"])
|
||||
assert.Equal(t, "trace-id-from-flag", c.GetConfig().DefaultHeader["Zap-Trace-Span"])
|
||||
assert.Equal(t, true, c.GetConfig().Debug)
|
||||
transport := c.GetConfig().HTTPClient.Transport.(*http.Transport)
|
||||
assert.Equal(t, true, transport.TLSClientConfig.InsecureSkipVerify)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctrl := gomock.NewController(t)
|
||||
|
||||
cmd := cli.Command{Name: "TEST", Flags: commonFlagsNoPrint()}
|
||||
flagSet := flag.NewFlagSet("", flag.ContinueOnError)
|
||||
for _, f := range cmd.Flags {
|
||||
f.Apply(flagSet)
|
||||
}
|
||||
for _, f := range tc.flags {
|
||||
require.NoError(t, flagSet.Set(f[0], f[1]))
|
||||
}
|
||||
ctx := cli.NewContext(nil, flagSet, nil)
|
||||
ctx.Command = cmd
|
||||
|
||||
svc := mock.NewMockConfigService(ctrl)
|
||||
svc.EXPECT().Active().Return(tc.cfg, nil)
|
||||
|
||||
c, err := newApiClient(ctx, svc, tc.injectToken)
|
||||
require.NoError(t, err)
|
||||
|
||||
tc.assertions(t, c)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewAPIClientErrors(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
cfg config.Config
|
||||
injectToken bool
|
||||
expectedErrorContains string
|
||||
}{
|
||||
{
|
||||
name: "invalid host",
|
||||
cfg: config.Config{
|
||||
Name: "test",
|
||||
Active: true,
|
||||
Host: ":/:invalid:host:value",
|
||||
Token: "test",
|
||||
Org: "test",
|
||||
},
|
||||
expectedErrorContains: "is invalid",
|
||||
},
|
||||
{
|
||||
name: "missing token",
|
||||
cfg: config.Config{
|
||||
Name: "test",
|
||||
Active: true,
|
||||
Host: "http://localhost:8086",
|
||||
Org: "test",
|
||||
},
|
||||
injectToken: true,
|
||||
expectedErrorContains: "API token required",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctrl := gomock.NewController(t)
|
||||
|
||||
flagSet := flag.NewFlagSet("", flag.ContinueOnError)
|
||||
ctx := cli.NewContext(nil, flagSet, nil)
|
||||
|
||||
svc := mock.NewMockConfigService(ctrl)
|
||||
svc.EXPECT().Active().Return(tc.cfg, nil)
|
||||
|
||||
_, err := newApiClient(ctx, svc, tc.injectToken)
|
||||
require.Error(t, err)
|
||||
|
||||
assert.Contains(t, err.Error(), tc.expectedErrorContains)
|
||||
})
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user