github.com/simpleiot/simpleiot@v0.18.3/test/fifo_test.go (about) 1 package test 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 func TestFifo(t *testing.T) { 9 a, err := NewFifoA("fifo") 10 if err != nil { 11 t.Fatal("Creating A side failed: ", err) 12 } 13 defer a.Close() 14 15 b, err := NewFifoB("fifo") 16 if err != nil { 17 t.Fatal("Creating B side failed: ", err) 18 } 19 defer b.Close() 20 21 testString := "hi there" 22 23 _, err = a.Write([]byte(testString)) 24 if err != nil { 25 t.Fatal("Error writing a: ", err) 26 } 27 28 buf := make([]byte, 500) 29 30 c, err := b.Read(buf) 31 if err != nil { 32 t.Fatal("Error reading b: ", err) 33 } 34 35 buf = buf[0:c] 36 37 if string(buf) != testString { 38 t.Fatal("did not get test string back") 39 } 40 41 _, err = b.Write([]byte(testString)) 42 if err != nil { 43 t.Fatal("Error writing b: ", err) 44 } 45 46 buf = make([]byte, 500) 47 48 c, err = a.Read(buf) 49 if err != nil { 50 t.Fatal("Error reading b: ", err) 51 } 52 53 buf = buf[0:c] 54 55 if string(buf) != testString { 56 t.Fatal("did not get test string back") 57 } 58 59 // verfy fifo reads with no data block 60 readReturned := make(chan struct{}) 61 go func() { 62 _, _ = a.Read(buf) 63 close(readReturned) 64 }() 65 66 select { 67 case <-readReturned: 68 t.Error("Read should have never returned") 69 case <-time.After(time.Millisecond * 10): 70 // all is well 71 } 72 73 }