rhoconnect 3.4.5 → 4.0.0.beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. data/CHANGELOG.md +57 -3
  2. data/Gemfile +9 -7
  3. data/Gemfile.lock +37 -37
  4. data/Rakefile +18 -7
  5. data/bench/benchapp/Gemfile +1 -1
  6. data/bench/benchapp/config.ru +0 -3
  7. data/bench/benchapp/controllers/ruby/application.rb +17 -0
  8. data/bench/benchapp/controllers/ruby/application_controller.rb +17 -0
  9. data/bench/benchapp/controllers/ruby/mock_adapter_controller.rb +8 -0
  10. data/bench/benchapp/controllers/ruby/queue_mock_adapter_controller.rb +8 -0
  11. data/bench/benchapp/{sources → models/ruby}/mock_adapter.rb +1 -1
  12. data/bench/benchapp/{sources → models/ruby}/queue_mock_adapter.rb +0 -0
  13. data/bench/benchapp/spec/{sources → models/ruby}/mock_adapter_spec.rb +1 -1
  14. data/bench/benchapp/spec/{sources → models/ruby}/queue_mock_adapter_spec.rb +1 -1
  15. data/bench/benchapp/spec/spec_helper.rb +2 -2
  16. data/bench/blobapp/Gemfile +1 -1
  17. data/bench/blobapp/config.ru +0 -3
  18. data/bench/blobapp/controllers/ruby/application_controller.rb +17 -0
  19. data/bench/blobapp/controllers/ruby/blob_adapter_controller.rb +8 -0
  20. data/bench/blobapp/{sources → models/ruby}/blob_adapter.rb +9 -2
  21. data/bench/blobapp/spec/{sources → models/ruby}/blob_adapter_spec.rb +1 -1
  22. data/bench/blobapp/spec/spec_helper.rb +1 -1
  23. data/bench/lib/bench/cli.rb +1 -1
  24. data/bench/scripts/blob_cud_script.rb +1 -1
  25. data/bench/scripts/query_md_script.rb +1 -1
  26. data/bench/scripts/query_only_script.rb +1 -1
  27. data/bench/scripts/query_script.rb +1 -1
  28. data/bench/scripts/test_query_script.rb +7 -1
  29. data/bench/spec/mock_adapter_spec.rb +1 -1
  30. data/bench/spec/result_spec.rb +3 -3
  31. data/bin/rhoconnect +5 -3
  32. data/commands/dtach/dtach_install.rb +2 -2
  33. data/commands/execute.rb +8 -3
  34. data/commands/generators/app.rb +3 -3
  35. data/commands/generators/controller.rb +6 -0
  36. data/commands/generators/model.rb +6 -0
  37. data/commands/generators/source.rb +3 -3
  38. data/commands/generators/update.rb +1 -1
  39. data/commands/redis/redis_about.rb +2 -2
  40. data/commands/redis/redis_download.rb +1 -1
  41. data/commands/redis/redis_install.rb +4 -3
  42. data/commands/redis/redis_restart.rb +4 -4
  43. data/commands/redis/redis_start.rb +5 -4
  44. data/commands/redis/redis_startbg.rb +5 -4
  45. data/commands/redis/redis_status.rb +13 -0
  46. data/commands/redis/redis_stop.rb +3 -3
  47. data/commands/rhoconnect/config.rb +28 -16
  48. data/commands/rhoconnect/flushdb.rb +1 -2
  49. data/commands/rhoconnect/get_token.rb +15 -11
  50. data/commands/rhoconnect/restart.rb +13 -5
  51. data/commands/rhoconnect/set_admin_password.rb +8 -8
  52. data/commands/rhoconnect/start.rb +74 -16
  53. data/commands/rhoconnect/startbg.rb +1 -1
  54. data/commands/rhoconnect/startdebug.rb +1 -1
  55. data/commands/rhoconnect/stop.rb +13 -1
  56. data/commands/rhoconnect/web.rb +5 -5
  57. data/commands/rhoconnect_console/console.rb +7 -5
  58. data/commands/{rhoconnect → rhoconnect_spec}/spec.rb +0 -0
  59. data/commands/rhoconnect_war/war.rb +9 -9
  60. data/commands/utilities/blank_app.ru +56 -0
  61. data/commands/utilities/redis_runner.rb +54 -19
  62. data/doc/authentication.txt +80 -6
  63. data/doc/blob-sync.txt +104 -97
  64. data/doc/bulk-sync.txt +1 -1
  65. data/doc/client-java.txt +3 -3
  66. data/doc/client-objc.txt +2 -2
  67. data/doc/client.txt +4 -4
  68. data/doc/command-line.txt +105 -200
  69. data/doc/data-partitioning.txt +40 -0
  70. data/doc/deploying.txt +249 -77
  71. data/doc/extending-rhoconnect-server.txt +40 -57
  72. data/doc/heroku-addon.txt +2 -0
  73. data/doc/install.txt +45 -95
  74. data/doc/introduction.txt +1 -1
  75. data/doc/java-plugin.txt +365 -190
  76. data/doc/metadata.txt +1 -1
  77. data/doc/migration.txt +108 -142
  78. data/doc/preparing-production.txt +1 -1
  79. data/doc/push-backend-setup.txt +2 -0
  80. data/doc/push-client-setup-android.txt +78 -0
  81. data/doc/push-client-setup-bb.txt +81 -0
  82. data/doc/push-client-setup-ios.txt +70 -0
  83. data/doc/push-client-setup-rps.txt +200 -0
  84. data/doc/push-client-setup.txt +63 -66
  85. data/doc/push-server-setup.txt +67 -40
  86. data/doc/push-testing.txt +29 -0
  87. data/doc/push.txt +21 -6
  88. data/doc/rest-api.txt +128 -55
  89. data/doc/rhoconnect-redis-stack.txt +120 -0
  90. data/doc/settings.txt +4 -12
  91. data/doc/source-adapters-intro.txt +28 -0
  92. data/doc/source-adapters.txt +235 -272
  93. data/doc/stats-middleware.txt +9 -29
  94. data/doc/supported-platforms.txt +21 -30
  95. data/doc/testing.txt +40 -42
  96. data/doc/tutorial.txt +72 -57
  97. data/examples/simple/Gemfile +1 -1
  98. data/examples/simple/application.rb +4 -5
  99. data/examples/simple/my_server.rb +2 -2
  100. data/examples/simple/settings/settings.yml +1 -1
  101. data/generators/rhoconnect.rb +151 -50
  102. data/generators/templates/application/Gemfile +1 -1
  103. data/generators/templates/application/Rakefile +3 -3
  104. data/generators/templates/application/config.ru +1 -4
  105. data/generators/templates/application/controllers/application_controller.rb +17 -0
  106. data/generators/templates/application/controllers/js/application_controller.js +14 -0
  107. data/generators/templates/application/controllers/ruby/application_controller.rb +17 -0
  108. data/generators/templates/application/package.json +8 -0
  109. data/generators/templates/application/rcgemfile +2 -5
  110. data/generators/templates/application/settings/settings.yml +3 -3
  111. data/generators/templates/application/spec/application_controller_spec.rb +23 -0
  112. data/generators/templates/application/spec/js_spec.rb +25 -0
  113. data/generators/templates/application/spec/spec_helper.rb +21 -7
  114. data/generators/templates/source/controllers/js/controller.js +7 -0
  115. data/generators/templates/source/controllers/ruby/controller.rb +8 -0
  116. data/generators/templates/source/controllers/ruby/controller_spec.rb +27 -0
  117. data/generators/templates/source/models/js/model.js +46 -0
  118. data/generators/templates/source/{source_adapter.rb → models/ruby/model.rb} +15 -10
  119. data/generators/templates/source/{source_spec.rb → models/ruby/model_spec.rb} +1 -1
  120. data/install.sh +5 -5
  121. data/installer/unix-like/create_texts.rb +2 -2
  122. data/installer/unix-like/rho_connect_install_constants.rb +2 -2
  123. data/installer/unix-like/rho_connect_install_utilities.rb +1 -1
  124. data/installer/utils/constants.rb +4 -4
  125. data/js-adapters/ballroom.js +216 -0
  126. data/js-adapters/node.rb +52 -0
  127. data/js-adapters/node_channel.rb +181 -0
  128. data/js-adapters/request.js +27 -0
  129. data/js-adapters/response.js +57 -0
  130. data/js-adapters/rhoconnect_helpers.js +60 -0
  131. data/js-adapters/router.js +60 -0
  132. data/js-adapters/server.js +5 -0
  133. data/lib/rhoconnect/api/app/ans_login.rb +3 -3
  134. data/lib/rhoconnect/api/app/bulk_data.rb +10 -10
  135. data/lib/rhoconnect/api/app/fast_delete.rb +11 -10
  136. data/lib/rhoconnect/api/app/fast_insert.rb +11 -10
  137. data/lib/rhoconnect/api/app/fast_update.rb +11 -10
  138. data/lib/rhoconnect/api/app/login.rb +5 -5
  139. data/lib/rhoconnect/api/app/push_deletes.rb +12 -11
  140. data/lib/rhoconnect/api/app/push_objects.rb +12 -11
  141. data/lib/rhoconnect/api/app/query.rb +8 -7
  142. data/lib/rhoconnect/api/app/queue_updates.rb +98 -94
  143. data/lib/rhoconnect/api/app/search.rb +8 -7
  144. data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -5
  145. data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -8
  146. data/lib/rhoconnect/api/client/create.rb +7 -7
  147. data/lib/rhoconnect/api/client/get_client_params.rb +4 -4
  148. data/lib/rhoconnect/api/client/list_client_docs.rb +17 -17
  149. data/lib/rhoconnect/api/client/register.rb +12 -12
  150. data/lib/rhoconnect/api/client/reset.rb +5 -5
  151. data/lib/rhoconnect/api/readstate/set_refresh_time.rb +9 -9
  152. data/lib/rhoconnect/api/source/get_source_params.rb +4 -4
  153. data/lib/rhoconnect/api/source/list_sources.rb +16 -16
  154. data/lib/rhoconnect/api/source/update_source_params.rb +6 -6
  155. data/lib/rhoconnect/api/store/get_db_doc.rb +4 -4
  156. data/lib/rhoconnect/api/store/set_db_doc.rb +7 -7
  157. data/lib/rhoconnect/api/system/get_adapter.rb +4 -4
  158. data/lib/rhoconnect/api/system/get_license_info.rb +8 -8
  159. data/lib/rhoconnect/api/system/login.rb +15 -15
  160. data/lib/rhoconnect/api/system/reset.rb +11 -11
  161. data/lib/rhoconnect/api/system/save_adapter.rb +4 -4
  162. data/lib/rhoconnect/api/system/stats.rb +22 -22
  163. data/lib/rhoconnect/api/user/create_user.rb +7 -7
  164. data/lib/rhoconnect/api/user/delete_client.rb +6 -6
  165. data/lib/rhoconnect/api/user/delete_user.rb +11 -10
  166. data/lib/rhoconnect/api/user/list_clients.rb +4 -4
  167. data/lib/rhoconnect/api/user/list_source_docs.rb +10 -10
  168. data/lib/rhoconnect/api/user/list_users.rb +3 -3
  169. data/lib/rhoconnect/api/user/ping.rb +3 -3
  170. data/lib/rhoconnect/api/user/show_user.rb +3 -3
  171. data/lib/rhoconnect/api/user/update_user.rb +5 -5
  172. data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -5
  173. data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -10
  174. data/lib/rhoconnect/api_token.rb +5 -6
  175. data/lib/rhoconnect/app.rb +6 -46
  176. data/lib/rhoconnect/application/init.rb +5 -2
  177. data/lib/rhoconnect/async.rb +76 -39
  178. data/lib/rhoconnect/bulk_data/bulk_data.rb +6 -4
  179. data/lib/rhoconnect/client.rb +59 -9
  180. data/lib/rhoconnect/condition/admin_required.rb +27 -0
  181. data/lib/rhoconnect/condition/client_required.rb +50 -0
  182. data/lib/rhoconnect/condition/login_required.rb +22 -0
  183. data/lib/rhoconnect/condition/source_required.rb +49 -0
  184. data/lib/rhoconnect/condition/verbs.rb +17 -0
  185. data/lib/rhoconnect/condition/verify_success.rb +19 -0
  186. data/lib/rhoconnect/controller/app_base.rb +74 -0
  187. data/lib/rhoconnect/controller/base.rb +68 -0
  188. data/lib/rhoconnect/controller/clients_controller.rb +79 -0
  189. data/lib/rhoconnect/controller/dynamic_adapter_controller.rb +93 -0
  190. data/lib/rhoconnect/controller/js_base.rb +124 -0
  191. data/lib/rhoconnect/controller/read_state_controller.rb +22 -0
  192. data/lib/rhoconnect/controller/source_adapter_base.rb +14 -0
  193. data/lib/rhoconnect/controller/sources_controller.rb +44 -0
  194. data/lib/rhoconnect/controller/store_controller.rb +25 -0
  195. data/lib/rhoconnect/controller/system_controller.rb +67 -0
  196. data/lib/rhoconnect/controller/users_controller.rb +99 -0
  197. data/lib/rhoconnect/db_adapter.rb +1 -3
  198. data/lib/rhoconnect/document.rb +159 -50
  199. data/lib/rhoconnect/handler/authenticate/execute_methods.rb +77 -0
  200. data/lib/rhoconnect/handler/authenticate/runner.rb +49 -0
  201. data/lib/rhoconnect/handler/authenticate.rb +3 -0
  202. data/lib/rhoconnect/handler/bulk_data.rb +28 -0
  203. data/lib/rhoconnect/handler/changes/engine.rb +271 -0
  204. data/lib/rhoconnect/handler/changes/execute_methods.rb +88 -0
  205. data/lib/rhoconnect/handler/changes/pass_through_runner.rb +11 -0
  206. data/lib/rhoconnect/handler/changes/runner.rb +53 -0
  207. data/lib/rhoconnect/handler/changes.rb +31 -0
  208. data/lib/rhoconnect/handler/helpers/auth_method.rb +29 -0
  209. data/lib/rhoconnect/handler/helpers/binding.rb +18 -0
  210. data/lib/rhoconnect/handler/helpers/bulk_data.rb +53 -0
  211. data/lib/rhoconnect/handler/helpers/source_job.rb +14 -0
  212. data/lib/rhoconnect/handler/helpers.rb +4 -0
  213. data/lib/rhoconnect/handler/plugin_callbacks/execute_methods.rb +99 -0
  214. data/lib/rhoconnect/handler/plugin_callbacks/runner.rb +28 -0
  215. data/lib/rhoconnect/handler/plugin_callbacks.rb +67 -0
  216. data/lib/rhoconnect/handler/query/engine.rb +93 -0
  217. data/lib/rhoconnect/handler/query/execute_methods.rb +21 -0
  218. data/lib/rhoconnect/handler/query/pass_through_runner.rb +35 -0
  219. data/lib/rhoconnect/handler/query/runner.rb +270 -0
  220. data/lib/rhoconnect/handler/query.rb +19 -0
  221. data/lib/rhoconnect/handler/search/engine.rb +60 -0
  222. data/lib/rhoconnect/handler/search/execute_methods.rb +32 -0
  223. data/lib/rhoconnect/handler/search/pass_through_runner.rb +18 -0
  224. data/lib/rhoconnect/handler/search/runner.rb +104 -0
  225. data/lib/rhoconnect/handler/search.rb +26 -0
  226. data/lib/rhoconnect/handler/sync.rb +29 -0
  227. data/lib/rhoconnect/jobs/source_job.rb +13 -4
  228. data/lib/rhoconnect/js_adapter.rb +79 -0
  229. data/lib/rhoconnect/license.rb +10 -2
  230. data/lib/rhoconnect/middleware/current_user.rb +14 -1
  231. data/lib/rhoconnect/middleware/helpers.rb +10 -93
  232. data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +1 -1
  233. data/lib/rhoconnect/model/base.rb +229 -0
  234. data/lib/rhoconnect/model/dynamic_adapter_model.rb +90 -0
  235. data/lib/rhoconnect/model/js_base.rb +121 -0
  236. data/lib/rhoconnect/ping/android.rb +1 -1
  237. data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -4
  238. data/lib/rhoconnect/read_state.rb +3 -3
  239. data/lib/rhoconnect/server.rb +159 -190
  240. data/lib/rhoconnect/source.rb +100 -11
  241. data/lib/rhoconnect/stats/record.rb +10 -10
  242. data/lib/rhoconnect/store.rb +905 -591
  243. data/lib/rhoconnect/{model.rb → store_orm.rb} +53 -115
  244. data/lib/rhoconnect/tasks.rb +18 -4
  245. data/lib/rhoconnect/test_methods.rb +30 -17
  246. data/lib/rhoconnect/user.rb +35 -17
  247. data/lib/rhoconnect/utilities.rb +1 -1
  248. data/lib/rhoconnect/version.rb +2 -2
  249. data/lib/rhoconnect/web-console/server.rb +29 -14
  250. data/lib/rhoconnect/web-console/views/home.js +10 -10
  251. data/lib/rhoconnect/web-console/views/new_ping.js +1 -1
  252. data/lib/rhoconnect.rb +120 -51
  253. data/rhoconnect.gemspec +4 -3
  254. data/spec/api/api_helper.rb +1 -6
  255. data/spec/api/app/fast_delete_spec.rb +4 -4
  256. data/spec/api/app/fast_insert_spec.rb +4 -4
  257. data/spec/api/app/fast_update_spec.rb +8 -8
  258. data/spec/api/app/push_deletes_spec.rb +2 -2
  259. data/spec/api/app/push_objects_spec.rb +5 -5
  260. data/spec/api/client/client_get_db_doc_spec.rb +6 -4
  261. data/spec/api/client/client_set_db_doc_spec.rb +3 -2
  262. data/spec/api/client/get_client_params_spec.rb +14 -0
  263. data/spec/api/client/list_client_docs_spec.rb +30 -20
  264. data/spec/api/client/reset_spec.rb +36 -0
  265. data/spec/api/source/get_source_params_spec.rb +23 -17
  266. data/spec/api/system/get_license_info_spec.rb +0 -20
  267. data/spec/api/system/login_spec.rb +8 -0
  268. data/spec/api/system/reset_spec.rb +0 -1
  269. data/spec/api/system/stats_spec.rb +5 -5
  270. data/spec/api/user/create_user_spec.rb +14 -6
  271. data/spec/api/user/delete_user_spec.rb +20 -18
  272. data/spec/api/user/list_users_spec.rb +5 -6
  273. data/spec/api/user/update_user_spec.rb +5 -4
  274. data/spec/apps/rhotestapp/config.ru +16 -1
  275. data/spec/apps/rhotestapp/controllers/js/js_sample_controller.js +23 -0
  276. data/spec/apps/rhotestapp/controllers/js/sample2_controller.js +32 -0
  277. data/spec/apps/rhotestapp/controllers/ruby/application_controller.rb +21 -0
  278. data/spec/apps/rhotestapp/controllers/ruby/sample_adapter_controller.rb +8 -0
  279. data/spec/apps/rhotestapp/models/js/js_sample.js +55 -0
  280. data/spec/apps/rhotestapp/models/js/sample2.js +25 -0
  281. data/spec/apps/rhotestapp/{sources → models/ruby}/base_adapter.rb +0 -0
  282. data/spec/apps/rhotestapp/{sources → models/ruby}/fixed_schema_adapter.rb +0 -0
  283. data/spec/apps/rhotestapp/{sources → models/ruby}/other_adapter.rb +0 -0
  284. data/spec/apps/rhotestapp/{sources → models/ruby}/sample_adapter.rb +0 -0
  285. data/spec/apps/rhotestapp/{sources → models/ruby}/simple_adapter.rb +2 -2
  286. data/spec/apps/rhotestapp/{sources → models/ruby}/sub_adapter.rb +0 -0
  287. data/spec/apps/rhotestapp/settings/settings.yml +0 -1
  288. data/spec/bulk_data/bulk_data_spec.rb +20 -5
  289. data/spec/cli/cli_spec.rb +83 -0
  290. data/spec/client_spec.rb +20 -17
  291. data/spec/client_sync_spec.rb +244 -406
  292. data/spec/controllers/js_base_spec.rb +89 -0
  293. data/spec/doc/doc_spec.rb +18 -18
  294. data/spec/document_spec.rb +29 -13
  295. data/spec/dynamic_adapter_spec.rb +6 -6
  296. data/spec/generator/generator_spec.rb +7 -4
  297. data/spec/jobs/bulk_data_job_spec.rb +14 -10
  298. data/spec/jobs/source_job_spec.rb +8 -8
  299. data/spec/license_spec.rb +5 -2
  300. data/spec/models/js_model_spec.rb +39 -0
  301. data/spec/node_spec.rb +42 -0
  302. data/spec/perf/store_perf_spec.rb +67 -12
  303. data/spec/ping/android_spec.rb +1 -1
  304. data/spec/read_state_spec.rb +1 -1
  305. data/spec/rhoconnect_spec.rb +1 -1
  306. data/spec/server/cors_spec.rb +14 -18
  307. data/spec/server/server_spec.rb +265 -88
  308. data/spec/server/stats_spec.rb +1 -1
  309. data/spec/source_adapter_spec.rb +54 -27
  310. data/spec/source_spec.rb +8 -3
  311. data/spec/source_sync_spec.rb +538 -468
  312. data/spec/spec_helper.rb +35 -4
  313. data/spec/stats/record_spec.rb +10 -10
  314. data/spec/{model_spec.rb → store_orm_spec.rb} +56 -54
  315. data/spec/store_spec.rb +159 -179
  316. data/spec/support/shared_examples.rb +36 -27
  317. data/spec/sync_states_spec.rb +40 -33
  318. data/spec/test_methods_spec.rb +18 -14
  319. data/spec/user_spec.rb +17 -30
  320. metadata +156 -52
  321. data/bench/benchapp/application.rb +0 -39
  322. data/bench/blobapp/application.rb +0 -44
  323. data/commands/rhoconnect/clean_start.rb +0 -9
  324. data/commands/rhoconnect/create_user.rb +0 -18
  325. data/commands/rhoconnect/delete_device.rb +0 -9
  326. data/commands/rhoconnect/delete_user.rb +0 -8
  327. data/commands/rhoconnect/reset.rb +0 -16
  328. data/commands/rhoconnect/reset_refresh.rb +0 -11
  329. data/generators/templates/application/application.rb +0 -43
  330. data/lib/rhoconnect/client_sync.rb +0 -434
  331. data/lib/rhoconnect/dynamic_adapter.rb +0 -91
  332. data/lib/rhoconnect/middleware/admin_user.rb +0 -23
  333. data/lib/rhoconnect/middleware/current_request.rb +0 -16
  334. data/lib/rhoconnect/middleware/login_required.rb +0 -22
  335. data/lib/rhoconnect/source_adapter.rb +0 -132
  336. data/lib/rhoconnect/source_sync.rb +0 -464
  337. data/spec/apps/rhotestapp/application.rb +0 -23
