Files
grafana/pkg/setting/setting_data_proxy_test.go
T

113 lines
3.0 KiB
Go

package setting
import (
"regexp"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/ini.v1"
)
func TestReadDataProxySettings(t *testing.T) {
t.Run("should use default values when ini is empty", func(t *testing.T) {
f := ini.Empty()
proxy := ReadDataProxySettings(f)
assertDataProxyDefaults(t, proxy)
})
t.Run("should use default values when section exists with no values", func(t *testing.T) {
f := ini.Empty()
_, err := f.NewSection("dataproxy")
require.NoError(t, err)
proxy := ReadDataProxySettings(f)
assertDataProxyDefaults(t, proxy)
})
t.Run("should use custom values when section has overrides", func(t *testing.T) {
iniFile := `
[dataproxy]
send_user_header = true
logging = true
timeout = 60
dialTimeout = 20
keep_alive_seconds = 60
tls_handshake_timeout_seconds = 20
expect_continue_timeout_seconds = 2
max_conns_per_host = 100
max_idle_connections = 50
idle_conn_timeout_seconds = 120
response_limit = 5242880
row_limit = 500000
user_agent = CustomAgent/1.0
`
f, err := ini.Load([]byte(iniFile))
require.NoError(t, err)
proxy := ReadDataProxySettings(f)
assert.True(t, proxy.SendUserHeader)
assert.True(t, proxy.Logging)
assert.Equal(t, 60, proxy.Timeout)
assert.Equal(t, 20, proxy.DialTimeout)
assert.Equal(t, 60, proxy.KeepAlive)
assert.Equal(t, 20, proxy.TLSHandshakeTimeout)
assert.Equal(t, 2, proxy.ExpectContinueTimeout)
assert.Equal(t, 100, proxy.MaxConnsPerHost)
assert.Equal(t, 50, proxy.MaxIdleConns)
assert.Equal(t, 120, proxy.IdleConnTimeout)
assert.Equal(t, int64(5242880), proxy.ResponseLimit)
assert.Equal(t, int64(500000), proxy.RowLimit)
assert.Equal(t, "CustomAgent/1.0", proxy.UserAgent)
})
t.Run("should set default row limit when row_limit is zero", func(t *testing.T) {
iniFile := `
[dataproxy]
row_limit = 0
`
f, err := ini.Load([]byte(iniFile))
require.NoError(t, err)
proxy := ReadDataProxySettings(f)
assert.Equal(t, defaultDataProxyRowLimit, proxy.RowLimit)
})
t.Run("should set default row limit when row_limit is negative", func(t *testing.T) {
iniFile := `
[dataproxy]
row_limit = -100
`
f, err := ini.Load([]byte(iniFile))
require.NoError(t, err)
proxy := ReadDataProxySettings(f)
assert.Equal(t, defaultDataProxyRowLimit, proxy.RowLimit)
})
}
func assertDataProxyDefaults(t *testing.T, proxy ProxySettings) {
t.Helper()
assert.False(t, proxy.SendUserHeader)
assert.False(t, proxy.Logging)
assert.Equal(t, 30, proxy.Timeout)
assert.Equal(t, 10, proxy.DialTimeout)
assert.Equal(t, 30, proxy.KeepAlive)
assert.Equal(t, 10, proxy.TLSHandshakeTimeout)
assert.Equal(t, 1, proxy.ExpectContinueTimeout)
assert.Equal(t, 0, proxy.MaxConnsPerHost)
assert.Equal(t, 0, proxy.MaxIdleConns)
assert.Equal(t, 90, proxy.IdleConnTimeout)
assert.Equal(t, int64(0), proxy.ResponseLimit)
assert.Equal(t, defaultDataProxyRowLimit, proxy.RowLimit)
// UserAgent should match "Grafana/{version}" pattern
assert.Regexp(t, regexp.MustCompile(`^Grafana/.*`), proxy.UserAgent)
}