Skip to content

Commit

Permalink
TOOLING-255: Added PSR-4 compliance
Browse files Browse the repository at this point in the history
  • Loading branch information
Gabe Limon committed Mar 11, 2015
1 parent c5bee31 commit 66ef02c
Show file tree
Hide file tree
Showing 15 changed files with 515 additions and 606 deletions.
4 changes: 3 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ php:
- 5.6
env:
- REDIS_STANDALONE=0
- REDIS_STANDALONE=1
before_script:
- sh -c "if [ $REDIS_STANDALONE -eq 0 ]; then wget https://github.com/nicolasff/phpredis/archive/2.2.3.zip -O php-redis.zip && unzip php-redis.zip; fi"
- sh -c "if [ $REDIS_STANDALONE -eq 0 ]; then cd phpredis-2.2.3/ && phpize && ./configure && make && make install; fi"
- sh -c "if [ $REDIS_STANDALONE -eq 0 ]; then echo \"extension=redis.so\" >> `php --ini | grep \"Loaded Configuration\" | sed -e \"s|.*:\s*||\"`; fi"
- composer install
script:
- composer lint
- composer test
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (C) BigCommerce, 2014
Copyright (C) Bigcommerce, 2014
All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining
Expand Down
43 changes: 13 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,49 +26,32 @@ $ composer install

## Usage ##

php-resque has a basic event system that can be used by your application
to customize how some of the php-resque internals behave.
To use Resque Pause in your application you'll need to create a globally used instance, we use Pimple but you can use
globals, a static variable, or whatever else you like. Upon instantiation `Pause` will add a Resque listener to make
sure that any jobs pushed to a paused queue will be paused as well. On destruction `Pause` will remove said listener.

php-resque-pause uses beforeEnqueue hook, which called before a job is placed on queue.

### before Enqueue - Pause Callback ###

add below before `Resque::enqueue` method.
```php
//add this on top of your resque:enqueue
ResquePause::beforeEnqueuePauseCallback();

Resque::enqueue('My_Queue', 'My_Job');
// Let's put it in a global since that's easy/familiar
$GLOBALS['ResquePause'] = new \Resque\Plugins\Pause(); // Your enqueues are now being listened to
```

### Pause it! ###
```php
ResquePause::pause('My_Queue');
$GLOBALS['ResquePause']->pause('My_Queue');
```

### Unpause it! ###
### Resume it! ###
```php
ResquePause::unpause('My_Queue');
$GLOBALS['ResquePause']->resume('My_Queue');
```

### Is it Paused? ###
```php
ResquePause::isPaused('My_Queue');
$GLOBALS['ResquePause']->isPaused('My_Queue');
```

## Tests ##
we use phpunit for testing. you'll find a bunch of test in ```test```.

Again if you are using composer, you can simply run ```vendor/bin/phpunit```.
Please make sure they pass when you submit a pull request.

Please include tests with your Pull Request.

## Contributing ##

1. Fork this repo
2. Create a branch ```git checkout -b my_branch```
3. Push to your branch ```git push origin my_branch```
4. Create a Pull Request from your branch
5. That's it!

This project will be PSR-4 compliant. So please verify that all pull-requests are such.
This repo is fairly thoroughly tested so please add tests for any feature you add. We use PSR-4 conventions and have a
linter in place. To run the linter simply run `composer lint` and to run the tests locally run `composer test`. To have
your code reviewed please tag @gabelimon and @wedy.
118 changes: 118 additions & 0 deletions Tests/Integration/PauseTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
<?php
namespace Resque\Integration\Plugins\Tests;

use Resque;
use Resque\Plugins\Pause;
use PHPUnit_Framework_TestCase;

