| // +build linux |
| |
| package serial |
| |
| import ( |
| "os" |
| "testing" |
| "time" |
| ) |
| |
| func TestConnection(t *testing.T) { |
| port0 := os.Getenv("PORT0") |
| port1 := os.Getenv("PORT1") |
| if port0 == "" || port1 == "" { |
| t.Skip("Skipping test because PORT0 or PORT1 environment variable is not set") |
| } |
| c0 := &Config{Name: port0, Baud: 115200} |
| c1 := &Config{Name: port1, Baud: 115200} |
| |
| s1, err := OpenPort(c0) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| s2, err := OpenPort(c1) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| ch := make(chan int, 1) |
| go func() { |
| buf := make([]byte, 128) |
| var readCount int |
| for { |
| n, err := s2.Read(buf) |
| if err != nil { |
| t.Fatal(err) |
| } |
| readCount++ |
| t.Logf("Read %v %v bytes: % 02x %s", readCount, n, buf[:n], buf[:n]) |
| select { |
| case <-ch: |
| ch <- readCount |
| close(ch) |
| default: |
| } |
| } |
| }() |
| |
| if _, err = s1.Write([]byte("hello")); err != nil { |
| t.Fatal(err) |
| } |
| if _, err = s1.Write([]byte(" ")); err != nil { |
| t.Fatal(err) |
| } |
| time.Sleep(time.Second) |
| if _, err = s1.Write([]byte("world")); err != nil { |
| t.Fatal(err) |
| } |
| time.Sleep(time.Second / 10) |
| |
| ch <- 0 |
| s1.Write([]byte(" ")) // We could be blocked in the read without this |
| c := <-ch |
| exp := 5 |
| if c >= exp { |
| t.Fatalf("Expected less than %v read, got %v", exp, c) |
| } |
| } |