def test_get_original_line(): ns = Netstat(context_wrap(NETSTAT)) assert len(ns.data) == 2 assert NETSTAT.splitlines()[4].strip() == ns.get_original_line(netstat.ACTIVE_INTERNET_CONNECTIONS, 1) assert NETSTAT.splitlines()[5].strip() == ns.get_original_line(netstat.ACTIVE_INTERNET_CONNECTIONS, 2) assert ns.get_original_line("Fabulous Green", 1) is None assert NETSTAT.splitlines()[11].strip() == ns.get_original_line(netstat.ACTIVE_UNIX_DOMAIN_SOCKETS, 0)
def test_get_netstat_keyword_search(): ns = Netstat(context_wrap(NETSTAT)) # Search with no search_list searches both lists assert ns.search(State__contains='LISTEN') == [ ns.datalist[netstat.ACTIVE_INTERNET_CONNECTIONS][1], ns.datalist[netstat.ACTIVE_INTERNET_CONNECTIONS][2], ns.datalist[netstat.ACTIVE_INTERNET_CONNECTIONS][3], ns.datalist[netstat.ACTIVE_INTERNET_CONNECTIONS][4], ns.datalist[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS][1], ns.datalist[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS][2], ] # Search with one search_list item searches that list assert ns.search(search_list=[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS], State__contains='LISTEN') == [ ns.datalist[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS][1], ns.datalist[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS][2], ] # Search with a string assert ns.search(search_list=netstat.ACTIVE_UNIX_DOMAIN_SOCKETS, State__contains='LISTEN') == [ ns.datalist[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS][1], ns.datalist[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS][2], ] # Search with neither string nor list assert ns.search(search_list={'foo': 1}, State__contains='LISTEN') == [] # Search with a non-matching string assert ns.search(search_list='foo', State__contains='LISTEN') == [] # Search with a non-matching list assert ns.search(search_list=['foo'], State__contains='LISTEN') == []
def test_netstat_running_processes_no_active_conns(): ns = Netstat(context_wrap(NETSTAT_NO_ACTIVE_CONNS)) assert ns assert len(ns.data) == 1 assert netstat.ACTIVE_INTERNET_CONNECTIONS not in ns.data assert netstat.ACTIVE_UNIX_DOMAIN_SOCKETS in ns.data assert ns.running_processes == set([])
def test_get_netstat(): ns = Netstat(context_wrap(NETSTAT)) assert len(ns.data) == 2 assert netstat.ACTIVE_INTERNET_CONNECTIONS in ns.data assert 'PID/Program name' in ns.data[netstat.ACTIVE_INTERNET_CONNECTIONS] assert 'Local Address' in ns.data[netstat.ACTIVE_INTERNET_CONNECTIONS] assert netstat.ACTIVE_UNIX_DOMAIN_SOCKETS in ns.data assert "1279/qpidd" in ns.data[netstat.ACTIVE_INTERNET_CONNECTIONS]['PID/Program name'] assert "738/NetworkManager" in ns.data[netstat.ACTIVE_UNIX_DOMAIN_SOCKETS]['PID/Program name'] # Datalist access assert hasattr(ns, 'datalist') nsdl = ns.datalist[netstat.ACTIVE_INTERNET_CONNECTIONS] assert len(nsdl) == 6 assert nsdl[0] == { 'Proto': 'tcp', 'Recv-Q': '0', 'Send-Q': '0', 'Local Address': '192.168.0.1:53', 'Local IP': '192.168.0.1', 'Port': '53', 'Foreign Address': '192.168.0.53:53', 'State': 'ESTABLISHED', 'User': '******', 'Inode': '1817', 'PID/Program name': '12/dnsd', 'PID': '12', 'Program name': 'dnsd', 'Timer': 'off (0.00/0/0)', } # tcp 0 0 10.24.1.245:80 10.24.36.145:32790 SYN_RECV 0 0 - on (0.79/0/0) assert nsdl[5] == { 'Proto': 'tcp', 'Recv-Q': '0', 'Send-Q': '0', 'Local Address': '10.24.1.245:80', 'Local IP': '10.24.1.245', 'Port': '80', 'Foreign Address': '10.24.36.145:32790', 'State': 'SYN_RECV', 'User': '******', 'Inode': '0', 'PID/Program name': '-', 'Timer': 'on (0.79/0/0)', }
def test_netstat_doc_examples(): env = { 'stats': NetstatS(context_wrap(NETSTAT_S)), 'multicast': NetstatAGN(context_wrap(TEST_NETSTAT_AGN)), 'ns': Netstat(context_wrap(NETSTAT_DOCS)), 'traf': Netstat_I(context_wrap(NETSTAT_I)), 'ss': SsTULPN(context_wrap(SS_TULPN_DOCS)), } failed, total = doctest.testmod(netstat, globs=env) assert failed == 0
def test_short_outputs(): with pytest.raises(ParseException) as exc: Netstat(context_wrap(NETSTAT_BLANK)) assert 'Input content is empty' in str(exc) with pytest.raises(ParseException) as exc: Netstat(context_wrap(NETSTAT_TRUNCATED)) assert 'Input content is not empty but there is no useful parsed data' in str( exc) with pytest.raises(ParseException) as exc: Netstat(context_wrap(NETSTAT_CONTENT_BUT_NO_PARSED_LINES)) assert 'Found no section headers in content' in str(exc) with pytest.raises(ParseException) as exc: Netstat(context_wrap(NETSTAT_CONTENT_BUT_NO_PID_PROGRAM)) assert "Did not find 'PID/Program name' heading in header" in str(exc) with pytest.raises(ParseException) as exc: Netstat(context_wrap(NETSTAT_CONTENT_BUT_NO_LOCAL_ADDR_COLON)) assert "Local Address is expected to have a colon separating address and port" in str( exc) ns = Netstat(context_wrap(NETSTAT_SOCKETS_ONLY)) assert ns.running_processes == set() assert ns.listening_pid == {}
def test_listening_pid(): ns = Netstat(context_wrap(NETSTAT)) assert len(ns.data) == 2 assert ns.listening_pid['12387'] == { 'addr': '127.0.0.1', 'name': 'Passenger Rac', 'port': '53644' } assert ns.listening_pid['1272'] == { 'addr': '0.0.0.0', 'name': 'qdrouterd', 'port': '5646' }
def test_running_processes(): ns = Netstat(context_wrap(NETSTAT_TEST_RUNNING_PROCESSES)) assert len(ns.data) == 1 assert netstat.ACTIVE_INTERNET_CONNECTIONS in ns.data assert 'PID/Program name' in ns.data[netstat.ACTIVE_INTERNET_CONNECTIONS] assert 'Local Address' in ns.data[netstat.ACTIVE_INTERNET_CONNECTIONS] assert len(ns.data[netstat.ACTIVE_INTERNET_CONNECTIONS]['Local Address']) == 6 assert 'dnsd' in ns.running_processes # ESTABLISHED processes are OK assert '1279' not in ns.running_processes assert 'mongod' not in ns.running_processes assert 'Passenger Rac' in ns.running_processes assert 'qdrouterd' in ns.running_processes pids = ns.listening_pid assert sorted(pids.keys()) == sorted(['12387', '1272'])
def test_is_httpd_running(): assert "httpd" in Netstat(context_wrap(NETSTAT_MATCH1)).running_processes assert "httpd" not in Netstat( context_wrap(NETSTAT_NOMATCH1)).running_processes assert "httpd" not in Netstat( context_wrap(NETSTAT_NOMATCH2)).running_processes