rhosync 2.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 (200) hide show
  1. data/CHANGELOG +5 -0
  2. data/LICENSE +674 -0
  3. data/README.md +26 -0
  4. data/Rakefile +109 -0
  5. data/bench/bench +6 -0
  6. data/bench/benchapp/Rakefile +14 -0
  7. data/bench/benchapp/application.rb +13 -0
  8. data/bench/benchapp/config.ru +32 -0
  9. data/bench/benchapp/settings/license.key +1 -0
  10. data/bench/benchapp/settings/settings.yml +18 -0
  11. data/bench/benchapp/sources/mock_adapter.rb +55 -0
  12. data/bench/benchapp/sources/queue_mock_adapter.rb +2 -0
  13. data/bench/benchapp/vendor/rhosync/lib/rhosync.rb +7 -0
  14. data/bench/lib/bench/cli.rb +16 -0
  15. data/bench/lib/bench/logging.rb +18 -0
  16. data/bench/lib/bench/mock_client.rb +41 -0
  17. data/bench/lib/bench/result.rb +50 -0
  18. data/bench/lib/bench/runner.rb +44 -0
  19. data/bench/lib/bench/session.rb +65 -0
  20. data/bench/lib/bench/statistics.rb +56 -0
  21. data/bench/lib/bench/test_data.rb +55 -0
  22. data/bench/lib/bench/timer.rb +10 -0
  23. data/bench/lib/bench/utils.rb +49 -0
  24. data/bench/lib/bench.rb +128 -0
  25. data/bench/lib/testdata/100-data.txt +148 -0
  26. data/bench/lib/testdata/5-data.txt +11 -0
  27. data/bench/scripts/cud_script.rb +77 -0
  28. data/bench/scripts/helpers.rb +101 -0
  29. data/bench/scripts/query_md_script.rb +46 -0
  30. data/bench/scripts/query_script.rb +46 -0
  31. data/bench/spec/bench_spec_helper.rb +65 -0
  32. data/bench/spec/logging_spec.rb +19 -0
  33. data/bench/spec/mock_adapter_spec.rb +61 -0
  34. data/bench/spec/mock_client_spec.rb +64 -0
  35. data/bench/spec/result_spec.rb +59 -0
  36. data/bench/spec/utils_spec.rb +35 -0
  37. data/bin/rhosync +34 -0
  38. data/doc/protocol.html +1901 -0
  39. data/doc/public/css/print.css +29 -0
  40. data/doc/public/css/screen.css +257 -0
  41. data/doc/public/css/style.css +20 -0
  42. data/examples/simple/application.rb +13 -0
  43. data/examples/simple/sources/sample_adapter.rb +5 -0
  44. data/examples/simple/sources/simple_adapter.rb +5 -0
  45. data/examples/simple/vendor/rhosync/lib/rhosync.rb +7 -0
  46. data/generators/rhosync.rb +98 -0
  47. data/generators/templates/application/Rakefile +19 -0
  48. data/generators/templates/application/application.rb +27 -0
  49. data/generators/templates/application/config.ru +33 -0
  50. data/generators/templates/application/settings/license.key +1 -0
  51. data/generators/templates/application/settings/settings.yml +14 -0
  52. data/generators/templates/source/source_adapter.rb +49 -0
  53. data/lib/rhosync/api/create_client.rb +3 -0
  54. data/lib/rhosync/api/create_user.rb +7 -0
  55. data/lib/rhosync/api/delete_client.rb +5 -0
  56. data/lib/rhosync/api/delete_user.rb +5 -0
  57. data/lib/rhosync/api/get_api_token.rb +7 -0
  58. data/lib/rhosync/api/get_client_params.rb +3 -0
  59. data/lib/rhosync/api/get_db_doc.rb +7 -0
  60. data/lib/rhosync/api/get_license_info.rb +7 -0
  61. data/lib/rhosync/api/get_source_params.rb +3 -0
  62. data/lib/rhosync/api/list_client_docs.rb +12 -0
  63. data/lib/rhosync/api/list_clients.rb +3 -0
  64. data/lib/rhosync/api/list_source_docs.rb +10 -0
  65. data/lib/rhosync/api/list_sources.rb +15 -0
  66. data/lib/rhosync/api/list_users.rb +3 -0
  67. data/lib/rhosync/api/ping.rb +7 -0
  68. data/lib/rhosync/api/push_deletes.rb +6 -0
  69. data/lib/rhosync/api/push_objects.rb +6 -0
  70. data/lib/rhosync/api/reset.rb +10 -0
  71. data/lib/rhosync/api/set_db_doc.rb +8 -0
  72. data/lib/rhosync/api/set_refresh_time.rb +8 -0
  73. data/lib/rhosync/api/update_user.rb +4 -0
  74. data/lib/rhosync/api/upload_file.rb +4 -0
  75. data/lib/rhosync/api_token.rb +19 -0
  76. data/lib/rhosync/app.rb +69 -0
  77. data/lib/rhosync/bulk_data/bulk_data.rb +75 -0
  78. data/lib/rhosync/bulk_data/syncdb.index.schema +3 -0
  79. data/lib/rhosync/bulk_data/syncdb.schema +37 -0
  80. data/lib/rhosync/bulk_data.rb +2 -0
  81. data/lib/rhosync/client.rb +74 -0
  82. data/lib/rhosync/client_sync.rb +296 -0
  83. data/lib/rhosync/console/app/helpers/auth_helper.rb +18 -0
  84. data/lib/rhosync/console/app/helpers/extensions.rb +19 -0
  85. data/lib/rhosync/console/app/helpers/helpers.rb +52 -0
  86. data/lib/rhosync/console/app/public/main.css +7 -0
  87. data/lib/rhosync/console/app/public/text.txt +0 -0
  88. data/lib/rhosync/console/app/routes/auth.rb +29 -0
  89. data/lib/rhosync/console/app/routes/client.rb +32 -0
  90. data/lib/rhosync/console/app/routes/docs.rb +84 -0
  91. data/lib/rhosync/console/app/routes/home.rb +22 -0
  92. data/lib/rhosync/console/app/routes/user.rb +63 -0
  93. data/lib/rhosync/console/app/views/client.erb +30 -0
  94. data/lib/rhosync/console/app/views/doc.erb +56 -0
  95. data/lib/rhosync/console/app/views/docs.erb +29 -0
  96. data/lib/rhosync/console/app/views/index.erb +50 -0
  97. data/lib/rhosync/console/app/views/layout.erb +12 -0
  98. data/lib/rhosync/console/app/views/newuser.erb +17 -0
  99. data/lib/rhosync/console/app/views/ping.erb +28 -0
  100. data/lib/rhosync/console/app/views/result.erb +11 -0
  101. data/lib/rhosync/console/app/views/user.erb +32 -0
  102. data/lib/rhosync/console/app/views/users.erb +14 -0
  103. data/lib/rhosync/console/rhosync_api.rb +102 -0
  104. data/lib/rhosync/console/server.rb +27 -0
  105. data/lib/rhosync/credential.rb +9 -0
  106. data/lib/rhosync/document.rb +43 -0
  107. data/lib/rhosync/indifferent_access.rb +132 -0
  108. data/lib/rhosync/jobs/bulk_data_job.rb +104 -0
  109. data/lib/rhosync/jobs/ping_job.rb +19 -0
  110. data/lib/rhosync/jobs/source_job.rb +16 -0
  111. data/lib/rhosync/license.rb +79 -0
  112. data/lib/rhosync/lock_ops.rb +11 -0
  113. data/lib/rhosync/model.rb +410 -0
  114. data/lib/rhosync/ping/blackberry.rb +55 -0
  115. data/lib/rhosync/ping/iphone.rb +44 -0
  116. data/lib/rhosync/ping.rb +2 -0
  117. data/lib/rhosync/read_state.rb +27 -0
  118. data/lib/rhosync/server/views/index.erb +12 -0
  119. data/lib/rhosync/server.rb +242 -0
  120. data/lib/rhosync/source.rb +112 -0
  121. data/lib/rhosync/source_adapter.rb +95 -0
  122. data/lib/rhosync/source_sync.rb +245 -0
  123. data/lib/rhosync/store.rb +199 -0
  124. data/lib/rhosync/tasks.rb +151 -0
  125. data/lib/rhosync/user.rb +83 -0
  126. data/lib/rhosync/version.rb +3 -0
  127. data/lib/rhosync.rb +251 -0
  128. data/spec/api/api_helper.rb +44 -0
  129. data/spec/api/create_client_spec.rb +13 -0
  130. data/spec/api/create_user_spec.rb +16 -0
  131. data/spec/api/delete_client_spec.rb +13 -0
  132. data/spec/api/delete_user_spec.rb +18 -0
  133. data/spec/api/get_api_token_spec.rb +25 -0
  134. data/spec/api/get_client_params_spec.rb +18 -0
  135. data/spec/api/get_db_doc_spec.rb +21 -0
  136. data/spec/api/get_license_info_spec.rb +16 -0
  137. data/spec/api/get_source_params_spec.rb +26 -0
  138. data/spec/api/list_client_docs_spec.rb +33 -0
  139. data/spec/api/list_clients_spec.rb +23 -0
  140. data/spec/api/list_source_docs_spec.rb +26 -0
  141. data/spec/api/list_sources_spec.rb +27 -0
  142. data/spec/api/list_users_spec.rb +21 -0
  143. data/spec/api/ping_spec.rb +24 -0
  144. data/spec/api/push_deletes_spec.rb +16 -0
  145. data/spec/api/push_objects_spec.rb +27 -0
  146. data/spec/api/reset_spec.rb +22 -0
  147. data/spec/api/set_db_doc_spec.rb +20 -0
  148. data/spec/api/set_refresh_time_spec.rb +43 -0
  149. data/spec/api/update_user_spec.rb +31 -0
  150. data/spec/api/upload_file_spec.rb +26 -0
  151. data/spec/api_token_spec.rb +13 -0
  152. data/spec/app_spec.rb +20 -0
  153. data/spec/apps/rhotestapp/Rakefile +1 -0
  154. data/spec/apps/rhotestapp/application.rb +16 -0
  155. data/spec/apps/rhotestapp/config.ru +1 -0
  156. data/spec/apps/rhotestapp/settings/apple_fake_cert.pem +1 -0
  157. data/spec/apps/rhotestapp/settings/license.key +1 -0
  158. data/spec/apps/rhotestapp/settings/settings.yml +23 -0
  159. data/spec/apps/rhotestapp/sources/base_adapter.rb +9 -0
  160. data/spec/apps/rhotestapp/sources/sample_adapter.rb +66 -0
  161. data/spec/apps/rhotestapp/sources/simple_adapter.rb +39 -0
  162. data/spec/apps/rhotestapp/sources/sub_adapter.rb +7 -0
  163. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem/mygem.rb +8 -0
  164. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem.rb +1 -0
  165. data/spec/bulk_data/bulk_data_spec.rb +79 -0
  166. data/spec/client_spec.rb +58 -0
  167. data/spec/client_sync_spec.rb +377 -0
  168. data/spec/doc/base.html +72 -0
  169. data/spec/doc/doc_spec.rb +303 -0
  170. data/spec/doc/footer.html +4 -0
  171. data/spec/doc/header.html +30 -0
  172. data/spec/document_spec.rb +27 -0
  173. data/spec/generator/generator_spec.rb +53 -0
  174. data/spec/generator/generator_spec_helper.rb +8 -0
  175. data/spec/jobs/bulk_data_job_spec.rb +76 -0
  176. data/spec/jobs/ping_job_spec.rb +26 -0
  177. data/spec/jobs/source_job_spec.rb +25 -0
  178. data/spec/license_spec.rb +48 -0
  179. data/spec/model_spec.rb +269 -0
  180. data/spec/perf/bulk_data_perf_spec.rb +33 -0
  181. data/spec/perf/perf_spec_helper.rb +51 -0
  182. data/spec/perf/store_perf_spec.rb +28 -0
  183. data/spec/ping/blackberry_spec.rb +62 -0
  184. data/spec/ping/iphone_spec.rb +50 -0
  185. data/spec/read_state_spec.rb +25 -0
  186. data/spec/rhosync_spec.rb +43 -0
  187. data/spec/server/server_spec.rb +341 -0
  188. data/spec/source_adapter_spec.rb +114 -0
  189. data/spec/source_spec.rb +77 -0
  190. data/spec/source_sync_spec.rb +248 -0
  191. data/spec/spec_helper.rb +240 -0
  192. data/spec/store_spec.rb +149 -0
  193. data/spec/sync_states_spec.rb +101 -0
  194. data/spec/testdata/1000-data.txt +1414 -0
  195. data/spec/testdata/compressed/compress-data.txt +1 -0
  196. data/spec/testdata/upload1.txt +1 -0
  197. data/spec/testdata/upload2.txt +1 -0
  198. data/spec/user_spec.rb +79 -0
  199. data/tasks/redis.rake +134 -0
  200. metadata +545 -0
