23
23
import time
24
24
25
25
from pulsar import Client
26
+ from pulsar .schema .schema import StringSchema
26
27
27
28
class TableViewTest (TestCase ):
28
29
@@ -38,14 +39,14 @@ def test_get(self):
38
39
self .assertEqual (len (table_view ), 0 )
39
40
40
41
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' )
42
43
producer .send (b'\xba \xd0 \xba \xd0 ' , partition_key = 'key-1' ) # an invalid UTF-8 bytes
43
44
44
45
self ._wait_for_assertion (lambda : self .assertEqual (len (table_view ), 2 ))
45
46
self .assertEqual (table_view .get ('key-0' ), b'value-0' )
46
47
self .assertEqual (table_view .get ('key-1' ), b'\xba \xd0 \xba \xd0 ' )
47
48
48
- producer .send ('value-1' . encode () , partition_key = 'key-0' )
49
+ producer .send (b 'value-1' , partition_key = 'key-0' )
49
50
self ._wait_for_assertion (lambda : self .assertEqual (table_view .get ('key-0' ), b'value-1' ))
50
51
51
52
producer .close ()
@@ -55,15 +56,15 @@ def test_for_each(self):
55
56
topic = f'table_view_test_for_each-{ time .time ()} '
56
57
table_view = self ._client .create_table_view (topic )
57
58
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' )
60
61
self ._wait_for_assertion (lambda : self .assertEqual (len (table_view ), 2 ))
61
62
62
63
d = dict ()
63
64
table_view .for_each (lambda key , value : d .__setitem__ (key , value ))
64
65
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'
67
68
})
68
69
69
70
def listener (key : str , value : str ):
@@ -75,20 +76,40 @@ def listener(key: str, value: str):
75
76
d .clear ()
76
77
table_view .for_each_and_listen (listener )
77
78
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'
80
81
})
81
82
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' )
85
86
def assert_latest_values ():
86
87
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'
89
90
})
90
91
self ._wait_for_assertion (assert_latest_values )
91
92
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
+
92
113
def _wait_for_assertion (self , assertion : Callable , timeout = 5 ) -> None :
93
114
start_time = time .time ()
94
115
while time .time () - start_time < timeout :
0 commit comments