def _parse_ipv6_server_string(cls, server_str): if not socket.has_ipv6: raise ServerConnectivityError(cls.SERVER_STRING_ERROR_NO_IPV6) port = None target_split = (server_str.split(']')) ipv6_addr = target_split[0].split('[')[1] if ':' in target_split[1]: # port was specified try: port = int(target_split[1].rsplit(':')[1]) except: # Port is not an int raise ServerConnectivityError(cls.SERVER_STRING_ERROR_BAD_PORT) return ipv6_addr, port
def test(self): """The final output only gets written at the end, when calling scans_completed(). Hence we need to call all the methods in the right order and validate the final output at the end. """ output_file = StringIO() generator = XmlOutputGenerator(output_file) generator.command_line_parsed(None, MockCommandLineValues()) failed_scan = FailedServerScan( server_string=u'unibadeéè.com', connection_exception=ServerConnectivityError( error_msg=u'Some érrôr')) generator.server_connectivity_test_failed(failed_scan) server_info = MockServerConnectivityInfo() generator.server_connectivity_test_succeeded(server_info) generator.scans_started() plugin_xml_out_1 = Element(u'plugin1', attrib={'test1': 'value1'}) plugin_xml_out_1.text = u'Plugin ûnicôdé output' plugin_result_1 = MockPluginResult('plugin1', None, plugin_xml_out_1) plugin_xml_out_2 = Element(u'plugin2', attrib={'test2': 'value2'}) plugin_xml_out_2.text = u'other plugin Output' plugin_result_2 = MockPluginResult('plugin2', None, plugin_xml_out_2) server_scan = CompletedServerScan(server_info, [plugin_result_1, plugin_result_2]) generator.server_scan_completed(server_scan) scan_time = 1.3 generator.scans_completed(scan_time) received_output = unicode(output_file.getvalue(), 'utf-8') output_file.close() # Ensure the output properly listed the connectivity error with unicode escaped as \u sequences self.assertIn(u'unibadeéè.com', received_output) self.assertIn(u'Some érrôr', received_output) # Ensure the output properly listed the online domain self.assertIn(server_info.hostname, received_output) self.assertIn(str(server_info.port), received_output) self.assertIn(server_info.ip_address, received_output) # Ensure the output displayed the plugin's XML output self.assertIn(plugin_result_1.plugin_command, received_output) self.assertIn(plugin_result_2.plugin_command, received_output) self.assertIn(plugin_result_1.as_xml().text, received_output) self.assertIn(plugin_result_2.as_xml().text, received_output) # Ensure the console output displayed the total scan time self.assertIn('totalScanTime="{}"'.format(scan_time), received_output) self.assertIn( 'networkTimeout="{}"'.format(MockCommandLineValues().timeout), received_output) self.assertIn( 'networkMaxRetries="{}"'.format( MockCommandLineValues().nb_retries), received_output)
def test(self): """The final output only gets written at the end, when calling scans_completed(). Hence we need to call all the methods in the right order and validate the final output at the end. """ output_file = StringIO() generator = JsonOutputGenerator(output_file) generator.command_line_parsed(None, MockCommandLineValues()) failed_scan = FailedServerScan(server_string=u'unibadeéè.com', connection_exception=ServerConnectivityError(error_msg=u'Some érrôr')) generator.server_connectivity_test_failed(failed_scan) server_info = MockServerConnectivityInfo() generator.server_connectivity_test_succeeded(server_info) generator.scans_started() # noinspection PyTypeChecker plugin_result_1 = MockPluginResult('plugin1', u'Plugin ûnicôdé output', None) # noinspection PyTypeChecker plugin_result_2 = MockPluginResult('plugin2', u'other plugin Output', None) # noinspection PyTypeChecker server_scan = CompletedServerScan(server_info, [plugin_result_1, plugin_result_2]) generator.server_scan_completed(server_scan) scan_time = 1.3 generator.scans_completed(scan_time) received_output = output_file.getvalue() output_file.close() # Ensure the output properly listed the connectivity error with unicode escaped as \u sequences self.assertIn(json.dumps(u'unibadeéè.com', ensure_ascii=True), received_output) self.assertIn(json.dumps(u'Some érrôr', ensure_ascii=True), received_output) # Ensure the output properly listed the online domain self.assertIn(json.dumps(server_info.hostname, ensure_ascii=True), received_output) self.assertIn(str(server_info.port), received_output) self.assertIn(server_info.ip_address, received_output) # Ensure the output displayed the plugin's attributes as JSON self.assertIn(plugin_result_1.plugin_command, received_output) self.assertIn(plugin_result_2.plugin_command, received_output) self.assertIn('"text_output":', received_output) self.assertIn(json.dumps(plugin_result_1.text_output, ensure_ascii=True), received_output) self.assertIn(plugin_result_2.text_output, received_output) # Ensure the console output displayed the total scan time self.assertIn(str(scan_time), received_output) self.assertIn('"network_timeout": "{}"'.format(MockCommandLineValues().timeout), received_output) self.assertIn('"network_max_retries": "{}"'.format(MockCommandLineValues().nb_retries), received_output)
def _parse_ipv4_server_string(cls, server_str): if ':' in server_str: host = (server_str.split(':'))[0] # hostname or ipv4 address try: port = int((server_str.split(':'))[1]) except: # Port is not an int raise ServerConnectivityError(cls.SERVER_STRING_ERROR_BAD_PORT) else: host = server_str port = None return host, port
def test_server_connectivity_test_failed(self): output_file = StringIO() generator = ConsoleOutputGenerator(output_file) failed_scan = FailedServerScan( server_string=u'unicödeéè.com', connection_exception=ServerConnectivityError( error_msg=u'Some érrôr')) generator.server_connectivity_test_failed(failed_scan) received_output = output_file.getvalue() output_file.close() # Ensure the console output properly listed the connectivity error with unicode self.assertIn(u'unicödeéè.com', received_output) self.assertIn(u'Some érrôr', received_output) self.assertIn(u'discarding corresponding tasks', received_output)