Exemple #1
0
class TestLightSwitch(unittest.TestCase):

    def setUp(self):
        self.patient = LightSwitch()
        self.patient.username = '******'
        self.patient.password = '******'
        self.patient.server = 'host'

    def test_turn_on(self):
        flip_switch_mock = Mock()

        self.patient._flip_switch = flip_switch_mock

        self.patient.turn_on('MyService', 'ServiceType')

        flip_switch_mock.assert_called_once()
        flip_switch_mock.assert_called_with('MyService', 'ServiceType', 'start')

    def test_turn_off(self):
        flip_switch_mock = Mock()

        self.patient._flip_switch = flip_switch_mock

        self.patient.turn_off('MyService', 'ServiceType')

        flip_switch_mock.assert_called_once()
        flip_switch_mock.assert_called_with('MyService', 'ServiceType', 'stop')

    def test_flip_switch(self):
        fetch_mock = Mock()

        self.patient._fetch = fetch_mock

        self.patient._flip_switch('MyService', 'ServiceType', 'action')

        fetch_mock.assert_called_once()
        fetch_mock.assert_called_with('http://*****:*****@patch('forklift.arcgis.sleep')
    @patch('forklift.arcgis.requests')
    def test_fetch_requests_token_when_expired(self, request, sleep):
        post_response_mock = Mock()
        post_response_mock.raise_for_status = Mock(return_value=False)
        post_response_mock.json = Mock(return_value={'token': 'token1', 'expires': '123'})
        request.post = Mock(return_value=post_response_mock)

        request_token_mock = Mock()
        return_false_for_status_mock = Mock(return_value=(True, None))

        self.patient._request_token = request_token_mock
        self.patient._return_false_for_status = return_false_for_status_mock

        self.patient._fetch('url')

        request_token_mock.assert_called_once()

    @patch('forklift.arcgis.sleep')
    @patch('forklift.arcgis.requests')
    def test_fetch_requests_uses_exiting_token(self, request, sleep):
        post_response_mock = Mock()
        post_response_mock.raise_for_status = Mock(return_value=False)
        post_response_mock.json = Mock(return_value={'token': 'token1', 'expires': '123'})
        request.post = Mock(return_value=post_response_mock)

        request_token_mock = Mock()
        request.post = post_response_mock

        return_false_for_status_mock = Mock(return_value=(True, None))
        self.patient._request_token = request_token_mock
        self.patient.token_expire_milliseconds = (time() * 1000) + 10000
        self.patient._return_false_for_status = return_false_for_status_mock

        self.patient._fetch('url')

        request_token_mock.assert_not_called()

    def test_return_false_for_status_returns_false_if_error_in_status(self):
        bad_status = {'status': 'error', 'messages': ['join', 'me']}

        actual = self.patient._return_false_for_status(bad_status)

        self.assertEqual(actual, (False, 'join; me'))

    def test_return_false_for_status_with_success_returns_true(self):
        bad_status = {'status': '', 'messages': ['yay', 'me']}

        actual = self.patient._return_false_for_status(bad_status)

        self.assertEqual(actual, (True, None))

    @patch('forklift.arcgis.requests')
    def test_request_token(self, request):
        post_response_mock = Mock()
        post_response_mock.raise_for_status = Mock(return_value=False)
        post_response_mock.json = Mock(return_value={'token': 'token1', 'expires': '123'})
        request.post = Mock(return_value=post_response_mock)

        self.patient._return_false_for_status = Mock(return_value=(True, None))

        self.patient._request_token()

        self.assertEqual(self.patient.token, 'token1')
        self.assertEqual(self.patient.token_expire_milliseconds, 123)

    @patch('forklift.arcgis.Pool', return_value=PoolMock())
    @patch('forklift.arcgis.sleep')
    def test_ensure_tries_five_times_with_failures(self, sleep, poolmock):
        affected_services = [('1', 'MapServer')]

        self.patient.turn_on = Mock(return_value=(False, ''))
        self.patient.turn_off = Mock()

        status, affected_services = self.patient.ensure('on', affected_services)

        self.assertFalse(status)
        self.assertEqual('1.MapServer', affected_services)
        self.assertEqual(self.patient.turn_on.call_count, 5)
        self.patient.turn_off.assert_not_called()
        sleep.assert_has_calls([call(1), call(2), call(3), call(5), call(8)])

    @patch('forklift.arcgis.Pool', return_value=PoolMock())
    @patch('forklift.arcgis.sleep')
    def test_ensure_returns_formatted_problems(self, sleep, poolmock):
        affected_services = [('1', 'MapServer'), ('2', 'GPServer'), ('3', 'GeocodeServer')]

        self.patient.turn_on = Mock(return_value=(False, ''))
        self.patient.turn_off = Mock()

        status, affected_services = self.patient.ensure('on', affected_services)

        self.assertEqual('1.MapServer, 2.GPServer, 3.GeocodeServer', affected_services)

    @patch('forklift.arcgis.Pool', return_value=PoolMock())
    @patch('forklift.arcgis.sleep')
    def test_ensure_tries_until_success(self, sleep, poolmock):
        affected_services = [('1', 'MapServer')]

        self.patient.turn_on = Mock(side_effect=[(False, ''), (True, '')])
        self.patient.turn_off = Mock()

        status, affected_services = self.patient.ensure('on', affected_services)

        self.assertTrue(status)
        self.assertEqual(affected_services, '')
        self.patient.turn_off.assert_not_called()
        self.assertEqual(self.patient.turn_on.call_count, 2)
        sleep.assert_has_calls([call(1)])

    def test_missing_environ_vars(self):
        self.patient.username = None
        self.patient.password = None
        self.patient.server = None

        self.assertEqual((True, None), self.patient.ensure('on', []))
Exemple #2
0
class TestLightSwitch(unittest.TestCase):

    def setUp(self):
        self.patient = LightSwitch()
        self.patient.username = '******'
        self.patient.password = '******'
        self.patient.server = 'host'

    def test_turn_on(self):
        flip_switch_mock = Mock()

        self.patient._flip_switch = flip_switch_mock

        self.patient.turn_on('MyService', 'ServiceType')

        flip_switch_mock.assert_called_once()
        flip_switch_mock.assert_called_with('MyService', 'ServiceType', 'start')

    def test_turn_off(self):
        flip_switch_mock = Mock()

        self.patient._flip_switch = flip_switch_mock

        self.patient.turn_off('MyService', 'ServiceType')

        flip_switch_mock.assert_called_once()
        flip_switch_mock.assert_called_with('MyService', 'ServiceType', 'stop')

    def test_flip_switch(self):
        fetch_mock = Mock()

        self.patient._fetch = fetch_mock

        self.patient._flip_switch('MyService', 'ServiceType', 'action')

        fetch_mock.assert_called_once()
        fetch_mock.assert_called_with('http://*****:*****@patch('forklift.arcgis.sleep')
    @patch('forklift.arcgis.requests')
    def test_fetch_requests_token_when_expired(self, request, sleep):
        post_response_mock = Mock()
        post_response_mock.raise_for_status = Mock(return_value=False)
        post_response_mock.json = Mock(return_value={'token': 'token1', 'expires': '123'})
        request.post = Mock(return_value=post_response_mock)

        request_token_mock = Mock()
        return_false_for_status_mock = Mock(return_value=(True, None))

        self.patient._request_token = request_token_mock
        self.patient._return_false_for_status = return_false_for_status_mock

        self.patient._fetch('url')

        request_token_mock.assert_called_once()

    @patch('forklift.arcgis.sleep')
    @patch('forklift.arcgis.requests')
    def test_fetch_requests_uses_exiting_token(self, request, sleep):
        post_response_mock = Mock()
        post_response_mock.raise_for_status = Mock(return_value=False)
        post_response_mock.json = Mock(return_value={'token': 'token1', 'expires': '123'})
        request.post = Mock(return_value=post_response_mock)

        request_token_mock = Mock()
        request.post = post_response_mock

        return_false_for_status_mock = Mock(return_value=(True, None))
        self.patient._request_token = request_token_mock
        self.patient.token_expire_milliseconds = (time() * 1000) + 10000
        self.patient._return_false_for_status = return_false_for_status_mock

        self.patient._fetch('url')

        request_token_mock.assert_not_called()

    def test_return_false_for_status_returns_false_if_error_in_status(self):
        bad_status = {'status': 'error', 'messages': ['join', 'me']}

        actual = self.patient._return_false_for_status(bad_status)

        self.assertEqual(actual, (False, 'join; me'))

    def test_return_false_for_status_with_success_returns_true(self):
        bad_status = {'status': '', 'messages': ['yay', 'me']}

        actual = self.patient._return_false_for_status(bad_status)

        self.assertEqual(actual, (True, None))

    @patch('forklift.arcgis.requests')
    def test_request_token(self, request):
        post_response_mock = Mock()
        post_response_mock.raise_for_status = Mock(return_value=False)
        post_response_mock.json = Mock(return_value={'token': 'token1', 'expires': '123'})
        request.post = Mock(return_value=post_response_mock)

        self.patient._return_false_for_status = Mock(return_value=(True, None))

        self.patient._request_token()

        self.assertEqual(self.patient.token, 'token1')
        self.assertEqual(self.patient.token_expire_milliseconds, 123)

    @patch('forklift.arcgis.sleep')
    def test_ensure_tries_five_times_with_failures(self, sleep):
        affected_services = [('1', 'MapServer')]

        self.patient.turn_on = Mock(return_value=(False, ''))
        self.patient.turn_off = Mock()

        status, affected_services = self.patient.ensure('on', affected_services)

        self.assertFalse(status)
        self.assertEqual('1.MapServer', affected_services)
        self.assertEqual(self.patient.turn_on.call_count, 5)
        self.patient.turn_off.assert_not_called()
        sleep.assert_has_calls([call(1), call(2), call(3), call(5), call(8)])

    @patch('forklift.arcgis.sleep')
    def test_ensure_returns_formatted_problems(self, sleep):
        affected_services = [('1', 'MapServer'), ('2', 'GPServer'), ('3', 'GeocodeServer')]

        self.patient.turn_on = Mock(return_value=(False, ''))
        self.patient.turn_off = Mock()

        status, affected_services = self.patient.ensure('on', affected_services)

        self.assertEqual('1.MapServer, 2.GPServer, 3.GeocodeServer', affected_services)

    @patch('forklift.arcgis.sleep')
    def test_ensure_tries_until_success(self, sleep):
        affected_services = [('1', 'MapServer')]

        self.patient.turn_on = Mock(side_effect=[(False, ''), (True, '')])
        self.patient.turn_off = Mock()

        status, affected_services = self.patient.ensure('on', affected_services)

        self.assertTrue(status)
        self.assertEqual(affected_services, '')
        self.patient.turn_off.assert_not_called()
        self.assertEqual(self.patient.turn_on.call_count, 2)
        sleep.assert_has_calls([call(1)])

    def test_missing_environ_vars(self):
        self.patient.username = None
        self.patient.password = None
        self.patient.server = None

        self.assertEqual((True, None), self.patient.ensure('on', []))