Skip to content

Commit f5e4690

Browse files
committed
update test suite to using SOAP messages
1 parent b20892d commit f5e4690

3 files changed

Lines changed: 42 additions & 20 deletions

File tree

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
},
4747
"require-dev": {
4848
"beste/clock": "~3.0.0",
49+
"mockery/mockery": "~1.6.12",
4950
"simplesamlphp/simplesamlphp-test-framework": "~1.9.3"
5051
},
5152
"support": {

src/Controller/AttributeServer.php

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
use DateInterval;
88
use Nyholm\Psr7\Factory\Psr17Factory;
9+
use Nyholm\Psr7\ServerRequest;
10+
use SimpleSAML\Message;
911
use SimpleSAML\{Configuration, Error, Logger};
1012
use SimpleSAML\HTTP\RunnableResponse;
1113
use SimpleSAML\Metadata\MetaDataStorageHandler;
@@ -82,22 +84,9 @@ public function setMetadataStorageHandler(MetaDataStorageHandler $handler): void
8284
* @return \SimpleSAML\HTTP\RunnableResponse
8385
* @throws \SimpleSAML\Error\BadRequest
8486
*/
85-
public function main(/** @scrutinizer ignore-unused */ Request $request): RunnableResponse
87+
public function main(/** @scrutinizer ignore-unused */ SOAP $soap, ServerRequest $request): RunnableResponse
8688
{
87-
$psr17Factory = new Psr17Factory();
88-
$psrHttpFactory = new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
89-
$psrRequest = $psrHttpFactory->createRequest($request);
90-
91-
$binding = Binding::getCurrentBinding($psrRequest);
92-
if (!($binding instanceof SynchronousBindingInterface)) {
93-
throw new Error\BadRequest('Invalid binding; MUST use a synchronous binding.');
94-
}
95-
96-
$message = $binding->receive($psrRequest);
97-
if (!($message instanceof AttributeQuery)) {
98-
throw new Error\BadRequest('Invalid message received to AttributeQuery endpoint.');
99-
}
100-
89+
$message = $soap->receive($request);
10190
$idpEntityId = $this->metadataHandler->getMetaDataCurrentEntityID('saml20-idp-hosted');
10291

10392
$issuer = $message->getIssuer();

tests/src/Controller/AttributeServerTest.php

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,27 @@
44

55
namespace SimpleSAML\Test\Module\exampleattributeserver\Controller;
66

7+
use Mockery\Adapter\Phpunit\MockeryTestCase;
8+
9+
use Nyholm\Psr7\ServerRequest;
710
use PHPUnit\Framework\Attributes\CoversClass;
811
use PHPUnit\Framework\TestCase;
12+
use SimpleSAML\SAML2\Binding\SOAP;
913
use SimpleSAML\Configuration;
1014
use SimpleSAML\HTTP\RunnableResponse;
1115
use SimpleSAML\Metadata\MetaDataStorageHandler;
1216
use SimpleSAML\Module\exampleattributeserver\Controller\AttributeServer;
1317
use SimpleSAML\XMLSecurity\TestUtils\PEMCertificatesMock;
1418
use Symfony\Component\HttpFoundation\Request;
19+
use SAML2\Message;
1520

1621
/**
1722
* Set of tests for the controllers in the "exampleattributeserver" module.
1823
*
1924
* @package simplesamlphp/simplesamlphp-module-exampleattributeserver
2025
*/
2126
#[CoversClass(AttributeServer::class)]
22-
class ExampleAttributeServerTest extends TestCase
27+
class ExampleAttributeServerTest extends MockeryTestCase
2328
{
2429
/** @var \SimpleSAML\Configuration */
2530
protected static Configuration $config;
@@ -52,9 +57,22 @@ public static function setUpBeforeClass(): void
5257
*/
5358
public function testMain(): void
5459
{
55-
$_SERVER['REQUEST_URI'] = '/module.php/exampleattributeserver/attributeserver';
56-
$_SERVER['HTTP_HOST'] = 'example.org';
57-
$request = Request::createFromGlobals();
60+
$soap = $this->getStubWithInput(<<<SOAP
61+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
62+
<SOAP-ENV:Body>
63+
<samlp:AttributeQuery xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="aaf23196-1773-2113-474a-fe114412ab72" Version="2.0" IssueInstant="2017-09-06T11:49:27Z">
64+
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://example.org/</saml:Issuer>
65+
<saml:Subject>
66+
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified">urn:example:subject</saml:NameID>
67+
</saml:Subject>
68+
<saml:Attribute Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="entitlements"/>
69+
<saml:Attribute Name="urn:oid:2.5.4.4" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="sn"/>
70+
<saml:Attribute Name="urn:oid:2.16.840.1.113730.3.1.39" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="preferredLanguage"/>
71+
</samlp:AttributeQuery>
72+
</SOAP-ENV:Body>
73+
</SOAP-ENV:Envelope>
74+
SOAP);
75+
5876

5977
$mdh = $this->createMock(MetaDataStorageHandler::class);
6078
$mdh->method('getMetaDataCurrentEntityID')->willReturn('https://example.org/');
@@ -67,9 +85,23 @@ public function testMain(): void
6785

6886
$c = new AttributeServer(self::$config);
6987
$c->setMetadataStorageHandler($mdh);
70-
$response = $c->main($request);
88+
89+
$request = new ServerRequest('', '');
90+
$response = $c->main($soap, $request);
7191

7292
$this->assertInstanceOf(RunnableResponse::class, $response);
7393
$this->assertTrue($response->isSuccessful());
7494
}
95+
96+
/**
97+
* @return \SimpleSAML\SAML2\Binding\SOAP
98+
*/
99+
private function getStubWithInput($input): SOAP
100+
{
101+
$stub = $this->getMockBuilder(SOAP::class)->onlyMethods(['getInputStream'])->getMock();
102+
$stub->expects($this->once())
103+
->method('getInputStream')
104+
->willReturn($input);
105+
return $stub;
106+
}
75107
}

0 commit comments

Comments
 (0)