Skip to content

Commit 33ff6c8

Browse files
author
Jon Wayne Parrott
committed
Updating datastore samples to use eventually consistent helper (#331)
Change-Id: I3a0404b354ff01530de07a6227a0f34b9aa9edcf
1 parent b449a55 commit 33ff6c8

File tree

2 files changed

+98
-91
lines changed

2 files changed

+98
-91
lines changed

datastore/api/snippets_test.py

+85-84
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111
# See the License for the specific language governing permissions and
1212
# limitations under the License.
1313

14-
import time
15-
1614
from gcloud import datastore
15+
from gcp.testing import eventually_consistent
1716
from gcp.testing.flaky import flaky
1817
import pytest
1918
import snippets
@@ -28,17 +27,8 @@ def __init__(self, *args, **kwargs):
2827
def cleanup(self):
2928
with self.batch():
3029
self.delete_multi(
31-
[x.key for x in self.entities_to_delete] +
32-
self.keys_to_delete)
33-
34-
35-
# This is pretty hacky, but make datastore wait 1s after any
36-
# put operation to in order to account for eventual consistency.
37-
class WaitingClient(CleanupClient):
38-
def put_multi(self, *args, **kwargs):
39-
result = super(WaitingClient, self).put_multi(*args, **kwargs)
40-
time.sleep(1)
41-
return result
30+
list(set([x.key for x in self.entities_to_delete])) +
31+
list(set(self.keys_to_delete)))
4232

4333

4434
@pytest.yield_fixture
@@ -48,13 +38,6 @@ def client(cloud_config):
4838
client.cleanup()
4939

5040

51-
@pytest.yield_fixture
52-
def waiting_client(cloud_config):
53-
client = WaitingClient(cloud_config.project)
54-
yield client
55-
client.cleanup()
56-
57-
5841
@flaky
5942
class TestDatastoreSnippets:
6043
# These tests mostly just test the absence of exceptions.
@@ -118,20 +101,23 @@ def test_batch_lookup(self, client):
118101
def test_batch_delete(self, client):
119102
snippets.batch_delete(client)
120103

121-
def test_unindexed_property_query(self, waiting_client):
122-
tasks = snippets.unindexed_property_query(waiting_client)
123-
waiting_client.entities_to_delete.extend(tasks)
104+
@eventually_consistent.mark
105+
def test_unindexed_property_query(self, client):
106+
tasks = snippets.unindexed_property_query(client)
107+
client.entities_to_delete.extend(tasks)
124108
assert tasks
125109

126-
def test_basic_query(self, waiting_client):
127-
tasks = snippets.basic_query(waiting_client)
128-
waiting_client.entities_to_delete.extend(tasks)
110+
@eventually_consistent.mark
111+
def test_basic_query(self, client):
112+
tasks = snippets.basic_query(client)
113+
client.entities_to_delete.extend(tasks)
129114
assert tasks
130115

131-
def test_projection_query(self, waiting_client):
132-
priorities, percents = snippets.projection_query(waiting_client)
133-
waiting_client.entities_to_delete.extend(
134-
waiting_client.query(kind='Task').fetch())
116+
@eventually_consistent.mark
117+
def test_projection_query(self, client):
118+
priorities, percents = snippets.projection_query(client)
119+
client.entities_to_delete.extend(
120+
client.query(kind='Task').fetch())
135121
assert priorities
136122
assert percents
137123

@@ -143,63 +129,74 @@ def test_ancestor_query(self, client):
143129
def test_run_query(self, client):
144130
snippets.run_query(client)
145131

