rhoconnect 3.0.0.beta1

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 (361) hide show
  1. data/CHANGELOG +208 -0
  2. data/CREDITS +38 -0
  3. data/Gemfile +18 -0
  4. data/Gemfile.lock +97 -0
  5. data/LICENSE +75 -0
  6. data/README.md +10 -0
  7. data/Rakefile +82 -0
  8. data/bench/bench +7 -0
  9. data/bench/bench_runner.rb +112 -0
  10. data/bench/benchapp/Gemfile +21 -0
  11. data/bench/benchapp/Gemfile.lock +76 -0
  12. data/bench/benchapp/Rakefile +22 -0
  13. data/bench/benchapp/application.rb +39 -0
  14. data/bench/benchapp/config.ru +36 -0
  15. data/bench/benchapp/settings/license.key +1 -0
  16. data/bench/benchapp/settings/settings.yml +20 -0
  17. data/bench/benchapp/sources/mock_adapter.rb +55 -0
  18. data/bench/benchapp/sources/queue_mock_adapter.rb +2 -0
  19. data/bench/benchapp/spec/sources/mock_adapter_spec.rb +25 -0
  20. data/bench/benchapp/spec/sources/queue_mock_adapter_spec.rb +25 -0
  21. data/bench/benchapp/spec/spec_helper.rb +42 -0
  22. data/bench/blobapp/Gemfile +31 -0
  23. data/bench/blobapp/Gemfile.lock +103 -0
  24. data/bench/blobapp/Rakefile +25 -0
  25. data/bench/blobapp/application.rb +44 -0
  26. data/bench/blobapp/config.ru +36 -0
  27. data/bench/blobapp/settings/license.key +1 -0
  28. data/bench/blobapp/settings/settings.yml +16 -0
  29. data/bench/blobapp/sources/blob_adapter.rb +71 -0
  30. data/bench/blobapp/spec/sources/blob_adapter_spec.rb +25 -0
  31. data/bench/blobapp/spec/spec_helper.rb +42 -0
  32. data/bench/lib/bench/cli.rb +16 -0
  33. data/bench/lib/bench/logging.rb +13 -0
  34. data/bench/lib/bench/mock_client.rb +41 -0
  35. data/bench/lib/bench/result.rb +50 -0
  36. data/bench/lib/bench/runner.rb +107 -0
  37. data/bench/lib/bench/session.rb +67 -0
  38. data/bench/lib/bench/statistics.rb +56 -0
  39. data/bench/lib/bench/test_data.rb +98 -0
  40. data/bench/lib/bench/timer.rb +10 -0
  41. data/bench/lib/bench/utils.rb +49 -0
  42. data/bench/lib/bench.rb +129 -0
  43. data/bench/lib/testdata/100-data.txt +148 -0
  44. data/bench/lib/testdata/5-data.txt +9 -0
  45. data/bench/lib/testdata/images/icon.ico +0 -0
  46. data/bench/lib/testdata/images/icon.png +0 -0
  47. data/bench/lib/testdata/images/loading-Landscape.png +0 -0
  48. data/bench/lib/testdata/images/loading-LandscapeLeft.png +0 -0
  49. data/bench/lib/testdata/images/loading-LandscapeRight.png +0 -0
  50. data/bench/lib/testdata/images/loading-Portrait.png +0 -0
  51. data/bench/lib/testdata/images/loading-PortraitUpsideDown.png +0 -0
  52. data/bench/lib/testdata/images/loading.png +0 -0
  53. data/bench/lib/testdata/images/loading@2x.png +0 -0
  54. data/bench/run_bench.sh +42 -0
  55. data/bench/run_blob_script.sh +3 -0
  56. data/bench/run_cud_script.sh +3 -0
  57. data/bench/run_query_md_script.sh +3 -0
  58. data/bench/run_query_only_script.sh +3 -0
  59. data/bench/run_query_script.sh +3 -0
  60. data/bench/scripts/blob_cud_script.rb +98 -0
  61. data/bench/scripts/cud_script.rb +92 -0
  62. data/bench/scripts/helpers.rb +101 -0
  63. data/bench/scripts/query_md_script.rb +45 -0
  64. data/bench/scripts/query_only_script.rb +51 -0
  65. data/bench/scripts/query_script.rb +45 -0
  66. data/bench/spec/bench_spec_helper.rb +33 -0
  67. data/bench/spec/logging_spec.rb +15 -0
  68. data/bench/spec/mock_adapter_spec.rb +61 -0
  69. data/bench/spec/mock_client_spec.rb +65 -0
  70. data/bench/spec/result_spec.rb +61 -0
  71. data/bench/spec/utils_spec.rb +36 -0
  72. data/bin/rhoconnect +34 -0
  73. data/bin/rhoconnect-setup +84 -0
  74. data/doc/async-jobs.txt +69 -0
  75. data/doc/authentication.txt +76 -0
  76. data/doc/benchmarks.txt +168 -0
  77. data/doc/blob-sync.txt +130 -0
  78. data/doc/bulk-sync.txt +102 -0
  79. data/doc/client.txt +432 -0
  80. data/doc/command-line.txt +210 -0
  81. data/doc/contributing.txt +60 -0
  82. data/doc/deploying.txt +82 -0
  83. data/doc/install.txt +28 -0
  84. data/doc/introduction.txt +20 -0
  85. data/doc/licensing.txt +18 -0
  86. data/doc/metadata.txt +458 -0
  87. data/doc/migration.txt +182 -0
  88. data/doc/public/css/print.css +29 -0
  89. data/doc/public/css/screen.css +257 -0
  90. data/doc/public/css/style.css +20 -0
  91. data/doc/push.txt +135 -0
  92. data/doc/release.txt +41 -0
  93. data/doc/rest-api.txt +367 -0
  94. data/doc/source-adapters.txt +325 -0
  95. data/doc/stats-middleware.txt +69 -0
  96. data/doc/testing.txt +222 -0
  97. data/doc/tutorial.txt +315 -0
  98. data/doc/web-console.txt +35 -0
  99. data/examples/simple/Rakefile +14 -0
  100. data/examples/simple/application.rb +27 -0
  101. data/examples/simple/config.ru +49 -0
  102. data/examples/simple/settings/license.key +1 -0
  103. data/examples/simple/settings/settings.yml +23 -0
  104. data/examples/simple/sources/sample_adapter.rb +5 -0
  105. data/examples/simple/sources/simple_adapter.rb +5 -0
  106. data/generators/rhoconnect.rb +119 -0
  107. data/generators/templates/application/Gemfile +21 -0
  108. data/generators/templates/application/Rakefile +22 -0
  109. data/generators/templates/application/application.rb +39 -0
  110. data/generators/templates/application/config.ru +36 -0
  111. data/generators/templates/application/settings/license.key +1 -0
  112. data/generators/templates/application/settings/settings.yml +14 -0
  113. data/generators/templates/application/spec/spec_helper.rb +42 -0
  114. data/generators/templates/source/source_adapter.rb +47 -0
  115. data/generators/templates/source/source_spec.rb +25 -0
  116. data/install.sh +408 -0
  117. data/installer/unix-like/rho_connect_install_checkers.rb +140 -0
  118. data/installer/unix-like/rho_connect_install_constants.rb +51 -0
  119. data/installer/unix-like/rho_connect_install_debian.rb +63 -0
  120. data/installer/unix-like/rho_connect_install_dnd.rb +58 -0
  121. data/installer/unix-like/rho_connect_install_get_params.rb +30 -0
  122. data/installer/unix-like/rho_connect_install_installers.rb +142 -0
  123. data/installer/unix-like/rho_connect_install_utilities.rb +85 -0
  124. data/installer/unix-like/rho_connect_install_yum.rb +63 -0
  125. data/installer/unix-like/rhoinstaller.rb +89 -0
  126. data/installer/utils/create_texts.rb +366 -0
  127. data/installer/utils/install_test.rb +140 -0
  128. data/installer/windows/EnvVarUpdate.nsh +328 -0
  129. data/installer/windows/ServiceLib.nsh +369 -0
  130. data/installer/windows/configUi.ini +44 -0
  131. data/installer/windows/icon.ico +0 -0
  132. data/installer/windows/rhosync.nsi +418 -0
  133. data/installer/windows/uninstall.bat +7 -0
  134. data/lib/rhoconnect/api/admin/get_api_token.rb +14 -0
  135. data/lib/rhoconnect/api/admin/get_license_info.rb +8 -0
  136. data/lib/rhoconnect/api/admin/login.rb +6 -0
  137. data/lib/rhoconnect/api/admin/reset.rb +10 -0
  138. data/lib/rhoconnect/api/admin/stats.rb +21 -0
  139. data/lib/rhoconnect/api/application/bulk_data.rb +7 -0
  140. data/lib/rhoconnect/api/application/clientcreate.rb +8 -0
  141. data/lib/rhoconnect/api/application/clientlogin.rb +6 -0
  142. data/lib/rhoconnect/api/application/clientregister.rb +6 -0
  143. data/lib/rhoconnect/api/application/clientreset.rb +6 -0
  144. data/lib/rhoconnect/api/application/query.rb +7 -0
  145. data/lib/rhoconnect/api/application/queue_updates.rb +6 -0
  146. data/lib/rhoconnect/api/application/search.rb +6 -0
  147. data/lib/rhoconnect/api/client/create_client.rb +3 -0
  148. data/lib/rhoconnect/api/client/delete_client.rb +5 -0
  149. data/lib/rhoconnect/api/client/get_client_params.rb +3 -0
  150. data/lib/rhoconnect/api/client/list_client_docs.rb +12 -0
  151. data/lib/rhoconnect/api/client/list_clients.rb +3 -0
  152. data/lib/rhoconnect/api/client/ping.rb +7 -0
  153. data/lib/rhoconnect/api/source/get_adapter.rb +3 -0
  154. data/lib/rhoconnect/api/source/get_db_doc.rb +7 -0
  155. data/lib/rhoconnect/api/source/get_source_params.rb +3 -0
  156. data/lib/rhoconnect/api/source/list_source_docs.rb +10 -0
  157. data/lib/rhoconnect/api/source/list_sources.rb +15 -0
  158. data/lib/rhoconnect/api/source/push_deletes.rb +8 -0
  159. data/lib/rhoconnect/api/source/push_objects.rb +8 -0
  160. data/lib/rhoconnect/api/source/save_adapter.rb +3 -0
  161. data/lib/rhoconnect/api/source/set_db_doc.rb +8 -0
  162. data/lib/rhoconnect/api/source/set_refresh_time.rb +8 -0
  163. data/lib/rhoconnect/api/source/upload_file.rb +4 -0
  164. data/lib/rhoconnect/api/user/create_user.rb +7 -0
  165. data/lib/rhoconnect/api/user/delete_user.rb +9 -0
  166. data/lib/rhoconnect/api/user/list_users.rb +3 -0
  167. data/lib/rhoconnect/api/user/update_user.rb +4 -0
  168. data/lib/rhoconnect/api_token.rb +19 -0
  169. data/lib/rhoconnect/app.rb +76 -0
  170. data/lib/rhoconnect/bulk_data/bulk_data.rb +88 -0
  171. data/lib/rhoconnect/bulk_data/syncdb.index.schema +4 -0
  172. data/lib/rhoconnect/bulk_data/syncdb.schema +41 -0
  173. data/lib/rhoconnect/bulk_data.rb +2 -0
  174. data/lib/rhoconnect/client.rb +96 -0
  175. data/lib/rhoconnect/client_sync.rb +412 -0
  176. data/lib/rhoconnect/console/app/helpers/auth_helper.rb +22 -0
  177. data/lib/rhoconnect/console/app/helpers/extensions.rb +19 -0
  178. data/lib/rhoconnect/console/app/helpers/helpers.rb +57 -0
  179. data/lib/rhoconnect/console/app/public/ThickBox.css +649 -0
  180. data/lib/rhoconnect/console/app/public/home.css +438 -0
  181. data/lib/rhoconnect/console/app/public/images/foot_logo_rhoconnect.png +0 -0
  182. data/lib/rhoconnect/console/app/public/images/header_halo.jpg +0 -0
  183. data/lib/rhoconnect/console/app/public/images/land_separator.gif +0 -0
  184. data/lib/rhoconnect/console/app/public/images/landing_header.jpg +0 -0
  185. data/lib/rhoconnect/console/app/public/images/logo_rhoconnect.png +0 -0
  186. data/lib/rhoconnect/console/app/public/images/rhomobile_rhohub_logo.png +0 -0
  187. data/lib/rhoconnect/console/app/public/images/tabs_separator.png +0 -0
  188. data/lib/rhoconnect/console/app/public/jqplot/excanvas.min.js +35 -0
  189. data/lib/rhoconnect/console/app/public/jqplot/jqplot.barRenderer.min.js +34 -0
  190. data/lib/rhoconnect/console/app/public/jqplot/jqplot.canvasAxisLabelRenderer.js +187 -0
  191. data/lib/rhoconnect/console/app/public/jqplot/jqplot.canvasAxisTickRenderer.js +226 -0
  192. data/lib/rhoconnect/console/app/public/jqplot/jqplot.canvasTextRenderer.js +408 -0
  193. data/lib/rhoconnect/console/app/public/jqplot/jqplot.categoryAxisRenderer.min.js +34 -0
  194. data/lib/rhoconnect/console/app/public/jqplot/jqplot.cursor.js +952 -0
  195. data/lib/rhoconnect/console/app/public/jqplot/jqplot.dateAxisRenderer.js +313 -0
  196. data/lib/rhoconnect/console/app/public/jqplot/jqplot.dateAxisRenderer.min.js +34 -0
  197. data/lib/rhoconnect/console/app/public/jqplot/jqplot.pointLabels.min.js +34 -0
  198. data/lib/rhoconnect/console/app/public/jqplot/jquery-1.4.2.min.js +154 -0
  199. data/lib/rhoconnect/console/app/public/jqplot/jquery.jqplot.min.css +1 -0
  200. data/lib/rhoconnect/console/app/public/jqplot/jquery.jqplot.min.js +34 -0
  201. data/lib/rhoconnect/console/app/public/main.css +7 -0
  202. data/lib/rhoconnect/console/app/public/reset.css +76 -0
  203. data/lib/rhoconnect/console/app/public/style.css +2201 -0
  204. data/lib/rhoconnect/console/app/public/text.txt +0 -0
  205. data/lib/rhoconnect/console/app/routes/adapter.rb +28 -0
  206. data/lib/rhoconnect/console/app/routes/auth.rb +29 -0
  207. data/lib/rhoconnect/console/app/routes/client.rb +31 -0
  208. data/lib/rhoconnect/console/app/routes/docs.rb +145 -0
  209. data/lib/rhoconnect/console/app/routes/heroku.rb +19 -0
  210. data/lib/rhoconnect/console/app/routes/home.rb +63 -0
  211. data/lib/rhoconnect/console/app/routes/timing.rb +242 -0
  212. data/lib/rhoconnect/console/app/routes/user.rb +117 -0
  213. data/lib/rhoconnect/console/app/views/adapter.erb +16 -0
  214. data/lib/rhoconnect/console/app/views/client.erb +30 -0
  215. data/lib/rhoconnect/console/app/views/content.erb +14 -0
  216. data/lib/rhoconnect/console/app/views/doc.erb +8 -0
  217. data/lib/rhoconnect/console/app/views/docdata.erb +28 -0
  218. data/lib/rhoconnect/console/app/views/docs.erb +30 -0
  219. data/lib/rhoconnect/console/app/views/edituser.erb +13 -0
  220. data/lib/rhoconnect/console/app/views/headermenu.erb +40 -0
  221. data/lib/rhoconnect/console/app/views/home.erb +24 -0
  222. data/lib/rhoconnect/console/app/views/index.erb +58 -0
  223. data/lib/rhoconnect/console/app/views/jqplot.erb +52 -0
  224. data/lib/rhoconnect/console/app/views/layout.erb +165 -0
  225. data/lib/rhoconnect/console/app/views/login.erb +26 -0
  226. data/lib/rhoconnect/console/app/views/newuser.erb +17 -0
  227. data/lib/rhoconnect/console/app/views/ping.erb +28 -0
  228. data/lib/rhoconnect/console/app/views/result.erb +11 -0
  229. data/lib/rhoconnect/console/app/views/rightboxlinks.erb +15 -0
  230. data/lib/rhoconnect/console/app/views/select_doc.erb +17 -0
  231. data/lib/rhoconnect/console/app/views/upload_doc.erb +23 -0
  232. data/lib/rhoconnect/console/app/views/user.erb +29 -0
  233. data/lib/rhoconnect/console/app/views/users.erb +12 -0
  234. data/lib/rhoconnect/console/rhoconnect_api.rb +245 -0
  235. data/lib/rhoconnect/console/server.rb +32 -0
  236. data/lib/rhoconnect/console.rb +3 -0
  237. data/lib/rhoconnect/cors.rb +229 -0
  238. data/lib/rhoconnect/credential.rb +9 -0
  239. data/lib/rhoconnect/db_adapter.rb +46 -0
  240. data/lib/rhoconnect/document.rb +49 -0
  241. data/lib/rhoconnect/dynamic_adapter.rb +91 -0
  242. data/lib/rhoconnect/generator.rb +1 -0
  243. data/lib/rhoconnect/jobs/bulk_data_job.rb +203 -0
  244. data/lib/rhoconnect/jobs/ping_job.rb +46 -0
  245. data/lib/rhoconnect/jobs/source_job.rb +16 -0
  246. data/lib/rhoconnect/license.rb +86 -0
  247. data/lib/rhoconnect/lock_ops.rb +11 -0
  248. data/lib/rhoconnect/model.rb +414 -0
  249. data/lib/rhoconnect/ping/android.rb +56 -0
  250. data/lib/rhoconnect/ping/apple.rb +52 -0
  251. data/lib/rhoconnect/ping/blackberry.rb +56 -0
  252. data/lib/rhoconnect/ping.rb +3 -0
  253. data/lib/rhoconnect/read_state.rb +31 -0
  254. data/lib/rhoconnect/rho_indifferent_access.rb +88 -0
  255. data/lib/rhoconnect/server/views/index.erb +13 -0
  256. data/lib/rhoconnect/server.rb +286 -0
  257. data/lib/rhoconnect/source.rb +289 -0
  258. data/lib/rhoconnect/source_adapter.rb +123 -0
  259. data/lib/rhoconnect/source_sync.rb +302 -0
  260. data/lib/rhoconnect/stats/middleware.rb +20 -0
  261. data/lib/rhoconnect/stats/record.rb +108 -0
  262. data/lib/rhoconnect/store.rb +232 -0
  263. data/lib/rhoconnect/tasks.rb +350 -0
  264. data/lib/rhoconnect/test_methods.rb +220 -0
  265. data/lib/rhoconnect/user.rb +95 -0
  266. data/lib/rhoconnect/version.rb +3 -0
  267. data/lib/rhoconnect/x_domain_session_wrapper.rb +53 -0
  268. data/lib/rhoconnect.rb +285 -0
  269. data/rhoconnect.gemspec +67 -0
  270. data/spec/api/admin/api_token_spec.rb +14 -0
  271. data/spec/api/admin/get_api_token_spec.rb +36 -0
  272. data/spec/api/admin/get_license_info_spec.rb +38 -0
  273. data/spec/api/admin/reset_spec.rb +22 -0
  274. data/spec/api/admin/stats_spec.rb +66 -0
  275. data/spec/api/api_helper.rb +21 -0
  276. data/spec/api/application/rhoconnect_api_spec.rb +548 -0
  277. data/spec/api/client/create_client_spec.rb +13 -0
  278. data/spec/api/client/delete_client_spec.rb +13 -0
  279. data/spec/api/client/get_client_params_spec.rb +18 -0
  280. data/spec/api/client/list_client_docs_spec.rb +32 -0
  281. data/spec/api/client/list_clients_spec.rb +22 -0
  282. data/spec/api/client/ping_spec.rb +23 -0
  283. data/spec/api/rhosync_api_spec.rb.orig +606 -0
  284. data/spec/api/source/adapter_spec.rb +29 -0
  285. data/spec/api/source/get_db_doc_spec.rb +21 -0
  286. data/spec/api/source/get_source_params_spec.rb +32 -0
  287. data/spec/api/source/list_source_docs_spec.rb +25 -0
  288. data/spec/api/source/list_sources_spec.rb +26 -0
  289. data/spec/api/source/push_deletes_spec.rb +18 -0
  290. data/spec/api/source/push_objects_spec.rb +27 -0
  291. data/spec/api/source/set_db_doc_spec.rb +19 -0
  292. data/spec/api/source/set_refresh_time_spec.rb +43 -0
  293. data/spec/api/source/upload_file_spec.rb +26 -0
  294. data/spec/api/user/create_user_spec.rb +16 -0
  295. data/spec/api/user/delete_user_spec.rb +36 -0
  296. data/spec/api/user/list_users_spec.rb +30 -0
  297. data/spec/api/user/update_user_spec.rb +31 -0
  298. data/spec/api_token_spec.rb +14 -0
  299. data/spec/app_spec.rb +18 -0
  300. data/spec/apps/emptyapp/application.rb +27 -0
  301. data/spec/apps/emptyapp/settings/license.key +1 -0
  302. data/spec/apps/emptyapp/settings/settings.yml +14 -0
  303. data/spec/apps/rhotestapp/Rakefile +1 -0
  304. data/spec/apps/rhotestapp/application.rb +19 -0
  305. data/spec/apps/rhotestapp/config.ru +1 -0
  306. data/spec/apps/rhotestapp/settings/apple_fake_cert.pem +1 -0
  307. data/spec/apps/rhotestapp/settings/license.key +1 -0
  308. data/spec/apps/rhotestapp/settings/settings.yml +36 -0
  309. data/spec/apps/rhotestapp/sources/base_adapter.rb +9 -0
  310. data/spec/apps/rhotestapp/sources/fixed_schema_adapter.rb +28 -0
  311. data/spec/apps/rhotestapp/sources/sample_adapter.rb +71 -0
  312. data/spec/apps/rhotestapp/sources/simple_adapter.rb +41 -0
  313. data/spec/apps/rhotestapp/sources/sub_adapter.rb +7 -0
  314. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem/mygem.rb +8 -0
  315. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem.rb +1 -0
  316. data/spec/bulk_data/bulk_data_spec.rb +97 -0
  317. data/spec/client_spec.rb +124 -0
  318. data/spec/client_sync_spec.rb +774 -0
  319. data/spec/doc/base.html +72 -0
  320. data/spec/doc/doc_spec.rb +376 -0
  321. data/spec/doc/footer.html +4 -0
  322. data/spec/doc/header.html +30 -0
  323. data/spec/document_spec.rb +31 -0
  324. data/spec/dynamic_adapter_spec.rb +43 -0
  325. data/spec/factories/factories.rb +17 -0
  326. data/spec/generator/generator_spec.rb +58 -0
  327. data/spec/generator/generator_spec_helper.rb +9 -0
  328. data/spec/jobs/bulk_data_job_spec.rb +125 -0
  329. data/spec/jobs/ping_job_spec.rb +102 -0
  330. data/spec/jobs/source_job_spec.rb +29 -0
  331. data/spec/license_spec.rb +66 -0
  332. data/spec/model_spec.rb +273 -0
  333. data/spec/perf/bulk_data_perf_spec.rb +32 -0
  334. data/spec/perf/perf_spec_helper.rb +50 -0
  335. data/spec/perf/store_perf_spec.rb +27 -0
  336. data/spec/ping/android_spec.rb +91 -0
  337. data/spec/ping/apple_spec.rb +70 -0
  338. data/spec/ping/blackberry_spec.rb +62 -0
  339. data/spec/read_state_spec.rb +35 -0
  340. data/spec/rhosync_spec.rb +75 -0
  341. data/spec/server/cors_spec.rb +287 -0
  342. data/spec/server/server_spec.rb +470 -0
  343. data/spec/server/x_domain_session_wrapper_spec.rb +150 -0
  344. data/spec/source_adapter_spec.rb +125 -0
  345. data/spec/source_spec.rb +114 -0
  346. data/spec/source_sync_spec.rb +328 -0
  347. data/spec/spec.opts +4 -0
  348. data/spec/spec_helper.rb +231 -0
  349. data/spec/stats/middleware_spec.rb +53 -0
  350. data/spec/stats/record_spec.rb +92 -0
  351. data/spec/store_spec.rb +251 -0
  352. data/spec/support/shared_examples.rb +168 -0
  353. data/spec/sync_states_spec.rb +72 -0
  354. data/spec/test_methods_spec.rb +134 -0
  355. data/spec/testdata/1000-data.txt +1414 -0
  356. data/spec/testdata/compressed/compress-data.txt +1 -0
  357. data/spec/testdata/upload1.txt +1 -0
  358. data/spec/testdata/upload2.txt +1 -0
  359. data/spec/user_spec.rb +139 -0
  360. data/tasks/redis.rake +206 -0
  361. metadata +706 -0
