Skip to content

Commit c48f979

Browse files
committed
Merge pull request basho#158 from evanmcc/pevm-test-reorg
reorganize the test into multiple files and functional units.
2 parents 8a03edc + 8e73f89 commit c48f979

File tree

6 files changed

+1134
-1063
lines changed

6 files changed

+1134
-1063
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ build/
99
dist/
1010
riak.egg-info/
1111
*.egg
12+
13+
#*#
14+
*~

riak/tests/test_2i.py

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
# -*- coding: utf-8 -*-
2+
import os, platform
3+
if platform.python_version() < '2.7':
4+
unittest = __import__('unittest2')
5+
else:
6+
import unittest
7+
8+
from riak.riak_index_entry import RiakIndexEntry
9+
10+
SKIP_INDEXES = int(os.environ.get('SKIP_INDEXES', '0'))
11+
12+
class TwoITests(object):
13+
def is_2i_supported(self):
14+
# Immediate test to see if 2i is even supported w/ the backend
15+
try:
16+
self.client.index('foo', 'bar_bin', 'baz').run()
17+
return True
18+
except Exception as e:
19+
if "indexes_not_supported" in str(e):
20+
return False
21+
return True # it failed, but is supported!
22+
23+
@unittest.skipIf(SKIP_INDEXES, 'SKIP_INDEXES is defined')
24+
def test_secondary_index_store(self):
25+
if not self.is_2i_supported():
26+
return True
27+
28+
# Create a new object with indexes...
29+
bucket = self.client.bucket('indexbucket')
30+
rand = self.randint()
31+
obj = bucket.new('mykey1', rand)
32+
obj.add_index('field1_bin', 'val1a')
33+
obj.add_index('field1_int', 1011)
34+
obj.store()
35+
36+
# Retrieve the object, check that the correct indexes exist...
37+
obj = bucket.get('mykey1')
38+
self.assertEqual(['val1a'], sorted(obj.get_indexes('field1_bin')))
39+
self.assertEqual(['1011'], sorted(obj.get_indexes('field1_int')))
40+
41+
# Add more indexes and save...
42+
obj.add_index('field1_bin', 'val1b')
43+
obj.add_index('field1_int', 1012)
44+
obj.store()
45+
46+
# Retrieve the object, check that the correct indexes exist...
47+
obj = bucket.get('mykey1')
48+
self.assertEqual(['val1a', 'val1b'],
49+
sorted(obj.get_indexes('field1_bin')))
50+
self.assertEqual(['1011', '1012'],
51+
sorted(obj.get_indexes('field1_int')))
52+
53+
# Check the get_indexes() function...
54+
self.assertEqual([
55+
RiakIndexEntry('field1_bin', 'val1a'),
56+
RiakIndexEntry('field1_bin', 'val1b'),
57+
RiakIndexEntry('field1_int', 1011),
58+
RiakIndexEntry('field1_int', 1012)
59+
], sorted(obj.get_indexes()))
60+
61+
# Delete an index...
62+
obj.remove_index('field1_bin', 'val1a')
63+
obj.remove_index('field1_int', 1011)
64+
obj.store()
65+
66+
# Retrieve the object, check that the correct indexes exist...
67+
obj = bucket.get('mykey1')
68+
self.assertEqual(['val1b'], sorted(obj.get_indexes('field1_bin')))
69+
self.assertEqual(['1012'], sorted(obj.get_indexes('field1_int')))
70+
71+
# Check duplicate entries...
72+
obj.add_index('field1_bin', 'val1a')
73+
obj.add_index('field1_bin', 'val1a')
74+
obj.add_index('field1_bin', 'val1a')
75+
obj.add_index('field1_int', 1011)
76+
obj.add_index('field1_int', 1011)
77+
obj.add_index('field1_int', 1011)
78+
79+
self.assertEqual([
80+
RiakIndexEntry('field1_bin', 'val1a'),
81+
RiakIndexEntry('field1_bin', 'val1b'),
82+
RiakIndexEntry('field1_int', 1011),
83+
RiakIndexEntry('field1_int', 1012)
84+
], sorted(obj.get_indexes()))
85+
86+
obj.store()
87+
obj = bucket.get('mykey1')
88+
89+
self.assertEqual([
90+
RiakIndexEntry('field1_bin', 'val1a'),
91+
RiakIndexEntry('field1_bin', 'val1b'),
92+
RiakIndexEntry('field1_int', 1011),
93+
RiakIndexEntry('field1_int', 1012)
94+
], sorted(obj.get_indexes()))
95+
96+
# Clean up...
97+
bucket.get('mykey1').delete()
98+
99+
@unittest.skipIf(SKIP_INDEXES, 'SKIP_INDEXES is defined')
100+
def test_set_indexes(self):
101+
if not self.is_2i_supported():
102+
return True
103+
104+
bucket = self.client.bucket('indexbucket')
105+
foo = bucket.new('foo', 1)
106+
foo.set_indexes((('field1_bin', 'test'), ('field2_int', 1337))).store()
107+
result = self.client.index('indexbucket', 'field2_int', 1337).run()
108+
self.assertEqual(1, len(result))
109+
self.assertEqual('foo', result[0].get_key())
110+
111+
result = bucket.get_index('field1_bin', 'test')
112+
self.assertEqual(1, len(result))
113+
self.assertEqual('foo', str(result[0]))
114+
115+
@unittest.skipIf(SKIP_INDEXES, 'SKIP_INDEXES is defined')
116+
def test_remove_indexes(self):
117+
if not self.is_2i_supported():
118+
return True
119+
120+
bucket = self.client.bucket('indexbucket')
121+
bar = bucket.new('bar', 1).add_index('bar_int', 1)\
122+
.add_index('bar_int', 2).add_index('baz_bin', 'baz').store()
123+
result = bucket.get_index('bar_int', 1)
124+
self.assertEqual(1, len(result))
125+
self.assertEqual(3, len(bar.get_indexes()))
126+
self.assertEqual(2, len(bar.get_indexes('bar_int')))
127+
128+
# remove all indexes
129+
bar = bar.remove_indexes().store()
130+
result = bucket.get_index('bar_int', 1)
131+
self.assertEqual(0, len(result))
132+
result = bucket.get_index('baz_bin', 'baz')
133+
self.assertEqual(0, len(result))
134+
self.assertEqual(0, len(bar.get_indexes()))
135+
self.assertEqual(0, len(bar.get_indexes('bar_int')))
136+
self.assertEqual(0, len(bar.get_indexes('baz_bin')))
137+
138+
# add index again
139+
bar = bar.add_index('bar_int', 1).add_index('bar_int', 2)\
140+
.add_index('baz_bin', 'baz').store()
141+
# remove all index with field='bar_int'
142+
bar = bar.remove_index(field='bar_int').store()
143+
result = bucket.get_index('bar_int', 1)
144+
self.assertEqual(0, len(result))
145+
result = bucket.get_index('bar_int', 2)
146+
self.assertEqual(0, len(result))
147+
result = bucket.get_index('baz_bin', 'baz')
148+
self.assertEqual(1, len(result))
149+
self.assertEqual(1, len(bar.get_indexes()))
150+
self.assertEqual(0, len(bar.get_indexes('bar_int')))
151+
self.assertEqual(1, len(bar.get_indexes('baz_bin')))
152+
153+
# add index again
154+
bar = bar.add_index('bar_int', 1).add_index('bar_int', 2)\
155+
.add_index('baz_bin', 'baz').store()
156+
# remove an index field value pair
157+
bar = bar.remove_index(field='bar_int', value=2).store()
158+
result = bucket.get_index('bar_int', 1)
159+
self.assertEqual(1, len(result))
160+
result = bucket.get_index('bar_int', 2)
161+
self.assertEqual(0, len(result))
162+
result = bucket.get_index('baz_bin', 'baz')
163+
self.assertEqual(1, len(result))
164+
self.assertEqual(2, len(bar.get_indexes()))
165+
self.assertEqual(1, len(bar.get_indexes('bar_int')))
166+
self.assertEqual(1, len(bar.get_indexes('baz_bin')))
167+
168+
@unittest.skipIf(SKIP_INDEXES, 'SKIP_INDEXES is defined')
169+
def test_secondary_index_query(self):
170+
if not self.is_2i_supported():
171+
return True
172+
173+
bucket = self.client.bucket('indexbucket')
174+
175+
bucket.\
176+
new('mykey1', 'data1').\
177+
add_index('field1_bin', 'val1').\
178+
add_index('field2_int', 1001).\
179+
store()
180+
bucket.\
181+
new('mykey2', 'data1').\
182+
add_index('field1_bin', 'val2').\
183+
add_index('field2_int', 1002).\
184+
store()
185+
bucket.\
186+
new('mykey3', 'data1').\
187+
add_index('field1_bin', 'val3').\
188+
add_index('field2_int', 1003).\
189+
store()
190+
bucket.\
191+
new('mykey4', 'data1').\
192+
add_index('field1_bin', 'val4').\
193+
add_index('field2_int', 1004).\
194+
store()
195+
196+
# Test an equality query...
197+
results = bucket.get_index('field1_bin', 'val2')
198+
self.assertEquals(1, len(results))
199+
self.assertEquals('mykey2', str(results[0]))
200+
201+
# Test a range query...
202+
results = bucket.get_index('field1_bin', 'val2', 'val4')
203+
vals = set([str(key) for key in results])
204+
self.assertEquals(3, len(results))
205+
self.assertEquals(set(['mykey2', 'mykey3', 'mykey4']), vals)
206+
207+
# Test an equality query...
208+
results = bucket.get_index('field2_int', 1002)
209+
self.assertEquals(1, len(results))
210+
self.assertEquals('mykey2', str(results[0]))
211+
212+
# Test a range query...
213+
results = bucket.get_index('field2_int', 1002, 1004)
214+
vals = set([str(key) for key in results])
215+
self.assertEquals(3, len(results))
216+
self.assertEquals(set(['mykey2', 'mykey3', 'mykey4']), vals)
217+
218+
# Clean up...
219+
bucket.get('mykey1').delete()
220+
bucket.get('mykey2').delete()
221+
bucket.get('mykey3').delete()
222+
bucket.get('mykey4').delete()

0 commit comments

Comments
 (0)