// Copyright (c) 2022 Tailscale Inc & AUTHORS All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package netutil import ( "io" "net" "testing" ) type conn struct { net.Conn } func TestOneConnListener(t *testing.T) { c1 := new(conn) a1 := dummyAddr("a1") // Two Accepts ln := NewOneConnListener(c1, a1) if got := ln.Addr(); got != a1 { t.Errorf("Addr = %#v; want %#v", got, a1) } c, err := ln.Accept() if err != nil { t.Fatal(err) } if c != c1 { t.Fatalf("didn't get c1; got %p", c) } c, err = ln.Accept() if err != io.EOF { t.Errorf("got %v; want EOF", err) } if c != nil { t.Errorf("unexpected non-nil Conn") } // Close before Accept ln = NewOneConnListener(c1, a1) ln.Close() _, err = ln.Accept() if err != io.EOF { t.Fatalf("got %v; want EOF", err) } // Implicit addr ln = NewOneConnListener(c1, nil) if ln.Addr() == nil { t.Errorf("nil Addr") } }