Skip to content

Commit 41f10b4

Browse files
committed
Added next page caching tests for Cassandra\Rows
1 parent 59da2a2 commit 41f10b4

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

tests/integration/Cassandra/PagingIntegrationTest.php

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,22 @@ public function setUp() {
3939
}
4040
}
4141

42+
/**
43+
* Convert a single column of a collection of rows into an array
44+
*
45+
* @param Cassandra\Rows
46+
* @param string Column name to consolidate
47+
*
48+
* @return array Array of column values using the provided column name
49+
*/
50+
private static function convertRowsToArray($rows, $columnName) {
51+
$values = array();
52+
foreach ($rows as $row) {
53+
$values []= $row[$columnName];
54+
}
55+
return $values;
56+
}
57+
4258
/**
4359
* Generate a random string
4460
*
@@ -179,6 +195,96 @@ public function testNullToken() {
179195
$result = $this->session->execute($statement, $options);
180196
}
181197

198+
/**
199+
* Verify next page caching in `Cassandra\Rows`
200+
*
201+
* @test
202+
* @ticket PHP-101
203+
*/
204+
public function testNextPageCaching() {
205+
$results = array();
206+
$pageSize = 2;
207+
208+
$options = array("page_size" => $pageSize);
209+
$statement = new SimpleStatement(
210+
"SELECT * FROM {$this->tableNamePrefix}"
211+
);
212+
213+
// Get first page
214+
$rows = $this->session->execute($statement, new ExecutionOptions($options));
215+
$this->assertEquals($rows->count(), $pageSize);
216+
$values = self::convertRowsToArray($rows, "value");
217+
218+
// Get next page (verify that it's a different page)
219+
$nextRows = $rows->nextPage();
220+
$nextValues = self::convertRowsToArray($nextRows, "value");
221+
$this->assertEquals($nextRows->count(), $pageSize);
222+
$this->assertNotEquals($values, $nextValues);
223+
224+
// Get next page again (verify that it's the same)
225+
$nextRowsAgain = $rows->nextPage();
226+
$this->assertEquals($nextRowsAgain->count(), $pageSize);
227+
$nextValuesAgain = self::convertRowsToArray($nextRowsAgain, "value");
228+
$this->assertEquals($nextValues, $nextValuesAgain);
229+
230+
// Get next page asynchonously (verify that it's the same)
231+
$nextRowsAsync = $rows->nextPageAsync()->get();
232+
$this->assertEquals($nextRowsAsync->count(), $pageSize);
233+
$nextValuesAsync = self::convertRowsToArray($nextRowsAsync, "value");
234+
$this->assertEquals($nextValues, $nextValuesAsync);
235+
236+
// Get the next page's page (verify that it's a different page)
237+
$lastRows = $nextRows->nextPage();
238+
$this->assertEquals($lastRows->count(), $pageSize);
239+
$lastValues = self::convertRowsToArray($lastRows, "value");
240+
$this->assertNotEquals($nextValues, $lastValues);
241+
}
242+
243+
/**
244+
* Verify next page asynchronous caching in `Cassandra\Rows`
245+
*
246+
* @test
247+
* @ticket PHP-101
248+
*/
249+
public function testNextPageAsyncCaching() {
250+
$results = array();
251+
$pageSize = 2;
252+
253+
$options = array("page_size" => $pageSize);
254+
$statement = new SimpleStatement(
255+
"SELECT * FROM {$this->tableNamePrefix}"
256+
);
257+
258+
// Get first page
259+
$rows = $this->session->execute($statement, new ExecutionOptions($options));
260+
$this->assertEquals($rows->count(), $pageSize);
261+
$values = self::convertRowsToArray($rows, "value");
262+
263+
// Get next page asynchronously (verify that it's a different page)
264+
$nextRowsAsync = $rows->nextPageAsync()->get();
265+
$this->assertEquals($nextRowsAsync->count(), $pageSize);
266+
$nextValuesAsync = self::convertRowsToArray($nextRowsAsync, "value");
267+
$this->assertNotEquals($values, $nextValuesAsync);
268+
269+
// Get next page asynchronously again (verify that it's the same)
270+
$nextRowsAgainAsync = $rows->nextPageAsync()->get();
271+
$this->assertEquals($nextRowsAgainAsync->count(), $pageSize);
272+
$nextValuesAgainAsync = self::convertRowsToArray($nextRowsAgainAsync, "value");
273+
$this->assertEquals($nextValuesAsync, $nextValuesAgainAsync);
274+
275+
// Get the next page again synchonously (verify that it's the same)
276+
$nextRows = $rows->nextPage();
277+
$nextValues = self::convertRowsToArray($nextRows, "value");
278+
$this->assertEquals($nextRows->count(), $pageSize);
279+
$this->assertEquals($nextValuesAsync, $nextValues);
280+
281+
// Get the next page's page asynchronously (verify that it's a different page)
282+
$lastRowsAsync = $nextRowsAsync->nextPageAsync()->get();
283+
$this->assertEquals($lastRowsAsync->count(), $pageSize);
284+
$lastValuesAsync = self::convertRowsToArray($lastRowsAsync, "value");
285+
$this->assertNotEquals($nextValuesAsync, $lastValuesAsync);
286+
}
287+
182288
/**
183289
* Paging advancement does not create memory leak
184290
*

0 commit comments

Comments
 (0)