aboutsummaryrefslogtreecommitdiff
path: root/roomserver/api/perform_test.go
blob: f26438d3273d2d1f969c46a6d3110128178231d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package api

import (
	"fmt"
	"math/rand"
	"testing"

	"github.com/stretchr/testify/assert"
)

func BenchmarkPrevEventIDs(b *testing.B) {
	for _, x := range []int64{1, 10, 100, 500, 1000, 2000} {
		benchPrevEventIDs(b, int(x))
	}
}

func benchPrevEventIDs(b *testing.B, count int) {
	bwExtrems := generateBackwardsExtremities(b, count)
	backfiller := PerformBackfillRequest{
		BackwardsExtremities: bwExtrems,
	}

	b.Run(fmt.Sprintf("Original%d", count), func(b *testing.B) {
		b.ResetTimer()
		for i := 0; i < b.N; i++ {
			prevIDs := backfiller.PrevEventIDs()
			_ = prevIDs
		}
	})
}

type testLike interface {
	Helper()
}

const randomIDCharsCount = 10

func generateBackwardsExtremities(t testLike, count int) map[string][]string {
	t.Helper()
	result := make(map[string][]string, count)
	for i := 0; i < count; i++ {
		eventID := randomEventId(int64(i))
		result[eventID] = []string{
			randomEventId(int64(i + 1)),
			randomEventId(int64(i + 2)),
			randomEventId(int64(i + 3)),
		}
	}
	return result
}

const alphanumerics = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

// randomEventId generates a pseudo-random string of length n.
func randomEventId(src int64) string {
	randSrc := rand.NewSource(src)
	b := make([]byte, randomIDCharsCount)
	for i := range b {
		b[i] = alphanumerics[randSrc.Int63()%int64(len(alphanumerics))]
	}
	return string(b)
}

func TestPrevEventIDs(t *testing.T) {
	// generate 10 backwards extremities
	bwExtrems := generateBackwardsExtremities(t, 10)
	backfiller := PerformBackfillRequest{
		BackwardsExtremities: bwExtrems,
	}

	prevIDs := backfiller.PrevEventIDs()
	// Given how "generateBackwardsExtremities" works, this
	// generates 12 unique event IDs
	assert.Equal(t, 12, len(prevIDs))

	// generate 200 backwards extremities
	backfiller.BackwardsExtremities = generateBackwardsExtremities(t, 200)
	prevIDs = backfiller.PrevEventIDs()
	// PrevEventIDs returns at max 100 event IDs
	assert.Equal(t, 100, len(prevIDs))
}