data/spec/store_spec.rb CHANGED
@@ -3,56 +3,26 @@ require File.join(File.dirname(__FILE__),'spec_helper')
3
3
  describe "Store" do
4
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
5
5
  describe "store methods" do
6
- it "should create db class method" do
7
- if RUBY_VERSION =~ /1.9/
8
- Store.db.class.name.should match(/ConnectionPool/)
9
- else
10
- Store.db.class.name.should match(/Redis/)
11
- end
12
- end
13
-
14
- it "should set redis connection" do
15
- Store.db = nil
16
- Store.db = 'localhost:6379'
17
- Store.db.client.host.should == 'localhost'
18
- Store.db.client.port.should == 6379
19
- end
20
-
21
- it "should create default redis connection" do
22
- Store.db = nil
23
- if RUBY_VERSION =~ /1.9/
24
- Store.db.class.name.should match(/ConnectionPool/)
25
- else
26
- Store.db.class.name.should match(/Redis/)
27
- end
28
- end
29
-
30
- it "should assign redis to existing redis" do
31
- Store.db = Redis.new(:timeout => 60)
32
- Store.db.client.timeout.should == 60
6
+ it "should create proper connection class" do
7
+ Store.get_store(0).db.class.name.should match(/Redis/)
33
8
  end
34
9
 
