]> Sergey Matveev's repositories - btrtrc.git/blob - mse/mse_test.go
mse: Got basic message stream encryption working with some tests
[btrtrc.git] / mse / mse_test.go
1 package mse
2
3 import (
4         "bytes"
5         "io"
6         "net"
7         "sync"
8
9         "testing"
10 )
11
12 func TestReadUntil(t *testing.T) {
13         test := func(data, until string, leftover int, expectedErr error) {
14                 r := bytes.NewReader([]byte(data))
15                 err := readUntil(r, []byte(until))
16                 if err != expectedErr {
17                         t.Fatal(err)
18                 }
19                 if r.Len() != leftover {
20                         t.Fatal(r.Len())
21                 }
22         }
23         test("feakjfeafeafegbaabc00", "abc", 2, nil)
24         test("feakjfeafeafegbaadc00", "abc", 0, io.EOF)
25 }
26
27 func TestSuffixMatchLen(t *testing.T) {
28         test := func(a, b string, expected int) {
29                 actual := suffixMatchLen([]byte(a), []byte(b))
30                 if actual != expected {
31                         t.Fatalf("expected %d, got %d for %q and %q", expected, actual, a, b)
32                 }
33         }
34         test("hello", "world", 0)
35         test("hello", "lo", 2)
36         test("hello", "llo", 3)
37         test("hello", "hell", 0)
38         test("hello", "helloooo!", 5)
39         test("hello", "lol!", 2)
40         test("hello", "mondo", 0)
41         test("mongo", "webscale", 0)
42         test("sup", "person", 1)
43 }
44
45 func TestHandshake(t *testing.T) {
46         a, b := net.Pipe()
47         wg := sync.WaitGroup{}
48         wg.Add(2)
49         go func() {
50                 defer wg.Done()
51                 a, err := Handshake(a, true, []byte("yep"))
52                 if err != nil {
53                         t.Fatal(err)
54                         return
55                 }
56                 a.Close()
57         }()
58         go func() {
59                 defer wg.Done()
60                 b, err := Handshake(b, false, []byte("yep"))
61                 if err != nil {
62                         t.Fatal(err)
63                         return
64                 }
65                 b.Close()
66         }()
67         wg.Wait()
68 }