Chromium Code Reviews| Index: mojo/go/tests/system_test.go |
| diff --git a/mojo/go/tests/system_test.go b/mojo/go/tests/system_test.go |
| index f3581f0371d33cd3531dd391cbe2c3e861194eb4..089a276cb141373c3ac7d8ce43ba1834bd05310a 100644 |
| --- a/mojo/go/tests/system_test.go |
| +++ b/mojo/go/tests/system_test.go |
| @@ -190,11 +190,15 @@ func TestDataPipe(t *testing.T) { |
| if r, _ = hp.Wait(system.MOJO_HANDLE_SIGNAL_WRITABLE, 0); r != system.MOJO_RESULT_OK { |
| t.Fatalf("hp should be writeable:%v", r) |
| } |
| + |
| + // Test one-phase read/write. |
| + // Writing. |
| kHello := []byte("hello") |
| r, numBytes := hp.WriteData(kHello, system.MOJO_WRITE_DATA_FLAG_NONE) |
| if r != system.MOJO_RESULT_OK || numBytes != len(kHello) { |
| t.Fatalf("Failed WriteData on hp:%v numBytes:%d", r, numBytes) |
| } |
| + // Reading. |
| if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 1000); r != system.MOJO_RESULT_OK { |
| t.Fatalf("hc should be readable after WriteData on hp:%v", r) |
| } |
| @@ -205,6 +209,47 @@ func TestDataPipe(t *testing.T) { |
| if !bytes.Equal(data, kHello) { |
| t.Fatalf("Invalid data expected:%s, got:%s", kHello, data) |
| } |
| + |
| + // Test two-phase read/write. |
| + // Writing. |
| + kHello = []byte("Hello, world!") |
| + r, buf := hp.BeginWriteData(len(kHello), system.MOJO_WRITE_DATA_FLAG_ALL_OR_NONE) |
| + if r != system.MOJO_RESULT_OK { |
| + t.Fatalf("Failed BeginWriteData on hp:%v numBytes:%d", r, len(kHello)) |
| + } |
| + if len(buf) < len(kHello) { |
| + t.Fatalf("Buffer size(%d) should be at least %d", len(buf), len(kHello)) |
| + } |
| + copy(buf, kHello) |
| + if r, _ := hp.WriteData(kHello, system.MOJO_WRITE_DATA_FLAG_NONE); r != system.MOJO_RESULT_BUSY { |
| + t.Fatalf("hp should be busy during a two-phase write: %v", r) |
| + } |
| + if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 10); r != system.MOJO_RESULT_DEADLINE_EXCEEDED { |
| + t.Fatalf("hc shouldn't be readable before EndWriteData on hp:%v", r) |
| + } |
| + if r := hp.EndWriteData(len(kHello)); r != system.MOJO_RESULT_OK { |
| + t.Fatalf("Failed EndWriteData on hp:%v", r) |
| + } |
| + // Reading. |
| + if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 1000); r != system.MOJO_RESULT_OK { |
|
jamesr
2015/01/21 18:56:15
sorry I missed this earlier, but what does the con
rogulenko
2015/01/21 19:59:59
Changed all deadlines to either MOJO_DEADLINE_INDE
|
| + t.Fatalf("hc should be readable after EndWriteData on hp:%v", r) |
| + } |
| + if r, buf = hc.BeginReadData(len(kHello), system.MOJO_READ_DATA_FLAG_ALL_OR_NONE); r != system.MOJO_RESULT_OK { |
| + t.Fatalf("Failed BeginReadData on hc:%v numBytes:%d", r, len(kHello)) |
| + } |
| + if len(buf) != len(kHello) { |
| + t.Fatalf("Buffer size(%d) should be equal to %d", len(buf), len(kHello)) |
| + } |
| + if r, _ := hc.ReadData(system.MOJO_READ_DATA_FLAG_NONE); r != system.MOJO_RESULT_BUSY { |
| + t.Fatalf("hc should be busy during a two-phase read: %v", r) |
| + } |
| + if !bytes.Equal(buf, kHello) { |
| + t.Fatalf("Invalid data expected:%s, got:%s", kHello, buf) |
| + } |
| + if r := hc.EndReadData(len(buf)); r != system.MOJO_RESULT_OK { |
| + t.Fatalf("Failed EndReadData on hc:%v", r) |
| + } |
| + |
| if r = hp.Close(); r != system.MOJO_RESULT_OK { |
| t.Fatalf("Close on hp failed:%v", r) |
| } |