Skip to content

Commit 10a7d39

Browse files
committed
bloom filter tests
1 parent aa14791 commit 10a7d39

24 files changed

+180
-26
lines changed

src/RedisBloomClient/Adapter/RedisClientAdapterInterface.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,5 @@ public function executeCommandByName(string $methodName, array $arguments);
4040
* @throws ResponseException
4141
*/
4242
public function executeRawCommand(string $commandName, ...$arguments);
43-
}
43+
}
44+

src/RedisBloomClient/Client/RedisBloomClient.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
namespace Averias\RedisBloom\Client;
1414

15-
use Averias\RedisBloom\Command\Traits\BloomCommandTrait;
15+
use Averias\RedisBloom\Command\BloomCommandTrait;
1616
use Averias\RedisBloom\Exception\ResponseException;
1717
use Averias\RedisBloom\Validator\InputValidatorTrait;
1818

src/RedisBloomClient/Client/RedisBloomClientInterface.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
namespace Averias\RedisBloom\Client;
1414

15-
use Averias\RedisBloom\Command\Traits\BloomCommandTraitInterface;
15+
16+
use Averias\RedisBloom\Command\BloomCommandTraitInterface;
1617

1718
interface RedisBloomClientInterface extends RedisClientInterface, BloomCommandTraitInterface
1819
{

src/RedisBloomClient/Command/Traits/BloomCommandTrait.php renamed to src/RedisBloomClient/Command/BloomCommandTrait.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Command\Traits;
13+
namespace Averias\RedisBloom\Command;
1414

15-
use Averias\RedisBloom\Command\Traits\BloomFilter\BloomFilterCommandTrait;
15+
use Averias\RedisBloom\Command\BloomFilter\BloomFilterCommandTrait;
1616

1717
trait BloomCommandTrait
1818
{

src/RedisBloomClient/Command/Traits/BloomCommandTraitInterface.php renamed to src/RedisBloomClient/Command/BloomCommandTraitInterface.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Command\Traits;
13+
namespace Averias\RedisBloom\Command;
1414

15-
use Averias\RedisBloom\Command\Traits\BloomFilter\BloomFilterCommandTraitInterface;
15+
use Averias\RedisBloom\Command\BloomFilter\BloomFilterCommandTraitInterface;
1616

1717
interface BloomCommandTraitInterface extends BloomFilterCommandTraitInterface
1818
{

src/RedisBloomClient/Command/Traits/BloomFilter/BloomFilterCommandTrait.php renamed to src/RedisBloomClient/Command/BloomFilter/BloomFilterCommandTrait.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Enum\BloomCommands;
1616
use Averias\RedisBloom\Enum\OptionalParams;

src/RedisBloomClient/Command/Traits/BloomFilter/BloomFilterCommandTraitInterface.php renamed to src/RedisBloomClient/Command/BloomFilter/BloomFilterCommandTraitInterface.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Command\BloomFilter;
1414

1515
interface BloomFilterCommandTraitInterface
1616
{

src/RedisBloomClient/DataTypes/BloomFilter.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
namespace Averias\RedisBloom\DataTypes;
1414

15-
use Averias\RedisBloom\Command\Traits\BloomFilter\BloomFilterCommandTrait;
15+
use Averias\RedisBloom\Command\BloomFilter\BloomFilterCommandTrait;
1616
use Averias\RedisBloom\Exception\ResponseException;
1717
use Exception;
1818

19-
class BloomFilter extends BaseDataType
19+
class BloomFilter extends BaseDataType implements DataTypeInterface
2020
{
2121
use BloomFilterCommandTrait;
2222

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
/**
3+
* @project phpredis-bloom
4+
* @author Rafael Campoy <[email protected]>
5+
* @copyright 2019 Rafael Campoy <[email protected]>
6+
* @license MIT
7+
* @link https://github.com/averias/php-rejson
8+
*
9+
* Copyright and license information, is included in
10+
* the LICENSE file that is distributed with this source code.
11+
*/
12+
13+
namespace Averias\RedisBloom\DataTypes;
14+
15+
interface DataTypeInterface
16+
{
17+
18+
}

src/RedisBloomClient/Enum/Keys.php

+1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ class Keys extends Enum
1818
const DEFAULT_KEY = 'test-key';
1919
const EXTENDED_KEY = 'extended-test-key';
2020
const KEY_TO_EMPTY = 'key-to-empty';
21+
const BLOOM_FILTER = 'boom-filter-key';
2122
}

src/RedisBloomClient/Factory/RedisBloomClientFactory.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Averias\RedisBloom\Client\RedisBloomClient;
1717
use Averias\RedisBloom\Client\RedisBloomClientInterface;
1818
use Averias\RedisBloom\DataTypes\BloomFilter;
19+
use Averias\RedisBloom\DataTypes\DataTypeInterface;
1920
use Averias\RedisBloom\Exception\RedisClientException;
2021
use Averias\RedisBloom\Validator\RedisClientValidator;
2122
use Averias\RedisBloom\Adapter\AdapterProvider;
@@ -63,7 +64,7 @@ public function createClient(array $config = []): RedisBloomClientInterface
6364
* @return BloomFilter
6465
* @throws RedisClientException
6566
*/
66-
public function createBloomFilter(string $filterName, array $config = []): BloomFilter
67+
public function createBloomFilter(string $filterName, array $config = []): DataTypeInterface
6768
{
6869
return new BloomFilter($filterName, $this->getAdapter($config));
6970
}

src/RedisBloomClient/Factory/RedisBloomClientFactoryInterface.php

+21-1
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,30 @@
1515
use Averias\RedisBloom\Adapter\RedisClientAdapterInterface;
1616
use Averias\RedisBloom\Client\RedisBloomClientInterface;
1717
use Averias\RedisBloom\DataTypes\BloomFilter;
18+
use Averias\RedisBloom\DataTypes\DataTypeInterface;
19+
use Averias\RedisBloom\Exception\RedisClientException;
1820

1921
interface RedisBloomClientFactoryInterface
2022
{
23+
/**
24+
* @param array $config
25+
* @return RedisClientAdapterInterface
26+
* @throws RedisClientException
27+
*/
2128
public function getAdapter(array $config = []): RedisClientAdapterInterface;
29+
30+
/**
31+
* @param array|null $config
32+
* @return RedisBloomClientInterface
33+
* @throws RedisClientException
34+
*/
2235
public function createClient(array $config): RedisBloomClientInterface;
23-
public function createBloomFilter(string $filterName, array $config = []): BloomFilter;
36+
37+
/**
38+
* @param string $filterName
39+
* @param array $config
40+
* @return BloomFilter
41+
* @throws RedisClientException
42+
*/
43+
public function createBloomFilter(string $filterName, array $config = []): DataTypeInterface;
2444
}

src/RedisBloomClient/Validator/RedisClientValidator.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@ public function isRedisBloomModuleInstalled(array $moduleListCommandResponse): b
3030

3131
return false;
3232
}
33-
}
33+
}
34+

src/RedisBloomClient/Validator/RedisClientValidatorInterface.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ interface RedisClientValidatorInterface
1919
* @return bool
2020
*/
2121
public function isRedisBloomModuleInstalled(array $moduleListCommandResponse): bool;
22-
}
22+
}
23+