35
10
  it "should create redis connection based on ENV" do
36
11
  ENV[REDIS_URL] = 'redis://localhost:6379'
37
- if RUBY_VERSION =~ /1.9/
38
- Redis.should_receive(:connect).with(:url => 'redis://localhost:6379', :thread_safe => true, :timeout => Rhoconnect.redis_timeout).exactly(5).times.and_return { Redis.new }
39
- else
40
- Redis.should_receive(:connect).with(:url => 'redis://localhost:6379', :thread_safe => true, :timeout => Rhoconnect.redis_timeout).and_return { Redis.new }
41
- end
42
- Store.db = nil
43
- Store.db.should_not == nil
12
+ Redis.should_receive(:connect).with(:url => 'redis://localhost:6379', :thread_safe => true, :timeout => Rhoconnect.redis_timeout).exactly(5).times.and_return { Redis.new }
13
+ Store.nullify
14
+ Store.num_stores.should == 0
15
+ Store.create
16
+ Store.get_store(0).db.should_not == nil
44
17
  ENV.delete(REDIS_URL)
45
18
  end
46
19
 
47
20
  it "should create redis connection based on REDISTOGO_URL ENV" do
48
21
  ENV[REDISTOGO_URL] = 'redis://localhost:6379'
49
- if RUBY_VERSION =~ /1.9/
50
- Redis.should_receive(:connect).with(:url => 'redis://localhost:6379', :thread_safe => true, :timeout => Rhoconnect.redis_timeout).exactly(5).times.and_return { Redis.new }
51
- else
52
- Redis.should_receive(:connect).with(:url => 'redis://localhost:6379', :thread_safe => true, :timeout => Rhoconnect.redis_timeout).and_return { Redis.new }
53
- end
54
- Store.db = nil
55
- Store.db.should_not == nil
22
+ Redis.should_receive(:connect).with(:url => 'redis://localhost:6379', :thread_safe => true, :timeout => Rhoconnect.redis_timeout).exactly(5).times.and_return { Redis.new }
23
+ Store.nullify
24
+ Store.create
25
+ Store.get_store(0).db.should_not == nil
56
26
  ENV.delete(REDISTOGO_URL)
