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