From 91700a6049a4d08e6a67a3aaa4a1dbbc98b69ea9 Mon Sep 17 00:00:00 2001 From: Naoki Kosaka Date: Fri, 9 Nov 2018 02:55:25 +0900 Subject: [PATCH] Add handle_test. --- handle_test.go | 133 ++++++++++++++++++++++++++++++++++++++++++++++- misc/testKey.pem | 27 ++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 misc/testKey.pem diff --git a/handle_test.go b/handle_test.go index 444f201..371d54b 100644 --- a/handle_test.go +++ b/handle_test.go @@ -1,6 +1,137 @@ package main -import "testing" +import ( + "encoding/json" + "io/ioutil" + "net/http" + "net/http/httptest" + "net/url" + "os" + "testing" + + "github.com/yukimochi/Activity-Relay/ActivityPub" + keyloader "github.com/yukimochi/Activity-Relay/KeyLoader" +) + +func TestMain(m *testing.M) { + os.Setenv("ACTOR_PEM", "misc/testKey.pem") + os.Setenv("RELAY_DOMAIN", "relay.yukimochi.example.org") + pemPath := os.Getenv("ACTOR_PEM") + relayDomain := os.Getenv("RELAY_DOMAIN") + hostkey, _ = keyloader.ReadPrivateKeyRSAfromPath(pemPath) + hostname, _ = url.Parse("https://" + relayDomain) + Actor = activitypub.GenerateActor(hostname, &hostkey.PublicKey) + WebfingerResource = activitypub.GenerateWebfingerResource(hostname, &Actor) + + code := m.Run() + os.Exit(code) +} + +func TestHandleWebfingerGet(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(handleWebfinger)) + defer s.Close() + + req, _ := http.NewRequest("GET", s.URL, nil) + q := req.URL.Query() + q.Add("resource", "acct:relay@"+os.Getenv("RELAY_DOMAIN")) + req.URL.RawQuery = q.Encode() + client := new(http.Client) + r, err := client.Do(req) + if err != nil { + t.Fatalf("Failed - " + err.Error()) + } + if r.Header.Get("Content-Type") != "application/json" { + t.Fatalf("Failed - Content-Type not match.") + } + if r.StatusCode != 200 { + t.Fatalf("Failed - StatusCode is not 200.") + } + defer r.Body.Close() + + data, _ := ioutil.ReadAll(r.Body) + var wfresource activitypub.WebfingerResource + err = json.Unmarshal(data, &wfresource) + if err != nil { + t.Fatalf("WebfingerResource responce is not valid.") + } + + domain, _ := url.Parse(wfresource.Links[0].Href) + if domain.Host != os.Getenv("RELAY_DOMAIN") { + t.Fatalf("WebfingerResource's Host not valid.") + } +} +func TestHandleWebfingerGetBadResource(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(handleWebfinger)) + defer s.Close() + + req, _ := http.NewRequest("GET", s.URL, nil) + q := req.URL.Query() + q.Add("resource", "acct:yukimochi@"+os.Getenv("RELAY_DOMAIN")) + req.URL.RawQuery = q.Encode() + client := new(http.Client) + r, err := client.Do(req) + if err != nil { + t.Fatalf("Failed - " + err.Error()) + } + if r.StatusCode != 404 { + t.Fatalf("Failed - StatusCode is not 404.") + } +} +func TestHandleWebfingerInvalidMethod(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(handleWebfinger)) + defer s.Close() + + req, _ := http.NewRequest("POST", s.URL, nil) + client := new(http.Client) + r, err := client.Do(req) + if err != nil { + t.Fatalf("Failed - " + err.Error()) + } + if r.StatusCode != 400 { + t.Fatalf("Failed - StatusCode is not 400.") + } +} +func TestHandleActorGet(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(handleActor)) + defer s.Close() + + r, err := http.Get(s.URL) + if err != nil { + t.Fatalf("Failed - " + err.Error()) + } + if r.Header.Get("Content-Type") != "application/activity+json" { + t.Fatalf("Failed - Content-Type not match.") + } + if r.StatusCode != 200 { + t.Fatalf("Failed - StatusCode is not 200.") + } + defer r.Body.Close() + + data, _ := ioutil.ReadAll(r.Body) + var actor activitypub.Actor + err = json.Unmarshal(data, &actor) + if err != nil { + t.Fatalf("Actor responce is not valid.") + } + + domain, _ := url.Parse(actor.ID) + if domain.Host != os.Getenv("RELAY_DOMAIN") { + t.Fatalf("Actor's Host not valid.") + } +} + +func TestHandleActorInvalidMethod(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(handleActor)) + defer s.Close() + + r, err := http.Post(s.URL, "text/plain", nil) + if err != nil { + t.Fatalf("Failed - " + err.Error()) + } + if r.StatusCode != 400 { + t.Fatalf("Failed - StatusCode is not 400.") + } +} func TestContains(t *testing.T) { data := "nil" diff --git a/misc/testKey.pem b/misc/testKey.pem new file mode 100644 index 0000000..f3e1667 --- /dev/null +++ b/misc/testKey.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAtl1oFS/LyBBlygdHp7bepNFgFvVLehdU31ReuFwt1WYDNEIQ +a60tH3CyjpnFw2Hq8z5tRtTIJgMTROBI2CU7wgpC4IEO1jFpl4vRqJ7bcCQBib+6 +QI+9TCCI2qLgnCObfU8i6HWj4Z5fDMhKrMLMbdjLDVNGy7PRlVGR/b/Ootur4PXF +2Xnxp+otum477/vT5SVNcJy6ZbFn//M6wo1ienKTnBOPjvMmz5JR8I6YczGJfmdr +IPFdfjz24JT3fyIYRP6jUEo6mAyMIJReBN66LrehOa+tETyMPCHnponrhbrpq49t +/0dQmtIorQeD5Yxi3BTbk3mJrd0sxvz5cPwsdQIDAQABAoIBAG8RhrHYsWmBKy2X +r3mjNAj4CGkTLswGZ8e5UBNC+RtOjUcHsY6TI7dRYT7ewwcTnRBXBiEsuVYFa3f4 +jgUu8C1nKIIpuEqWP7RwENp9HjM3isRFxH9LzEQQUKmwp9IREcOJLj6cX5qrZUKY +vnpoDjAc6NaN0MGCHHSwAJWme4jN7/0CRIAOhOEesaiUnkTEifIQBzGU83bDKi1Z +6WRnq+RS1MyMRVg/yo80UtywSLOIVuyb/trMcEXKNK5pBpJHxEMj1UBJ8j/vEyY6 +LBs5NtH4miALVE5B5h5x/tP2onlA0uyEI+Pr5kW7UMJrn0Uvl8qGLYYCm9v78Og9 +AckPmKUCgYEA6MnaJxxhjJI3Og3I28nAse551Ag134jb+V9tl+Pj5WNNUtLKtM/6 +FIlKsXMLENk6I3Xj55dXSj7tJvNtvi91IdyBLDFtvLaFp2rvvbtyZ6JNVpeZ9dke +azPL7JLN86fyGiFVsHw+IcPgFO/4ahtXdDe6tUCwbrKoVUGEwkoRmv8CgYEAyIxx +jzcxAR4q8iPIpslc5VaMHcqoW2Zm61Y07B4oFdmqjz+IP1pumJAovQsu+fA5GMtU +Bjq2W9xndMwuwOtGRt/Icc2JA8+manUZxNeKajhSypf+Ry6jFMYe7kuEW/iSfhdR +jS2os5W6YmjnP5l1KI5q8LXtNWOIIumUmh0m/IsCgYEAiNZ+whbQ0MzyYdHQjEIg +X3eLbbQV1vygMgqCZZK0WBbzUQhP19GZc5Dwszao/pJytn2KJoyz5xTuWsMlc3J6 +LBluZQf5NcEk97DIlIMnUPv68jfTbMzgMKwV5060edHzYqDNuhyOeVKm2iflopnH +4q0Pt5P7Ilcq1FLbM0pO5wkCgYEAtEzPq5pLDF467gcN1iUix2zP+9i/E600yk9u +tPlHwJ04oiDUNWDwHWk9tvfe/AXkz0299PvEB0JYIMGRJxBe1klKxEWs8Sg2zW8K +A9ZkMqsAg/OyP/zF0V9tX3+1N5p62bHNN8fc69epAeCeRqeIlTW1H0PwRxd8xSaK +2yNqcZECgYEAgPXPwXxT2qzdSfVp7TrT53kOYEPlkZXkzRZ0h9eRFbUNKRCt5h53 +qCq1DBOVAtQpKzGR0YGaA/JOMEYm8co2xAJH0Rkf+8GtsEi38Bqf8pzrdLAxQBi8 +oKk/pmB/LnNw6gDkL7Pi05kBHxa1kSCGmBxTe/5fCbaowTI+p0xkiNU= +-----END RSA PRIVATE KEY-----