aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-12-02 11:44:20 +0100
committerGitHub <noreply@github.com>2022-12-02 11:44:20 +0100
commit9a46d8d95c937bdb356f9e373424e1a37aa37f04 (patch)
tree6cd43e85506ec5316ed2923042cfa76169f0e10d /internal
parent934056f21fb91b59c9a9c4413318a9387abf658e (diff)
Test and CI related changes (#2896)
In an attempt to: - make on-boarding a bit easier (`go test ./...` should now not need additional postgres setup) - get code coverage faster, not only scheduled at night - test the `create-account` binary
Diffstat (limited to 'internal')
-rw-r--r--internal/pushgateway/client.go5
-rw-r--r--internal/pushgateway/client_test.go54
2 files changed, 57 insertions, 2 deletions
diff --git a/internal/pushgateway/client.go b/internal/pushgateway/client.go
index 95f5afd9..259239b8 100644
--- a/internal/pushgateway/client.go
+++ b/internal/pushgateway/client.go
@@ -9,6 +9,8 @@ import (
"net/http"
"time"
+ "github.com/matrix-org/dendrite/internal"
+
"github.com/opentracing/opentracing-go"
)
@@ -50,8 +52,7 @@ func (h *httpClient) Notify(ctx context.Context, url string, req *NotifyRequest,
return err
}
- //nolint:errcheck
- defer hresp.Body.Close()
+ defer internal.CloseAndLogIfError(ctx, hresp.Body, "failed to close response body")
if hresp.StatusCode == http.StatusOK {
return json.NewDecoder(hresp.Body).Decode(resp)
diff --git a/internal/pushgateway/client_test.go b/internal/pushgateway/client_test.go
new file mode 100644
index 00000000..bd0dca47
--- /dev/null
+++ b/internal/pushgateway/client_test.go
@@ -0,0 +1,54 @@
+package pushgateway
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+ "net/http/httptest"
+ "reflect"
+ "testing"
+)
+
+func TestNotify(t *testing.T) {
+ wantResponse := NotifyResponse{
+ Rejected: []string{"testing"},
+ }
+
+ var i = 0
+
+ svr := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ // /notify only accepts POST requests
+ if r.Method != http.MethodPost {
+ w.WriteHeader(http.StatusNotImplemented)
+ return
+ }
+
+ if i != 0 { // error path
+ w.WriteHeader(http.StatusBadRequest)
+ return
+ }
+
+ // happy path
+ json.NewEncoder(w).Encode(wantResponse)
+ }))
+ defer svr.Close()
+
+ cl := NewHTTPClient(true)
+ gotResponse := NotifyResponse{}
+
+ // Test happy path
+ err := cl.Notify(context.Background(), svr.URL, &NotifyRequest{}, &gotResponse)
+ if err != nil {
+ t.Errorf("failed to notify client")
+ }
+ if !reflect.DeepEqual(gotResponse, wantResponse) {
+ t.Errorf("expected response %+v, got %+v", wantResponse, gotResponse)
+ }
+
+ // Test error path
+ i++
+ err = cl.Notify(context.Background(), svr.URL, &NotifyRequest{}, &gotResponse)
+ if err == nil {
+ t.Errorf("expected notifying the pushgateway to fail, but it succeeded")
+ }
+}