summaryrefslogtreecommitdiff
path: root/internal/mapr/client/session_state_test.go
blob: f43ca7008eee32ac7e5aebbe237f84bfd94fb413 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package client

import (
	"testing"

	"github.com/mimecast/dtail/internal/mapr"
)

func TestSessionStateCommitQueryResetsGenerationAndResults(t *testing.T) {
	query := mustSessionStateQuery(t, "select count(status) from stats group by status")
	state := NewSessionState(query)

	initial := state.Snapshot()
	group := mapr.NewGroupSet()
	set := group.GetSet("ERROR")
	set.Samples = 1
	set.FValues[query.Select[0].FieldStorage] = 1
	if err := initial.GlobalGroup.Merge(query, group); err != nil {
		t.Fatalf("Merge() error = %v", err)
	}
	if changed, ok := state.CommitRenderedResult(initial.Generation, "old-result"); !ok || !changed {
		t.Fatalf("CommitRenderedResult() = changed:%v ok:%v, want changed and ok", changed, ok)
	}

	rawQuery := "select count(status) from warnings group by status"
	updatedQuery, err := state.CommitQuery(rawQuery, 3)
	if err != nil {
		t.Fatalf("CommitQuery() error = %v", err)
	}
	if updatedQuery == nil || updatedQuery.RawQuery != rawQuery {
		t.Fatalf("unexpected updated query: %#v", updatedQuery)
	}

	select {
	case <-state.Changes():
	default:
		t.Fatalf("expected change notification after CommitQuery")
	}

	updated := state.Snapshot()
	if updated.Generation != 3 {
		t.Fatalf("generation = %d, want 3", updated.Generation)
	}
	if updated.Query == nil || updated.Query.RawQuery != rawQuery {
		t.Fatalf("unexpected query after commit: %#v", updated.Query)
	}
	if !updated.GlobalGroup.IsEmpty() {
		t.Fatalf("expected committed global group to be reset")
	}
	if updated.LastResult != "" {
		t.Fatalf("last result = %q, want empty", updated.LastResult)
	}
}

func TestSessionStateCommitQueryRejectsInvalidQuery(t *testing.T) {
	query := mustSessionStateQuery(t, "select count(status) from stats group by status")
	state := NewSessionState(query)
	before := state.Snapshot()

	if _, err := state.CommitQuery("select from", 5); err == nil {
		t.Fatalf("expected CommitQuery() to reject invalid query")
	}

	after := state.Snapshot()
	if after.Generation != before.Generation {
		t.Fatalf("generation changed on invalid query: got %d want %d", after.Generation, before.Generation)
	}
	if after.Query == nil || after.Query.RawQuery != before.Query.RawQuery {
		t.Fatalf("query changed on invalid query: before=%#v after=%#v", before.Query, after.Query)
	}
}

func mustSessionStateQuery(t *testing.T, queryStr string) *mapr.Query {
	t.Helper()

	query, err := mapr.NewQuery(queryStr)
	if err != nil {
		t.Fatalf("NewQuery(%q) error = %v", queryStr, err)
	}
	return query
}