def test_user_logged(self): user_id = random.randrange(0, 100000) ls = LoginMetrics(self.date) # Initial State self.assertEquals(LoginMetrics.FLAG_DOWN, ls.get_flag(user_id)) # After login ls.set_flag(user_id) self.assertEquals(LoginMetrics.FLAG_UP, ls.get_flag(user_id))
def test_login_user(self): user_id = random.randrange(0, 100000) ls = LoginMetrics(self.date) # Initial State bit = self.r.getbit(ls.key, user_id) self.assertEquals(LoginMetrics.FLAG_DOWN, bit) # After login ls.set_flag(user_id) bit = self.r.getbit(ls.key, user_id) self.assertEquals(LoginMetrics.FLAG_UP, bit)
def test_user_login_autodate(self): user = random.randrange(0, 100000) date = datetime_now_utc().strftime(self.DATE_FORMAT) key = self.LOGIN_METRICS_FORMAT.format(date) self.assertEquals(LoginMetrics.FLAG_DOWN, self.r.getbit(key, user)) ls = LoginMetrics() ls.save_user_login(user) self.assertEquals(LoginMetrics.FLAG_UP, self.r.getbit(key, user))
def test_users_logged(self): users_ids = [random.randrange(0, 100000) for i in range(100)] ls = LoginMetrics(self.date) # Initial State for i in users_ids: self.assertEquals(LoginMetrics.FLAG_DOWN, ls.get_flag(i)) # After login ls.set_flags(users_ids) correct_list = [LoginMetrics.FLAG_UP for i in range(len(users_ids))] self.assertEquals(correct_list, ls.get_flags(users_ids))
def test_login_users(self): users_ids = [random.randrange(0, 100000) for i in range(100)] ls = LoginMetrics(self.date) # Initial State for i in users_ids: bit = self.r.getbit(ls.key, i) self.assertEquals(LoginMetrics.FLAG_DOWN, bit) # After login ls.set_flags(users_ids) for i in users_ids: bit = self.r.getbit(ls.key, i) self.assertEquals(LoginMetrics.FLAG_UP, bit)
def test_users_login(self): users_ids = [random.randrange(0, 100000) for i in range(100)] date = datetime_now_utc().strftime(self.DATE_FORMAT) key = self.LOGIN_METRICS_FORMAT.format(date) for i in users_ids: self.assertEquals(LoginMetrics.FLAG_DOWN, self.r.getbit(key, i)) ls = LoginMetrics(datetime_now_utc()) ls.save_users_login(users_ids) for i in users_ids: self.assertEquals(LoginMetrics.FLAG_UP, self.r.getbit(key, i))
def test_xor_operation(self): xor_bitmaps = { "test:xorops:1": (1, 1, 0, 1, 0, 0, 0, 0, 1, 1), "test:xorops:2": (1, 0, 0, 1, 1, 0, 1, 0, 1, 1), "test:xorops:3": (1, 0, 0, 1, 0, 0, 0, 0, 1, 1), "test:xorops:4": (1, 1, 0, 1, 0, 0, 0, 0, 0, 1), } result = (0, 0, 0, 0, 1, 0, 1, 0, 1, 0) # Initial State for key, val in xor_bitmaps.items(): for i in range(len(val)): self.r.setbit(key, i, val[i]) # After login store_key_default = "test:xorops:result" store_key = LoginMetrics.xor_operation(xor_bitmaps.keys(), store_key_default) #Check if the store key is the same self.assertEquals(store_key_default, store_key) for i in range(len(result)): self.assertEquals(result[i], self.r.getbit(store_key, i))
def test_get_bit_from_bitmap(self): bitmap = (1, 1, 0, 1, 0, 0, 0, 0, 1, 1) key = "test:get:result" for i in range(len(bitmap)): self.r.setbit(key, i, bitmap[i]) for i in range(len(bitmap)): self.assertEquals(bitmap[i], LoginMetrics.check_flag(key, i))
def handle(self, *args, **options): max_users = 5000 if len(args) < 1 else int(args[0]) min_users = 0 if len(args) < 2 else int(args[1]) day = None if len(args) < 3 else int(args[2]) # Populate the DB for one day for hour in range(24): # Create the datetime for the key now = datetime_now_utc() if not day: day = now.day date = datetime(year=now.year, month=now.month, day=day, hour=hour) # Get random login users logins = range(random.randrange(min_users, max_users)) users = [random.randrange(min_users, max_users) for i in logins] # Save the users ls = LoginMetrics(date) ls.save_users_login(users)
def test_count_bitmap(self): bitmaps = ( ((1, 1, 0, 1, 0, 0, 0, 0, 1, 1), 5), ((1, 0, 0, 1, 1, 0, 1, 0, 1, 1), 6), ((1, 0, 0, 1, 0, 0, 0, 0, 1, 1), 4), ((1, 1, 0, 1, 0, 0, 0, 0, 0, 1), 4), ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 0), ) for bitmap_result in bitmaps: bitmap = bitmap_result[0] key = "test:{0}:result".format(random.randrange(0, 100000)) good_result = bitmap_result[1] for i in range(len(bitmap)): self.r.setbit(key, i, bitmap[i]) self.assertEquals(good_result, LoginMetrics.count_flags(key))
def test_and_operation_random_result_key(self): and_bitmaps = { "test:andops:1": (1, 1, 0, 1, 0, 0, 0, 0, 1, 1), "test:andops:2": (1, 0, 0, 1, 1, 0, 1, 0, 1, 1), "test:andops:3": (1, 0, 0, 1, 0, 0, 0, 0, 1, 1), "test:andops:4": (1, 1, 0, 1, 0, 0, 0, 0, 0, 1), } result = (1, 0, 0, 1, 0, 0, 0, 0, 0, 1) # Initial State for key, val in and_bitmaps.items(): for i in range(len(val)): self.r.setbit(key, i, val[i]) # After login store_key = LoginMetrics.and_operation(and_bitmaps.keys()) for i in range(len(result)): self.assertEquals(result[i], self.r.getbit(store_key, i))
def test_users_state(self): users_ids = [random.randrange(0, 100000) for i in range(100)] ls = LoginMetrics(self.date) # Initial State for i in users_ids: self.assertEquals(LoginMetrics.FLAG_DOWN, ls.get_flag(i)) # After login ls.set_flags(users_ids) correct_list = [LoginMetrics.FLAG_UP for i in range(len(users_ids))] self.assertEquals(correct_list, ls.get_flags(users_ids)) # take some random users out black_ships = [random.randrange(0, len(users_ids)) for i in range( len(users_ids))] for i in black_ships: ls.unset_flag(users_ids[i]) correct_list[i] = LoginMetrics.FLAG_DOWN # Test again self.assertEquals(correct_list, ls.get_flags(users_ids))
def test_not_bitmap(self): bitmaps = ( ((1, 1, 0, 1, 0, 0, 0, 0, 1, 1), (0, 0, 1, 0, 1, 1, 1, 1, 0, 0)), ((1, 0, 0, 1, 1, 0, 1, 0, 1, 1), (0, 1, 1, 0, 0, 1, 0, 1, 0, 0)), ((1, 0, 0, 1, 0, 0, 0, 0, 1, 1), (0, 1, 1, 0, 1, 1, 1, 1, 0, 0)), ((1, 1, 0, 1, 0, 0, 0, 0, 0, 1), (0, 0, 1, 0, 1, 1, 1, 1, 1, 0)), ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), ) for bitmap_result in bitmaps: bitmap = bitmap_result[0] key = "test:{0}:result".format(random.randrange(0, 100000)) result = bitmap_result[1] for i in range(len(bitmap)): self.r.setbit(key, i, bitmap[i]) # Apply NOT result_key = LoginMetrics.not_operation(key) # Check for i in range(len(result)): self.assertEquals(result[i], self.r.getbit(result_key, i))