package serialport import ( "testing" "golang.org/x/sys/unix" ) func TestConfigureRaw115200OverridesInheritedBaud(t *testing.T) { var termios unix.Termios termios.Iflag = unix.IGNBRK | unix.ICRNL termios.Oflag = unix.OPOST termios.Lflag = unix.ICANON | unix.ECHO termios.Cflag = unix.B9600 | unix.CS8 | unix.CREAD | unix.CLOCAL | unix.HUPCL termios.Ispeed = unix.B9600 termios.Ospeed = unix.B9600 configureRaw115200(&termios) if got := termios.Cflag & unix.CBAUD; got != unix.B115200 { t.Fatalf("effective baud bits=%#o want %#o", got, unix.B115200) } if got := termios.Cflag & unix.CSIZE; got != unix.CS8 { t.Fatalf("character size bits=%#o want %#o", got, unix.CS8) } for _, flag := range []uint32{unix.CREAD, unix.CLOCAL} { if termios.Cflag&flag == 0 { t.Fatalf("flag %#o lost", flag) } } for _, flag := range []uint32{unix.PARENB, unix.CSTOPB, unix.CRTSCTS} { if termios.Cflag&flag != 0 { t.Fatalf("flag %#o must be cleared", flag) } } if termios.Iflag != 0 || termios.Oflag != 0 || termios.Lflag != 0 { t.Fatal("raw mode must clear Iflag, Oflag and Lflag") } if termios.Ispeed != unix.B115200 || termios.Ospeed != unix.B115200 { t.Fatalf("speed fields=%d/%d want 115200/115200", termios.Ispeed, termios.Ospeed) } if termios.Cc[unix.VMIN] != 1 || termios.Cc[unix.VTIME] != 0 { t.Fatalf("VMIN=%d VTIME=%d want 1/0", termios.Cc[unix.VMIN], termios.Cc[unix.VTIME]) } } func TestVerifyBaudAcceptsOnlyConfiguredLineSpeed(t *testing.T) { var inherited unix.Termios inherited.Cflag = unix.B9600 | unix.CS8 if err := verifyBaud(inherited, unix.B115200); err == nil { t.Fatal("inherited 9600 line speed must fail verification") } var configured unix.Termios configured.Cflag = unix.B115200 | unix.CS8 | unix.CREAD if err := verifyBaud(configured, unix.B115200); err != nil { t.Fatalf("115200 line speed must verify: %v", err) } }