tests/Integration/BaseTestIntegration.php

+13-3
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,23 @@
1616
use Averias\RedisBloom\Enum\Connection;
1717
use Averias\RedisBloom\Exception\RedisClientException;
1818
use Averias\RedisBloom\Factory\RedisBloomClientFactory;
19+
use Averias\RedisBloom\Factory\RedisBloomClientFactoryInterface;
1920
use PHPUnit\Framework\TestCase;
2021

2122
class BaseTestIntegration extends TestCase
2223
{
2324
/** @var RedisBloomClientInterface */
2425
protected static $reBloomClient;
2526

27+
/** @var RedisBloomClientFactoryInterface */
28+
protected static $factory;
29+
30+
public function __construct($name = null, array $data = [], $dataName = '')
31+
{
32+
parent::__construct($name, $data, $dataName);
33+
static::$factory = new RedisBloomClientFactory();
34+
}
35+
2636
/**
2737
* @throws RedisClientException
2838
*/
@@ -34,8 +44,8 @@ public static function setUpBeforeClass():void
3444
public static function tearDownAfterClass(): void
3545
{
3646
if (static::$reBloomClient) {
37-
static::$reBloomClient->select(0);
38-
static::$reBloomClient->flushall();
47+
static::$reBloomClient->select(15);
48+
static::$reBloomClient->flushDb();
3949
}
4050
}
4151

@@ -61,6 +71,6 @@ protected static function getReBloomClient(): RedisBloomClientInterface
6171
$config = static::getReBloomClientConfig();
6272
$factory = new RedisBloomClientFactory();
6373

64-
return $factory->createClient($config);
74+
return static::$factory->createClient(static::getReBloomClientConfig());
6575
}
6676
}

tests/Integration/Command/Traits/BloomFilter/BloomFilterAddCommandTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterAddCommandTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Exception\ResponseException;
1616
use Averias\RedisBloom\Tests\BaseTestIntegration;

tests/Integration/Command/Traits/BloomFilter/BloomFilterExistsCommandTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterExistsCommandTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Enum\Keys;
1616
use Averias\RedisBloom\Exception\ResponseException;

tests/Integration/Command/Traits/BloomFilter/BloomFilterInsertCommandTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterInsertCommandTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Enum\OptionalParams;
1616
use Averias\RedisBloom\Exception\ResponseException;

tests/Integration/Command/Traits/BloomFilter/BloomFilterLoadChunkTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterLoadChunkTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Enum\Keys;
1616
use Averias\RedisBloom\Exception\ResponseException;

