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
@@ -61,25 +61,55 @@ describe "Rhoconnect Performance" do
61
61
  @data1 = get_test_data(10000)
62
62
  @data1['950']['Phone1'] = 'This is changed'
63
63
  expected = {'950' => {'Phone1' => 'This is changed'}}
64
- Store.put_data(@s.docname(:md),@data1).should == true
65
- Store.put_data(@c.docname(:cd),@data).should == true
64
+ @s.put_data(:md,@data1).should == true
65
+ @c.put_data(:cd,@data).should == true
66
66
  start = start_timer
67
- cs = ClientSync.new(@s,@c)
67
+ cs = create_sync_handler
68
68
  token,progress_count,total_count,res = cs.send_new_page
69
69
  lap_timer('compute_page duration', start)
70
- Store.get_data(@c.docname(:page)).should == expected
70
+ @c.get_data(:page).should == expected
71
+ res['insert'].should == expected
72
+ res['delete'].should == {'950' => {'Phone1' => @data['950']['Phone1']}}
73
+ end
74
+
75
+ it "should process single attribute diff for 10000-record doc using brute-force approach" do
76
+ @data = get_test_data(10000)
77
+ @data1 = get_test_data(10000)
78
+ @data1['950']['Phone1'] = 'This is changed'
79
+ expected = {'950' => {'Phone1' => 'This is changed'}}
80
+ @s.put_data(:md,@data1).should == true
81
+ @c.put_data(:cd,@data).should == true
82
+ start = start_timer
83
+ cs = create_sync_handler
84
+ token,progress_count,total_count,res = cs.send_new_page_bruteforce
85
+ lap_timer('compute_page duration', start)
86
+ @c.get_data(:page).should == expected
71
87
  res['insert'].should == expected
72
88
  res['delete'].should == {'950' => {'Phone1' => @data['950']['Phone1']}}
73
89
  end
74
90
 
75
91
  it "should process full-sync for 5000-record doc" do
76
92
  @data = get_test_data(5000)
77
- Store.put_data(@s.docname(:md),@data).should == true
93
+ @s.put_data(:md,@data).should == true
78
94
  start = start_timer
79
- cs = ClientSync.new(@s,@c,5000)
95
+ params = { :p_size => 5000 }
96
+ cs = create_sync_handler params
80
97
  token,progress_count,total_count,res = cs.send_new_page
81
98
  lap_timer('compute_page duration', start)
82
- Store.get_data(@c.docname(:page)).should == @data
99
+ @c.get_data(:page).should == @data
100
+ res['insert'].should == @data
101
+ res['delete'].should == nil
102
+ end
103
+
104
+ it "should process full-sync for 5000-record doc using brute-force approach" do
105
+ @data = get_test_data(5000)
106
+ @s.put_data(:md,@data).should == true
107
+ start = start_timer
108
+ params = { :p_size => 5000 }
109
+ cs = create_sync_handler params
110
+ token,progress_count,total_count,res = cs.send_new_page_bruteforce
111
+ lap_timer('compute_page duration', start)
112
+ @c.get_data(:page).should == @data
83
113
  res['insert'].should == @data
84
114
  res['delete'].should == nil
85
115
  end
@@ -88,17 +118,42 @@ describe "Rhoconnect Performance" do
88
118
  @data = generate_fake_data(5000,true)
89
119
  sleep(1.5)
90
120
  @data1 = generate_fake_data(5000,true)
91
- Store.put_data(@s.docname(:md),@data).should == true
92
- Store.put_data(@c.docname(:cd),@data1).should == true
121
+ @s.put_data(:md,@data).should == true
122
+ @c.put_data(:cd,@data1).should == true
93
123
  start = start_timer
94
- cs = ClientSync.new(@s,@c,5000)
124
+ params = { :p_size => 5000 }
125
+ cs = create_sync_handler params
95
126
  token,progress_count,total_count,res = cs.send_new_page
96
127
  lap_timer('compute_page duration', start)
