def testPerformSymbolsFileUploadMixed(self): """Upload symbols in mixed starting states. Demonstrate that INITIAL and ERROR are uploaded, but DUPLICATE/UPLOADED are ignored. """ symbols = [ self.sym_initial, self.sym_error, self.sym_duplicate, self.sym_uploaded ] result = upload_symbols.PerformSymbolsFileUpload( symbols, 'fake_url', product_name='product') # self.assertEqual(list(result), symbols) self.assertEqual(self.sym_initial.status, upload_symbols.SymbolFile.UPLOADED) self.assertEqual(self.sym_error.status, upload_symbols.SymbolFile.UPLOADED) self.assertEqual(self.sym_duplicate.status, upload_symbols.SymbolFile.DUPLICATE) self.assertEqual(self.sym_uploaded.status, upload_symbols.SymbolFile.UPLOADED) self.assertEqual(self.urlopen_mock.call_count, 2)
def testPerformSymbolsFileUploadFailure(self): """All network requests fail.""" self.urlopen_mock.side_effect = urllib2.URLError('network failure') symbols = [self.sym_initial] result = upload_symbols.PerformSymbolsFileUpload( symbols, 'fake_url', product_name='product') self.assertEqual(list(result), symbols) self.assertEqual(self.sym_initial.status, upload_symbols.SymbolFile.ERROR) self.assertEqual(self.urlopen_mock.call_count, 7)
def testPerformSymbolsFileUpload(self): """We upload on first try.""" symbols = [self.sym_initial] result = upload_symbols.PerformSymbolsFileUpload( symbols, 'fake_url', product_name='product') self.assertEqual(list(result), symbols) self.assertEqual(self.sym_initial.status, upload_symbols.SymbolFile.UPLOADED) self.assertEqual(self.urlopen_mock.call_count, 1)
def testPerformSymbolsFileUploadTransisentFailure(self): """We fail once, then succeed.""" self.urlopen_mock.side_effect = (urllib2.URLError('network failure'), None) symbols = [self.sym_initial] result = upload_symbols.PerformSymbolsFileUpload( symbols, 'fake_url', product_name='product') self.assertEqual(list(result), symbols) self.assertEqual(self.sym_initial.status, upload_symbols.SymbolFile.UPLOADED) self.assertEqual(self.urlopen_mock.call_count, 2)
def testPerformSymbolsFileUpload(self): """We upload on first try.""" symbols = [self.sym_initial] result = upload_symbols.PerformSymbolsFileUpload(symbols, 'fake_url', api_key='testkey') self.assertEqual(list(result), symbols) self.assertEqual(self.sym_initial.status, upload_symbols.SymbolFile.UPLOADED) self.assertEqual(self.request_mock.call_count, 3)
def testPerformSymbolsFileUploadTransisentFailure(self): """We fail once, then succeed.""" self.urlopen_mock.side_effect = (IOError('network failure'), None) symbols = [self.sym_initial] result = upload_symbols.PerformSymbolsFileUpload(symbols, 'fake_url', api_key='testkey') self.assertEqual(list(result), symbols) self.assertEqual(self.sym_initial.status, upload_symbols.SymbolFile.UPLOADED) self.assertEqual(self.request_mock.call_count, 3)
def testPerformSymbolsFileUploadFailure(self): """All network requests fail.""" self.request_mock.side_effect = IOError('network failure') symbols = [self.sym_initial] result = upload_symbols.PerformSymbolsFileUpload(symbols, 'fake_url', api_key='testkey') self.assertEqual(list(result), symbols) self.assertEqual(self.sym_initial.status, upload_symbols.SymbolFile.ERROR) self.assertEqual(self.request_mock.call_count, 6)
def testPerformSymbolsFileUploadErrorOut(self): """Demonstate we exit only after X errors.""" symbol_count = upload_symbols.MAX_TOTAL_ERRORS_FOR_RETRY + 10 symbols = [] fail_file = None # potentially twice as many errors as we should attempt. for _ in range(symbol_count): # Each loop will get unique SymbolFile instances that use the same files. fail = self.createSymbolFile('fail.sym') fail_file = fail.file_name symbols.append(self.createSymbolFile('pass.sym')) symbols.append(fail) # Mock out UploadSymbolFile and fail for fail.sym files. def failSome(_url, symbol, _api_key): if symbol.file_name == fail_file: raise IOError('network failure') upload_mock = self.PatchObject(upload_symbols, 'UploadSymbolFile', side_effect=failSome) upload_mock.__name__ = 'UploadSymbolFileMock2' result = upload_symbols.PerformSymbolsFileUpload(symbols, 'fake_url', api_key='testkey') self.assertEqual(list(result), symbols) passed = sum(s.status == upload_symbols.SymbolFile.UPLOADED for s in symbols) failed = sum(s.status == upload_symbols.SymbolFile.ERROR for s in symbols) skipped = sum(s.status == upload_symbols.SymbolFile.INITIAL for s in symbols) # Shows we all pass.sym files worked until limit hit. self.assertEqual(passed, upload_symbols.MAX_TOTAL_ERRORS_FOR_RETRY) # Shows we all fail.sym files failed until limit hit. self.assertEqual(failed, upload_symbols.MAX_TOTAL_ERRORS_FOR_RETRY) # Shows both pass/fail were skipped after limit hit. self.assertEqual(skipped, 10 * 2)