rhoconnect 3.2.1 → 3.3.1.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +24 -5
- data/Gemfile +2 -2
- data/Gemfile.lock +20 -20
- data/bench/benchapp/Gemfile +17 -20
- data/bench/benchapp/config.ru +2 -2
- data/bench/benchapp/settings/settings.yml +3 -3
- data/bench/blobapp/Gemfile +16 -13
- data/bench/blobapp/config.ru +2 -2
- data/bench/blobapp/settings/settings.yml +5 -3
- data/bench/lib/bench.rb +35 -32
- data/bench/lib/bench/session.rb +9 -1
- data/bench/scripts/blob_cud_script.rb +13 -17
- data/bench/scripts/cud_script.rb +11 -12
- data/bench/scripts/helpers.rb +5 -7
- data/bench/scripts/query_md_script.rb +18 -12
- data/bench/scripts/query_only_script.rb +19 -11
- data/bench/scripts/query_script.rb +17 -13
- data/bench/scripts/test_query_script.rb +46 -17
- data/bench/scripts/test_source_script.rb +7 -7
- data/commands/commands/dtach_commands/dtach_install.rb +44 -16
- data/commands/commands/rhoconnect/spec.rb +13 -9
- data/commands/commands/rhoconnect/version.rb +6 -0
- data/commands/execute.rb +10 -6
- data/doc/deploying.txt +75 -13
- data/doc/install.txt +3 -3
- data/doc/push-client-setup.txt +1 -1
- data/doc/rest-api.txt +4 -23
- data/doc/rhoconnect-redis-stack.txt +26 -7
- data/doc/settings.txt +9 -3
- data/examples/simple/Gemfile +3 -1
- data/examples/simple/application.rb +5 -0
- data/examples/simple/config.ru +3 -2
- data/examples/simple/my_server.rb +14 -0
- data/examples/simple/settings/settings.yml +1 -0
- data/generators/templates/application/Gemfile +4 -4
- data/generators/templates/application/application.rb +4 -0
- data/generators/templates/application/settings/settings.yml +4 -1
- data/installer/unix-like/create_texts.rb +39 -1
- data/installer/unix-like/rho_connect_install_constants.rb +1 -1
- data/installer/utils/package_upload/repos.rake +7 -5
- data/lib/rhoconnect.rb +3 -2
- data/lib/rhoconnect/api/app/ans_login.rb +3 -0
- data/lib/rhoconnect/api/app/bulk_data.rb +6 -0
- data/lib/rhoconnect/api/{source → app}/fast_delete.rb +1 -1
- data/lib/rhoconnect/api/{source → app}/fast_insert.rb +2 -2
- data/lib/rhoconnect/api/{source → app}/fast_update.rb +2 -2
- data/lib/rhoconnect/api/app/login.rb +5 -0
- data/lib/rhoconnect/api/{source → app}/push_deletes.rb +1 -1
- data/lib/rhoconnect/api/{source → app}/push_objects.rb +1 -1
- data/lib/rhoconnect/api/app/query.rb +4 -0
- data/lib/rhoconnect/api/app/queue_updates.rb +94 -0
- data/lib/rhoconnect/api/app/search.rb +4 -0
- data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -0
- data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -0
- data/lib/rhoconnect/api/client/create.rb +7 -0
- data/lib/rhoconnect/api/client/get_client_params.rb +2 -1
- data/lib/rhoconnect/api/client/list_client_docs.rb +2 -1
- data/lib/rhoconnect/api/client/register.rb +12 -0
- data/lib/rhoconnect/api/client/reset.rb +5 -0
- data/lib/rhoconnect/api/{source → readstate}/set_refresh_time.rb +2 -1
- data/lib/rhoconnect/api/source/get_source_params.rb +3 -2
- data/lib/rhoconnect/api/source/list_sources.rb +2 -1
- data/lib/rhoconnect/api/source/update_source_params.rb +3 -3
- data/lib/rhoconnect/api/store/get_db_doc.rb +4 -0
- data/lib/rhoconnect/api/store/set_db_doc.rb +7 -0
- data/lib/rhoconnect/api/system/get_adapter.rb +4 -0
- data/lib/rhoconnect/api/{admin → system}/get_license_info.rb +2 -1
- data/lib/rhoconnect/api/system/login.rb +15 -0
- data/lib/rhoconnect/api/{admin → system}/reset.rb +3 -2
- data/lib/rhoconnect/api/system/save_adapter.rb +4 -0
- data/lib/rhoconnect/api/{admin → system}/stats.rb +2 -1
- data/lib/rhoconnect/api/user/create_user.rb +2 -2
- data/lib/rhoconnect/api/user/delete_client.rb +6 -0
- data/lib/rhoconnect/api/user/delete_user.rb +2 -1
- data/lib/rhoconnect/api/user/list_clients.rb +4 -0
- data/lib/rhoconnect/api/user/list_source_docs.rb +11 -0
- data/lib/rhoconnect/api/user/list_users.rb +1 -1
- data/lib/rhoconnect/api/user/ping.rb +7 -0
- data/lib/rhoconnect/api/user/show_user.rb +3 -0
- data/lib/rhoconnect/api/user/update_user.rb +3 -2
- data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -0
- data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -0
- data/lib/rhoconnect/app.rb +12 -2
- data/lib/rhoconnect/async.rb +6 -10
- data/lib/rhoconnect/bulk_data/bulk_data.rb +4 -4
- data/lib/rhoconnect/client.rb +10 -9
- data/lib/rhoconnect/client_sync.rb +24 -19
- data/lib/rhoconnect/document.rb +18 -4
- data/lib/rhoconnect/graph_helper.rb +4 -2
- data/lib/rhoconnect/jobs/bulk_data_job.rb +1 -1
- data/lib/rhoconnect/jobs/ping_job.rb +39 -29
- data/lib/rhoconnect/middleware/admin_user.rb +23 -0
- data/lib/rhoconnect/middleware/body_content_type_parser.rb +35 -0
- data/lib/rhoconnect/{cors.rb → middleware/cors.rb} +1 -0
- data/lib/rhoconnect/middleware/current_app.rb +16 -0
- data/lib/rhoconnect/middleware/current_request.rb +16 -0
- data/lib/rhoconnect/middleware/current_user.rb +17 -0
- data/lib/rhoconnect/middleware/helpers.rb +105 -0
- data/lib/rhoconnect/middleware/login_required.rb +22 -0
- data/lib/rhoconnect/{stats/middleware.rb → middleware/stats.rb} +5 -3
- data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +58 -0
- data/lib/rhoconnect/ping.rb +1 -0
- data/lib/rhoconnect/ping/apple.rb +18 -16
- data/lib/rhoconnect/ping/blackberry.rb +9 -9
- data/lib/rhoconnect/ping/rhoconnect_push.rb +45 -0
- data/lib/rhoconnect/server.rb +98 -91
- data/lib/rhoconnect/source.rb +5 -1
- data/lib/rhoconnect/source_sync.rb +4 -3
- data/lib/rhoconnect/stats/record.rb +15 -15
- data/lib/rhoconnect/store.rb +253 -75
- data/lib/rhoconnect/tasks.rb +3 -3
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect/web-console/controllers/admins.js +1 -14
- data/lib/rhoconnect/web-console/models/adapter.js +18 -8
- data/lib/rhoconnect/web-console/models/client.js +15 -9
- data/lib/rhoconnect/web-console/models/doc.js +7 -11
- data/lib/rhoconnect/web-console/models/session.js +5 -2
- data/lib/rhoconnect/web-console/models/source.js +55 -36
- data/lib/rhoconnect/web-console/models/user.js +20 -11
- data/lib/rhoconnect/web-console/public/backbone.js +8 -2
- data/lib/rhoconnect/web-console/templates/index.erb +11 -5
- data/lib/rhoconnect/web-console/views/doc.js +6 -8
- data/lib/rhoconnect/web-console/views/edit_user.js +6 -3
- data/lib/rhoconnect/web-console/views/home.js +98 -25
- data/lib/rhoconnect/web-console/views/index.js +1 -1
- data/lib/rhoconnect/web-console/views/new_ping.js +6 -3
- data/lib/rhoconnect/web-console/views/server_doc.js +12 -4
- data/lib/rhoconnect/web-console/views/show_device.js +6 -3
- data/rhoconnect.gemspec +1 -2
- data/spec/api/{source → app}/fast_delete_spec.rb +4 -4
- data/spec/api/{source → app}/fast_insert_spec.rb +4 -4
- data/spec/api/{source → app}/fast_update_spec.rb +22 -6
- data/spec/api/{source → app}/push_deletes_spec.rb +2 -2
- data/spec/api/app/push_objects_spec.rb +45 -0
- data/spec/api/client/client_get_db_doc_spec.rb +31 -0
- data/spec/api/client/client_set_db_doc_spec.rb +14 -0
- data/spec/api/client/get_client_params_spec.rb +3 -2
- data/spec/api/client/list_client_docs_spec.rb +2 -2
- data/spec/api/{source → readstate}/set_refresh_time_spec.rb +15 -9
- data/spec/api/source/get_source_params_spec.rb +3 -2
- data/spec/api/source/list_sources_spec.rb +3 -9
- data/spec/api/source/update_source_params_spec.rb +4 -4
- data/spec/api/store/get_db_doc_spec.rb +32 -0
- data/spec/api/store/set_db_doc_spec.rb +43 -0
- data/spec/api/system/adapter_spec.rb +33 -0
- data/spec/api/{admin → system}/get_license_info_spec.rb +2 -5
- data/spec/api/{admin/get_api_token_spec.rb → system/login_spec.rb} +4 -11
- data/spec/api/{admin → system}/reset_spec.rb +2 -2
- data/spec/api/{admin → system}/stats_spec.rb +19 -13
- data/spec/api/user/create_user_spec.rb +15 -8
- data/spec/api/{client → user}/delete_client_spec.rb +3 -4
- data/spec/api/user/delete_user_spec.rb +33 -4
- data/spec/api/user/list_clients_spec.rb +30 -0
- data/spec/api/user/list_source_docs_spec.rb +35 -0
- data/spec/api/user/list_users_spec.rb +5 -6
- data/spec/api/{client → user}/ping_spec.rb +4 -6
- data/spec/api/user/show_user_spec.rb +14 -0
- data/spec/api/user/update_user_spec.rb +28 -10
- data/spec/api/user/user_get_db_doc_spec.rb +16 -0
- data/spec/api/user/user_set_db_doc_spec.rb +41 -0
- data/spec/apps/rhotestapp/application.rb +4 -0
- data/spec/apps/rhotestapp/settings/settings.yml +3 -1
- data/spec/bulk_data/bulk_data_spec.rb +13 -0
- data/spec/client_sync_spec.rb +41 -59
- data/spec/document_spec.rb +23 -0
- data/spec/javascripts/doc_view_spec.js +1 -1
- data/spec/javascripts/home_view_spec.js +10 -5
- data/spec/javascripts/index_view_spec.js +1 -1
- data/spec/jobs/ping_job_spec.rb +26 -0
- data/spec/perf/store_perf_spec.rb +1 -1
- data/spec/ping/android_spec.rb +0 -7
- data/spec/ping/apple_spec.rb +7 -0
- data/spec/ping/blackberry_spec.rb +10 -0
- data/spec/ping/rhoconnect_push_spec.rb +58 -0
- data/spec/server/cors_spec.rb +1 -1
- data/spec/server/server_spec.rb +152 -104
- data/spec/{stats/middleware_spec.rb → server/stats_spec.rb} +4 -5
- data/spec/server/x_domain_session_wrapper_spec.rb +3 -3
- data/spec/source_spec.rb +2 -2
- data/spec/source_sync_spec.rb +2 -0
- data/spec/spec_helper.rb +17 -3
- data/spec/stats/record_spec.rb +18 -19
- data/spec/store_spec.rb +51 -26
- data/spec/support/shared_examples.rb +4 -0
- data/spec/sync_states_spec.rb +2 -2
- metadata +104 -88
- data/bench/benchapp/Gemfile.lock +0 -87
- data/bench/blobapp/Gemfile.lock +0 -107
- data/bench/lib/testdata/5-data.txt +0 -8
- data/doc/release.txt +0 -41
- data/lib/rhoconnect/api/admin/get_api_token.rb +0 -14
- data/lib/rhoconnect/api/admin/login.rb +0 -6
- data/lib/rhoconnect/api/application/bulk_data.rb +0 -7
- data/lib/rhoconnect/api/application/clientcreate.rb +0 -8
- data/lib/rhoconnect/api/application/clientlogin.rb +0 -6
- data/lib/rhoconnect/api/application/clientregister.rb +0 -13
- data/lib/rhoconnect/api/application/clientreset.rb +0 -6
- data/lib/rhoconnect/api/application/query.rb +0 -7
- data/lib/rhoconnect/api/application/queue_updates.rb +0 -20
- data/lib/rhoconnect/api/application/search.rb +0 -6
- data/lib/rhoconnect/api/client/create_client.rb +0 -3
- data/lib/rhoconnect/api/client/delete_client.rb +0 -5
- data/lib/rhoconnect/api/client/list_clients.rb +0 -3
- data/lib/rhoconnect/api/client/ping.rb +0 -7
- data/lib/rhoconnect/api/source/get_adapter.rb +0 -3
- data/lib/rhoconnect/api/source/get_db_doc.rb +0 -7
- data/lib/rhoconnect/api/source/list_source_docs.rb +0 -10
- data/lib/rhoconnect/api/source/save_adapter.rb +0 -3
- data/lib/rhoconnect/api/source/set_db_doc.rb +0 -10
- data/lib/rhoconnect/api/source/upload_file.rb +0 -4
- data/lib/rhoconnect/body_content_type_parser.rb +0 -32
- data/lib/rhoconnect/x_domain_session_wrapper.rb +0 -53
- data/spec/api/admin/api_token_spec.rb +0 -13
- data/spec/api/client/create_client_spec.rb +0 -13
- data/spec/api/client/list_clients_spec.rb +0 -22
- data/spec/api/source/adapter_spec.rb +0 -29
- data/spec/api/source/get_db_doc_spec.rb +0 -21
- data/spec/api/source/list_source_docs_spec.rb +0 -25
- data/spec/api/source/push_objects_spec.rb +0 -27
- data/spec/api/source/set_db_doc_spec.rb +0 -32
- data/spec/api/source/upload_file_spec.rb +0 -26
@@ -1,10 +1,9 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "RhoconnectApiDeleteClient" do
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
|
-
it "should delete client" do
|
6
|
-
|
7
|
-
:user_id => @u_fields[:login], :client_id => @c.id}
|
5
|
+
it "should delete client for the user" do
|
6
|
+
delete "/rc/#{Rhoconnect::API_VERSION}/users/#{@u_fields[:login]}/clients/#{@c.id}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
8
7
|
last_response.should be_ok
|
9
8
|
Client.is_exist?(@c.id).should == false
|
10
9
|
User.load(@u_fields[:login]).clients.members.should == []
|
@@ -3,9 +3,37 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
|
|
3
3
|
describe "RhoconnectApiDeleteUser" do
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should delete user" do
|
6
|
-
params = {:
|
7
|
-
|
8
|
-
|
6
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
7
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
8
|
+
last_response.should be_ok
|
9
|
+
User.is_exist?(params[:attributes][:login]).should == true
|
10
|
+
|
11
|
+
#set up two users with data for the same source
|
12
|
+
params2 = {:app_id => APP_NAME,:user_id => 'testuser1'}
|
13
|
+
params3 = {:app_id => APP_NAME,:user_id => 'testuser'}
|
14
|
+
time = Time.now.to_i
|
15
|
+
s = Source.load('SampleAdapter', params2)
|
16
|
+
s.read_state.refresh_time = time
|
17
|
+
s2 = Source.load('SampleAdapter', params3)
|
18
|
+
s2.read_state.refresh_time = time
|
19
|
+
set_state(s.docname(:delete) => {'4'=>@product4})
|
20
|
+
set_state(s2.docname(:delete) => {'4'=>@product4})
|
21
|
+
verify_result(s.docname(:delete) => {'4'=>@product4})
|
22
|
+
verify_result(s2.docname(:delete) => {'4'=>@product4})
|
23
|
+
|
24
|
+
delete "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
25
|
+
last_response.should be_ok
|
26
|
+
verify_result(s.docname(:delete) => {})
|
27
|
+
verify_result(s2.docname(:delete) => {'4'=>@product4})
|
28
|
+
s.load_read_state.should == nil
|
29
|
+
s2.load_read_state.refresh_time.should == time
|
30
|
+
User.is_exist?(params[:attributes][:login]).should == false
|
31
|
+
App.load(test_app_name).users.members.should == ["testuser"]
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should delete user and print deprecation warning with the old route" do
|
35
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
36
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
9
37
|
last_response.should be_ok
|
10
38
|
User.is_exist?(params[:attributes][:login]).should == true
|
11
39
|
|
@@ -23,8 +51,9 @@ describe "RhoconnectApiDeleteUser" do
|
|
23
51
|
verify_result(s2.docname(:delete) => {'4'=>@product4})
|
24
52
|
|
25
53
|
|
26
|
-
post "/api/
|
54
|
+
post "/api/delete_user", {:user_id => params[:attributes][:login]}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
27
55
|
last_response.should be_ok
|
56
|
+
last_response.headers['Warning'].index('deprecated').should_not == nil
|
28
57
|
verify_result(s.docname(:delete) => {})
|
29
58
|
verify_result(s2.docname(:delete) => {'4'=>@product4})
|
30
59
|
s.load_read_state.should == nil
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
|
+
|
3
|
+
describe "RhoconnectApiListUserClients" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
|
+
it "should list user's clients" do
|
6
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u_fields[:login]}/clients", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
7
|
+
res = JSON.parse(last_response.body)
|
8
|
+
res.is_a?(Array).should == true
|
9
|
+
res.size.should == 1
|
10
|
+
res[0].is_a?(String) == true
|
11
|
+
res[0].length.should == 32
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should list user's clients with old route and show deprecation warning" do
|
15
|
+
post "/api/list_clients", {:api_token => @api_token,
|
16
|
+
:user_id => @u_fields[:login]}
|
17
|
+
res = JSON.parse(last_response.body)
|
18
|
+
res.is_a?(Array).should == true
|
19
|
+
res.size.should == 1
|
20
|
+
res[0].is_a?(String) == true
|
21
|
+
res[0].length.should == 32
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should handle empty client's list" do
|
25
|
+
@u.clients.delete(@c.id)
|
26
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u_fields[:login]}/clients", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
27
|
+
JSON.parse(last_response.body).should == []
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
|
+
|
3
|
+
describe "RhoconnectApiListSourceDocs" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
|
+
it "should list of shared source documents" do
|
6
|
+
sourcename = "SimpleAdapter"
|
7
|
+
user_id = '*'
|
8
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users/#{user_id}/sources/#{sourcename}/docnames", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
9
|
+
JSON.parse(last_response.body).should == {
|
10
|
+
"md"=>"source:application:__shared__:SimpleAdapter:md",
|
11
|
+
"errors"=>"source:application:__shared__:SimpleAdapter:errors",
|
12
|
+
"md_size"=>"source:application:__shared__:SimpleAdapter:md_size",
|
13
|
+
"md_copy"=>"source:application:__shared__:SimpleAdapter:md_copy"}
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should list of shared source documents with old route and deprecation warning" do
|
17
|
+
post "/api/list_source_docs", {:source_id => "SimpleAdapter", :user_id => '*'}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
18
|
+
JSON.parse(last_response.body).should == {
|
19
|
+
"md"=>"source:application:__shared__:SimpleAdapter:md",
|
20
|
+
"errors"=>"source:application:__shared__:SimpleAdapter:errors",
|
21
|
+
"md_size"=>"source:application:__shared__:SimpleAdapter:md_size",
|
22
|
+
"md_copy"=>"source:application:__shared__:SimpleAdapter:md_copy"}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should list user source documents" do
|
26
|
+
sourcename = "SampleAdapter"
|
27
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{sourcename}/docnames", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
28
|
+
JSON.parse(last_response.body).should == {
|
29
|
+
"md"=>"source:application:testuser:SampleAdapter:md",
|
30
|
+
"errors"=>"source:application:testuser:SampleAdapter:errors",
|
31
|
+
"md_size"=>"source:application:testuser:SampleAdapter:md_size",
|
32
|
+
"md_copy"=>"source:application:testuser:SampleAdapter:md_copy"}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -3,24 +3,23 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
|
|
3
3
|
describe "RhoconnectApiListUsers" do
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should list users" do
|
6
|
-
params = {:
|
7
|
-
|
8
|
-
post "/api/user/create_user", params
|
6
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
7
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
9
8
|
last_response.should be_ok
|
10
|
-
|
9
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
11
10
|
JSON.parse(last_response.body).sort.should == ["testuser", "testuser1"].sort
|
12
11
|
end
|
13
12
|
|
14
13
|
it "should handle empty user's list" do
|
15
14
|
@a.delete; @a = App.create(@a_fields)
|
16
|
-
|
15
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
17
16
|
JSON.parse(last_response.body).should == []
|
18
17
|
end
|
19
18
|
|
20
19
|
it "should show the deprecation warning on /api/list users" do
|
21
20
|
params = {:api_token => @api_token,
|
22
21
|
:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
23
|
-
post "/
|
22
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params
|
24
23
|
last_response.should be_ok
|
25
24
|
post "/api/list_users", {:api_token => @api_token}
|
26
25
|
JSON.parse(last_response.body).sort.should == ["testuser", "testuser1"].sort
|
@@ -3,20 +3,18 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
|
|
3
3
|
describe "RhoconnectApiPing" do
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should do ping synchronously" do
|
6
|
-
params = {"user_id" => @u.id, "
|
7
|
-
"sources" => [@s.name], "message" => 'hello world',
|
6
|
+
params = {"user_id" => @u.id, "sources" => [@s.name], "message" => 'hello world',
|
8
7
|
"vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
|
9
8
|
PingJob.should_receive(:perform).once.with(params)
|
10
|
-
post "/
|
9
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users/ping", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
11
10
|
last_response.should be_ok
|
12
11
|
end
|
13
12
|
|
14
13
|
it "should do ping asynchronously" do
|
15
|
-
params = {"user_id" => @u.id, "
|
16
|
-
"async" => "true","sources" => [@s.name], "message" => 'hello world',
|
14
|
+
params = {"user_id" => @u.id, "async" => "true","sources" => [@s.name], "message" => 'hello world',
|
17
15
|
"vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
|
18
16
|
PingJob.should_receive(:enqueue).once.with(params)
|
19
|
-
post "/
|
17
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users/ping", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
20
18
|
last_response.should be_ok
|
21
19
|
end
|
22
20
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
|
+
|
3
|
+
describe "RhoconnectApiShowUser" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
|
+
it "should show user" do
|
6
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
7
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
8
|
+
last_response.should be_ok
|
9
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
10
|
+
last_response.should be_ok
|
11
|
+
JSON.parse(last_response.body).should include({"name"=>"login", "value"=>"testuser1", "type"=>"string"})
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -3,8 +3,18 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
|
|
3
3
|
describe "RhoconnectApiUpdateUser" do
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should update user successfully" do
|
6
|
-
|
7
|
-
|
6
|
+
login = 'rhoadmin'
|
7
|
+
put "/rc/#{Rhoconnect::API_VERSION}/users/#{login}", {:attributes => {:new_password => '123'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
8
|
+
last_response.should be_ok
|
9
|
+
user = User.authenticate('rhoadmin','123')
|
10
|
+
user.login.should == 'rhoadmin'
|
11
|
+
user.admin.should == 1
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should update user successfully with old route and print deprecation warning" do
|
15
|
+
login = 'rhoadmin'
|
16
|
+
post "/api/update_user", {:user_id => login,
|
17
|
+
:attributes => {:new_password => '123'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
8
18
|
last_response.should be_ok
|
9
19
|
user = User.authenticate('rhoadmin','123')
|
10
20
|
user.login.should == 'rhoadmin'
|
@@ -12,20 +22,28 @@ describe "RhoconnectApiUpdateUser" do
|
|
12
22
|
end
|
13
23
|
|
14
24
|
it "should fail to update user with wrong attributes" do
|
15
|
-
|
16
|
-
|
25
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
26
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
27
|
+
last_response.should be_ok
|
28
|
+
User.is_exist?(params[:attributes][:login]).should == true
|
29
|
+
|
30
|
+
put "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {:attributes => {:missingattrib => '123'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
17
31
|
last_response.status.should == 500
|
18
32
|
last_response.body.match('undefined method').should_not be_nil
|
19
33
|
end
|
20
34
|
|
21
35
|
it "should not update login attribute for user" do
|
22
|
-
|
23
|
-
|
36
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
37
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
24
38
|
last_response.should be_ok
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
39
|
+
User.is_exist?(params[:attributes][:login]).should == true
|
40
|
+
|
41
|
+
put "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {:attributes => {:new_password => '123', :login => 'someotheruser1'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
42
|
+
last_response.should be_ok
|
43
|
+
user = User.authenticate('testuser1','123')
|
44
|
+
user.login.should == 'testuser1'
|
45
|
+
user.admin.should_not == 1
|
46
|
+
User.is_exist?('someotheruser1').should == false
|
29
47
|
end
|
30
48
|
end
|
31
49
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
|
+
|
3
|
+
describe "RhoconnectApiUserGetDbDoc" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
|
+
it "should get user's db document by doc key and data" do
|
6
|
+
data = {'1' => {'foo' => 'bar'}}
|
7
|
+
dockey = 'myuserdoc'
|
8
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
9
|
+
last_response.should be_ok
|
10
|
+
|
11
|
+
get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
12
|
+
last_response.should be_ok
|
13
|
+
JSON.parse(last_response.body).should == data
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
|
+
|
3
|
+
describe "RhoconnectApiUserSetDbDoc" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
|
+
it "should set user's db document by doc key and data" do
|
6
|
+
data = {'1' => {'foo' => 'bar'}}
|
7
|
+
dockey = 'myuserdoc'
|
8
|
+
sdocname = @s2.docname(dockey)
|
9
|
+
|
10
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
11
|
+
last_response.should be_ok
|
12
|
+
verify_result(sdocname => data)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should append data to the user's db document by doc name and data" do
|
16
|
+
data = {'1' => {'foo' => 'bar'}}
|
17
|
+
data2 = {'2' => {'foo1' => 'bar1'}}
|
18
|
+
data3 = data.merge(data2)
|
19
|
+
dockey = 'abc:abc'
|
20
|
+
sdocname = @s2.docname(dockey)
|
21
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
22
|
+
last_response.should be_ok
|
23
|
+
verify_result(sdocname => data)
|
24
|
+
|
25
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data2, :append => true}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
26
|
+
last_response.should be_ok
|
27
|
+
verify_result(sdocname => data3)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should error out in ateempt to set a db doc for a non-existent user" do
|
31
|
+
data = {'1' => {'foo' => 'bar'}}
|
32
|
+
data2 = {'2' => {'foo1' => 'bar1'}}
|
33
|
+
data3 = data.merge(data2)
|
34
|
+
dockey = 'abc:abc'
|
35
|
+
sdocname = @s2.docname(dockey)
|
36
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users/invalid_user/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
37
|
+
last_response.status.should == 500
|
38
|
+
last_response.should_not be_ok
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
:sources:
|
2
2
|
SampleAdapter:
|
3
3
|
:poll_interval: 300
|
4
|
+
:priority: 1
|
4
5
|
SimpleAdapter:
|
5
6
|
:poll_interval: 600
|
6
7
|
partition_type: 'app'
|
7
8
|
FixedSchemaAdapter:
|
8
9
|
:poll_interval: 300
|
10
|
+
:priority: 5
|
9
11
|
sync_type: 'incremental'
|
10
12
|
belongs_to:
|
11
13
|
- brand: 'SampleAdapter'
|
@@ -19,7 +21,6 @@
|
|
19
21
|
:bulk_sync_poll_interval: 3600
|
20
22
|
:redis: localhost:6379
|
21
23
|
:syncserver: http://localhost:9292/application/
|
22
|
-
:api_token: b6f22608fa8b4acf84e844808845e2fe
|
23
24
|
:test:
|
24
25
|
:licensefile: settings/license.key
|
25
26
|
:iphonecertfile: settings/apple_fake_cert.pem
|
@@ -30,6 +31,7 @@
|
|
30
31
|
:redis: localhost:6379
|
31
32
|
:syncserver: http://localhost:9292/application/
|
32
33
|
:api_token: b6f22608fa8b4acf84e844808845e2fe
|
34
|
+
:push_server: http://user:pwd@localhost:8675
|
33
35
|
:cookie_expire: 9999999
|
34
36
|
:poll_interval_default: 201
|
35
37
|
:production:
|
@@ -59,6 +59,19 @@ describe "BulkData" do
|
|
59
59
|
File.join(@a_fields[:name],@a_fields[:name])
|
60
60
|
end
|
61
61
|
|
62
|
+
it "should have ordered sources list by priority" do
|
63
|
+
data = BulkData.create(:name => bulk_data_docname(@a.id,@u.id),
|
64
|
+
:state => :inprogress,
|
65
|
+
:app_id => @a.id,
|
66
|
+
:user_id => @u.id,
|
67
|
+
:sources => @a.partition_sources(:user, @u.id))
|
68
|
+
|
69
|
+
data.sources[0, -1].should == ["SampleAdapter", "FixedSchemaAdapter"]
|
70
|
+
p1 = Source.load("SampleAdapter", {:app_id => data.app_id, :user_id => data.user_id}).priority
|
71
|
+
p2 = Source.load("FixedSchemaAdapter", {:app_id => data.app_id, :user_id => data.user_id}).priority
|
72
|
+
p1.should < p2
|
73
|
+
end
|
74
|
+
|
62
75
|
it "should process_sources for bulk data" do
|
63
76
|
current = Time.now.to_i
|
64
77
|
@s.read_state.refresh_time = current
|
data/spec/client_sync_spec.rb
CHANGED
@@ -28,8 +28,7 @@ describe "ClientSync" do
|
|
28
28
|
@c.source_name = 'Product'
|
29
29
|
@cs1 = ClientSync.new(@s2,@c,2)
|
30
30
|
|
31
|
-
@cs1.send_cud.should == [{'version'=>ClientSync::
|
32
|
-
{'token'=>@c.get_value(:page_token)},
|
31
|
+
@cs1.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
|
33
32
|
{'count'=>data.size},{'progress_count'=>0},
|
34
33
|
{'total_count'=>data.size},expected]
|
35
34
|
|
@@ -89,8 +88,7 @@ describe "ClientSync" do
|
|
89
88
|
expected = {'insert'=>data}
|
90
89
|
set_test_data('test_db_storage',data)
|
91
90
|
|
92
|
-
@cs.send_cud.should == [{'version'=>ClientSync::
|
93
|
-
{'token'=>@c.get_value(:page_token)},
|
91
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
|
94
92
|
{'count'=>data.size},{'progress_count'=>0},
|
95
93
|
{'total_count'=>data.size},expected]
|
96
94
|
verify_result(@cs.client.docname(:page) => data,
|
@@ -103,8 +101,7 @@ describe "ClientSync" do
|
|
103
101
|
expected = {'insert'=>data}
|
104
102
|
set_test_data('test_db_storage',data)
|
105
103
|
@s.pass_through = 'true'
|
106
|
-
@cs.send_cud.should == [{'version'=>ClientSync::
|
107
|
-
{'token'=>@c.get_value(:page_token)},
|
104
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
|
108
105
|
{'count'=>data.size},{'progress_count'=>0},
|
109
106
|
{'total_count'=>data.size},expected]
|
110
107
|
verify_result(@cs.client.docname(:page) => {},
|
@@ -116,8 +113,7 @@ describe "ClientSync" do
|
|
116
113
|
expected = {}
|
117
114
|
#set_test_data('test_db_storage',data)
|
118
115
|
@s.pass_through = 'true'
|
119
|
-
@cs.send_cud.should == [{'version'=>ClientSync::
|
120
|
-
{'token'=>""},
|
116
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>""},
|
121
117
|
{'count'=>data.size},{'progress_count'=>0},
|
122
118
|
{'total_count'=>data.size},expected]
|
123
119
|
verify_result(@cs.client.docname(:page) => {},
|
@@ -128,14 +124,13 @@ describe "ClientSync" do
|
|
128
124
|
msg = "Error during query"
|
129
125
|
data = {'1'=>@product1,'2'=>@product2}
|
130
126
|
set_test_data('test_db_storage',data,msg,'query error')
|
131
|
-
@cs.send_cud.should == [{
|
132
|
-
{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
|
127
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
|
133
128
|
{"source-error"=>{"query-error"=>{"message"=>msg}}}]
|
134
129
|
end
|
135
130
|
|
136
131
|
it "should return login errors in send cud" do
|
137
132
|
@u.login = nil
|
138
|
-
@cs.send_cud.should == [{
|
133
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
|
139
134
|
{"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
140
135
|
{'source-error'=>{"login-error"=>{"message"=>"Error logging in"}}}]
|
141
136
|
end
|
@@ -143,8 +138,7 @@ describe "ClientSync" do
|
|
143
138
|
it "should return logoff errors in send cud" do
|
144
139
|
msg = "Error logging off"
|
145
140
|
set_test_data('test_db_storage',{},msg,'logoff error')
|
146
|
-
@cs.send_cud.should == [{
|
147
|
-
{"token"=>@c.get_value(:page_token)},
|
141
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
|
148
142
|
{"count"=>1}, {"progress_count"=>0}, {"total_count"=>1},
|
149
143
|
{"source-error"=>{"logoff-error"=>{"message"=>msg}},
|
150
144
|
"insert"=>{ERROR=>{"name"=>"logoff error", "an_attribute"=>msg}}}]
|
@@ -159,8 +153,7 @@ describe "ClientSync" do
|
|
159
153
|
data = {'1'=>@product1,'2'=>@product2}
|
160
154
|
expected = {'insert'=>data}
|
161
155
|
set_test_data('test_db_storage',data)
|
162
|
-
@cs.send_cud.should == [{'version'=>ClientSync::
|
163
|
-
{'token'=>@c.get_value(:page_token)},
|
156
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
|
164
157
|
{'count'=>data.size},{'progress_count'=>0},
|
165
158
|
{'total_count'=>data.size},expected]
|
166
159
|
verify_result(@cs.client.docname(:page) => data,
|
@@ -172,14 +165,13 @@ describe "ClientSync" do
|
|
172
165
|
msg = "Error during query"
|
173
166
|
data = {'1'=>@product1,'2'=>@product2}
|
174
167
|
set_test_data('test_db_storage',data,msg,'query error')
|
175
|
-
@cs.send_cud.should == [{
|
176
|
-
{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
|
168
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
|
177
169
|
{"source-error"=>{"query-error"=>{"message"=>msg}}}]
|
178
170
|
end
|
179
171
|
|
180
172
|
it "should return login errors in send cud" do
|
181
173
|
@u.login = nil
|
182
|
-
@cs.send_cud.should == [{
|
174
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
|
183
175
|
{"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
184
176
|
{'source-error'=>{"login-error"=>{"message"=>"Error logging in"}}}]
|
185
177
|
end
|
@@ -187,8 +179,7 @@ describe "ClientSync" do
|
|
187
179
|
it "should return logoff errors in send cud" do
|
188
180
|
msg = "Error logging off"
|
189
181
|
set_test_data('test_db_storage',{},msg,'logoff error')
|
190
|
-
@cs.send_cud.should == [{
|
191
|
-
{"token"=>@c.get_value(:page_token)},
|
182
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
|
192
183
|
{"count"=>1}, {"progress_count"=>0}, {"total_count"=>1},
|
193
184
|
{"source-error"=>{"logoff-error"=>{"message"=>msg}},
|
194
185
|
"insert"=>{ERROR=>{"name"=>"logoff error", "an_attribute"=>msg}}}]
|
@@ -211,8 +202,7 @@ describe "ClientSync" do
|
|
211
202
|
error_objs = add_error_object({},"Error delete record")
|
212
203
|
op_data = {'delete'=>error_objs}
|
213
204
|
@cs.receive_cud(op_data)
|
214
|
-
@cs.send_cud.should == [{
|
215
|
-
{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
205
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
216
206
|
{"delete-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>error_objs[ERROR]}}]
|
217
207
|
end
|
218
208
|
|
@@ -221,12 +211,10 @@ describe "ClientSync" do
|
|
221
211
|
error_objs = add_error_object({},"Error delete record")
|
222
212
|
op_data = {'delete'=>error_objs}
|
223
213
|
@cs.receive_cud(op_data)
|
224
|
-
@cs.send_cud.should == [{
|
225
|
-
{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
214
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
226
215
|
{"delete-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>error_objs[ERROR]}}]
|
227
216
|
verify_result(@c.docname(:delete_errors) => {})
|
228
|
-
@cs.send_cud.should == [{
|
229
|
-
{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},{}]
|
217
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},{}]
|
230
218
|
end
|
231
219
|
|
232
220
|
|
@@ -295,7 +283,7 @@ describe "ClientSync" do
|
|
295
283
|
def search_and_verify_res(params)
|
296
284
|
res = @cs.search(params)
|
297
285
|
token = @c.get_value(:search_token)
|
298
|
-
res[0]['version'].should == ClientSync::
|
286
|
+
res[0]['version'].should == ClientSync::SYNC_VERSION
|
299
287
|
res[1]['token'].should == token
|
300
288
|
res[2]['source'].should == @s.name
|
301
289
|
res[3]['count'].should == 1
|
@@ -307,7 +295,7 @@ describe "ClientSync" do
|
|
307
295
|
set_state('test_db_storage' => @data)
|
308
296
|
res = @cs.search(params)
|
309
297
|
token = @c.get_value(:search_token)
|
310
|
-
res.should == [{'version'=>ClientSync::
|
298
|
+
res.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
|
311
299
|
{'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
|
312
300
|
verify_result(@c.docname(:search) => {'1'=>@product1},
|
313
301
|
@c.docname(:search_errors) => {})
|
@@ -318,7 +306,7 @@ describe "ClientSync" do
|
|
318
306
|
set_state('test_db_storage' => @data)
|
319
307
|
res = @cs.search(nil)
|
320
308
|
token = @c.get_value(:search_token)
|
321
|
-
res.should == [{'version'=>ClientSync::
|
309
|
+
res.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
|
322
310
|
{'source'=>@s.name},{'count'=>@data.size},{'insert'=>@data}]
|
323
311
|
verify_result(@c.docname(:search) => @data,
|
324
312
|
@c.docname(:search_errors) => {})
|
@@ -371,8 +359,7 @@ describe "ClientSync" do
|
|
371
359
|
@source = @s
|
372
360
|
set_state({@c.docname(:search_page) => {'1'=>@product1}})
|
373
361
|
token = compute_token @cs.client.docname(:search_token)
|
374
|
-
@cs.search({:resend => true,:token => token}).should == [{'version'=>ClientSync::
|
375
|
-
{'token'=>token},{'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
|
362
|
+
@cs.search({:resend => true,:token => token}).should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},{'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
|
376
363
|
verify_result(@c.docname(:search_page) => {'1'=>@product1},
|
377
364
|
@c.docname(:search_errors) => {},
|
378
365
|
@cs.client.docname(:search_token) => token)
|
@@ -395,8 +382,7 @@ describe "ClientSync" do
|
|
395
382
|
@cs.search(
|
396
383
|
{:token => 'abc',
|
397
384
|
:search => {'name' => 'iPhone'}}
|
398
|
-
).should == [{'version'=>ClientSync::
|
399
|
-
{'source'=>@s.name},{'search-error'=>{'search-error'=>
|
385
|
+
).should == [{'version'=>ClientSync::SYNC_VERSION},{'source'=>@s.name},{'search-error'=>{'search-error'=>
|
400
386
|
{'message'=>"Search error - invalid token"}}}]
|
401
387
|
verify_result(@c.docname(:search) => {},
|
402
388
|
@c.docname(:search_errors) => {},
|
@@ -408,7 +394,7 @@ describe "ClientSync" do
|
|
408
394
|
set_state('test_db_storage' => @data)
|
409
395
|
res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
|
410
396
|
token = Store.get_value(@cs.client.docname(:search_token))
|
411
|
-
res.should == [[{'version'=>ClientSync::
|
397
|
+
res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
|
412
398
|
{'source'=>sources[0]['name']},{'count'=>1},{'insert'=>{'1'=>@product1}}]]
|
413
399
|
verify_result(@c.docname(:search) => {'1'=>@product1},
|
414
400
|
@c.docname(:search_errors) => {})
|
@@ -420,7 +406,7 @@ describe "ClientSync" do
|
|
420
406
|
@s.pass_through = 'true'
|
421
407
|
res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
|
422
408
|
token = Store.get_value(@cs.client.docname(:search_token))
|
423
|
-
res.should == [[{'version'=>ClientSync::
|
409
|
+
res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
|
424
410
|
{'source'=>sources[0]['name']},{'count'=>1},{'insert'=>{'1'=>@product1}}]]
|
425
411
|
verify_result(@c.docname(:search) => {},
|
426
412
|
@c.docname(:search_errors) => {})
|
@@ -432,8 +418,7 @@ describe "ClientSync" do
|
|
432
418
|
error = set_test_data('test_db_storage',@data,msg,'search error')
|
433
419
|
res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
|
434
420
|
token = Store.get_value(@cs.client.docname(:search_token))
|
435
|
-
res.should == [[{'version'=>ClientSync::
|
436
|
-
{'source'=>sources[0]['name']},{'search-error'=>{'search-error'=>{'message'=>msg}}}]]
|
421
|
+
res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'source'=>sources[0]['name']},{'search-error'=>{'search-error'=>{'message'=>msg}}}]]
|
437
422
|
verify_result(@c.docname(:search) => {})
|
438
423
|
end
|
439
424
|
|
@@ -443,7 +428,7 @@ describe "ClientSync" do
|
|
443
428
|
msg = "Error logging in"
|
444
429
|
error = set_test_data('test_db_storage',@data,msg,'search error')
|
445
430
|
ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}}).should == [
|
446
|
-
[{'version'=>ClientSync::
|
431
|
+
[{'version'=>ClientSync::SYNC_VERSION},{'source'=>sources[0]['name']},
|
447
432
|
{'search-error'=>{'login-error'=>{'message'=>msg}}}]]
|
448
433
|
verify_result(@c.docname(:search) => {},
|
449
434
|
@c.docname(:search_token) => nil)
|
@@ -455,7 +440,7 @@ describe "ClientSync" do
|
|
455
440
|
res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
|
456
441
|
@c.source_name = 'SampleAdapter'
|
457
442
|
token = Store.get_value(@c.docname(:search_token))
|
458
|
-
res.sort.should == [[{
|
443
|
+
res.sort.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
|
459
444
|
{"source"=>"SampleAdapter"},{"count"=>1},{"insert"=>{'1'=>@product1}}],[]].sort
|
460
445
|
end
|
461
446
|
|
@@ -467,9 +452,9 @@ describe "ClientSync" do
|
|
467
452
|
token = Store.get_value(@c.docname(:search_token))
|
468
453
|
@c.source_name = 'SampleAdapter'
|
469
454
|
token1 = Store.get_value(@c.docname(:search_token))
|
470
|
-
res.should == [[{
|
455
|
+
res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
|
471
456
|
{"source"=>"SimpleAdapter"},{"count"=>1},{"insert"=>{'obj'=>{'foo'=>'bar'}}}],
|
472
|
-
[{
|
457
|
+
[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token1},{"source"=>"SampleAdapter"},
|
473
458
|
{"count"=>1}, {"insert"=>{'1'=>@product1}}]]
|
474
459
|
end
|
475
460
|
|
@@ -507,8 +492,7 @@ describe "ClientSync" do
|
|
507
492
|
Store.get_data(@s.docname(:md)).should == @data
|
508
493
|
Store.put_value(@s.docname(:md_size),@data.size)
|
509
494
|
|
510
|
-
|
511
|
-
progress_count.to_i.should == 0
|
495
|
+
total_count, res = @cs.compute_page
|
512
496
|
total_count.to_i.should == 3
|
513
497
|
res.each do |key, value|
|
514
498
|
@data.has_key?(key).should == true
|
@@ -565,10 +549,10 @@ describe "ClientSync" do
|
|
565
549
|
params = {'name' => 'iPhone'}
|
566
550
|
@cs.send_cud(nil,params)
|
567
551
|
token = @c.get_value(:page_token)
|
568
|
-
@cs.send_cud.should == [{
|
552
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
|
569
553
|
{"count"=>1}, {"progress_count"=>0},{"total_count"=>1},{'insert' => expected}]
|
570
|
-
@cs.send_cud(token).should == [{
|
571
|
-
{"count"=>0}, {"progress_count"=>
|
554
|
+
@cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
|
555
|
+
{"count"=>0}, {"progress_count"=>0}, {"total_count"=>1}, {}]
|
572
556
|
Store.get_data(@cs.client.docname(:page)).should == {}
|
573
557
|
@c.get_value(:page_token).should be_nil
|
574
558
|
end
|
@@ -580,7 +564,7 @@ describe "ClientSync" do
|
|
580
564
|
mock_metadata_method([SampleAdapter]) do
|
581
565
|
result = @cs.send_cud
|
582
566
|
token = @c.get_value(:page_token)
|
583
|
-
result.should == [{
|
567
|
+
result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
|
584
568
|
{"count"=>1}, {"progress_count"=>0},{"total_count"=>1},
|
585
569
|
{'metadata'=>metadata,'insert'=>expected}]
|
586
570
|
@c.get_value(:metadata_page).should == metadata
|
@@ -593,7 +577,7 @@ describe "ClientSync" do
|
|
593
577
|
mock_metadata_method([SampleAdapter]) do
|
594
578
|
result = @cs.send_cud
|
595
579
|
token = @c.get_value(:page_token)
|
596
|
-
@cs.send_cud.should == [{
|
580
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
|
597
581
|
{"count"=>1}, {"progress_count"=>0},{"total_count"=>1},
|
598
582
|
{'metadata'=>"{\"foo\":\"bar\"}",'insert'=>expected}]
|
599
583
|
end
|
@@ -605,8 +589,8 @@ describe "ClientSync" do
|
|
605
589
|
mock_metadata_method([SampleAdapter]) do
|
606
590
|
result = @cs.send_cud
|
607
591
|
token = @c.get_value(:page_token)
|
608
|
-
@cs.send_cud(token).should == [{
|
609
|
-
{"count"=>0}, {"progress_count"=>
|
592
|
+
@cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
|
593
|
+
{"count"=>0}, {"progress_count"=>0},{"total_count"=>1},{}]
|
610
594
|
@c.get_value(:metadata_page).should be_nil
|
611
595
|
end
|
612
596
|
end
|
@@ -617,7 +601,7 @@ describe "ClientSync" do
|
|
617
601
|
mock_schema_method([SampleAdapter]) do
|
618
602
|
result = @cs.send_cud
|
619
603
|
token = @c.get_value(:page_token)
|
620
|
-
result.should == [{
|
604
|
+
result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
|
621
605
|
{"count"=>1}, {"progress_count"=>0},{"total_count"=>1},{'insert'=>expected}]
|
622
606
|
@c.get_value(:schema_sha1).should == sha1
|
623
607
|
end
|
@@ -628,7 +612,7 @@ describe "ClientSync" do
|
|
628
612
|
@c.put_value(:schema_sha1,'foo')
|
629
613
|
result = @cs.send_cud
|
630
614
|
token = @c.get_value(:page_token)
|
631
|
-
result.should == [{
|
615
|
+
result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
|
632
616
|
{"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{'schema-changed'=>'true'}]
|
633
617
|
@c.get_value(:schema_page).should == sha1
|
634
618
|
@c.get_value(:schema_sha1).should == sha1
|
@@ -640,7 +624,7 @@ describe "ClientSync" do
|
|
640
624
|
@c.put_value(:schema_sha1,'foo')
|
641
625
|
result = @cs.send_cud
|
642
626
|
token = @c.get_value(:page_token)
|
643
|
-
@cs.send_cud.should == [{
|
627
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
|
644
628
|
{"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{'schema-changed'=>'true'}]
|
645
629
|
@c.get_value(:schema_page).should == sha1
|
646
630
|
@c.get_value(:schema_sha1).should == sha1
|
@@ -652,7 +636,7 @@ describe "ClientSync" do
|
|
652
636
|
@c.put_value(:schema_sha1,'foo')
|
653
637
|
result = @cs.send_cud
|
654
638
|
token = @c.get_value(:page_token)
|
655
|
-
@cs.send_cud(token).should == [{
|
639
|
+
@cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
|
656
640
|
{"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{}]
|
657
641
|
@c.get_value(:schema_page).should be_nil
|
658
642
|
@c.get_value(:schema_sha1).should == sha1
|
@@ -671,7 +655,7 @@ describe "ClientSync" do
|
|
671
655
|
@c.put_value(:schema_sha1,'foo')
|
672
656
|
result = @cs.send_cud
|
673
657
|
token = @c.get_value(:page_token)
|
674
|
-
@cs.send_cud(token).should == [{
|
658
|
+
@cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
|
675
659
|
{"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{}]
|
676
660
|
@c.get_value(:schema_page).should be_nil
|
677
661
|
@c.get_value(:schema_sha1).should == sha1
|
@@ -790,15 +774,13 @@ describe "ClientSync" do
|
|
790
774
|
op_data = {operation=>{ERROR=>{'an_attribute'=>msg,'name'=>'wrongname'}}}
|
791
775
|
@cs.receive_cud(op_data)
|
792
776
|
if operation == 'update'
|
793
|
-
@cs.send_cud.should == [{
|
794
|
-
{"token"=>""}, {"count"=>0}, {"progress_count"=>1}, {"total_count"=>1},
|
777
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>1},
|
795
778
|
{
|
796
779
|
"update-rollback"=>{"0_broken_object_id"=>{"price"=>"99.99"}},
|
797
780
|
"#{operation}-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>op_data[operation][ERROR]}
|
798
781
|
}]
|
799
782
|
else
|
800
|
-
@cs.send_cud.should == [{
|
801
|
-
{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
783
|
+
@cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
|
802
784
|
{"#{operation}-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>op_data[operation][ERROR]}}]
|
803
785
|
end
|
804
786
|
end
|