blob: b6493444256a8b0691b4b1b8a3a5f7dc2672145d [file] [log] [blame]
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build fuchsia
package zxwait_test
import (
"runtime"
"sync"
"syscall/zx"
"syscall/zx/zxwait"
"testing"
)
func TestWaitPreexisting(t *testing.T) {
c0, c1, err := zx.NewChannel(0)
if err != nil {
t.Fatal(err)
}
defer c0.Close()
defer c1.Close()
obs, err := zxwait.Wait(*c0.Handle(), zx.SignalChannelWritable, zx.TimensecInfinite)
if err != nil {
t.Fatal(err)
}
if obs&zx.SignalChannelWritable == 0 {
t.Errorf("want zx.SignalChannelWritable, got obs=%x", obs)
}
obs, err = zxwait.Wait(*c1.Handle(), zx.SignalChannelWritable, zx.TimensecInfinite)
if err != nil {
t.Fatal(err)
}
if obs&zx.SignalChannelWritable == 0 {
t.Errorf("want zx.SignalChannelWritable, got obs=%x", obs)
}
}
func TestWait(t *testing.T) {
t.Logf("GOMAXPROCS=%v", runtime.GOMAXPROCS(0))
c0s := make([]zx.Channel, 100)
c1s := make([]zx.Channel, len(c0s))
allObs := make([]zx.Signals, len(c0s))
var wg sync.WaitGroup
for i := range c0s {
var err error
c0s[i], c1s[i], err = zx.NewChannel(0)
if err != nil {
t.Fatal(err)
}
wg.Add(1)
go func(i int) {
obs, err := zxwait.Wait(*c0s[i].Handle(), zx.SignalChannelReadable, zx.TimensecInfinite)
if err != nil {
t.Fatal(err)
}
allObs[i] = obs
//t.Logf("signal for channel %d received", i)
//fmt.Printf("TEST: signal for channel %d received\n", i)
wg.Done()
}(i)
}
b := []byte("hello")
for i, c1 := range c1s {
//t.Logf("writing on channel %d", i)
//fmt.Printf("TEST: writing on channel %d\n", i)
if err := c1.Write(b, nil, 0); err != nil {
t.Errorf("failed to write on channel %d: %v", i, err)
}
}
wg.Wait()
for i, obs := range allObs {
if obs&zx.SignalChannelWritable == 0 {
t.Errorf("channel %d: obs=%x want zx.SignalChannelReadable", i, obs)
}
}
}