/**
* Pause tests.
*
* @package PHP Resque Pause
* @author Wedy Chainy <[email protected]>
* @license http://www.opensource.org/licenses/mit-license.php
*/
class PauseTest extends PHPUnit_Framework_TestCase
{
/** @var Pause */
protected $pauser = null;

public static function setUpBeforeClass()
{
$testMisc = realpath(__DIR__ . '/misc/');
$redisConf = "$testMisc/redis.conf";

// Attempt to start our own redis instance for tesitng.
exec('which redis-server', $output, $returnVar);
if ($returnVar != 0) {
echo "Cannot find redis-server in path. Please make sure redis is installed.\n";
exit(1);
}

exec("cd $testMisc; redis-server $redisConf", $output, $returnVar);
usleep(500000);
if ($returnVar != 0) {
echo "Cannot start redis-server.\n";
exit(1);
}

// Get redis port from conf
$config = file_get_contents($redisConf);
if (!preg_match('#^\s*port\s+([0-9]+)#m', $config, $matches)) {
echo "Could not determine redis port from redis.conf";
exit(1);
}

Resque::setBackend('localhost:' . $matches[1]);
}

public function setUp()
{
Resque::redis()->flushAll();
$this->pauser = new Pause();
}

public function testPause()
{
// Pause non-paused queue
Resque::enqueue('upgrade:test', 'test');
Resque::enqueue('upgrade:test', 'test');
$this->assertEquals(2, Resque::size('upgrade:test'));
$this->assertTrue($this->pauser->pause('upgrade:test'));
$this->assertEquals(0, Resque::size('upgrade:test'));

// Pause paused queue
$this->assertFalse($this->pauser->pause('upgrade:test'));

// Pause non-existent queue
$this->assertFalse($this->pauser->pause('upgrade:test2'));
}

public function testResume()
{
// Resume paused queue
Resque::enqueue('upgrade:test3', 'test');
Resque::enqueue('upgrade:test3', 'test');
$this->pauser->pause('upgrade:test3');
$this->assertTrue($this->pauser->resume('upgrade:test3'));
$this->assertEquals(2, Resque::size('upgrade:test3'));

// Resume non-paused queue
Resque::enqueue('upgrade:test4', 'test');
$this->assertFalse($this->pauser->resume('upgrade:test4'));

// Resume non-existent queue
$this->assertFalse($this->pauser->resume('upgrade:idontexist'));
}

public function testIsPaused()
{
// Paused queue
Resque::enqueue('upgrade:test5', 'test');
$this->pauser->pause('upgrade:test5');
$this->assertTrue($this->pauser->isPaused('upgrade:test5'));

// Non-paused queue
Resque::enqueue('upgrade:test6', 'test');
$this->assertFalse($this->pauser->isPaused('upgrade:test6'));

// Paused and resumed queue
Resque::enqueue('upgrade:test7', 'test');
$this->pauser->pause('upgrade:test7');
$this->assertTrue($this->pauser->isPaused('upgrade:test7'));
$this->pauser->resume('upgrade:test7');
$this->assertFalse($this->pauser->isPaused('upgrade:test7'));

// Non-existent queue
$this->assertFalse($this->pauser->isPaused('upgrade:istilldontexist'));
}

public function testPauseCallback()
{
$this->pauser->pause('upgrade:test8');
Resque::enqueue('upgrade:test8', 'test');

$this->assertEquals(0, Resque::redis()->llen('queue:upgrade:test8'));
$this->assertEquals(1, Resque::redis()->llen('temp:upgrade:test8'));
}
}
File renamed without changes.
147 changes: 147 additions & 0 deletions Tests/Unit/JobPauserTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<?php
namespace Unit\Resque\Plugins\Tests;

use Resque\Plugins\JobPauser;
use PHPUnit_Framework_TestCase;

