def test_subscribe(self): rnd = random.Random(45387) uncompressed_data = [ _random_string(rnd, 1000), #0 _random_string(rnd, 6000), #1 c2-3 c-4 c5-7 _random_string(rnd, 7000), #2 7000 _random_string(rnd, 4000), #3 11000 4000 _random_string(rnd, 9000), #4 20000 13000 _random_string(rnd, 9000), #5 29000 22000 _random_string(rnd, 4000), #6 33000 26000 4000 _random_string(rnd, 10000), #7 36000 14000 _random_string(rnd, 5000), #8 19000 _random_string(rnd, 4000), #9 23000 ] stream = _MockStream('test/stream/path') props = ClientPropertiesFactory.create( \ streaming=True, encoding=ClientProperties.ENCODING_ZLIB) d = ztreamy.dispatchers.ZlibDispatcher(stream, props) clients = [_MockClient(properties=props) for _ in range(8)] d.dispatch(_MockEventsPack(uncompressed_data[0])) self.assertEqual(len(d.groups), 1) d.subscribe(clients[0]) d.subscribe(clients[1]) d.dispatch(_MockEventsPack(uncompressed_data[1])) self.assertEqual(len(d.groups), 1) d.subscribe(clients[2]) d.subscribe(clients[3]) d.dispatch(_MockEventsPack(uncompressed_data[2])) self.assertEqual(len(d.groups), 2) d.subscribe(clients[4]) d.dispatch(_MockEventsPack(uncompressed_data[3])) self.assertEqual(len(d.groups), 3) d.dispatch(_MockEventsPack(uncompressed_data[4])) self.assertEqual(len(d.groups), 3) d.dispatch(_MockEventsPack(uncompressed_data[5])) d.subscribe(clients[5]) d.subscribe(clients[6]) d.subscribe(clients[7]) d.dispatch(_MockEventsPack(uncompressed_data[6])) self.assertEqual(len(d.groups), 4) d.dispatch(_MockEventsPack(uncompressed_data[7])) self.assertEqual(len(d.groups), 3) # merge c0-3 d.dispatch(_MockEventsPack(uncompressed_data[8])) self.assertEqual(len(d.groups), 2) # merge c0-4 d.dispatch(_MockEventsPack(uncompressed_data[9])) self.assertEqual(len(d.groups), 2) data_c0_1 = ''.join(uncompressed_data[1:]) self.assertEqual(clients[0].unzlib_sent_data(), data_c0_1) self.assertEqual(clients[1].unzlib_sent_data(), data_c0_1) data_c2_3 = ''.join(uncompressed_data[2:]) self.assertEqual(clients[2].unzlib_sent_data(), data_c2_3) self.assertEqual(clients[3].unzlib_sent_data(), data_c2_3) data_c4 = ''.join(uncompressed_data[3:]) self.assertEqual(clients[4].unzlib_sent_data(), data_c4) data_c5_7 = ''.join(uncompressed_data[6:]) self.assertEqual(clients[5].unzlib_sent_data(), data_c5_7) self.assertEqual(clients[6].unzlib_sent_data(), data_c5_7) self.assertEqual(clients[7].unzlib_sent_data(), data_c5_7)
def test_zlib_fresh_client(self): props = ClientPropertiesFactory.create( \ streaming=True, encoding=ClientProperties.ENCODING_ZLIB) group = SubscriptionGroup(props) serialization = props.serialization client = _MockClient() group.subscribe(client) events1 = _MockEventsPack(['This is event 1', 'Another event']) events2 = _MockEventsPack(['This is event 3', 'And the last event']) group.dispatch(events1) self.assertEqual(_zlib_decompress_part(client.sent_data), events1.serialize(serialization)) group.dispatch(events2) self.assertEqual(_zlib_decompress_part(client.sent_data), (events1.serialize(serialization) + events2.serialize(serialization)))
def test_zlib_client_with_last_seen(self): props = ClientPropertiesFactory.create( \ streaming=True, encoding=ClientProperties.ENCODING_ZLIB) group = SubscriptionGroup(props) serialization = props.serialization client = _MockClient() initial_data = 'This is a pack of initial data.' client.send(ztreamy.dispatchers.compress_zlib(initial_data)) group.subscribe(client) events1 = _MockEventsPack(['This is event 1', 'Another event']) events2 = _MockEventsPack(['This is event 3', 'And the last event']) self.assertEqual(_zlib_decompress_part(client.sent_data), initial_data) group.dispatch(events1) self.assertEqual(_zlib_decompress_part(client.sent_data), (initial_data + events1.serialize(serialization))) group.dispatch(events2) self.assertEqual(_zlib_decompress_part(client.sent_data), (initial_data + events1.serialize(serialization) + events2.serialize(serialization)))