57
27
  end
58
28
 
@@ -87,8 +57,8 @@ describe "Store" do
87
57
  update_data = { '1' => {'attr1' => 'value2', 'new_attr' => 'new_val', 'hello' => 'world'},
88
58
  '2' => {'whole_new_object' => 'new_value' } }
89
59
  Store.put_data('mydata', data)
90
- Store.db.should_receive(:srem).exactly(1).times
91
- Store.db.should_receive(:sadd).exactly(2).times
60
+ Store.get_store(0).db.should_receive(:srem).exactly(1).times
61
+ Store.get_store(0).db.should_receive(:sadd).exactly(2).times
92
62
  Store.update_objects('mydata', update_data)
93
63
  end
94
64
 
@@ -98,12 +68,20 @@ describe "Store" do
98
68
  Store.delete_objects('mydata', ['1'])
99
69
  Store.get_data('mydata').should == {}
100
70
  end
71
+
72
+ it "should update_count and delete_value with simple integer data" do
73
+ Store.put_value('mydata', 21)
74
+ Store.update_count('mydata', -5)
75
+ Store.get_value('mydata').to_i.should == 16
76
+ Store.delete_value('mydata')
77
+ Store.exists?('mydata').should be_false
78
+ end
101
79
 
102
80
  it "should delete_objects with simple data and verify that srem is called only on affected fields" do
