Skip to content

Commit

Permalink
added extra tests
Browse files Browse the repository at this point in the history
Signed-off-by: Roman Dmytrenko <[email protected]>
  • Loading branch information
erka committed Nov 18, 2024
1 parent e037518 commit e044bbb
Show file tree
Hide file tree
Showing 4 changed files with 451 additions and 1 deletion.
53 changes: 52 additions & 1 deletion internal/server/analytics/analytics_test.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package analytics

import (
"context"
"errors"
"testing"
"time"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.flipt.io/flipt/rpc/flipt/analytics"
"go.uber.org/zap/zaptest"
)

func TestGetStepFromDuration(t *testing.T) {
Expand Down Expand Up @@ -38,7 +43,53 @@ func TestGetStepFromDuration(t *testing.T) {
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
step := getStepFromDuration(tt.duration)
assert.Equal(t, step, tt.want)
assert.Equal(t, tt.want, step)
})
}
}

func TestGetFlagEvaluationsCountWithInvalidInput(t *testing.T) {
logger := zaptest.NewLogger(t)
client := NewMockClient(t)
service := New(logger, client)

_, err := service.GetFlagEvaluationsCount(context.Background(), &analytics.GetFlagEvaluationsCountRequest{
NamespaceKey: "bar",
FlagKey: "foo",
})
require.Error(t, err)
_, err = service.GetFlagEvaluationsCount(context.Background(), &analytics.GetFlagEvaluationsCountRequest{
NamespaceKey: "bar",
FlagKey: "foo",
From: time.Now().Format(time.DateTime),
})
require.Error(t, err)
}

func TestGetFlagEvaluationsCountClientError(t *testing.T) {
logger := zaptest.NewLogger(t)
client := NewMockClient(t)

ctx := context.Background()

client.EXPECT().GetFlagEvaluationsCount(ctx, &FlagEvaluationsCountRequest{
NamespaceKey: "bar",
FlagKey: "foo",
From: time.Date(2022, 6, 9, 11, 0, 0, 0, time.UTC),
To: time.Date(2022, 6, 9, 11, 30, 0, 0, time.UTC),
StepMinutes: 1,
}).Return(nil, nil, errors.New("client error"))

service := New(logger, client)
from := "2022-06-09 11:00:00"
to := "2022-06-09 11:30:00"
_, err := service.GetFlagEvaluationsCount(ctx, &analytics.GetFlagEvaluationsCountRequest{
NamespaceKey: "bar",
FlagKey: "foo",
From: from,
To: to,
})

require.Error(t, err)
require.ErrorContains(t, err, "client error")
}
149 changes: 149 additions & 0 deletions internal/server/analytics/mock_Client_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

127 changes: 127 additions & 0 deletions internal/server/analytics/prometheus/client_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package prometheus

import (
"context"
"testing"
"time"

promapi "github.com/prometheus/client_golang/api/prometheus/v1"
"github.com/prometheus/common/model"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.flipt.io/flipt/internal/config"
panalytics "go.flipt.io/flipt/internal/server/analytics"
"go.uber.org/zap/zaptest"
)

func TestNew(t *testing.T) {
logger := zaptest.NewLogger(t)
cfg := config.Default()
cfg.Analytics.Storage.Prometheus.URL = "http://prometheus:9090"
s, err := New(logger, cfg)
require.NoError(t, err)
assert.Equal(t, "prometheus", s.String())

cfg.Analytics.Storage.Prometheus.URL = "\t"
_, err = New(logger, cfg)
require.Error(t, err)
}

func TestGetFlagEvaluationsCount(t *testing.T) {
ctx := context.Background()
from := time.Now().Add(-time.Hour).UTC()
to := time.Now().UTC()
mock := newMockPrometheusClient(t)

logger := zaptest.NewLogger(t)
t.Run("success", func(t *testing.T) {
data := model.Matrix{
{
Values: []model.SamplePair{
{Timestamp: model.Time(from.UnixMilli()), Value: 1},
{Timestamp: model.Time(to.UnixMilli()), Value: 2},
},
},
}
mock.EXPECT().QueryRange(
ctx,
`sum(increase(flipt_evaluations_requests_total{namespace="bar", flag="foo"}[1m]))`,
promapi.Range{
Start: from,
End: to,
Step: time.Minute,
},
).Return(data, promapi.Warnings{"test Warnings"}, nil)

client := &client{
logger: logger,
promClient: mock,
}

labels, values, err := client.GetFlagEvaluationsCount(ctx, &panalytics.FlagEvaluationsCountRequest{
NamespaceKey: "bar",
FlagKey: "foo",
From: from,
To: to,
StepMinutes: 1,
})

require.NoError(t, err)
assert.Len(t, labels, 2)
assert.Len(t, values, 2)
})

t.Run("no data type", func(t *testing.T) {
mock.EXPECT().QueryRange(
ctx,
`sum(increase(flipt_evaluations_requests_total{namespace="no-data", flag="foo"}[1m]))`,
promapi.Range{
Start: from,
End: to,
Step: time.Minute,
},
).Return(&model.Scalar{}, nil, nil)

client := &client{
logger: logger,
promClient: mock,
}

_, _, err := client.GetFlagEvaluationsCount(ctx, &panalytics.FlagEvaluationsCountRequest{
NamespaceKey: "no-data",
FlagKey: "foo",
From: from,
To: to,
StepMinutes: 1,
})

require.Error(t, err)
})

t.Run("wrong data type", func(t *testing.T) {
mock.EXPECT().QueryRange(
ctx,
`sum(increase(flipt_evaluations_requests_total{namespace="wrong-data", flag="foo"}[1m]))`,
promapi.Range{
Start: from,
End: to,
Step: time.Minute,
},
).Return(&model.Matrix{}, nil, nil)

client := &client{
logger: logger,
promClient: mock,
}

_, _, err := client.GetFlagEvaluationsCount(ctx, &panalytics.FlagEvaluationsCountRequest{
NamespaceKey: "wrong-data",
FlagKey: "foo",
From: from,
To: to,
StepMinutes: 1,
})

require.Error(t, err)
})
}
Loading

0 comments on commit e044bbb

Please sign in to comment.