Skip to content

Commit 7398b04

Browse files
committed
Merge pull request #34 from mikespook/master
Add Possum
2 parents 93ea0e7 + 10a9395 commit 7398b04

File tree

8 files changed

+121
-1
lines changed

8 files changed

+121
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Of course the tested routers can be used for any kind of HTTP request → handle
2121
* [Kocha-urlrouter](https://github.com/naoina/kocha-urlrouter)
2222
* [Martini](https://github.com/go-martini/martini)
2323
* [Pat](https://github.com/bmizerany/pat)
24+
* [Possum](https://github.com/mikespook/possum)
2425
* [R2router](https://github.com/vanng822/r2router)
2526
* [TigerTonic](https://github.com/rcrowley/go-tigertonic)
2627
* [Traffic](https://github.com/pilu/traffic)

bench_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,12 @@ func BenchmarkPat_Param(b *testing.B) {
209209
benchRequest(b, router, r)
210210
}
211211

212+
func BenchmarkPossum_Param(b *testing.B) {
213+
router := loadPossumSingle("GET", "/user/:name", possumHandler)
214+
215+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
216+
benchRequest(b, router, r)
217+
}
212218
func BenchmarkR2router_Param(b *testing.B) {
213219
router := loadR2routerSingle("GET", "/user/:name", r2routerHandler)
214220

@@ -376,7 +382,12 @@ func BenchmarkPat_Param5(b *testing.B) {
376382
r, _ := http.NewRequest("GET", fiveRoute, nil)
377383
benchRequest(b, router, r)
378384
}
385+
func BenchmarkPossum_Param5(b *testing.B) {
386+
router := loadPossumSingle("GET", fiveColon, possumHandler)
379387

388+
r, _ := http.NewRequest("GET", fiveRoute, nil)
389+
benchRequest(b, router, r)
390+
}
380391
func BenchmarkR2router_Param5(b *testing.B) {
381392
router := loadR2routerSingle("GET", fiveColon, r2routerHandler)
382393

@@ -544,7 +555,12 @@ func BenchmarkPat_Param20(b *testing.B) {
544555
r, _ := http.NewRequest("GET", twentyRoute, nil)
545556
benchRequest(b, router, r)
546557
}
558+
func BenchmarkPossum_Param20(b *testing.B) {
559+
router := loadPossumSingle("GET", twentyColon, possumHandler)
547560

561+
r, _ := http.NewRequest("GET", twentyRoute, nil)
562+
benchRequest(b, router, r)
563+
}
548564
func BenchmarkR2router_Param20(b *testing.B) {
549565
router := loadR2routerSingle("GET", twentyColon, r2routerHandler)
550566

@@ -708,7 +724,12 @@ func BenchmarkPat_ParamWrite(b *testing.B) {
708724
r, _ := http.NewRequest("GET", "/user/gordon", nil)
709725
benchRequest(b, router, r)
710726
}
727+
func BenchmarkPossum_ParamWrite(b *testing.B) {
728+
router := loadPossumSingle("GET", "/user/:name", possumHandlerWrite)
711729

730+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
731+
benchRequest(b, router, r)
732+
}
712733
func BenchmarkR2router_ParamWrite(b *testing.B) {
713734
router := loadR2routerSingle("GET", "/user/:name", r2routerHandleWrite)
714735

@@ -755,6 +776,7 @@ func BenchmarkVulcan_ParamWrite(b *testing.B) {
755776
r, _ := http.NewRequest("GET", "/user/gordon", nil)
756777
benchRequest(b, router, r)
757778
}
779+
758780
func BenchmarkZeus_ParamWrite(b *testing.B) {
759781
router := loadZeusSingle("GET", "/user/:name", zeusHandlerWrite)
760782

github_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ var (
292292
githubMacaron http.Handler
293293
githubMartini http.Handler
294294
githubPat http.Handler
295+
githubPossum http.Handler
295296
githubR2router http.Handler
296297
githubRevel http.Handler
297298
githubRivet http.Handler
@@ -359,6 +360,9 @@ func init() {
359360
calcMem("Pat", func() {
360361
githubPat = loadPat(githubAPI)
361362
})
363+
calcMem("Possum", func() {
364+
githubPossum = loadPossum(githubAPI)
365+
})
362366
calcMem("R2router", func() {
363367
githubR2router = loadR2router(githubAPI)
364368
})
@@ -460,6 +464,10 @@ func BenchmarkPat_GithubStatic(b *testing.B) {
460464
req, _ := http.NewRequest("GET", "/user/repos", nil)
461465
benchRequest(b, githubPat, req)
462466
}
467+
func BenchmarkPossum_GithubStatic(b *testing.B) {
468+
req, _ := http.NewRequest("GET", "/user/repos", nil)
469+
benchRequest(b, githubPossum, req)
470+
}
463471
func BenchmarkR2router_GithubStatic(b *testing.B) {
464472
req, _ := http.NewRequest("GET", "/user/repos", nil)
465473
benchRequest(b, githubR2router, req)
@@ -566,6 +574,10 @@ func BenchmarkPat_GithubParam(b *testing.B) {
566574
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
567575
benchRequest(b, githubPat, req)
568576
}
577+
func BenchmarkPossum_GithubParam(b *testing.B) {
578+
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
579+
benchRequest(b, githubPossum, req)
580+
}
569581
func BenchmarkR2router_GithubParam(b *testing.B) {
570582
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
571583
benchRequest(b, githubR2router, req)
@@ -654,6 +666,9 @@ func BenchmarkMartini_GithubAll(b *testing.B) {
654666
func BenchmarkPat_GithubAll(b *testing.B) {
655667
benchRoutes(b, githubPat, githubAPI)
656668
}
669+
func BenchmarkPossum_GithubAll(b *testing.B) {
670+
benchRoutes(b, githubPossum, githubAPI)
671+
}
657672
func BenchmarkR2router_GithubAll(b *testing.B) {
658673
benchRoutes(b, githubR2router, githubAPI)
659674
}

gplus_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ var (
5454
gplusMacaron http.Handler
5555
gplusMartini http.Handler
5656
gplusPat http.Handler
57+
gplusPossum http.Handler
5758
gplusR2router http.Handler
5859
gplusRevel http.Handler
5960
gplusRivet http.Handler
@@ -121,6 +122,9 @@ func init() {
121122
calcMem("Pat", func() {
122123
gplusPat = loadPat(gplusAPI)
123124
})
125+
calcMem("Possum", func() {
126+
gplusPossum = loadPossum(gplusAPI)
127+
})
124128
calcMem("R2router", func() {
125129
gplusR2router = loadR2router(gplusAPI)
126130
})
@@ -222,6 +226,10 @@ func BenchmarkPat_GPlusStatic(b *testing.B) {
222226
req, _ := http.NewRequest("GET", "/people", nil)
223227
benchRequest(b, gplusPat, req)
224228
}
229+
func BenchmarkPossum_GPlusStatic(b *testing.B) {
230+
req, _ := http.NewRequest("GET", "/people", nil)
231+
benchRequest(b, gplusPossum, req)
232+
}
225233
func BenchmarkR2router_GPlusStatic(b *testing.B) {
226234
req, _ := http.NewRequest("GET", "/people", nil)
227235
benchRequest(b, gplusR2router, req)
@@ -328,6 +336,10 @@ func BenchmarkPat_GPlusParam(b *testing.B) {
328336
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
329337
benchRequest(b, gplusPat, req)
330338
}
339+
func BenchmarkPossum_GPlusParam(b *testing.B) {
340+
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
341+
benchRequest(b, gplusPossum, req)
342+
}
331343
func BenchmarkR2router_GPlusParam(b *testing.B) {
332344
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
333345
benchRequest(b, gplusR2router, req)
@@ -434,6 +446,10 @@ func BenchmarkPat_GPlus2Params(b *testing.B) {
434446
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
435447
benchRequest(b, gplusPat, req)
436448
}
449+
func BenchmarkPossum_GPlus2Params(b *testing.B) {
450+
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
451+
benchRequest(b, gplusPossum, req)
452+
}
437453
func BenchmarkR2router_GPlus2Params(b *testing.B) {
438454
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
439455
benchRequest(b, gplusR2router, req)
@@ -522,6 +538,9 @@ func BenchmarkMartini_GPlusAll(b *testing.B) {
522538
func BenchmarkPat_GPlusAll(b *testing.B) {
523539
benchRoutes(b, gplusPat, gplusAPI)
524540
}
541+
func BenchmarkPossum_GPlusAll(b *testing.B) {
542+
benchRoutes(b, gplusPossum, gplusAPI)
543+
}
525544
func BenchmarkR2router_GPlusAll(b *testing.B) {
526545
benchRoutes(b, gplusR2router, gplusAPI)
527546
}

parse_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ var (
7474
parseMacaron http.Handler
7575
parseMartini http.Handler
7676
parsePat http.Handler
77+
parsePossum http.Handler
7778
parseR2router http.Handler
7879
parseRevel http.Handler
7980
parseRivet http.Handler
@@ -141,6 +142,9 @@ func init() {
141142
calcMem("Pat", func() {
142143
parsePat = loadPat(parseAPI)
143144
})
145+
calcMem("Possum", func() {
146+
parsePossum = loadPossum(parseAPI)
147+
})
144148
calcMem("R2router", func() {
145149
parseR2router = loadR2router(parseAPI)
146150
})
@@ -242,6 +246,10 @@ func BenchmarkPat_ParseStatic(b *testing.B) {
242246
req, _ := http.NewRequest("GET", "/1/users", nil)
243247
benchRequest(b, parsePat, req)
244248
}
249+
func BenchmarkPossum_ParseStatic(b *testing.B) {
250+
req, _ := http.NewRequest("GET", "/1/users", nil)
251+
benchRequest(b, parsePossum, req)
252+
}
245253
func BenchmarkR2router_ParseStatic(b *testing.B) {
246254
req, _ := http.NewRequest("GET", "/1/users", nil)
247255
benchRequest(b, parseR2router, req)
@@ -348,6 +356,10 @@ func BenchmarkPat_ParseParam(b *testing.B) {
348356
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
349357
benchRequest(b, parsePat, req)
350358
}
359+
func BenchmarkPossum_ParseParam(b *testing.B) {
360+
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
361+
benchRequest(b, parsePossum, req)
362+
}
351363
func BenchmarkR2router_ParseParam(b *testing.B) {
352364
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
353365
benchRequest(b, parseR2router, req)
@@ -454,6 +466,10 @@ func BenchmarkPat_Parse2Params(b *testing.B) {
454466
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
455467
benchRequest(b, parsePat, req)
456468
}
469+
func BenchmarkPossum_Parse2Params(b *testing.B) {
470+
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
471+
benchRequest(b, parsePossum, req)
472+
}
457473
func BenchmarkR2router_Parse2Params(b *testing.B) {
458474
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
459475
benchRequest(b, parseR2router, req)
@@ -542,6 +558,9 @@ func BenchmarkMartini_ParseAll(b *testing.B) {
542558
func BenchmarkPat_ParseAll(b *testing.B) {
543559
benchRoutes(b, parsePat, parseAPI)
544560
}
561+
func BenchmarkPossum_ParseAll(b *testing.B) {
562+
benchRoutes(b, parsePossum, parseAPI)
563+
}
545564
func BenchmarkR2router_ParseAll(b *testing.B) {
546565
benchRoutes(b, parseR2router, parseAPI)
547566
}

routers.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ import (
3535
llog "github.com/lunny/log"
3636
"github.com/lunny/tango"
3737
vulcan "github.com/mailgun/route"
38+
"github.com/mikespook/possum"
39+
possumrouter "github.com/mikespook/possum/router"
40+
possumview "github.com/mikespook/possum/view"
3841
"github.com/naoina/denco"
3942
"github.com/naoina/kocha-urlrouter"
4043
_ "github.com/naoina/kocha-urlrouter/doublearray"
@@ -942,6 +945,40 @@ func loadPatSingle(method, path string, handler http.Handler) http.Handler {
942945
return m
943946
}
944947

948+
// Possum
949+
func possumHandler(c *possum.Context) error {
950+
return nil
951+
}
952+
953+
func possumHandlerWrite(c *possum.Context) error {
954+
io.WriteString(c.Response, c.Request.URL.Query().Get("name"))
955+
return nil
956+
}
957+
958+
func possumHandlerTest(c *possum.Context) error {
959+
io.WriteString(c.Response, c.Request.RequestURI)
960+
return nil
961+
}
962+
963+
func loadPossum(routes []route) http.Handler {
964+
h := possumHandler
965+
if loadTestHandler {
966+
h = possumHandlerTest
967+
}
968+
969+
router := possum.NewServerMux()
970+
for _, route := range routes {
971+
router.HandleFunc(possumrouter.Simple(route.path), h, possumview.Simple("text/html", "utf-8"))
972+
}
973+
return router
974+
}
975+
976+
func loadPossumSingle(method, path string, handler possum.HandlerFunc) http.Handler {
977+
router := possum.NewServerMux()
978+
router.HandleFunc(possumrouter.Simple(path), handler, possumview.Simple("text/html", "utf-8"))
979+
return router
980+
}
981+
945982
// R2router
946983
func r2routerHandler(w http.ResponseWriter, req *http.Request, _ r2router.Params) {}
947984

routers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var (
3030
{"Macaron", loadMacaron},
3131
{"Martini", loadMartini},
3232
{"Pat", loadPat},
33+
{"Possum", loadPossum},
3334
{"R2router", loadR2router},
3435
{"Revel", loadRevel},
3536
{"Rivet", loadRivet},
@@ -70,7 +71,6 @@ func TestRouters(t *testing.T) {
7071
u.Path = route.path
7172
u.RawQuery = rq
7273
r.ServeHTTP(w, req)
73-
7474
if w.Code != 200 || w.Body.String() != route.path {
7575
t.Errorf(
7676
"%s in API %s: %d - %s; expected %s %s\n",

static_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ var (
190190
staticMacaron http.Handler
191191
staticMartini http.Handler
192192
staticPat http.Handler
193+
staticPossum http.Handler
193194
staticR2router http.Handler
194195
staticRevel http.Handler
195196
staticRivet http.Handler
@@ -265,6 +266,9 @@ func init() {
265266
calcMem("Pat", func() {
266267
staticPat = loadPat(staticRoutes)
267268
})
269+
calcMem("Possum", func() {
270+
staticPossum = loadPossum(staticRoutes)
271+
})
268272
calcMem("R2router", func() {
269273
staticR2router = loadR2router(staticRoutes)
270274
})
@@ -352,6 +356,9 @@ func BenchmarkMartini_StaticAll(b *testing.B) {
352356
func BenchmarkPat_StaticAll(b *testing.B) {
353357
benchRoutes(b, staticPat, staticRoutes)
354358
}
359+
func BenchmarkPossum_StaticAll(b *testing.B) {
360+
benchRoutes(b, staticPossum, staticRoutes)
361+
}
355362
func BenchmarkR2router_StaticAll(b *testing.B) {
356363
benchRoutes(b, staticR2router, staticRoutes)
357364
}

0 commit comments

Comments
 (0)