Merge pull request #15884 from kainuk/issue-lab-1365
[civicrm-core.git] / tests / phpunit / CRM / Utils / SignerTest.php
CommitLineData
6a488035 1<?php
b6708aeb 2/*
3 +--------------------------------------------------------------------+
7d61e75f
TO
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
e70a7fc0 10 */
6a488035 11
e9479dcf
EM
12/**
13 * Class CRM_Utils_SignerTest
acb109b7 14 * @group headless
e9479dcf 15 */
6a488035
TO
16class CRM_Utils_SignerTest extends CiviUnitTestCase {
17
00be9182 18 public function setUp() {
6a488035
TO
19 parent::setUp();
20 }
21
00be9182 22 public function testSignValidate() {
9099cab3
CW
23 $cases = [];
24 $cases[] = [
25 'signParams' => [
6a488035
TO
26 'a' => 'eh',
27 'b' => 'bee',
28 'c' => NULL,
9099cab3
CW
29 ],
30 'validateParams' => [
6a488035
TO
31 'a' => 'eh',
32 'b' => 'bee',
33 'c' => NULL,
9099cab3 34 ],
6a488035 35 'isValid' => TRUE,
9099cab3
CW
36 ];
37 $cases[] = [
38 'signParams' => [
6a488035
TO
39 'a' => 'eh',
40 'b' => 'bee',
41 'c' => NULL,
9099cab3
CW
42 ],
43 'validateParams' => [
6a488035
TO
44 'a' => 'eh',
45 'b' => 'bee',
46 'c' => NULL,
47 'irrelevant' => 'totally-irrelevant',
9099cab3 48 ],
6a488035 49 'isValid' => TRUE,
9099cab3
CW
50 ];
51 $cases[] = [
52 'signParams' => [
6a488035
TO
53 'a' => 'eh',
54 'b' => 'bee',
55 'c' => NULL,
9099cab3
CW
56 ],
57 'validateParams' => [
6a488035
TO
58 'a' => 'eh',
59 'b' => 'bee',
60 'c' => '',
9099cab3 61 ],
6a488035 62 'isValid' => TRUE,
9099cab3
CW
63 ];
64 $cases[] = [
65 'signParams' => [
6a488035
TO
66 'a' => 'eh',
67 'b' => 'bee',
68 'c' => NULL,
9099cab3
CW
69 ],
70 'validateParams' => [
6a488035
TO
71 'a' => 'eh',
72 'b' => 'bee',
73 'c' => 0,
9099cab3 74 ],
6a488035 75 'isValid' => FALSE,
9099cab3
CW
76 ];
77 $cases[] = [
78 'signParams' => [
6a488035
TO
79 'a' => 'eh',
80 'b' => 'bee',
81 'c' => 0,
9099cab3
CW
82 ],
83 'validateParams' => [
6a488035
TO
84 'a' => 'eh',
85 'b' => 'bee',
86 'c' => NULL,
9099cab3 87 ],
6a488035 88 'isValid' => FALSE,
9099cab3
CW
89 ];
90 $cases[] = [
91 'signParams' => [
6a488035
TO
92 'a' => 'eh',
93 'b' => 'bee',
94 'c' => NULL,
9099cab3
CW
95 ],
96 'validateParams' => [
6a488035
TO
97 'a' => 'eh',
98 'b' => 'bay',
99 'c' => NULL,
9099cab3 100 ],
6a488035 101 'isValid' => FALSE,
9099cab3
CW
102 ];
103 $cases[] = [
104 'signParams' => [
6a488035
TO
105 'a' => 'eh',
106 'b' => 'bee',
107 'c' => NULL,
9099cab3
CW
108 ],
109 'validateParams' => [
6a488035
TO
110 'a' => 'eh',
111 'b' => 'bee',
112 'c' => FALSE,
9099cab3 113 ],
6a488035 114 'isValid' => FALSE,
9099cab3
CW
115 ];
116 $cases[] = [
117 'signParams' => [
39b959db
SL
118 // int
119 'a' => 1,
6a488035 120 'b' => 'bee',
9099cab3
CW
121 ],
122 'validateParams' => [
39b959db
SL
123 // string
124 'a' => '1',
6a488035 125 'b' => 'bee',
9099cab3 126 ],
6a488035 127 'isValid' => TRUE,
9099cab3 128 ];
b6708aeb 129
6a488035 130 foreach ($cases as $caseId => $case) {
9099cab3 131 $signer = new CRM_Utils_Signer('secret', ['a', 'b', 'c']);
6a488035 132 $signature = $signer->sign($case['signParams']);
39b959db
SL
133 // arbitrary
134 $this->assertTrue(!empty($signature) && is_string($signature));
b6708aeb 135
39b959db 136 // same as $signer but physically separate
9099cab3 137 $validator = new CRM_Utils_Signer('secret', ['a', 'b', 'c']);
6a488035 138 $isValid = $validator->validate($signature, $case['validateParams']);
b6708aeb 139
6a488035
TO
140 if ($isValid !== $case['isValid']) {
141 $this->fail("Case ${caseId}: Mismatch: " . var_export($case, TRUE));
142 }
143 $this->assertTrue(TRUE, 'Validation yielded expected result');
144 }
145 }
96025800 146
6a488035 147}