1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// +build !js,!plan9
6
7package socktest_test
8
9import (
10	"net/internal/socktest"
11	"os"
12	"sync"
13	"syscall"
14	"testing"
15)
16
17var sw socktest.Switch
18
19func TestMain(m *testing.M) {
20	installTestHooks()
21
22	st := m.Run()
23
24	for s := range sw.Sockets() {
25		closeFunc(s)
26	}
27	uninstallTestHooks()
28	os.Exit(st)
29}
30
31func TestSwitch(t *testing.T) {
32	const N = 10
33	var wg sync.WaitGroup
34	wg.Add(N)
35	for i := 0; i < N; i++ {
36		go func() {
37			defer wg.Done()
38			for _, family := range []int{syscall.AF_INET, syscall.AF_INET6} {
39				socketFunc(family, syscall.SOCK_STREAM, syscall.IPPROTO_TCP)
40			}
41		}()
42	}
43	wg.Wait()
44}
45
46func TestSocket(t *testing.T) {
47	for _, f := range []socktest.Filter{
48		func(st *socktest.Status) (socktest.AfterFilter, error) { return nil, nil },
49		nil,
50	} {
51		sw.Set(socktest.FilterSocket, f)
52		for _, family := range []int{syscall.AF_INET, syscall.AF_INET6} {
53			socketFunc(family, syscall.SOCK_STREAM, syscall.IPPROTO_TCP)
54		}
55	}
56}
57