rhoconnect 3.4.5 → 4.0.0.beta.10

Sign up to get free protection for your applications and to get access to all the features.
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
+