rhoconnect 4.0.4 → 5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG.md +54 -5
  3. data/CREDITS +219 -219
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +68 -79
  6. data/Rakefile +1 -2
  7. data/bench/benchapp/spec/models/ruby/mock_adapter_spec.rb +17 -17
  8. data/bench/benchapp/spec/models/ruby/queue_mock_adapter_spec.rb +17 -17
  9. data/bench/benchapp/spec/spec_helper.rb +3 -3
  10. data/bench/blobapp/spec/models/ruby/blob_adapter_spec.rb +17 -17
  11. data/bench/blobapp/spec/spec_helper.rb +3 -3
  12. data/bench/lib/bench/runner.rb +1 -69
  13. data/bench/lib/bench.rb +18 -18
  14. data/bench/spec/mock_adapter_spec.rb +54 -55
  15. data/bench/spec/mock_client_spec.rb +47 -48
  16. data/bench/spec/result_spec.rb +41 -44
  17. data/bench/spec/utils_spec.rb +24 -25
  18. data/commands/generators/app.rb +7 -5
  19. data/commands/generators/controller.rb +7 -5
  20. data/commands/generators/model.rb +7 -5
  21. data/commands/generators/source.rb +7 -5
  22. data/commands/parser.rb +1 -1
  23. data/commands/redis/redis_download.rb +1 -1
  24. data/doc/async-jobs.txt +9 -9
  25. data/doc/supported-platforms.txt +0 -2
  26. data/generators/rhoconnect.rb +92 -212
  27. data/generators/templates/application/rcgemfile +3 -3
  28. data/generators/templates/application/spec/application_controller_spec.rb +14 -16
  29. data/generators/templates/application/spec/js_spec.rb +20 -20
  30. data/generators/templates/application/spec/spec_helper.rb +1 -1
  31. data/generators/templates/source/controllers/ruby/controller_spec.rb +18 -19
  32. data/generators/templates/source/models/ruby/model_spec.rb +17 -17
  33. data/install.sh +10 -21
  34. data/installer/unix-like/rho_connect_install_constants.rb +5 -5
  35. data/installer/unix-like/rho_connect_install_installers.rb +4 -4
  36. data/installer/utils/constants.rb +6 -6
  37. data/installer/utils/nix_install_test.rb +29 -29
  38. data/installer/utils/package_upload/repos.rake +16 -26
  39. data/js-adapters/node.rb +4 -4
  40. data/js-adapters/node_channel.rb +4 -8
  41. data/lib/rhoconnect/db_adapter.rb +13 -13
  42. data/lib/rhoconnect/handler/changes/engine.rb +1 -1
  43. data/lib/rhoconnect/jobs/bulk_data_job.rb +29 -29
  44. data/lib/rhoconnect/license.rb +7 -7
  45. data/lib/rhoconnect/model/helpers/find_duplicates_on_update.rb +13 -13
  46. data/lib/rhoconnect/ping/apple.rb +4 -4
  47. data/lib/rhoconnect/server.rb +2 -2
  48. data/lib/rhoconnect/source.rb +2 -2
  49. data/lib/rhoconnect/store.rb +12 -6
  50. data/lib/rhoconnect/utilities.rb +2 -2
  51. data/lib/rhoconnect/version.rb +1 -1
  52. data/lib/rhoconnect.rb +6 -4
  53. data/rhoconnect.gemspec +5 -6
  54. data/spec/api/api_helper.rb +1 -1
  55. data/spec/api/app/fast_delete_spec.rb +22 -22
  56. data/spec/api/app/fast_insert_spec.rb +23 -23
  57. data/spec/api/app/fast_update_spec.rb +63 -63
  58. data/spec/api/app/push_deletes_spec.rb +11 -13
  59. data/spec/api/app/push_objects_spec.rb +39 -39
  60. data/spec/api/client/client_get_db_doc_spec.rb +29 -29
  61. data/spec/api/client/client_set_db_doc_spec.rb +11 -11
  62. data/spec/api/client/get_client_params_spec.rb +29 -29
  63. data/spec/api/client/list_client_docs_spec.rb +32 -34
  64. data/spec/api/client/reset_spec.rb +30 -30
  65. data/spec/api/readstate/set_refresh_time_spec.rb +43 -43
  66. data/spec/api/source/get_source_params_spec.rb +32 -34
  67. data/spec/api/source/list_sources_spec.rb +13 -13
  68. data/spec/api/source/update_source_params_spec.rb +19 -19
  69. data/spec/api/store/get_db_doc_spec.rb +27 -27
  70. data/spec/api/store/set_db_doc_spec.rb +38 -38
  71. data/spec/api/system/adapter_spec.rb +27 -29
  72. data/spec/api/system/get_license_info_spec.rb +11 -11
  73. data/spec/api/system/login_spec.rb +37 -37
  74. data/spec/api/system/reset_spec.rb +15 -15
  75. data/spec/api/system/stats_spec.rb +70 -71
  76. data/spec/api/user/create_user_spec.rb +37 -37
  77. data/spec/api/user/delete_client_spec.rb +7 -7
  78. data/spec/api/user/delete_user_spec.rb +62 -62
  79. data/spec/api/user/list_clients_spec.rb +24 -24
  80. data/spec/api/user/list_source_docs_spec.rb +29 -29
  81. data/spec/api/user/list_users_spec.rb +22 -22
  82. data/spec/api/user/ping_spec.rb +18 -18
  83. data/spec/api/user/show_user_spec.rb +10 -10
  84. data/spec/api/user/update_user_spec.rb +43 -43
  85. data/spec/api/user/user_get_db_doc_spec.rb +12 -12
  86. data/spec/api/user/user_set_db_doc_spec.rb +37 -37
  87. data/spec/api_token_spec.rb +8 -8
  88. data/spec/app_spec.rb +18 -17
  89. data/spec/apps/jstestapp/settings/settings.yml +2 -0
  90. data/spec/async_spec.rb +9 -11
  91. data/spec/bulk_data/bulk_data_spec.rb +120 -120
  92. data/spec/cli/cli_spec.rb +50 -53
  93. data/spec/client_spec.rb +105 -105
  94. data/spec/client_sync_spec.rb +529 -528
  95. data/spec/controllers/js_base_spec.rb +147 -141
  96. data/spec/doc/doc_spec.rb +51 -52
  97. data/spec/document_spec.rb +58 -58
  98. data/spec/dynamic_adapter_spec.rb +33 -36
  99. data/spec/generator/generator_spec.rb +76 -42
  100. data/spec/jobs/bulk_data_job_spec.rb +101 -102
  101. data/spec/jobs/ping_job_spec.rb +176 -177
  102. data/spec/jobs/source_job_spec.rb +24 -25
  103. data/spec/license_spec.rb +54 -55
  104. data/spec/models/js_base_spec.rb +121 -120
  105. data/spec/perf/bulk_data_perf_spec.rb +23 -24
  106. data/spec/perf/perf_spec_helper.rb +7 -7
  107. data/spec/perf/store_perf_spec.rb +139 -140
  108. data/spec/ping/apple_spec.rb +65 -65
  109. data/spec/ping/gcm_spec.rb +83 -84
  110. data/spec/ping/rhoconnect_push_spec.rb +52 -53
  111. data/spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb +100 -101
  112. data/spec/predefined_adapters/rho_internal_js_bench_adapter_js_spec.rb +29 -31
  113. data/spec/read_state_spec.rb +24 -25
  114. data/spec/rhoconnect_spec.rb +7 -7
  115. data/spec/server/server_spec.rb +664 -662
  116. data/spec/server/stats_spec.rb +12 -12
  117. data/spec/source_adapter_spec.rb +124 -125
  118. data/spec/source_spec.rb +148 -149
  119. data/spec/source_sync_spec.rb +736 -736
  120. data/spec/spec_helper.rb +4 -5
  121. data/spec/stats/record_spec.rb +22 -21
  122. data/spec/store_orm_spec.rb +48 -48
  123. data/spec/store_spec.rb +428 -426
  124. data/spec/support/shared_examples.rb +5 -7
  125. data/spec/sync_states_spec.rb +67 -67
  126. data/spec/test_methods_spec.rb +121 -123
  127. data/spec/testdata/10000-data.txt +0 -0
  128. data/spec/testdata/5000-data.txt +0 -0
  129. data/spec/user_spec.rb +102 -102
  130. data/tasks/redis.rake +3 -3
  131. metadata +154 -195
  132. data/bench/benchapp/tmp/pids/passenger.9292.pid.lock +0 -0
  133. data/bench/benchapp/tmp/restart.txt +0 -0
  134. data/bench/blobapp/settings/license.key.bak +0 -2
  135. data/bench/blobapp/tmp/restart.txt +0 -0
  136. data/bench/lib/testdata/1-data.txt +0 -0
  137. data/bench/lib/testdata/10-data.txt +0 -0
  138. data/bench/lib/testdata/2-data.txt +0 -0
  139. data/bench/lib/testdata/250-data.txt +0 -0
  140. data/bench/lib/testdata/5-blob_data.txt +0 -0
  141. data/bench/lib/testdata/5-data.txt +0 -0
  142. data/bench/lib/testdata/50-data.txt +0 -0
  143. data/bench/lib/testdata/500-data.txt +0 -0
  144. data/doc/protocol.html +0 -1993
  145. data/spec/coverage/rcov/assets/0.2.3/jquery-1.3.2.min.js +0 -19
  146. data/spec/coverage/rcov/assets/0.2.3/jquery.tablesorter.min.js +0 -15
  147. data/spec/coverage/rcov/assets/0.2.3/print.css +0 -12
  148. data/spec/coverage/rcov/assets/0.2.3/rcov.js +0 -42
  149. data/spec/coverage/rcov/assets/0.2.3/screen.css +0 -270
  150. data/spec/coverage/rcov/index.html +0 -88
  151. data/spec/generator/generator_spec_helper.rb +0 -9
