]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - tests/XmppValidateTest.php
Merge branch 'master' into nightly
[quix0rs-gnu-social.git] / tests / XmppValidateTest.php
1 <?php
2
3 if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
4     print "This script must be run from the command line\n";
5     exit();
6 }
7
8 define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
9 define('GNUSOCIAL', true);
10 define('STATUSNET', true);  // compatibility
11
12 mb_internal_encoding('UTF-8'); // @fixme this probably belongs in common.php?
13
14 require_once INSTALLDIR . '/lib/common.php';
15 require_once INSTALLDIR . '/plugins/Xmpp/XmppPlugin.php';
16
17 class XmppValidateTest extends PHPUnit_Framework_TestCase
18 {
19         public function setUp()
20         {
21                 if(!array_key_exists('Xmpp', GNUsocial::getActivePlugins())){
22                         $this->markTestSkipped('XmppPlugin is not enabled.');
23                 }
24         }
25     /**
26      * @dataProvider validationCases
27      *
28      */
29     public function testValidate($jid, $validFull, $validBase)
30     {
31         $xmpp = new TestXmppPlugin();
32         $this->assertEquals($validFull || $validBase, $xmpp->validate($jid));
33         $this->assertEquals($validFull, $xmpp->validateFullJid($jid), "validating as full or base JID");
34         $this->assertEquals($validBase, $xmpp->validateBaseJid($jid), "validating as base JID only");
35     }
36
37     /**
38      * @dataProvider normalizationCases
39      *
40      */
41     public function testNormalize($jid, $expected)
42     {
43         $xmpp = new XmppPlugin();
44         $this->assertEquals($expected, $xmpp->normalize($jid));
45     }
46
47     /**
48      * @dataProvider domainCheckCases()
49      */
50     public function testDomainCheck($domain, $expected, $note)
51     {
52         $xmpp = new TestXmppPlugin();
53         $this->assertEquals($expected, $xmpp->checkDomain($domain), $note);
54     }
55
56     static public function validationCases()
57     {
58         $long1023 = "long1023" . str_repeat('x', 1023 - 8);
59         $long1024 = "long1024" . str_repeat('x', 1024 - 8);
60         return array(
61             // Our own test cases for standard things & those mentioned in bug reports
62             // (jid, valid_full, valid_base)
63             array('user@example.com', true, true),
64             array('user@example.com/resource', true, false),
65             array('user with spaces@example.com', false, false), // not kosher
66
67             array('user.@example.com', true, true), // "common in intranets"
68             array('example.com', true, true),
69             array('example.com/resource', true, false),
70             array('jabchat', true, true),
71             
72             array("$long1023@$long1023/$long1023", true, false), // max 1023 "bytes" per portion per spec. Do they really mean bytes though?
73             array("$long1024@$long1023/$long1023", false, false),
74             array("$long1023@$long1024/$long1023", false, false),
75             array("$long1023@$long1023/$long1024", false, false),
76
77             // Borrowed from test_jabber_jutil.c in libpurple
78             array("gmail.com", true, true),
79             array("gmail.com/Test", true, false),
80             array("gmail.com/Test@", true, false),
81             array("gmail.com/@", true, false),
82             array("gmail.com/Test@alkjaweflkj", true, false),
83             array("mark.doliner@gmail.com", true, true),
84             array("mark.doliner@gmail.com/Test12345", true, false),
85             array("mark.doliner@gmail.com/Test@12345", true, false),
86             array("mark.doliner@gmail.com/Te/st@12@//345", true, false),
87             array("わいど@conference.jabber.org", true, true),
88             array("まりるーむ@conference.jabber.org", true, true),
89             array("mark.doliner@gmail.com/まりるーむ", true, false),
90             array("mark.doliner@gmail/stuff.org", true, false),
91             array("stuart@nödåtXäYZ.se", true, true),
92             array("stuart@nödåtXäYZ.se/まりるーむ", true, false),
93             array("mark.doliner@わいど.org", true, true),
94             array("nick@まつ.おおかみ.net", true, true),
95             array("paul@10.0.42.230/s", true, false),
96             array("paul@[::1]", true, true), /* IPv6 */
97             array("paul@[2001:470:1f05:d58::2]", true, true),
98             array("paul@[2001:470:1f05:d58::2]/foo", true, false),
99             array("pa=ul@10.0.42.230", true, true),
100             array("pa,ul@10.0.42.230", true, true),
101
102             array("@gmail.com", false, false),
103             array("@@gmail.com", false, false),
104             array("mark.doliner@@gmail.com/Test12345", false, false),
105             array("mark@doliner@gmail.com/Test12345", false, false),
106             array("@gmail.com/Test@12345", false, false),
107             array("/Test@12345", false, false),
108             array("mark.doliner@", false, false),
109             array("mark.doliner/", false, false),
110             array("mark.doliner@gmail_stuff.org", false, false),
111             array("mark.doliner@gmail[stuff.org", false, false),
112             array("mark.doliner@gmail\\stuff.org", false, false),
113             array("paul@[::1]124", false, false),
114             array("paul@2[::1]124/as", false, false),
115             array("paul@まつ.おおかみ/\x01", false, false),
116
117             /*
118              * RFC 3454 Section 6 reads, in part,
119              * "If a string contains any RandALCat character, the
120              *  string MUST NOT contain any LCat character."
121              * The character is U+066D (ARABIC FIVE POINTED STAR).
122              */
123             // Leaving this one commented out for the moment
124             // as it shouldn't hurt anything for our purposes.
125             //array("foo@example.com/٭simplexe٭", false, false)
126         );
127     }
128     
129     static public function normalizationCases()
130     {
131         return array(
132             // Borrowed from test_jabber_jutil.c in libpurple
133             array('PaUL@DaRkRain42.org', 'paul@darkrain42.org'),
134             array('PaUL@DaRkRain42.org/', 'paul@darkrain42.org'),
135             array('PaUL@DaRkRain42.org/resource', 'paul@darkrain42.org'),
136
137             // Also adapted from libpurple tests...
138             array('Ф@darkrain42.org', 'ф@darkrain42.org'),
139             array('paul@Өarkrain.org', 'paul@өarkrain.org'),
140         );
141     }
142
143     static public function domainCheckCases()
144     {
145         return array(
146             array('gmail.com', true, 'known SRV record'),
147             array('jabber.org', true, 'known SRV record'),
148             array('status.net', true, 'known SRV record'),
149             array('status.leuksman.com', true, 'known no SRV record but valid domain'),
150         );
151     }
152
153
154 }
155
156 class TestXmppPlugin extends XmppPlugin {
157         public function checkDomain($domain)
158         {
159                 return parent::checkDomain($domain);
160         }
161         
162         public function validateBaseJid($jid, $check_domain=false)
163         {
164                 return parent::validateBaseJid($jid, $check_domain);
165         }
166         
167         public function validateFullJid($jid, $check_domain=false)
168         {
169                 return parent::validateFullJid($jid, $check_domain);
170         }
171 }