...

Source file src/codeberg.org/tslocum/sriracha/internal/server/server_test.go

Documentation: codeberg.org/tslocum/sriracha/internal/server

     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  // BenchmarkBoardThread benchmarks board index pages.
    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  	// Warm caches.
    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  // BenchmarkBoardThread benchmarks board thread pages.
    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  	// Warm caches.
   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