def test_fanout_main_task(self): tweet = self.create_tweet(self.linghu, 'tweet 1') if GateKeeper.is_switch_on('switch_newsfeed_to_hbase'): created_at = tweet.timestamp else: created_at = tweet.created_at self.create_friendship(self.dongxie, self.linghu) msg = fanout_newsfeeds_main_task(tweet.id, created_at, self.linghu.id) self.assertEqual(msg, '1 newsfeeds going to fanout, 1 batches created.') self.assertEqual(1 + 1, NewsFeedService.count()) cached_list = NewsFeedService.get_cached_newsfeeds(self.linghu.id) self.assertEqual(len(cached_list), 1) for i in range(2): user = self.create_user('user{}'.format(i)) self.create_friendship(user, self.linghu) tweet = self.create_tweet(self.linghu, 'tweet 2') if GateKeeper.is_switch_on('switch_newsfeed_to_hbase'): created_at = tweet.timestamp else: created_at = tweet.created_at msg = fanout_newsfeeds_main_task(tweet.id, created_at, self.linghu.id) self.assertEqual(msg, '3 newsfeeds going to fanout, 1 batches created.') self.assertEqual(4 + 2, NewsFeedService.count()) cached_list = NewsFeedService.get_cached_newsfeeds(self.linghu.id) self.assertEqual(len(cached_list), 2) user = self.create_user('another user') self.create_friendship(user, self.linghu) tweet = self.create_tweet(self.linghu, 'tweet 3') if GateKeeper.is_switch_on('switch_newsfeed_to_hbase'): created_at = tweet.timestamp else: created_at = tweet.created_at msg = fanout_newsfeeds_main_task(tweet.id, created_at, self.linghu.id) self.assertEqual(msg, '4 newsfeeds going to fanout, 2 batches created.') self.assertEqual(8 + 3, NewsFeedService.count()) cached_list = NewsFeedService.get_cached_newsfeeds(self.linghu.id) self.assertEqual(len(cached_list), 3) cached_list = NewsFeedService.get_cached_newsfeeds(self.dongxie.id) self.assertEqual(len(cached_list), 3)
def test_redis_list_limit(self): list_limit = settings.REDIS_LIST_LENGTH_LIMIT page_size = EndlessPagination.page_size users = [self.create_user('user{}'.format(i)) for i in range(5)] newsfeeds = [] for i in range(list_limit + page_size): tweet = self.create_tweet(user=users[i % 5], content='feed{}'.format(i)) feed = self.create_newsfeed(self.linghu, tweet) newsfeeds.append(feed) newsfeeds = newsfeeds[::-1] # only cached list_limit objects cached_newsfeeds = NewsFeedService.get_cached_newsfeeds(self.linghu.id) self.assertEqual(len(cached_newsfeeds), list_limit) self.assertEqual(NewsFeedService.count(self.linghu.id), list_limit + page_size) results = self._paginate_to_get_newsfeeds(self.linghu_client) self.assertEqual(len(results), list_limit + page_size) for i in range(list_limit + page_size): self.assertEqual(newsfeeds[i].created_at, results[i]['created_at']) # a followed user create a new tweet self.create_friendship(self.linghu, self.dongxie) new_tweet = self.create_tweet(self.dongxie, 'a new tweet') NewsFeedService.fanout_to_followers(new_tweet) def _test_newsfeeds_after_new_feed_pushed(): results = self._paginate_to_get_newsfeeds(self.linghu_client) self.assertEqual(len(results), list_limit + page_size + 1) self.assertEqual(results[0]['tweet']['id'], new_tweet.id) for i in range(list_limit + page_size): self.assertEqual(newsfeeds[i].created_at, results[i + 1]['created_at']) _test_newsfeeds_after_new_feed_pushed() # cache expired self.clear_cache() _test_newsfeeds_after_new_feed_pushed()