2323import time
2424
2525from pulsar import Client
26+ from pulsar .schema .schema import StringSchema
2627
2728class TableViewTest (TestCase ):
2829
@@ -38,14 +39,14 @@ def test_get(self):
3839 self .assertEqual (len (table_view ), 0 )
3940
4041 producer = self ._client .create_producer (topic )
41- producer .send ('value-0' . encode () , partition_key = 'key-0' )
42+ producer .send (b 'value-0' , partition_key = 'key-0' )
4243 producer .send (b'\xba \xd0 \xba \xd0 ' , partition_key = 'key-1' ) # an invalid UTF-8 bytes
4344
4445 self ._wait_for_assertion (lambda : self .assertEqual (len (table_view ), 2 ))
4546 self .assertEqual (table_view .get ('key-0' ), b'value-0' )
4647 self .assertEqual (table_view .get ('key-1' ), b'\xba \xd0 \xba \xd0 ' )
4748
48- producer .send ('value-1' . encode () , partition_key = 'key-0' )
49+ producer .send (b 'value-1' , partition_key = 'key-0' )
4950 self ._wait_for_assertion (lambda : self .assertEqual (table_view .get ('key-0' ), b'value-1' ))
5051
5152 producer .close ()
@@ -55,15 +56,15 @@ def test_for_each(self):
5556 topic = f'table_view_test_for_each-{ time .time ()} '
5657 table_view = self ._client .create_table_view (topic )
5758 producer = self ._client .create_producer (topic )
58- producer .send ('value-0' . encode () , partition_key = 'key-0' )
59- producer .send ('value-1' . encode () , partition_key = 'key-1' )
59+ producer .send (b 'value-0' , partition_key = 'key-0' )
60+ producer .send (b 'value-1' , partition_key = 'key-1' )
6061 self ._wait_for_assertion (lambda : self .assertEqual (len (table_view ), 2 ))
6162
6263 d = dict ()
6364 table_view .for_each (lambda key , value : d .__setitem__ (key , value ))
6465 self .assertEqual (d , {
65- 'key-0' : 'value-0' ,
66- 'key-1' : 'value-1'
66+ 'key-0' : b 'value-0' ,
67+ 'key-1' : b 'value-1'
6768 })
6869
6970 def listener (key : str , value : str ):
@@ -75,20 +76,40 @@ def listener(key: str, value: str):
7576 d .clear ()
7677 table_view .for_each_and_listen (listener )
7778 self .assertEqual (d , {
78- 'key-0' : 'value-0' ,
79- 'key-1' : 'value-1'
79+ 'key-0' : b 'value-0' ,
80+ 'key-1' : b 'value-1'
8081 })
8182
82- producer .send ('value-0-new' . encode () , partition_key = 'key-0' )
83- producer .send ('' . encode () , partition_key = 'key-1' )
84- producer .send ('value-2' . encode () , partition_key = 'key-2' )
83+ producer .send (b 'value-0-new' , partition_key = 'key-0' )
84+ producer .send (b'' , partition_key = 'key-1' )
85+ producer .send (b 'value-2' , partition_key = 'key-2' )
8586 def assert_latest_values ():
8687 self .assertEqual (d , {
87- 'key-0' : 'value-0-new' ,
88- 'key-2' : 'value-2'
88+ 'key-0' : b 'value-0-new' ,
89+ 'key-2' : b 'value-2'
8990 })
9091 self ._wait_for_assertion (assert_latest_values )
9192
93+ def test_schema (self ):
94+ topic = f'table_view_test_schema-{ time .time ()} '
95+ table_view = self ._client .create_table_view (topic , schema = StringSchema ())
96+ producer = self ._client .create_producer (topic , schema = StringSchema ())
97+ producer .send ('value' , partition_key = 'key' )
98+
99+ self ._wait_for_assertion (lambda : self .assertEqual (table_view .get ('key' ), 'value' ))
100+ self .assertEqual (table_view .get ('missed-key' ), None )
101+
102+ entries = dict ()
103+ table_view .for_each (lambda key , value : entries .__setitem__ (key , value ))
104+ self .assertEqual (entries , {'key' : 'value' })
105+
106+ entries .clear ()
107+ table_view .for_each_and_listen (lambda key , value : entries .__setitem__ (key , value ))
108+ self .assertEqual (entries , {'key' : 'value' })
109+
110+ producer .send ('new-value' , partition_key = 'key' )
111+ self ._wait_for_assertion (lambda : self .assertEqual (table_view .get ('key' ), 'new-value' ))
112+
92113 def _wait_for_assertion (self , assertion : Callable , timeout = 5 ) -> None :
93114 start_time = time .time ()
94115 while time .time () - start_time < timeout :
0 commit comments