def testGenerateInstallCounts(self): """Test _GenerateInstallCounts().""" install_counts = { 'foo': { 'install_count': 2, 'applesus': True, 'duration_count': 1, 'duration_total_seconds': 30, 'duration_seconds_avg': 30}, 'bar': {'install_count': 2, 'install_fail_count': 1, 'applesus': False}, } new_foo = self.mox.CreateMockAnything() new_foo.package = 'foo' new_foo.applesus = True new_foo.duration_seconds = 20 new_bar = self.mox.CreateMockAnything() new_bar.package = 'bar' new_bar.applesus = False new_bar.duration_seconds = 10 new_bar_success = self.mox.CreateMockAnything() new_bar_success.package = 'bar' new_bar_success.applesus = False new_bar_success.duration_seconds = 10 new_bar_success2 = self.mox.CreateMockAnything() new_bar_success2.package = 'bar' new_bar_success2.applesus = False new_bar_success2.duration_seconds = 20 new_zzz = self.mox.CreateMockAnything() new_zzz.package = 'zzz' new_zzz.applesus = False new_zzz.duration_seconds = None new_installs = [ new_foo, new_bar, new_bar_success, new_zzz, new_bar_success2] new_install_counts = { 'foo': { 'install_count': 2, 'install_fail_count': 1, 'applesus': True, 'duration_count': 1, 'duration_total_seconds': 30, 'duration_seconds_avg': 30, }, 'bar': { 'install_count': 4, 'install_fail_count': 2, 'applesus': False, 'duration_count': 2, 'duration_total_seconds': 30, 'duration_seconds_avg': 30 / 2, }, 'zzz': { 'install_count': 1, 'install_fail_count': 0, 'applesus': False, 'duration_count': 0, 'duration_total_seconds': 0, 'duration_seconds_avg': None, }, } new_foo.IsSuccess().AndReturn(False) new_bar.IsSuccess().AndReturn(False) new_bar_success.IsSuccess().AndReturn(True) new_zzz.IsSuccess().AndReturn(True) new_bar_success2.IsSuccess().AndReturn(True) self.mox.StubOutWithMock(reports_cache.models, 'KeyValueCache') self.mox.StubOutWithMock( reports_cache.models.KeyValueCache, 'get_by_key_name') self.mox.StubOutWithMock(reports_cache.models.InstallLog, 'all') self.mox.StubOutWithMock( reports_cache.models.ReportsCache, 'GetInstallCounts') self.mox.StubOutWithMock( reports_cache.models.ReportsCache, 'SetInstallCounts') reports_cache.models.ReportsCache.GetInstallCounts().AndReturn( (install_counts, None)) mock_query = self.mox.CreateMockAnything() reports_cache.models.InstallLog.all().AndReturn(mock_query) mock_query.order('server_datetime').AndReturn(mock_query) mock_cursor_obj = self.mox.CreateMockAnything() mock_cursor_obj.text_value = 'foocursor' reports_cache.models.KeyValueCache.get_by_key_name( 'pkgs_list_cursor').AndReturn(mock_cursor_obj) mock_query.with_cursor(mock_cursor_obj.text_value) mock_query.fetch(1000).AndReturn(new_installs) reports_cache.models.ReportsCache.SetInstallCounts(new_install_counts) mock_query.cursor().AndReturn(None) mock_cursor_obj.put().AndReturn(None) self.mox.StubOutWithMock(reports_cache.deferred, 'defer') reports_cache.deferred.defer( reports_cache._GenerateInstallCounts).AndReturn(None) self.mox.ReplayAll() reports_cache._GenerateInstallCounts() self.mox.VerifyAll()