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/util/mapmerge_test.go

97 lines
1.6 KiB

Ruler: Recording Rules (#3766) * WIP: hack to get recording rules working and pushing to Cortex/Prometheus Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Refactoring Adding remote_write config for ruler Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Minor refactorings Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Moving manager subpackage into ruler package to avoid dependency cycles This also mirrors Cortex's package structure Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Minor refactorings Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Skipping commit if remote-write client is not defined Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Updating use of cortex client Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Memoizing appenders, using queue for samples & labels Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Adding buffer size configurability Refactoring Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Adding metric to show current buffer size Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Refactoring for better responsibility separation & testability Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Adding per-tenant overrides of remote-write queue capacity Renaming "buffer size" to "queue capacity" to be more accurate Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Adding tests for evicting queue Minor refactoring Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Adding more tests and refactoring Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Adding queue benchmark Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Reducing redundancy in metric names Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Testing that only metric queries can be run Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Minor fixes pre-review Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Appeasing the linter Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Guarding against unprotected nil pointer dereference in Prometheus remote.Client Adding remote-write client validation Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Appeasing the linter Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Setting tenant ID header on remote-write client Adding User-Agent string Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Updating benchmark to use complex struct rather than int to be more reflective of usage Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Registering flags Removing extraneous checks Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Adding metric to track remote-write commit errors Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Refactoring based on review Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Performance improvements based on review Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Return error on invalid queue capacity Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Removing global queue capacity config - using limits Minor refactoring Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Reusing memory in request preparation Refactoring for testability Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Moving remote-write metrics into struct Refactoring Unexporting and refactoring memstore metrics to match Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Applying review suggestions Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Allowing for runtime changing of per-tenant remote-write queue capacity Signed-off-by: Danny Kopping <danny.kopping@grafana.com> * Appeasing the linter Signed-off-by: Danny Kopping <danny.kopping@grafana.com>
5 years ago
package util
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestMerge(t *testing.T) {
var base = map[string]string{
"a": "b",
"c": "10",
"y": "z",
}
var overlay = map[string]string{
"a": "z",
"c": "10",
"d": "e",
}
merged := MergeMaps(base, overlay)
require.Equal(t, merged, map[string]string{
"a": "z",
"c": "10",
"d": "e",
"y": "z",
})
}
func TestCopy(t *testing.T) {
var base = map[string]string{
"a": "b",
"c": "10",
"y": "z",
}
copy := CopyMap(base)
require.EqualValues(t, base, copy)
require.NotSame(t, base, copy)
}
func TestNilCopy(t *testing.T) {
var base map[string]string
copy := CopyMap(base)
require.EqualValues(t, base, copy)
require.NotSame(t, base, copy)
}
func TestNilBase(t *testing.T) {
var overlay = map[string]string{
"a": "z",
"c": "10",
"d": "e",
}
merged := MergeMaps(nil, overlay)
require.Equal(t, merged, overlay)
}
func TestNilOverlay(t *testing.T) {
var base = map[string]string{
"a": "b",
"c": "10",
"y": "z",
}
merged := MergeMaps(base, nil)
require.Equal(t, merged, base)
}
// TestImmutability tests that both given maps are unaltered
func TestImmutability(t *testing.T) {
var base = map[string]string{
"a": "b",
"c": "10",
"y": "z",
}
var overlay = map[string]string{
"a": "z",
"c": "10",
"d": "e",
}
beforeBase := CopyMap(base)
beforeOverlay := CopyMap(overlay)
require.EqualValues(t, base, beforeBase)
require.EqualValues(t, overlay, beforeOverlay)
MergeMaps(base, overlay)
require.EqualValues(t, base, beforeBase)
require.EqualValues(t, overlay, beforeOverlay)
}