Import from SVN (r45945, r596)
[civicrm-core.git] / tests / phpunit / CRM / Utils / SignerTest.php
CommitLineData
6a488035
TO
1<?php
2
3require_once 'CiviTest/CiviUnitTestCase.php';
4
5class CRM_Utils_SignerTest extends CiviUnitTestCase {
6
7 function get_info() {
8 return array(
9 'name' => 'Signer Test',
10 'description' => 'Test array-signing functions',
11 'group' => 'CiviCRM BAO Tests',
12 );
13 }
14
15 function setUp() {
16 parent::setUp();
17 }
18
19 function testSignValidate() {
20 $cases = array();
21 $cases[] = array(
22 'signParams' => array(
23 'a' => 'eh',
24 'b' => 'bee',
25 'c' => NULL,
26 ),
27 'validateParams' => array(
28 'a' => 'eh',
29 'b' => 'bee',
30 'c' => NULL,
31 ),
32 'isValid' => TRUE,
33 );
34 $cases[] = array(
35 'signParams' => array(
36 'a' => 'eh',
37 'b' => 'bee',
38 'c' => NULL,
39 ),
40 'validateParams' => array(
41 'a' => 'eh',
42 'b' => 'bee',
43 'c' => NULL,
44 'irrelevant' => 'totally-irrelevant',
45 ),
46 'isValid' => TRUE,
47 );
48 $cases[] = array(
49 'signParams' => array(
50 'a' => 'eh',
51 'b' => 'bee',
52 'c' => NULL,
53 ),
54 'validateParams' => array(
55 'a' => 'eh',
56 'b' => 'bee',
57 'c' => '',
58 ),
59 'isValid' => TRUE,
60 );
61 $cases[] = array(
62 'signParams' => array(
63 'a' => 'eh',
64 'b' => 'bee',
65 'c' => NULL,
66 ),
67 'validateParams' => array(
68 'a' => 'eh',
69 'b' => 'bee',
70 'c' => 0,
71 ),
72 'isValid' => FALSE,
73 );
74 $cases[] = array(
75 'signParams' => array(
76 'a' => 'eh',
77 'b' => 'bee',
78 'c' => 0,
79 ),
80 'validateParams' => array(
81 'a' => 'eh',
82 'b' => 'bee',
83 'c' => NULL,
84 ),
85 'isValid' => FALSE,
86 );
87 $cases[] = array(
88 'signParams' => array(
89 'a' => 'eh',
90 'b' => 'bee',
91 'c' => NULL,
92 ),
93 'validateParams' => array(
94 'a' => 'eh',
95 'b' => 'bay',
96 'c' => NULL,
97 ),
98 'isValid' => FALSE,
99 );
100 $cases[] = array(
101 'signParams' => array(
102 'a' => 'eh',
103 'b' => 'bee',
104 'c' => NULL,
105 ),
106 'validateParams' => array(
107 'a' => 'eh',
108 'b' => 'bee',
109 'c' => FALSE,
110 ),
111 'isValid' => FALSE,
112 );
113 $cases[] = array(
114 'signParams' => array(
115 'a' => 1, // int
116 'b' => 'bee',
117 ),
118 'validateParams' => array(
119 'a' => '1', // string
120 'b' => 'bee',
121 ),
122 'isValid' => TRUE,
123 );
124
125 foreach ($cases as $caseId => $case) {
126 require_once 'CRM/Utils/Signer.php';
127 $signer = new CRM_Utils_Signer('secret', array('a', 'b', 'c'));
128 $signature = $signer->sign($case['signParams']);
129 $this->assertTrue(!empty($signature) && is_string($signature)); // arbitrary
130
131 $validator = new CRM_Utils_Signer('secret', array('a', 'b', 'c')); // same as $signer but physically separate
132 $isValid = $validator->validate($signature, $case['validateParams']);
133
134 if ($isValid !== $case['isValid']) {
135 $this->fail("Case ${caseId}: Mismatch: " . var_export($case, TRUE));
136 }
137 $this->assertTrue(TRUE, 'Validation yielded expected result');
138 }
139 }
140}