Skip to content

Commit

Permalink
add E2E test for exemplars
Browse files Browse the repository at this point in the history
Signed-off-by: yeya24 <yb532204897@gmail.com>
  • Loading branch information
yeya24 committed May 27, 2021
1 parent d8b21e7 commit e085a7c
Show file tree
Hide file tree
Showing 11 changed files with 296 additions and 148 deletions.
2 changes: 1 addition & 1 deletion test/e2e/compact_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ func TestCompactWithStoreGateway(t *testing.T) {
testutil.Ok(t, str.WaitSumMetrics(e2e.Equals(0), "thanos_blocks_meta_sync_failures_total"))
testutil.Ok(t, str.WaitSumMetrics(e2e.Equals(0), "thanos_blocks_meta_modified"))

q, err := e2ethanos.NewQuerier(s.SharedDir(), "1", []string{str.GRPCNetworkEndpoint()}, nil, nil, nil, nil, nil, "", "")
q, err := e2ethanos.NewQuerierBuilder(s.SharedDir(), "1", []string{str.GRPCNetworkEndpoint()}).Build()
testutil.Ok(t, err)
testutil.Ok(t, s.StartAndWaitReady(q))

Expand Down
115 changes: 96 additions & 19 deletions test/e2e/e2ethanos/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"os"
"path/filepath"
"strconv"
"strings"
"time"

"github.com/cortexproject/cortex/integration/e2e"
Expand All @@ -36,6 +37,10 @@ var defaultBackoffConfig = util.BackoffConfig{
MaxRetries: 50,
}

const (
FeatureExemplarStorage = "exemplar-storage"
)

// TODO(bwplotka): Run against multiple?
func DefaultPrometheusImage() string {
return "quay.io/prometheus/prometheus:v2.26.0"
Expand All @@ -55,7 +60,7 @@ func DefaultImage() string {
return "thanos"
}

func NewPrometheus(sharedDir string, name string, config, promImage string) (*e2e.HTTPService, string, error) {
func NewPrometheus(sharedDir string, name string, config string, promImage string, enableFeatures ...string) (*e2e.HTTPService, string, error) {
dir := filepath.Join(sharedDir, "data", "prometheus", name)
container := filepath.Join(e2e.ContainerSharedDir, "data", "prometheus", name)
if err := os.MkdirAll(dir, 0750); err != nil {
Expand All @@ -73,6 +78,10 @@ func NewPrometheus(sharedDir string, name string, config, promImage string) (*e2
"--log.level": infoLogLevel,
"--web.listen-address": ":9090",
})

if len(enableFeatures) > 0 {
args = append(args, fmt.Sprintf("--enable-feature=%s", strings.Join(enableFeatures, ",")))
}
prom := e2e.NewHTTPService(
fmt.Sprintf("prometheus-%s", name),
promImage,
Expand All @@ -86,8 +95,8 @@ func NewPrometheus(sharedDir string, name string, config, promImage string) (*e2
return prom, container, nil
}

func NewPrometheusWithSidecar(sharedDir string, netName string, name string, config, promImage string) (*e2e.HTTPService, *Service, error) {
prom, dataDir, err := NewPrometheus(sharedDir, name, config, promImage)
func NewPrometheusWithSidecar(sharedDir string, netName string, name string, config, promImage string, enableFeatures ...string) (*e2e.HTTPService, *Service, error) {
prom, dataDir, err := NewPrometheus(sharedDir, name, config, promImage, enableFeatures...)
if err != nil {
return nil, nil, err
}
Expand Down Expand Up @@ -115,11 +124,75 @@ func NewPrometheusWithSidecar(sharedDir string, netName string, name string, con
return prom, sidecar, nil
}

func NewQuerier(sharedDir, name string, storeAddresses, fileSDStoreAddresses, ruleAddresses, targetAddresses []string, metadataAddresses, exemplarAddresses []string, routePrefix, externalPrefix string) (*Service, error) {
type QuerierBuilder struct {
sharedDir string
name string
routePrefix string
externalPrefix string

storeAddresses []string
fileSDStoreAddresses []string
ruleAddresses []string
metadataAddresses []string
targetAddresses []string
exemplarAddresses []string

tracingConfig string
}

func NewQuerierBuilder(sharedDir, name string, storeAddresses []string) *QuerierBuilder {
return &QuerierBuilder{
sharedDir: sharedDir,
name: name,
storeAddresses: storeAddresses,
}
}

func (q *QuerierBuilder) WithFileSDStoreAddresses(fileSDStoreAddresses []string) *QuerierBuilder {
q.fileSDStoreAddresses = fileSDStoreAddresses
return q
}

func (q *QuerierBuilder) WithRuleAddresses(ruleAddresses []string) *QuerierBuilder {
q.ruleAddresses = ruleAddresses
return q
}

func (q *QuerierBuilder) WithTargetAddresses(targetAddresses []string) *QuerierBuilder {
q.targetAddresses = targetAddresses
return q
}

func (q *QuerierBuilder) WithExemplarAddresses(exemplarAddresses []string) *QuerierBuilder {
q.exemplarAddresses = exemplarAddresses
return q
}

func (q *QuerierBuilder) WithMetadataAddresses(metadataAddresses []string) *QuerierBuilder {
q.metadataAddresses = metadataAddresses
return q
}

func (q *QuerierBuilder) WithRoutePrefix(routePrefix string) *QuerierBuilder {
q.routePrefix = routePrefix
return q
}

func (q *QuerierBuilder) WithExternalPrefix(externalPrefix string) *QuerierBuilder {
q.externalPrefix = externalPrefix
return q
}

func (q *QuerierBuilder) WithTracingConfig(tracingConfig string) *QuerierBuilder {
q.tracingConfig = tracingConfig
return q
}

func (q *QuerierBuilder) Build() (*Service, error) {
const replicaLabel = "replica"

args := e2e.BuildArgs(map[string]string{
"--debug.name": fmt.Sprintf("querier-%v", name),
"--debug.name": fmt.Sprintf("querier-%v", q.name),
"--grpc-address": ":9091",
"--grpc-grace-period": "0s",
"--http-address": ":8080",
Expand All @@ -129,35 +202,35 @@ func NewQuerier(sharedDir, name string, storeAddresses, fileSDStoreAddresses, ru
"--query.max-concurrent": "1",
"--store.sd-interval": "5s",
})
for _, addr := range storeAddresses {
for _, addr := range q.storeAddresses {
args = append(args, "--store="+addr)
}

for _, addr := range ruleAddresses {
for _, addr := range q.ruleAddresses {
args = append(args, "--rule="+addr)
}

for _, addr := range targetAddresses {
for _, addr := range q.targetAddresses {
args = append(args, "--target="+addr)
}

for _, addr := range metadataAddresses {
for _, addr := range q.metadataAddresses {
args = append(args, "--metadata="+addr)
}

for _, addr := range exemplarAddresses {
for _, addr := range q.exemplarAddresses {
args = append(args, "--exemplar="+addr)
}

if len(fileSDStoreAddresses) > 0 {
queryFileSDDir := filepath.Join(sharedDir, "data", "querier", name)
container := filepath.Join(e2e.ContainerSharedDir, "data", "querier", name)
if len(q.fileSDStoreAddresses) > 0 {
queryFileSDDir := filepath.Join(q.sharedDir, "data", "querier", q.name)
container := filepath.Join(e2e.ContainerSharedDir, "data", "querier", q.name)
if err := os.MkdirAll(queryFileSDDir, 0750); err != nil {
return nil, errors.Wrap(err, "create query dir failed")
}

fileSD := []*targetgroup.Group{{}}
for _, a := range fileSDStoreAddresses {
for _, a := range q.fileSDStoreAddresses {
fileSD[0].Targets = append(fileSD[0].Targets, model.LabelSet{model.AddressLabel: model.LabelValue(a)})
}

Expand All @@ -173,16 +246,20 @@ func NewQuerier(sharedDir, name string, storeAddresses, fileSDStoreAddresses, ru
args = append(args, "--store.sd-files="+filepath.Join(container, "filesd.yaml"))
}

if routePrefix != "" {
args = append(args, "--web.route-prefix="+routePrefix)
if q.routePrefix != "" {
args = append(args, "--web.route-prefix="+q.routePrefix)
}

if externalPrefix != "" {
args = append(args, "--web.external-prefix="+externalPrefix)
if q.externalPrefix != "" {
args = append(args, "--web.external-prefix="+q.externalPrefix)
}

if q.tracingConfig != "" {
args = append(args, "--tracing.config="+q.tracingConfig)
}

querier := NewService(
fmt.Sprintf("querier-%v", name),
fmt.Sprintf("querier-%v", q.name),
DefaultImage(),
e2e.NewCommand("query", args...),
e2e.NewHTTPReadinessProbe(8080, "/-/ready", 200, 200),
Expand Down
Loading

0 comments on commit e085a7c

Please sign in to comment.