예제 #1
0
    def test_loadconfig(self):

        create_vtservice_configfile(
            config_file_name=VT_SERVICE_CONFIG_FILENAME, )

        vt_service = VirusTotalApiService(TEST_FOLDER)
        vt_service._load_configuration()

        self.assertEqual(vt_service.api_key, SAMPLE_API_KEY)

        os.remove(VT_SERVICE_CONFIG_FILENAME)
def configure_vt_service(port):

    create_vtservice_configfile(config_file_name=VT_SERVICE_CONFIG_FILENAME)

    vt_service = VirusTotalApiService(TEST_FOLDER)

    vt_service.VTAPI_URL_FORMAT = "http://127.0.0.1:" \
          + str(port) \
          + "/vtapi/v2{0}"

    vt_service.run()

    return vt_service
예제 #3
0
    def test_registerservices(self):
        with MockServerRunner():

            create_vtservice_configfile(
                config_file_name=VT_SERVICE_CONFIG_FILENAME)

            with BaseClientTest.create_client(max_retries=0) as dxl_client:
                dxl_client.connect()

                vt_service = VirusTotalApiService(TEST_FOLDER)
                vt_service._dxl_client = dxl_client

                vt_service._load_configuration()
                vt_service.on_register_services()

                self.assertTrue(len(vt_service._services) > 0)

                expected_vt_topics = {
                    VirusTotalApiService.REQ_TOPIC_FILE_REPORT,
                    VirusTotalApiService.REQ_TOPIC_FILE_RESCAN,
                    VirusTotalApiService.REQ_TOPIC_URL_SCAN,
                    VirusTotalApiService.REQ_TOPIC_URL_REPORT,
                    VirusTotalApiService.REQ_TOPIC_IP_ADDRESS_REPORT,
                    VirusTotalApiService.REQ_TOPIC_DOMAIN_REPORT
                }

                for expected_topic in expected_vt_topics:
                    self.assertIn(expected_topic,
                                  vt_service._services[0].topics)
예제 #4
0
    def test_callback_urlscan(self):
        with MockServerRunner() as server_runner, \
            VirusTotalApiService(TEST_FOLDER) as vt_service:

            vt_service.VTAPI_URL_FORMAT = "http://127.0.0.1:" \
                                          + str(server_runner.mock_server_port) \
                                          + "/vtapi/v2{0}"
            vt_service.run()

            request_topic = VirusTotalApiService.REQ_TOPIC_URL_SCAN
            req = Request(request_topic)
            MessageUtils.dict_to_json_payload(
                req, {VirusTotalApiRequestCallback.PARAM_URL: SAMPLE_URL})

            res = vt_service._dxl_client.sync_request(req, timeout=30)
            res_dict = MessageUtils.json_payload_to_dict(res)

            self.assertDictEqual(SAMPLE_URL_SCAN, res_dict)
예제 #5
0
    def test_error_httperror(self):
        with MockServerRunner() as server_runner, \
            VirusTotalApiService(TEST_FOLDER) as vt_service:

            vt_service.VTAPI_URL_FORMAT = "http://127.0.0.1:" \
                                          + str(server_runner.mock_server_port) \
                                          + HTTP_ERROR_SERVER_PATH
            vt_service.run()

            request_topic = VirusTotalApiService.REQ_TOPIC_DOMAIN_REPORT
            req = Request(request_topic)
            MessageUtils.dict_to_json_payload(
                req,
                {VirusTotalApiRequestCallback.PARAM_DOMAIN: SAMPLE_DOMAIN})

            res = vt_service._dxl_client.sync_request(req, timeout=30)

            self.assertEqual(res.message_type, Response.MESSAGE_TYPE_ERROR)
            self.assertIn(
                "500 Server Error: 500 - Internal Server Error for url: ",
                res._error_message)
예제 #6
0
    def test_error_exceedrate(self):
        with MockServerRunner() as server_runner, \
            VirusTotalApiService(TEST_FOLDER) as vt_service:

            vt_service.VTAPI_URL_FORMAT = "http://127.0.0.1:" \
                                              + str(server_runner.mock_server_port) \
                                              + RATE_EXCEED_SERVER_PATH
            vt_service.run()

            request_topic = VirusTotalApiService.REQ_TOPIC_DOMAIN_REPORT
            req = Request(request_topic)
            MessageUtils.dict_to_json_payload(
                req,
                {VirusTotalApiRequestCallback.PARAM_DOMAIN: SAMPLE_DOMAIN})

            res = vt_service._dxl_client.sync_request(req, timeout=30)

            self.assertEqual(res.message_type, Response.MESSAGE_TYPE_ERROR)
            self.assertIn(
                "VirusTotal error, VirusTotal API request rate limit exceeded. (204)",
                res._error_message)