146-
def test_cursor_paging(self, waiting_client):
132+
def test_cursor_paging(self, client):
147133
for n in range(6):
148-
waiting_client.entities_to_delete.append(
149-
snippets.insert(waiting_client))
150-
151-
page_one, cursor_one, page_two, cursor_two = snippets.cursor_paging(
152-
waiting_client)
153-
154-
assert len(page_one) == 5
155-
assert len(page_two) == 1
156-
assert cursor_one
157-
assert cursor_two
158-
159-
def test_property_filter(self, waiting_client):
160-
tasks = snippets.property_filter(waiting_client)
161-
waiting_client.entities_to_delete.extend(tasks)
134+
client.entities_to_delete.append(
135+
snippets.insert(client))
136+
137+
@eventually_consistent.call
138+
def _():
139+
results = snippets.cursor_paging(client)
140+
page_one, cursor_one, page_two, cursor_two = results
141+
142+
assert len(page_one) == 5
143+
assert len(page_two) == 1
144+
assert cursor_one
145+
assert cursor_two
146+
147+
@eventually_consistent.mark
148+
def test_property_filter(self, client):
149+
tasks = snippets.property_filter(client)
150+
client.entities_to_delete.extend(tasks)
162151
assert tasks
163152

164-
def test_composite_filter(self, waiting_client):
165-
tasks = snippets.composite_filter(waiting_client)
166-
waiting_client.entities_to_delete.extend(tasks)
153+
@eventually_consistent.mark
154+
def test_composite_filter(self, client):
155+
tasks = snippets.composite_filter(client)
156+
client.entities_to_delete.extend(tasks)
167157
assert tasks
168158

169-
def test_key_filter(self, waiting_client):
170-
tasks = snippets.key_filter(waiting_client)
171-
waiting_client.entities_to_delete.extend(tasks)
159+
@eventually_consistent.mark
160+
def test_key_filter(self, client):
161+
tasks = snippets.key_filter(client)
162+
client.entities_to_delete.extend(tasks)
172163
assert tasks
173164

174-
def test_ascending_sort(self, waiting_client):
175-
tasks = snippets.ascending_sort(waiting_client)
176-
waiting_client.entities_to_delete.extend(tasks)
165+
@eventually_consistent.mark
166+
def test_ascending_sort(self, client):
167+
tasks = snippets.ascending_sort(client)
168+
client.entities_to_delete.extend(tasks)
177169
assert tasks
178170

179-
def test_descending_sort(self, waiting_client):
180-
tasks = snippets.descending_sort(waiting_client)
181-
waiting_client.entities_to_delete.extend(tasks)
171+
@eventually_consistent.mark
172+
def test_descending_sort(self, client):
173+
tasks = snippets.descending_sort(client)
174+
client.entities_to_delete.extend(tasks)
182175
assert tasks
183176

184-
def test_multi_sort(self, waiting_client):
185-
tasks = snippets.multi_sort(waiting_client)
186-
waiting_client.entities_to_delete.extend(tasks)
177+
@eventually_consistent.mark
178+
def test_multi_sort(self, client):
179+
tasks = snippets.multi_sort(client)
180+
client.entities_to_delete.extend(tasks)
187181
assert tasks
188182

189-
def test_keys_only_query(self, waiting_client):
190-
keys = snippets.keys_only_query(waiting_client)
191-
waiting_client.entities_to_delete.extend(
192-
waiting_client.query(kind='Task').fetch())
183+
@eventually_consistent.mark
184+
def test_keys_only_query(self, client):
185+
keys = snippets.keys_only_query(client)
186+
client.entities_to_delete.extend(
187+
client.query(kind='Task').fetch())
193188
assert keys
194189

195-
def test_distinct_query(self, waiting_client):
196-
tasks = snippets.distinct_query(waiting_client)
197-
waiting_client.entities_to_delete.extend(tasks)
190+
@eventually_consistent.mark
191+
def test_distinct_query(self, client):
192+
tasks = snippets.distinct_query(client)
193+
client.entities_to_delete.extend(tasks)
198194
assert tasks
199195

