mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-30 05:25:35 +00:00
55 lines
976 B
Go
55 lines
976 B
Go
|
// 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")
|
||
|
}
|
||
|
}
|