/test/core_riak_tests.coffee

https://github.com/gotascii/riak-js · CoffeeScript · 190 lines · 155 code · 17 blank · 18 comment · 1 complexity · 9b85b8ac9e0b6fc167854551b46d837a MD5 · raw file

  1. # Sets up common riak test data for http and pbc clients
  2. global.RIAKJS_CLIENT_TEST_DATA =
  3. riakjs_airports:
  4. EZE: [{city: 'Buenos Aires'}]
  5. BCN: [{city: 'Barcelona'}]
  6. AMS: [{city: 'Amsterdam'}]
  7. CDG: [{city: 'Paris'}]
  8. MUC: [{city: 'Munich'}]
  9. JFK: [{city: 'New York'}]
  10. HKK: [{city: 'Hong Kong'}]
  11. MEX: [{city: 'Mexico DF'}]
  12. riakjs_airlines:
  13. AFR: [{name: 'Air France', fleet: 263, alliance: 'SkyTeam', european: true}]
  14. AMX: [{name: 'Aeroméxico', fleet: 43, alliance: 'SkyTeam', european: false}]
  15. ARG: [{name: 'Aerolíneas Argentinas', fleet: 40, european: false}]
  16. DLH: [{name: 'Lufthansa', fleet: 262, alliance: 'Star Alliance', european: true}]
  17. IBE:
  18. [
  19. {name: 'Iberia', fleet: 183, alliance: 'One World', european: true}
  20. {abc: 1, def: 2}
  21. ]
  22. CPA:
  23. [
  24. {name: 'Cathay Pacific', fleet: 127, alliance: 'One World', european: false}
  25. {
  26. links: {bucket: "riakjs_client_test_flights", key: "CPA-729", tag: "flight"}
  27. }
  28. ]
  29. KLM:
  30. [
  31. {name: 'KLM', fleet: 111, alliance: 'SkyTeam', european: true}
  32. {
  33. links:
  34. [
  35. {bucket: "riakjs_client_test_flights", key: 'KLM-8098', tag: 'flight'}
  36. {bucket: "riakjs_client_test_flights", key: 'KLM-1196', tag: 'flight'}
  37. ]
  38. abc: 1
  39. }
  40. ]
  41. riakjs_flights:
  42. KLM_8098: [{code: 'KLM-8098', to: 'JFK', from: 'AMS', departure: 'Mon, 05 Jul 2010 17:05:00 GMT'}]
  43. AFR_394: [{code: 'AFR-394', to: 'CDG', from: 'EZE', departure: 'Mon, 12 Jul 2010 05:35:00 GMT'}]
  44. CPA_112: [{code: 'CPA-112', to: 'HKK', from: 'AMS', departure: 'Wed, 11 Aug 2010 01:20:00 GMT'}]
  45. IBE_5624: [{code: 'IBE-5624', to: 'MUC', from: 'BCN', departure: 'Mon, 15 Mar 2010 22:10:00 GMT'}]
  46. ARG_714: [{code: 'ARG-714', to: 'EZE', from: 'BCN', departure: 'Mon, 08 Mar 2010 20:50:00 GMT'}]
  47. DLH_4001: [{code: 'DLH-4001', to: 'JFK', from: 'MUC', departure: 'Tue, 23 Aug 2010 13:30:00 GMT'}]
  48. AMX_1344: [{code: 'AMX-1344', to: 'EZE', from: 'MEX', departure: 'Wed, 21 Jul 2010 08:45:00 GMT'}]
  49. AMX_1346: [{code: 'AMX-1346', to: 'MEX', from: 'EZE', departure: 'Mon, 08 Mar 2010 19:40:00 GMT'}]
  50. KLM_1196: [{code: 'KLM-1196', to: 'AMS', from: 'CDG', departure: 'Fri, 20 Aug 2010 14:59:00 GMT'}]
  51. CPA_729: [{code: 'CPA-729', to: 'CDG', from: 'HKK', departure: 'Thu, 19 Aug 2010 07:30:00 GMT'}]
  52. ARG_909: [{code: 'ARG-909', to: 'AMS', from: 'EZE', departure: 'Tue, 24 Aug 2010 15:25:00 GMT'}]
  53. # EXPENDABLE
  54. IBE_4418: [{code: 'IBE-4418', to: 'BCN', from: 'JFK', departure: 'Sat, 24 Jul 2010 12:00:00 GMT'}]
  55. module.exports = (test) ->
  56. calls =
  57. ping: null
  58. get: null
  59. get_usermeta: null
  60. get_links: null
  61. del: null
  62. mapError: null
  63. map: null
  64. keys: null
  65. process.on 'exit', ->
  66. for all key, title of calls
  67. title ||= "db.#{key}()"
  68. sys.puts "#{title} had problems."
  69. LOAD test.api, RIAKJS_CLIENT_TEST_DATA, ->
  70. test (db, end) ->
  71. db.ping (err, data) ->
  72. end()
  73. assert.equal true, data
  74. delete calls.ping
  75. test (db, end) ->
  76. db.get 'riakjs_airlines', 'KLM', (err, air, meta) ->
  77. # throw new Error
  78. end()
  79. assert.equal 'riakjs_airlines', meta.bucket
  80. assert.equal 'KLM', meta.key
  81. assert.equal 'application/json', meta.contentType
  82. assert.equal 1, meta.usermeta.abc
  83. assert.equal 2, meta.links.length
  84. assert.equal 'riakjs_client_test_flights', meta.links[0].bucket
  85. assert.equal 'riakjs_client_test_flights', meta.links[1].bucket
  86. assert.equal 'KLM-8098', meta.links[0].key
  87. assert.equal 'KLM-1196', meta.links[1].key
  88. assert.equal 'flight', meta.links[0].tag
  89. assert.equal 'flight', meta.links[1].tag
  90. assert.equal 111, air.fleet
  91. assert.ok meta.vclock?
  92. delete calls.get
  93. test (db, end) ->
  94. db.get 'riakjs_airlines', 'IBE', (err, air, meta) ->
  95. end()
  96. assert.equal 'riakjs_airlines', meta.bucket
  97. assert.equal 'IBE', meta.key
  98. assert.equal 'application/json', meta.contentType
  99. assert.equal 1, meta.usermeta.abc
  100. assert.equal 2, meta.usermeta.def
  101. assert.equal 183, air.fleet
  102. assert.ok meta.vclock?
  103. delete calls.get_usermeta
  104. test (db, end) ->
  105. db.get 'riakjs_airlines', 'CPA', (err, air, meta) ->
  106. end()
  107. assert.equal 'riakjs_airlines', meta.bucket
  108. assert.equal 'CPA', meta.key
  109. assert.equal 'application/json', meta.contentType
  110. assert.equal 1, meta.links.length
  111. assert.equal 'riakjs_client_test_flights', meta.links[0].bucket
  112. assert.equal 'CPA-729', meta.links[0].key
  113. assert.equal 'flight', meta.links[0].tag
  114. assert.equal 127, air.fleet
  115. assert.ok meta.vclock?
  116. delete calls.get_links
  117. test (db, end) ->
  118. db.get 'riakjs_flights', 'IBE_4418', (err, flight) ->
  119. assert.equal 'JFK', flight.from
  120. db.remove 'riakjs_flights', 'IBE_4418', (err, data) ->
  121. assert.equal err, null
  122. # assert.equal data, undefined -- HTTP returns undefined, PROTOBUF an object
  123. db.get 'riakjs_flights', 'IBE_4418', (err, flight) ->
  124. end()
  125. assert.equal undefined, flight
  126. delete calls.del
  127. test (db, end) ->
  128. db
  129. .add('riakjs_airlines')
  130. .map(
  131. (value) ->
  132. this.should.raise.something
  133. ).
  134. run (err, response, meta) ->
  135. end()
  136. assert.ok err.message?
  137. # assert.ok response.errcode? -- ONLY PROTOBUF
  138. delete calls.mapError
  139. test (db, end) ->
  140. db
  141. .add('riakjs_airlines')
  142. .map(name: 'Riak.mapValuesJson', keep: true)
  143. .reduce(
  144. (values) ->
  145. [values.reduce (acc, value) ->
  146. acc + (value.fleet or value or 0)
  147. , 0
  148. ]
  149. )
  150. .run (err, response) ->
  151. end()
  152. # assert.deepEqual [0, 1], response.phases.sort() -- ONLY PROTOBUF
  153. assert.equal 7, response[0].length
  154. assert.equal 1029, response[1]
  155. delete calls.map
  156. # walk is ONLY HTTP for now
  157. # test (db, end) ->
  158. # db.walk 'riakjs_airlines', 'KLM', [["_", "flight"]], (err, response, meta) ->
  159. # end()
  160. # assert.equal response.length, 2
  161. # # print 'em out
  162. test (db, end) ->
  163. db.keys 'riakjs_airports', (err, keys) ->
  164. end()
  165. assert.equal 8, keys.length
  166. assert.equal 'AMS', keys.sort()[0]
  167. delete calls.keys
  168. # cleanup - ONLY HTTP cause protobuf connections are pooled
  169. # test (db, end) ->
  170. # for bucket in ['riakjs_airports', 'riakjs_airlines', 'riakjs_flights']
  171. # db.keys bucket, (err, keys) ->
  172. # end()
  173. # for key in keys then db.remove bucket, key