@@ -1,155 +1,156 @@
1
- require File.join(File.dirname(__FILE__),'..','spec_helper')
2
- require File.join(File.dirname(__FILE__),'..','..','lib','rhoconnect','server.rb')
1
+ require_relative '../../lib/rhoconnect'
2
+ require_relative '../../lib/rhoconnect/server'
3
+ require_relative '../spec_helper'
3
4
 
4
5
  describe "Rhoconnect::Model::JsBase" do
5
6
  include Rhoconnect
6
7
 
7
- it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
8
- before(:each) do
9
- Rhoconnect::Server.set :environment, :test
10
- Rhoconnect::Server.set :secret, "secure!"
11
- Rhoconnect.use_node = true
12
- Rhoconnect.bootstrap(get_testapp_path)
13
- end
8
+ include_examples "SharedRhoconnectHelper", :rhoconnect_data => true
14
9
 
15
- def app
16
- @app ||= Rack::URLMap.new Rhoconnect.url_map
17
- end
10
+ before(:each) do
11
+ Rhoconnect::Server.set :environment, :test
12
+ Rhoconnect::Server.set :secret, "secure!"
13
+ Rhoconnect.use_node = true
14
+ Rhoconnect.bootstrap(get_testapp_path)
15
+ end
16
+
17
+ def app
18
+ @app ||= Rack::URLMap.new Rhoconnect.url_map
19
+ end
20
+
21
+ after(:each) do
22
+ Rhoconnect::Node.kill_process
23
+ Source.valid_doctypes.delete('tmpdoc'.to_sym)
24
+ end
25
+
26
+ it "should load settings for model" do
27
+ @s = Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id})
28
+ @s.poll_interval.should == 100
29
+ end
30
+
31
+ it "should call js model method explicitly" do
32
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
33
+ res = js.login
34
+ res.should == "success"
35
+ end
36
+
37
+ it "should print warning if model function not found" do
38
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
39
+ res = js.foo
40
+ res.should == "foo method not defined for JsSample"
41
+ end
42
+
43
+ it "should call currentUser from model" do
44
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
45
+ res = js.getUser
46
+ res.should == 'testuser'
47
+ end
48
+
49
+ it "should call stashResult from model" do
50
+ data = { '0' => {'name' => '0'}, '1' => {'name' => '1'} }
51
+ Source.define_valid_doctypes(['tmpdoc'.to_sym])
52
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
53
+ js.inject_tmpdoc('tmpdoc')
54
+ js.testStashResult
55
+ js.get_data('tmpdoc').should == data
56
+ end
18
57
 
