def testGenerateMsuUserSummaryWhenDataSinceOneDay(self): """Test _GenerateMsuUserSummary().""" rc = reports_cache.ReportsCache() since_days = 1 (now, dt_a1, dt_a2) = self._GenDatetimes(10, 20) reports_raw = [ { 'uuid': 'u1', 'mtime': dt_a1, 'event': 'launched', 'user': '******' }, { 'uuid': 'u1', 'mtime': dt_a2, 'event': 'exit_later_clicked', 'user': '******' }, ] reports = [] cursor = None summary = None summary_output = self._GenBaseSummaryOutput(rc) summary_empty = summary_output.copy() reports = self._GenReportsAndSummary(summary_output, reports_raw) lquery = self.mox.CreateMockAnything() self.mox.StubOutWithMock(reports_cache.models, 'ComputerMSULog') self.mox.StubOutWithMock(reports_cache.models, 'KeyValueCache') self.mox.StubOutWithMock(reports_cache.models, 'ReportsCache') reports_cache.models.ComputerMSULog.all().AndReturn(lquery) reports_cache.models.KeyValueCache.MemcacheWrappedGet( 'msu_user_summary_cursor_%dD' % since_days, 'text_value').AndReturn(cursor) reports_cache.models.ReportsCache.GetMsuUserSummary( since='%dD' % since_days, tmp=True).AndReturn((summary, None)) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_empty, since='%dD' % since_days, tmp=True).AndReturn(None) lquery.fetch(rc.FETCH_LIMIT).AndReturn(reports) i = 0 last_user = None for report in reports: if last_user != report.user: lquery.cursor().AndReturn('cursor%d' % i) i += 1 last_user = report.user reports_cache.models.ComputerMSULog.all().AndReturn(lquery) lquery.with_cursor('cursor%d' % (i-1)).AndReturn(None) lquery.fetch(rc.FETCH_LIMIT).AndReturn(None) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_output, since='%dD' % since_days).AndReturn(None) reports_cache.models.KeyValueCache.DeleteMemcacheWrap( 'msu_user_summary_cursor_%dD' % since_days, prop_name='text_value') reports_cache.models.ReportsCache.DeleteMsuUserSummary( since='%dD' % since_days, tmp=True).AndReturn(None) self.mox.ReplayAll() rc._GenerateMsuUserSummary(since_days=since_days, now=now) self.mox.VerifyAll()
def testGenerateMsuUserSummaryWhenNoData(self): """Test _GenerateMsuUserSummary().""" rc = reports_cache.ReportsCache() summary_output = self._GenBaseSummaryOutput(rc) rc._GenerateMsuUserSummary() summary, _ = reports_cache.models.ReportsCache.GetMsuUserSummary( since=None, tmp=True) self.assertEqual(summary_output, summary)
def testGenerateMsuUserSummaryWhenNoData(self): """Test _GenerateMsuUserSummary().""" rc = reports_cache.ReportsCache() reports = None cursor = None summary = None summary_output = self._GenBaseSummaryOutput(rc) lquery = self.mox.CreateMockAnything() self.mox.StubOutWithMock(reports_cache.models, 'ComputerMSULog') self.mox.StubOutWithMock(reports_cache.models, 'KeyValueCache') self.mox.StubOutWithMock(reports_cache.models, 'ReportsCache') self.mox.StubOutWithMock(reports_cache.gae_util, 'ObtainLock') self.mox.StubOutWithMock(reports_cache.gae_util, 'ReleaseLock') reports_cache.gae_util.ObtainLock('msu_user_summary_lock').AndReturn( True) reports_cache.models.ComputerMSULog.all().AndReturn(lquery) reports_cache.models.KeyValueCache.MemcacheWrappedGet( 'msu_user_summary_cursor', 'text_value').AndReturn(cursor) reports_cache.models.ReportsCache.GetMsuUserSummary( since=None, tmp=True).AndReturn((summary, None)) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_output, since=None, tmp=True).AndReturn(None) lquery.fetch(rc.FETCH_LIMIT).AndReturn(reports) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_output, since=None).AndReturn(None) reports_cache.models.KeyValueCache.DeleteMemcacheWrap( 'msu_user_summary_cursor', prop_name='text_value') reports_cache.models.ReportsCache.DeleteMsuUserSummary( since=None, tmp=True).AndReturn(None) reports_cache.gae_util.ReleaseLock('msu_user_summary_lock').AndReturn( True) self.mox.ReplayAll() rc._GenerateMsuUserSummary() self.mox.VerifyAll()
def testGenerateMsuUserSummaryWhenLotsDataSlow(self): """Test _GenerateMsuUserSummary().""" rc = reports_cache.ReportsCache() reports_raw = [] user_id = 0 uuid_id = 0 while len(reports_raw) < 501: uuid = 'uuid%d' % uuid_id user = '******' % user_id (dt_a1, dt_a2) = self._GenDatetimes(10) reports_raw.extend([ { 'uuid': uuid, 'mtime': dt_a1, 'event': 'launched', 'user': user }, { 'uuid': uuid, 'mtime': dt_a2, 'event': 'exit_later_clicked', 'user': user }, ]) uuid_id += 1 user_id += 1 reports = [] cursor = None summary = None summary_output = self._GenBaseSummaryOutput(rc) summary_empty = summary_output.copy() reports = self._GenReportsAndSummary(summary_output, reports_raw) lquery = self.mox.CreateMockAnything() self.mox.StubOutWithMock(reports_cache.models, 'ComputerMSULog') self.mox.StubOutWithMock(reports_cache.models, 'KeyValueCache') self.mox.StubOutWithMock(reports_cache.models, 'ReportsCache') self.mox.StubOutWithMock(reports_cache, 'time') self.mox.StubOutWithMock(reports_cache, 'taskqueue') reports_cache.models.ComputerMSULog.all().AndReturn(lquery) reports_cache.models.KeyValueCache.MemcacheWrappedGet( 'msu_user_summary_cursor', 'text_value').AndReturn(cursor) reports_cache.models.ReportsCache.GetMsuUserSummary( since=None, tmp=True).AndReturn((summary, None)) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_empty, since=None, tmp=True).AndReturn(None) reports_cache.time.time().AndReturn(0) lquery.fetch(rc.FETCH_LIMIT).AndReturn(reports) i = 0 last_user = None for report in reports: if last_user != report.user: lquery.cursor().AndReturn('cursor%d' % i) i += 1 last_user = report.user last_user_cursor = 'cursor%d' % (i-1) reports_cache.models.ComputerMSULog.all().AndReturn(lquery) lquery.with_cursor(last_user_cursor).AndReturn(None) reports_cache.time.time().AndReturn(reports_cache.RUNTIME_MAX_SECS + 1) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_output, since=None, tmp=True).AndReturn(None) reports_cache.models.KeyValueCache.MemcacheWrappedSet( 'msu_user_summary_cursor', 'text_value', last_user_cursor).AndReturn(None) reports_cache.taskqueue.add( url='/cron/reports_cache/msu_user_summary', method='GET', countdown=5).AndReturn(None) # second run reports_cache.models.ComputerMSULog.all().AndReturn(lquery) reports_cache.models.KeyValueCache.MemcacheWrappedGet( 'msu_user_summary_cursor', 'text_value').AndReturn(last_user_cursor) reports_cache.models.ReportsCache.GetMsuUserSummary( since=None, tmp=True).AndReturn([summary_output, 'mtime']) lquery.with_cursor(last_user_cursor) reports_cache.time.time().AndReturn(0) lquery.fetch(rc.FETCH_LIMIT).AndReturn(None) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_output, since=None) reports_cache.models.KeyValueCache.DeleteMemcacheWrap( 'msu_user_summary_cursor', prop_name='text_value') reports_cache.models.ReportsCache.DeleteMsuUserSummary( since=None, tmp=True).AndReturn(None) self.mox.ReplayAll() rc._GenerateMsuUserSummary() rc._GenerateMsuUserSummary() self.mox.VerifyAll()
def testGenerateMsuUserSummaryWhenDataFetchBoundary(self): """Test _GenerateMsuUserSummary().""" rc = reports_cache.ReportsCache() (dt_a1, dt_a2) = self._GenDatetimes(10) reports_raw = [ { 'uuid': 'u1', 'mtime': dt_a1, 'event': 'launched', 'user': '******' }, { 'uuid': 'u1', 'mtime': dt_a2, 'event': 'exit_later_clicked', 'user': '******' }, { 'uuid': 'u2', 'mtime': dt_a1, 'event': 'launched', 'user': '******' }, { 'uuid': 'u2', 'mtime': dt_a2, 'event': 'exit_later_clicked', 'user': '******' }, ] rc.FETCH_LIMIT = len(reports_raw) reports = [] cursor = None summary = None summary_output = self._GenBaseSummaryOutput(rc) summary_empty = summary_output.copy() reports = self._GenReportsAndSummary(summary_output, reports_raw) # adjust for intentional buffer boundary dropping user 'b' for report_raw in reports_raw: if report_raw['user'] == 'b': summary_output[report_raw['event']] -= 1 summary_output['total_events'] -= 1 summary_output['total_users'] -= 1 summary_output['total_uuids'] -= 1 summary_output['total_users_2_events'] -= 1 lquery = self.mox.CreateMockAnything() self.mox.StubOutWithMock(reports_cache.models, 'ComputerMSULog') self.mox.StubOutWithMock(reports_cache.models, 'KeyValueCache') self.mox.StubOutWithMock(reports_cache.models, 'ReportsCache') reports_cache.models.ComputerMSULog.all().AndReturn(lquery) reports_cache.models.KeyValueCache.MemcacheWrappedGet( 'msu_user_summary_cursor', 'text_value').AndReturn(cursor) reports_cache.models.ReportsCache.GetMsuUserSummary( since=None, tmp=True).AndReturn((summary, None)) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_empty, since=None, tmp=True).AndReturn(None) lquery.fetch(rc.FETCH_LIMIT).AndReturn(reports) i = 0 last_user = None for report in reports: if last_user != report.user: lquery.cursor().AndReturn('cursor%d' % i) i += 1 last_user = report.user reports_cache.models.ComputerMSULog.all().AndReturn(lquery) lquery.with_cursor('cursor%d' % (i-2)).AndReturn(None) # prev cursor lquery.fetch(rc.FETCH_LIMIT).AndReturn(None) # stop test reports_cache.models.ReportsCache.SetMsuUserSummary( summary_output, since=None).AndReturn(None) reports_cache.models.KeyValueCache.DeleteMemcacheWrap( 'msu_user_summary_cursor', prop_name='text_value') reports_cache.models.ReportsCache.DeleteMsuUserSummary( since=None, tmp=True).AndReturn(None) self.mox.ReplayAll() rc._GenerateMsuUserSummary() self.mox.VerifyAll()
def testGenerateMsuUserSummaryWhenLotsData(self): """Test _GenerateMsuUserSummary().""" rc = reports_cache.ReportsCache() reports_raw = [] user_id = 0 uuid_id = 0 while len(reports_raw) < 501: uuid = 'uuid%d' % uuid_id user = '******' % user_id (dt_a1, dt_a2) = self._GenDatetimes(10) reports_raw.extend([ { 'uuid': uuid, 'mtime': dt_a1, 'event': 'launched', 'user': user }, { 'uuid': uuid, 'mtime': dt_a2, 'event': 'exit_later_clicked', 'user': user }, ]) uuid_id += 1 user_id += 1 reports = [] cursor = None summary = None summary_output = self._GenBaseSummaryOutput(rc) summary_empty = summary_output.copy() reports = self._GenReportsAndSummary(summary_output, reports_raw) lquery = self.mox.CreateMockAnything() self.mox.StubOutWithMock(reports_cache.models, 'ComputerMSULog') self.mox.StubOutWithMock(reports_cache.models, 'KeyValueCache') self.mox.StubOutWithMock(reports_cache.models, 'ReportsCache') self.mox.StubOutWithMock(reports_cache.gae_util, 'ObtainLock') self.mox.StubOutWithMock(reports_cache.gae_util, 'ReleaseLock') reports_cache.gae_util.ObtainLock('msu_user_summary_lock').AndReturn( True) reports_cache.models.ComputerMSULog.all().AndReturn(lquery) reports_cache.models.KeyValueCache.MemcacheWrappedGet( 'msu_user_summary_cursor', 'text_value').AndReturn(cursor) reports_cache.models.ReportsCache.GetMsuUserSummary( since=None, tmp=True).AndReturn((summary, None)) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_empty, since=None, tmp=True).AndReturn(None) lquery.fetch(rc.FETCH_LIMIT).AndReturn(reports) i = 0 last_user = None for report in reports: if last_user != report.user: lquery.cursor().AndReturn('cursor%d' % i) i += 1 last_user = report.user reports_cache.models.ComputerMSULog.all().AndReturn(lquery) lquery.with_cursor('cursor%d' % (i - 1)).AndReturn(None) lquery.fetch(rc.FETCH_LIMIT).AndReturn(None) reports_cache.models.ReportsCache.SetMsuUserSummary( summary_output, since=None).AndReturn(None) reports_cache.models.KeyValueCache.DeleteMemcacheWrap( 'msu_user_summary_cursor', prop_name='text_value') reports_cache.models.ReportsCache.DeleteMsuUserSummary( since=None, tmp=True).AndReturn(None) reports_cache.gae_util.ReleaseLock('msu_user_summary_lock').AndReturn( True) self.mox.ReplayAll() rc._GenerateMsuUserSummary() self.mox.VerifyAll()