132 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
class RequestsTest_Proxy_HTTP extends PHPUnit_Framework_TestCase {
 | 
						|
	protected function checkProxyAvailable($type = '') {
 | 
						|
		switch ($type) {
 | 
						|
			case 'auth':
 | 
						|
				$has_proxy = defined('REQUESTS_HTTP_PROXY_AUTH') && REQUESTS_HTTP_PROXY_AUTH;
 | 
						|
				break;
 | 
						|
 | 
						|
			default:
 | 
						|
				$has_proxy = defined('REQUESTS_HTTP_PROXY') && REQUESTS_HTTP_PROXY;
 | 
						|
				break;
 | 
						|
		}
 | 
						|
 | 
						|
		if (!$has_proxy) {
 | 
						|
			$this->markTestSkipped('Proxy not available');
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public function transportProvider() {
 | 
						|
		return array(
 | 
						|
			array('Requests_Transport_cURL'),
 | 
						|
			array('Requests_Transport_fsockopen'),
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dataProvider transportProvider
 | 
						|
	 */
 | 
						|
	public function testConnectWithString($transport) {
 | 
						|
		$this->checkProxyAvailable();
 | 
						|
 | 
						|
		$options = array(
 | 
						|
			'proxy' => REQUESTS_HTTP_PROXY,
 | 
						|
			'transport' => $transport,
 | 
						|
		);
 | 
						|
		$response = Requests::get(httpbin('/get'), array(), $options);
 | 
						|
		$this->assertEquals('http', $response->headers['x-requests-proxied']);
 | 
						|
 | 
						|
		$data = json_decode($response->body, true);
 | 
						|
		$this->assertEquals('http', $data['headers']['x-requests-proxy']);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dataProvider transportProvider
 | 
						|
	 */
 | 
						|
	public function testConnectWithArray($transport) {
 | 
						|
		$this->checkProxyAvailable();
 | 
						|
 | 
						|
		$options = array(
 | 
						|
			'proxy' => array(REQUESTS_HTTP_PROXY),
 | 
						|
			'transport' => $transport,
 | 
						|
		);
 | 
						|
		$response = Requests::get(httpbin('/get'), array(), $options);
 | 
						|
		$this->assertEquals('http', $response->headers['x-requests-proxied']);
 | 
						|
 | 
						|
		$data = json_decode($response->body, true);
 | 
						|
		$this->assertEquals('http', $data['headers']['x-requests-proxy']);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dataProvider transportProvider
 | 
						|
	 * @expectedException Requests_Exception
 | 
						|
	 */
 | 
						|
	public function testConnectInvalidParameters($transport) {
 | 
						|
		$this->checkProxyAvailable();
 | 
						|
 | 
						|
		$options = array(
 | 
						|
			'proxy' => array(REQUESTS_HTTP_PROXY, 'testuser', 'password', 'something'),
 | 
						|
			'transport' => $transport,
 | 
						|
		);
 | 
						|
		$response = Requests::get(httpbin('/get'), array(), $options);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dataProvider transportProvider
 | 
						|
	 */
 | 
						|
	public function testConnectWithInstance($transport) {
 | 
						|
		$this->checkProxyAvailable();
 | 
						|
 | 
						|
		$options = array(
 | 
						|
			'proxy' => new Requests_Proxy_HTTP(REQUESTS_HTTP_PROXY),
 | 
						|
			'transport' => $transport,
 | 
						|
		);
 | 
						|
		$response = Requests::get(httpbin('/get'), array(), $options);
 | 
						|
		$this->assertEquals('http', $response->headers['x-requests-proxied']);
 | 
						|
 | 
						|
		$data = json_decode($response->body, true);
 | 
						|
		$this->assertEquals('http', $data['headers']['x-requests-proxy']);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dataProvider transportProvider
 | 
						|
	 */
 | 
						|
	public function testConnectWithAuth($transport) {
 | 
						|
		$this->checkProxyAvailable('auth');
 | 
						|
 | 
						|
		$options = array(
 | 
						|
			'proxy' => array(
 | 
						|
				REQUESTS_HTTP_PROXY_AUTH,
 | 
						|
				REQUESTS_HTTP_PROXY_AUTH_USER,
 | 
						|
				REQUESTS_HTTP_PROXY_AUTH_PASS
 | 
						|
			),
 | 
						|
			'transport' => $transport,
 | 
						|
		);
 | 
						|
		$response = Requests::get(httpbin('/get'), array(), $options);
 | 
						|
		$this->assertEquals(200, $response->status_code);
 | 
						|
		$this->assertEquals('http', $response->headers['x-requests-proxied']);
 | 
						|
 | 
						|
		$data = json_decode($response->body, true);
 | 
						|
		$this->assertEquals('http', $data['headers']['x-requests-proxy']);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dataProvider transportProvider
 | 
						|
	 */
 | 
						|
	public function testConnectWithInvalidAuth($transport) {
 | 
						|
		$this->checkProxyAvailable('auth');
 | 
						|
 | 
						|
		$options = array(
 | 
						|
			'proxy' => array(
 | 
						|
				REQUESTS_HTTP_PROXY_AUTH,
 | 
						|
				REQUESTS_HTTP_PROXY_AUTH_USER . '!',
 | 
						|
				REQUESTS_HTTP_PROXY_AUTH_PASS . '!'
 | 
						|
			),
 | 
						|
			'transport' => $transport,
 | 
						|
		);
 | 
						|
		$response = Requests::get(httpbin('/get'), array(), $options);
 | 
						|
		$this->assertEquals(407, $response->status_code);
 | 
						|
	}
 | 
						|
}
 |