From 3619a6de8dd0d2d6ec0331da879f9f9cf272d4dc Mon Sep 17 00:00:00 2001 From: Roman Isaev Date: Wed, 15 Jan 2025 19:18:29 +0000 Subject: [PATCH] mas: refactoring --- clientapi/admin_test.go | 60 +++++---- .../msc3861/msc3861_user_verifier_test.go | 118 +++++++++--------- 2 files changed, 97 insertions(+), 81 deletions(-) diff --git a/clientapi/admin_test.go b/clientapi/admin_test.go index c2000e42..2d6cc108 100644 --- a/clientapi/admin_test.go +++ b/clientapi/admin_test.go @@ -2161,7 +2161,7 @@ func TestAdminCreateOrModifyAccount(t *testing.T) { ThreePIDs []string }{ // In order to avoid any confusion and undesired behaviour, we do not change display name and avatar url if account already exists - DisplayName: "1", + DisplayName: alice.Localpart, AvatarURL: "", ThreePIDs: []string{"alice@example.com"}, }, @@ -2291,32 +2291,42 @@ func TestAdminRetrieveAccount(t *testing.T) { } }) - t.Run("Retrieve existing account", func(t *testing.T) { - req := test.NewRequest(t, http.MethodGet, "/_synapse/admin/v2/users/"+alice.ID) - req.Header.Set("Authorization", "Bearer "+adminToken) + testCase := []struct { + Name string + User *test.User + Code int + Body string + }{ + { + Name: "Retrieve existing account", + User: alice, + Code: http.StatusOK, + Body: fmt.Sprintf(`{"display_name":"%s","avatar_url":"","deactivated":false}`, alice.Localpart), + }, + { + Name: "Retrieve non-existing account", + User: bob, + Code: http.StatusNotFound, + Body: "", + }, + } - rec := httptest.NewRecorder() - routers.SynapseAdmin.ServeHTTP(rec, req) - t.Logf("%s", rec.Body.String()) - if rec.Code != http.StatusOK { - t.Fatalf("expected HTTP status %d, got %d: %s", http.StatusOK, rec.Code, rec.Body.String()) - } - body := `{"display_name":"1","avatar_url":"","deactivated":false}` - if rec.Body.String() != body { - t.Fatalf("expected body %s, got %s", body, rec.Body.String()) - } - }) + for _, tc := range testCase { + t.Run("Retrieve existing account", func(t *testing.T) { + req := test.NewRequest(t, http.MethodGet, "/_synapse/admin/v2/users/"+tc.User.ID) + req.Header.Set("Authorization", "Bearer "+adminToken) - t.Run("Retrieve non-existing account", func(t *testing.T) { - req := test.NewRequest(t, http.MethodGet, "/_synapse/admin/v2/users/"+bob.ID) - req.Header.Set("Authorization", "Bearer "+adminToken) + rec := httptest.NewRecorder() + routers.SynapseAdmin.ServeHTTP(rec, req) + t.Logf("%s", rec.Body.String()) + if rec.Code != tc.Code { + t.Fatalf("expected HTTP status %d, got %d: %s", tc.Code, rec.Code, rec.Body.String()) + } - rec := httptest.NewRecorder() - routers.SynapseAdmin.ServeHTTP(rec, req) - t.Logf("%s", rec.Body.String()) - if rec.Code != http.StatusNotFound { - t.Fatalf("expected http status %d, got %d: %s", http.StatusNotFound, rec.Code, rec.Body.String()) - } - }) + if tc.Body != "" && tc.Body != rec.Body.String() { + t.Fatalf("expected body %s, got %s", tc.Body, rec.Body.String()) + } + }) + } }) } diff --git a/setup/mscs/msc3861/msc3861_user_verifier_test.go b/setup/mscs/msc3861/msc3861_user_verifier_test.go index 8681decd..0bfe68e7 100644 --- a/setup/mscs/msc3861/msc3861_user_verifier_test.go +++ b/setup/mscs/msc3861/msc3861_user_verifier_test.go @@ -31,65 +31,74 @@ var testIsBlacklistedOrBackingOff = func(s spec.ServerName) (*statistics.ServerS return &statistics.ServerStatistics{}, nil } -type roundTripper struct{} +type roundTripper struct { + roundTrip func(request *http.Request) (*http.Response, error) +} func (rt *roundTripper) RoundTrip(request *http.Request) (*http.Response, error) { - var ( - respBody string - statusCode int - ) - - switch request.URL.String() { - case "https://mas.example.com/.well-known/openid-configuration": - respBody = `{"introspection_endpoint": "https://mas.example.com/oauth2/introspect"}` - statusCode = http.StatusOK - case "https://mas.example.com/oauth2/introspect": - _ = request.ParseForm() - - switch request.Form.Get("token") { - case "validTokenUserExistsTokenActive": - statusCode = http.StatusOK - resp := introspectionResponse{ - Active: true, - Scope: "urn:matrix:org.matrix.msc2967.client:device:devAlice urn:matrix:org.matrix.msc2967.client:api:*", - Sub: "111111111111111111", - Username: "1", - } - b, _ := json.Marshal(resp) - respBody = string(b) - case "validTokenUserDoesNotExistTokenActive": - statusCode = http.StatusOK - resp := introspectionResponse{ - Active: true, - Scope: "urn:matrix:org.matrix.msc2967.client:device:devBob urn:matrix:org.matrix.msc2967.client:api:*", - Sub: "222222222222222222", - Username: "2", - } - b, _ := json.Marshal(resp) - respBody = string(b) - case "validTokenUserExistsTokenInactive": - statusCode = http.StatusOK - resp := introspectionResponse{Active: false} - b, _ := json.Marshal(resp) - respBody = string(b) - default: - return nil, errors.New("Request URL not supported by stub") - } - } - - respReader := io.NopCloser(strings.NewReader(respBody)) - resp := http.Response{ - StatusCode: statusCode, - Body: respReader, - ContentLength: int64(len(respBody)), - Header: map[string][]string{"Content-Type": {"application/json"}}, - } - return &resp, nil + return rt.roundTrip(request) } func TestVerifyUserFromRequest(t *testing.T) { + aliceUser := test.NewUser(t, test.WithAccountType(uapi.AccountTypeUser)) + bobUser := test.NewUser(t, test.WithAccountType(uapi.AccountTypeUser)) + + roundTrip := func(request *http.Request) (*http.Response, error) { + var ( + respBody string + statusCode int + ) + + switch request.URL.String() { + case "https://mas.example.com/.well-known/openid-configuration": + respBody = `{"introspection_endpoint": "https://mas.example.com/oauth2/introspect"}` + statusCode = http.StatusOK + case "https://mas.example.com/oauth2/introspect": + _ = request.ParseForm() + + switch request.Form.Get("token") { + case "validTokenUserExistsTokenActive": + statusCode = http.StatusOK + resp := introspectionResponse{ + Active: true, + Scope: "urn:matrix:org.matrix.msc2967.client:device:devAlice urn:matrix:org.matrix.msc2967.client:api:*", + Sub: "111111111111111111", + Username: aliceUser.Localpart, + } + b, _ := json.Marshal(resp) + respBody = string(b) + case "validTokenUserDoesNotExistTokenActive": + statusCode = http.StatusOK + resp := introspectionResponse{ + Active: true, + Scope: "urn:matrix:org.matrix.msc2967.client:device:devBob urn:matrix:org.matrix.msc2967.client:api:*", + Sub: "222222222222222222", + Username: bobUser.Localpart, + } + b, _ := json.Marshal(resp) + respBody = string(b) + case "validTokenUserExistsTokenInactive": + statusCode = http.StatusOK + resp := introspectionResponse{Active: false} + b, _ := json.Marshal(resp) + respBody = string(b) + default: + return nil, errors.New("Request URL not supported by stub") + } + } + + respReader := io.NopCloser(strings.NewReader(respBody)) + resp := http.Response{ + StatusCode: statusCode, + Body: respReader, + ContentLength: int64(len(respBody)), + Header: map[string][]string{"Content-Type": {"application/json"}}, + } + return &resp, nil + } + httpClient := http.Client{ - Transport: &roundTripper{}, + Transport: &roundTripper{roundTrip: roundTrip}, } ctx := context.Background() @@ -123,9 +132,6 @@ func TestVerifyUserFromRequest(t *testing.T) { } u, _ := url.Parse("https://example.com/something") - aliceUser := test.NewUser(t, test.WithAccountType(uapi.AccountTypeUser)) - bobUser := test.NewUser(t, test.WithAccountType(uapi.AccountTypeUser)) - t.Run("existing user and active token", func(t *testing.T) { localpart, serverName, _ := gomatrixserverlib.SplitID('@', aliceUser.ID) userRes := &uapi.PerformAccountCreationResponse{}