200-
def test_distinct_on_query(self, waiting_client):
201-
tasks = snippets.distinct_on_query(waiting_client)
202-
waiting_client.entities_to_delete.extend(tasks)
196+
@eventually_consistent.mark
197+
def test_distinct_on_query(self, client):
198+
tasks = snippets.distinct_on_query(client)
199+
client.entities_to_delete.extend(tasks)
203200
assert tasks
204201

205202
def test_kindless_query(self, client):
@@ -251,29 +248,33 @@ def transactional_single_entity_group_read_only(self, client):
251248
assert task_list
252249
assert tasks_in_list
253250

254-
def test_namespace_run_query(self, waiting_client):
251+
@eventually_consistent.mark
252+
def test_namespace_run_query(self, client):
255253
all_namespaces, filtered_namespaces = snippets.namespace_run_query(
256-
waiting_client)
254+
client)
257255
assert all_namespaces
258256
assert filtered_namespaces
259257
assert 'google' in filtered_namespaces
260258

261-
def test_kind_run_query(self, waiting_client):
262-
kinds = snippets.kind_run_query(waiting_client)
263-
waiting_client.entities_to_delete.extend(
264-
waiting_client.query(kind='Task').fetch())
259+
@eventually_consistent.mark
260+
def test_kind_run_query(self, client):
261+
kinds = snippets.kind_run_query(client)
262+
client.entities_to_delete.extend(
263+
client.query(kind='Task').fetch())
265264
assert kinds
266265
assert 'Task' in kinds
267266

268-
def test_property_run_query(self, waiting_client):
269-
kinds = snippets.property_run_query(waiting_client)
270-
waiting_client.entities_to_delete.extend(
271-
waiting_client.query(kind='Task').fetch())
267+
@eventually_consistent.mark
268+
def test_property_run_query(self, client):
269+
kinds = snippets.property_run_query(client)
270+
client.entities_to_delete.extend(
271+
client.query(kind='Task').fetch())
272272
assert kinds
273273
assert 'Task' in kinds
274274

275-
def test_property_by_kind_run_query(self, waiting_client):
276-
reprs = snippets.property_by_kind_run_query(waiting_client)
277-
waiting_client.entities_to_delete.extend(
278-
waiting_client.query(kind='Task').fetch())
275+
@eventually_consistent.mark
276+
def test_property_by_kind_run_query(self, client):
277+
reprs = snippets.property_by_kind_run_query(client)
278+
client.entities_to_delete.extend(
279+
client.query(kind='Task').fetch())
279280
assert reprs

datastore/api/tasks_test.py

+13-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# limitations under the License.
1313

1414
from gcloud import datastore
15+
from gcp.testing import eventually_consistent
1516
from gcp.testing.flaky import flaky
1617
import pytest
1718
import tasks
@@ -55,8 +56,11 @@ def test_mark_done(client):
5556
def test_list_tasks(client):
5657
task1_key = tasks.add_task(client, 'Test task 1')
5758
task2_key = tasks.add_task(client, 'Test task 2')
58-
task_list = tasks.list_tasks(client)
59-
assert [x.key for x in task_list] == [task1_key, task2_key]
59+
60+
@eventually_consistent.call
61+
def _():
62+
task_list = tasks.list_tasks(client)
63+
assert [x.key for x in task_list] == [task1_key, task2_key]
6064

6165

6266
@flaky
@@ -72,9 +76,11 @@ def test_format_tasks(client):
7276
tasks.add_task(client, 'Test task 2')
7377
tasks.mark_done(client, task1_key.id)
7478

75-
output = tasks.format_tasks(tasks.list_tasks(client))
79+
@eventually_consistent.call
80+
def _():
81+
output = tasks.format_tasks(tasks.list_tasks(client))
7682

77-
assert 'Test task 1' in output
78-
assert 'Test task 2' in output
79-
assert 'done' in output
80-
assert 'created' in output
83+
assert 'Test task 1' in output
84+
assert 'Test task 2' in output
85+
assert 'done' in output
86+
assert 'created' in output

0 commit comments

Comments
 (0)