File: socketpair_test.go

package info (click to toggle)
receptor 1.5.5-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,772 kB
  • sloc: python: 1,643; makefile: 305; sh: 174
file content (67 lines) | stat: -rw-r--r-- 1,455 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Copyright (c) 2014 Maurice Nonnekes <maurice@codeninja.nl>
// All rights reserved.

package socketpair

import (
	"net"
	"testing"
)

var (
	testByteString = []byte("Hello World")
	testNetworks   = []string{"unix", "unixgram"}
)

func slicesAreEqual(a, b []byte) bool {
	if len(a) != len(b) {
		return false
	}

	for i, v := range a {
		if v != b[i] {
			return false
		}
	}

	return true
}

func TestSocketpair(t *testing.T) {
	for _, network := range testNetworks {
		sock1, sock2, err := New(network)
		if err != nil {
			t.Fatalf("Error creating socket: %s: %s", network, err)
		}

		defer sock1.Close()
		defer sock2.Close()

		if _, ok := sock1.(*net.UnixConn); !ok {
			t.Fatalf("Expected to be able to typecast to a new.UnixConn pointer")
		}

		if _, ok := sock2.(*net.UnixConn); !ok {
			t.Fatalf("Expected to be able to typecast to a new.UnixConn pointer")
		}

		if _, err := sock1.Write(testByteString); err != nil {
			t.Fatalf("Error writing to socket: %s: %s", network, err)
		}

		byteString := make([]byte, len(testByteString))
		if _, err := sock2.Read(byteString); err != nil {
			t.Fatalf("Error reading from socket: %s: %s", network, err)
		}

		if !slicesAreEqual(byteString, testByteString) {
			t.Fatalf("Unexpected data read from unix socket: %s", byteString)
		}
	}
}

func TestIllegalNetwork(t *testing.T) {
	if _, _, err := New("foobar"); err == nil {
		t.Fatalf("Expected error when requesting a bogus network type")
	}
}