97
- Store.get_data(@c.docname(:page)).should == @data
98
- Store.get_data(@c.docname(:cd)).should == Store.get_data(@s.docname(:md))
128
+ @c.get_data(:page).should == @data
129
+ @c.get_data(:cd).should == @s.get_data(:md)
130
+ res['insert'].should == @data
131
+ res['delete'].should == @data1
132
+ end
133
+
134
+ it "should process worst-case sync scenario there every attrib of every object is changed for 5000-record doc using brute-force approach" do
135
+ @data = generate_fake_data(5000,true)
136
+ sleep(1.5)
137
+ @data1 = generate_fake_data(5000,true)
138
+ @s.put_data(:md,@data).should == true
139
+ @c.put_data(:cd,@data1).should == true
140
+ start = start_timer
141
+ params = { :p_size => 5000 }
142
+ cs = create_sync_handler params
143
+ token,progress_count,total_count,res = cs.send_new_page_bruteforce
144
+ lap_timer('compute_page duration', start)
145
+ @c.get_data(:page).should == @data
146
+ @c.get_data(:cd).should == @s.get_data(:md)
99
147
  res['insert'].should == @data
100
148
  res['delete'].should == @data1
101
149
  end
102
150
  end
103
151
 
152
+ # helper
153
+ def create_sync_handler(params = {})
154
+ rh = lambda { @model.do_query(params[:query]) }
155
+ @model = Rhoconnect::Model::Base.create(@s)
156
+ Rhoconnect::Handler::Query::Runner.new(@model, @c, rh, params)
157
+ end
158
+
104
159
  end
@@ -69,7 +69,7 @@ describe "Ping Android" do
69
69
  @response.stub!(:[]).and_return(nil)
70
70
  setup_post_yield(@response)
71
71
 
72
- Store.should_receive(:flash_data).once
72
+ Store.should_receive(:flush_data).once
73
73
  Android.should_receive(:get_c2dm_token).twice.and_return('BadToken')
74
74
  Android.should_receive(:log).twice
75
75
  lambda { Android.ping(@params) }.should raise_error(Android::InvalidAuthToken, "Invalid or expired auth token. Obtain new authtoken from C2DM service.")
@@ -18,7 +18,7 @@ describe "ReadState" do
18
18
 
19
19
  it "should delete read_state from db" do
20
20
  ReadState.delete(@a_fields[:name])
21
- Store.db.keys("read_state*").should == []
21
+ Store.keys("read_state*").should == []
22
22
  end
23
23
 
24
24
  it "should delete read_state from source" do
@@ -6,7 +6,7 @@ describe "Rhoconnect" do
6
6
 
7
7
  before(:each) do
8
8
  Store.create
9
- Store.db.flushdb
9
+ Store.flush_all
10
10
  end
11
11
 
12
12
  it "should bootstrap Rhoconnect with block" do
@@ -33,10 +33,9 @@ describe "CORS middleware" do
33
33
  @middleware = Rack::Cors.new @app, {} do |cfg|
34
34
  cfg.allow do |allow|
35
35
  allow.origins /allowed_origin/, 'file://'
36
- allow.resource '/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
37
- allow.resource '/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => false
38
- allow.resource '/api/application', :headers => 'allowed_header', :methods => [:get, :post, :put, :delete], :credentials => true, :expose => 'Content-Length'
39
- allow.resource '/api/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
36
+ allow.resource "/StubAdapter", :headers => 'allowed_header', :methods => [:get, :post, :put, :delete], :credentials => true, :expose => 'Content-Length'
37
+ allow.resource "/StubAdapter/any_header_allowed_here", :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
38
+ allow.resource "/StubAdapter/no_default_exposed_headers", :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
40
39
  end
41
40
  end
42
41
  end
@@ -58,16 +57,13 @@ describe "CORS middleware" do
58
57
  end
59
58
  exception_happens.should == true
60
59
 
61
- allow.resource '/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
62
- allow.resource '/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => false
63
- allow.resource '/api/application', :headers => 'allowed_header', :methods => [:get, :post, :put, :delete], :credentials => true, :expose => 'Content-Length'
64
- allow.resource '/api/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
60
+ allow.resource "/*", :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
65
61
  end
66
62
  end
67
63
 
68
64
  env = {
69
65
  'REQUEST_METHOD' => 'OPTIONS',
70
- 'PATH_INFO' => '/api/application',
66
+ 'PATH_INFO' => '/StubAdapter',
71
67
  'HTTP_ORIGIN' => 'wrong_origin',
72
68
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST'
73
69
  }
@@ -79,7 +75,7 @@ describe "CORS middleware" do
79
75
  it "preflight check should disable unknown origins" do