103
81
  data = { '1' => { 'hello' => 'world', "attr1" => 'value1' } }
104
82
  Store.put_data('mydata', data)
105
- Store.db.should_receive(:srem).exactly(1).times
106
- Store.db.should_receive(:sadd).exactly(0).times
83
+ Store.get_store(0).db.should_receive(:srem).exactly(1).times
84
+ Store.get_store(0).db.should_receive(:sadd).exactly(0).times
107
85
  Store.delete_objects('mydata', ['1'])
108
86
  end
109
87
 
@@ -145,8 +123,8 @@ describe "Store" do
145
123
  Store.get_data(@s.docname(:md)).should == @data
146
124
 
147
125
  @product3['price'] = '59.99'
148
- elem_3 = Store.send(:set_obj_element, '3', @product3)
149
- keypairs_3 = Store.send(:get_obj_key_and_pairs, elem_3)
126
+ elem_3 = Store.get_store(0).send(:set_obj_element, '3', @product3)
127
+ keypairs_3 = Store.get_store(0).send(:get_obj_key_and_pairs, elem_3)
150
128
  expected = {elem_3 => keypairs_3}
151
129
  @data1,@data1['1'],@data1['2'],@data1['3'] = {},@product1,@product2,@product3
152
130
 
@@ -161,10 +139,10 @@ describe "Store" do
161
139
 
162
140
  mod_product2 = @product2.dup
163
141
  mod_product2['price'] = '59.99'
164
- elem_2 = Store.send(:set_obj_element, '2', @data['2'])
165
- elem_3 = Store.send(:set_obj_element, '3', @product3)
166
- keypairs_2 = Store.send(:get_obj_key_and_pairs, elem_2)
167
- keypairs_3 = Store.send(:get_obj_key_and_pairs, elem_3)
142
+ elem_2 = Store.get_store(0).send(:set_obj_element, '2', @data['2'])
143
+ elem_3 = Store.get_store(0).send(:set_obj_element, '3', @product3)
144
+ keypairs_2 = Store.get_store(0).send(:get_obj_key_and_pairs, elem_2)
145
+ keypairs_3 = Store.get_store(0).send(:get_obj_key_and_pairs, elem_3)
168
146
  expected = {elem_2 => keypairs_2, elem_3 => keypairs_3}
169
147
  @data1,@data1['1'],@data1['2'] = {},@product1,mod_product2
170
148
 
@@ -188,37 +166,37 @@ describe "Store" do
188
166
  Store.get_data(@s.docname(:md)).should == @data
189
167
  end
190
168
 
191
- it "should flash_data" do
169
+ it "should flush_data" do
192
170
  Store.put_data(@s.docname(:md),@data)
193
- Store.flash_data(@s.docname(:md))
171
+ Store.flush_data(@s.docname(:md))
194
172
  Store.get_data(@s.docname(:md)).should == {}
195
173
  end
196
174
 
197
- it "should flash_data for all keys matching pattern" do
198
- keys = ['test_flash_data1','test_flash_data2']
175
+ it "should flush_data for all keys matching pattern" do
176
+ keys = ['test_flush_data1','test_flush_data2']
199
177
  keys.each {|key| Store.put_data(key,@data)}
200
- Store.flash_data('test_flash_data*')
178
+ Store.flush_data('test_flush_data*')
201
179
  keys.each {|key| Store.get_data(key).should == {} }
202
180
  end
203
181
 
204
- it "should flash_data without calling KEYS when there aren't pattern matching characters in the provided keymask" do
205
- key = 'test_flash_data'
182
+ it "should flush_data without calling KEYS when there aren't pattern matching characters in the provided keymask" do
183
+ key = 'test_flush_data'
206
184
  Store.put_data(key,@data)
207
- Store.db.should_not_receive(:keys)
208
- Store.db.should_receive(:del).once.with("#{key}:#{get_sha1('1')[0..1]}").and_return(true)
209
- Store.db.should_receive(:del).once.with("#{key}:#{get_sha1('2')[0..1]}").and_return(true)
210
- Store.db.should_receive(:del).once.with("#{key}:#{get_sha1('3')[0..1]}").and_return(true)
211
- Store.db.should_receive(:del).once.with("#{key}:indices").and_return(true)
212
- Store.flash_data(key)
185
+ Store.get_store(0).db.should_not_receive(:keys)
186
+ Store.get_store(0).db.should_receive(:del).once.with("#{key}:#{get_sha1('1')[0..1]}").and_return(true)
187
+ Store.get_store(0).db.should_receive(:del).once.with("#{key}:#{get_sha1('2')[0..1]}").and_return(true)
188
+ Store.get_store(0).db.should_receive(:del).once.with("#{key}:#{get_sha1('3')[0..1]}").and_return(true)
189
+ Store.get_store(0).db.should_receive(:del).once.with("#{key}:indices").and_return(true)
190
+ Store.flush_data(key)
213
191
  end
214
192
 
215
- it "should flash_data and call KEYS when there are pattern matching characters in the provided keymask" do
216
- keys = ['test_flash_data1','test_flash_data2']
193
+ it "should flush_data and call KEYS when there are pattern matching characters in the provided keymask" do
194
+ keys = ['test_flush_data1','test_flush_data2']
217
195
  keys.each {|key| Store.put_data(key,@data)}
218
- docs = Store.db.keys("test_flash_data*")
219
- Store.db.should_receive(:keys).exactly(1).times.with("test_flash_data*").and_return(docs)
220
- Store.db.should_receive(:del).exactly(8).times.and_return(true)
221
- Store.flash_data("test_flash_data*")
196
+ docs = Store.keys("test_flush_data*")
197
+ Store.get_store(0).db.should_receive(:keys).exactly(1).times.with("test_flush_data*").and_return(docs)
198
+ Store.get_store(0).db.should_receive(:del).exactly(8).times.and_return(true)
199
+ Store.flush_data("test_flush_data*")
222
200
  end
223
201
 
224
202
  it "should put_zdata and get_zdata" do
@@ -258,121 +236,35 @@ describe "Store" do
258
236
  zdocs.should == {}
259
237
  end
260
238
 
