summaryrefslogtreecommitdiff
path: root/testrig
diff options
context:
space:
mode:
Diffstat (limited to 'testrig')
-rw-r--r--testrig/transportcontroller.go66
1 files changed, 59 insertions, 7 deletions
diff --git a/testrig/transportcontroller.go b/testrig/transportcontroller.go
index 9657205f6..aeb9d4dfa 100644
--- a/testrig/transportcontroller.go
+++ b/testrig/transportcontroller.go
@@ -21,6 +21,7 @@ package testrig
import (
"bytes"
"encoding/json"
+ "encoding/xml"
"io"
"net/http"
"strings"
@@ -52,7 +53,7 @@ const (
// PER TEST rather than per suite, so that the do function can be set on a test by test (or even more granular)
// basis.
func NewTestTransportController(state *state.State, client pub.HttpClient) transport.Controller {
- return transport.NewController(state.DB, NewTestFederatingDB(state), &federation.Clock{}, client)
+ return transport.NewController(state, NewTestFederatingDB(state), &federation.Clock{}, client)
}
type MockHTTPClient struct {
@@ -121,6 +122,10 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
responseContentLength = len(responseBytes)
} else if strings.Contains(req.URL.String(), ".well-known/webfinger") {
responseCode, responseBytes, responseContentType, responseContentLength = WebfingerResponse(req)
+ } else if strings.Contains(req.URL.String(), ".weird-webfinger-location/webfinger") {
+ responseCode, responseBytes, responseContentType, responseContentLength = WebfingerResponse(req)
+ } else if strings.Contains(req.URL.String(), ".well-known/host-meta") {
+ responseCode, responseBytes, responseContentType, responseContentLength = HostMetaResponse(req)
} else if note, ok := mockHTTPClient.TestRemoteStatuses[req.URL.String()]; ok {
// the request is for a note that we have stored
noteI, err := streams.Serialize(note)
@@ -221,11 +226,47 @@ func (m *MockHTTPClient) Do(req *http.Request) (*http.Response, error) {
return m.do(req)
}
+func HostMetaResponse(req *http.Request) (responseCode int, responseBytes []byte, responseContentType string, responseContentLength int) {
+ var hm *apimodel.HostMeta
+
+ if req.URL.String() == "https://misconfigured-instance.com/.well-known/host-meta" {
+ hm = &apimodel.HostMeta{
+ XMLNS: "http://docs.oasis-open.org/ns/xri/xrd-1.0",
+ Link: []apimodel.Link{
+ {
+ Rel: "lrdd",
+ Type: "application/xrd+xml",
+ Template: "https://misconfigured-instance.com/.weird-webfinger-location/webfinger?resource={uri}",
+ },
+ },
+ }
+ }
+
+ if hm == nil {
+ log.Debugf(nil, "hostmeta response not available for %s", req.URL)
+ responseCode = http.StatusNotFound
+ responseBytes = []byte(``)
+ responseContentType = "application/xml"
+ responseContentLength = len(responseBytes)
+ return
+ }
+
+ hmXML, err := xml.Marshal(hm)
+ if err != nil {
+ panic(err)
+ }
+ responseCode = http.StatusOK
+ responseBytes = hmXML
+ responseContentType = "application/xml"
+ responseContentLength = len(hmXML)
+ return
+}
+
func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byte, responseContentType string, responseContentLength int) {
var wfr *apimodel.WellKnownResponse
switch req.URL.String() {
- case "https://unknown-instance.com/.well-known/webfinger?resource=acct:some_group@unknown-instance.com":
+ case "https://unknown-instance.com/.well-known/webfinger?resource=acct%3Asome_group%40unknown-instance.com":
wfr = &apimodel.WellKnownResponse{
Subject: "acct:some_group@unknown-instance.com",
Links: []apimodel.Link{
@@ -236,7 +277,7 @@ func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byt
},
},
}
- case "https://owncast.example.org/.well-known/webfinger?resource=acct:rgh@owncast.example.org":
+ case "https://owncast.example.org/.well-known/webfinger?resource=acct%3Argh%40owncast.example.org":
wfr = &apimodel.WellKnownResponse{
Subject: "acct:rgh@example.org",
Links: []apimodel.Link{
@@ -247,7 +288,7 @@ func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byt
},
},
}
- case "https://unknown-instance.com/.well-known/webfinger?resource=acct:brand_new_person@unknown-instance.com":
+ case "https://unknown-instance.com/.well-known/webfinger?resource=acct%3Abrand_new_person%40unknown-instance.com":
wfr = &apimodel.WellKnownResponse{
Subject: "acct:brand_new_person@unknown-instance.com",
Links: []apimodel.Link{
@@ -258,7 +299,7 @@ func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byt
},
},
}
- case "https://turnip.farm/.well-known/webfinger?resource=acct:turniplover6969@turnip.farm":
+ case "https://turnip.farm/.well-known/webfinger?resource=acct%3Aturniplover6969%40turnip.farm":
wfr = &apimodel.WellKnownResponse{
Subject: "acct:turniplover6969@turnip.farm",
Links: []apimodel.Link{
@@ -269,7 +310,7 @@ func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byt
},
},
}
- case "https://fossbros-anonymous.io/.well-known/webfinger?resource=acct:foss_satan@fossbros-anonymous.io":
+ case "https://fossbros-anonymous.io/.well-known/webfinger?resource=acct%3Afoss_satan%40fossbros-anonymous.io":
wfr = &apimodel.WellKnownResponse{
Subject: "acct:foss_satan@fossbros-anonymous.io",
Links: []apimodel.Link{
@@ -280,7 +321,7 @@ func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byt
},
},
}
- case "https://example.org/.well-known/webfinger?resource=acct:Some_User@example.org":
+ case "https://example.org/.well-known/webfinger?resource=acct%3ASome_User%40example.org":
wfr = &apimodel.WellKnownResponse{
Subject: "acct:Some_User@example.org",
Links: []apimodel.Link{
@@ -291,6 +332,17 @@ func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byt
},
},
}
+ case "https://misconfigured-instance.com/.weird-webfinger-location/webfinger?resource=acct%3Asomeone%40misconfigured-instance.com":
+ wfr = &apimodel.WellKnownResponse{
+ Subject: "acct:someone@misconfigured-instance.com",
+ Links: []apimodel.Link{
+ {
+ Rel: "self",
+ Type: applicationActivityJSON,
+ Href: "https://misconfigured-instance.com/users/someone",
+ },
+ },
+ }
}
if wfr == nil {