mirror of https://github.com/grafana/loki
operator: Add support for configuring HTTP server timeouts (#9405)
Co-authored-by: Robert Jacob <rojacob@redhat.com>pull/9485/head^2
parent
a205dce836
commit
1b87aeab4e
@ -0,0 +1,142 @@ |
||||
package manifests |
||||
|
||||
import ( |
||||
"testing" |
||||
"time" |
||||
|
||||
"github.com/stretchr/testify/require" |
||||
|
||||
"github.com/grafana/loki/operator/internal/manifests/internal/config" |
||||
|
||||
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1" |
||||
) |
||||
|
||||
func TestNewTimeoutConfig_ReturnsDefaults_WhenLimitsSpecEmpty(t *testing.T) { |
||||
s := lokiv1.LokiStack{} |
||||
|
||||
got, err := NewTimeoutConfig(s.Spec.Limits) |
||||
require.NoError(t, err) |
||||
require.Equal(t, defaultTimeoutConfig, got) |
||||
} |
||||
|
||||
func TestNewTimeoutConfig_ReturnsCustomConfig_WhenLimitsSpecNotEmpty(t *testing.T) { |
||||
s := lokiv1.LokiStack{ |
||||
Spec: lokiv1.LokiStackSpec{ |
||||
Limits: &lokiv1.LimitsSpec{ |
||||
Global: &lokiv1.LimitsTemplateSpec{ |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "10m", |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
got, err := NewTimeoutConfig(s.Spec.Limits) |
||||
require.NoError(t, err) |
||||
|
||||
want := TimeoutConfig{ |
||||
Loki: config.HTTPTimeoutConfig{ |
||||
IdleTimeout: 30 * time.Second, |
||||
ReadTimeout: 1 * time.Minute, |
||||
WriteTimeout: 11 * time.Minute, |
||||
}, |
||||
Gateway: GatewayTimeoutConfig{ |
||||
ReadTimeout: 1*time.Minute + gatewayReadDuration, |
||||
WriteTimeout: 11*time.Minute + gatewayWriteDuration, |
||||
UpstreamWriteTimeout: 11 * time.Minute, |
||||
}, |
||||
} |
||||
|
||||
require.Equal(t, want, got) |
||||
} |
||||
|
||||
func TestNewTimeoutConfig_ReturnsCustomConfig_WhenLimitsSpecNotEmpty_UseMaxTenantQueryTimeout(t *testing.T) { |
||||
s := lokiv1.LokiStack{ |
||||
Spec: lokiv1.LokiStackSpec{ |
||||
Limits: &lokiv1.LimitsSpec{ |
||||
Global: &lokiv1.LimitsTemplateSpec{ |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "10m", |
||||
}, |
||||
}, |
||||
Tenants: map[string]lokiv1.LimitsTemplateSpec{ |
||||
"tenant-a": { |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "10m", |
||||
}, |
||||
}, |
||||
"tenant-b": { |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "20m", |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
got, err := NewTimeoutConfig(s.Spec.Limits) |
||||
require.NoError(t, err) |
||||
|
||||
want := TimeoutConfig{ |
||||
Loki: config.HTTPTimeoutConfig{ |
||||
IdleTimeout: 30 * time.Second, |
||||
ReadTimeout: 2 * time.Minute, |
||||
WriteTimeout: 21 * time.Minute, |
||||
}, |
||||
Gateway: GatewayTimeoutConfig{ |
||||
ReadTimeout: 2*time.Minute + gatewayReadDuration, |
||||
WriteTimeout: 21*time.Minute + gatewayWriteDuration, |
||||
UpstreamWriteTimeout: 21 * time.Minute, |
||||
}, |
||||
} |
||||
|
||||
require.Equal(t, want, got) |
||||
} |
||||
|
||||
func TestNewTimeoutConfig_ReturnsDefaults_WhenGlobalQueryTimeoutParseError(t *testing.T) { |
||||
s := lokiv1.LokiStack{ |
||||
Spec: lokiv1.LokiStackSpec{ |
||||
Limits: &lokiv1.LimitsSpec{ |
||||
Global: &lokiv1.LimitsTemplateSpec{ |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "invalid", |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
_, err := NewTimeoutConfig(s.Spec.Limits) |
||||
require.Error(t, err) |
||||
} |
||||
|
||||
func TestNewTimeoutConfig_ReturnsDefaults_WhenTenantQueryTimeoutParseError(t *testing.T) { |
||||
s := lokiv1.LokiStack{ |
||||
Spec: lokiv1.LokiStackSpec{ |
||||
Limits: &lokiv1.LimitsSpec{ |
||||
Global: &lokiv1.LimitsTemplateSpec{ |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "10m", |
||||
}, |
||||
}, |
||||
Tenants: map[string]lokiv1.LimitsTemplateSpec{ |
||||
"tenant-a": { |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "invalid", |
||||
}, |
||||
}, |
||||
"tenant-b": { |
||||
QueryLimits: &lokiv1.QueryLimitSpec{ |
||||
QueryTimeout: "20m", |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
_, err := NewTimeoutConfig(s.Spec.Limits) |
||||
require.Error(t, err) |
||||
} |
||||
Loading…
Reference in new issue