Esempio n. 1
0
  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()
Esempio n. 2
0
  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)
Esempio n. 3
0
    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()
Esempio n. 4
0
  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()
Esempio n. 5
0
  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()
Esempio n. 6
0
    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()