Passed
Push — master ( be09b3...67068d )
by Tim
13:28
created

X509IssuerSerialTest::testUnmarshalling()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 2
b 0
f 0
nc 1
nop 0
dl 0
loc 7
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SimpleSAML\XMLSecurity\Test\XML\ds;
6
7
use PHPUnit\Framework\TestCase;
8
use SimpleSAML\XML\DOMDocumentFactory;
9
use SimpleSAML\XML\TestUtils\SerializableElementTestTrait;
10
use SimpleSAML\XMLSecurity\CryptoEncoding\PEM;
11
use SimpleSAML\XMLSecurity\Key;
12
use SimpleSAML\XMLSecurity\TestUtils\PEMCertificatesMock;
13
use SimpleSAML\XMLSecurity\Utils\Certificate as CertificateUtils;
14
use SimpleSAML\XMLSecurity\Utils\XPath;
15
use SimpleSAML\XMLSecurity\XML\ds\X509IssuerName;
16
use SimpleSAML\XMLSecurity\XML\ds\X509IssuerSerial;
17
use SimpleSAML\XMLSecurity\XML\ds\X509SerialNumber;
18
19
use function dirname;
20
use function strval;
21
22
/**
23
 * Class \SimpleSAML\XMLSecurity\XML\ds\X509IssuerSerial
24
 *
25
 * @covers \SimpleSAML\XMLSecurity\XML\ds\AbstractDsElement
26
 * @covers \SimpleSAML\XMLSecurity\XML\ds\X509IssuerSerial
27
 *
28
 * @package simplesamlphp/xml-security
29
 */
30
final class X509IssuerSerialTest extends TestCase
31
{
32
    use SerializableElementTestTrait;
0 ignored issues
show
Bug introduced by
The trait SimpleSAML\XML\TestUtils...lizableElementTestTrait requires the property $documentElement which is not provided by SimpleSAML\XMLSecurity\T...ds\X509IssuerSerialTest.
Loading history...
33
34
    /** @var \SimpleSAML\XMLSecurity\Key\X509Certificate */
35
    private static Key\X509Certificate $key;
36
37
    /** @var \SimpleSAML\XMLSecurity\XML\ds\X509IssuerName */
38
    private static X509IssuerName $issuer;
39
40
    /** @var \SimpleSAML\XMLSecurity\XML\ds\X509SerialNumber */
41
    private static X509SerialNumber $serial;
42
43
44
    /**
45
     */
46
    public function setUp(): void
47
    {
48
        self::$testedClass = X509IssuerSerial::class;
49
50
        self::$xmlRepresentation = DOMDocumentFactory::fromFile(
51
            dirname(__FILE__, 3) . '/resources/xml/ds_X509IssuerSerial.xml',
52
        );
53
54
        self::$key = new Key\X509Certificate(PEM::fromString(PEMCertificatesMock::getPlainCertificate()));
55
56
        $details = self::$key->getCertificateDetails();
57
        self::$issuer = new X509IssuerName(CertificateUtils::parseIssuer($details['issuer']));
58
        self::$serial = new X509SerialNumber($details['serialNumber']);
59
    }
60
61
62
    /**
63
     */
64
    public function testMarshalling(): void
65
    {
66
        $X509IssuerSerial = new X509IssuerSerial(self::$issuer, self::$serial);
67
68
        $this->assertEquals(
69
            self::$xmlRepresentation->saveXML(self::$xmlRepresentation->documentElement),
70
            strval($X509IssuerSerial),
71
        );
72
    }
73
74
75
    /**
76
     */
77
    public function testMarshallingElementOrdering(): void
78
    {
79
        $X509IssuerSerial = new X509IssuerSerial(self::$issuer, self::$serial);
80
        $X509IssuerSerialElement = $X509IssuerSerial->toXML();
81
82
        $xpCache = XPath::getXPath($X509IssuerSerialElement);
83
84
        $issuerName = XPath::xpQuery($X509IssuerSerialElement, './ds:X509IssuerName', $xpCache);
85
        $this->assertCount(1, $issuerName);
86
87
        /** @psalm-var \DOMElement[] $X509IssuerSerialElements */
88
        $X509IssuerSerialElements = XPath::xpQuery(
89
            $X509IssuerSerialElement,
90
            './ds:X509IssuerName/following-sibling::*',
91
            $xpCache,
92
        );
93
94
        // Test ordering of X509IssuerSerial contents
95
        $this->assertCount(1, $X509IssuerSerialElements);
96
        $this->assertEquals('ds:X509SerialNumber', $X509IssuerSerialElements[0]->tagName);
97
    }
98
}
99