| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package tests | 5 package tests |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "bytes" | 8 "bytes" |
| 9 "testing" | 9 "testing" |
| 10 | 10 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 if r != system.MOJO_RESULT_DEADLINE_EXCEEDED { | 88 if r != system.MOJO_RESULT_DEADLINE_EXCEEDED { |
| 89 t.Fatalf("h0 should not be readable:%v", r) | 89 t.Fatalf("h0 should not be readable:%v", r) |
| 90 } | 90 } |
| 91 if state.SatisfiedSignals != system.MOJO_HANDLE_SIGNAL_WRITABLE { | 91 if state.SatisfiedSignals != system.MOJO_HANDLE_SIGNAL_WRITABLE { |
| 92 t.Fatalf("state should be not be signaled readable after CreateM
essagePipe:%v", state.SatisfiedSignals) | 92 t.Fatalf("state should be not be signaled readable after CreateM
essagePipe:%v", state.SatisfiedSignals) |
| 93 } | 93 } |
| 94 if state.SatisfiableSignals != MOJO_HANDLE_SIGNAL_ALL { | 94 if state.SatisfiableSignals != MOJO_HANDLE_SIGNAL_ALL { |
| 95 t.Fatalf("state should allow all signals after CreateMessagePipe
:%v", state.SatisfiableSignals) | 95 t.Fatalf("state should allow all signals after CreateMessagePipe
:%v", state.SatisfiableSignals) |
| 96 } | 96 } |
| 97 | 97 |
| 98 » r, state = h0.Wait(system.MOJO_HANDLE_SIGNAL_WRITABLE, 0) | 98 » r, state = h0.Wait(system.MOJO_HANDLE_SIGNAL_WRITABLE, system.MOJO_DEADL
INE_INDEFINITE) |
| 99 if r != system.MOJO_RESULT_OK { | 99 if r != system.MOJO_RESULT_OK { |
| 100 t.Fatalf("h0 should be writable:%v", r) | 100 t.Fatalf("h0 should be writable:%v", r) |
| 101 } | 101 } |
| 102 if state.SatisfiedSignals != system.MOJO_HANDLE_SIGNAL_WRITABLE { | 102 if state.SatisfiedSignals != system.MOJO_HANDLE_SIGNAL_WRITABLE { |
| 103 t.Fatalf("state should be signaled writable after core.Wait:%v",
state.SatisfiedSignals) | 103 t.Fatalf("state should be signaled writable after core.Wait:%v",
state.SatisfiedSignals) |
| 104 } | 104 } |
| 105 if state.SatisfiableSignals != MOJO_HANDLE_SIGNAL_ALL { | 105 if state.SatisfiableSignals != MOJO_HANDLE_SIGNAL_ALL { |
| 106 t.Fatalf("state should allow all signals after core.Wait:%v", st
ate.SatisfiableSignals) | 106 t.Fatalf("state should allow all signals after core.Wait:%v", st
ate.SatisfiableSignals) |
| 107 } | 107 } |
| 108 | 108 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 t.Fatalf("h0 should be signaled readable WaitMany:%v", states[0]
.SatisfiedSignals) | 150 t.Fatalf("h0 should be signaled readable WaitMany:%v", states[0]
.SatisfiedSignals) |
| 151 } | 151 } |
| 152 if states[0].SatisfiableSignals != MOJO_HANDLE_SIGNAL_ALL { | 152 if states[0].SatisfiableSignals != MOJO_HANDLE_SIGNAL_ALL { |
| 153 t.Fatalf("h0 should be readable/writable after WaitMany:%v", sta
tes[0].SatisfiableSignals) | 153 t.Fatalf("h0 should be readable/writable after WaitMany:%v", sta
tes[0].SatisfiableSignals) |
| 154 } | 154 } |
| 155 | 155 |
| 156 if r = h0.Close(); r != system.MOJO_RESULT_OK { | 156 if r = h0.Close(); r != system.MOJO_RESULT_OK { |
| 157 t.Fatalf("Close on h0 failed:%v", r) | 157 t.Fatalf("Close on h0 failed:%v", r) |
| 158 } | 158 } |
| 159 | 159 |
| 160 » r, state = h1.Wait(MOJO_HANDLE_SIGNAL_READWRITABLE, 100) | 160 » r, state = h1.Wait(MOJO_HANDLE_SIGNAL_READWRITABLE, system.MOJO_DEADLINE
_INDEFINITE) |
| 161 if r != system.MOJO_RESULT_FAILED_PRECONDITION { | 161 if r != system.MOJO_RESULT_FAILED_PRECONDITION { |
| 162 t.Fatalf("h1 should not be readable/writable after Close(h0):%v"
, r) | 162 t.Fatalf("h1 should not be readable/writable after Close(h0):%v"
, r) |
| 163 } | 163 } |
| 164 if state.SatisfiedSignals != system.MOJO_HANDLE_SIGNAL_PEER_CLOSED { | 164 if state.SatisfiedSignals != system.MOJO_HANDLE_SIGNAL_PEER_CLOSED { |
| 165 t.Fatalf("state should be signaled closed after Close(h0):%v", s
tate.SatisfiedSignals) | 165 t.Fatalf("state should be signaled closed after Close(h0):%v", s
tate.SatisfiedSignals) |
| 166 } | 166 } |
| 167 if state.SatisfiableSignals != system.MOJO_HANDLE_SIGNAL_PEER_CLOSED { | 167 if state.SatisfiableSignals != system.MOJO_HANDLE_SIGNAL_PEER_CLOSED { |
| 168 t.Fatalf("state should only be closable after Close(h0):%v", sta
te.SatisfiableSignals) | 168 t.Fatalf("state should only be closable after Close(h0):%v", sta
te.SatisfiableSignals) |
| 169 } | 169 } |
| 170 | 170 |
| 171 if r = h1.Close(); r != system.MOJO_RESULT_OK { | 171 if r = h1.Close(); r != system.MOJO_RESULT_OK { |
| 172 t.Fatalf("Close on h1 failed:%v", r) | 172 t.Fatalf("Close on h1 failed:%v", r) |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 | 175 |
| 176 func TestDataPipe(t *testing.T) { | 176 func TestDataPipe(t *testing.T) { |
| 177 var hp system.ProducerHandle | 177 var hp system.ProducerHandle |
| 178 var hc system.ConsumerHandle | 178 var hc system.ConsumerHandle |
| 179 var r system.MojoResult | 179 var r system.MojoResult |
| 180 | 180 |
| 181 if r, hp, hc = core.CreateDataPipe(nil); r != system.MOJO_RESULT_OK { | 181 if r, hp, hc = core.CreateDataPipe(nil); r != system.MOJO_RESULT_OK { |
| 182 t.Fatalf("CreateDataPipe failed:%v", r) | 182 t.Fatalf("CreateDataPipe failed:%v", r) |
| 183 } | 183 } |
| 184 if !hp.IsValid() || !hc.IsValid() { | 184 if !hp.IsValid() || !hc.IsValid() { |
| 185 t.Fatalf("CreateDataPipe returned invalid handles hp:%v hc:%v",
hp, hc) | 185 t.Fatalf("CreateDataPipe returned invalid handles hp:%v hc:%v",
hp, hc) |
| 186 } | 186 } |
| 187 if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 0); r != system.MO
JO_RESULT_DEADLINE_EXCEEDED { | 187 if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 0); r != system.MO
JO_RESULT_DEADLINE_EXCEEDED { |
| 188 t.Fatalf("hc should not be readable:%v", r) | 188 t.Fatalf("hc should not be readable:%v", r) |
| 189 } | 189 } |
| 190 » if r, _ = hp.Wait(system.MOJO_HANDLE_SIGNAL_WRITABLE, 0); r != system.MO
JO_RESULT_OK { | 190 » if r, _ = hp.Wait(system.MOJO_HANDLE_SIGNAL_WRITABLE, system.MOJO_DEADLI
NE_INDEFINITE); r != system.MOJO_RESULT_OK { |
| 191 t.Fatalf("hp should be writeable:%v", r) | 191 t.Fatalf("hp should be writeable:%v", r) |
| 192 } | 192 } |
| 193 |
| 194 // Test one-phase read/write. |
| 195 // Writing. |
| 193 kHello := []byte("hello") | 196 kHello := []byte("hello") |
| 194 r, numBytes := hp.WriteData(kHello, system.MOJO_WRITE_DATA_FLAG_NONE) | 197 r, numBytes := hp.WriteData(kHello, system.MOJO_WRITE_DATA_FLAG_NONE) |
| 195 if r != system.MOJO_RESULT_OK || numBytes != len(kHello) { | 198 if r != system.MOJO_RESULT_OK || numBytes != len(kHello) { |
| 196 t.Fatalf("Failed WriteData on hp:%v numBytes:%d", r, numBytes) | 199 t.Fatalf("Failed WriteData on hp:%v numBytes:%d", r, numBytes) |
| 197 } | 200 } |
| 198 » if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 1000); r != system
.MOJO_RESULT_OK { | 201 » // Reading. |
| 202 » if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, system.MOJO_DEADLI
NE_INDEFINITE); r != system.MOJO_RESULT_OK { |
| 199 t.Fatalf("hc should be readable after WriteData on hp:%v", r) | 203 t.Fatalf("hc should be readable after WriteData on hp:%v", r) |
| 200 } | 204 } |
| 201 r, data := hc.ReadData(system.MOJO_READ_DATA_FLAG_NONE) | 205 r, data := hc.ReadData(system.MOJO_READ_DATA_FLAG_NONE) |
| 202 if r != system.MOJO_RESULT_OK { | 206 if r != system.MOJO_RESULT_OK { |
| 203 t.Fatalf("Failed ReadData on hc:%v", r) | 207 t.Fatalf("Failed ReadData on hc:%v", r) |
| 204 } | 208 } |
| 205 if !bytes.Equal(data, kHello) { | 209 if !bytes.Equal(data, kHello) { |
| 206 t.Fatalf("Invalid data expected:%s, got:%s", kHello, data) | 210 t.Fatalf("Invalid data expected:%s, got:%s", kHello, data) |
| 207 } | 211 } |
| 212 |
| 213 // Test two-phase read/write. |
| 214 // Writing. |
| 215 kHello = []byte("Hello, world!") |
| 216 r, buf := hp.BeginWriteData(len(kHello), system.MOJO_WRITE_DATA_FLAG_ALL
_OR_NONE) |
| 217 if r != system.MOJO_RESULT_OK { |
| 218 t.Fatalf("Failed BeginWriteData on hp:%v numBytes:%d", r, len(kH
ello)) |
| 219 } |
| 220 if len(buf) < len(kHello) { |
| 221 t.Fatalf("Buffer size(%d) should be at least %d", len(buf), len(
kHello)) |
| 222 } |
| 223 copy(buf, kHello) |
| 224 if r, _ := hp.WriteData(kHello, system.MOJO_WRITE_DATA_FLAG_NONE); r !=
system.MOJO_RESULT_BUSY { |
| 225 t.Fatalf("hp should be busy during a two-phase write: %v", r) |
| 226 } |
| 227 if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 0); r != system.MO
JO_RESULT_DEADLINE_EXCEEDED { |
| 228 t.Fatalf("hc shouldn't be readable before EndWriteData on hp:%v"
, r) |
| 229 } |
| 230 if r := hp.EndWriteData(len(kHello)); r != system.MOJO_RESULT_OK { |
| 231 t.Fatalf("Failed EndWriteData on hp:%v", r) |
| 232 } |
| 233 // Reading. |
| 234 if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, system.MOJO_DEADLI
NE_INDEFINITE); r != system.MOJO_RESULT_OK { |
| 235 t.Fatalf("hc should be readable after EndWriteData on hp:%v", r) |
| 236 } |
| 237 if r, buf = hc.BeginReadData(len(kHello), system.MOJO_READ_DATA_FLAG_ALL
_OR_NONE); r != system.MOJO_RESULT_OK { |
| 238 t.Fatalf("Failed BeginReadData on hc:%v numBytes:%d", r, len(kHe
llo)) |
| 239 } |
| 240 if len(buf) != len(kHello) { |
| 241 t.Fatalf("Buffer size(%d) should be equal to %d", len(buf), len(
kHello)) |
| 242 } |
| 243 if r, _ := hc.ReadData(system.MOJO_READ_DATA_FLAG_NONE); r != system.MOJ
O_RESULT_BUSY { |
| 244 t.Fatalf("hc should be busy during a two-phase read: %v", r) |
| 245 } |
| 246 if !bytes.Equal(buf, kHello) { |
| 247 t.Fatalf("Invalid data expected:%s, got:%s", kHello, buf) |
| 248 } |
| 249 if r := hc.EndReadData(len(buf)); r != system.MOJO_RESULT_OK { |
| 250 t.Fatalf("Failed EndReadData on hc:%v", r) |
| 251 } |
| 252 |
| 208 if r = hp.Close(); r != system.MOJO_RESULT_OK { | 253 if r = hp.Close(); r != system.MOJO_RESULT_OK { |
| 209 t.Fatalf("Close on hp failed:%v", r) | 254 t.Fatalf("Close on hp failed:%v", r) |
| 210 } | 255 } |
| 211 » if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, 100); r != system.
MOJO_RESULT_FAILED_PRECONDITION { | 256 » if r, _ = hc.Wait(system.MOJO_HANDLE_SIGNAL_READABLE, system.MOJO_DEADLI
NE_INDEFINITE); r != system.MOJO_RESULT_FAILED_PRECONDITION { |
| 212 t.Fatalf("hc should not be readable after hp closed:%v", r) | 257 t.Fatalf("hc should not be readable after hp closed:%v", r) |
| 213 } | 258 } |
| 214 if r = hc.Close(); r != system.MOJO_RESULT_OK { | 259 if r = hc.Close(); r != system.MOJO_RESULT_OK { |
| 215 t.Fatalf("Close on hc failed:%v", r) | 260 t.Fatalf("Close on hc failed:%v", r) |
| 216 } | 261 } |
| 217 } | 262 } |
| 218 | 263 |
| 219 func TestSharedBuffer(t *testing.T) { | 264 func TestSharedBuffer(t *testing.T) { |
| 220 var h0, h1 system.SharedBufferHandle | 265 var h0, h1 system.SharedBufferHandle |
| 221 var buf []byte | 266 var buf []byte |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 if buf[0] != 'x' || buf[1] != 'y' { | 301 if buf[0] != 'x' || buf[1] != 'y' { |
| 257 t.Fatalf("Failed to validate shared buffer. expected:x,y got:%s,
%s", buf[0], buf[1]) | 302 t.Fatalf("Failed to validate shared buffer. expected:x,y got:%s,
%s", buf[0], buf[1]) |
| 258 } | 303 } |
| 259 if r = h1.UnmapBuffer(buf); r != system.MOJO_RESULT_OK { | 304 if r = h1.UnmapBuffer(buf); r != system.MOJO_RESULT_OK { |
| 260 t.Fatalf("UnmapBuffer failed:%v", r) | 305 t.Fatalf("UnmapBuffer failed:%v", r) |
| 261 } | 306 } |
| 262 if r = h1.Close(); r != system.MOJO_RESULT_OK { | 307 if r = h1.Close(); r != system.MOJO_RESULT_OK { |
| 263 t.Fatalf("Close on h1 failed:%v", r) | 308 t.Fatalf("Close on h1 failed:%v", r) |
| 264 } | 309 } |
| 265 } | 310 } |
| OLD | NEW |