You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.7 KiB
152 lines
4.7 KiB
<?php |
|
namespace Ratchet\Application\Server; |
|
use Ratchet\Server\FlashPolicy; |
|
|
|
/** |
|
* @covers Ratchet\Server\FlashPolicy |
|
*/ |
|
class FlashPolicyTest extends \PHPUnit_Framework_TestCase { |
|
|
|
protected $_policy; |
|
|
|
public function setUp() { |
|
$this->_policy = new FlashPolicy(); |
|
} |
|
|
|
public function testPolicyRender() { |
|
$this->_policy->setSiteControl('all'); |
|
$this->_policy->addAllowedAccess('example.com', '*'); |
|
$this->_policy->addAllowedAccess('dev.example.com', '*'); |
|
|
|
$this->assertInstanceOf('SimpleXMLElement', $this->_policy->renderPolicy()); |
|
} |
|
|
|
public function testInvalidPolicyReader() { |
|
$this->setExpectedException('UnexpectedValueException'); |
|
$this->_policy->renderPolicy(); |
|
} |
|
|
|
public function testInvalidDomainPolicyReader() { |
|
$this->setExpectedException('UnexpectedValueException'); |
|
$this->_policy->setSiteControl('all'); |
|
$this->_policy->addAllowedAccess('dev.example.*', '*'); |
|
$this->_policy->renderPolicy(); |
|
} |
|
|
|
/** |
|
* @dataProvider siteControl |
|
*/ |
|
public function testSiteControlValidation($accept, $permittedCrossDomainPolicies) { |
|
$this->assertEquals($accept, $this->_policy->validateSiteControl($permittedCrossDomainPolicies)); |
|
} |
|
|
|
public static function siteControl() { |
|
return array( |
|
array(true, 'all') |
|
, array(true, 'none') |
|
, array(true, 'master-only') |
|
, array(false, 'by-content-type') |
|
, array(false, 'by-ftp-filename') |
|
, array(false, '') |
|
, array(false, 'all ') |
|
, array(false, 'asdf') |
|
, array(false, '@893830') |
|
, array(false, '*') |
|
); |
|
} |
|
|
|
/** |
|
* @dataProvider URI |
|
*/ |
|
public function testDomainValidation($accept, $domain) { |
|
$this->assertEquals($accept, $this->_policy->validateDomain($domain)); |
|
} |
|
|
|
public static function URI() { |
|
return array( |
|
array(true, '*') |
|
, array(true, 'example.com') |
|
, array(true, 'exam-ple.com') |
|
, array(true, '*.example.com') |
|
, array(true, 'www.example.com') |
|
, array(true, 'dev.dev.example.com') |
|
, array(true, 'http://example.com') |
|
, array(true, 'https://example.com') |
|
, array(true, 'http://*.example.com') |
|
, array(false, 'exam*ple.com') |
|
, array(true, '127.0.255.1') |
|
, array(true, 'localhost') |
|
, array(false, 'www.example.*') |
|
, array(false, 'www.exa*le.com') |
|
, array(false, 'www.example.*com') |
|
, array(false, '*.example.*') |
|
, array(false, 'gasldf*$#a0sdf0a8sdf') |
|
); |
|
} |
|
|
|
/** |
|
* @dataProvider ports |
|
*/ |
|
public function testPortValidation($accept, $ports) { |
|
$this->assertEquals($accept, $this->_policy->validatePorts($ports)); |
|
} |
|
|
|
public static function ports() { |
|
return array( |
|
array(true, '*') |
|
, array(true, '80') |
|
, array(true, '80,443') |
|
, array(true, '507,516-523') |
|
, array(true, '507,516-523,333') |
|
, array(true, '507,516-523,507,516-523') |
|
, array(false, '516-') |
|
, array(true, '516-523,11') |
|
, array(false, '516,-523,11') |
|
, array(false, 'example') |
|
, array(false, 'asdf,123') |
|
, array(false, '--') |
|
, array(false, ',,,') |
|
, array(false, '838*') |
|
); |
|
} |
|
|
|
public function testAddAllowedAccessOnlyAcceptsValidPorts() { |
|
$this->setExpectedException('UnexpectedValueException'); |
|
|
|
$this->_policy->addAllowedAccess('*', 'nope'); |
|
} |
|
|
|
public function testSetSiteControlThrowsException() { |
|
$this->setExpectedException('UnexpectedValueException'); |
|
|
|
$this->_policy->setSiteControl('nope'); |
|
} |
|
|
|
public function testErrorClosesConnection() { |
|
$conn = $this->getMock('\\Ratchet\\ConnectionInterface'); |
|
$conn->expects($this->once())->method('close'); |
|
|
|
$this->_policy->onError($conn, new \Exception); |
|
} |
|
|
|
public function testOnMessageSendsString() { |
|
$this->_policy->addAllowedAccess('*', '*'); |
|
|
|
$conn = $this->getMock('\\Ratchet\\ConnectionInterface'); |
|
$conn->expects($this->once())->method('send')->with($this->isType('string')); |
|
|
|
$this->_policy->onMessage($conn, ' '); |
|
} |
|
|
|
public function testOnOpenExists() { |
|
$this->assertTrue(method_exists($this->_policy, 'onOpen')); |
|
$conn = $this->getMock('\Ratchet\ConnectionInterface'); |
|
$this->_policy->onOpen($conn); |
|
} |
|
|
|
public function testOnCloseExists() { |
|
$this->assertTrue(method_exists($this->_policy, 'onClose')); |
|
$conn = $this->getMock('\Ratchet\ConnectionInterface'); |
|
$this->_policy->onClose($conn); |
|
} |
|
}
|
|
|