MCPcopy
hub / github.com/WireGuard/wireguard-go / TestMessageReadMode

Function TestMessageReadMode

ipc/namedpipe/namedpipe_test.go:590–649  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

588}
589
590func 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)

Callers

nothing calls this directly

Calls 9

DialTimeoutFunction · 0.92
randomPipePathFunction · 0.85
WaitMethod · 0.80
ListenMethod · 0.80
HandleMethod · 0.80
CloseMethod · 0.65
WriteMethod · 0.65
ReadMethod · 0.65
AcceptMethod · 0.45

Tested by

no test coverage detected