Skip to content

Commit

Permalink
test: for validating trigger name
Browse files Browse the repository at this point in the history
  • Loading branch information
AleksandrMatsko committed Sep 4, 2024
1 parent 4845fc3 commit 20c9678
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 13 deletions.
3 changes: 2 additions & 1 deletion api/config.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package api

import (
"github.com/moira-alert/moira/limits"
"net/http"
"time"

"github.com/moira-alert/moira/limits"

"github.com/moira-alert/moira"
)

Expand Down
24 changes: 18 additions & 6 deletions api/dto/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,19 @@ import (

var targetNameRegex = regexp.MustCompile("^t\\d+$")

// ErrBadAloneMetricName is used when any key in map TriggerModel.AloneMetric doesn't match targetNameRegex.
var ErrBadAloneMetricName = fmt.Errorf("alone metrics' target name must match the pattern: ^t\\d+$, for example: 't1'")
var (
// ErrBadAloneMetricName is used when any key in map TriggerModel.AloneMetric doesn't match targetNameRegex.
ErrBadAloneMetricName = fmt.Errorf("alone metrics' target name must match the pattern: ^t\\d+$, for example: 't1'")

// ErrTargetsRequired is returned when there is no targets in Trigger.
ErrTargetsRequired = fmt.Errorf("targets is required")

// ErrTagsRequired is returned when there is no tags in Trigger.
ErrTagsRequired = fmt.Errorf("tags is required")

// ErrTriggerNameRequired is returned when there is empty Name in Trigger.
ErrTriggerNameRequired = fmt.Errorf("trigger name is required")
)

// TODO(litleleprikon): Remove after https://github.com/moira-alert/moira/issues/550 will be resolved.
var asteriskPattern = "*"
Expand Down Expand Up @@ -153,21 +164,22 @@ func CreateTriggerModel(trigger *moira.Trigger) TriggerModel {
func (trigger *Trigger) Bind(request *http.Request) error {
trigger.Tags = normalizeTags(trigger.Tags)
if len(trigger.Targets) == 0 {
return api.ErrInvalidRequestContent{ValidationError: fmt.Errorf("targets is required")}
return api.ErrInvalidRequestContent{ValidationError: ErrTargetsRequired}
}

if len(trigger.Tags) == 0 {
return api.ErrInvalidRequestContent{ValidationError: fmt.Errorf("tags is required")}
return api.ErrInvalidRequestContent{ValidationError: ErrTagsRequired}
}

if trigger.Name == "" {
return api.ErrInvalidRequestContent{ValidationError: fmt.Errorf("trigger name is required")}
return api.ErrInvalidRequestContent{ValidationError: ErrTriggerNameRequired}
}

limits := middleware.GetLimits(request)
if utf8.RuneCountInString(trigger.Name) > limits.Trigger.MaxNameSize {
return api.ErrInvalidRequestContent{
ValidationError: fmt.Errorf("trigger name too long, should be less than %d symbols", limits.Trigger.MaxNameSize)}
ValidationError: fmt.Errorf("trigger name too long, should not be greater than %d symbols", limits.Trigger.MaxNameSize),
}
}

if err := checkWarnErrorExpression(trigger); err != nil {
Expand Down
50 changes: 49 additions & 1 deletion api/dto/triggers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ package dto
import (
"context"
"fmt"
"github.com/moira-alert/moira/limits"
"net/http"
"strings"
"testing"
"time"

"github.com/moira-alert/moira/limits"

"github.com/moira-alert/moira"
"github.com/moira-alert/moira/api"
"github.com/moira-alert/moira/api/middleware"
Expand All @@ -19,6 +21,52 @@ import (
)

func TestTriggerValidation(t *testing.T) {
Convey("Test trigger name and tags", t, func() {
trigger := Trigger{
TriggerModel: TriggerModel{},
}

limit := limits.GetTestConfig()

request, _ := http.NewRequest("PUT", "/api/trigger", nil)
request.Header.Set("Content-Type", "application/json")
request = request.WithContext(middleware.SetContextValueForTest(request.Context(), "limits", limit))

Convey("with empty targets", func() {
err := trigger.Bind(request)

So(err, ShouldResemble, api.ErrInvalidRequestContent{ValidationError: ErrTargetsRequired})
})

trigger.Targets = []string{"foo.bar"}

Convey("with empty tag in tag list", func() {
trigger.Tags = []string{""}

err := trigger.Bind(request)

So(err, ShouldResemble, api.ErrInvalidRequestContent{ValidationError: ErrTagsRequired})
})

trigger.Tags = append(trigger.Tags, "tag1")

Convey("with empty Name", func() {
err := trigger.Bind(request)

So(err, ShouldResemble, api.ErrInvalidRequestContent{ValidationError: ErrTriggerNameRequired})
})

Convey("with too long Name", func() {
trigger.Name = strings.Repeat("ё", limit.Trigger.MaxNameSize+1)

err := trigger.Bind(request)

So(err, ShouldResemble, api.ErrInvalidRequestContent{
ValidationError: fmt.Errorf("trigger name too long, should not be greater than %d symbols", limit.Trigger.MaxNameSize),
})
})
})

Convey("Tests targets, values and expression validation", t, func() {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
Expand Down
3 changes: 2 additions & 1 deletion api/handler/trigger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import (
"bytes"
"encoding/json"
"fmt"
"github.com/moira-alert/moira/limits"
"io"
"net/http"
"net/http/httptest"
"testing"
"time"

"github.com/moira-alert/moira/limits"

"github.com/moira-alert/moira"
"github.com/moira-alert/moira/api/dto"
"github.com/moira-alert/moira/api/middleware"
Expand Down
3 changes: 2 additions & 1 deletion api/handler/triggers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/moira-alert/moira/limits"
"io"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"

"github.com/moira-alert/moira/limits"

"github.com/moira-alert/moira"
"github.com/moira-alert/moira/api"
dataBase "github.com/moira-alert/moira/database"
Expand Down
3 changes: 2 additions & 1 deletion api/middleware/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ package middleware
import (
"context"
"fmt"
"github.com/moira-alert/moira/limits"
"net/http"
"net/url"
"strconv"
"strings"
"time"

"github.com/moira-alert/moira/limits"

"github.com/go-chi/chi"
"github.com/go-chi/render"
"github.com/moira-alert/moira"
Expand Down
3 changes: 2 additions & 1 deletion api/middleware/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package middleware

import (
"context"
"github.com/moira-alert/moira/limits"
"net/http"
"time"

"github.com/moira-alert/moira/limits"

"github.com/moira-alert/moira"
"github.com/moira-alert/moira/api"
metricSource "github.com/moira-alert/moira/metric_source"
Expand Down
3 changes: 2 additions & 1 deletion cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package cmd
import (
"errors"
"fmt"
"github.com/moira-alert/moira/limits"
"os"
"strings"

"github.com/moira-alert/moira/limits"

"github.com/moira-alert/moira"
"github.com/moira-alert/moira/metrics"

Expand Down

0 comments on commit 20c9678

Please sign in to comment.