comparison idavoll/test/test_gateway.py @ 204:b4bf0a5ce50d

Implement storage facilities for the HTTP gateway. Author: ralphm. Fixes #12. One of the storage facilities is PostgreSQL based, providing persistence.
author Ralph Meijer <ralphm@ik.nu>
date Wed, 16 Jul 2008 06:38:32 +0000
parents e404775b12df
children 274a45d2a5ab
comparison
equal deleted inserted replaced
203:2c46e6664680 204:b4bf0a5ce50d
33 def setUp(self): 33 def setUp(self):
34 self.client = gateway.GatewayClient(baseURI) 34 self.client = gateway.GatewayClient(baseURI)
35 self.client.startService() 35 self.client.startService()
36 36
37 def tearDown(self): 37 def tearDown(self):
38 self.client.stopService() 38 return self.client.stopService()
39 39
40 def test_create(self): 40 def test_create(self):
41 41
42 def cb(response): 42 def cb(response):
43 self.assertIn('uri', response) 43 self.assertIn('uri', response)
91 91
92 d = self.client.create() 92 d = self.client.create()
93 d.addCallback(cb) 93 d.addCallback(cb)
94 return d 94 return d
95 95
96
96 def test_subscribeGetNotification(self): 97 def test_subscribeGetNotification(self):
97 98
98 def onNotification(data, headers): 99 def onNotification(data, headers):
99 self.client.deferred.callback(None) 100 self.client.deferred.callback(None)
100 101
114 d = self.client.create() 115 d = self.client.create()
115 d.addCallback(cb) 116 d.addCallback(cb)
116 d.addCallback(cb2) 117 d.addCallback(cb2)
117 return defer.gatherResults([d, self.client.deferred]) 118 return defer.gatherResults([d, self.client.deferred])
118 119
119 def test_subscribeGetDelayedNotification(self): 120
120 121 def test_subscribeTwiceGetNotification(self):
121 def onNotification(data, headers):
122 self.client.deferred.callback(None)
123
124 def cb(response):
125 xmppURI = response['uri']
126 self.assertNot(self.client.deferred.called)
127 d = self.client.publish(entry, xmppURI)
128 d.addCallback(lambda _: xmppURI)
129 return d
130
131 def cb2(xmppURI):
132 d = self.client.subscribe(xmppURI)
133 return d
134
135
136 self.client.callback = onNotification
137 self.client.deferred = defer.Deferred()
138 d = self.client.create()
139 d.addCallback(cb)
140 d.addCallback(cb2)
141 return defer.gatherResults([d, self.client.deferred])
142
143 def test_subscribeGetDelayedNotification2(self):
144 """
145 Test that subscribing as second results in a notification being sent.
146 """
147 122
148 def onNotification1(data, headers): 123 def onNotification1(data, headers):
149 client1.deferred.callback(None) 124 d = client1.stopService()
150 client1.stopService() 125 d.chainDeferred(client1.deferred)
151 126
152 def onNotification2(data, headers): 127 def onNotification2(data, headers):
153 client2.deferred.callback(None) 128 d = client2.stopService()
154 client2.stopService() 129 d.chainDeferred(client2.deferred)
155 130
156 def cb(response): 131 def cb(response):
157 xmppURI = response['uri'] 132 xmppURI = response['uri']
158 self.assertNot(client1.deferred.called)
159 self.assertNot(client2.deferred.called)
160 d = self.client.publish(entry, xmppURI)
161 d.addCallback(lambda _: xmppURI)
162 return d
163
164 def cb2(xmppURI):
165 d = client1.subscribe(xmppURI) 133 d = client1.subscribe(xmppURI)
166 d.addCallback(lambda _: xmppURI) 134 d.addCallback(lambda _: xmppURI)
167 return d 135 return d
168 136
137 def cb2(xmppURI):
138 d = client2.subscribe(xmppURI)
139 d.addCallback(lambda _: xmppURI)
140 return d
141
169 def cb3(xmppURI): 142 def cb3(xmppURI):
170 d = client2.subscribe(xmppURI) 143 d = self.client.publish(entry, xmppURI)
171 return d 144 return d
145
172 146
173 client1 = gateway.GatewayClient(baseURI, callbackPort=8088) 147 client1 = gateway.GatewayClient(baseURI, callbackPort=8088)
174 client1.startService() 148 client1.startService()
175 client1.callback = onNotification1 149 client1.callback = onNotification1
176 client1.deferred = defer.Deferred() 150 client1.deferred = defer.Deferred()
177 client2 = gateway.GatewayClient(baseURI, callbackPort=8089) 151 client2 = gateway.GatewayClient(baseURI, callbackPort=8089)
178 client2.startService() 152 client2.startService()
179 client2.callback = onNotification2 153 client2.callback = onNotification2
180 client2.deferred = defer.Deferred() 154 client2.deferred = defer.Deferred()
181 155
182
183 d = self.client.create() 156 d = self.client.create()
184 d.addCallback(cb) 157 d.addCallback(cb)
185 d.addCallback(cb2) 158 d.addCallback(cb2)
186 d.addCallback(cb3) 159 d.addCallback(cb3)
187 dl = defer.gatherResults([d, client1.deferred, client2.deferred]) 160 dl = defer.gatherResults([d, client1.deferred, client2.deferred])
188 return dl 161 return dl
189 162
190 163
164 def test_subscribeGetDelayedNotification(self):
165
166 def onNotification(data, headers):
167 self.client.deferred.callback(None)
168
169 def cb(response):
170 xmppURI = response['uri']
171 self.assertNot(self.client.deferred.called)
172 d = self.client.publish(entry, xmppURI)
173 d.addCallback(lambda _: xmppURI)
174 return d
175
176 def cb2(xmppURI):
177 d = self.client.subscribe(xmppURI)
178 return d
179
180
181 self.client.callback = onNotification
182 self.client.deferred = defer.Deferred()
183 d = self.client.create()
184 d.addCallback(cb)
185 d.addCallback(cb2)
186 return defer.gatherResults([d, self.client.deferred])
187
188 def test_subscribeGetDelayedNotification2(self):
189 """
190 Test that subscribing as second results in a notification being sent.
191 """
192
193 def onNotification1(data, headers):
194 client1.deferred.callback(None)
195 client1.stopService()
196
197 def onNotification2(data, headers):
198 client2.deferred.callback(None)
199 client2.stopService()
200
201 def cb(response):
202 xmppURI = response['uri']
203 self.assertNot(client1.deferred.called)
204 self.assertNot(client2.deferred.called)
205 d = self.client.publish(entry, xmppURI)
206 d.addCallback(lambda _: xmppURI)
207 return d
208
209 def cb2(xmppURI):
210 d = client1.subscribe(xmppURI)
211 d.addCallback(lambda _: xmppURI)
212 return d
213
214 def cb3(xmppURI):
215 d = client2.subscribe(xmppURI)
216 return d
217
218 client1 = gateway.GatewayClient(baseURI, callbackPort=8088)
219 client1.startService()
220 client1.callback = onNotification1
221 client1.deferred = defer.Deferred()
222 client2 = gateway.GatewayClient(baseURI, callbackPort=8089)
223 client2.startService()
224 client2.callback = onNotification2
225 client2.deferred = defer.Deferred()
226
227 d = self.client.create()
228 d.addCallback(cb)
229 d.addCallback(cb2)
230 d.addCallback(cb3)
231 dl = defer.gatherResults([d, client1.deferred, client2.deferred])
232 return dl
233
234
191 def test_subscribeNonExisting(self): 235 def test_subscribeNonExisting(self):
192 def cb(err): 236 def cb(err):
193 self.assertEqual('403', err.status) 237 self.assertEqual('403', err.status)
194 238
195 d = self.client.subscribe('xmpp:%s?node=test' % componentJID) 239 d = self.client.subscribe('xmpp:%s?node=test' % componentJID)