1// Copyright 2020 The Prometheus Authors 2// Licensed under the Apache License, Version 2.0 (the "License"); 3// you may not use this file except in compliance with the License. 4// You may obtain a copy of the License at 5// 6// http://www.apache.org/licenses/LICENSE-2.0 7// 8// Unless required by applicable law or agreed to in writing, software 9// distributed under the License is distributed on an "AS IS" BASIS, 10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11// See the License for the specific language governing permissions and 12// limitations under the License. 13package procfs 14 15import ( 16 "strings" 17 "testing" 18) 19 20func 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 34func 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 48func 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