# -*- coding: UTF-8 -*-
# NOTE: Launch all tests with `nosetests` command from chaos_monkey dir.

import json
import unittest

from mock import Mock, patch

import control

from config import GUID


class ReportConfigErrorTestCase(unittest.TestCase):
    """
    When unknown config variable received form the island server, skip it and report config
    error back to the server.
    """

    config_response = Mock(json=Mock(return_value={'config': {'blah': 'blah'}}))

    def teardown(self):
        patch.stopall()

    def test_config(self):
        patch('control.requests.patch', Mock()).start()
        patch('control.WormConfiguration', Mock(current_server='127.0.0.1:123')).start()

        # GIVEN the server with uknown config variable
        patch('control.requests.get', Mock(return_value=self.config_response)).start()

        # WHEN monkey tries to load config from server
        control.ControlClient.load_control_config()

        # THEN she reports config error back to the server
        control.requests.patch.assert_called_once_with(
                "https://127.0.0.1:123/api/monkey/%s" % GUID,
                data=json.dumps({'config_error': True}),
                headers={'content-type': 'application/json'},
                verify=False,
                proxies=control.ControlClient.proxies)


if __name__ == '__main__':
    unittest.main()