...
1 package server
2
3 import (
4 "fmt"
5 "io"
6 "testing"
7
8 . "codeberg.org/tslocum/sriracha/model"
9 . "codeberg.org/tslocum/sriracha/util"
10 )
11
12 func newTestBoard() *Board {
13 return &Board{
14 ID: 1,
15 Dir: "test",
16 Name: "Test",
17 Description: "Test board",
18 Type: TypeImageboard,
19 }
20 }
21
22 func newTestThread(size int) []*Post {
23 var id int
24 newPost := func() *Post {
25 id++
26 return &Post{
27 ID: id,
28 Subject: "Subject",
29 Name: "Anonymous",
30 Message: "Message",
31 }
32 }
33 posts := make([]*Post, size)
34 for i := 0; i < size; i++ {
35 posts[i] = newPost()
36 if i != 0 {
37 posts[i].Parent = 1
38 }
39 }
40 return posts
41 }
42
43 func newTestServer() (*Server, error) {
44 s := NewServer()
45 s.config = &Config{}
46
47 s.setDefaultServerConfig()
48
49 err := s.parseTemplates("", s.config.Template)
50 if err != nil {
51 return nil, fmt.Errorf("failed to parse template files: %s", err)
52 }
53 return s, nil
54 }
55
56
57 func BenchmarkBoardIndex(b *testing.B) {
58 s, err := newTestServer()
59 if err != nil {
60 b.Fatal(err)
61 }
62
63 board := newTestBoard()
64
65 data := s.newTemplateData()
66 data.Template = "board_page"
67 data.Board = board
68 data.Boards = []*Board{board}
69
70 for i := 0; i < 10; i++ {
71 data.Threads = append(data.Threads, newTestThread(i+1))
72 }
73
74 for _, thread := range data.Threads {
75 for _, post := range thread {
76 post.Board = board
77 post.SetNameBlock("Anonymous", "", false)
78 }
79 }
80
81
82 data.execute(io.Discard)
83
84 b.ResetTimer()
85 for i := 0; i < b.N; i++ {
86 data.execute(io.Discard)
87 }
88 }
89
90
91 func BenchmarkBoardThread(b *testing.B) {
92 s, err := newTestServer()
93 if err != nil {
94 b.Fatal(err)
95 }
96
97 board := newTestBoard()
98
99 data := s.newTemplateData()
100 data.Template = "board_page"
101 data.Board = board
102 data.Boards = []*Board{board}
103 data.Threads = [][]*Post{newTestThread(100)}
104
105 for _, thread := range data.Threads {
106 for _, post := range thread {
107 post.Board = board
108 post.SetNameBlock("Anonymous", "", false)
109 }
110 }
111
112
113 data.execute(io.Discard)
114
115 b.ResetTimer()
116 for i := 0; i < b.N; i++ {
117 data.execute(io.Discard)
118 }
119 }
120
View as plain text