{"action":"created","comment":{"url":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/comments/244996361","pull_request_review_id":189006809,"id":244996361,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NDk5NjM2MQ==","diff_hunk":"@@ -0,0 +1,434 @@\n+# -*- coding: utf-8 -*-\n+# Copyright (C) 2018 Greenbone Networks GmbH\n+#\n+# SPDX-License-Identifier: GPL-2.0-or-later\n+#\n+# This program is free software; you can redistribute it and/or\n+# modify it under the terms of the GNU General Public License\n+# as published by the Free Software Foundation; either version 2\n+# of the License, or (at your option) any later version.\n+#\n+# This program is distributed in the hope that it will be useful,\n+# but WITHOUT ANY WARRANTY; without even the implied warranty of\n+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+# GNU General Public License for more details.\n+#\n+# You should have received a copy of the GNU General Public License\n+# along with this program; if not, write to the Free Software\n+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\n+\n+\"\"\" Unit Test for ospd-openvas \"\"\"\n+\n+import unittest\n+from unittest.mock import patch\n+from ospd_openvas.wrapper import OSPD_PARAMS\n+from tests.dummywrapper import DummyWrapper\n+\n+OSPD_PARAMS_OUT = {\n+    'auto_enable_dependencies': {\n+        'type': 'boolean',\n+        'name': 'auto_enable_dependencies',\n+        'default': 1,\n+        'mandatory': 1,\n+        'description': 'Automatically enable the plugins that are depended on',\n+    },\n+    'cgi_path': {\n+        'type': 'string',\n+        'name': 'cgi_path',\n+        'default': '/cgi-bin:/scripts',\n+        'mandatory': 1,\n+        'description': 'Look for default CGIs in /cgi-bin and /scripts',\n+    },\n+    'checks_read_timeout': {\n+        'type': 'integer',\n+        'name': 'checks_read_timeout',\n+        'default': 5,\n+        'mandatory': 1,\n+        'description': ('Number  of seconds that the security checks will ' +\n+                        'wait for when doing a recv()'),\n+    },\n+    'drop_privileges': {\n+        'type': 'boolean',\n+        'name': 'drop_privileges',\n+        'default': 0,\n+        'mandatory': 1,\n+        'description': '',\n+    },\n+    'network_scan': {\n+        'type': 'boolean',\n+        'name': 'network_scan',\n+        'default': 0,\n+        'mandatory': 1,\n+        'description': '',\n+    },\n+    'non_simult_ports': {\n+        'type': 'string',\n+        'name': 'non_simult_ports',\n+        'default': '22',\n+        'mandatory': 1,\n+        'description': ('Prevent to make two connections on the same given ' +\n+                        'ports at the same time.'),\n+    },\n+    'open_sock_max_attempts': {\n+        'type': 'integer',\n+        'name': 'open_sock_max_attempts',\n+        'default': 5,\n+        'mandatory': 0,\n+        'description': ('Number of unsuccessful retries to open the socket ' +\n+                        'before to set the port as closed.'),\n+    },\n+    'timeout_retry': {\n+        'type': 'integer',\n+        'name': 'timeout_retry',\n+        'default': 5,\n+        'mandatory': 0,\n+        'description': ('Number of retries when a socket connection attempt ' +\n+                        'timesout.'),\n+    },\n+    'optimize_test': {\n+        'type': 'integer',\n+        'name': 'optimize_test',\n+        'default': 5,\n+        'mandatory': 0,\n+        'description': ('By default, openvassd does not trust the remote ' +\n+                        'host banners.'),\n+    },\n+    'plugins_timeout': {\n+        'type': 'integer',\n+        'name': 'plugins_timeout',\n+        'default': 5,\n+        'mandatory': 0,\n+        'description': 'This is the maximum lifetime, in seconds of a plugin.',\n+    },\n+    'report_host_details': {\n+        'type': 'boolean',\n+        'name': 'report_host_details',\n+        'default': 1,\n+        'mandatory': 1,\n+        'description': '',\n+    },\n+    'safe_checks': {\n+        'type': 'boolean',\n+        'name': 'safe_checks',\n+        'default': 1,\n+        'mandatory': 1,\n+        'description': ('Disable the plugins with potential to crash ' +\n+                        'the remote services'),\n+    },\n+    'scanner_plugins_timeout': {\n+        'type': 'integer',\n+        'name': 'scanner_plugins_timeout',\n+        'default': 36000,\n+        'mandatory': 1,\n+        'description': 'Like plugins_timeout, but for ACT_SCANNER plugins.',\n+    },\n+    'time_between_request': {\n+        'type': 'integer',\n+        'name': 'time_between_request',\n+        'default': 0,\n+        'mandatory': 0,\n+        'description': ('Allow to set a wait time between two actions ' +\n+                        '(open, send, close).'),\n+    },\n+    'unscanned_closed': {\n+        'type': 'boolean',\n+        'name': 'unscanned_closed',\n+        'default': 1,\n+        'mandatory': 1,\n+        'description': '',\n+    },\n+    'unscanned_closed_udp': {\n+        'type': 'boolean',\n+        'name': 'unscanned_closed_udp',\n+        'default': 1,\n+        'mandatory': 1,\n+        'description': '',\n+    },\n+    'use_mac_addr': {\n+        'type': 'boolean',\n+        'name': 'use_mac_addr',\n+        'default': 0,\n+        'mandatory': 0,\n+        'description': 'To test the local network. ' +\n+                       'Hosts will be referred to by their MAC address.',\n+    },\n+    'vhosts': {\n+        'type': 'string',\n+        'name': 'vhosts',\n+        'default': '',\n+        'mandatory': 0,\n+        'description': '',\n+    },\n+    'vhosts_ip': {\n+        'type': 'string',\n+        'name': 'vhosts_ip',\n+        'default': '',\n+        'mandatory': 0,\n+        'description': '',\n+    },\n+}\n+\n+\n+@patch('ospd_openvas.db.OpenvasDB')\n+@patch('ospd_openvas.nvticache.NVTICache')\n+class TestOspdOpenvas(unittest.TestCase):\n+\n+    @patch('ospd_openvas.wrapper.subprocess')\n+    def test_redis_nvticache_init(self, mock_subproc, mock_nvti, mock_db):\n+        mock_subproc.check_call.return_value = True\n+        w = DummyWrapper(mock_nvti, mock_db)\n+        w.redis_nvticache_init()\n+        self.assertEqual(mock_subproc.check_call.call_count, 1)\n+\n+    @patch('ospd_openvas.wrapper.subprocess')\n+    def test_parse_param(self, mock_subproc, mock_nvti, mock_db):\n+\n+        mock_subproc.check_output.return_value = (\n+            'non_simult_ports = 22'.encode())\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        w.parse_param()\n+        self.assertEqual(mock_subproc.check_output.call_count, 1)\n+        self.assertEqual(OSPD_PARAMS, OSPD_PARAMS_OUT)\n+\n+    def test_load_vts(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        w.load_vts()\n+        self.maxDiff = None\n+        self.assertEqual(w.vts, w.VT)\n+\n+    def test_get_custom_xml(self, mock_nvti, mock_db):\n+        out = ('<required_ports>Services/www, 80</re'\n+               'quired_ports><category>3</category><'\n+               'excluded_keys>Settings/disable_cgi_s'\n+               'canning</excluded_keys><family>Produ'\n+               'ct detection</family><filename>manti'\n+               's_detect.nasl</filename><timeout>0</'\n+               'timeout>')\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        res = w.get_custom_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061',\n+            w.VT['1.3.6.1.4.1.25623.1.0.100061']['custom'])\n+        self.assertEqual(len(res), len(out))\n+\n+    def test_get_severities_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = ('<severity type=\"cvss_base_v2\">'\n+               'AV:N/AC:L/Au:N/C:N/I:N/A:N</severity>')\n+\n+        severities = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('severities')\n+        res = w.get_severities_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', severities)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_params_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = ('<vt_param type=\"checkbox\" id=\"Do not randomize the  order  in  which ports are scanned\"><name>Do not randomize the  order  in  which ports are scanned</name><default>no</default></vt_param><vt_param type=\"entry\" id=\"Data length : \"><name>Data length : </name></vt_param>')\n+\n+        params = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('vt_params')\n+        res = w.get_params_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', params)\n+        self.assertEqual(len(res), len(out))\n+\n+    def test_get_refs_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<ref type=\"url\" id=\"http://www.mantisbt.org/\"/>'\n+        refs = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('vt_refs')\n+        res = w.get_refs_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', refs)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_dependencies_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<dependency vt_id=\"1.2.3.4\"/><dependency vt_id=\"4.3.2.1\"/>'\n+        dep = ['1.2.3.4', '4.3.2.1']\n+        res = w.get_dependencies_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', dep)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_ctime_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '2009-03-19 11:22:36 +0100 (Thu, 19 Mar 2009)'\n+        ctime = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('creation_time')\n+        res = w.get_creation_time_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', ctime)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_mtime_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '$Date: 2018-08-10 15:09:25 +0200 (Fri, 10 Aug 2018) $'\n+        mtime = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('modification_time')\n+        res = w.get_modification_time_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', mtime)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_summary_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<summary>some summary</summary>'\n+        summary = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('summary')\n+        res = w.get_summary_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', summary)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_impact_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<impact>some impact</impact>'\n+        impact = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('impact')\n+        res = w.get_impact_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', impact)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_insight_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<insight>some insight</insight>'\n+        insight = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('insight')\n+        res = w.get_insight_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', insight)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_solution_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<solution type=\"WillNotFix\">some solution</solution>'\n+        solution = w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('solution')\n+        solution_type = (\n+            w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('solution_type'))\n+\n+        res = w.get_solution_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', solution, solution_type)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_detection_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<detection qod_type=\"remote_banner\"/>'\n+        detection_type = (\n+            w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('qod_type'))\n+\n+        res = w.get_detection_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', qod_type=detection_type)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_get_affected_xml(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        out = '<affected>some affection</affected>'\n+        affected = (\n+            w.VT['1.3.6.1.4.1.25623.1.0.100061'].get('affected'))\n+\n+        res = w.get_affected_vt_as_xml_str(\n+            '1.3.6.1.4.1.25623.1.0.100061', affected=affected)\n+\n+        self.assertEqual(res, out)\n+\n+    def test_build_credentials(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        cred_out = [\n+            'auth_port_ssh|||22',\n+            'SSH Authorization[entry]:SSH login name:|||username',\n+            'SSH Authorization[password]:SSH key passphrase:|||pass',\n+            'SSH Authorization[file]:SSH private key:|||',\n+            'SMB Authorization[entry]:SMB login:|||username',\n+            'SMB Authorization[password]:SMB password :|||pass',\n+            'SNMP Authorization[password]:SNMP Community:some comunity',\n+            'SNMP Authorization[entry]:SNMPv3 Username:username',\n+            'SNMP Authorization[password]:SNMPv3 Password:pass',\n+            'SNMP Authorization[radio]:SNMPv3 Authentication Algorithm:some auth algo',\n+            'SNMP Authorization[password]:SNMPv3 Privacy Password:privacy pass',\n+            'SNMP Authorization[radio]:SNMPv3 Privacy Algorithm:privacy algo',\n+            'ESXi Authorization[entry]:ESXi login name:|||username',\n+            'ESXi Authorization[password]:ESXi login password:|||pass']\n+        cred_dict = {\n+            'ssh': {'type': 'ssh',\n+                    'port': '22',\n+                    'username': 'username',\n+                    'password': 'pass',\n+            },\n+            'smb': {'type': 'smb',\n+                    'username': 'username',\n+                    'password': 'pass',\n+            },\n+            'esxi': {'type': 'esxi',\n+                    'username': 'username',\n+                    'password': 'pass',\n+            },\n+            'snmp': {'type': 'snmp',\n+                     'username': 'username',\n+                     'password': 'pass',\n+                     'community': 'some comunity',\n+                     'auth_algorithm': 'some auth algo',\n+                     'privacy_password': 'privacy pass',\n+                     'privacy_algorithm': 'privacy algo',\n+            },\n+        }\n+        self.maxDiff=None\n+        ret = w.build_credentials_as_prefs(cred_dict)\n+        self.assertEqual(len(ret), len(cred_out))\n+        self.assertIn('auth_port_ssh|||22', cred_out)\n+\n+    def test_build_credentials_ssh_up(self, mock_nvti, mock_db):\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        cred_out = [\n+            'auth_port_ssh|||22',\n+            'SSH Authorization[entry]:SSH login name:|||username',\n+            'SSH Authorization[password]:SSH password (unsafe!):|||pass']\n+        cred_dict = {\n+            'ssh': {'type': 'up',\n+                    'port': '22',\n+                    'username': 'username',\n+                    'password': 'pass',\n+            }\n+        }\n+        self.maxDiff=None\n+        ret = w.build_credentials_as_prefs(cred_dict)\n+        self.assertEqual(ret, cred_out)\n+\n+    def test_process_vts(self, mock_nvti, mock_db):\n+        vts = {\n+            '1.3.6.1.4.1.25623.1.0.100061': {\n+                'Data length : ': 'new value',\n+                'Do not randomize the  order  in  which ports are scanned': 'new value'},\n+            'vt_groups': ['family=debian', 'family=general']\n+        }\n+        vt_out = ['1.3.6.1.4.1.25623.1.0.100061'], [['Mantis Detection[checkbox]:Do not randomize the  order  in  which ports are scanned', 'new value'], ['Mantis Detection[entry]:Data length : ', 'new value']]\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        w.load_vts()\n+        ret = w.process_vts(vts)\n+        self.assertEqual(len(ret), len(vt_out))\n+\n+    def test_get_openvas_timestamp_scan_host_end(self, mock_nvti, mock_db):\n+        mock_db.get_host_scan_scan_end_time.return_value = '12345'\n+        w =  DummyWrapper(mock_nvti, mock_db)\n+        w.create_scan('123-456', '192.168.0.1', '192.168.0.1', None, [] )","path":"tests/testWrapper.py","position":408,"original_position":408,"commit_id":"ca77195630f270ecd1103c75b254157529aa535b","original_commit_id":"ca77195630f270ecd1103c75b254157529aa535b","user":{"login":"bjoernricks","id":897575,"node_id":"MDQ6VXNlcjg5NzU3NQ==","avatar_url":"https://avatars2.githubusercontent.com/u/897575?v=4","gravatar_id":"","url":"https://api.github.com/users/bjoernricks","html_url":"https://github.com/bjoernricks","followers_url":"https://api.github.com/users/bjoernricks/followers","following_url":"https://api.github.com/users/bjoernricks/following{/other_user}","gists_url":"https://api.github.com/users/bjoernricks/gists{/gist_id}","starred_url":"https://api.github.com/users/bjoernricks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bjoernricks/subscriptions","organizations_url":"https://api.github.com/users/bjoernricks/orgs","repos_url":"https://api.github.com/users/bjoernricks/repos","events_url":"https://api.github.com/users/bjoernricks/events{/privacy}","received_events_url":"https://api.github.com/users/bjoernricks/received_events","type":"User","site_admin":false},"body":"```suggestion\r\n        w.create_scan('123-456', '192.168.0.1', '192.168.0.1', None, [])\r\n```","created_at":"2019-01-03T13:19:20Z","updated_at":"2019-01-03T13:54:44Z","html_url":"https://github.com/greenbone/ospd-openvas/pull/46#discussion_r244996361","pull_request_url":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/comments/244996361"},"html":{"href":"https://github.com/greenbone/ospd-openvas/pull/46#discussion_r244996361"},"pull_request":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46"}}},"pull_request":{"url":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46","id":240158807,"node_id":"MDExOlB1bGxSZXF1ZXN0MjQwMTU4ODA3","html_url":"https://github.com/greenbone/ospd-openvas/pull/46","diff_url":"https://github.com/greenbone/ospd-openvas/pull/46.diff","patch_url":"https://github.com/greenbone/ospd-openvas/pull/46.patch","issue_url":"https://api.github.com/repos/greenbone/ospd-openvas/issues/46","number":46,"state":"open","locked":false,"title":"Add unit test and other improvements","user":{"login":"jjnicola","id":3997449,"node_id":"MDQ6VXNlcjM5OTc0NDk=","avatar_url":"https://avatars2.githubusercontent.com/u/3997449?v=4","gravatar_id":"","url":"https://api.github.com/users/jjnicola","html_url":"https://github.com/jjnicola","followers_url":"https://api.github.com/users/jjnicola/followers","following_url":"https://api.github.com/users/jjnicola/following{/other_user}","gists_url":"https://api.github.com/users/jjnicola/gists{/gist_id}","starred_url":"https://api.github.com/users/jjnicola/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jjnicola/subscriptions","organizations_url":"https://api.github.com/users/jjnicola/orgs","repos_url":"https://api.github.com/users/jjnicola/repos","events_url":"https://api.github.com/users/jjnicola/events{/privacy}","received_events_url":"https://api.github.com/users/jjnicola/received_events","type":"User","site_admin":false},"body":"Add unit tests for wrapper.py.\r\nAdd unit tests for nvticache.py (100% covered)\r\nAdd unit tests for db.py (100% covered)\r\nFix unit test for get_nvt_metadata.\r\nImprove docstrings.\r\nFix parse_metadata_tags()","created_at":"2018-12-20T12:46:46Z","updated_at":"2019-01-03T13:54:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"768987277b16b9ab59ed8134114ed5531159d409","assignee":null,"assignees":[],"requested_reviewers":[{"login":"wiegandm","id":13573313,"node_id":"MDQ6VXNlcjEzNTczMzEz","avatar_url":"https://avatars0.githubusercontent.com/u/13573313?v=4","gravatar_id":"","url":"https://api.github.com/users/wiegandm","html_url":"https://github.com/wiegandm","followers_url":"https://api.github.com/users/wiegandm/followers","following_url":"https://api.github.com/users/wiegandm/following{/other_user}","gists_url":"https://api.github.com/users/wiegandm/gists{/gist_id}","starred_url":"https://api.github.com/users/wiegandm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wiegandm/subscriptions","organizations_url":"https://api.github.com/users/wiegandm/orgs","repos_url":"https://api.github.com/users/wiegandm/repos","events_url":"https://api.github.com/users/wiegandm/events{/privacy}","received_events_url":"https://api.github.com/users/wiegandm/received_events","type":"User","site_admin":false},{"login":"janowagner","id":32060975,"node_id":"MDQ6VXNlcjMyMDYwOTc1","avatar_url":"https://avatars0.githubusercontent.com/u/32060975?v=4","gravatar_id":"","url":"https://api.github.com/users/janowagner","html_url":"https://github.com/janowagner","followers_url":"https://api.github.com/users/janowagner/followers","following_url":"https://api.github.com/users/janowagner/following{/other_user}","gists_url":"https://api.github.com/users/janowagner/gists{/gist_id}","starred_url":"https://api.github.com/users/janowagner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/janowagner/subscriptions","organizations_url":"https://api.github.com/users/janowagner/orgs","repos_url":"https://api.github.com/users/janowagner/repos","events_url":"https://api.github.com/users/janowagner/events{/privacy}","received_events_url":"https://api.github.com/users/janowagner/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46/commits","review_comments_url":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46/comments","review_comment_url":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/comments{/number}","comments_url":"https://api.github.com/repos/greenbone/ospd-openvas/issues/46/comments","statuses_url":"https://api.github.com/repos/greenbone/ospd-openvas/statuses/ca77195630f270ecd1103c75b254157529aa535b","head":{"label":"jjnicola:unittest","ref":"unittest","sha":"ca77195630f270ecd1103c75b254157529aa535b","user":{"login":"jjnicola","id":3997449,"node_id":"MDQ6VXNlcjM5OTc0NDk=","avatar_url":"https://avatars2.githubusercontent.com/u/3997449?v=4","gravatar_id":"","url":"https://api.github.com/users/jjnicola","html_url":"https://github.com/jjnicola","followers_url":"https://api.github.com/users/jjnicola/followers","following_url":"https://api.github.com/users/jjnicola/following{/other_user}","gists_url":"https://api.github.com/users/jjnicola/gists{/gist_id}","starred_url":"https://api.github.com/users/jjnicola/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jjnicola/subscriptions","organizations_url":"https://api.github.com/users/jjnicola/orgs","repos_url":"https://api.github.com/users/jjnicola/repos","events_url":"https://api.github.com/users/jjnicola/events{/privacy}","received_events_url":"https://api.github.com/users/jjnicola/received_events","type":"User","site_admin":false},"repo":{"id":136433131,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY0MzMxMzE=","name":"ospd-openvas","full_name":"jjnicola/ospd-openvas","private":false,"owner":{"login":"jjnicola","id":3997449,"node_id":"MDQ6VXNlcjM5OTc0NDk=","avatar_url":"https://avatars2.githubusercontent.com/u/3997449?v=4","gravatar_id":"","url":"https://api.github.com/users/jjnicola","html_url":"https://github.com/jjnicola","followers_url":"https://api.github.com/users/jjnicola/followers","following_url":"https://api.github.com/users/jjnicola/following{/other_user}","gists_url":"https://api.github.com/users/jjnicola/gists{/gist_id}","starred_url":"https://api.github.com/users/jjnicola/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jjnicola/subscriptions","organizations_url":"https://api.github.com/users/jjnicola/orgs","repos_url":"https://api.github.com/users/jjnicola/repos","events_url":"https://api.github.com/users/jjnicola/events{/privacy}","received_events_url":"https://api.github.com/users/jjnicola/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jjnicola/ospd-openvas","description":"ospd-openvas is an OSP server implementation to allow GVM to remotely control an OpenVAS Scanner","fork":true,"url":"https://api.github.com/repos/jjnicola/ospd-openvas","forks_url":"https://api.github.com/repos/jjnicola/ospd-openvas/forks","keys_url":"https://api.github.com/repos/jjnicola/ospd-openvas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jjnicola/ospd-openvas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jjnicola/ospd-openvas/teams","hooks_url":"https://api.github.com/repos/jjnicola/ospd-openvas/hooks","issue_events_url":"https://api.github.com/repos/jjnicola/ospd-openvas/issues/events{/number}","events_url":"https://api.github.com/repos/jjnicola/ospd-openvas/events","assignees_url":"https://api.github.com/repos/jjnicola/ospd-openvas/assignees{/user}","branches_url":"https://api.github.com/repos/jjnicola/ospd-openvas/branches{/branch}","tags_url":"https://api.github.com/repos/jjnicola/ospd-openvas/tags","blobs_url":"https://api.github.com/repos/jjnicola/ospd-openvas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jjnicola/ospd-openvas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jjnicola/ospd-openvas/git/refs{/sha}","trees_url":"https://api.github.com/repos/jjnicola/ospd-openvas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jjnicola/ospd-openvas/statuses/{sha}","languages_url":"https://api.github.com/repos/jjnicola/ospd-openvas/languages","stargazers_url":"https://api.github.com/repos/jjnicola/ospd-openvas/stargazers","contributors_url":"https://api.github.com/repos/jjnicola/ospd-openvas/contributors","subscribers_url":"https://api.github.com/repos/jjnicola/ospd-openvas/subscribers","subscription_url":"https://api.github.com/repos/jjnicola/ospd-openvas/subscription","commits_url":"https://api.github.com/repos/jjnicola/ospd-openvas/commits{/sha}","git_commits_url":"https://api.github.com/repos/jjnicola/ospd-openvas/git/commits{/sha}","comments_url":"https://api.github.com/repos/jjnicola/ospd-openvas/comments{/number}","issue_comment_url":"https://api.github.com/repos/jjnicola/ospd-openvas/issues/comments{/number}","contents_url":"https://api.github.com/repos/jjnicola/ospd-openvas/contents/{+path}","compare_url":"https://api.github.com/repos/jjnicola/ospd-openvas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jjnicola/ospd-openvas/merges","archive_url":"https://api.github.com/repos/jjnicola/ospd-openvas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jjnicola/ospd-openvas/downloads","issues_url":"https://api.github.com/repos/jjnicola/ospd-openvas/issues{/number}","pulls_url":"https://api.github.com/repos/jjnicola/ospd-openvas/pulls{/number}","milestones_url":"https://api.github.com/repos/jjnicola/ospd-openvas/milestones{/number}","notifications_url":"https://api.github.com/repos/jjnicola/ospd-openvas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jjnicola/ospd-openvas/labels{/name}","releases_url":"https://api.github.com/repos/jjnicola/ospd-openvas/releases{/id}","deployments_url":"https://api.github.com/repos/jjnicola/ospd-openvas/deployments","created_at":"2018-06-07T06:36:35Z","updated_at":"2018-12-21T08:35:22Z","pushed_at":"2019-01-03T09:07:17Z","git_url":"git://github.com/jjnicola/ospd-openvas.git","ssh_url":"git@github.com:jjnicola/ospd-openvas.git","clone_url":"https://github.com/jjnicola/ospd-openvas.git","svn_url":"https://github.com/jjnicola/ospd-openvas","homepage":null,"size":174,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0","node_id":"MDc6TGljZW5zZTg="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"greenbone:master","ref":"master","sha":"489d84664649a382093487fd8e8b932daea2200f","user":{"login":"greenbone","id":31986857,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxOTg2ODU3","avatar_url":"https://avatars1.githubusercontent.com/u/31986857?v=4","gravatar_id":"","url":"https://api.github.com/users/greenbone","html_url":"https://github.com/greenbone","followers_url":"https://api.github.com/users/greenbone/followers","following_url":"https://api.github.com/users/greenbone/following{/other_user}","gists_url":"https://api.github.com/users/greenbone/gists{/gist_id}","starred_url":"https://api.github.com/users/greenbone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenbone/subscriptions","organizations_url":"https://api.github.com/users/greenbone/orgs","repos_url":"https://api.github.com/users/greenbone/repos","events_url":"https://api.github.com/users/greenbone/events{/privacy}","received_events_url":"https://api.github.com/users/greenbone/received_events","type":"Organization","site_admin":false},"repo":{"id":136431000,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY0MzEwMDA=","name":"ospd-openvas","full_name":"greenbone/ospd-openvas","private":false,"owner":{"login":"greenbone","id":31986857,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxOTg2ODU3","avatar_url":"https://avatars1.githubusercontent.com/u/31986857?v=4","gravatar_id":"","url":"https://api.github.com/users/greenbone","html_url":"https://github.com/greenbone","followers_url":"https://api.github.com/users/greenbone/followers","following_url":"https://api.github.com/users/greenbone/following{/other_user}","gists_url":"https://api.github.com/users/greenbone/gists{/gist_id}","starred_url":"https://api.github.com/users/greenbone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenbone/subscriptions","organizations_url":"https://api.github.com/users/greenbone/orgs","repos_url":"https://api.github.com/users/greenbone/repos","events_url":"https://api.github.com/users/greenbone/events{/privacy}","received_events_url":"https://api.github.com/users/greenbone/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/greenbone/ospd-openvas","description":"ospd-openvas is an OSP server implementation to allow GVM to remotely control an OpenVAS Scanner","fork":false,"url":"https://api.github.com/repos/greenbone/ospd-openvas","forks_url":"https://api.github.com/repos/greenbone/ospd-openvas/forks","keys_url":"https://api.github.com/repos/greenbone/ospd-openvas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/greenbone/ospd-openvas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/greenbone/ospd-openvas/teams","hooks_url":"https://api.github.com/repos/greenbone/ospd-openvas/hooks","issue_events_url":"https://api.github.com/repos/greenbone/ospd-openvas/issues/events{/number}","events_url":"https://api.github.com/repos/greenbone/ospd-openvas/events","assignees_url":"https://api.github.com/repos/greenbone/ospd-openvas/assignees{/user}","branches_url":"https://api.github.com/repos/greenbone/ospd-openvas/branches{/branch}","tags_url":"https://api.github.com/repos/greenbone/ospd-openvas/tags","blobs_url":"https://api.github.com/repos/greenbone/ospd-openvas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/greenbone/ospd-openvas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/greenbone/ospd-openvas/git/refs{/sha}","trees_url":"https://api.github.com/repos/greenbone/ospd-openvas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/greenbone/ospd-openvas/statuses/{sha}","languages_url":"https://api.github.com/repos/greenbone/ospd-openvas/languages","stargazers_url":"https://api.github.com/repos/greenbone/ospd-openvas/stargazers","contributors_url":"https://api.github.com/repos/greenbone/ospd-openvas/contributors","subscribers_url":"https://api.github.com/repos/greenbone/ospd-openvas/subscribers","subscription_url":"https://api.github.com/repos/greenbone/ospd-openvas/subscription","commits_url":"https://api.github.com/repos/greenbone/ospd-openvas/commits{/sha}","git_commits_url":"https://api.github.com/repos/greenbone/ospd-openvas/git/commits{/sha}","comments_url":"https://api.github.com/repos/greenbone/ospd-openvas/comments{/number}","issue_comment_url":"https://api.github.com/repos/greenbone/ospd-openvas/issues/comments{/number}","contents_url":"https://api.github.com/repos/greenbone/ospd-openvas/contents/{+path}","compare_url":"https://api.github.com/repos/greenbone/ospd-openvas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/greenbone/ospd-openvas/merges","archive_url":"https://api.github.com/repos/greenbone/ospd-openvas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/greenbone/ospd-openvas/downloads","issues_url":"https://api.github.com/repos/greenbone/ospd-openvas/issues{/number}","pulls_url":"https://api.github.com/repos/greenbone/ospd-openvas/pulls{/number}","milestones_url":"https://api.github.com/repos/greenbone/ospd-openvas/milestones{/number}","notifications_url":"https://api.github.com/repos/greenbone/ospd-openvas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/greenbone/ospd-openvas/labels{/name}","releases_url":"https://api.github.com/repos/greenbone/ospd-openvas/releases{/id}","deployments_url":"https://api.github.com/repos/greenbone/ospd-openvas/deployments","created_at":"2018-06-07T06:16:59Z","updated_at":"2018-12-27T07:17:14Z","pushed_at":"2019-01-03T09:07:18Z","git_url":"git://github.com/greenbone/ospd-openvas.git","ssh_url":"git@github.com:greenbone/ospd-openvas.git","clone_url":"https://github.com/greenbone/ospd-openvas.git","svn_url":"https://github.com/greenbone/ospd-openvas","homepage":null,"size":143,"stargazers_count":6,"watchers_count":6,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0","node_id":"MDc6TGljZW5zZTg="},"forks":8,"open_issues":1,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46"},"html":{"href":"https://github.com/greenbone/ospd-openvas/pull/46"},"issue":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/issues/46"},"comments":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/issues/46/comments"},"review_comments":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46/comments"},"review_comment":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/pulls/46/commits"},"statuses":{"href":"https://api.github.com/repos/greenbone/ospd-openvas/statuses/ca77195630f270ecd1103c75b254157529aa535b"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"bjoernricks"}}