261
- it "should put_multi_zdata and get_multi_zdata for transaction's queue" do
262
- create_doc = {'1' => {'foo' => 'bar'}}
263
- update_doc = {'2' => {'foo1' => 'bar1'}}
264
- delete_doc = {'3' => {'foo2' => 'bar2'}}
265
- sources_doc = {'source1' => {'create' => create_doc,
266
- 'delete' => delete_doc}}
267
- sources_doc['source2'] = {'update' => update_doc}
268
- sources = ['source2', 'source1']
269
- assoc_key = 'my_assoc_key'
270
- Store.put_multi_zdata('transactions',assoc_key,sources,sources_doc)
271
- zdata,ordered_sources,keys = Store.get_multi_zdata('transactions')
272
- zdata.should == [sources_doc]
273
- ordered_sources.should == [sources]
274
- keys.should == [assoc_key]
275
- end
276
-
277
- it "should return empty list on non-existing get_multi_zdata" do
278
- zdata,ordered_sources,keys = Store.get_multi_zdata('wrong_doc2')
279
- zdata.should == []
280
- ordered_sources.should == []
281
- keys.should == []
282
- end
283
-
284
- it "should append duplicate data in put_multi_zdata" do
285
- create_doc = {'1' => {'foo' => 'bar'}}
286
- update_doc = {'2' => {'foo1' => 'bar1'}}
287
- delete_doc = {'3' => {'foo2' => 'bar2'}}
288
- sources_doc = {'source1' => {'create' => create_doc,
289
- 'delete' => delete_doc}}
290
- sources_doc['source2'] = {'update' => update_doc}
291
- sources1 = ['source2', 'source1']
292
- sources2 = ['source1', 'source2']
293
- assoc_key = 'my_assoc_key'
294
- Store.put_multi_zdata('doc1',assoc_key,sources1,sources_doc)
295
- Store.put_multi_zdata('doc1',assoc_key,sources2,sources_doc, true)
296
- zdata,ordered_sources,keys = Store.get_multi_zdata('doc1')
297
- zdata.should == [sources_doc,sources_doc]
298
- ordered_sources.should == [sources1, sources2]
299
- keys.should == [assoc_key,assoc_key]
300
- end
301
-
302
- it "should flush_multi_zdata and all its related documents" do
303
- create_doc = {'1' => {'foo' => 'bar'}}
304
- update_doc = {'2' => {'foo1' => 'bar1'}}
305
- delete_doc = {'3' => {'foo2' => 'bar2'}}
306
- sources_doc = {'source1' => {'create' => create_doc,
307
- 'delete' => delete_doc}}
308
- sources_doc['source2'] = {'update' => update_doc}
309
- sources1 = ['source2', 'source1']
310
- sources2 = ['source1', 'source2']
311
- assoc_key = 'my_assoc_key'
312
- Store.put_multi_zdata('doc1',assoc_key,sources1,sources_doc)
313
- Store.put_multi_zdata('doc1',assoc_key,sources2,sources_doc,true)
314
- zsources1 = Store.get_data('doc1:1:my_assoc_key:sources',Array)
315
- zsources1.should == sources1
316
- zsources2 = Store.get_data('doc1:2:my_assoc_key:sources',Array)
317
- zsources2.should == sources2
318
- zdata_create1 = Store.get_data('doc1:1,my_assoc_key:source1:create')
319
- zdata_create1.should == create_doc
320
- zdata_update1 = Store.get_data('doc1:1,my_assoc_key:source2:update')
321
- zdata_update1.should == update_doc
322
- zdata_delete1 = Store.get_data('doc1:1,my_assoc_key:source1:delete')
323
- zdata_delete1.should == delete_doc
324
- zdata_create2 = Store.get_data('doc1:2,my_assoc_key:source1:create')
325
- zdata_create2.should == create_doc
326
- zdata_update2 = Store.get_data('doc1:2,my_assoc_key:source2:update')
327
- zdata_update2.should == update_doc
328
- zdata_delete2 = Store.get_data('doc1:2,my_assoc_key:source1:delete')
329
- zdata_delete2.should == delete_doc
330
- Store.flush_multi_zdata('doc1')
331
- zdata,ordered_sources,keys = Store.get_multi_zdata('doc1')
332
- zdata.should == []
333
- ordered_sources.should == []
334
- keys.should == []
335
- zsources1 = Store.get_data('doc1:1:my_assoc_key:sources',Array)
336
- zsources1.should == []
337
- zsources2 = Store.get_data('doc1:2:my_assoc_key:sources',Array)
338
- zsources2.should == []
339
- zdata_create1 = Store.get_data('doc1:1,my_assoc_key:source1:create')
340
- zdata_create1.should == {}
341
- zdata_update1 = Store.get_data('doc1:1,my_assoc_key:source2:update')
342
- zdata_update1.should == {}
343
- zdata_delete1 = Store.get_data('doc1:1,my_assoc_key:source1:delete')
344
- zdata_delete1.should == {}
345
- zdata_create2 = Store.get_data('doc1:2,my_assoc_key:source1:create')
346
- zdata_create2.should == {}
347
- zdata_update2 = Store.get_data('doc1:2,my_assoc_key:source2:update')
348
- zdata_update2.should == {}
349
- zdata_delete2 = Store.get_data('doc1:2,my_assoc_key:source1:delete')
350
- zdata_delete2.should == {}
351
- end
352
-
353
239
  if defined?(JRUBY_VERSION)
354
240
  it "should lock document" do
355
241
  doc = "locked_data"
242
+ threads = []
356
243
  m_lock = Store.get_lock(doc)
357
- t = Thread.new do
358
- Store.db = Redis.new
244
+ threads << Thread.new do
359
245
  t_lock = Store.get_lock(doc)
360
246
  Store.put_data(doc,{'1'=>@product1},true)
361
- Store.release_lock(doc,t_lock)
247
+ Store.release_lock(doc,t_lock)
248
+ end
249
+ threads << Thread.new do
250
+ t_lock = Store.get_lock(doc)
251
+ Store.put_data(doc,{'3'=>@product3},true)
252
+ Store.release_lock(doc,t_lock)
362
253
  end
363
254
  Store.put_data(doc,{'2'=>@product2},true)
364
255
  Store.get_data(doc).should == {'2'=>@product2}
365
256
  Store.release_lock(doc,m_lock)
366
- t.join
257
+ threads.each { |t| t.join }
367
258
  m_lock = Store.get_lock(doc)
368
- Store.get_data(doc).should == {'1'=>@product1,'2'=>@product2}
259
+ Store.get_data(doc).should == {'1'=>@product1,'2'=>@product2,'3'=>@product3}
369
260
  end
370
261
  else
371
262
  it "should lock document" do
372
263
  doc = "locked_data"
373
264
  m_lock = Store.get_lock(doc)
374
265
  pid = Process.fork do
375
- Store.db = Redis.new
266
+ Store.nullify
267
+ Store.create
376
268
  t_lock = Store.get_lock(doc)
377
269
  Store.put_data(doc,{'1'=>@product1},true)
378
270
  Store.release_lock(doc,t_lock)
@@ -390,12 +282,13 @@ describe "Store" do
390
282
  it "should lock key for timeout" do
391
283
  doc = "locked_data"
392
284
  lock = Time.now.to_i+3
393
- Store.db.set "lock:#{doc}", lock
394
- Store.should_receive(:sleep).at_least(:once).with(1).and_return { sleep 1; Store.release_lock(doc,lock); }
285
+ Store.get_store(0).db.set "lock:#{doc}", lock
286
+ Store.get_store(0).should_receive(:sleep).at_least(:once).with(1).and_return { sleep 1; Store.release_lock(doc,lock); }
395
287
  Store.get_lock(doc,4)