19
- after(:each) do
20
- Rhoconnect::Node.kill_process
21
- Source.valid_doctypes.delete('tmpdoc'.to_sym)
58
+ it "should test non-nil result from query" do
59
+ data = {'1' => {'name' => 'iPhone'}}
60
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
61
+ js.do_query(test_non_hash: true)
62
+ js.get_data(:md).should == {}
63
+ end
64
+
65
+ it "should call getData for a model" do
66
+ data = {'1' => {'name' => 'iPhone'}}
67
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
68
+ js.do_query
69
+ js.testGetModelData.should == data
70
+ end
71
+
72
+ it "should call partitionName for a model" do
73
+ JsSample.partition_name('testuser').should == 'testuser_partition'
74
+ end
75
+
76
+ context "exceptions" do
77
+ it "should raise ruby Rhoconnect::Model::Exception" do
78
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
79
+ lambda {
80
+ js.testRaiseException
81
+ }.should raise_error(Rhoconnect::Model::Exception, /some custom message/)
22
82
  end
23
83
 
24
- it "should load settings for model" do
25
- @s = Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id})
26
- @s.poll_interval.should == 100
84
+ it "should raise ruby Rhoconnect::Model::LoginException" do
85
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
86
+ lambda {
87
+ js.testRaiseLoginException
88
+ }.should raise_error(Rhoconnect::Model::LoginException, /some login message/)
27
89
  end
