diff --git a/.golangci.yml b/.golangci.yml index e38a5e0..db1aa69 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -137,3 +137,9 @@ linters-settings: - name: unused-parameter severity: warning disabled: false + +issues: + exclude-rules: + - path: '(.+)_test\.go' + text: "dot-imports: should not use dot imports" + diff --git a/internal/logger/logger.go b/internal/logger/logger.go index 87abaf8..1567580 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -78,7 +78,7 @@ func NewLogger(level string, onError func(err error, args ...interface{})) Logge } func NewNopLogger() Logger { - noopErrorCallback := func(err error, args ...interface{}) {} + noopErrorCallback := func(_ error, _ ...interface{}) {} return &loggerImpl{logger: gokitlog.NewNopLogger(), errorCallback: noopErrorCallback} } diff --git a/pkg/controllers/logql_validator_test.go b/pkg/controllers/logql_validator_test.go index b3f20a2..b4bfb51 100644 --- a/pkg/controllers/logql_validator_test.go +++ b/pkg/controllers/logql_validator_test.go @@ -66,7 +66,7 @@ func TestValidateLogQLOnServerWithHeadersFunc(t *testing.T) { } func TestValidateLogQLOnServerFuncHTTP500IsAnInvalidResponse(t *testing.T) { - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusInternalServerError) })) @@ -84,7 +84,7 @@ func TestValidateLogQLOnServerFuncHTTP500IsAnInvalidResponse(t *testing.T) { } func TestValidateLogQLOnServerFuncInvalidRequest(t *testing.T) { - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(500) })) isValid, err := ValidateLogQLOnServerFunc(http.DefaultClient, ts.URL, "{job=\"loki-test\"}") diff --git a/pkg/controllers/lokirule_controller.go b/pkg/controllers/lokirule_controller.go index 6a719b9..030a3e6 100644 --- a/pkg/controllers/lokirule_controller.go +++ b/pkg/controllers/lokirule_controller.go @@ -111,20 +111,20 @@ func getLokiStatefulSet( return statefulSet, nil } -var handleValidateLogQLResult = func(client *http.Client, lokiURL string, queryStringArray []string) bool { - +func (r *LokiRuleReconciler) handleValidateLogQLResult(queryStringArray []string) bool { for _, queryString := range queryStringArray { - valid, err := ValidateLogQLOnServerFunc(client, lokiURL, queryString) + valid, err := ValidateLogQLOnServerFunc(r.LokiClient, r.LokiURL, queryString) if err != nil { + r.Logger.Error(err, "Failed to send request to Loki server") return false } if !valid { + r.Logger.Warn("The query string:", queryString, "is not a valid LogQL query") return false } } - return true } @@ -145,11 +145,11 @@ func handleByEventType(r *LokiRuleReconciler) predicate.Predicate { return predicate.Funcs{ CreateFunc: func(e event.CreateEvent) bool { queryStringArray := getStringQueryFromLokiRule(e.Object.(*querocomv1alpha1.LokiRule)) - return handleValidateLogQLResult(r.LokiClient, r.LokiURL, queryStringArray) + return r.handleValidateLogQLResult(queryStringArray) }, UpdateFunc: func(e event.UpdateEvent) bool { queryStringArray := getStringQueryFromLokiRule(e.ObjectNew.(*querocomv1alpha1.LokiRule)) - return handleValidateLogQLResult(r.LokiClient, r.LokiURL, queryStringArray) + return r.handleValidateLogQLResult(queryStringArray) }, DeleteFunc: func(e event.DeleteEvent) bool { options := k8sutils.Options{Ctx: context.TODO(), Logger: r.Logger} diff --git a/pkg/controllers/lokirule_controller_test.go b/pkg/controllers/lokirule_controller_test.go index fb8ffa1..dffce15 100644 --- a/pkg/controllers/lokirule_controller_test.go +++ b/pkg/controllers/lokirule_controller_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "net/http/httptest" "path/filepath" "reflect" "time" @@ -43,6 +44,8 @@ const lokiRuleConfigMapName = "loki-rule-cfg" var k8sClient client.Client var testEnv *envtest.Environment +var httpServer *httptest.Server + var lokiStatefulSet *appsv1.StatefulSet var lokiRuleReconcilerInstance *LokiRuleReconciler @@ -76,6 +79,10 @@ var _ = BeforeSuite(func() { }) Expect(err).ToNot(HaveOccurred()) + httpServer = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusOK) + })) + selector := &metav1.LabelSelector{ MatchLabels: labels, } @@ -88,6 +95,8 @@ var _ = BeforeSuite(func() { LokiLabelSelector: selector, LokiNamespace: lokiSTSNamespaceName, LokiRuleConfigMapName: lokiRuleConfigMapName, + LokiURL: httpServer.URL, + LokiClient: &http.Client{}, } err = (lokiRuleReconcilerInstance).SetupWithManager(mgr) @@ -104,6 +113,10 @@ var _ = BeforeSuite(func() { }() }) +var _ = AfterSuite(func() { + defer httpServer.Close() +}) + var _ = Describe("LokiRuleController", func() { Describe("Reconcile", func() { Context("When a LokiRule is created", func() { @@ -111,9 +124,6 @@ var _ = Describe("LokiRuleController", func() { configMapName := "loki-rule-cfg" BeforeEach(func() { - handleValidateLogQLResult = func(client *http.Client, lokiURL string, queryStringArray []string) bool { - return true - } lokiRule = &querocomv1alpha1.LokiRule{ ObjectMeta: metav1.ObjectMeta{ Name: "test-lokirule",