Added in test for following redirects. https://github.com/influxdata/telegraf/issues/2191 This depends on code/PR for influxDB https://github.com/influxdata/influxdb/pull/7803
This commit is contained in:
parent
fd1feff7b4
commit
93fff5ff2e
|
@ -38,6 +38,9 @@ type InfluxDB struct {
|
|||
// Use SSL but skip chain & host verification
|
||||
InsecureSkipVerify bool
|
||||
|
||||
// Follow Redirects even for puts/posts. This can be insuecure
|
||||
InsecureFollowRedirect bool
|
||||
|
||||
// Precision is only here for legacy support. It will be ignored.
|
||||
Precision string
|
||||
|
||||
|
@ -117,17 +120,22 @@ func (i *InfluxDB) Connect() error {
|
|||
default:
|
||||
// If URL doesn't start with "udp", assume HTTP client
|
||||
c, err := client.NewHTTPClient(client.HTTPConfig{
|
||||
Addr: u,
|
||||
Username: i.Username,
|
||||
Password: i.Password,
|
||||
UserAgent: i.UserAgent,
|
||||
Timeout: i.Timeout.Duration,
|
||||
TLSConfig: tlsCfg,
|
||||
Addr: u,
|
||||
Username: i.Username,
|
||||
Password: i.Password,
|
||||
UserAgent: i.UserAgent,
|
||||
Timeout: i.Timeout.Duration,
|
||||
InsecureFollowRedirect: i.InsecureFollowRedirect,
|
||||
TLSConfig: tlsCfg,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if i.InsecureFollowRedirect {
|
||||
c.Ping(10)
|
||||
}
|
||||
|
||||
err = createDatabase(c, i.Database)
|
||||
if err != nil {
|
||||
log.Println("E! Database creation failed: " + err.Error())
|
||||
|
|
|
@ -39,3 +39,75 @@ func TestHTTPInflux(t *testing.T) {
|
|||
err = i.Write(testutil.MockMetrics())
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
// TestHTTPInfluxFollow301RedirectFalse verifies that the default behavior is for
|
||||
// InsecureFollowRedirect is false and that it will generate an error.
|
||||
func TestHTTPInfluxFollow301RedirectFalse(t *testing.T) {
|
||||
|
||||
// The influxDB HTTP server
|
||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
fmt.Fprintln(w, `{"results":[{}]}`)
|
||||
}))
|
||||
defer ts.Close()
|
||||
|
||||
// A intermediate HTTP server which sends a redirect
|
||||
redirectServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "test/html")
|
||||
w.Header().Set("Location", ts.URL)
|
||||
w.WriteHeader(http.StatusMovedPermanently)
|
||||
fmt.Fprintln(w, `<html><head><title>301 Moved Permanently</title></head>`)
|
||||
fmt.Fprintln(w, `<body bgcolor="white"><center><h1>301 Moved Permanently</h1></center><hr><center>nginx/1.10.0 (Ubuntu)</center></body></html>`)
|
||||
}))
|
||||
defer redirectServer.Close()
|
||||
|
||||
i := InfluxDB{
|
||||
URLs: []string{redirectServer.URL},
|
||||
}
|
||||
|
||||
err := i.Connect()
|
||||
require.NoError(t, err)
|
||||
|
||||
// This should be empty because we have one URL, with a redirect. Since we don't
|
||||
// follow it, the connection is not added.
|
||||
if len(i.conns) != 0 {
|
||||
t.Errorf("Did not get an empty list of connections: %s\n", i.conns)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// TestHTTPInfluxFollow301RedirectTrue verifies that if InsecureFollowRedirect
|
||||
// is set to true, then Ping() will be called and the CheckRedirect function will
|
||||
// be enabled and will set URL to the last redirect in the chain. Up to 10
|
||||
// redirects max will be followed ( This is net/http behavior )
|
||||
func TestHTTPInfluxFollow301RedirectTrue(t *testing.T) {
|
||||
|
||||
// The influxDB HTTP server
|
||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
fmt.Fprintln(w, `{"results":[{}]}`)
|
||||
}))
|
||||
defer ts.Close()
|
||||
|
||||
// A intermediate HTTP server which sends a redirect
|
||||
redirectServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "test/html")
|
||||
w.Header().Set("Location", ts.URL)
|
||||
w.WriteHeader(http.StatusMovedPermanently)
|
||||
fmt.Fprintln(w, `<html><head><title>301 Moved Permanently</title></head>`)
|
||||
fmt.Fprintln(w, `<body bgcolor="white"><center><h1>301 Moved Permanently</h1></center><hr><center>nginx/1.10.0 (Ubuntu)</center></body></html>`)
|
||||
}))
|
||||
defer redirectServer.Close()
|
||||
|
||||
i := InfluxDB{
|
||||
URLs: []string{redirectServer.URL},
|
||||
InsecureFollowRedirect: true,
|
||||
}
|
||||
|
||||
err := i.Connect()
|
||||
|
||||
require.NoError(t, err)
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue