зеркало из https://github.com/golang/pkgsite.git
145 строки
4.2 KiB
Go
145 строки
4.2 KiB
Go
// Copyright 2019 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"cloud.google.com/go/logging"
|
|
"github.com/google/go-cmp/cmp"
|
|
)
|
|
|
|
func TestRequestLog(t *testing.T) {
|
|
tests := []struct {
|
|
label string
|
|
handler http.HandlerFunc
|
|
want fakeLog
|
|
}{
|
|
{
|
|
label: "writes status",
|
|
handler: func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(400)
|
|
},
|
|
want: fakeLog{Status: 400},
|
|
},
|
|
{
|
|
label: "translates 200s",
|
|
handler: func(w http.ResponseWriter, r *http.Request) {},
|
|
want: fakeLog{Status: 200},
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.label, func(t *testing.T) {
|
|
lg := fakeLog{}
|
|
mw := RequestLog(&lg)
|
|
ts := httptest.NewServer(mw(test.handler))
|
|
defer ts.Close()
|
|
resp, err := ts.Client().Get(ts.URL)
|
|
if err != nil {
|
|
t.Fatalf("GET returned error %v", err)
|
|
}
|
|
resp.Body.Close()
|
|
if diff := cmp.Diff(test.want, lg); diff != "" {
|
|
t.Errorf("mismatching log state (-want +got):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
type fakeLog struct {
|
|
Status int
|
|
}
|
|
|
|
func (l *fakeLog) Log(entry logging.Entry) {
|
|
if entry.HTTPRequest != nil {
|
|
l.Status = entry.HTTPRequest.Status
|
|
}
|
|
}
|
|
|
|
func TestIsRobot(t *testing.T) {
|
|
for _, test := range []string{
|
|
"AHC/2.1",
|
|
"Algolia DocSearch Crawler",
|
|
"Apache-HttpClient/4.5.12 (Java/1.8.0_201)",
|
|
"AppEngine-Google; (+http://code.google.com/appengine)",
|
|
"ArchiveTeam ArchiveBot/20200413.2e71c9a (wpull 2.0.3) and not Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36",
|
|
"AwarioSmartBot/1.0 (+https://awario.com/bots.html; bots@awario.com)",
|
|
"BananaBot/0.6.1",
|
|
"Blackboard Safeassign",
|
|
"BorneoBot/0.7.1 (crawlcheck123@gmail.com)",
|
|
"CCBot/2.0 (https://commoncrawl.org/faq/)",
|
|
"Camo Asset Proxy 2.3.0",
|
|
"Faraday v0.15.4",
|
|
"Faraday v1.0.1",
|
|
"Go 1.1 package http",
|
|
"Go-http-client/2.0",
|
|
"GoogleStackdriverMonitoring-UptimeChecks(https://cloud.google.com/monitoring)",
|
|
"Googlebot-Video/1.0",
|
|
"Java/1.8.0_222",
|
|
"KamelioCrawler/0.0.0",
|
|
"Lawinsiderbot/1.0 (+http://www.lawinsider.com/about)",
|
|
"Linguee Bot (http://www.linguee.com/bot; bot@linguee.com)",
|
|
"Mozilla/5.0 (compatible; AhrefsBot/6.1; +http://ahrefs.com/robot/)",
|
|
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
|
|
"Node-RED www-request",
|
|
"Node.js/12.16.3 (macOS Mojave; x64)",
|
|
"NovichenkoBot",
|
|
"OpenBSD ftp",
|
|
"Python/3.9 aiohttp/3.6.2",
|
|
"Qwantify/1.0",
|
|
"Ruby",
|
|
"Scoop.it",
|
|
"Scrapy/1.8.0 (+https://scrapy.org)",
|
|
"SerendeputyBot/0.8.6 (http://serendeputy.com/about/serendeputy-bot)",
|
|
"SiteSucker for macOS/3.2.2",
|
|
"Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)",
|
|
"Sphinx/3.0.4 requests/2.23.0 python/3.7.3",
|
|
"TelegramBot (like TwitterBot)",
|
|
"Twitterbot/1.0",
|
|
"Typhoeus - https://github.com/typhoeus/typhoeus",
|
|
"WebexTeams",
|
|
"Wget/1.20.3 (linux-gnu)",
|
|
"WordPress/5.5.1; https://its-more.jp/ja_jp",
|
|
"chimebot",
|
|
"cis455crawler",
|
|
"colly - https://github.com/gocolly/colly",
|
|
"colly - https://github.com/gocolly/colly/v2",
|
|
"curl/7.69.1",
|
|
"datagnionbot (+http://www.datagnion.com/bot.html)",
|
|
"erbbot",
|
|
"facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)",
|
|
"fasthttp",
|
|
"git/2.22.3",
|
|
"git/2.22.4",
|
|
"github-camo (da61ea2e)",
|
|
"got (https://github.com/sindresorhus/got)",
|
|
"ltx71 - (http://ltx71.com/)",
|
|
"mdbook-linkcheck-0.7.0",
|
|
"mercurial/proto-1.0 (Mercurial 4.9.1)",
|
|
"meterian.cli-v1.0",
|
|
"node-fetch/1.0 (+https://github.com/bitinn/node-fetch)",
|
|
"okhttp/3.14.0",
|
|
"pimeyes.com crawler",
|
|
"python-requests/2.10.0",
|
|
"rest-client/2.0.2 (linux-gnu x86_64) ruby/2.6.5p114",
|
|
} {
|
|
if !isRobot(test) {
|
|
t.Errorf("isRobot(%q) = false; want true", test)
|
|
}
|
|
}
|
|
for _, test := range []string{
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36",
|
|
"Safari/15609.1.20.111.8 CFNetwork/1125.2 Darwin/19.4.0 (x86_64)",
|
|
"MobileSafari/604.1 CFNetwork/1126 Darwin/19.5.0",
|
|
} {
|
|
if isRobot(test) {
|
|
t.Errorf("isRobot(%q) = true; want = false", test)
|
|
}
|
|
}
|
|
}
|