396
288
  end
397
289
 
398
290
  it "should raise exception if lock expires" do
291
+
399
292
  doc = "locked_data"
400
293
  Store.get_lock(doc)
401
294
  lambda { sleep 2; Store.get_lock(doc,4,true) }.should raise_error(StoreLockException,"Lock \"lock:locked_data\" expired before it was released")
@@ -420,7 +313,7 @@ describe "Store" do
420
313
  doc = "locked_data"
421
314
  Rhoconnect.lock_duration = 2
422
315
  Store.get_lock(doc)
423
- Store.should_receive(:sleep).at_least(1).times.with(1).and_return { sleep 1 }
316
+ Store.get_store(0).should_receive(:sleep).at_least(1).times.with(1).and_return { sleep 1 }
424
317
  Store.get_lock(doc)
425
318
  Rhoconnect.lock_duration = nil
426
319
  end
@@ -447,8 +340,8 @@ describe "Store" do
447
340
 
448
341
  it "should not fail to rename if key doesn't exist" do
449
342
  Store.rename('key1','key2')
450
- Store.db.exists('key1').should be_false
451
- Store.db.exists('key2').should be_false
343
+ Store.exists?('key1').should be_false
344
+ Store.exists?('key2').should be_false
452
345
  end
453
346
 
454
347
  it "should raise ArgumentError on put_data with invalid data" do
@@ -467,12 +360,12 @@ describe "Store" do
467
360
  docindex2 = get_sha1(key2)[0..1]
468
361
  Store.put_object(:md, key1, data1)
469
362
  Store.put_object(:md, key2, data2)
470
- Store.db.exists(:md).should be_false
471
- Store.db.exists("#{:md}:#{docindex1}").should be_true
472
- Store.db.exists("#{:md}:#{docindex2}").should be_true
473
- Store.db.exists("#{:md}:indices").should be_true
474
- Store.db.hkeys("#{:md}:indices").should == ["#{docindex1}", "#{docindex2}"]
475
- Store.db.hvals("#{:md}:indices").should == ["#{:md}:#{docindex1}", "#{:md}:#{docindex2}"]
363
+ Store.keys(:md).should == []
364
+ Store.exists?("#{:md}:#{docindex1}").should be_true
365
+ Store.exists?("#{:md}:#{docindex2}").should be_true
366
+ Store.exists?("#{:md}:indices").should be_true
367
+ Store.get_store(0).db.hkeys("#{:md}:indices").should == ["#{docindex1}", "#{docindex2}"]
368
+ Store.get_store(0).db.hvals("#{:md}:indices").should == ["#{:md}:#{docindex1}", "#{:md}:#{docindex2}"]
476
369
  end
477
370
 
478
371
  it "should get_object from the bucketed md" do
@@ -487,6 +380,93 @@ describe "Store" do
487
380
  obj2 = Store.get_object(:md, key2)
488
381
  obj2.should == data2
489
382
  end
383
+
384
+ it "should make temporary document and restore it to permanent with rename" do
385
+ key1 = '1'
386
+ data1 = {'foo' => 'bar'}
387
+ key2 = '2'
388
+ data2 = {'one' => 'two', 'three' => 'four'}
389
+ docindex1 = get_sha1(key1)[0..1]
390
+ docindex2 = get_sha1(key2)[0..1]
391
+ Store.put_tmp_data(:md, {key1 => data1})
392
+ Store.put_tmp_data(:md, {key2 => data2}, true)
393
+
394
+ Store.exists?("#{:md}:#{docindex1}").should be_true
395
+ Store.exists?("#{:md}:#{docindex2}").should be_true
396
+ Store.exists?("#{:md}:indices").should be_true
397
+ Store.get_store(0).db.ttl("#{:md}:#{docindex1}").should == Rhoconnect.store_key_ttl
398
+ Store.get_store(0).db.ttl("#{:md}:#{docindex2}").should == Rhoconnect.store_key_ttl
399
+ Store.get_store(0).db.ttl("#{:md}:indices").should == Rhoconnect.store_key_ttl
400
+
401
+ Store.rename_tmp_data(:md, :md_perm)
402
+ Store.exists?("#{:md}:#{docindex1}").should be_false
403
+ Store.exists?("#{:md}:#{docindex2}").should be_false
404
+ Store.exists?("#{:md}:indices").should be_false
405
+ Store.exists?("#{:md_perm}:#{docindex1}").should be_true
406
+ Store.exists?("#{:md_perm}:#{docindex2}").should be_true
407
+ Store.exists?("#{:md_perm}:indices").should be_true
408
+ Store.get_store(0).db.ttl("#{:md_perm}:#{docindex1}").should == -1
409
+ Store.get_store(0).db.ttl("#{:md_perm}:#{docindex2}").should == -1
410
+ Store.get_store(0).db.ttl("#{:md_perm}:indices").should == -1
411
+ end
412
+
413
+ describe "multiple redis clustering" do
414
+ before(:all) do
415
+ # start 2 redis instances in addition to default 6379
416
+ system("redis-server --port 6380 &")
417
+ system("redis-server --port 6381 &")
418
+ sleep(1)
419
+ Store.nullify
420
+ Store.create(['localhost:6379', 'localhost:6380', 'localhost:6381'])
421
+
422
+ end
423
+
424
+ after(:all) do
425
+ # shutdown 2 additional redis instances (leave default one as is)
426
+ Store.get_store(1).send(:db).shutdown
427
+ Store.get_store(2).send(:db).shutdown
428
+ Store.nullify
429
+ end
430
+
431
+ it "should list number of stores" do
432
+ Store.num_stores.should == 3
433
+ end
434
+
435
+ it "data for Source and Client docs should be on the same instance" do
436
+ source_index = @s.store_index(:md)
437
+ client_index = @c.store_index(:cd)
438
+ # for this source and user , index should be computed to 2
439
+ source_index.should == 2
440
+ source_index.should == client_index
441
+ end
442
+
443
+ it "data for app-parttion should go to system Redis (with index 0)" do
444
+ @c.source_name = @s3.name
445
+ source_index = @s3.store_index(:md)
446
+ client_index = @c.store_index(:cd)
447
+ # for this source and user , index should be compured to 0
448
+ source_index.should == 0
449
+ source_index.should == client_index
450
+ end
451
+
452
+ it "should set and flush the data only in appropriate instance" do
453
+ key1 = '1'
454
+ data1 = {'foo' => 'bar'}
455
+ key2 = '2'
456
+ data2 = {'foo1' => 'bar1'}
457
+ @s.put_data(:md, {key1 => data1})
458
+ Store.get_store(2).get_data(@s.docname(:md)).should == {key1 => data1}
459
+ # data in store 1 should not be accessible through Source documents
460
+ # because this combination of user and source should index to instance #2
461
+ Store.get_store(1).put_data(@s.docname(:md), {key2 => data2})
462
+ Store.get_store(1).get_data(@s.docname(:md)).should == {key2 => data2}
463
+
464
+ @s.get_data(:md).should == {key1 => data1}
465
+ Store.get_store(2).flush_data(@s.docname(:md))
466
+ @s.get_data(:md).should == {}
467
+ Store.get_store(1).get_data(@s.docname(:md)).should == {key2 => data2}
468
+ end
469
+ end
490
470
  end
