(t *testing.T)
| 588 | } |
| 589 | |
| 590 | func TestMessageReadMode(t *testing.T) { |
| 591 | if maj, _, _ := windows.RtlGetNtVersionNumbers(); maj <= 8 { |
| 592 | t.Skipf("Skipping on Windows %d", maj) |
| 593 | } |
| 594 | var wg sync.WaitGroup |
| 595 | defer wg.Wait() |
| 596 | pipePath := randomPipePath() |
| 597 | l, err := (&namedpipe.ListenConfig{MessageMode: true}).Listen(pipePath) |
| 598 | if err != nil { |
| 599 | t.Fatal(err) |
| 600 | } |
| 601 | defer l.Close() |
| 602 | |
| 603 | msg := ([]byte)("hello world") |
| 604 | |
| 605 | wg.Add(1) |
| 606 | go func() { |
| 607 | defer wg.Done() |
| 608 | s, err := l.Accept() |
| 609 | if err != nil { |
| 610 | t.Fatal(err) |
| 611 | } |
| 612 | _, err = s.Write(msg) |
| 613 | if err != nil { |
| 614 | t.Fatal(err) |
| 615 | } |
| 616 | s.Close() |
| 617 | }() |
| 618 | |
| 619 | c, err := namedpipe.DialTimeout(pipePath, time.Duration(0)) |
| 620 | if err != nil { |
| 621 | t.Fatal(err) |
| 622 | } |
| 623 | defer c.Close() |
| 624 | |
| 625 | mode := uint32(windows.PIPE_READMODE_MESSAGE) |
| 626 | err = windows.SetNamedPipeHandleState(c.(interface{ Handle() windows.Handle }).Handle(), &mode, nil, nil) |
| 627 | if err != nil { |
| 628 | t.Fatal(err) |
| 629 | } |
| 630 | |
| 631 | ch := make([]byte, 1) |
| 632 | var vmsg []byte |
| 633 | for { |
| 634 | n, err := c.Read(ch) |
| 635 | if err == io.EOF { |
| 636 | break |
| 637 | } |
| 638 | if err != nil { |
| 639 | t.Fatal(err) |
| 640 | } |
| 641 | if n != 1 { |
| 642 | t.Fatalf("expected 1, got %d", n) |
| 643 | } |
| 644 | vmsg = append(vmsg, ch[0]) |
| 645 | } |
| 646 | if !bytes.Equal(msg, vmsg) { |
| 647 | t.Fatalf("expected %s, got %s", msg, vmsg) |
nothing calls this directly
no test coverage detected