tests/Integration/Command/Traits/BloomFilter/BloomFilterMultiAddCommandTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterMultiAddCommandTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Exception\ResponseException;
1616
use Averias\RedisBloom\Tests\BaseTestIntegration;

tests/Integration/Command/Traits/BloomFilter/BloomFilterMultiExistsCommandTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterMultiExistsCommandTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Enum\Keys;
1616
use Averias\RedisBloom\Exception\ResponseException;

tests/Integration/Command/Traits/BloomFilter/BloomFilterReserveCommandTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterReserveCommandTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Exception\ResponseException;
1616
use Averias\RedisBloom\Tests\BaseTestIntegration;

tests/Integration/Command/Traits/BloomFilter/BloomFilterScanDumpTest.php renamed to tests/Integration/Command/BloomFilter/BloomFilterScanDumpTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* the LICENSE file that is distributed with this source code.
1111
*/
1212

13-
namespace Averias\RedisBloom\Tests\Integration\Command\Traits\BloomFilter;
13+
namespace Averias\RedisBloom\Tests\Integration\Command\BloomFilter;
1414

1515
use Averias\RedisBloom\Enum\Keys;
1616
use Averias\RedisBloom\Exception\ResponseException;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?php
2+
/**
3+
* @project phpredis-bloom
4+
* @author Rafael Campoy <[email protected]>
5+
* @copyright 2019 Rafael Campoy <[email protected]>
6+
* @license MIT
7+
* @link https://github.com/averias/php-rejson
8+
*
9+
* Copyright and license information, is included in
10+
* the LICENSE file that is distributed with this source code.
11+
*/
12+
13+
namespace Averias\RedisBloom\Tests\Integration\DataTypes;
14+
15+
use Averias\RedisBloom\DataTypes\BloomFilter;
16+
use Averias\RedisBloom\Enum\Keys;
17+
use Averias\RedisBloom\Enum\OptionalParams;
18+
use Averias\RedisBloom\Exception\RedisClientException;
19+
use Averias\RedisBloom\Exception\ResponseException;
20+
use Averias\RedisBloom\Tests\BaseTestIntegration;
21+
22+
class BloomFilterTest extends BaseTestIntegration
23+
{
24+
const DATA_TYPE_NAME = 'boom-filter-key';
25+
26+
/** @var BloomFilter */
27+
protected static $bloomFilter;
28+
29+
/**
30+
* @throws RedisClientException
31+
*/
32+
public static function setUpBeforeClass():void
33+
{
34+
static::$bloomFilter = static::$factory->createBloomFilter(Keys::BLOOM_FILTER, static::getReBloomClientConfig());
35+
static::$reBloomClient = self::getReBloomClient();
36+
}
37+
38+
public function testReserve()
39+
{
40+
$result = static::$bloomFilter->reserve(0.1, 50);
41+
$this->assertTrue($result);
42+
}
43+
44+
public function testAdd()
45+
{
46+
$result = static::$bloomFilter->add(1);
47+
$this->assertTrue($result);
48+
$exists = static::$bloomFilter->exists(1);
49+
$this->assertTrue($exists);
50+
}
51+
52+
public function testMultiAdd()
53+
{
54+
$values = range(2, 5);
55+
$result = static::$bloomFilter->multiAdd(...$values);
56+
foreach ($result as $item) {
57+
$this->assertTrue($item);
58+
}
59+
60+
$exists = static::$bloomFilter->multiExists(...$values);
61+
foreach ($exists as $item) {
62+
$this->assertTrue($item);
63+
}
64+
}
65+
66+
public function testInsertWithOptions()
67+
{
68+
$values = range(6, 20);
69+
$result = static::$bloomFilter->insert($values, [OptionalParams::CAPACITY => 100, OptionalParams::ERROR => 0.01]);
70+
foreach ($result as $item) {
71+
$this->assertTrue($item);
72+
}
73+
74+
$exists = static::$bloomFilter->multiExists(...$values);
75+
foreach ($exists as $item) {
76+
$this->assertTrue($item);
77+
}
78+
}
79+
80+
public function testCopy()
81+
{
82+
$result = static::$bloomFilter->copy('other-bloom-filter');
83+
$this->assertTrue($result);
84+
85+
$otherBloomFilter = static::$factory->createBloomFilter(Keys::BLOOM_FILTER, static::getReBloomClientConfig());
86+
87+
$values = range(1, 20);
88+
$exists = $otherBloomFilter->multiExists(...$values);
89+
foreach ($exists as $item) {
90+
$this->assertTrue($item);
91+
}
92+
}
93+
94+
public function testCopyExceptionBecauseNoSourceFilter()
95+
{
96+
$this->expectException(ResponseException::class);
97+
$newBloomFilter = static::$factory->createBloomFilter('new-bloom-filter', static::getReBloomClientConfig());
98+
$newBloomFilter->copy('other-bloom-filter');
99+
}
100+
}

0 commit comments

Comments
 (0)