aboutsummaryrefslogtreecommitdiffhomepage
path: root/hugolib/site_benchmark_new_test.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2019-06-25 23:56:06 +0200
committerBjørn Erik Pedersen <[email protected]>2019-06-26 09:09:40 +0200
commitdc1d4a9200c54e631775f34725140fd5009aa561 (patch)
treed00bcc927fb26e9ce08924fe3d455af8f2b9919e /hugolib/site_benchmark_new_test.go
parentde7b9475c049e5df5b076d80799ebcbee3eb84c8 (diff)
downloadhugo-dc1d4a9200c54e631775f34725140fd5009aa561.tar.gz
hugo-dc1d4a9200c54e631775f34725140fd5009aa561.zip
hugolib: Add another site benchmark
Also rework test test setup so the benchmarks can also be run as tests, which is useful when creating new benchmarks an make sure they ... work.
Diffstat (limited to 'hugolib/site_benchmark_new_test.go')
-rw-r--r--hugolib/site_benchmark_new_test.go91
1 files changed, 80 insertions, 11 deletions
diff --git a/hugolib/site_benchmark_new_test.go b/hugolib/site_benchmark_new_test.go
index c816dc9c3..1066df68e 100644
--- a/hugolib/site_benchmark_new_test.go
+++ b/hugolib/site_benchmark_new_test.go
@@ -14,11 +14,20 @@
package hugolib
import (
+ "fmt"
+ "path"
+ "path/filepath"
+ "strings"
"testing"
)
-// TODO(bep) eventually remove the old (too complicated setup).
-func BenchmarkSiteNew(b *testing.B) {
+type siteBenchmarkTestcase struct {
+ name string
+ create func(t testing.TB) *sitesBuilder
+ check func(s *sitesBuilder)
+}
+
+func getBenchmarkSiteNewTestCases() []siteBenchmarkTestcase {
// TODO(bep) create some common and stable data set
const pageContent = `---
@@ -34,12 +43,8 @@ baseURL = "https://example.com"
`
- benchmarks := []struct {
- name string
- create func(i int) *sitesBuilder
- check func(s *sitesBuilder)
- }{
- {"Bundle with image", func(i int) *sitesBuilder {
+ benchmarks := []siteBenchmarkTestcase{
+ {"Bundle with image", func(b testing.TB) *sitesBuilder {
sb := newTestSitesBuilder(b).WithConfigFile("toml", config)
sb.WithContent("content/blog/mybundle/index.md", pageContent)
sb.WithSunset("content/blog/mybundle/sunset1.jpg")
@@ -52,7 +57,7 @@ baseURL = "https://example.com"
},
},
- {"Bundle with JSON file", func(i int) *sitesBuilder {
+ {"Bundle with JSON file", func(b testing.TB) *sitesBuilder {
sb := newTestSitesBuilder(b).WithConfigFile("toml", config)
sb.WithContent("content/blog/mybundle/index.md", pageContent)
sb.WithContent("content/blog/mybundle/mydata.json", `{ "hello": "world" }`)
@@ -65,31 +70,95 @@ baseURL = "https://example.com"
},
},
- {"Multiple languages", func(i int) *sitesBuilder {
+ {"Deep content tree", func(b testing.TB) *sitesBuilder {
+
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
baseURL = "https://example.com"
[languages]
[languages.en]
weight=1
+contentDir="content/en"
[languages.fr]
weight=2
+contentDir="content/fr"
+[languages.no]
+weight=3
+contentDir="content/no"
+[languages.sv]
+weight=4
+contentDir="content/sv"
`)
+ createContent := func(dir, name string) {
+ sb.WithContent(filepath.Join("content", dir, name), pageContent)
+ }
+
+ createBundledFiles := func(dir string) {
+ sb.WithContent(filepath.Join("content", dir, "data.json"), `{ "hello": "world" }`)
+ for i := 1; i <= 3; i++ {
+ sb.WithContent(filepath.Join("content", dir, fmt.Sprintf("page%d.md", i)), pageContent)
+ }
+ }
+
+ for _, lang := range []string{"en", "fr", "no", "sv"} {
+ for level := 1; level <= 5; level++ {
+ sectionDir := path.Join(lang, strings.Repeat("section/", level))
+ createContent(sectionDir, "_index.md")
+ createBundledFiles(sectionDir)
+ for i := 1; i <= 3; i++ {
+ leafBundleDir := path.Join(sectionDir, fmt.Sprintf("bundle%d", i))
+ createContent(leafBundleDir, "index.md")
+ createBundledFiles(path.Join(leafBundleDir, "assets1"))
+ createBundledFiles(path.Join(leafBundleDir, "assets1", "assets2"))
+ }
+ }
+ }
+
return sb
},
func(s *sitesBuilder) {
+ s.CheckExists("public/blog/mybundle/index.html")
+ s.Assertions.Equal(4, len(s.H.Sites))
+ s.Assertions.Equal(len(s.H.Sites[0].RegularPages()), len(s.H.Sites[1].RegularPages()))
+ s.Assertions.Equal(30, len(s.H.Sites[0].RegularPages()))
},
},
}
+ return benchmarks
+
+}
+
+// Run the benchmarks below as tests. Mostly useful when adding new benchmark
+// variants.
+func TestBenchmarkSiteNew(b *testing.T) {
+ benchmarks := getBenchmarkSiteNewTestCases()
+ for _, bm := range benchmarks {
+ b.Run(bm.name, func(b *testing.T) {
+ s := bm.create(b)
+
+ err := s.BuildE(BuildCfg{})
+ if err != nil {
+ b.Fatal(err)
+ }
+ bm.check(s)
+
+ })
+ }
+}
+
+// TODO(bep) eventually remove the old (too complicated setup).
+func BenchmarkSiteNew(b *testing.B) {
+ benchmarks := getBenchmarkSiteNewTestCases()
+
for _, bm := range benchmarks {
b.Run(bm.name, func(b *testing.B) {
sites := make([]*sitesBuilder, b.N)
for i := 0; i < b.N; i++ {
- sites[i] = bm.create(i)
+ sites[i] = bm.create(b)
}
b.ResetTimer()