blob: af20b44a3e5b7d7d3f2a55a095ad7af1676c7979 [file] [log] [blame]
Jiri Simsad7616c92015-03-24 23:44:30 -07001// Copyright 2015 The Vanadium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Bogdan Caprita2f5585b2014-11-21 17:32:21 -08005package modules_test
6
7import (
8 "bytes"
9 "io"
10 "testing"
11
Cosmos Nicolaou1381f8a2015-03-13 09:40:34 -070012 "v.io/x/ref/test/modules"
13 "v.io/x/ref/test/testutil"
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080014)
15
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080016func TestQueueRW(t *testing.T) {
Jiri Simsa95ab2972015-07-01 12:35:57 -070017 testutil.InitRandGenerator(t.Logf)
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080018 q := modules.NewRW()
Cosmos Nicolaouc818b802015-06-05 15:52:45 -070019 size := testutil.RandomIntn(1000)
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080020 data := testutil.RandomBytes(size)
21 begin := 0
22 for {
Cosmos Nicolaouc818b802015-06-05 15:52:45 -070023 end := begin + testutil.RandomIntn(100) + 1
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080024 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 }
Matt Rosencrantz5c75ff82015-03-02 17:55:31 -080036 if err := q.Close(); err != nil {
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080037 t.Fatalf("err %v", err)
38 }
39 readData := make([]byte, 0, size)
40 for {
Cosmos Nicolaouc818b802015-06-05 15:52:45 -070041 buf := make([]byte, testutil.RandomIntn(100)+1)
Bogdan Caprita2f5585b2014-11-21 17:32:21 -080042 n, err := q.Read(buf)
43 if n > 0 {
44 readData = append(readData, buf[:n]...)
45 }
46 if err != nil {
47 if err == io.EOF {
48 break
49 }
50 t.Fatalf("Read failed: %v", err)
51 }
52 }
53 if size != len(readData) {
54 t.Fatalf("Mismatching data size: %d != %d", size, len(readData))
55 }
56 if !bytes.Equal(data, readData) {
57 t.Fatalf("Diffing data:\n%v\n%v", data, readData)
58 }
59}