Passed
Pull Request — master (#61)
by
unknown
12:50
created

DHKeyValueTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 36
c 1
b 0
f 0
dl 0
loc 75
rs 10
wmc 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SimpleSAML\XMLSecurity\Test\XML\xenc;
6
7
use PHPUnit\Framework\Attributes\CoversClass;
8
use PHPUnit\Framework\TestCase;
9
use SimpleSAML\XML\DOMDocumentFactory;
10
use SimpleSAML\XML\TestUtils\SchemaValidationTestTrait;
11
use SimpleSAML\XML\TestUtils\SerializableElementTestTrait;
12
use SimpleSAML\XMLSecurity\Utils\XPath;
13
use SimpleSAML\XMLSecurity\XML\xenc\AbstractDHKeyValueType;
14
use SimpleSAML\XMLSecurity\XML\xenc\AbstractXencElement;
15
use SimpleSAML\XMLSecurity\XML\xenc\DHKeyValue;
16
use SimpleSAML\XMLSecurity\XML\xenc\Generator;
17
use SimpleSAML\XMLSecurity\XML\xenc\P;
18
use SimpleSAML\XMLSecurity\XML\xenc\PgenCounter;
19
use SimpleSAML\XMLSecurity\XML\xenc\Q;
20
use SimpleSAML\XMLSecurity\XML\xenc\Seed;
21
use SimpleSAML\XMLSecurity\XML\xenc\XencPublic;
22
23
use function dirname;
24
use function strval;
25
26
/**
27
 * Class \SimpleSAML\XMLSecurity\Test\XML\xenc\DHKeyValueTest
28
 *
29
 * @covers \SimpleSAML\XMLSecurity\XML\xenc\AbstractXencElement
30
 * @covers \SimpleSAML\XMLSecurity\XML\xenc\AbstractDHKeyValueType
31
 * @covers \SimpleSAML\XMLSecurity\XML\xenc\DHKeyValue
32
 *
33
 * @package simplesamlphp/xml-security
34
 */
35
#[CoversClass(AbstractXencElement::class)]
36
#[CoversClass(AbstractDHKeyValueType::class)]
37
#[CoversClass(DHKeyValue::class)]
38
final class DHKeyValueTest extends TestCase
39
{
40
    use SchemaValidationTestTrait;
41
    use SerializableElementTestTrait;
42
43
    /**
44
     */
45
    public static function setUpBeforeClass(): void
46
    {
47
        self::$testedClass = DHKeyValue::class;
48
49
        self::$xmlRepresentation = DOMDocumentFactory::fromFile(
50
            dirname(__FILE__, 3) . '/resources/xml/xenc_DHKeyValue.xml',
51
        );
52
    }
53
54
55
    /**
56
     */
57
    public function testMarshalling(): void
58
    {
59
        $xencPublic = new XencPublic('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
60
        $p = new P('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
61
        $q = new Q('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
62
        $generator = new Generator('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
63
        $seed = new Seed('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
64
        $pgenCounter = new PgenCounter('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
65
66
        $dhKeyValue = new DHKeyValue($xencPublic, $p, $q, $generator, $seed, $pgenCounter);
67
68
        $this->assertEquals(
69
            self::$xmlRepresentation->saveXML(self::$xmlRepresentation->documentElement),
70
            strval($dhKeyValue),
71
        );
72
    }
73
    /**
74
     */
75
    public function testMarshallingElementOrder(): void
76
    {
77
        $xencPublic = new XencPublic('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
78
        $p = new P('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
79
        $q = new Q('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
80
        $generator = new Generator('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
81
        $seed = new Seed('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
82
        $pgenCounter = new PgenCounter('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=');
83
84
        $dhKeyValue = new DHKeyValue($xencPublic, $p, $q, $generator, $seed, $pgenCounter);
85
86
        // Marshall it to a \DOMElement
87
        $dhKeyValueElement = $dhKeyValue->toXML();
88
89
        $xpCache = XPath::getXPath($dhKeyValueElement);
90
91
        // Test for an P
92
        /** @var \DOMElement[] $pElements */
93
        $pElements = XPath::xpQuery($dhKeyValueElement, './xenc:P', $xpCache);
94
        $this->assertCount(1, $pElements);
95
96
        // Test ordering of DHKeyValue contents
97
        /** @var \DOMElement[] $dhKeyValueElements */
98
        $dhKeyValueElements = XPath::xpQuery(
99
            $dhKeyValueElement,
100
            './xenc:P/following-sibling::*',
101
            $xpCache,
102
        );
103
104
        $this->assertCount(5, $dhKeyValueElements);
105
        $this->assertEquals('xenc:Q', $dhKeyValueElements[0]->tagName);
106
        $this->assertEquals('xenc:Generator', $dhKeyValueElements[1]->tagName);
107
        $this->assertEquals('xenc:Public', $dhKeyValueElements[2]->tagName);
108
        $this->assertEquals('xenc:seed', $dhKeyValueElements[3]->tagName);
109
        $this->assertEquals('xenc:pgenCounter', $dhKeyValueElements[4]->tagName);
110
    }
111
}
112