fork of https://github.com/sourcegraph/zoekt
1package messagesize
2
3import (
4 "errors"
5 "math"
6 "testing"
7
8 "github.com/google/go-cmp/cmp"
9)
10
11func TestGetMessageSizeBytesFromString(t *testing.T) {
12
13 t.Run("8 MB", func(t *testing.T) {
14 sizeString := "8MB"
15
16 size, err := getMessageSizeBytesFromString(sizeString, 0, math.MaxInt)
17
18 if err != nil {
19 t.Fatalf("unexpected error: %s", err)
20 }
21
22 expectedSize := 8 * 1000 * 1000
23 if diff := cmp.Diff(expectedSize, size); diff != "" {
24 t.Fatalf("unexpected size (-want +got):\n%s", diff)
25 }
26 })
27
28 t.Run("just small enough", func(t *testing.T) {
29 sizeString := "4MB" // inside large-end of range
30
31 fourMegaBytes := 4 * 1000 * 1000
32 size, err := getMessageSizeBytesFromString(sizeString, 0, uint64(fourMegaBytes))
33 if err != nil {
34 t.Fatalf("unexpected error: %s", err)
35 }
36
37 if diff := cmp.Diff(fourMegaBytes, size); diff != "" {
38 t.Fatalf("unexpected size (-want +got):\n%s", diff)
39 }
40 })
41
42 t.Run("just large enough", func(t *testing.T) {
43 sizeString := "4MB" // inside low-end of range
44
45 fourMegaBytes := 4 * 1000 * 1000
46 size, err := getMessageSizeBytesFromString(sizeString, uint64(fourMegaBytes), math.MaxInt)
47 if err != nil {
48 t.Fatalf("unexpected error: %s", err)
49 }
50
51 if diff := cmp.Diff(fourMegaBytes, size); diff != "" {
52 t.Fatalf("unexpected size (-want +got):\n%s", diff)
53 }
54 })
55
56 t.Run("invalid size", func(t *testing.T) {
57 sizeString := "this-is-not-a-size"
58
59 _, err := getMessageSizeBytesFromString(sizeString, 0, math.MaxInt)
60 var expectedErr *parseError
61 if !errors.As(err, &expectedErr) {
62 t.Fatalf("expected parseError, got error %q", err)
63 }
64 })
65
66 t.Run("empty", func(t *testing.T) {
67 sizeString := ""
68
69 _, err := getMessageSizeBytesFromString(sizeString, 0, math.MaxInt)
70 var expectedErr *parseError
71 if !errors.As(err, &expectedErr) {
72 t.Fatalf("expected parseError, got error %q", err)
73 }
74 })
75
76 t.Run("too large", func(t *testing.T) {
77 sizeString := "4MB" // above range
78
79 twoMegaBytes := 2 * 1024 * 1024
80 _, err := getMessageSizeBytesFromString(sizeString, 0, uint64(twoMegaBytes))
81 var expectedErr *sizeOutOfRangeError
82 if !errors.As(err, &expectedErr) {
83 t.Fatalf("expected sizeOutOfRangeError, got error %q", err)
84 }
85 })
86
87 t.Run("too small", func(t *testing.T) {
88 sizeString := "1MB" // below range
89
90 twoMegaBytes := 2 * 1024 * 1024
91 _, err := getMessageSizeBytesFromString(sizeString, uint64(twoMegaBytes), math.MaxInt)
92 var expectedErr *sizeOutOfRangeError
93 if !errors.As(err, &expectedErr) {
94 t.Fatalf("expected sizeOutOfRangeError, got error %q", err)
95 }
96 })
97}