80
76
  env = {
81
77
  'REQUEST_METHOD' => 'OPTIONS',
82
- 'PATH_INFO' => '/api/application',
78
+ 'PATH_INFO' => '/StubAdapter',
83
79
  'HTTP_ORIGIN' => 'wrong_origin',
84
80
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST'
85
81
  }
@@ -91,7 +87,7 @@ describe "CORS middleware" do
91
87
  it "preflight check should allow known origins" do
92
88
  env = {
93
89
  'REQUEST_METHOD' => 'OPTIONS',
94
- 'PATH_INFO' => '/api/application',
90
+ 'PATH_INFO' => '/StubAdapter',
95
91
  'HTTP_ORIGIN' => 'allowed_origin',
96
92
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST'
97
93
  }
@@ -103,7 +99,7 @@ describe "CORS middleware" do
103
99
  it "able to use fallback X-ORIGIN request header if ORIGIN header is undefined" do
104
100
  env = {
105
101
  'REQUEST_METHOD' => 'POST',
106
- 'PATH_INFO' => '/api/application',
102
+ 'PATH_INFO' => '/StubAdapter',
107
103
  'HTTP_X_ORIGIN' => 'allowed_origin',
108
104
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST'
109
105
  }
@@ -115,7 +111,7 @@ describe "CORS middleware" do
115
111
  it "preflight check treats empty 'null' origin as 'file://' one" do
116
112
  env = {
117
113
  'REQUEST_METHOD' => 'OPTIONS',
118
- 'PATH_INFO' => '/api/application',
114
+ 'PATH_INFO' => '/StubAdapter',
119
115
  'HTTP_ORIGIN' => 'null',
120
116
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST'
121
117
  }
@@ -127,7 +123,7 @@ describe "CORS middleware" do
127
123
  it "preflight check should enable allowed request headers" do
128
124
  env = {
129
125
  'REQUEST_METHOD' => 'OPTIONS',
130
- 'PATH_INFO' => '/api/application',
126
+ 'PATH_INFO' => '/StubAdapter',
131
127
  'HTTP_ORIGIN' => 'allowed_origin',
132
128
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST',
133
129
  'HTTP_ACCESS_CONTROL_REQUEST_HEADERS' => 'allowed_header'
@@ -141,7 +137,7 @@ describe "CORS middleware" do
141
137
  it "preflight check should disable not allowed request headers" do
142
138
  env = {
143
139
  'REQUEST_METHOD' => 'OPTIONS',
144
- 'PATH_INFO' => '/api/application',
140
+ 'PATH_INFO' => '/StubAdapter',
145
141
  'HTTP_ORIGIN' => 'allowed_origin',
146
142
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST',
147
143
  'HTTP_ACCESS_CONTROL_REQUEST_HEADERS' => 'not_allowed_header'
@@ -155,7 +151,7 @@ describe "CORS middleware" do
155
151
  it "preflight check should allow any request headers if configured so" do
156
152
  env = {
157
153
  'REQUEST_METHOD' => 'OPTIONS',
158
- 'PATH_INFO' => '/api/application/any_headers_allowed_here',
154
+ 'PATH_INFO' => '/StubAdapter/any_header_allowed_here',
159
155
  'HTTP_ORIGIN' => 'allowed_origin',
160
156
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST',
161
157
  'HTTP_ACCESS_CONTROL_REQUEST_HEADERS' => 'not_allowed_header'
@@ -170,7 +166,7 @@ describe "CORS middleware" do
170
166
  it "only allowed response headers should be exposed" do
171
167
  env = {
172
168
  'REQUEST_METHOD' => 'POST',
173
- 'PATH_INFO' => '/api/application',
169
+ 'PATH_INFO' => '/StubAdapter',
174
170
  'HTTP_ORIGIN' => 'allowed_origin',
175
171
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST'
176
172
  }
@@ -182,7 +178,7 @@ describe "CORS middleware" do
182
178
  it "no response headers should be exposed by default" do
183
179
  env = {
184
180
  'REQUEST_METHOD' => 'POST',
185
- 'PATH_INFO' => '/api/application/no_headers_exposed_here_by_default',
181
+ 'PATH_INFO' => '/StubAdapter/no_default_exposed_headers',
186
182
  'HTTP_ORIGIN' => 'allowed_origin',
187
183
  'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'POST'
188
184
  }