28
90
 
29
- it "should call js model method explicitly" do
91
+ it "should raise ruby Rhoconnect::Model::LogoffException" do
30
92
  js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
31
- res = js.login
32
- res.should == "success"
93
+ lambda {
94
+ js.testRaiseLogoffException
95
+ }.should raise_error(Rhoconnect::Model::LogoffException, /some logoff message/)
33
96
  end
34
97
 
35
- it "should print warning if model function not found" do
98
+ it "should raise ruby Rhoconnect::Model::ServerTimeoutException" do
36
99
  js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
37
- res = js.foo
38
- res.should == "foo method not defined for JsSample"
100
+ lambda {
101
+ js.testRaiseTimeoutException
102
+ }.should raise_error(Rhoconnect::Model::ServerTimeoutException, /some timeout message/)
39
103
  end
40
104
 
41
- it "should call currentUser from model" do
105
+ it "should raise ruby Rhoconnect::Model::ServerErrorException" do
42
106
  js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
43
- res = js.getUser
44
- res.should == 'testuser'
107
+ lambda {
108
+ js.testRaiseErrorException
109
+ }.should raise_error(Rhoconnect::Model::ServerErrorException, /some error message/)
45
110
  end
46
111
 
47
- it "should call stashResult from model" do
48
- data = { '0' => {'name' => '0'}, '1' => {'name' => '1'} }
49
- Source.define_valid_doctypes(['tmpdoc'.to_sym])
112
+ it "should raise ruby Rhoconnect::Model::ObjectConflictErrorException" do
50
113
  js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
51
- js.inject_tmpdoc('tmpdoc')
52
- js.testStashResult
53
- js.get_data('tmpdoc').should == data
114
+ lambda {
115
+ js.testRaiseConflictException
116
+ }.should raise_error(Rhoconnect::Model::ObjectConflictErrorException, /some object conflict message/)
54
117
  end
55
118
 
56
- it "should test non-nil result from query" do
57
- data = {'1' => {'name' => 'iPhone'}}
119
+ it "should raise an exception during a regular adapter method" do
58
120
  js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
59
- js.do_query(test_non_hash: true)
60
- js.get_data(:md).should == {}
121
+ lambda {
122
+ js.do_query(raise_an_error: true)
123
+ }.should raise_error(Rhoconnect::Model::ServerErrorException, /query error occured/)
61
124
  end
125
+ end
62
126
 
63
- it "should call getData for a model" do
64
- data = {'1' => {'name' => 'iPhone'}}
127
+ context "Store" do
128
+ it "should call getValue" do
129
+ Store.put_value('foo', 'bar')
65
130
  js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
66
- js.do_query
67
- js.testGetModelData.should == data
131
+ res = js.testGetValue
132
+ res.should == 'bar'
68
133
  end
69
134
 
70
- it "should call partitionName for a model" do
71
- JsSample.partition_name('testuser').should == 'testuser_partition'
135
+ it "should call putValue" do
136
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
137
+ js.testPutValue('foo', 'baz')
138
+ Store.get_value('foo').should == 'baz'
72
139
  end
73
140
 
74
- context "exceptions" do
75
- it "should raise ruby Rhoconnect::Model::Exception" do
76
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
77
- lambda {
78
- js.testRaiseException
79
- }.should raise_error(Rhoconnect::Model::Exception, /some custom message/)
80
- end
81
-
82
- it "should raise ruby Rhoconnect::Model::LoginException" do
83
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
84
- lambda {
85
- js.testRaiseLoginException
86
- }.should raise_error(Rhoconnect::Model::LoginException, /some login message/)
87
- end
88
-
89
- it "should raise ruby Rhoconnect::Model::LogoffException" do
90
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
91
- lambda {
92
- js.testRaiseLogoffException
93
- }.should raise_error(Rhoconnect::Model::LogoffException, /some logoff message/)
94
- end
95
-
96
- it "should raise ruby Rhoconnect::Model::ServerTimeoutException" do
97
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
98
- lambda {
99
- js.testRaiseTimeoutException
100
- }.should raise_error(Rhoconnect::Model::ServerTimeoutException, /some timeout message/)
101
- end
102
-
103
- it "should raise ruby Rhoconnect::Model::ServerErrorException" do
104
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
105
- lambda {
106
- js.testRaiseErrorException
107
- }.should raise_error(Rhoconnect::Model::ServerErrorException, /some error message/)
108
- end
109
-
110
- it "should raise ruby Rhoconnect::Model::ObjectConflictErrorException" do
111
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
112
- lambda {
113
- js.testRaiseConflictException
114
- }.should raise_error(Rhoconnect::Model::ObjectConflictErrorException, /some object conflict message/)
115
- end
116
-
117
- it "should raise an exception during a regular adapter method" do
118
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
119
- lambda {
120
- js.do_query(raise_an_error: true)
121
- }.should raise_error(Rhoconnect::Model::ServerErrorException, /query error occured/)
122
- end
141
+ it "should call getData" do
142
+ data = {'1' => {'name' => 'iPhone'}}
143
+ Store.put_data('foo', data)
144
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
145
+ res = js.testGetData
146
+ res.should == data
123
147
  end
