Exemplo n.º 1
0
    def test_wait_for_report_success(self, mock_progress, mock_read, mock_sleep):
        token = '1234456765'
        response_queued = {
            'status': 'queued'
        }
        response_completed = {
            'status': 'completed',
            'report': 'http://some.url/whatever'
        }
        response_result = {
            'click_count': 10,
            'install_count': 2,
        }

        ping_times = 3  # for testing purposes it should be lower than
        # `max_retries`, which defaults 60 in this test

        mock_progress.side_effect = \
            [response.GetReportProgressResponse(response_queued)] * ping_times + \
            [response.GetReportProgressResponse(response_completed)]
        mock_read.return_value = response_result

        result = self._make_client().wait_for_report(token)

        # read_report() result should be the same as wait_for_report result:
        self.assertEqual(result, response_result)

        # read_report() should be called exactly once with the returned url:
        mock_read.assert_called_once_with(response_completed['report'])

        # get_report_progress() should be called internally exactly like
        # specified here: just the token, (ping_times + 1) times in total,
        # in the specified order
        progress_calls = [mock.call(token)] * (ping_times + 1)
        self.assertEqual(progress_calls, mock_progress.call_args_list)
Exemplo n.º 2
0
 def test_progress_report_response(self):
     with self.assertRaises(ValueError):
         response.GetReportProgressResponse({'status': 'completed'})
     report_url = 'http://test.com/whatever'
     r = response.GetReportProgressResponse({
         'status': 'completed',
         'report': report_url
     })
     self.assertTrue(r.is_completed())
     self.assertEqual(r.get_report_url(), report_url)
Exemplo n.º 3
0
    def test_wait_for_report_max_retries_exceeded(self, mock_progress, mock_post,
                                                  mock_sleep):
        response_data = {
            'status': 'queued'
        }
        mock_response = mock.Mock()
        mock_response.json.return_value = response_data
        mock_post.return_value = mock_response
        mock_progress.return_value = response.GetReportProgressResponse(
                                                response_data)
        token = '12345667'
        retry_interval_seconds = 3
        start_delay_seconds = 15
        max_retries = 60

        with self.assertRaises(exception.PollMaxRetryException):
            self._make_client().wait_for_report(
                token,
                retry_interval_seconds=retry_interval_seconds,
                start_delay_seconds=start_delay_seconds,
                max_retries=max_retries)

        # checking time.sleep() calls would verify that all input parameters
        # are used correctly:
        sleep_calls = [mock.call(start_delay_seconds)] + \
                      [mock.call(retry_interval_seconds)] * max_retries
        self.assertEqual(sleep_calls, mock_sleep.call_args_list)

        # finally, check that get_report_progress() is called
        # `max_retries` times with the token parameter:
        progress_calls = [mock.call(token)] * max_retries
        self.assertEqual(progress_calls, mock_progress.call_args_list)