491
471
  end
492
472
  end
@@ -1,36 +1,36 @@
1
- # When shared examples are called as
1
+ # When shared examples are called as
2
2
  # it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => false
3
3
  # then :rhoconnect_data group (@product1, ..., @data) skipped.
4
4
  # To enable this group call examples as
5
5
  # it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true
6
6
  shared_examples_for "SharedRhoconnectHelper" do |params|
7
- include TestHelpers
7
+ include TestHelpers
8
8
  # "TestappHelper"
9
- let(:test_app_name) { 'application' }
10
- # "RhoconnectHelper"
11
- before(:all) do
9
+ let(:test_app_name) { 'application' }
10
+
11
+ before(:each) do
12
+ # "RhoconnectHelper"
13
+ Store.create
14
+ Store.flush_all
15
+ Rhoconnect.use_node = false
16
+ Rhoconnect::Server.set :environment, :test
17
+
12
18
  Rhoconnect.bootstrap(get_testapp_path) do |rhoconnect|
13
19
  rhoconnect.vendor_directory = File.join(File.dirname(__FILE__), '..', '..', 'vendor')
14
20
  end
15
- end
16
-
17
- before(:each) do
18
- # "RhoconnectHelper"
19
- Store.create
20
- Store.db.flushdb
21
-
21
+
22
22
  # "DBObjectsHelper"
23
23
  @a_fields = { :name => test_app_name }
24
24
  @a = (App.load(test_app_name) || App.create(@a_fields))
25
25
  @u_fields = {:login => 'testuser'}
26
- @u = User.create(@u_fields)
26
+ @u = User.create(@u_fields)
27
27
  @u.password = 'testpass'
28
28
  @c_fields = {
29
29
  :device_type => 'Apple',
30
30
  :device_pin => 'abcd',
31
31
  :device_port => '3333',
32
32
  :user_id => @u.id,
33
- :app_id => @a.id
33
+ :app_id => @a.id
34
34
  }
35
35
  @s_fields = {
36
36
  :name => 'SampleAdapter',
@@ -55,7 +55,7 @@ shared_examples_for "SharedRhoconnectHelper" do |params|
55
55
  @s1 = Source.create(@s1_fields,@s_params)
56
56
  @s2 = Source.create({:name=> 'Product2'},@s_params)
57
57
  @s3 = Source.create({:name=> 'SimpleAdapter',:partition_type=> 'app'},@s_params)
58
- @s1.belongs_to = [{'brand' => 'SampleAdapter'}].to_json
58
+ @s1.belongs_to = [{'brand' => 'SampleAdapter'}].to_json
59
59
  config = Rhoconnect.source_config('FixedSchemaAdapter')
60
60
  @s1.update(config)
61
61
  @r = @s.read_state
@@ -64,9 +64,9 @@ shared_examples_for "SharedRhoconnectHelper" do |params|
64
64
  @a.sources << @s3.id
65
65
  Source.update_associations(@a.sources)
66
66
  @a.users << @u.id
67
-
68
- # "RhoconnectDataHelper"
69
- if params && params[:rhoconnect_data]
67
+
68
+ # "RhoconnectDataHelper"
69
+ if params && params[:rhoconnect_data]
70
70
  @source = 'Product'
71
71
  @user_id = 5
72
72
  @client_id = 1
@@ -84,7 +84,7 @@ end
84
84
  shared_examples_for "BenchSpecHelper" do
85
85
  before(:each) do
86
86
  Store.create
87
- Store.db.flushdb
87
+ Store.flush_all
88
88
 
89
89
  @product1 = { 'name' => 'iPhone', 'brand' => 'Apple', 'price' => '199.99' }
90
90
  @product2 = { 'name' => 'G2', 'brand' => 'Android', 'price' => '99.99' }
@@ -98,15 +98,23 @@ end
98
98
  shared_examples_for "ApiHelper" do
99
99
  include Rack::Test::Methods
100
100
  include Rhoconnect
101
- include TestHelpers
101
+ include TestHelpers
102
102
 
103
103
  let(:test_app_name) { 'application' }
104
-
104
+
105
+ def app
106
+ Rhoconnect::Server.set :stats, false
107
+ Rhoconnect.stats = false
108
+ @app ||= Rack::URLMap.new Rhoconnect.url_map
109
+ end
110
+
105
111
  before(:each) do
112
+ Rhoconnect.connection_pool_timeout = 30
113
+ Rhoconnect.connection_pool_size = 5
106
114
  Store.create
107
- Store.db.flushdb
115
+ Store.flush_all
108
116
 
109
- require File.join(get_testapp_path, test_app_name)
117
+ Rhoconnect.use_node = false
110
118
  Rhoconnect.bootstrap(get_testapp_path) do |rhoconnect|
111
119
  rhoconnect.vendor_directory = File.join(rhoconnect.base_directory,'..','..','..','vendor')
112
120
  end
@@ -118,14 +126,14 @@ shared_examples_for "ApiHelper" do
118
126
  @a_fields = { :name => test_app_name }
119
127
  @a = (App.load(test_app_name) || App.create(@a_fields))
120
128
  @u_fields = {:login => 'testuser'}
121
- @u = User.create(@u_fields)
129
+ @u = User.create(@u_fields)
122
130
  @u.password = 'testpass'
123
131
  @c_fields = {
124
132
  :device_type => 'Apple',
125
133
  :device_pin => 'abcd',
126
134
  :device_port => '3333',
127
135
  :user_id => @u.id,
128
- :app_id => @a.id
136
+ :app_id => @a.id
129
137
  }
130
138
  @s_fields = {
131
139
  :name => 'SampleAdapter',
@@ -149,7 +157,7 @@ shared_examples_for "ApiHelper" do
149
157
  @s = Source.create(@s_fields,@s_params)
150
158
  @s1 = Source.create(@s1_fields,@s_params)
151
159
  @s2 = Source.create({:name=> 'Product2'},@s_params)
152
- @s1.belongs_to = [{'brand' => 'SampleAdapter'}].to_json
160
+ @s1.belongs_to = [{'brand' => 'SampleAdapter'}].to_json
153
161
  config = Rhoconnect.source_config('FixedSchemaAdapter')
154
162
  @s1.update(config)
155
163
  @r = @s.read_state
@@ -169,4 +177,5 @@ shared_examples_for "ApiHelper" do
169
177
 
170
178
  @data = {'1'=>@product1,'2'=>@product2,'3'=>@product3}
171
179
  end
172
- end
180
+ end
181
+