go-hep.org/x/hep@v0.38.1/groot/riofs/plugin/plugin_test.go (about) 1 // Copyright ©2022 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package plugin_test 6 7 import ( 8 "fmt" 9 "net/http" 10 "net/http/httptest" 11 "testing" 12 "time" 13 14 "go-hep.org/x/hep/groot" 15 "go-hep.org/x/hep/groot/riofs" 16 "go-hep.org/x/hep/groot/rtree" 17 18 _ "go-hep.org/x/hep/groot/riofs/plugin/http" 19 ) 20 21 func BenchmarkDumpLocal(b *testing.B) { 22 // big-file.root is: rtests.XrdRemote("testdata/SMHiggsToZZTo4L.root") 23 benchDump(b, "../../testdata/big-file.root", "Events") 24 } 25 26 func BenchmarkDumpHTTP(b *testing.B) { 27 for _, i := range []time.Duration{ 28 0, 29 5 * time.Millisecond, 30 10 * time.Millisecond, 31 100 * time.Millisecond, 32 } { 33 func(i time.Duration) { 34 srv := httptest.NewServer(server{delay: i, h: http.FileServer(http.Dir("../../testdata"))}) 35 defer srv.Close() 36 37 b.Run(fmt.Sprintf("delay-%v", i), func(b *testing.B) { 38 // big-file.root is: rtests.XrdRemote("testdata/SMHiggsToZZTo4L.root") 39 benchDump(b, srv.URL+"/big-file.root", "Events") 40 }) 41 }(i) 42 } 43 } 44 45 type server struct { 46 delay time.Duration 47 h http.Handler 48 } 49 50 func (srv server) ServeHTTP(w http.ResponseWriter, r *http.Request) { 51 time.Sleep(srv.delay) 52 srv.h.ServeHTTP(w, r) 53 } 54 55 func benchDump(b *testing.B, fname, tname string) { 56 f, err := groot.Open(fname) 57 if err != nil { 58 b.Fatal(err) 59 } 60 defer f.Close() 61 62 o, err := riofs.Dir(f).Get(tname) 63 if err != nil { 64 b.Fatal(err) 65 } 66 67 tree := o.(rtree.Tree) 68 69 b.ResetTimer() 70 for i := 0; i < b.N; i++ { 71 _, err := dump(tree) 72 if err != nil { 73 b.Fatal(err) 74 } 75 } 76 } 77 78 func dump(tree rtree.Tree) (n int64, err error) { 79 r, err := rtree.NewReader(tree, rtree.NewReadVars(tree)) 80 if err != nil { 81 return 0, err 82 } 83 defer r.Close() 84 85 err = r.Read(func(rctx rtree.RCtx) error { 86 _ = rctx.Entry 87 n++ 88 return nil 89 }) 90 91 return n, err 92 }