Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/loki/loki_test.go

88 lines
2.9 KiB

package loki
import (
"bytes"
"flag"
"io"
"strings"
"testing"
"time"
"github.com/grafana/dskit/flagext"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFlagDefaults(t *testing.T) {
c := Config{}
f := flag.NewFlagSet("test", flag.PanicOnError)
c.RegisterFlags(f)
buf := bytes.Buffer{}
f.SetOutput(&buf)
f.PrintDefaults()
const delim = '\n'
// Populate map with parsed default flags.
// Key is the flag and value is the default text.
gotFlags := make(map[string]string)
for {
line, err := buf.ReadString(delim)
if err == io.EOF {
break
}
require.NoError(t, err)
nextLine, err := buf.ReadString(delim)
require.NoError(t, err)
trimmedLine := strings.Trim(line, " \n")
splittedLine := strings.Split(trimmedLine, " ")[0]
gotFlags[splittedLine] = nextLine
}
flagToCheck := "-server.grpc.keepalive.min-time-between-pings"
require.Contains(t, gotFlags, flagToCheck)
require.Equal(t, c.Server.GRPCServerMinTimeBetweenPings, 10*time.Second)
require.Contains(t, gotFlags[flagToCheck], "(default 10s)")
flagToCheck = "-server.grpc.keepalive.ping-without-stream-allowed"
require.Contains(t, gotFlags, flagToCheck)
require.Equal(t, c.Server.GRPCServerPingWithoutStreamAllowed, true)
require.Contains(t, gotFlags[flagToCheck], "(default true)")
}
func TestLoki_isModuleEnabled(t1 *testing.T) {
tests := []struct {
name string
target flagext.StringSliceCSV
module string
want bool
}{
{name: "Target All includes Querier", target: flagext.StringSliceCSV{"all"}, module: Querier, want: true},
{name: "Target Querier does not include Distributor", target: flagext.StringSliceCSV{"querier"}, module: Distributor, want: false},
{name: "Target Read includes Query Frontend", target: flagext.StringSliceCSV{"read"}, module: QueryFrontend, want: true},
{name: "Target Querier does not include Query Frontend", target: flagext.StringSliceCSV{"querier"}, module: QueryFrontend, want: false},
{name: "Target Query Frontend does not include Querier", target: flagext.StringSliceCSV{"query-frontend"}, module: Querier, want: false},
{name: "Multi target includes querier", target: flagext.StringSliceCSV{"query-frontend", "query-scheduler", "querier"}, module: Querier, want: true},
{name: "Multi target does not include distributor", target: flagext.StringSliceCSV{"query-frontend", "query-scheduler", "querier"}, module: Distributor, want: false},
{name: "Test recursive dep, Ingester -> TenantConfigs -> RuntimeConfig", target: flagext.StringSliceCSV{"ingester"}, module: RuntimeConfig, want: true},
}
for _, tt := range tests {
t1.Run(tt.name, func(t1 *testing.T) {
t := &Loki{
Cfg: Config{
Target: tt.target,
},
}
err := t.setupModuleManager()
assert.NoError(t1, err)
if got := t.isModuleActive(tt.module); got != tt.want {
t1.Errorf("isModuleActive() = %v, want %v", got, tt.want)
}
})
}
}