@@ -0,0 +1 @@
1
+ some compressed text
@@ -0,0 +1 @@
1
+ hello
@@ -0,0 +1 @@
1
+ world
data/spec/user_spec.rb ADDED
@@ -0,0 +1,139 @@
1
+ require File.join(File.dirname(__FILE__),'spec_helper')
2
+ require File.join(File.dirname(__FILE__), 'support', 'shared_examples')
3
+
4
+ STATS_RECORD_RESOLUTION = 2 unless defined? STATS_RECORD_RESOLUTION
5
+ STATS_RECORD_SIZE = 8 unless defined? STATS_RECORD_SIZE
6
+
7
+ describe "User" do
8
+ it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
9
+ it "should not allow user created with reserved login" do
10
+ Store.get_value('user:count').should == "1"
11
+ lambda {
12
+ User.create({:login => '__shared__'})
13
+ }.should raise_error(ArgumentError, 'Reserved user id __shared__')
14
+ Store.get_value('user:count').should == "1"
15
+ end
16
+
17
+ it "should create user with fields" do
18
+ @u.id.should == @u_fields[:login]
19
+ @u1 = User.load(@u_fields[:login])
20
+ @u1.id.should == @u.id
21
+ @u1.login.should == @u_fields[:login]
22
+ @u1.email.should == @u_fields[:email]
23
+ Store.get_value('user:count').should == "1"
24
+ end
25
+
26
+ it "should delete seats for user's clients" do
27
+ Client.create(@c_fields,{:source_name => @s_fields[:name]})
28
+ c_size = @u.clients.members.size
29
+ current = Store.get_value(License::CLIENT_DOCKEY).to_i
30
+ @u.delete
31
+ Store.get_value(License::CLIENT_DOCKEY).to_i.should == current - c_size
32
+ end
33
+
34
+ it "should create token for user" do
35
+ token = @u.create_token
36
+ token.length.should == 32
37
+ ApiToken.load(token).user_id.should == @u.id
38
+ end
39
+
40
+ it "should get token for user" do
41
+ token = @u.create_token
42
+ @u.token.value.length.should == 32
43
+ @u.token.value.should == token
44
+ end
45
+
46
+ it "should use token provisioned in settings if one" do
47
+ token = @u.create_token
48
+ token.should == Rhoconnect.api_token
49
+ ApiToken.is_exist?(token).should == true
50
+ end
51
+
52
+ it "should delete token if one exists" do
53
+ token = @u.create_token
54
+ token.should == Rhoconnect.api_token
55
+ ApiToken.is_exist?(token).should == true
56
+ token = @u.create_token
57
+ ApiToken.is_exist?(token).should == true
58
+ @u.delete
59
+ end
60
+
61
+ it "should assign token to existing user" do
62
+ token = @u.create_token
63
+ @u.token = 'foo'
64
+ @u.token.value.should == 'foo'
65
+ ApiToken.is_exist?('foo').should == true
66
+ ApiToken.is_exist?(token).should == false
67
+ end
68
+
69
+ it "should authenticate with proper credentials" do
70
+ @u1 = User.authenticate(@u_fields[:login],'testpass')
71
+ @u1.should_not be_nil
72
+ @u1.login.should == @u_fields[:login]
73
+ @u1.email.should == @u_fields[:email]
74
+ end
75
+
76
+ it "should fail to authenticate with invalid credentials" do
77
+ User.authenticate(@u_fields[:login],'wrongpass').should be_nil
78
+ end
79
+
80
+ it "should fail to authenticate with nil user" do
81
+ User.authenticate('niluser','doesnotmatter').should be_nil
82
+ end
83
+
84
+ it "should delete user and user clients" do
85
+ @c.put_data(:cd,@data)
86
+ cid = @c.id
87
+ @u.delete
88
+ Store.get_value('user:count').should == "0"
89
+ User.is_exist?(@u_fields[:login]).should == false
90
+ Client.is_exist?(cid).should == false
91
+ @c.get_data(:cd).should == {}
92
+ end
93
+
94
+ it "should delete token for user" do
95
+ token = @u.create_token
96
+ @u.delete
97
+ ApiToken.is_exist?(token).should == false
98
+ end
99
+
100
+ describe "User Stats" do
101
+
102
+ before(:all) do
103
+ Store.stub!(:lock).and_yield
104
+ end
105
+
106
+ before(:each) do
107
+ Rhoconnect::Stats::Record.reset('users')
108
+ end
109
+
110
+ after(:each) do
111
+ Rhoconnect::Stats::Record.reset('users')
112
+ end
113
+
114
+ after(:all) do
115
+ Store.flash_data('stat:users*')
116
+ end
117
+
118
+ it "should increment user stats on create" do
119
+ Time.stub!(:now).and_return(10)
120
+ Rhoconnect.stats = true
121
+ User.create({:login => 'testuser2'})
122
+ Rhoconnect::Stats::Record.range('users',0,-1).should == ["2:10"]
123
+ Store.get_value('user:count').should == "2"
124
+ Rhoconnect.stats = false
125
+ end
126
+
127
+ it "should decrement user stats on delete" do
128
+ Time.stub!(:now).and_return(10)
129
+ Rhoconnect.stats = true
130
+ u = User.create({:login => 'testuser1'})
131
+ Rhoconnect::Stats::Record.range('users',0,-1).should == ["2:10"]
132
+ u.delete
133
+ Rhoconnect::Stats::Record.range('users',0,-1).should == ["1:10"]
134
+ Store.get_value('user:count').should == "1"
135
+ Rhoconnect.stats = false
136
+ end
137
+ end
138
+ end
139
+ end
data/tasks/redis.rake ADDED
@@ -0,0 +1,206 @@
1
+ # Inspired by rabbitmq.rake the Redbox project at http://github.com/rick/redbox/tree/master
2
+ require 'fileutils'
3
+ require 'open-uri'
4
+
5
+ def windows?
6
+ RUBY_PLATFORM =~ /(win|w)32$/
7
+ end
8
+
9
+ if windows?
10
+ $redis_ver = "redis-2.2.12"
11
+ $redis_zip = "C:/#{$redis_ver}.zip"
12
+ $redis_dest = "C:/"
13
+ end
14
+
15
+ def redis_home
16
+ ENV['REDIS_HOME'] || File.join($redis_dest,$redis_ver)
17
+ end
18
+
19
+ def mk_bin_dir(bin_dir)
20
+ begin
21
+ mkdir_p bin_dir unless File.exists?(bin_dir)
22
+ rescue
23
+ puts "Can't create #{bin_dir}, maybe you need to run command as root?"
24
+ exit 1
25
+ end
26
+ end
27
+
28
+ class RedisRunner
29
+
30
+ def self.prefix
31
+ "/usr/local/"
32
+ end
33
+
34
+ def self.redisdir
35
+ "/tmp/redis/"
36
+ end
37
+
38
+ def self.redisconfdir
39
+ server_dir = File.dirname(`which redis-server`)
40
+ conf_file = "#{RedisRunner.prefix}etc/redis.conf"
41
+ unless File.exists? conf_file
42
+ conf_file = "#{server_dir}/redis.conf"
43
+ end
44
+ conf_file
45
+ end
46
+
47
+ def self.dtach_socket
48
+ '/tmp/redis.dtach'
49
+ end
50
+
51
+ # Just check for existance of dtach socket
52
+ def self.running?
53
+ File.exists? dtach_socket
54
+ end
55
+
56
+ def self.start
57
+ if windows?
58
+ puts "Starting redis in a new window..."
59
+ sh "start #{File.join(redis_home,'redis-server')} #{File.join(redis_home,'redis.conf')}" rescue
60
+ "redis-server not installed on your path, please run 'rake redis:install' first."
61
+ elsif defined?(JRUBY_VERSION)
62
+ puts "Starting redis ..."
63
+ sh "redis-server #{redisconfdir}"
64
+ else
65
+ puts 'Detach with Ctrl+\ Re-attach with rake redis:attach'
66
+ sleep 1
67
+ command = "dtach -A #{dtach_socket} redis-server #{redisconfdir}"
68
+ sh command
69
+ end
70
+ end
71
+
72
+ def self.attach
73
+ exec "dtach -a #{dtach_socket}"
74
+ end
75
+
76
+ def self.stop
77
+ Redis.new.shutdown rescue nil
78
+ end
79
+
80
+ end
81
+
82
+ namespace :redis do
83
+
84
+ desc 'About redis'
85
+ task :about do
86
+ puts "\nSee http://redis.io/ for information about redis.\n\n"
87
+ end
88
+
89
+ desc 'Start redis'
90
+ task :start do
91
+ RedisRunner.start
92
+ end
93
+
94
+ desc 'Stop redis'
95
+ task :stop do
96
+ RedisRunner.stop
97
+ end
98
+
99
+ desc 'Restart redis'
100
+ task :restart do
101
+ RedisRunner.stop
102
+ RedisRunner.start
103
+ end
104
+
105
+ desc 'Attach to redis dtach socket'
106
+ task :attach do
107
+ RedisRunner.attach
108
+ end
109
+
110
+ desc 'Install the latest verison of Redis from Github (requires git, duh)'
111
+ task :install => [:about, :download, :make] do
112
+ unless windows?
113
+ ENV['PREFIX'] and bin_dir = "#{ENV['PREFIX']}/bin" or bin_dir = "#{RedisRunner.prefix}bin"
114
+
115
+ mk_bin_dir(bin_dir)
116
+
117
+ %w(redis-benchmark redis-cli redis-server).each do |bin|
118
+ sh "cp /tmp/redis/src/#{bin} #{bin_dir}"
119
+ end
120
+
121
+ puts "Installed redis-benchmark, redis-cli and redis-server to #{bin_dir}"
122
+
123
+ ENV['PREFIX'] and conf_dir = "#{ENV['PREFIX']}/etc" or conf_dir = "#{RedisRunner.prefix}etc"
124
+ unless File.exists?("#{conf_dir}/redis.conf")
125
+ sh "mkdir #{conf_dir}" unless File.exists?("#{conf_dir}")
126
+ sh "cp /tmp/redis/redis.conf #{conf_dir}/redis.conf"
127
+ puts "Installed redis.conf to #{conf_dir} \n You should look at this file!"
128
+ end
129
+ end
130
+ end
131
+
132
+ task :make do
133
+ unless windows?
134
+ sh "cd #{RedisRunner.redisdir} && make clean"
135
+ sh "cd #{RedisRunner.redisdir} && make"
136
+ end
137
+ end
138
+
139
+ desc "Download package"
140
+ task :download do
141
+ if windows?
142
+ require 'net/http'
143
+ require 'zip/zip'
144
+ puts "Installing redis to #{redis_home}."
145
+
146
+ Net::HTTP.start("cloud.github.com") do |http|
147
+ resp = http.get("/downloads/dmajkic/redis/#{$redis_ver}-win32-win64.zip")
148
+ open($redis_zip, "wb") do |file|
149
+ file.write(resp.body)
150
+ end
151
+ end
152
+
153
+ Zip::ZipFile.open($redis_zip) do |zip_file|
154
+ zip_file.each do |f|
155
+ f_path = File.join(redis_home, f.name)
156
+ FileUtils.mkdir_p(File.dirname(f_path))
157
+ zip_file.extract(f, f_path) { true }
158
+ end
159
+ end
160
+
161
+ FileUtils.mv Dir.glob(File.join(redis_home,'32bit','*')), redis_home
162
+ FileUtils.rm_rf File.join(redis_home, '64bit')
163
+ FileUtils.rm_f $redis_zip
164
+ else
165
+ sh 'rm -rf /tmp/redis/' if File.exists?("#{RedisRunner.redisdir}")
166
+ sh 'git clone git://github.com/antirez/redis.git /tmp/redis -n'
167
+ sh "cd #{RedisRunner.redisdir} && git reset --hard && git checkout 2.2.12"
168
+ end
169
+ end
170
+
171
+ end
172
+
173
+ namespace :dtach do
174
+
175
+ desc 'About dtach'
176
+ task :about do
177
+ puts "\nSee http://dtach.sourceforge.net/ for information about dtach.\n\n"
178
+ end
179
+
180
+ desc 'Install dtach 0.8 from source'
181
+ task :install => [:about] do
182
+ unless windows?
183
+ Dir.chdir('/tmp/')
184
+ unless File.exists?('/tmp/dtach-0.8.tar.gz')
185
+ require 'net/http'
186
+
187
+ url = 'http://downloads.sourceforge.net/project/dtach/dtach/0.8/dtach-0.8.tar.gz'
188
+ open('/tmp/dtach-0.8.tar.gz', 'wb') do |file| file.write(open(url).read) end
189
+ end
190
+
191
+ unless File.directory?('/tmp/dtach-0.8')
192
+ system('tar xzf dtach-0.8.tar.gz')
193
+ end
194
+
195
+ ENV['PREFIX'] and bin_dir = "#{ENV['PREFIX']}/bin" or bin_dir = "#{RedisRunner.prefix}bin"
196
+
197
+ mk_bin_dir(bin_dir)
198
+
199
+ Dir.chdir('/tmp/dtach-0.8/')
200
+ sh 'cd /tmp/dtach-0.8/ && ./configure && make'
201
+ sh "cp /tmp/dtach-0.8/dtach #{bin_dir}"
202
+
203
+ puts "Dtach successfully installed to #{bin_dir}"
204
+ end
205
+ end
206
+ end