Exemple #1
0
  def _ValidateUpdateFollowed(self, user_id, viewpoint_id, old_timestamp, new_timestamp):
    """Validate that an older Followed record was deleted and a newer created."""
    if old_timestamp is not None and \
       Followed._TruncateToDay(new_timestamp) > Followed._TruncateToDay(old_timestamp):
      db_key = DBKey(user_id, Followed.CreateSortKey(viewpoint_id, old_timestamp))
      self.ValidateDeleteDBObject(Followed, db_key)

    self.ValidateCreateDBObject(Followed,
                                user_id=user_id,
                                viewpoint_id=viewpoint_id,
                                sort_key=Followed.CreateSortKey(viewpoint_id, new_timestamp),
                                date_updated=Followed._TruncateToDay(new_timestamp))
Exemple #2
0
    def _Validate(follower_id, viewpoint_id, last_updated):
      sort_key = Followed.CreateSortKey(viewpoint_id, last_updated)
      self._validator.ValidateCreateDBObject(Followed,
                                             user_id=follower_id,
                                             sort_key=sort_key,
                                             date_updated=Followed._TruncateToDay(last_updated),
                                             viewpoint_id=viewpoint_id)

      invalidate = NotificationManager._CreateViewpointInvalidation(viewpoint_id)
      self._validator.ValidateNotification('dbchk add_followed',
                                           follower_id,
                                           self._op_dict,
                                           invalidate)
Exemple #3
0
    def _Validate(viewpoint_id):
      self._validator.ValidateDeleteDBObject(Follower, DBKey(self._user.user_id, viewpoint_id))
      self._validator.ValidateDeleteDBObject(Follower, DBKey(self._user2.user_id, viewpoint_id))

      sort_key = Followed.CreateSortKey(viewpoint_id, 0)
      self._validator.ValidateDeleteDBObject(Followed, DBKey(self._user.user_id, sort_key))
      self._validator.ValidateDeleteDBObject(Followed, DBKey(self._user2.user_id, sort_key))

      self._validator.ValidateDeleteDBObject(Viewpoint, viewpoint_id)
Exemple #4
0
  def _CreateTestViewpoint(self, viewpoint_id, user_id, follower_ids, delete_followed=False):
    """Create viewpoint_id for testing purposes."""
    vp_dict = {'viewpoint_id': viewpoint_id,
               'user_id': user_id,
               'timestamp': util._TEST_TIME,
               'last_updated': util._TEST_TIME,
               'type': Viewpoint.EVENT}
    viewpoint, _ = self._RunAsync(Viewpoint.CreateNewWithFollowers, self._client, follower_ids, **vp_dict)

    if delete_followed:
      for f_id in [user_id] + follower_ids:
        sort_key = Followed.CreateSortKey(viewpoint_id, util._TEST_TIME)
        followed = self._RunAsync(Followed.Query, self._client, f_id, sort_key, None)
        self._RunAsync(followed.Delete, self._client)

    return viewpoint
Exemple #5
0
  def testMissingFollowed(self):
    """Verifies detection and repair of missing Followed records."""
    def _Validate(follower_id, viewpoint_id, last_updated):
      sort_key = Followed.CreateSortKey(viewpoint_id, last_updated)
      self._validator.ValidateCreateDBObject(Followed,
                                             user_id=follower_id,
                                             sort_key=sort_key,
                                             date_updated=Followed._TruncateToDay(last_updated),
                                             viewpoint_id=viewpoint_id)

      invalidate = NotificationManager._CreateViewpointInvalidation(viewpoint_id)
      self._validator.ValidateNotification('dbchk add_followed',
                                           follower_id,
                                           self._op_dict,
                                           invalidate)

    # Remove Followed record from default viewpoint.
    sort_key = Followed.CreateSortKey(self._user.private_vp_id, util._TEST_TIME)
    followed = self._RunAsync(Followed.Query, self._client, self._user.user_id, sort_key, None)
    self._RunAsync(followed.Delete, self._client)

    # Create non-default viewpoint and change last_updated to "orphan" followed records.
    viewpoint = self._CreateTestViewpoint('vp1', self._user.user_id, [self._user2.user_id])
    viewpoint.last_updated += constants.SECONDS_PER_DAY
    self._RunAsync(viewpoint.Update, self._client)
    self._RunAsync(Activity.CreateAddFollowers, self._client, self._user.user_id, 'vp1', 'a1',
                   time.time(), 0, [self._user2.user_id])

    self._RunAsync(self._checker.CheckAllViewpoints)

    # Default viewpoints created by DBBaseTestCase are missing Followed records.
    corruption_text = \
      '  ---- viewpoint v-F- ----\n' \
      '  missing followed (1 instance)\n' \
      '\n' \
      '  ---- viewpoint vp1 ----\n' \
      '  missing followed (2 instances)\n' \
      '\n' \
      'python dbchk.py --devbox --repair=True --viewpoints=v-F-,vp1'

    self.assertEqual(self._checker._email_args['text'],
                     'Found corruption(s) in database:\n\n%s' % corruption_text)

    self._RunDbChk({'viewpoints': ['vp1', 'v-F-'], 'repair': True})
    _Validate(self._user.user_id, 'vp1', util._TEST_TIME)
    _Validate(self._user.user_id, 'v-F-', util._TEST_TIME)
 def _OnDeleteFollower():
     Followed.VisitRange(client, options.options.user_id, None, None,
                         _OnQueryFollowed, _DoneQueryFollowed)