summaryrefslogtreecommitdiff
path: root/internal/clients/maprclient_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-13 09:29:59 +0200
committerPaul Buetow <paul@buetow.org>2026-03-13 09:29:59 +0200
commitd8f88d455990636bb797643dee7d39a95bbbd62c (patch)
tree8c8447fc975ec6deebe48218d27e3defa1b3dcce /internal/clients/maprclient_test.go
parent7a79d0a8bf58b05dfbae331d00275739530b9584 (diff)
task 4abe7505: reset dmap generation state
Diffstat (limited to 'internal/clients/maprclient_test.go')
-rw-r--r--internal/clients/maprclient_test.go104
1 files changed, 104 insertions, 0 deletions
diff --git a/internal/clients/maprclient_test.go b/internal/clients/maprclient_test.go
new file mode 100644
index 0000000..641a74a
--- /dev/null
+++ b/internal/clients/maprclient_test.go
@@ -0,0 +1,104 @@
+package clients
+
+import (
+ "testing"
+ "time"
+
+ "github.com/mimecast/dtail/internal/config"
+ "github.com/mimecast/dtail/internal/mapr"
+ maprclient "github.com/mimecast/dtail/internal/mapr/client"
+ "github.com/mimecast/dtail/internal/omode"
+)
+
+func TestMaprClientCommitSessionSpecResetsSharedState(t *testing.T) {
+ query := mustMaprClientQuery(t, "select count(status) from stats group by status")
+ client := &MaprClient{
+ baseClient: baseClient{
+ Args: config.Args{Mode: omode.MapClient},
+ },
+ session: maprclient.NewSessionState(query),
+ mode: DefaultMode,
+ }
+ client.setRegexForQuery(query)
+
+ initial := client.session.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 := client.session.CommitRenderedResult(initial.Generation, "old-result"); !ok || !changed {
+ t.Fatalf("CommitRenderedResult() = changed:%v ok:%v, want changed and ok", changed, ok)
+ }
+
+ spec := SessionSpec{
+ Query: "select count(status) from warnings group by status",
+ }
+ if err := client.commitSessionSpec(spec, 4); err != nil {
+ t.Fatalf("commitSessionSpec() error = %v", err)
+ }
+
+ updated := client.session.Snapshot()
+ if updated.Generation != 4 {
+ t.Fatalf("generation = %d, want 4", updated.Generation)
+ }
+ if updated.Query == nil || updated.Query.RawQuery != spec.Query {
+ 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)
+ }
+ if client.RegexStr != "\\|MAPREDUCE:WARNINGS\\|" {
+ t.Fatalf("RegexStr = %q, want WARNINGS table regex", client.RegexStr)
+ }
+
+ sessionSpec, err := client.makeSessionSpec()
+ if err != nil {
+ t.Fatalf("makeSessionSpec() error = %v", err)
+ }
+ if sessionSpec.Query != spec.Query {
+ t.Fatalf("session spec query = %q, want %q", sessionSpec.Query, spec.Query)
+ }
+}
+
+func TestMaprClientCommitSessionSpecRejectsMissingQuery(t *testing.T) {
+ query := mustMaprClientQuery(t, "select count(status) from stats group by status")
+ client := &MaprClient{
+ baseClient: baseClient{
+ Args: config.Args{Mode: omode.MapClient},
+ },
+ session: maprclient.NewSessionState(query),
+ mode: DefaultMode,
+ }
+
+ if err := client.commitSessionSpec(SessionSpec{}, 2); err == nil {
+ t.Fatalf("expected commitSessionSpec() to reject empty query")
+ }
+}
+
+func TestMaprClientReportDelayUsesRampUpAndSteadyIntervals(t *testing.T) {
+ query := mustMaprClientQuery(t, "select count(status) from stats group by status interval 8")
+ client := &MaprClient{}
+
+ if delay := client.reportDelay(query, true); delay != 4*time.Second {
+ t.Fatalf("ramp-up delay = %v, want 4s", delay)
+ }
+ if delay := client.reportDelay(query, false); delay != 8*time.Second {
+ t.Fatalf("steady delay = %v, want 8s", delay)
+ }
+}
+
+func mustMaprClientQuery(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
+}