blob: 98be7dbdd040089372027d9fb901f830761bac44 [file] [log] [blame]
Bogdan Caprita2f5585b2014-11-21 17:32:21 -08001package modules_test
2
3import (
4 "bytes"
5 "io"
6 "testing"
7
Jiri Simsa764efb72014-12-25 20:57:03 -08008 "v.io/core/veyron/lib/modules"
9 "v.io/core/veyron/lib/testutil"
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080010)
11
12func init() {
13 if !modules.IsModulesProcess() {
14 testutil.Init()
15 }
16}
17func TestQueueRW(t *testing.T) {
18 q := modules.NewRW()
19 size := testutil.Rand.Intn(1000)
20 data := testutil.RandomBytes(size)
21 begin := 0
22 for {
23 end := begin + testutil.Rand.Intn(100) + 1
24 if end > len(data) {
25 end = len(data)
26 }
27 n, err := q.Write(data[begin:end])
28 if err != nil {
29 t.Fatalf("Write failed: %v", err)
30 }
31 begin = begin + n
32 if begin == len(data) {
33 break
34 }
35 }
36 // This marks EOF.
37 if _, err := q.Write([]byte{}); err != nil {
38 t.Fatalf("err %v", err)
39 }
40 readData := make([]byte, 0, size)
41 for {
42 buf := make([]byte, testutil.Rand.Intn(100)+1)
43 n, err := q.Read(buf)
44 if n > 0 {
45 readData = append(readData, buf[:n]...)
46 }
47 if err != nil {
48 if err == io.EOF {
49 break
50 }
51 t.Fatalf("Read failed: %v", err)
52 }
53 }
54 if size != len(readData) {
55 t.Fatalf("Mismatching data size: %d != %d", size, len(readData))
56 }
57 if !bytes.Equal(data, readData) {
58 t.Fatalf("Diffing data:\n%v\n%v", data, readData)
59 }
60}