/**
* Job tests.
*
* @package Resque/Tests
* @author Wedy Chainy <[email protected]>
* @license http://www.opensource.org/licenses/mit-license.php
*/
class JobPauserTest extends PHPUnit_Framework_TestCase
{
/** @var \PHPUnit_Framework_MockObject_MockObject */
protected $redisMock = null;

public function setUp()
{
$this->redisMock = $this->getMockBuilder('Resque_Redis')
->disableOriginalConstructor()
->setMethods(array(
'sadd',
'srem',
'getPrefix',
'rename',
'sismember',
))
->getMock();
}

public function createDataProvider()
{
return array(
array(true, true),
array(false, false),
);
}

/**
* @dataProvider createDataProvider
* @param bool $saddSuccess
*/
public function testCreate($saddSuccess, $returnSuccess)
{
$this->redisMock
->expects($this->once())
->method('sadd')
->with($this->equalTo('pauses'), $this->equalTo('upgrade:test'))
->willReturn($saddSuccess);

$pauser = new JobPauser($this->redisMock, 'resqueFaker:');
$this->assertEquals($returnSuccess, $pauser->pause('upgrade:test'));
}

public function removeDataProvider()
{
return array(
array(true, true),
array(false, false),
);
}

/**
* @dataProvider removeDataProvider
* @param bool $sremSuccess
*/
public function testRemove($sremSuccess, $returnSuccess)
{
$this->redisMock
->expects($this->once())
->method('srem')
->with($this->equalTo('pauses'), $this->equalTo('upgrade:test2'))
->willReturn($sremSuccess);

$pauser = new JobPauser($this->redisMock, 'resqueFaker:');
$this->assertEquals($returnSuccess, $pauser->resume('upgrade:test2'));
}

public function renameDataprovider()
{
return array(
array(true, true),
array(false, false),
);
}

/**
* @dataProvider renameDataProvider
* @param bool $renameSuccess
* @param bool $expectedResult
*/
public function testRenameToTemp($renameSuccess, $expectedResult)
{
$this->redisMock
->expects($this->once())
->method('rename')
->with($this->equalTo('queue:upgrade:test3'), $this->equalTo('resqueFaker:temp:upgrade:test3'))
->willReturn($renameSuccess);

$pauser = new JobPauser($this->redisMock, 'resqueFaker:');
$this->assertEquals($expectedResult, $pauser->renameToTemp('upgrade:test3'));
}

/**
* @dataProvider renameDataProvider Reuses the renaming provider because the cases are the same
* @param bool $renameSuccess
* @param bool $expectedResult
*/
public function testRenameBackFromTemp($renameSuccess, $expectedResult)
{
$this->redisMock
->expects($this->once())
->method('rename')
->with($this->equalTo('temp:upgrade:test3'), $this->equalTo('resqueFaker:queue:upgrade:test3'))
->willReturn($renameSuccess);

$pauser = new JobPauser($this->redisMock, 'resqueFaker:');
$this->assertEquals($expectedResult, $pauser->renameBackFromTemp('upgrade:test3'));
}

public function existsDataProvider()
{
return array(
array(true, true),
array(false, false),
);
}

/**
* @dataProvider existsDataProvider
* @param bool $existsSuccess
* @param bool $expectedResult
*/
public function testExists($existsSuccess, $expectedResult)
{
$this->redisMock
->expects($this->once())
->method('sismember')
->with($this->equalTo('pauses'), $this->equalTo('upgrade:test8'))
->willReturn($existsSuccess);

$pauser = new JobPauser($this->redisMock, 'resqueFaker:');
$this->assertEquals($expectedResult, $pauser->isPaused('upgrade:test8'));
}
}
39 changes: 20 additions & 19 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
{
"name": "wedy/php-resque-pause",
"type": "library",
"description": "php-resque-pause is a PHP port of resque-pause, which adds support for pausing / unpausing jobs to Resque.",
"authors": [
{
"name": "Wedy Chainy",
"email": "[email protected]"
}
],
"repositories": [
{ "type": "git", "url": "https://github.com/chrisboulton/php-resque" }
],
"require": {
"chrisboulton/php-resque": "dev-master"
},
"name": "wedy/php-resque-pause",
"type": "library",
"description": "php-resque-pause is a PHP port of resque-pause, which adds support for pausing / unpausing Resque jobs.",
"authors": [{
"name": "Wedy Chainy",
"email": "[email protected]"
}],
"require": {
"chrisboulton/php-resque": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
"phpunit/phpunit": "4.5.*",
"squizlabs/php_codesniffer": "2.3.0"
},
"autoload": {
"psr-0": {
"ResquePause": "lib"
}
"psr-4": {
"Resque\\Plugins\\": "src",
"Resque\\Plugins\\Tests\\": "Tests"
}
},
"scripts": {
"test": "./vendor/bin/phpunit",
"lint": "./vendor/bin/phpcs --standard=PSR2 src/ Tests/"
}
}
Loading

0 comments on commit 66ef02c

Please sign in to comment.