diff --git a/tests/lib/SimpleSAML/Auth/SimpleTest.php b/tests/lib/SimpleSAML/Auth/SimpleTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e47fce2948f02756b2d312a5d65007e103ead7f3 --- /dev/null +++ b/tests/lib/SimpleSAML/Auth/SimpleTest.php @@ -0,0 +1,89 @@ +<?php + +namespace SimpleSAML\Test\Auth; + +/** + * Tests for \SimpleSAML\Auth\Simple + * + */ +class SimpleTest extends \SimpleSAML\Test\Utils\ClearStateTestCase +{ + + /** + * @test + */ + public function testGetProcessedURL() + { + $class = new \ReflectionClass('\SimpleSAML\Auth\Simple'); + $method = $class->getMethod('getProcessedURL'); + $method->setAccessible(true); + + // fool the routines to make them believe we are running in a web server + $_SERVER['REQUEST_URI'] = '/'; + + // test merging configuration option with passed URL + \SimpleSAML_Configuration::loadFromArray(array( + 'application' => array( + 'baseURL' => 'https://example.org' + ) + ), '[ARRAY]', 'simplesaml'); + + $s = new \SimpleSAML\Auth\Simple(null); + + $this->assertEquals('https://example.org/', $method->invokeArgs($s, array(null))); + + // test a full URL passed as parameter + $this->assertEquals( + 'https://example.org/foo/bar?a=b#fragment', + $method->invokeArgs( + $s, + array('http://some.overridden.host/foo/bar?a=b#fragment') + ) + ); + + // test a full, current URL with no parameters + $_SERVER['REQUEST_URI'] = '/foo/bar?a=b#fragment'; + $this->assertEquals('https://example.org/foo/bar?a=b#fragment', $method->invokeArgs($s, array(null))); + + // test ports are overridden by configuration + $_SERVER['SERVER_PORT'] = '1234'; + $this->assertEquals('https://example.org/foo/bar?a=b#fragment', $method->invokeArgs($s, array(null))); + + // test config option with ending with / and port + \SimpleSAML_Configuration::loadFromArray(array( + 'application' => array( + 'baseURL' => 'http://example.org:8080/' + ) + ), '[ARRAY]', 'simplesaml'); + $s = new \SimpleSAML\Auth\Simple(null); + $this->assertEquals('http://example.org:8080/foo/bar?a=b#fragment', $method->invokeArgs($s, array(null))); + + // test again with a relative URL as a parameter + $this->assertEquals( + 'http://example.org:8080/something?foo=bar#something', + $method->invokeArgs($s, array('/something?foo=bar#something')) + ); + + // now test with no configuration + $_SERVER['SERVER_NAME'] = 'example.org'; + \SimpleSAML_Configuration::loadFromArray(array(), '[ARRAY]', 'simplesaml'); + $s = new \SimpleSAML\Auth\Simple(null); + $this->assertEquals('http://example.org:1234/foo/bar?a=b#fragment', $method->invokeArgs($s, array(null))); + + // no configuration, https and port + $_SERVER['HTTPS'] = 'on'; + $this->assertEquals('https://example.org:1234/foo/bar?a=b#fragment', $method->invokeArgs($s, array(null))); + + // no configuration and a relative URL as a parameter + $this->assertEquals( + 'https://example.org:1234/something?foo=bar#something', + $method->invokeArgs($s, array('/something?foo=bar#something')) + ); + + // finally, no configuration and full URL as a parameter + $this->assertEquals( + 'https://example.org/one/two/three?foo=bar#fragment', + $method->invokeArgs($s, array('https://example.org/one/two/three?foo=bar#fragment')) + ); + } +}