1
2
3
4
5
6
7
8
9
10
11
12
13 package procfs
14
15 import (
16 "strings"
17 "testing"
18 )
19
20 func TestParseCapabilities(t *testing.T) {
21 rawStr := "y y y y y y y y y y y y y n y y y y y\n"
22 have := NetProtocolCapabilities{}
23 err := have.parseCapabilities(strings.Fields(rawStr))
24 if err != nil {
25 t.Fatal(err)
26 }
27
28 want := NetProtocolCapabilities{true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true}
29 if want != have {
30 t.Errorf("want %+v\nhave %+v\n", want, have)
31 }
32 }
33
34 func TestProtocolsParseLine(t *testing.T) {
35 rawStr := "TCP 1984 93064 1225378 no 320 yes kernel y y y y y y y y y y y y y n y y y y y\n"
36 protocols := NetProtocolStats{}
37 have, err := protocols.parseLine(rawStr)
38 if err != nil {
39 t.Fatal(err)
40 }
41
42 want := NetProtocolStatLine{"TCP", 1984, 93064, 1225378, 0, 320, true, "kernel", NetProtocolCapabilities{true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true}}
43 if want != *have {
44 t.Errorf("want %+v\nhave %+v\n", want, have)
45 }
46 }
47
48 func TestProtocolsParseProtocols(t *testing.T) {
49 fs, err := NewFS(procTestFixtures)
50 if err != nil {
51 t.Fatal(err)
52 }
53
54 protocolStats, err := fs.NetProtocols()
55 if err != nil {
56 t.Fatal(err)
57 }
58
59 lines := map[string]NetProtocolStatLine{
60 "PACKET": {"PACKET", 1344, 2, -1, -1, 0, false, "kernel", NetProtocolCapabilities{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}},
61 "PINGv6": {"PINGv6", 1112, 0, -1, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, true, false}},
62 "RAWv6": {"RAWv6", 1112, 1, -1, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, true, true, true, false, true, true, true, true, false, true, true, true, true, false, false}},
63 "UDPLITEv6": {"UDPLITEv6", 1216, 0, 57, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, true, true, false}},
64 "UDPv6": {"UDPv6", 1216, 10, 57, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, true, true, false}},
65 "TCPv6": {"TCPv6", 2144, 1937, 1225378, 0, 320, true, "kernel", NetProtocolCapabilities{true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true}},
66 "UNIX": {"UNIX", 1024, 120, -1, -1, 0, true, "kernel", NetProtocolCapabilities{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}},
67 "UDP-Lite": {"UDP-Lite", 1024, 0, 57, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, true, true, true, false, true, true, true, true, true, false, false, true, true, true, false}},
68 "PING": {"PING", 904, 0, -1, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, true, false}},
69 "RAW": {"RAW", 912, 0, -1, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, true, true, true, false, true, true, true, true, false, true, true, true, true, false, false}},
70 "UDP": {"UDP", 1024, 73, 57, -1, 0, true, "kernel", NetProtocolCapabilities{true, true, true, false, true, true, true, false, true, true, true, true, true, false, false, true, true, true, false}},
71 "TCP": {"TCP", 1984, 93064, 1225378, 1, 320, true, "kernel", NetProtocolCapabilities{true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true}},
72 "NETLINK": {"NETLINK", 1040, 16, -1, -1, 0, false, "kernel", NetProtocolCapabilities{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}},
73 }
74
75 if want, have := len(lines), len(protocolStats); want != have {
76 t.Errorf("want %d parsed net/protocols lines, have %d", want, have)
77 }
78 for _, line := range protocolStats {
79 if want, have := lines[line.Name], line; want != have {
80 t.Errorf("%s: want %v, have %v", line.Name, want, have)
81 }
82 }
83 }
84
View as plain text