mirror of https://github.com/knative/pkg.git
127 lines
3.9 KiB
Go
127 lines
3.9 KiB
Go
/*
|
|
Copyright 2018 The Knative Authors
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
https://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package prometheus_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
v1 "github.com/prometheus/client_golang/api/prometheus/v1"
|
|
"github.com/prometheus/common/model"
|
|
"knative.dev/pkg/test/prometheus"
|
|
)
|
|
|
|
const (
|
|
expected = 1.0
|
|
query = "test"
|
|
duration = 10 * time.Second
|
|
)
|
|
|
|
type TestPromAPI struct {
|
|
}
|
|
|
|
// AlertManagers returns an overview of the current state of the Prometheus alert manager discovery.
|
|
func (tpa *TestPromAPI) AlertManagers(ctx context.Context) (v1.AlertManagersResult, error) {
|
|
return v1.AlertManagersResult{}, nil
|
|
}
|
|
|
|
// CleanTombstones removes the deleted data from disk and cleans up the existing tombstones.
|
|
func (tpa *TestPromAPI) CleanTombstones(ctx context.Context) error {
|
|
return nil
|
|
}
|
|
|
|
// Config returns the current Prometheus configuration.
|
|
func (tpa *TestPromAPI) Config(ctx context.Context) (v1.ConfigResult, error) {
|
|
return v1.ConfigResult{}, nil
|
|
}
|
|
|
|
// DeleteSeries deletes data for a selection of series in a time range.
|
|
func (tpa *TestPromAPI) DeleteSeries(ctx context.Context, matches []string, startTime time.Time, endTime time.Time) error {
|
|
return nil
|
|
}
|
|
|
|
// Flags returns the flag values that Prometheus was launched with.
|
|
func (tpa *TestPromAPI) Flags(ctx context.Context) (v1.FlagsResult, error) {
|
|
return v1.FlagsResult{}, nil
|
|
}
|
|
|
|
// LabelValues performs a query for the values of the given label.
|
|
func (tpa *TestPromAPI) LabelValues(ctx context.Context, label string) (model.LabelValues, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
// Query performs a query on the prom api
|
|
func (tpa *TestPromAPI) Query(c context.Context, query string, ts time.Time) (model.Value, error) {
|
|
s := model.Sample{Value: expected}
|
|
var v []*model.Sample
|
|
v = append(v, &s)
|
|
|
|
return model.Vector(v), nil
|
|
}
|
|
|
|
// QueryRange performs a query for the given range.
|
|
func (tpa *TestPromAPI) QueryRange(ctx context.Context, query string, r v1.Range) (model.Value, error) {
|
|
s := model.Sample{Value: expected}
|
|
var v []*model.Sample
|
|
v = append(v, &s)
|
|
|
|
return model.Vector(v), nil
|
|
}
|
|
|
|
// Series finds series by label matchers.
|
|
func (tpa *TestPromAPI) Series(ctx context.Context, matches []string, startTime time.Time, endTime time.Time) ([]model.LabelSet, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
// Snapshot creates a snapshot of all current data into snapshots/<datetime>-<rand>
|
|
// under the TSDB's data directory and returns the directory as response.
|
|
func (tpa *TestPromAPI) Snapshot(ctx context.Context, skipHead bool) (v1.SnapshotResult, error) {
|
|
return v1.SnapshotResult{}, nil
|
|
}
|
|
|
|
// Targets returns an overview of the current state of the Prometheus target discovery.
|
|
func (t *TestPromAPI) Targets(ctx context.Context) (v1.TargetsResult, error) {
|
|
return v1.TargetsResult{}, nil
|
|
}
|
|
|
|
// getTestAPI gets the test api implementation for prometheus api
|
|
func getTestAPI() *TestPromAPI {
|
|
return &TestPromAPI{}
|
|
}
|
|
|
|
func TestRunQuery(t *testing.T) {
|
|
r, err := prometheus.RunQuery(context.Background(), t.Logf, getTestAPI(), query)
|
|
if err != nil {
|
|
t.Fatalf("Error running query: %v", err)
|
|
}
|
|
if r != expected {
|
|
t.Fatalf("Want: %f Got: %f", expected, r)
|
|
}
|
|
}
|
|
|
|
func TestRunQueryRange(t *testing.T) {
|
|
r := v1.Range{Start: time.Now(), End: time.Now().Add(duration)}
|
|
val, err := prometheus.RunQueryRange(context.Background(), t.Logf, getTestAPI(), query, r)
|
|
if err != nil {
|
|
t.Fatalf("Error running query: %v", err)
|
|
}
|
|
if val != expected {
|
|
t.Fatalf("Want: %f Got: %f", expected, val)
|
|
}
|
|
}
|