124
148
 
125
- context "Store" do
126
- it "should call getValue" do
127
- Store.put_value('foo', 'bar')
128
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
129
- res = js.testGetValue
130
- res.should == 'bar'
131
- end
132
-
133
- it "should call putValue" do
134
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
135
- js.testPutValue('foo', 'baz')
136
- Store.get_value('foo').should == 'baz'
137
- end
138
-
139
- it "should call getData" do
140
- data = {'1' => {'name' => 'iPhone'}}
141
- Store.put_data('foo', data)
142
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
143
- res = js.testGetData
144
- res.should == data
145
- end
146
-
147
- it "should call putData" do
148
- data = {'1' => {'name' => 'iPhone'}}
149
- js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
150
- res = js.testPutData('foo', data)
151
- Store.get_data('foo').should == data
152
- end
149
+ it "should call putData" do
150
+ data = {'1' => {'name' => 'iPhone'}}
151
+ js = JsSample.new(Source.load('JsSample', {:app_id => @a.id, :user_id => @u.id}))
152
+ res = js.testPutData('foo', data)
153
+ Store.get_data('foo').should == data
153
154
  end
154
155
  end
155
156
  end
@@ -1,32 +1,31 @@
1
1
  require File.join(File.dirname(__FILE__),'perf_spec_helper')
2
2
 
3
3
  describe "BulkData Performance" do
4
- it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => false do
5
- before(:each) do
6
- basedir = File.join(File.dirname(__FILE__),'..','apps','rhotestapp')
7
- Rhoconnect.bootstrap(basedir) do |rhoconnect|
8
- rhoconnect.vendor_directory = File.join(basedir,'..','vendor')
9
- end
10
- end
4
+ include_examples "SharedRhoconnectHelper", :rhoconnect_data => false
11
5
 
12
- after(:each) do
13
- delete_data_directory
6
+ before(:each) do
7
+ basedir = File.join(File.dirname(__FILE__),'..','apps','rhotestapp')
8
+ Rhoconnect.bootstrap(basedir) do |rhoconnect|
9
+ rhoconnect.vendor_directory = File.join(basedir,'..','vendor')
14
10
  end
11
+ end
15
12
 
16
- it "should generate sqlite bulk data for 1000 objects (6000 attributes)" do
17
- start = start_timer
18
- @data = get_test_data(1000)
19
- start = lap_timer('generate data',start)
20
- set_state('test_db_storage' => @data)
21
- start = lap_timer('set_state masterdoc',start)
22
- data = BulkData.create(:name => bulk_data_docname(@a.id,@u.id),
23
- :state => :inprogress,
24
- :app_id => @a.id,
25
- :user_id => @u.id,
26
- :sources => [@s_fields[:name]])
27
- do_bulk_data_job("data_name" => data.name)
28
- lap_timer('BulkDataJob.perform duration',start)
29
- end
30
- end
13
+ after(:each) do
14
+ delete_data_directory
15
+ end
31
16
 
17
+ it "should generate sqlite bulk data for 1000 objects (6000 attributes)" do
18
+ start = start_timer
19
+ @data = get_test_data(1000)
20
+ start = lap_timer('generate data',start)
21
+ set_state('test_db_storage' => @data)
22
+ start = lap_timer('set_state masterdoc',start)
23
+ data = BulkData.create(:name => bulk_data_docname(@a.id,@u.id),
24
+ :state => :inprogress,
25
+ :app_id => @a.id,
26
+ :user_id => @u.id,
27
+ :sources => [@s_fields[:name]])
28
+ do_bulk_data_job("data_name" => data.name)
29
+ lap_timer('BulkDataJob.perform duration',start)
30
+ end
32
31
  end
@@ -1,8 +1,8 @@
1
- require File.join(File.dirname(__FILE__),'..','spec_helper')
2
1
  require 'ffaker'
2
+ require_relative '../spec_helper'
3
3
 
4
4
  def get_test_data(num=1000)
