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  }