Skip to content

Commit 694f602

Browse files
committed
Merge pull request #1604 from dhermes/sys-test-happybase-row
Adding system tests for HappyBase Table.row().
2 parents 71fe17b + 52da4b6 commit 694f602

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

system_tests/bigtable_happybase.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@
4141
COL_FAM3: {}, # use defaults
4242
}
4343
ROW_KEY1 = 'row-key1'
44+
ROW_KEY2 = 'row-key2a'
4445
COL1 = COL_FAM1 + ':qual1'
46+
COL2 = COL_FAM1 + ':qual2'
47+
COL3 = COL_FAM2 + ':qual1'
48+
COL4 = COL_FAM3 + ':qual3'
4549

4650

4751
class Config(object):
@@ -139,6 +143,95 @@ def test_families(self):
139143
self.assertEqual(retrieved[key], value)
140144

141145

146+
class TestTable_row(BaseTableTest):
147+
148+
def test_row_when_empty(self):
149+
row1 = Config.TABLE.row(ROW_KEY1)
150+
row2 = Config.TABLE.row(ROW_KEY2)
151+
152+
self.assertEqual(row1, {})
153+
self.assertEqual(row2, {})
154+
155+
def test_row_with_columns(self):
156+
table = Config.TABLE
157+
value1 = 'value1'
158+
value2 = 'value2'
159+
value3 = 'value3'
160+
value4 = 'value4'
161+
row1_data = {
162+
COL1: value1,
163+
COL2: value2,
164+
COL3: value3,
165+
COL4: value4,
166+
}
167+
168+
# Need to clean-up row1 after.
169+
self.rows_to_delete.append(ROW_KEY1)
170+
table.put(ROW_KEY1, row1_data)
171+
172+
# Make sure the vanilla write succeeded.
173+
row1 = table.row(ROW_KEY1)
174+
self.assertEqual(row1, row1_data)
175+
176+
# Pick out specific columns.
177+
row1_diff_fams = table.row(ROW_KEY1, columns=[COL1, COL4])
178+
self.assertEqual(row1_diff_fams, {COL1: value1, COL4: value4})
179+
row1_single_col = table.row(ROW_KEY1, columns=[COL3])
180+
self.assertEqual(row1_single_col, {COL3: value3})
181+
row1_col_fam = table.row(ROW_KEY1, columns=[COL_FAM1])
182+
self.assertEqual(row1_col_fam, {COL1: value1, COL2: value2})
183+
row1_fam_qual_overlap1 = table.row(ROW_KEY1, columns=[COL1, COL_FAM1])
184+
self.assertEqual(row1_fam_qual_overlap1, {COL1: value1, COL2: value2})
185+
row1_fam_qual_overlap2 = table.row(ROW_KEY1, columns=[COL_FAM1, COL1])
186+
self.assertEqual(row1_fam_qual_overlap2,
187+
{COL1: value1, COL2: value2})
188+
row1_multiple_col_fams = table.row(ROW_KEY1,
189+
columns=[COL_FAM1, COL_FAM2])
190+
self.assertEqual(row1_multiple_col_fams,
191+
{COL1: value1, COL2: value2, COL3: value3})
192+
193+
def test_row_with_timestamp(self):
194+
table = Config.TABLE
195+
value1 = 'value1'
196+
value2 = 'value2'
197+
value3 = 'value3'
198+
199+
# Need to clean-up row1 after.
200+
self.rows_to_delete.append(ROW_KEY1)
201+
table.put(ROW_KEY1, {COL1: value1})
202+
table.put(ROW_KEY1, {COL2: value2})
203+
table.put(ROW_KEY1, {COL3: value3})
204+
205+
# Make sure the vanilla write succeeded.
206+
row1 = table.row(ROW_KEY1, include_timestamp=True)
207+
ts1 = row1[COL1][1]
208+
ts2 = row1[COL2][1]
209+
ts3 = row1[COL3][1]
210+
211+
expected_row = {
212+
COL1: (value1, ts1),
213+
COL2: (value2, ts2),
214+
COL3: (value3, ts3),
215+
}
216+
self.assertEqual(row1, expected_row)
217+
218+
# Make sure the timestamps are (strictly) ascending.
219+
self.assertTrue(ts1 < ts2 < ts3)
220+
221+
# Use timestamps to retrieve row.
222+
first_two = table.row(ROW_KEY1, timestamp=ts2 + 1,
223+
include_timestamp=True)
224+
self.assertEqual(first_two, {
225+
COL1: (value1, ts1),
226+
COL2: (value2, ts2),
227+
})
228+
first_one = table.row(ROW_KEY1, timestamp=ts2,
229+
include_timestamp=True)
230+
self.assertEqual(first_one, {
231+
COL1: (value1, ts1),
232+
})
233+
234+
142235
class TestTableCounterMethods(BaseTableTest):
143236

144237
def test_counter_get(self):

0 commit comments

Comments
 (0)