@@ -0,0 +1,49 @@
1
+ module Bench
2
+ module Utils
3
+ include Logging
4
+
5
+ def compare(name1,s1,name2,s2)
6
+ r1 = diff([],name1,s1,name2,s2)
7
+ r2 = diff([],name2,s2,name1,s1)
8
+ r1.size > r2.size ? r1 : r2
9
+ end
10
+
11
+ def diff(res,lname,lvalue,rname,rvalue,path=[])
12
+
13
+ return res if lvalue == rvalue
14
+
15
+ if lvalue.is_a?(Array) and rvalue
16
+ lvalue.each_index do |index|
17
+ p = Array.new(path)
18
+ p << index
19
+ diff(res,lname,lvalue[index],rname,rvalue.at(index),p)
20
+ end
21
+ elsif lvalue.is_a?(Hash) and rvalue
22
+ lvalue.each do |key,value|
23
+ p = Array.new(path)
24
+ p << key
25
+ diff(res,lname,value,rname,rvalue[key],p)
26
+ end
27
+ else
28
+ res << {:path=>path,lname=>lvalue,rname=>rvalue}
29
+ end
30
+
31
+ res
32
+ end
33
+
34
+ def compare_and_log(expected,actual,caller)
35
+ if expected != actual
36
+ logger.error "#{log_prefix} Verify error at: " + caller
37
+ logger.error "#{log_prefix} Message diff: "
38
+ compare(:expected,expected,:actual,actual).each do |diff|
39
+ logger.error "#{log_prefix} Path: #{diff[:path].join('/')}"
40
+ logger.error "#{log_prefix} Expected: #{diff[:expected].inspect}"
41
+ logger.error "#{log_prefix} Actual: #{diff[:actual].inspect}"
42
+ end
43
+ 1
44
+ else
45
+ 0
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,128 @@
1
+ #gem 'sevenwire-rest-client'
2
+ require 'rest_client'
3
+ require 'log4r'
4
+ require 'json'
5
+ require 'mechanize'
6
+ require 'zip/zip'
7
+ $:.unshift File.dirname(__FILE__)
8
+ require 'bench/timer'
9
+ require 'bench/logging'
10
+ require 'bench/utils'
11
+ require 'bench/result'
12
+ require 'bench/session'
13
+ require 'bench/runner'
14
+ require 'bench/statistics'
15
+ require 'bench/cli'
16
+ require 'bench/test_data'
17
+ $:.unshift File.join(File.dirname(__FILE__),'..')
18
+ require 'scripts/helpers'
19
+
20
+ # Inspired by Trample: http://github.com/jamesgolick/trample
21
+
22
+ module Bench
23
+ class << self
24
+ include Logging
25
+ include TestData
26
+ include Utils
27
+
28
+ attr_accessor :concurrency, :iterations, :admin_login
29
+ attr_accessor :admin_password, :user_name, :app_name
30
+ attr_accessor :password, :host, :base_url, :token
31
+ attr_accessor :total_time, :sessions, :verify_error
32
+
33
+ def config
34
+ begin
35
+ @verify_error ||= false
36
+ yield self
37
+ rescue Exception => e
38
+ puts "error in config: #{e.inspect}"
39
+ raise e
40
+ end
41
+ end
42
+
43
+ def get_server_state(doc)
44
+ token = get_token
45
+ @body = RestClient.post("#{@host}/api/get_db_doc",
46
+ {:api_token => token, :doc => doc}.to_json, :content_type => :json)
47
+ JSON.parse(@body.to_s)
48
+ end
49
+
50
+ def reset_app
51
+ Mechanize.new.post("#{@host}/api/reset",:api_token => get_token)
52
+ end
53
+
54
+ def create_user
55
+ token = get_token
56
+ RestClient.post("#{@host}/api/create_user",
57
+ {:api_token => token, :app_name => @app_name,
58
+ :attributes => {:login => @user_name, :password => @password}}.to_json,
59
+ :content_type => :json)
60
+ end
61
+
62
+ def set_server_state(doc,data)
63
+ token = get_token
64
+ RestClient.post("#{@host}/api/set_db_doc",
65
+ {:api_token => token, :doc => doc, :data => data}.to_json, :content_type => :json)
66
+ end
67
+
68
+ def reset_refresh_time(source_name,poll_interval=nil)
69
+ token = get_token
70
+ RestClient.post("#{@host}/api/set_refresh_time",
71
+ {:api_token => token, :source_name => source_name,
72
+ :app_name => @app_name, :user_name => @user_name,
73
+ :poll_interval => poll_interval}.to_json,
74
+ :content_type => :json)
75
+ end
76
+
77
+ def get_token
78
+ unless @token
79
+ res = RestClient.post("#{@host}/login",
80
+ {:login => @admin_login, :password => @admin_password}.to_json, :content_type => :json)
81
+ @token = RestClient.post("#{@host}/api/get_api_token",'',{:cookies => res.cookies})
82
+ end
83
+ @token
84
+ end
85
+
86
+ def get_test_server
87
+ load_settings(File.join(File.dirname(__FILE__),'..',@app_name,'settings','settings.yml'))
88
+ @base_url = $settings[:development][:syncserver].gsub(/\/$/,'')
89
+ uri = URI.parse(@base_url)
90
+ port = (uri.port and uri.port != 80) ? ":"+uri.port.to_s : ""
91
+ @host = "#{uri.scheme}://#{uri.host}#{port}"
92
+ puts "Test server is #{@host}..."
93
+ end
94
+
95
+ def test(&block)
96
+ Runner.new.test(@concurrency,@iterations,&block)
97
+ end
98
+
99
+ def verify(&block)
100
+ yield self,@sessions
101
+ end
102
+
103
+ # TODO: These functions are duplicates!
104
+
105
+ def compress(path)
106
+ path.sub!(%r[/$],'')
107
+ archive = File.join(path,File.basename(path))+'.zip'
108
+ FileUtils.rm archive, :force=>true
109
+ Zip::ZipFile.open(archive, 'w') do |zipfile|
110
+ Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file|
111
+ zipfile.add(file.sub(path+'/',''),file)
112
+ end
113
+ end
114
+ archive
115
+ end
116
+
117
+ # TODO: Share this code with the framework Rho class
118
+ def load_settings(file)
119
+ begin
120
+ $settings = YAML.load_file(file)
121
+ rescue Exception => e
122
+ puts "Error opening settings file #{file}: #{e}."
123
+ puts e.backtrace.join("\n")
124
+ raise e
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,148 @@
1
+ {i"%c08391d273254acda969beca963b2cbc{ "
2
+ Jairo" Phone1"697.236.6498" Company"Lakin and Sons" mock_id"%c08391d273254acda969beca963b2cbc"
3
+ Email"stone_quigley@gmail.com"%d700d3dad9cb4bfab569a444a9410f3a{ @"
4
+ Zieme@
5
+ "General Mechanic@ "
6
+ "Production Mechanic@ "
7
+ Amely@"108.018.6096 x4892@"!Pfeffer, Carroll and Lockman@"%29247590f6754aaaabf1d9db8beffa0b@"lawrence_dibbert@gmail.com"%59669d5da6c746d886544152b3e39577{ @"
8
+ Price@
9
+ "IT Analyst@ " Anthony@"449-900-6658 x047@""Leffler, Kilback and Homenick@"%59669d5da6c746d886544152b3e39577@"winston@yahoo.com"%5f815f4ccd8546fb8fdd53a09baaf8f0{ @"Halvorson@
10
+ "Quality Assurance Worker@ " Cathryn@"(851)759-4738 x95349@"Carroll LLC@"%5f815f4ccd8546fb8fdd53a09baaf8f0@"elenor@gmail.com"%94f40e319ebb4e88bf764e464349742f{ @" Cronin@
11
+ "Banking Technician@ "
12
+ Anais@"1-657-604-9806@"Reichert-Miller@"%94f40e319ebb4e88bf764e464349742f@"clemmie_hilll@yahoo.com"%e3db716887d14cd89a57d5c12490d57f{ @"Hodkiewicz@
13
+ "Advertising Superintendent@ " Izaiah@"(883)720-9926 x501@"Bartoletti-Hayes@"%e3db716887d14cd89a57d5c12490d57f@"aleen@yahoo.com"%f48556f5a0d44b59bafe8d89a9e7ccfc{ @" Ryan@
14
+ "Software Sales@ " Briana@"998-206-2552@"Klein-Zemlak@"%f48556f5a0d44b59bafe8d89a9e7ccfc@" sherwood.schinner@yahoo.com"%ad3fcad52002417dae5fdd29152262e7{ @" Mraz@
15
+ "Computer Superintendent@ " Curtis@"992-665-1817 x4787@"Lemke LLC@"%ad3fcad52002417dae5fdd29152262e7@"virgil@yahoo.com"%8afe2fdc114546128d1a9448c909ade1{ @" Durgan@
16
+ "Advertising Recruiter@ " Reva@"(140)525-3753@"Funk-Hintz@"%8afe2fdc114546128d1a9448c909ade1@"amir_renner@yahoo.com"%147184c0d468478f8a918e8a2eb2c00d{ @"O'Connell@
17
+ "Head Technician@ "
18
+ "Environmental Technician@ " Keaton@"922.367.5492 x44104@"Steuber, Orn and Conn@"%b59e4095d4024b7b8c53779c19fb365f@"darion.hand@yahoo.com"%114d5402385447ea831dc7c271f40cba{ @" Kessler@
19
+ "Assistant Superintendent@ "
20
+ Sarai@"(138)199-0332 x486@"Tillman-Prosacco@"%114d5402385447ea831dc7c271f40cba@"issac@yahoo.com"%6e2b6e694d0b425fbb83655ad1f57cfb{ @" Hudson@
21
+ "Laboratory Analyst@ " Diamond@"462.945.1432@"Boyle LLC@"%6e2b6e694d0b425fbb83655ad1f57cfb@"noah_okon@hotmail.com"%eb1b92d1f08844c486f2cd6f51166cad{ @"
22
+ Kutch@
23
+ "Senior Director@ "
24
+ Elyse@"1-206-345-6753 x8321@"Rohan-Powlowski@"%eb1b92d1f08844c486f2cd6f51166cad@"$kaitlyn_oberbrunner@hotmail.com"%e3a5ea4393124d53b25642db0d4f1d10{ @" Kuhn@
25
+ "Computer Foreman@ "
26
+ Trace@"1-195-038-8248 x176@"Bins-Pollich@"%e3a5ea4393124d53b25642db0d4f1d10@"jonathon.johns@hotmail.com"%003a882e004a4e85a8d3907341d270f6{ @" Klocko@
27
+ "Business Systems Recruiter@ " Virgil@"013.811.2613@"Zulauf, Zieme and Hilpert@"%003a882e004a4e85a8d3907341d270f6@"cayla_howell@gmail.com"%c10b369f628f44b39fa107783f0b0d2a{ @"
28
+ Weber@
29
+ "Senior Intern@ " Cortney@"(825)485-4328 x0372@"!Renner, Halvorson and Beatty@"%c10b369f628f44b39fa107783f0b0d2a@"maude@gmail.com"%89cf22da94c342db8419baeea8ed1732{ @" Walker@
30
+ "Medical Foreman@ " Eliane@"(048)916-0870 x354@"Mueller Group@"%89cf22da94c342db8419baeea8ed1732@"maureen@gmail.com"%b3f460a48f6a4c2c931b7c791cfc46a5{ @"
31
+ "Production Supervisor@ " Karlee@"011.847.2219 x94537@"Swaniawski Inc@"%b3f460a48f6a4c2c931b7c791cfc46a5@"mike.tromp@hotmail.com"%40bd6ca50b4e46ca94fb635f0690175f{ @"
32
+ Moore@
33
+ "Computer Engineer@ " Newell@"637-104-0330@"Cole-Kuhic@"%40bd6ca50b4e46ca94fb635f0690175f@"elmer@hotmail.com"%d3cc69213354468bb41d13482de24b00{ @" Jacobs@
34
+ "Computer Clerk@ " Khalid@"547.229.1460 x3883@"Nader Inc@"%d3cc69213354468bb41d13482de24b00@"ruthie_bayer@yahoo.com"%575618451bcd4cfeafd6ed84b943d693{ @"
35
+ "Software Technician@ " Carolyn@"920.318.5572 x19291@"Bernhard, Renner and Blick@"%575618451bcd4cfeafd6ed84b943d693@"benedict.purdy@hotmail.com"%9ee3605d57574d83b40f05285cec842f{ @"
36
+ Fahey@
37
+ "Account Manager@ " Maryam@"793.268.6813@"$Hermiston, Parisian and Monahan@"%9ee3605d57574d83b40f05285cec842f@"zelda.schaefer@yahoo.com"%3d62f8faff1c40f4909744b76c2a3553{ @"Buckridge@
38
+ "Environmental Recruiter@ "
39
+ "Environmental Estimator@ "
40
+ Ricky@"(340)038-5363@"Kautzer-Reilly@"%5ab0df9d5c684b2dbc2c9a6e27d014c6@"!keagan.buckridge@hotmail.com"%8dbba6c19cf94cf6b6beb0d1317f004d{ @"
41
+ Wolff@
42
+ "Environmental Supervisor@ " Gabriel@"1-724-037-7432 x56679@"Robel-Littel@"%8dbba6c19cf94cf6b6beb0d1317f004d@"adriana@yahoo.com"%2e6c0336f122470a9a96683160dcc9a7{ @" Bode@
43
+ "Administrative Sales@ " Ruby@"075.155.4874 x7247@"Huels Inc@"%2e6c0336f122470a9a96683160dcc9a7@"kylee@hotmail.com"%fdc22cf713d6478dad676faff5227e75{ @" Hermann@
44
+ "Head Helper@ "
45
+ "Administrative Worker@ "Celestine@"978.385.5848 x40815@"#Bins, Mosciski and Greenfelder@"%fd624cb38fda4c50bd8e73e8235bf593@"kieran@yahoo.com"%68b1dff75cfb42f7b246962101c9f1fb{ @" Lowe@
46
+ "%Quality Assurance Superintendent@ " Hillard@"169-059-1767@"Ritchie Group@"%68b1dff75cfb42f7b246962101c9f1fb@"selina@gmail.com"%7239cb4e983c4d2bb15d6d7641d5e674{ @" Streich@
47
+ "Senior Foreman@ " Katelyn@"546-882-7260 x300@"Yundt, Wuckert and Brakus@"%7239cb4e983c4d2bb15d6d7641d5e674@"esteban@yahoo.com"%9836b54de3d7481c9e56ab9a7a629550{ @"Morissette@
48
+ "Senior Accountant@ " Estella@"378.589.0480@""Homenick, Kassulke and Hessel@"%9836b54de3d7481c9e56ab9a7a629550@"phoebe@gmail.com"%2d1dfeac65034bd8a1f2b2b5a325bf90{ @"
49
+ "Medical Intern@ "Nicolette@"539-835-1470@"Marvin-Wunsch@"%2d1dfeac65034bd8a1f2b2b5a325bf90@" moriah_prohaska@hotmail.com"%2936b3ac3ee5446785356472f5258294{ @" Pfeffer@
50
+ "Distribution Recruiter@ "
51
+ "Software Executive@ "
52
+ Molly@"1-335-818-1533@"Weimann-O'Conner@"%b3f232e36b614191a859e325978d6429@"vivien.maggio@yahoo.com"%ee904f25e7e14ef99ae67d54113e4ad8{ @"Heathcote@
53
+ "Business Systems Worker@ "
54
+ Naomi@"753.363.0014@""Towne, Runolfsson and Okuneva@"%ee904f25e7e14ef99ae67d54113e4ad8@"kirsten@gmail.com"%6757eb3520644a4690a5bd9b199540a1{ @" Labadie@
55
+ "(Environmental Production Supervisor@ " Crystel@"021.780.4609 x47390@"%VonRueden, Lubowitz and Bogisich@"%6757eb3520644a4690a5bd9b199540a1@"cheyanne.lind@gmail.com"%8cbb0282ca834eaf9d497ea283d7e72c{ @" Schmitt@
56
+ "Production Officer@ "
57
+ "Technical Technician@ " Kale@"178-707-7142@"Haag Group@"%1a2fbceff2e14d79befe366aa55a9313@"velda@yahoo.com"%61c848e2babb4a43a39d64ceb52a4a61{ @" D'Amore@
58
+ "Laboratory Clerk@ "
59
+ Jayme@"(710)546-3261@"Quigley and Sons@"%61c848e2babb4a43a39d64ceb52a4a61@"brenna.rath@yahoo.com"%d893299dbcae406f94d5016a03c88b28{ @" Howe@
60
+ "Quality Assurance Sales@ "
61
+ Diana@"821.431.9270@"Powlowski-Fritsch@"%d893299dbcae406f94d5016a03c88b28@"jairo.nicolas@yahoo.com"%7db54de7cba64988923a1b2b87d8d32f{ @" Hamill@
62
+ "Computer Technologist@ " Kaitlin@"568-993-8201 x61082@"Bergnaum, Klein and Larkin@"%7db54de7cba64988923a1b2b87d8d32f@"may@yahoo.com"%b4811acda932474db3951eb518e3c5bc{ @" Maggio@
63
+ "General Planner@ " Ramiro@"(151)332-7848 x40109@"Glover Inc@"%b4811acda932474db3951eb518e3c5bc@"andreanne@hotmail.com"%3ffc68c35d1d41df8da8499e16713699{ @"
64
+ "Head Sales@ "
65
+ Laura@"(259)896-3850 x0309@"Emard and Sons@"%3ffc68c35d1d41df8da8499e16713699@"erik@gmail.com"%1a811060e3624799a40d00f8428e48d4{ @"
66
+ Kunde@
67
+ "Production Clerk@ " Melvina@"1-895-950-4971@"!Haley, Cummerata and Goldner@"%1a811060e3624799a40d00f8428e48d4@"mark.kuhlman@yahoo.com"%8c694501afa14d679f4abd84e32c1a97{ @"
68
+ "Production Worker@ "Cassandra@"1-985-386-5359@"$Steuber, Denesik and Schowalter@"%8c694501afa14d679f4abd84e32c1a97@"mariah_mayert@hotmail.com"%a2f831ea41814501929df177f400ae56{ @"Cummerata@
69
+ "Distribution Scientist@ "
70
+ Baron@"1-683-024-9321@"Gutkowski LLC@"%a2f831ea41814501929df177f400ae56@"cecilia@hotmail.com"%f91562cbcc8349ac951e4513ac2ae0ce{ @"Heidenreich@
71
+ "!Administrative Plant Manager@ "
72
+ "$Business Systems Superintendent@ " Melany@"064.188.5891 x968@" Wilkinson, Jacobi and Bosco@"%b1fddefda07f4525841ad8b038e76a30@"larry@hotmail.com"%053e2c7ca3034a55921bc6daf60b9a1a{ @" Lowe@
73
+ "Assistant Intern@ " Kendra@"890-184-8673 x4198@"Wolff LLC@"%053e2c7ca3034a55921bc6daf60b9a1a@" cletus_konopelski@yahoo.com"%0ae90d4403fc4700824905df3a37eb1c{ @" Weimann@
74
+ "Financial Recruiter@ "
75
+ Devon@"1-731-894-6556 x046@"Stark, Krajcik and Strosin@"%0ae90d4403fc4700824905df3a37eb1c@"orval@hotmail.com"%ecf34a4626de4f179962295b21212d80{ @" Leffler@
76
+ "General Engineer@ " Jettie@"090-951-5426@"Mertz Inc@"%ecf34a4626de4f179962295b21212d80@"audra@yahoo.com"%ba5a858326954d5a9cbd9d6b38bb0c74{ @" Treutel@
77
+ "Financial Accountant@ "
78
+ Jamar@"1-081-970-6940@"Grady-Schuppe@"%ba5a858326954d5a9cbd9d6b38bb0c74@"abigail@hotmail.com"%23e1a729d9a44154af47ede1c59401b7{ @"
79
+ O'Kon@
80
+ "Environmental Officer@ " Cali@"1-873-569-4080 x32697@"Rowe, Homenick and Boehm@"%23e1a729d9a44154af47ede1c59401b7@"nona@hotmail.com"%142d35cda45b432e9c163b5bc56456ae{ @"
81
+ "General Sales@ " Cruz@"723-073-9751 x0796@"Weimann-Terry@"%142d35cda45b432e9c163b5bc56456ae@"anthony@gmail.com"%6f3d68974bbf487180733ecdc343e3f9{ @" Volkman@
82
+ "Account Vice President@ " Korbin@"051.835.8273 x949@"Vandervort-Mertz@"%6f3d68974bbf487180733ecdc343e3f9@"brionna_miller@hotmail.com"%c900681c5b7144efa8e1628a46a3da18{ @" Huel@
83
+ "Quality Assurance Buyer@ "
84
+ Laura@"1-597-568-5049 x030@"Mraz, Ruecker and Quigley@"%c900681c5b7144efa8e1628a46a3da18@"destini@hotmail.com"%2e29702dddfd4c52af3a6b98779fae35{ @" Schmitt@
85
+ "Technical Vice President@ " Jamaal@"(623)162-4944 x58440@"Shields, Block and Lehner@"%2e29702dddfd4c52af3a6b98779fae35@"demarcus@gmail.com"%8dce66fd8bdf49dbbe355c7f51414c12{ @"
86
+ Blick@
87
+ "Assistant Accountant@ " Jaycee@"(145)183-8650 x40103@"Bogisich and Sons@"%8dce66fd8bdf49dbbe355c7f51414c12@"oral_wyman@gmail.com"%480612d511694c868ec2667a0cf9e600{ @"Hermiston@
88
+ ""Business Systems Technologist@ "
89
+ Jayda@"859.182.5818 x8059@"Langworth Inc@"%480612d511694c868ec2667a0cf9e600@"sherman@hotmail.com"%1f9356e0e3274e2ab5f3873b1476f41e{ @"McLaughlin@
90
+ "Maintenance Clerk@ " Devonte@"060-037-1615 x134@"#Dietrich, Greenholt and Reilly@"%1f9356e0e3274e2ab5f3873b1476f41e@"beth@hotmail.com"%e44b1458c24b449ab6ce9238010c92c9{ @" Cronin@
91
+ "Medical Nurse@ " Darrel@"(885)689-0185@"Rippin-Purdy@"%e44b1458c24b449ab6ce9238010c92c9@"savannah@yahoo.com"%dc09a77040f04afd82ca282ac94aaa93{ @" Bins@
92
+ "Chief Chef@ " Alva@"281-100-2650@"Bailey-Eichmann@"%dc09a77040f04afd82ca282ac94aaa93@"juwan_herman@gmail.com"%071e6d0df05a46419490d0b69bf1629f{ @" Walter@
93
+ "Account Technician@ "Pat@"978-131-1170 x029@""Beahan, Daugherty and Johnson@"%071e6d0df05a46419490d0b69bf1629f@"herman@gmail.com"%867e6c99fa044be0bf6d666729a2efb8{ @"
94
+ Hills@
95
+ ""Administrative Superintendent@ "
96
+ "Laboratory Director@ " Ebba@"(089)520-0655 x154@"Hilll LLC@"%d4285b651f4e4f58bbfa4ab3567ee474@"amari@gmail.com"%b7c5acd0f7a54c31bdda56e227b09acc{ @"Cartwright@
97
+ "Maintenance Mechanic@ " Sallie@"(101)460-9042@"Abshire and Sons@"%b7c5acd0f7a54c31bdda56e227b09acc@"raheem@gmail.com"%2735244b97274cb59e0ad68717c8c7d2{ @" Kautzer@
98
+ "Financial Engineer@ " Junior@"(755)939-4108@"Corwin-Koepp@"%2735244b97274cb59e0ad68717c8c7d2@"elenor@hotmail.com"%df31f493eb524d6d811c2aa74bde699e{ @" Rempel@
99
+ "Maintenance Buyer@ " Elmira@"107.903.0257 x06716@"Rosenbaum LLC@"%df31f493eb524d6d811c2aa74bde699e@"lorenz_rohan@hotmail.com"%df0c18aa41a640389b8ee655f6d24c52{ @"
100
+ "Technical Clerk@ "
101
+ Laura@"421-131-1237@"Kuphal Inc@"%df0c18aa41a640389b8ee655f6d24c52@"jeremie_ward@yahoo.com"%b8a0a08cd4404790a97c42d186853ded{ @" Mohr@
102
+ "Technical Estimator@ "Toy@"498-701-9786@"Spinka Group@"%b8a0a08cd4404790a97c42d186853ded@"jonas@gmail.com"%daf1d01a834946b6b6399075897064ac{ @" Strosin@
103
+ "&Advertising Production Supervisor@ " Colton@"1-645-472-6399@"Tromp, Carroll and Torp@"%daf1d01a834946b6b6399075897064ac@"amely@gmail.com"%23729792791645e7b61dfec3077b4df8{ @"Aufderhar@
104
+ "Electronics Superintendent@ "
105
+ Dario@"292.170.8017@"Bernhard-Ullrich@"%23729792791645e7b61dfec3077b4df8@"mike@yahoo.com"%d4f59bf957544f448c8d8d90f19db2ad{ @"
106
+ Kunze@
107
+ "Advertising Recruiter@ " Kenyon@"329.872.9009 x238@"Jakubowski-Pfeffer@"%d4f59bf957544f448c8d8d90f19db2ad@"buster@hotmail.com"%f7cadc51d6994ae1aefbb75712f8d619{ @"
108
+ Swift@
109
+ "Environmental Chef@ " Carmen@"155-356-7364 x3428@"$Runolfsdottir, King and Goldner@"%f7cadc51d6994ae1aefbb75712f8d619@"arvel.west@hotmail.com"%1c1395556a1344b49fab4cf14ea592ff{ @" Turner@
110
+ "Environmental Accountant@ " Thad@"1-972-620-8412 x8494@""Shields, Pollich and Tremblay@"%1c1395556a1344b49fab4cf14ea592ff@"jasmin@gmail.com"%000d766aa6ab4415a65ce5f198fb062c{ @"Runolfsdottir@
111
+ "Production Mechanic@ "
112
+ Sasha@"081-776-7716@"Schulist Inc@"%000d766aa6ab4415a65ce5f198fb062c@"winona_rogahn@yahoo.com"%34c25a1d475a497c8c10cb8a4bf6e460{ @" Littel@
113
+ "Banking Supervisor@ "
114
+ Nella@"755-904-0756@" Beier, Mills and Bartoletti@"%34c25a1d475a497c8c10cb8a4bf6e460@"consuelo@yahoo.com"%8abb9fc4c8a94301b643178a0a4d59dc{ @" Cassin@
115
+ "Chief Recruiter@ " Kole@"(565)707-1120 x87431@"Konopelski Inc@"%8abb9fc4c8a94301b643178a0a4d59dc@"justus_corkery@gmail.com"%85d465cee78a4ec681fa12510db342e7{ @"
116
+ Kutch@
117
+ "Computer Accountant@ " Julius@"1-860-883-0880@" Lehner, Kiehn and Armstrong@"%85d465cee78a4ec681fa12510db342e7@"maci@yahoo.com"%187ed16356eb4c0f8828feb9a30adfa3{ @"
118
+ White@
119
+ "Software Intern@ "
120
+ Sandy@"(179)705-5606@"Padberg Inc@"%187ed16356eb4c0f8828feb9a30adfa3@"beryl@yahoo.com"%e5bcd879d8ad4e62b854f86c4d59036c{ @"Wintheiser@
121
+ "Medical Superintendent@ "
122
+ Green@"134-871-5965@"#Walter, Satterfield and Erdman@"%e5bcd879d8ad4e62b854f86c4d59036c@"elza_nicolas@gmail.com"%8be397a0df604e33b8aa38f39d7e92d2{ @" Gaylord@
123
+ "Advertising Engineer@ " Annabel@"(625)111-7197 x2321@"McLaughlin-Paucek@"%8be397a0df604e33b8aa38f39d7e92d2@"cydney.bailey@gmail.com"%27c57ecd137b4b319675e6829088b5da{ @" Langosh@
124
+ "Medical Technician@ " Wilson@"(974)391-2042 x47203@"Funk and Sons@"%27c57ecd137b4b319675e6829088b5da@"danial.hane@hotmail.com"%1ba633ee3b524e8e815f429f6e2614fb{ @" Hirthe@
125
+ "Senior Helper@ "
126
+ Susie@"(287)013-3449 x81885@"Kuhn and Sons@"%1ba633ee3b524e8e815f429f6e2614fb@"sydney@gmail.com"%6d81d5792f874e139ac6385e64306ea1{ @"
127
+ Swift@
128
+ "Computer Recruiter@ " Idella@"(889)675-8534 x78991@"Murray-Rice@"%6d81d5792f874e139ac6385e64306ea1@"cristina.windler@yahoo.com"%de20f7825aae4c08af2625bc04337e7f{ @"
129
+ Mertz@
130
+ "Business Systems Clerk@ " Drew@"140.008.9955 x012@"Jacobi and Sons@"%de20f7825aae4c08af2625bc04337e7f@"dominic@yahoo.com"%88a172f48e354c90a0c4871c5e4927eb{ @" Dach@
131
+ "Distribution Engineer@ "Ida@"054-571-7862@"Monahan Group@"%88a172f48e354c90a0c4871c5e4927eb@"monica@yahoo.com"%9f088576fc2a47ed99b055782fb48e04{ @"Hettinger@
132
+ "General Helper@ " Novella@"1-258-382-9374 x04751@"!Dietrich, Hyatt and Schaefer@"%9f088576fc2a47ed99b055782fb48e04@"leann_sauer@hotmail.com"%5d9949fcda7c48d69758636a303c0548{ @"
133
+ Sipes@
134
+ "Environmental Planner@ " Norwood@"1-796-035-5549 x009@"Osinski Group@"%5d9949fcda7c48d69758636a303c0548@"marquis_olson@hotmail.com"%d172c71571694c09968672a1fdcecea3{ @" Barton@
135
+ "Software Director@ "Wilhelmine@"(864)234-6746 x945@" Fritsch, Jenkins and Little@"%d172c71571694c09968672a1fdcecea3@"mario@hotmail.com"%57ae6561dea947ffa4101fd455f13f50{ @" Rowe@
136
+ "Banking Mechanic@ "
137
+ Evans@"437-449-4962@"Oberbrunner LLC@"%57ae6561dea947ffa4101fd455f13f50@"freddie.walsh@yahoo.com"%11c73bdbf8b54b009f7a5244347a25ea{ @"Runolfsdottir@
138
+ "Administrative Recruiter@ " Elmore@"1-945-054-2695@"Schneider-Donnelly@"%11c73bdbf8b54b009f7a5244347a25ea@"vaughn.auer@hotmail.com"%faeecac1abbf43b7a049401f6728b6ea{ @"
139
+ Sipes@
140
+ "Maintenance Superintendent@ " Harvey@"(530)567-3688 x704@"Boyle-Langosh@"%faeecac1abbf43b7a049401f6728b6ea@"neha_hand@gmail.com"%e53a51b756da4107b4d8a433a0f8820d{ @"
141
+ Jones@
142
+ "%Production Production Supervisor@ "Charlotte@"1-559-435-9887 x058@"
143
+ Kozey@
144
+ "Business Systems Chef@ " Arnoldo@"1-009-148-2186@"Leuschke Inc@"%37f66fa6df1843f5ada96db42bf0b4c0@"otha_quitzon@gmail.com"%69a97548bc654ef4b5c4be6c6b29e2dd{ @" Russel@
145
+ "General Specialist@ " Kody@"1-469-207-9688 x82595@"Halvorson, Kris and Skiles@"%69a97548bc654ef4b5c4be6c6b29e2dd@"johnny@yahoo.com"%6282d6d61e794c2a8dc40e02bee8f8f5{ @" Roberts@
146
+ "Electronics Director@ "Henriette@"(774)721-6745 x9115@"Wolf, Green and Veum@"%6282d6d61e794c2a8dc40e02bee8f8f5@"bridie.stamm@yahoo.com"%641db14221d64aea9ca8488bfb5bcbbd{ @" Pacocha@
147
+ "Chief Buyer@ "
148
+ Uriel@"1-299-633-8600@"Brakus-Greenfelder@"%641db14221d64aea9ca8488bfb5bcbbd@"ivy@hotmail.com
@@ -0,0 +1,11 @@
1
+ {
2
+ "%8fada06e7b56478e90a5348a1c6f3f85{ "
3
+ Email"jazmin_mcdermott@yahoo.com"%6144d0c7f9484eeb9c68d2304a9bfb14{ @" Cronin@
4
+ "Advertising Scientist@ " Eugene@"1-980-027-5133 x549@"Jacobs-Kilback@"%6144d0c7f9484eeb9c68d2304a9bfb14@"jarvis_parker@gmail.com"%bef9e032a55949919e1ccb409ccbd187{ @"
5
+ Boehm@
6
+ "Quality Assurance Nurse@ "
7
+ Lance@"008.738.6271 x963@"Larson LLC@"%bef9e032a55949919e1ccb409ccbd187@"cayla_marvin@hotmail.com"%ff435a73b11841f7bf0da839538db179{ @"Heathcote@
8
+ "Senior Buyer@ "
9
+ Raven@"187-409-4543 x1528@"Morar-Huels@"%ff435a73b11841f7bf0da839538db179@"keon_parisian@yahoo.com"%9828dd87b59a479a8e7488a5e44eef2e{ @" Keeling@
10
+ "Administrative Supervisor@ "
11
+ Robyn@"(159)270-6914 x9311@"Lakin and Sons@"%9828dd87b59a479a8e7488a5e44eef2e@"simone.torphy@yahoo.com
@@ -0,0 +1,77 @@
1
+ # Simulate creating multiple objects
2
+ include BenchHelpers
3
+
4
+ Bench.config do |config|
5
+ config.concurrency = 5
6
+ config.iterations = 5
7
+ config.user_name = "benchuser"
8
+ config.password = "password"
9
+ config.app_name = "benchapp"
10
+ config.get_test_server
11
+ config.reset_app
12
+ config.create_user
13
+ config.reset_refresh_time('MockAdapter',0)
14
+ config.set_server_state("test_db_storage:benchapp:#{config.user_name}",{})
15
+ @create_objects = []
16
+ @create_count = 5
17
+ config.concurrency.times do |i|
18
+ @create_objects << []
19
+ config.iterations.times do
20
+ @create_objects[i] << Bench.get_test_data(@create_count,true)
21
+ end
22
+ end
23
+ @datasize = config.concurrency * config.iterations * @create_count
24
+ @expected_md = {}
25
+ @create_objects.each do |iteration|
26
+ iteration.each do |objects|
27
+ @expected_md.merge!(objects)
28
+ end
29
+ end
30
+ end
31
+
32
+ Bench.test do |config,session|
33
+ sleep rand(10)
34
+ session.post "clientlogin", "#{config.base_url}/clientlogin", :content_type => :json do
35
+ {:login => config.user_name, :password => config.password}.to_json
36
+ end
37
+ sleep rand(10)
38
+ session.get "clientcreate", "#{config.base_url}/clientcreate"
39
+ session.client_id = JSON.parse(session.last_result.body)['client']['client_id']
40
+ create_objs = @create_objects[session.thread_id][session.iteration]
41
+ session.post "create-object", config.base_url, :content_type => :json do
42
+ {:source_name => 'MockAdapter', :client_id => session.client_id,
43
+ :create => create_objs, :version => 3}.to_json
44
+ end
45
+ session.last_result.verify_code(200)
46
+ sleep rand(10)
47
+ logger.info "#{session.log_prefix} Loop to get available objects..."
48
+ count = get_all_objects(current_line,config,session,@expected_md,create_objs)
49
+ logger.info "#{session.log_prefix} Got #{count} available objects..."
50
+ end
51
+
52
+ Bench.verify do |config,sessions|
53
+ sessions.each do |session|
54
+ logger.info "#{session.log_prefix} Loop to load all objects..."
55
+ session.results['create-object'][0].verification_error +=
56
+ verify_numbers(
57
+ @datasize,get_all_objects(
58
+ caller(0)[0].to_s,config,session,@expected_md,nil,0),session,current_line)
59
+ logger.info "#{session.log_prefix} Loaded all objects..."
60
+ end
61
+
62
+ sessions.each do |session|
63
+ actual = config.get_server_state(
64
+ client_docname(config.app_name,
65
+ config.user_name,
66
+ session.client_id,
67
+ 'MockAdapter',:cd))
68
+ session.results['create-object'][0].verification_error +=
69
+ Bench.compare_and_log(@expected_md,actual,current_line)
70
+ end
71
+
72
+ master_doc = config.get_server_state(
73
+ source_docname(config.app_name,
74
+ config.user_name,
75
+ 'MockAdapter',:md))
76
+ Bench.verify_error = Bench.compare_and_log(@expected_md,master_doc,current_line)
77
+ end
@@ -0,0 +1,101 @@
1
+ module BenchHelpers
2
+ include Bench::Logging
3
+ include Bench::Utils
4
+
5
+ def client_docname(app_id,user_id,client_id,source_name,doctype)
6
+ "client:#{app_id}:#{user_id}:#{client_id}:#{source_name}:#{doctype}"
7
+ end
8
+
9
+ def source_docname(app_id,user_id,source_name,doctype)
10
+ "source:#{app_id}:#{user_id}:#{source_name}:#{doctype}"
11
+ end
12
+
13
+ def verify_presence_of_keys(expected,actual,session,caller)
14
+ verification_error = 0
15
+ expected.each do |key,object|
16
+ if !actual or !actual.include?(key) or actual[key]['l'] != key
17
+ logger.error "#{session.log_prefix} Verify error at: " + caller
18
+ logger.error "#{session.log_prefix} Unexpected id for object #{key}"
19
+ verification_error += 1
20
+ end
21
+ end
22
+ verification_error
23
+ end
24
+
25
+ def verify_numbers(expected,actual,session,caller)
26
+ if expected != actual
27
+ logger.error "#{session.log_prefix} Verify error at: " + caller
28
+ logger.error "#{session.log_prefix} Expected #{expected}"
29
+ logger.error "#{session.log_prefix} Actual #{actual}"
30
+ 1
31
+ else
32
+ 0
33
+ end
34
+ end
35
+
36
+ def verify_count(session,caller)
37
+ expected = JSON.parse(session.last_result.body)[2]['count']
38
+ result = JSON.parse(session.last_result.body)[5]
39
+ actual = 0
40
+ actual += result['delete'].size if result.include?('delete')
41
+ actual += result['insert'].size if result.include?('insert')
42
+ session.last_result.verification_error += verify_numbers(expected,actual,session,caller)
43
+ end
44
+
45
+ def verify_objects(expected_md,actual,session,marker,caller)
46
+ return if actual.nil?
47
+ actual.each do |key,object|
48
+ if expected_md.include?(key)
49
+ session.last_result.verification_error +=
50
+ compare_and_log(expected_md[key],object,caller)
51
+ else
52
+ logger.error "#{session.log_prefix} Verify error at: " + caller
53
+ logger.error "#{session.log_prefix} Unknown object: #{object.inspect}"
54
+ session.last_result.verification_error += 1
55
+ end
56
+ end
57
+ end
58
+
59
+ def verify_links(session,create_objs,caller)
60
+ links = JSON.parse(session.last_result.body)[5]['links']
61
+ session.last_result.verification_error +=
62
+ verify_presence_of_keys(create_objs,links,session,caller) if links
63
+ end
64
+
65
+ def current_line
66
+ caller(1)[0].to_s
67
+ end
68
+
69
+ def get_all_objects(caller,config,session,expected_md,create_objs=nil,timeout=10)
70
+ session.get "get-cud", config.base_url do
71
+ {'source_name' => 'MockAdapter', 'client_id' => session.client_id, 'p_size' => @datasize}
72
+ end
73
+ sleep rand(timeout)
74
+ token = JSON.parse(session.last_result.body)[1]['token']
75
+ progress_count = JSON.parse(session.last_result.body)[3]['progress_count']
76
+ return progress_count if token == ''
77
+
78
+ verify_count(session,caller+"\n"+current_line)
79
+ verify_objects(expected_md,JSON.parse(session.last_result.body)[5]['insert'],
80
+ session,"get-cud",caller+"\n"+current_line)
81
+ verify_links(session,create_objs,caller+"\n"+current_line) if create_objs
82
+
83
+ while token != '' do
84
+ sleep rand(timeout)
85
+ session.get "ack-cud", config.base_url do
86
+ { 'source_name' => 'MockAdapter',
87
+ 'client_id' => session.client_id,
88
+ 'token' => token}
89
+ end
90
+ session.last_result.verify_code(200)
91
+ verify_count(session,caller+"\n"+current_line)
92
+ verify_objects(expected_md,JSON.parse(session.last_result.body)[5]['insert'],
93
+ session,"ack-cud",caller+"\n"+current_line)
94
+ verify_links(session,create_objs,caller+"\n"+current_line) if create_objs
95
+
96
+ token = JSON.parse(session.last_result.body)[1]['token']
97
+ progress_count = JSON.parse(session.last_result.body)[3]['progress_count']
98
+ end
99
+ progress_count
100
+ end
101
+ end
@@ -0,0 +1,46 @@
1
+ # Run sync session, forces source adapter query on every sync request
2
+
3
+ @datasize = 100
4
+ @expected = Bench.get_test_data(@datasize)
5
+ @all_objects = "[{\"version\":3},{\"token\":\"%s\"},{\"count\":%i},{\"progress_count\":0},{\"total_count\":%i},{\"insert\":""}]"
6
+ @ack_token = "[{\"version\":3},{\"token\":\"\"},{\"count\":0},{\"progress_count\":%i},{\"total_count\":%i},{}]"
7
+
8
+ Bench.config do |config|
9
+ config.concurrency = 5
10
+ config.iterations = 5
11
+ config.user_name = "benchuser"
12
+ config.password = "password"
13
+ config.app_name = "benchapp"
14
+ config.get_test_server
15
+ config.reset_app
16
+ config.create_user
17
+ config.set_server_state("test_db_storage:benchapp:#{config.user_name}",@expected)
18
+ config.reset_refresh_time('MockAdapter',0)
19
+ end
20
+
21
+ Bench.test do |config,session|
22
+ sleep rand(10)
23
+ session.post "clientlogin", "#{config.base_url}/clientlogin", :content_type => :json do
24
+ {:login => config.user_name, :password => config.password}.to_json
25
+ end
26
+ sleep rand(10)
27
+ session.get "clientcreate", "#{config.base_url}/clientcreate"
28
+ client_id = JSON.parse(session.last_result.body)['client']['client_id']
29
+ session.get "get-cud", config.base_url do
30
+ {'source_name' => 'MockAdapter', 'client_id' => client_id, 'p_size' => @datasize}
31
+ end
32
+ sleep rand(10)
33
+ token = JSON.parse(session.last_result.body)[1]['token']
34
+ session.last_result.verify_body([{:version => 3},{:token => token},
35
+ {:count => @datasize},{:progress_count => 0},{:total_count => @datasize},
36
+ {:insert => @expected}].to_json)
37
+ sleep rand(10)
38
+ session.get "ack-cud", config.base_url do
39
+ { 'source_name' => 'MockAdapter',
40
+ 'client_id' => client_id,
41
+ 'token' => token}
42
+ end
43
+ session.last_result.verify_code(200)
44
+ session.last_result.verify_body([{:version => 3},{:token => ''},{:count => 0},
45
+ {:progress_count => @datasize},{:total_count => @datasize},{}].to_json)
46
+ end
@@ -0,0 +1,46 @@
1
+ # Runs simple login,clientcreate,sync session and validates response
2
+
3
+ @datasize = 100
4
+ @expected = Bench.get_test_data(@datasize)
5
+ @all_objects = "[{\"version\":3},{\"token\":\"%s\"},{\"count\":%i},{\"progress_count\":0},{\"total_count\":%i},{\"insert\":""}]"
6
+ @ack_token = "[{\"version\":3},{\"token\":\"\"},{\"count\":0},{\"progress_count\":%i},{\"total_count\":%i},{}]"
7
+
8
+ Bench.config do |config|
9
+ config.concurrency = 5
10
+ config.iterations = 5
11
+ config.user_name = "benchuser"
12
+ config.password = "password"
13
+ config.app_name = "benchapp"
14
+ config.get_test_server
15
+ config.reset_app
16
+ config.create_user
17
+ config.set_server_state("test_db_storage:benchapp:#{config.user_name}",@expected)
18
+ config.reset_refresh_time('MockAdapter')
19
+ end
20
+
21
+ Bench.test do |config,session|
22
+ sleep rand(10)
23
+ session.post "clientlogin", "#{config.base_url}/clientlogin", :content_type => :json do
24
+ {:login => config.user_name, :password => config.password}.to_json
25
+ end
26
+ sleep rand(10)
27
+ session.get "clientcreate", "#{config.base_url}/clientcreate"
28
+ client_id = JSON.parse(session.last_result.body)['client']['client_id']
29
+ session.get "get-cud", config.base_url do
30
+ {'source_name' => 'MockAdapter', 'client_id' => client_id, 'p_size' => @datasize}
31
+ end
32
+ sleep rand(10)
33
+ token = JSON.parse(session.last_result.body)[1]['token']
34
+ session.last_result.verify_body([{:version => 3},{:token => token},
35
+ {:count => @datasize},{:progress_count => 0},{:total_count => @datasize},
36
+ {:insert => @expected}].to_json)
37
+ sleep rand(10)
38
+ session.get "ack-cud", config.base_url do
39
+ { 'source_name' => 'MockAdapter',
40
+ 'client_id' => client_id,
41
+ 'token' => token}
42
+ end
43
+ session.last_result.verify_code(200)
44
+ session.last_result.verify_body([{:version => 3},{:token => ''},{:count => 0},
45
+ {:progress_count => @datasize},{:total_count => @datasize},{}].to_json)
46
+ end