def test_encodes_correctly_when_result_includes_two_errors(self): result = create_ndt_result( start_time=datetime.datetime(2016, 2, 26, 15, 51, 23, 452234, pytz.utc), end_time=datetime.datetime(2016, 2, 26, 15, 59, 33, 284345, pytz.utc), client='mock_client', client_version='mock_client_version', os='mock_os', os_version='mock_os_version') result.errors = [ results.TestError( 'mock error message 1', datetime.datetime(2016, 2, 26, 15, 53, 29, 123456, pytz.utc)), results.TestError( 'mock error message 2', datetime.datetime(2016, 2, 26, 15, 53, 29, 654321, pytz.utc)) ] encoded_expected = """ { "start_time": "2016-02-26T15:51:23.452234Z", "end_time": "2016-02-26T15:59:33.284345Z", "client": "mock_client", "client_version": "mock_client_version", "browser": null, "browser_version": null, "os": "mock_os", "os_version": "mock_os_version", "c2s_start_time": null, "c2s_end_time": null, "c2s_throughput": null, "s2c_start_time": null, "s2c_end_time": null, "s2c_throughput": null, "latency": null, "errors": [ { "timestamp": "2016-02-26T15:53:29.123456Z", "message": "mock error message 1" }, { "timestamp": "2016-02-26T15:53:29.654321Z", "message": "mock error message 2" } ] }""" encoded_actual = self.encoder.encode(result) self.assertJsonEqual(encoded_expected, encoded_actual)
def test_encodes_fully_populated_result_correctly(self): result = create_ndt_result( start_time=datetime.datetime(2016, 2, 26, 15, 51, 23, 452234, pytz.utc), end_time=datetime.datetime(2016, 2, 26, 15, 59, 33, 284345, pytz.utc), client='mock_client', client_version='mock_client_version', os='mock_os', os_version='mock_os_version') result.c2s_result = results.NdtSingleTestResult( start_time=datetime.datetime(2016, 2, 26, 15, 51, 24, 123456, pytz.utc), end_time=datetime.datetime(2016, 2, 26, 15, 51, 34, 123456, pytz.utc), throughput=10.127) result.s2c_result = results.NdtSingleTestResult( start_time=datetime.datetime(2016, 2, 26, 15, 51, 35, 123456, pytz.utc), end_time=datetime.datetime(2016, 2, 26, 15, 51, 45, 123456, pytz.utc), throughput=98.235) result.latency = 23.8 result.browser = 'mock_browser' result.browser_version = 'mock_browser_version' result.errors = [ results.TestError( 'mock error message 1', datetime.datetime(2016, 2, 26, 15, 53, 29, 123456, pytz.utc)) ] encoded_expected = """ { "start_time": "2016-02-26T15:51:23.452234Z", "end_time": "2016-02-26T15:59:33.284345Z", "client": "mock_client", "client_version": "mock_client_version", "browser": "mock_browser", "browser_version": "mock_browser_version", "os": "mock_os", "os_version": "mock_os_version", "c2s_start_time": "2016-02-26T15:51:24.123456Z", "c2s_end_time": "2016-02-26T15:51:34.123456Z", "c2s_throughput": 10.127, "s2c_start_time": "2016-02-26T15:51:35.123456Z", "s2c_end_time": "2016-02-26T15:51:45.123456Z", "s2c_throughput": 98.235, "latency": 23.8, "errors": [ { "timestamp": "2016-02-26T15:53:29.123456Z", "message": "mock error message 1" } ] }""" encoded_actual = self.encoder.encode(result) self.assertJsonEqual(encoded_expected, encoded_actual)
def test_constructor_using_default_timestamp_creates_distinct_timestamps( self): """Constructing a TestError with no timestamp should use current time. If the caller constructs a TestError instance and uses the default value for the timestamp parameter, the constructor should use the timestamp at the time the constructor was called. """ with mock.patch.object(results.datetime, 'datetime', autospec=True) as mocked_datetime: mocked_datetime.now.side_effect = [ datetime.datetime(2001, 1, 1), datetime.datetime(2002, 1, 1) ] error_a = results.TestError('error A') error_b = results.TestError('error B') self.assertEqual(datetime.datetime(2001, 1, 1), error_a.timestamp) self.assertEqual(datetime.datetime(2002, 1, 1), error_b.timestamp)
def mock_load_url(unused_driver, unused_url, errors): errors.append(results.TestError('mock url load error')) return False
def test_decodes_fully_populated_result_correctly(self): encoded = """ { "start_time": "2016-02-26T15:51:23.452234Z", "end_time": "2016-02-26T15:59:33.284345Z", "client": "mock_client", "client_version": "mock_client_version", "browser": "mock_browser", "browser_version": "mock_browser_version", "os": "mock_os", "os_version": "mock_os_version", "c2s_start_time": "2016-02-26T15:51:24.123456Z", "c2s_end_time": "2016-02-26T15:51:34.123456Z", "c2s_throughput": 10.127, "s2c_start_time": "2016-02-26T15:51:35.123456Z", "s2c_end_time": "2016-02-26T15:51:45.123456Z", "s2c_throughput": 98.235, "latency": 23.8, "errors": [ { "timestamp": "2016-02-26T15:53:29.123456Z", "message": "mock error message 1" }, { "timestamp": "2016-02-26T15:53:30.654321Z", "message": "mock error message 2" } ] }""" decoded_expected = results.NdtResult( start_time=datetime.datetime(2016, 2, 26, 15, 51, 23, 452234, pytz.utc), end_time=datetime.datetime(2016, 2, 26, 15, 59, 33, 284345, pytz.utc), client='mock_client', client_version='mock_client_version', os='mock_os', os_version='mock_os_version', c2s_result=results.NdtSingleTestResult( start_time=datetime.datetime(2016, 2, 26, 15, 51, 24, 123456, pytz.utc), end_time=datetime.datetime(2016, 2, 26, 15, 51, 34, 123456, pytz.utc), throughput=10.127), s2c_result=results.NdtSingleTestResult( start_time=datetime.datetime(2016, 2, 26, 15, 51, 35, 123456, pytz.utc), end_time=datetime.datetime(2016, 2, 26, 15, 51, 45, 123456, pytz.utc), throughput=98.235), latency=23.8, browser='mock_browser', browser_version='mock_browser_version', errors=[ results.TestError( 'mock error message 1', datetime.datetime(2016, 2, 26, 15, 53, 29, 123456, pytz.utc)), results.TestError( 'mock error message 2', datetime.datetime(2016, 2, 26, 15, 53, 30, 654321, pytz.utc)) ]) decoded_actual = self.decoder.decode(encoded) self.assertEqual(decoded_expected, decoded_actual)