5
- file = File.join("spec","testdata","#{num}-data.txt")
5
+ file = File.join(SPEC_PATH, "testdata","#{num}-data.txt")
6
6
  data = nil
7
7
  if File.exists?(file)
8
8
  data = open(file, 'r') {|f| Marshal.load(f)}
@@ -17,12 +17,12 @@ end
17
17
 
18
18
  private
19
19
 
20
- PREFIX = ["Account", "Administrative", "Advertising", "Assistant", "Banking", "Business Systems",
21
- "Computer", "Distribution", "IT", "Electronics", "Environmental", "Financial", "General", "Head",
22
- "Laboratory", "Maintenance", "Medical", "Production", "Quality Assurance", "Software", "Technical",
20
+ PREFIX = ["Account", "Administrative", "Advertising", "Assistant", "Banking", "Business Systems",
21
+ "Computer", "Distribution", "IT", "Electronics", "Environmental", "Financial", "General", "Head",
22
+ "Laboratory", "Maintenance", "Medical", "Production", "Quality Assurance", "Software", "Technical",
23
23
  "Chief", "Senior"] unless defined? PREFIX
24
- SUFFIX = ["Clerk", "Analyst", "Manager", "Supervisor", "Plant Manager", "Mechanic", "Technician", "Engineer",
25
- "Director", "Superintendent", "Specialist", "Technologist", "Estimator", "Scientist", "Foreman", "Nurse",
24
+ SUFFIX = ["Clerk", "Analyst", "Manager", "Supervisor", "Plant Manager", "Mechanic", "Technician", "Engineer",
25
+ "Director", "Superintendent", "Specialist", "Technologist", "Estimator", "Scientist", "Foreman", "Nurse",
26
26
  "Worker", "Helper", "Intern", "Sales", "Mechanic", "Planner", "Recruiter", "Officer", "Superintendent",
27
27
  "Vice President", "Buyer", "Production Supervisor", "Chef", "Accountant", "Executive"] unless defined? SUFFIX
28
28
 
@@ -1,152 +1,152 @@
1
1
  require File.join(File.dirname(__FILE__),'perf_spec_helper')
2
2
 
3
3
  describe "Rhoconnect Performance" do
4
- it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => false do
5
- it "should process get/put/delete for 10000 records (60000 elements)" do
6
- @data = get_test_data(10000)
7
- start = start_timer
8
- Store.put_data('mdoc',@data).should == true
9
- start = lap_timer('put_data duration',start)
10
- Store.get_data('mdoc').should == @data
11
- start = lap_timer('get_data duration',start)
12
- Store.rename('mdoc','mdoc_copy')
13
- start = lap_timer("rename doc duration", start)
14
- Store.clone('mdoc_copy','mdoc_copy1')
15
- start = lap_timer("clone doc duration", start)
16
- Store.delete_objects('mdoc_copy',@data.keys[0,2])
17
- start = lap_timer("delete_objects duration", start)
18
- Store.delete_data('mdoc_copy1',@data)
19
- start = lap_timer("delete_data duration", start)
20
- end
21
-
22
- it "should process update_objects in a set of 10000 records (60000 elements)" do
23
- @data = get_test_data(10000)
24
- updated_key = @data.keys[21]
25
- @update_data = {}
4
+ include_examples "SharedRhoconnectHelper", :rhoconnect_data => false
5
+
6
+ it "should process get/put/delete for 10000 records (60000 elements)" do
7
+ @data = get_test_data(10000)
8
+ start = start_timer
9
+ Store.put_data('mdoc',@data).should == true
10
+ start = lap_timer('put_data duration',start)
11
+ Store.get_data('mdoc').should == @data
12
+ start = lap_timer('get_data duration',start)
13
+ Store.rename('mdoc','mdoc_copy')
14
+ start = lap_timer("rename doc duration", start)
15
+ Store.clone('mdoc_copy','mdoc_copy1')
16
+ start = lap_timer("clone doc duration", start)
17
+ Store.delete_objects('mdoc_copy',@data.keys[0,2])
18
+ start = lap_timer("delete_objects duration", start)
19
+ Store.delete_data('mdoc_copy1',@data)
20
+ start = lap_timer("delete_data duration", start)
21
+ end
22
+
23
+ it "should process update_objects in a set of 10000 records (60000 elements)" do
24
+ @data = get_test_data(10000)
25
+ updated_key = @data.keys[21]
26
+ @update_data = {}
27
+ @update_data[updated_key] = @data[updated_key].clone
28
+ @update_data[updated_key]['Phone'] = 'updated phone SADD'
29
+ @update_data[updated_key]['Phone1'] = 'updated phone SREM and SADD'
30
+ expected = @data.clone
31
+ expected.merge!(@update_data)
32
+
33
+ Store.put_data('mdoc',@data).should == true
34
+ start = start_timer
35
+ Store.update_objects('mdoc', @update_data)
36
+ lap_timer("update_objects duration", start)
37
+ Store.get_data('mdoc').should == expected
38
+ end
39
+
40
+ it "should process 1000 update_objects in a set of 10000 records (60000 elements)" do
41
+ @data = get_test_data(10000)
42
+ updated_keys = @data.keys[2001..3000]
43
+ @update_data = {}
44
+ updated_keys.each do |updated_key|
26
45
  @update_data[updated_key] = @data[updated_key].clone
27
46
  @update_data[updated_key]['Phone'] = 'updated phone SADD'
28
47
  @update_data[updated_key]['Phone1'] = 'updated phone SREM and SADD'
29
- expected = @data.clone
30
- expected.merge!(@update_data)
31
-
32
- Store.put_data('mdoc',@data).should == true
33
- start = start_timer
34
- Store.update_objects('mdoc', @update_data)
35
- lap_timer("update_objects duration", start)
36
- Store.get_data('mdoc').should == expected
37
- end
38
-
39
- it "should process 1000 update_objects in a set of 10000 records (60000 elements)" do
40
- @data = get_test_data(10000)
41
- updated_keys = @data.keys[2001..3000]
42
- @update_data = {}
43
- updated_keys.each do |updated_key|
44
- @update_data[updated_key] = @data[updated_key].clone
45
- @update_data[updated_key]['Phone'] = 'updated phone SADD'
46
- @update_data[updated_key]['Phone1'] = 'updated phone SREM and SADD'
47
- end
48
- expected = @data.dup
49
- expected.merge!(@update_data)
50
-
51
- Store.put_data('mdoc',@data).should == true
52
- start = start_timer
53
- Store.update_objects('mdoc', @update_data)
54
- lap_timer("update_objects duration", start)
55
-
56
- Store.get_data('mdoc').should == expected
57
- end
58
-
59
- it "should process single attribute diff for 10000-record doc" do
60
- @data = get_test_data(10000)
61
- @data1 = get_test_data(10000)
62
- @data1['950']['Phone1'] = 'This is changed'
63
- expected = {'950' => {'Phone1' => 'This is changed'}}
64
- @s.put_data(:md,@data1).should == true
65
- @c.put_data(:cd,@data).should == true
66
- start = start_timer
67
- cs = create_sync_handler
68
- token,progress_count,total_count,res = cs.send_new_page
69
- lap_timer('compute_page duration', start)
70
- @c.get_data(:page).should == expected
71
- res['insert'].should == expected
72
- res['delete'].should == {'950' => {'Phone1' => @data['950']['Phone1']}}
73
48
  end
49
+ expected = @data.dup
50
+ expected.merge!(@update_data)
74
51
 
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
87
- res['insert'].should == expected
88
- res['delete'].should == {'950' => {'Phone1' => @data['950']['Phone1']}}
89
- end
90
-
91
- it "should process full-sync for 5000-record doc" do
92
- @data = get_test_data(5000)
93
- @s.put_data(:md,@data).should == true
94
- start = start_timer
95
- params = { :p_size => 5000 }
96
- cs = create_sync_handler params
97
- token,progress_count,total_count,res = cs.send_new_page
98
- lap_timer('compute_page duration', start)
99
- @c.get_data(:page).should == @data
100
- res['insert'].should == @data
101
- res['delete'].should == nil
102
- end
52
+ Store.put_data('mdoc',@data).should == true
53
+ start = start_timer
54
+ Store.update_objects('mdoc', @update_data)
55
+ lap_timer("update_objects duration", start)
103
56
 
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
113
- res['insert'].should == @data
114
- res['delete'].should == nil
115
- end
116
-
117
- it "should process worst-case sync scenario there every attrib of every object is changed for 5000-record doc" do
118
- @data = generate_fake_data(5000,true)
119
- sleep(1.5)
120
- @data1 = generate_fake_data(5000,true)
121
- @s.put_data(:md,@data).should == true
122
- @c.put_data(:cd,@data1).should == true
123
- start = start_timer
124
- params = { :p_size => 5000 }
125
- cs = create_sync_handler params
126
- token,progress_count,total_count,res = cs.send_new_page
127
- lap_timer('compute_page duration', start)
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
57
+ Store.get_data('mdoc').should == expected
58
+ end
133
59
 
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)
147
- res['insert'].should == @data
148
- res['delete'].should == @data1
149
- end
60
+ it "should process single attribute diff for 10000-record doc" do
61
+ @data = get_test_data(10000)
62
+ @data1 = get_test_data(10000)
63
+ @data1['950']['Phone1'] = 'This is changed'
64
+ expected = {'950' => {'Phone1' => 'This is changed'}}
65
+ @s.put_data(:md,@data1).should == true
66
+ @c.put_data(:cd,@data).should == true
67
+ start = start_timer
68
+ cs = create_sync_handler
69
+ token,progress_count,total_count,res = cs.send_new_page
70
+ lap_timer('compute_page duration', start)
71
+ @c.get_data(:page).should == expected
72
+ res['insert'].should == expected
73
+ res['delete'].should == {'950' => {'Phone1' => @data['950']['Phone1']}}
74
+ end
75
+
76
+ it "should process single attribute diff for 10000-record doc using brute-force approach" do
77
+ @data = get_test_data(10000)
78
+ @data1 = get_test_data(10000)
79
+ @data1['950']['Phone1'] = 'This is changed'
80
+ expected = {'950' => {'Phone1' => 'This is changed'}}
81
+ @s.put_data(:md,@data1).should == true
82
+ @c.put_data(:cd,@data).should == true
83
+ start = start_timer
84
+ cs = create_sync_handler
85
+ token,progress_count,total_count,res = cs.send_new_page_bruteforce
86
+ lap_timer('compute_page duration', start)
87
+ @c.get_data(:page).should == expected
88
+ res['insert'].should == expected
89
+ res['delete'].should == {'950' => {'Phone1' => @data['950']['Phone1']}}
90
+ end
91
+
92
+ it "should process full-sync for 5000-record doc" do
93
+ @data = get_test_data(5000)
94
+ @s.put_data(:md,@data).should == true
95
+ start = start_timer
96
+ params = { :p_size => 5000 }
97
+ cs = create_sync_handler params
98
+ token,progress_count,total_count,res = cs.send_new_page
99
+ lap_timer('compute_page duration', start)
100
+ @c.get_data(:page).should == @data
101
+ res['insert'].should == @data
102
+ res['delete'].should == nil
103
+ end
104
+
105
+ it "should process full-sync for 5000-record doc using brute-force approach" do
106
+ @data = get_test_data(5000)
107
+ @s.put_data(:md,@data).should == true
108
+ start = start_timer
109
+ params = { :p_size => 5000 }
110
+ cs = create_sync_handler params
111
+ token,progress_count,total_count,res = cs.send_new_page_bruteforce
112
+ lap_timer('compute_page duration', start)
113
+ @c.get_data(:page).should == @data
114
+ res['insert'].should == @data
115
+ res['delete'].should == nil
116
+ end
117
+
118
+ it "should process worst-case sync scenario there every attrib of every object is changed for 5000-record doc" do
119
+ @data = generate_fake_data(5000,true)
120
+ sleep(1.5)
121
+ @data1 = generate_fake_data(5000,true)
122
+ @s.put_data(:md,@data).should == true
123
+ @c.put_data(:cd,@data1).should == true
124
+ start = start_timer
125
+ params = { :p_size => 5000 }
126
+ cs = create_sync_handler params
127
+ token,progress_count,total_count,res = cs.send_new_page
128
+ lap_timer('compute_page duration', start)
129
+ @c.get_data(:page).should == @data
130
+ @c.get_data(:cd).should == @s.get_data(:md)
131
+ res['insert'].should == @data
132
+ res['delete'].should == @data1
133
+ end
134
+
135
+ it "should process worst-case sync scenario there every attrib of every object is changed for 5000-record doc using brute-force approach" do
136
+ @data = generate_fake_data(5000,true)
137
+ sleep(1.5)
138
+ @data1 = generate_fake_data(5000,true)
139
+ @s.put_data(:md,@data).should == true
140
+ @c.put_data(:cd,@data1).should == true
141
+ start = start_timer
142
+ params = { :p_size => 5000 }
143
+ cs = create_sync_handler params
144
+ token,progress_count,total_count,res = cs.send_new_page_bruteforce
145
+ lap_timer('compute_page duration', start)
146
+ @c.get_data(:page).should == @data
147
+ @c.get_data(:cd).should == @s.get_data(:md)
148
+ res['insert'].should == @data
149
+ res['delete'].should == @data1
150
150
  end
151
151
 
152
152
  # helper
@@ -155,5 +155,4 @@ describe "Rhoconnect Performance" do
155
155
  @model = Rhoconnect::Model::Base.create(@s)
156
156
  Rhoconnect::Handler::Query::Runner.new(@model, @c, rh, params)
157
157
  end
158
-
159
158
  end