PageRenderTime 55ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/gems/ruby-openid-2.1.4/test/test_message.rb

https://github.com/warburg/warburg
Ruby | 1116 lines | 911 code | 176 blank | 29 comment | 18 complexity | 687b13345a31513084ae68a9c5550e18 MD5 | raw file
Possible License(s): GPL-2.0, Apache-2.0, MIT
  1. # last synced with Python openid.test.test_message on 6/29/2007.
  2. require 'test/unit'
  3. require 'util'
  4. require 'openid/message'
  5. require 'rexml/document'
  6. module OpenID
  7. module GetArgsMixin
  8. # Tests a standard set of behaviors of Message.get_arg with
  9. # variations on handling defaults.
  10. def get_arg_tests(ns, key, expected=nil)
  11. assert_equal(expected, @m.get_arg(ns, key))
  12. if expected.nil?
  13. assert_equal(@m.get_arg(ns, key, :a_default), :a_default)
  14. assert_raise(Message::KeyNotFound) { @m.get_arg(ns, key, NO_DEFAULT) }
  15. else
  16. assert_equal(@m.get_arg(ns, key, :a_default), expected)
  17. assert_equal(@m.get_arg(ns, key, NO_DEFAULT), expected)
  18. end
  19. end
  20. end
  21. class EmptyMessageTestCase < Test::Unit::TestCase
  22. include GetArgsMixin
  23. def setup
  24. @m = Message.new
  25. end
  26. def test_get_aliased_arg_no_default
  27. assert_raises(Message::KeyNotFound) do
  28. @m.get_aliased_arg('ns.pork', NO_DEFAULT)
  29. end
  30. ns_uri = "urn:pork"
  31. @m.namespaces.add_alias(ns_uri, 'pork_alias')
  32. # Should return ns_uri.
  33. assert_equal(ns_uri, @m.get_aliased_arg('ns.pork_alias', NO_DEFAULT))
  34. end
  35. def test_to_post_args
  36. assert_equal({}, @m.to_post_args)
  37. end
  38. def test_to_args
  39. assert_equal({}, @m.to_args)
  40. end
  41. def test_to_kvform
  42. assert_equal('', @m.to_kvform)
  43. end
  44. def test_from_kvform
  45. kvform = "foo:bar\none:two\n"
  46. args = {'foo' => 'bar', 'one' => 'two'}
  47. expected_result = Message.from_openid_args(args)
  48. assert_equal(expected_result, Message.from_kvform(kvform))
  49. end
  50. def test_to_url_encoded
  51. assert_equal('', @m.to_url_encoded)
  52. end
  53. def test_to_url
  54. base_url = 'http://base.url/'
  55. assert_equal(base_url, @m.to_url(base_url))
  56. end
  57. def test_get_openid
  58. assert_equal(nil, @m.get_openid_namespace)
  59. end
  60. def test_get_key_openid
  61. assert_raise(UndefinedOpenIDNamespace) {
  62. @m.get_key(OPENID_NS, nil)
  63. }
  64. end
  65. def test_get_key_bare
  66. assert_equal('foo', @m.get_key(BARE_NS, 'foo'))
  67. end
  68. def test_get_key_ns1
  69. assert_equal(nil, @m.get_key(OPENID1_NS, 'foo'))
  70. end
  71. def test_get_key_ns2
  72. assert_equal(nil, @m.get_key(OPENID2_NS, 'foo'))
  73. end
  74. def test_get_key_ns3
  75. assert_equal(nil, @m.get_key('urn:something-special', 'foo'))
  76. end
  77. def test_has_key
  78. assert_raise(UndefinedOpenIDNamespace) {
  79. @m.has_key?(OPENID_NS, 'foo')
  80. }
  81. end
  82. def test_has_key_bare
  83. assert_equal(false, @m.has_key?(BARE_NS, 'foo'))
  84. end
  85. def test_has_key_ns1
  86. assert_equal(false, @m.has_key?(OPENID1_NS, 'foo'))
  87. end
  88. def test_has_key_ns2
  89. assert_equal(false, @m.has_key?(OPENID2_NS, 'foo'))
  90. end
  91. def test_has_key_ns3
  92. assert_equal(false, @m.has_key?('urn:xxx', 'foo'))
  93. end
  94. def test_get_arg
  95. assert_raise(UndefinedOpenIDNamespace) {
  96. @m.get_args(OPENID_NS)
  97. }
  98. end
  99. def test_get_arg_bare
  100. get_arg_tests(ns=BARE_NS, key='foo')
  101. end
  102. def test_get_arg_ns1
  103. get_arg_tests(ns=OPENID1_NS, key='foo')
  104. end
  105. def test_get_arg_ns2
  106. get_arg_tests(ns=OPENID2_NS, key='foo')
  107. end
  108. def test_get_arg_ns3
  109. get_arg_tests(ns='urn:nothing-significant', key='foo')
  110. end
  111. def test_get_args
  112. assert_raise(UndefinedOpenIDNamespace) {
  113. @m.get_args(OPENID_NS)
  114. }
  115. end
  116. def test_get_args_bare
  117. assert_equal({}, @m.get_args(BARE_NS))
  118. end
  119. def test_get_args_ns1
  120. assert_equal({}, @m.get_args(OPENID1_NS))
  121. end
  122. def test_get_args_ns2
  123. assert_equal({}, @m.get_args(OPENID2_NS))
  124. end
  125. def test_get_args_ns3
  126. assert_equal({}, @m.get_args('urn:xxx'))
  127. end
  128. def test_update_args
  129. assert_raise(UndefinedOpenIDNamespace) {
  130. @m.update_args(OPENID_NS, {'does not'=>'matter'})
  131. }
  132. end
  133. def _test_update_args_ns(ns)
  134. updates = {
  135. 'camper van beethoven' => 'david l',
  136. 'magnolia electric, co' => 'jason m'
  137. }
  138. assert_equal({}, @m.get_args(ns))
  139. @m.update_args(ns, updates)
  140. assert_equal(updates, @m.get_args(ns))
  141. end
  142. def test_update_args_bare
  143. _test_update_args_ns(BARE_NS)
  144. end
  145. def test_update_args_ns1
  146. _test_update_args_ns(OPENID1_NS)
  147. end
  148. def test_update_args_ns2
  149. _test_update_args_ns(OPENID2_NS)
  150. end
  151. def test_update_args_ns3
  152. _test_update_args_ns('urn:xxx')
  153. end
  154. def test_set_arg
  155. assert_raise(UndefinedOpenIDNamespace) {
  156. @m.set_arg(OPENID_NS,'does not','matter')
  157. }
  158. end
  159. def _test_set_arg_ns(ns)
  160. key = 'Camper Van Beethoven'
  161. value = 'David Lowery'
  162. assert_equal(nil, @m.get_arg(ns, key))
  163. @m.set_arg(ns, key, value)
  164. assert_equal(value, @m.get_arg(ns, key))
  165. end
  166. def test_set_arg_bare
  167. _test_set_arg_ns(BARE_NS)
  168. end
  169. def test_set_arg_ns1
  170. _test_set_arg_ns(OPENID1_NS)
  171. end
  172. def test_set_arg_ns2
  173. _test_set_arg_ns(OPENID2_NS)
  174. end
  175. def test_set_arg_ns3
  176. _test_set_arg_ns('urn:xxx')
  177. end
  178. def test_del_arg
  179. assert_raise(UndefinedOpenIDNamespace) {
  180. @m.set_arg(OPENID_NS, 'does not', 'matter')
  181. }
  182. end
  183. def _test_del_arg_ns(ns)
  184. key = 'Fleeting Joys'
  185. assert_equal(nil, @m.del_arg(ns, key))
  186. end
  187. def test_del_arg_bare
  188. _test_del_arg_ns(BARE_NS)
  189. end
  190. def test_del_arg_ns1
  191. _test_del_arg_ns(OPENID1_NS)
  192. end
  193. def test_del_arg_ns2
  194. _test_del_arg_ns(OPENID2_NS)
  195. end
  196. def test_del_arg_ns3
  197. _test_del_arg_ns('urn:xxx')
  198. end
  199. def test_isOpenID1
  200. assert_equal(false, @m.is_openid1)
  201. end
  202. def test_isOpenID2
  203. assert_equal(false, @m.is_openid2)
  204. end
  205. def test_set_openid_namespace
  206. assert_raise(InvalidOpenIDNamespace) {
  207. @m.set_openid_namespace('http://invalid/', false)
  208. }
  209. end
  210. end
  211. class OpenID1MessageTest < Test::Unit::TestCase
  212. include GetArgsMixin
  213. def setup
  214. @m = Message.from_post_args({'openid.mode' => 'error',
  215. 'openid.error' => 'unit test'})
  216. end
  217. def test_has_openid_ns
  218. assert_equal(OPENID1_NS, @m.get_openid_namespace)
  219. assert_equal(OPENID1_NS,
  220. @m.namespaces.get_namespace_uri(NULL_NAMESPACE))
  221. end
  222. def test_get_aliased_arg
  223. assert_equal('error', @m.get_aliased_arg('mode'))
  224. end
  225. def test_get_aliased_arg_ns
  226. assert_equal(OPENID1_NS, @m.get_aliased_arg('ns'))
  227. end
  228. def test_get_aliased_arg_with_ns
  229. @m = Message.from_post_args(
  230. {'openid.mode' => 'error',
  231. 'openid.error' => 'unit test',
  232. 'openid.ns.invalid' => 'http://invalid/',
  233. 'openid.invalid.stuff' => 'things',
  234. 'openid.invalid.stuff.blinky' => 'powerplant',
  235. })
  236. assert_equal('http://invalid/', @m.get_aliased_arg('ns.invalid'))
  237. assert_equal('things', @m.get_aliased_arg('invalid.stuff'))
  238. assert_equal('powerplant', @m.get_aliased_arg('invalid.stuff.blinky'))
  239. end
  240. def test_get_aliased_arg_with_ns_default
  241. @m = Message.from_post_args({})
  242. assert_equal('monkeys!', @m.get_aliased_arg('ns.invalid',
  243. default="monkeys!"))
  244. end
  245. def test_to_post_args
  246. assert_equal({'openid.mode' => 'error',
  247. 'openid.error' => 'unit test'},
  248. @m.to_post_args)
  249. end
  250. def test_to_post_args_ns
  251. invalid_ns = 'http://invalid/'
  252. @m.namespaces.add_alias(invalid_ns, 'foos')
  253. @m.set_arg(invalid_ns, 'ball', 'awesome')
  254. @m.set_arg(BARE_NS, 'xey', 'value')
  255. assert_equal({'openid.mode' => 'error',
  256. 'openid.error' => 'unit test',
  257. 'openid.foos.ball' => 'awesome',
  258. 'xey' => 'value',
  259. 'openid.ns.foos' => 'http://invalid/'
  260. }, @m.to_post_args)
  261. end
  262. def test_to_args
  263. assert_equal({'mode' => 'error',
  264. 'error' => 'unit test'},
  265. @m.to_args)
  266. end
  267. def test_to_kvform
  268. assert_equal("error:unit test\nmode:error\n",
  269. @m.to_kvform)
  270. end
  271. def test_to_url_encoded
  272. assert_equal('openid.error=unit+test&openid.mode=error',
  273. @m.to_url_encoded)
  274. end
  275. def test_to_url
  276. base_url = 'http://base.url/'
  277. actual = @m.to_url(base_url)
  278. actual_base = actual[0...base_url.length]
  279. assert_equal(base_url, actual_base)
  280. assert_equal('?', actual[base_url.length].chr)
  281. query = actual[base_url.length+1..-1]
  282. assert_equal({'openid.mode'=>['error'],'openid.error'=>['unit test']},
  283. CGI.parse(query))
  284. end
  285. def test_get_openid
  286. assert_equal(OPENID1_NS, @m.get_openid_namespace)
  287. end
  288. def test_get_key_openid
  289. assert_equal('openid.mode', @m.get_key(OPENID_NS, 'mode'))
  290. end
  291. def test_get_key_bare
  292. assert_equal('mode', @m.get_key(BARE_NS, 'mode'))
  293. end
  294. def test_get_key_ns1
  295. assert_equal('openid.mode', @m.get_key(OPENID1_NS, 'mode'))
  296. end
  297. def test_get_key_ns2
  298. assert_equal(nil, @m.get_key(OPENID2_NS, 'mode'))
  299. end
  300. def test_get_key_ns3
  301. assert_equal(nil, @m.get_key('urn:xxx', 'mode'))
  302. end
  303. def test_has_key
  304. assert_equal(true, @m.has_key?(OPENID_NS, 'mode'))
  305. end
  306. def test_has_key_bare
  307. assert_equal(false, @m.has_key?(BARE_NS, 'mode'))
  308. end
  309. def test_has_key_ns1
  310. assert_equal(true, @m.has_key?(OPENID1_NS, 'mode'))
  311. end
  312. def test_has_key_ns2
  313. assert_equal(false, @m.has_key?(OPENID2_NS, 'mode'))
  314. end
  315. def test_has_key_ns3
  316. assert_equal(false, @m.has_key?('urn:xxx', 'mode'))
  317. end
  318. def test_get_arg
  319. assert_equal('error', @m.get_arg(OPENID_NS, 'mode'))
  320. end
  321. def test_get_arg_bare
  322. get_arg_tests(ns=BARE_NS, key='mode')
  323. end
  324. def test_get_arg_ns
  325. get_arg_tests(ns=OPENID_NS, key='mode', expected='error')
  326. end
  327. def test_get_arg_ns1
  328. get_arg_tests(ns=OPENID1_NS, key='mode', expected='error')
  329. end
  330. def test_get_arg_ns2
  331. get_arg_tests(ns=OPENID2_NS, key='mode')
  332. end
  333. def test_get_arg_ns3
  334. get_arg_tests(ns='urn:nothing-significant', key='mode')
  335. end
  336. def test_get_args
  337. assert_equal({'mode'=>'error','error'=>'unit test'},
  338. @m.get_args(OPENID_NS))
  339. end
  340. def test_get_args_bare
  341. assert_equal({}, @m.get_args(BARE_NS))
  342. end
  343. def test_get_args_ns1
  344. assert_equal({'mode'=>'error','error'=>'unit test'},
  345. @m.get_args(OPENID1_NS))
  346. end
  347. def test_get_args_ns2
  348. assert_equal({}, @m.get_args(OPENID2_NS))
  349. end
  350. def test_get_args_ns3
  351. assert_equal({}, @m.get_args('urn:xxx'))
  352. end
  353. def _test_update_args_ns(ns, before=nil)
  354. if before.nil?
  355. before = {}
  356. end
  357. update_args = {
  358. 'Camper van Beethoven'=>'David Lowery',
  359. 'Magnolia Electric Co.'=>'Jason Molina'
  360. }
  361. assert_equal(before, @m.get_args(ns))
  362. @m.update_args(ns, update_args)
  363. after = before.dup
  364. after.update(update_args)
  365. assert_equal(after, @m.get_args(ns))
  366. end
  367. def test_update_args
  368. _test_update_args_ns(OPENID_NS, {'mode'=>'error','error'=>'unit test'})
  369. end
  370. def test_update_args_bare
  371. _test_update_args_ns(BARE_NS)
  372. end
  373. def test_update_args_ns1
  374. _test_update_args_ns(OPENID1_NS, {'mode'=>'error','error'=>'unit test'})
  375. end
  376. def test_update_args_ns2
  377. _test_update_args_ns(OPENID2_NS)
  378. end
  379. def test_update_args_ns3
  380. _test_update_args_ns('urn:xxx')
  381. end
  382. def _test_set_arg_ns(ns)
  383. key = 'awesometown'
  384. value = 'funny'
  385. assert_equal(nil, @m.get_arg(ns,key))
  386. @m.set_arg(ns, key, value)
  387. assert_equal(value, @m.get_arg(ns,key))
  388. end
  389. def test_set_arg; _test_set_arg_ns(OPENID_NS); end
  390. def test_set_arg_bare; _test_set_arg_ns(BARE_NS); end
  391. def test_set_arg_ns1; _test_set_arg_ns(OPENID1_NS); end
  392. def test_set_arg_ns2; _test_set_arg_ns(OPENID2_NS); end
  393. def test_set_arg_ns3; _test_set_arg_ns('urn:xxx'); end
  394. def _test_del_arg_ns(ns)
  395. key = 'marry an'
  396. value = 'ice cream sandwich'
  397. @m.set_arg(ns, key, value)
  398. assert_equal(value, @m.get_arg(ns,key))
  399. @m.del_arg(ns,key)
  400. assert_equal(nil, @m.get_arg(ns,key))
  401. end
  402. def test_del_arg; _test_del_arg_ns(OPENID_NS); end
  403. def test_del_arg_bare; _test_del_arg_ns(BARE_NS); end
  404. def test_del_arg_ns1; _test_del_arg_ns(OPENID1_NS); end
  405. def test_del_arg_ns2; _test_del_arg_ns(OPENID2_NS); end
  406. def test_del_arg_ns3; _test_del_arg_ns('urn:yyy'); end
  407. def test_isOpenID1
  408. assert_equal(true, @m.is_openid1)
  409. end
  410. def test_isOpenID2
  411. assert_equal(false, @m.is_openid2)
  412. end
  413. def test_equal
  414. assert_equal(Message.new, Message.new)
  415. assert_not_equal(Message.new, nil)
  416. end
  417. def test_from_openid_args_undefined_ns
  418. expected = 'almost.complete'
  419. msg = Message.from_openid_args({'coverage.is' => expected})
  420. actual = msg.get_arg(OPENID1_NS, 'coverage.is')
  421. assert_equal(expected, actual)
  422. end
  423. # XXX: we need to implement the KVForm module before we can fix this
  424. def TODOtest_from_kvform
  425. kv = 'foos:ball\n'
  426. msg = Message.from_kvform(kv)
  427. assert_equal(msg.get(OPENID1_NS, 'foos'), 'ball')
  428. end
  429. def test_initialize_sets_namespace
  430. msg = Message.new(OPENID1_NS)
  431. assert_equal(OPENID1_NS, msg.get_openid_namespace)
  432. end
  433. end
  434. class OpenID1ExplicitMessageTest < Test::Unit::TestCase
  435. # XXX - check to make sure the test suite will get built the way this
  436. # expects.
  437. def setup
  438. @m = Message.from_post_args({'openid.mode'=>'error',
  439. 'openid.error'=>'unit test',
  440. 'openid.ns'=>OPENID1_NS})
  441. end
  442. def test_to_post_args
  443. assert_equal({'openid.mode' => 'error',
  444. 'openid.error' => 'unit test',
  445. 'openid.ns'=>OPENID1_NS,
  446. },
  447. @m.to_post_args)
  448. end
  449. def test_to_post_args_ns
  450. invalid_ns = 'http://invalid/'
  451. @m.namespaces.add_alias(invalid_ns, 'foos')
  452. @m.set_arg(invalid_ns, 'ball', 'awesome')
  453. @m.set_arg(BARE_NS, 'xey', 'value')
  454. assert_equal({'openid.mode' => 'error',
  455. 'openid.error' => 'unit test',
  456. 'openid.foos.ball' => 'awesome',
  457. 'xey' => 'value',
  458. 'openid.ns'=>OPENID1_NS,
  459. 'openid.ns.foos' => 'http://invalid/'
  460. }, @m.to_post_args)
  461. end
  462. def test_to_args
  463. assert_equal({'mode' => 'error',
  464. 'error' => 'unit test',
  465. 'ns'=>OPENID1_NS
  466. },
  467. @m.to_args)
  468. end
  469. def test_to_kvform
  470. assert_equal("error:unit test\nmode:error\nns:#{OPENID1_NS}\n",
  471. @m.to_kvform)
  472. end
  473. def test_to_url_encoded
  474. assert_equal('openid.error=unit+test&openid.mode=error&openid.ns=http%3A%2F%2Fopenid.net%2Fsignon%2F1.0',
  475. @m.to_url_encoded)
  476. end
  477. def test_to_url
  478. base_url = 'http://base.url/'
  479. actual = @m.to_url(base_url)
  480. actual_base = actual[0...base_url.length]
  481. assert_equal(base_url, actual_base)
  482. assert_equal('?', actual[base_url.length].chr)
  483. query = actual[base_url.length+1..-1]
  484. assert_equal({'openid.mode'=>['error'],
  485. 'openid.error'=>['unit test'],
  486. 'openid.ns'=>[OPENID1_NS],
  487. },
  488. CGI.parse(query))
  489. end
  490. end
  491. class OpenID2MessageTest < Test::Unit::TestCase
  492. include TestUtil
  493. def setup
  494. @m = Message.from_post_args({'openid.mode'=>'error',
  495. 'openid.error'=>'unit test',
  496. 'openid.ns'=>OPENID2_NS})
  497. @m.set_arg(BARE_NS, 'xey', 'value')
  498. end
  499. def test_to_args_fails
  500. assert_raises(ArgumentError) {
  501. @m.to_args
  502. }
  503. end
  504. def test_fix_ns_non_string
  505. # Using has_key to invoke _fix_ns since _fix_ns should be private
  506. assert_raises(ArgumentError) {
  507. @m.has_key?(:non_string_namespace, "key")
  508. }
  509. end
  510. def test_fix_ns_non_uri
  511. # Using has_key to invoke _fix_ns since _fix_ns should be private
  512. assert_log_matches(/identifiers SHOULD be URIs/) {
  513. @m.has_key?("foo", "key")
  514. }
  515. end
  516. def test_fix_ns_sreg_literal
  517. # Using has_key to invoke _fix_ns since _fix_ns should be private
  518. assert_log_matches(/identifiers SHOULD be URIs/, /instead of "sreg"/) {
  519. @m.has_key?("sreg", "key")
  520. }
  521. end
  522. def test_copy
  523. n = @m.copy
  524. assert_equal(@m, n)
  525. end
  526. def test_to_post_args
  527. assert_equal({'openid.mode' => 'error',
  528. 'openid.error' => 'unit test',
  529. 'openid.ns' => OPENID2_NS,
  530. 'xey' => 'value',
  531. }, @m.to_post_args)
  532. end
  533. def test_to_post_args_ns
  534. invalid_ns = 'http://invalid/'
  535. @m.namespaces.add_alias(invalid_ns, 'foos')
  536. @m.set_arg(invalid_ns, 'ball', 'awesome')
  537. assert_equal({'openid.mode' => 'error',
  538. 'openid.error' => 'unit test',
  539. 'openid.ns' => OPENID2_NS,
  540. 'openid.ns.foos' => invalid_ns,
  541. 'openid.foos.ball' => 'awesome',
  542. 'xey' => 'value',
  543. }, @m.to_post_args)
  544. end
  545. def test_to_args
  546. @m.del_arg(BARE_NS, 'xey')
  547. assert_equal({'mode' => 'error',
  548. 'error' => 'unit test',
  549. 'ns' => OPENID2_NS},
  550. @m.to_args)
  551. end
  552. def test_to_kvform
  553. @m.del_arg(BARE_NS, 'xey')
  554. assert_equal("error:unit test\nmode:error\nns:#{OPENID2_NS}\n",
  555. @m.to_kvform)
  556. end
  557. def _test_urlencoded(s)
  558. expected_list = ["openid.error=unit+test",
  559. "openid.mode=error",
  560. "openid.ns=#{CGI.escape(OPENID2_NS)}",
  561. "xey=value"]
  562. # Hard to do this with string comparison since the mapping doesn't
  563. # preserve order.
  564. encoded_list = s.split('&')
  565. encoded_list.sort!
  566. assert_equal(expected_list, encoded_list)
  567. end
  568. def test_to_urlencoded
  569. _test_urlencoded(@m.to_url_encoded)
  570. end
  571. def test_to_url
  572. base_url = 'http://base.url/'
  573. actual = @m.to_url(base_url)
  574. actual_base = actual[0...base_url.length]
  575. assert_equal(base_url, actual_base)
  576. assert_equal('?', actual[base_url.length].chr)
  577. query = actual[base_url.length+1..-1]
  578. _test_urlencoded(query)
  579. end
  580. def test_get_openid
  581. assert_equal(OPENID2_NS, @m.get_openid_namespace)
  582. end
  583. def test_get_key_openid
  584. assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode'))
  585. end
  586. def test_get_key_bare
  587. assert_equal('mode', @m.get_key(BARE_NS, 'mode'))
  588. end
  589. def test_get_key_ns1
  590. assert_equal(nil, @m.get_key(OPENID1_NS, 'mode'))
  591. end
  592. def test_get_key_ns2
  593. assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode'))
  594. end
  595. def test_get_key_ns3
  596. assert_equal(nil, @m.get_key('urn:xxx', 'mode'))
  597. end
  598. def test_has_key_openid
  599. assert_equal(true, @m.has_key?(OPENID_NS,'mode'))
  600. end
  601. def test_has_key_bare
  602. assert_equal(false, @m.has_key?(BARE_NS,'mode'))
  603. end
  604. def test_has_key_ns1
  605. assert_equal(false, @m.has_key?(OPENID1_NS,'mode'))
  606. end
  607. def test_has_key_ns2
  608. assert_equal(true, @m.has_key?(OPENID2_NS,'mode'))
  609. end
  610. def test_has_key_ns3
  611. assert_equal(false, @m.has_key?('urn:xxx','mode'))
  612. end
  613. # XXX - getArgTest
  614. def test_get_arg_openid
  615. assert_equal('error', @m.get_arg(OPENID_NS,'mode'))
  616. end
  617. def test_get_arg_bare
  618. assert_equal(nil, @m.get_arg(BARE_NS,'mode'))
  619. end
  620. def test_get_arg_ns1
  621. assert_equal(nil, @m.get_arg(OPENID1_NS,'mode'))
  622. end
  623. def test_get_arg_ns2
  624. assert_equal('error', @m.get_arg(OPENID2_NS,'mode'))
  625. end
  626. def test_get_arg_ns3
  627. assert_equal(nil, @m.get_arg('urn:bananastand','mode'))
  628. end
  629. def test_get_args_openid
  630. assert_equal({'mode'=>'error','error'=>'unit test'},
  631. @m.get_args(OPENID_NS))
  632. end
  633. def test_get_args_bare
  634. assert_equal({'xey'=>'value'},
  635. @m.get_args(BARE_NS))
  636. end
  637. def test_get_args_ns1
  638. assert_equal({},
  639. @m.get_args(OPENID1_NS))
  640. end
  641. def test_get_args_ns2
  642. assert_equal({'mode'=>'error','error'=>'unit test'},
  643. @m.get_args(OPENID2_NS))
  644. end
  645. def test_get_args_ns3
  646. assert_equal({},
  647. @m.get_args('urn:loose seal'))
  648. end
  649. def _test_update_args_ns(ns, before=nil)
  650. before = {} unless before
  651. update_args = {'aa'=>'bb','cc'=>'dd'}
  652. assert_equal(before, @m.get_args(ns))
  653. @m.update_args(ns, update_args)
  654. after = before.dup
  655. after.update(update_args)
  656. assert_equal(after, @m.get_args(ns))
  657. end
  658. def test_update_args_openid
  659. _test_update_args_ns(OPENID_NS, {'mode'=>'error','error'=>'unit test'})
  660. end
  661. def test_update_args_bare
  662. _test_update_args_ns(BARE_NS, {'xey'=>'value'})
  663. end
  664. def test_update_args_ns1
  665. _test_update_args_ns(OPENID1_NS)
  666. end
  667. def test_update_args_ns2
  668. _test_update_args_ns(OPENID2_NS, {'mode'=>'error','error'=>'unit test'})
  669. end
  670. def test_update_args_ns3
  671. _test_update_args_ns('urn:sven')
  672. end
  673. def _test_set_arg_ns(ns)
  674. key = "logan's"
  675. value = "run"
  676. assert_equal(nil, @m.get_arg(ns,key))
  677. @m.set_arg(ns, key, value)
  678. assert_equal(value, @m.get_arg(ns,key))
  679. end
  680. def test_set_arg_openid; _test_set_arg_ns(OPENID_NS); end
  681. def test_set_arg_bare; _test_set_arg_ns(BARE_NS); end
  682. def test_set_arg_ns1; _test_set_arg_ns(OPENID1_NS); end
  683. def test_set_arg_ns2; _test_set_arg_ns(OPENID2_NS); end
  684. def test_set_arg_ns3; _test_set_arg_ns('urn:g'); end
  685. def test_bad_alias
  686. # Make sure dotted aliases and OpenID protocol fields are not allowed
  687. # as namespace aliases.
  688. fields = OPENID_PROTOCOL_FIELDS + ['dotted.alias']
  689. fields.each { |f|
  690. args = {"openid.ns.#{f}" => "blah#{f}",
  691. "openid.#{f}.foo" => "test#{f}"}
  692. # .fromPostArgs covers .fromPostArgs, .fromOpenIDArgs,
  693. # ._fromOpenIDArgs, and .fromOpenIDArgs (since it calls
  694. # .fromPostArgs).
  695. assert_raise(AssertionError) {
  696. Message.from_post_args(args)
  697. }
  698. }
  699. end
  700. def test_from_post_args
  701. msg = Message.from_post_args({'foos' => 'ball'})
  702. assert_equal('ball', msg.get_arg(BARE_NS, 'foos'))
  703. end
  704. def _test_del_arg_ns(ns)
  705. key = 'no'
  706. value = 'socks'
  707. assert_equal(nil, @m.get_arg(ns, key))
  708. @m.set_arg(ns, key, value)
  709. assert_equal(value, @m.get_arg(ns, key))
  710. @m.del_arg(ns, key)
  711. assert_equal(nil, @m.get_arg(ns, key))
  712. end
  713. def test_del_arg_openid; _test_del_arg_ns(OPENID_NS); end
  714. def test_del_arg_bare; _test_del_arg_ns(BARE_NS); end
  715. def test_del_arg_ns1; _test_del_arg_ns(OPENID1_NS); end
  716. def test_del_arg_ns2; _test_del_arg_ns(OPENID2_NS); end
  717. def test_del_arg_ns3; _test_del_arg_ns('urn:tofu'); end
  718. def test_overwrite_extension_arg
  719. ns = 'urn:unittest_extension'
  720. key = 'mykey'
  721. value_1 = 'value_1'
  722. value_2 = 'value_2'
  723. @m.set_arg(ns, key, value_1)
  724. assert_equal(value_1, @m.get_arg(ns, key))
  725. @m.set_arg(ns, key, value_2)
  726. assert_equal(value_2, @m.get_arg(ns, key))
  727. end
  728. def test_argList
  729. assert_raise(ArgumentError) {
  730. Message.from_post_args({'arg' => [1, 2, 3]})
  731. }
  732. end
  733. def test_isOpenID1
  734. assert_equal(false, @m.is_openid1)
  735. end
  736. def test_isOpenID2
  737. assert_equal(true, @m.is_openid2)
  738. end
  739. end
  740. class MessageTest < Test::Unit::TestCase
  741. def setup
  742. @postargs = {
  743. 'openid.ns' => OPENID2_NS,
  744. 'openid.mode' => 'checkid_setup',
  745. 'openid.identity' => 'http://bogus.example.invalid:port/',
  746. 'openid.assoc_handle' => 'FLUB',
  747. 'openid.return_to' => 'Neverland',
  748. }
  749. @action_url = 'scheme://host:port/path?query'
  750. @form_tag_attrs = {
  751. 'company' => 'janrain',
  752. 'class' => 'fancyCSS',
  753. }
  754. @submit_text = 'GO!'
  755. ### Expected data regardless of input
  756. @required_form_attrs = {
  757. 'accept-charset' => 'UTF-8',
  758. 'enctype' => 'application/x-www-form-urlencoded',
  759. 'method' => 'post',
  760. }
  761. end
  762. def _checkForm(html, message_, action_url,
  763. form_tag_attrs, submit_text)
  764. @xml = REXML::Document.new(html)
  765. # Get root element
  766. form = @xml.root
  767. # Check required form attributes
  768. @required_form_attrs.each { |k, v|
  769. assert(form.attributes[k] == v,
  770. "Expected '#{v}' for required form attribute '#{k}', got '#{form.attributes[k]}'")
  771. }
  772. # Check extra form attributes
  773. @form_tag_attrs.each { |k, v|
  774. # Skip attributes that already passed the required attribute
  775. # check, since they should be ignored by the form generation
  776. # code.
  777. if @required_form_attrs.include?(k)
  778. continue
  779. end
  780. assert(form.attributes[k] == v,
  781. "Form attribute '#{k}' should be '#{v}', found '#{form.attributes[k]}'")
  782. # Check hidden fields against post args
  783. hiddens = []
  784. form.each { |e|
  785. if (e.is_a?(REXML::Element)) and
  786. (e.name.upcase() == 'INPUT') and
  787. (e.attributes['type'].upcase() == 'HIDDEN')
  788. # For each post arg, make sure there is a hidden with that
  789. # value. Make sure there are no other hiddens.
  790. hiddens += [e]
  791. end
  792. }
  793. message_.to_post_args().each { |name, value|
  794. success = false
  795. hiddens.each { |e|
  796. if e.attributes['name'] == name
  797. assert(e.attributes['value'] == value,
  798. "Expected value of hidden input '#{e.attributes['name']}' " +
  799. "to be '#{value}', got '#{e.attributes['value']}'")
  800. success = true
  801. break
  802. end
  803. }
  804. if !success
  805. flunk "Post arg '#{name}' not found in form"
  806. end
  807. }
  808. hiddens.each { |e|
  809. assert(message_.to_post_args().keys().include?(e.attributes['name']),
  810. "Form element for '#{e.attributes['name']}' not in " +
  811. "original message")
  812. }
  813. # Check action URL
  814. assert(form.attributes['action'] == action_url,
  815. "Expected form 'action' to be '#{action_url}', got '#{form.attributes['action']}'")
  816. # Check submit text
  817. submits = []
  818. form.each { |e|
  819. if (e.is_a?(REXML::Element)) and
  820. (e.name.upcase() == 'INPUT') and
  821. e.attributes['type'].upcase() == 'SUBMIT'
  822. submits += [e]
  823. end
  824. }
  825. assert(submits.length == 1,
  826. "Expected only one 'input' with type = 'submit', got #{submits.length}")
  827. assert(submits[0].attributes['value'] == submit_text,
  828. "Expected submit value to be '#{submit_text}', " +
  829. "got '#{submits[0].attributes['value']}'")
  830. }
  831. end
  832. def test_toFormMarkup
  833. m = Message.from_post_args(@postargs)
  834. html = m.to_form_markup(@action_url, @form_tag_attrs,
  835. @submit_text)
  836. _checkForm(html, m, @action_url,
  837. @form_tag_attrs, @submit_text)
  838. end
  839. def test_overrideMethod
  840. # Be sure that caller cannot change form method to GET.
  841. m = Message.from_post_args(@postargs)
  842. tag_attrs = @form_tag_attrs.clone
  843. tag_attrs['method'] = 'GET'
  844. html = m.to_form_markup(@action_url, @form_tag_attrs,
  845. @submit_text)
  846. _checkForm(html, m, @action_url,
  847. @form_tag_attrs, @submit_text)
  848. end
  849. def test_overrideRequired
  850. # Be sure that caller CANNOT change the form charset for
  851. # encoding type.
  852. m = Message.from_post_args(@postargs)
  853. tag_attrs = @form_tag_attrs.clone
  854. tag_attrs['accept-charset'] = 'UCS4'
  855. tag_attrs['enctype'] = 'invalid/x-broken'
  856. html = m.to_form_markup(@action_url, tag_attrs,
  857. @submit_text)
  858. _checkForm(html, m, @action_url,
  859. tag_attrs, @submit_text)
  860. end
  861. end
  862. class NamespaceMapTestCase < Test::Unit::TestCase
  863. def test_onealias
  864. nsm = NamespaceMap.new
  865. uri = 'http://example.com/foo'
  866. _alias = 'foo'
  867. nsm.add_alias(uri, _alias)
  868. assert_equal(uri, nsm.get_namespace_uri(_alias))
  869. assert_equal(_alias, nsm.get_alias(uri))
  870. end
  871. def test_iteration
  872. nsm = NamespaceMap.new
  873. uripat = "http://example.com/foo%i"
  874. nsm.add(uripat % 0)
  875. (1..23).each { |i|
  876. assert_equal(false, nsm.member?(uripat % i))
  877. nsm.add(uripat % i)
  878. }
  879. nsm.each { |uri, _alias|
  880. assert_equal(uri[22..-1], _alias[3..-1])
  881. }
  882. nsm = NamespaceMap.new
  883. alias_ = 'bogus'
  884. uri = 'urn:bogus'
  885. nsm.add_alias(uri, alias_)
  886. assert_equal(nsm.aliases(), [alias_])
  887. assert_equal(nsm.namespace_uris(), [uri])
  888. end
  889. def test_register_default_alias
  890. invalid_ns = 'http://invalid/'
  891. alias_ = 'invalid'
  892. Message.register_namespace_alias(invalid_ns, alias_)
  893. # Doing it again doesn't raise an exception
  894. Message.register_namespace_alias(invalid_ns, alias_)
  895. # Once it's registered, you can't register it again
  896. assert_raises(NamespaceAliasRegistrationError) {
  897. Message.register_namespace_alias(invalid_ns, 'another_alias')
  898. }
  899. # Once it's registered, you can't register another URL with that alias
  900. assert_raises(NamespaceAliasRegistrationError) {
  901. Message.register_namespace_alias('http://janrain.com/', alias_)
  902. }
  903. # It gets used automatically by the Message class:
  904. msg = Message.from_openid_args({'invalid.stuff' => 'things'})
  905. assert(msg.is_openid1)
  906. assert_equal(alias_, msg.namespaces.get_alias(invalid_ns))
  907. assert_equal(invalid_ns, msg.namespaces.get_namespace_uri(alias_))
  908. end
  909. def test_alias_defined_twice
  910. nsm = NamespaceMap.new
  911. uri = 'urn:bogus'
  912. nsm.add_alias(uri, 'foos')
  913. assert_raises(IndexError) {
  914. nsm.add_alias(uri, 'ball')
  915. }
  916. end
  917. end
  918. end