Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 33ff6c8

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

File tree

Expand file treeCollapse file tree

2 files changed

+98
-91
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+98
-91
lines changed

‎datastore/api/snippets_test.py

Copy file name to clipboardExpand all lines: datastore/api/snippets_test.py
+85-84Lines changed: 85 additions & 84 deletions
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

Copy file name to clipboardExpand all lines: datastore/api/tasks_test.py
+13-7Lines changed: 13 additions & 7 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.