rhoconnect 3.3.4 → 3.3.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
+ ## 3.3.5 (2012-09-20)
2
+ * merge changes from master to fix broken bench script helper
3
+ * ZD-2866 - Issue with Apple Push when User has windows device as one of targeted devices 2 target devices
4
+ * SPR 22764 - Add enqueue method to PingJob and fix specs
5
+
1
6
  ## 3.3.4 (2012-08-28)
2
- * flush_zdata was not properly cleaning the related Redis storage (which led to incorrect CUD queue states)
7
+ * flush_zdata was not properly cleaning the related Redis storage (which led to incorrect CUD queue states)
3
8
 
4
9
  ## 3.3.3 (2012-08-21)
5
10
  * allow selective bulk_sync source parameter to be sent as a comma-separated string
@@ -75,7 +80,7 @@
75
80
  * #28094895 - Zendesk ticket #2354: Bulk sync not updating sources table (fields 'last_inserted_size' and 'backend_refresh_time' now updated)
76
81
  * #28855323 - Bulk Sync Associations from Zendesk ticket #2377
77
82
  * #28576723 - dpkg lock error on Ubuntu install
78
- * #28094895 - Zendesk ticket #2354: Bulk sync not updating sources table (fields 'last_inserted_size' and 'backend_refresh_time' now updated)
83
+ * #28094895 - Zendesk ticket #2354: Bulk sync not updating sources table (fields 'last_inserted_size' and 'backend_refresh_time' now updated)
79
84
  * #28865579 - Async dependencies are not properly initialized on Windows (need to add :mingw_19 to the list of platforms in Gemfile)
80
85
  * Rhoconnect production stack updated to latest stable version of ruby, redis, and nginx: ruby-1.9.3-p194, redis-2.4.12, nginx-1.2.0.
81
86
 
@@ -84,7 +89,7 @@
84
89
  * Async framework is introduced for rubies 1.9.x (no 1.8.7 or JRuby support)
85
90
  * 26384435 - Rhoconnect Linux installer should use ruby-1.9.3-p125 as a default ruby
86
91
  * 27612327 - Bulk Sync Not Returning Errors from Zendesk ticket #2336
87
- * Rhoconnect production stack is updated for full support of async framework (nginx as reverse proxy server, thin app server)
92
+ * Rhoconnect production stack is updated for full support of async framework (nginx as reverse proxy server, thin app server)
88
93
  * #28219647 - Schema Change Error from Zendesk ticket #2353
89
94
  * #28328057 - Feature Request: Adding a Bulk Data Job after_perform hook from Zendesk ticket #2367
90
95
  * #28330213 - Implementing fast_insert/update/delete API
@@ -93,7 +98,7 @@
93
98
  ## 3.1.2 (2012-04-02)
94
99
  * #19297819 - Refactor server middleware loading to be static
95
100
  * #25292219 - Ensure that Store.get_zdata always returns valid array (even if it is empty)
96
- * #26310661 - No test_search
101
+ * #26310661 - No test_search
97
102
  * #26868157 - bug in install.sh in rhoconnect installer
98
103
  * #26384435 - Replace in rhoconnect installer Ruby Enterprise by latest stable Ruby 1.9.3
99
104
  * #27184633 - Fixing error with recursive loading of application.rb in ruby-1.8.7 and ree
@@ -159,11 +164,11 @@
159
164
 
160
165
  ## 3.0.0 (2011-09-30)
161
166
  * #18888077 - implement Redis transactions optimization for push_objects and push_deletes
162
- * added 2 rake tasks (build:rpm and build:deb) to generate packaged software for popular linux servers
163
- (CentOS/Ubuntu). The package includes ruby enterprise, redis and nginx servers, passenger,
164
- and rhoconnect gem with all dependencies
167
+ * added 2 rake tasks (build:rpm and build:deb) to generate packaged software for popular linux servers
168
+ (CentOS/Ubuntu). The package includes ruby enterprise, redis and nginx servers, passenger,
169
+ and rhoconnect gem with all dependencies
165
170
  * #19116273 - created new redis:startbg task for Rhostudio
166
-
171
+
167
172
  ## 3.0.0.rc1 (2011-09-27)
168
173
  * load sqlite3 gem on demand, fixes issue with generator requiring it
169
174
  * #18934311 - create :startbg task for Rhostudio
@@ -185,27 +190,27 @@
185
190
  * #4397476 wrapped login/logoff around cud spec helpers
186
191
  * backtrace logging in source adapter method exceptions
187
192
  * returning string in authenticate instead of true sets the current user login name (Useful for OAuth2)
188
- * #11904353 - fixed broken 'rake console' task, added new 'rhosync' namespace: 'rake rhosync:console'
193
+ * #11904353 - fixed broken 'rake console' task, added new 'rhosync' namespace: 'rake rhosync:console'
189
194
  * #12105115 - removed unnecessary log4r dependency
190
- * added bundler to manage gem's dependencies, migrated from rspec1 to rspec2
191
- * #5687948 - fixed issue "iPhone push specs failed"
192
- * use redis 2.2.14 by default
193
- * added SystemTimer gem dependency (used only on posix systems)
195
+ * added bundler to manage gem's dependencies, migrated from rspec1 to rspec2
196
+ * #5687948 - fixed issue "iPhone push specs failed"
197
+ * use redis 2.2.14 by default
198
+ * added SystemTimer gem dependency (used only on posix systems)
194
199
  * #13616807 - Rake task spec:all fails for enterprise ruby (ree)
195
200
  * #13776713 - Rake -v 0.9.0 breaks rhosync rake tasks
196
- * #14514773 - REST API push_object, push_deletes :md_size count fix
201
+ * #14514773 - REST API push_object, push_deletes :md_size count fix
197
202
  * #5687948 - fixed issue "iPhone push specs failed"
198
203
  * #12854737 - string vs. symbol problem in ruby 1.9 model.rb (contribute to ruby 1.9 support)
199
204
  * #11692191 - ruby 1.9 support
200
205
  * #2020980 - Test on JRuby. Code reworked to fully support JRuby platform.
201
- * #14087743 - Merging the /login and /get_api_token methods.
202
- * #14713569 - Moving all Server REST API calls into namespaces.
206
+ * #14087743 - Merging the /login and /get_api_token methods.
207
+ * #14713569 - Moving all Server REST API calls into namespaces.
203
208
  * #14284841 - Merge ruby_19 branch into master
204
- * #14784949 - Suppress rake -v 0.9.2 warning messages while running tasks.
209
+ * #14784949 - Suppress rake -v 0.9.2 warning messages while running tasks.
205
210
  * #3174947 - RESTful routes for client management
206
211
  * #14968209 - Generated Specs are failing on 2nd generated source
207
212
  * #15270505 - sqlite3 is not listed as a dependency of rhosync gem (3.0.0)
208
- * #15143911 - Schema Changed message from Zendesk ticket #1035 (merge from branch 2-1-stable 2.1.9)
213
+ * #15143911 - Schema Changed message from Zendesk ticket #1035 (merge from branch 2-1-stable 2.1.9)
209
214
  * #14950665 - Benchmark application and libraries: rework REST calls to match new API restful routes.
210
215
  * #14860303 - In bench tests x_domain_session_wrapper middleware not working under ruby 1.9.2.
211
216
  * #15615327 - Rhoconnect migration
@@ -230,7 +235,7 @@
230
235
  * #1018 - added functionality to delete user source data on user delete
231
236
  * updated to rake 0.9.2
232
237
  * #14911833 - Add support for rolling back updates on sync errors
233
-
238
+
234
239
  ## 2.1.7 (2011-05-31)
235
240
  * #14021681 - check for client on client_sync class methods
236
241
  * #14082861 - expose Store.lock timeout to high-level functions
@@ -252,7 +257,7 @@
252
257
  * #13022667 - settings.yml doesn't work for setting external Redis instances
253
258
 
254
259
  ## 2.1.2 (2011-03-18)
255
- * Use server-dir/redis.conf if not found at RedisRunner.prefix (via artemk)
260
+ * Use server-dir/redis.conf if not found at RedisRunner.prefix (via artemk)
256
261
  * #8471337 - switch client user if it is not equal to current_user
257
262
  * Upgrade rest-client dependency which includes cookie escape fix
258
263
  * #10097347 - generate cryptographically secure secret key by default
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rhoconnect (3.3.4)
4
+ rhoconnect (3.3.5)
5
5
  bundler (~> 1.0)
6
6
  json (~> 1.6.0)
7
7
  rake (~> 0.9.2.2)
@@ -28,7 +28,7 @@ GEM
28
28
  mime-types
29
29
  xml-simple
30
30
  backports (2.6.2)
31
- builder (3.0.0)
31
+ builder (3.1.3)
32
32
  cabin (0.4.4)
33
33
  json
34
34
  childprocess (0.3.5)
@@ -41,14 +41,14 @@ GEM
41
41
  crack (0.3.1)
42
42
  daemons (1.1.9)
43
43
  diff-lcs (1.1.3)
44
- eventmachine (1.0.0.rc.4)
45
- excon (0.16.1)
44
+ eventmachine (1.0.0)
45
+ excon (0.16.3)
46
46
  execjs (1.4.0)
47
47
  multi_json (~> 1.0)
48
48
  extlib (0.9.15)
49
49
  ffaker (1.14.0)
50
50
  ffi (1.1.5)
51
- fog (1.5.0)
51
+ fog (1.6.0)
52
52
  builder
53
53
  excon (~> 0.14)
54
54
  formatador (~> 0.2.0)
@@ -59,13 +59,13 @@ GEM
59
59
  nokogiri (~> 1.5.0)
60
60
  ruby-hmac
61
61
  formatador (0.2.3)
62
- fpm (0.4.13)
62
+ fpm (0.4.17)
63
63
  arr-pm (~> 0.0.7)
64
64
  backports (= 2.6.2)
65
65
  cabin (~> 0.4.3)
66
66
  clamp (= 0.3.1)
67
67
  json (= 1.6.6)
68
- highline (1.6.14)
68
+ highline (1.6.15)
69
69
  hike (1.2.1)
70
70
  jasmine (1.2.1)
71
71
  jasmine-core (>= 1.2.0)
@@ -79,6 +79,7 @@ GEM
79
79
  multi_json
80
80
  rainbow
81
81
  sprockets (~> 2)
82
+ jruby-pageant (1.1.1)
82
83
  json (1.6.6)
83
84
  libwebsocket (0.1.5)
84
85
  addressable
@@ -86,7 +87,8 @@ GEM
86
87
  multi_json (1.3.6)
87
88
  net-scp (1.0.4)
88
89
  net-ssh (>= 1.99.1)
89
- net-ssh (2.5.2)
90
+ net-ssh (2.6.0)
91
+ jruby-pageant (>= 1.1.1)
90
92
  nokogiri (1.5.5)
91
93
  rack (1.4.1)
92
94
  rack-fiber_pool (0.9.2)
@@ -130,7 +132,7 @@ GEM
130
132
  rack (~> 1.3, >= 1.3.6)
131
133
  rack-protection (~> 1.2)
132
134
  tilt (~> 1.3, >= 1.3.3)
133
- sprockets (2.4.5)
135
+ sprockets (2.6.0)
134
136
  hike (~> 1.2)
135
137
  multi_json (~> 1.0)
136
138
  rack (~> 1.0)
@@ -149,7 +151,7 @@ GEM
149
151
  uuidtools (2.1.3)
150
152
  vegas (0.1.11)
151
153
  rack (>= 1.0.0)
152
- webmock (1.8.9)
154
+ webmock (1.8.10)
153
155
  addressable (>= 2.2.7)
154
156
  crack (>= 0.1.7)
155
157
  xml-simple (1.1.1)
@@ -72,7 +72,7 @@ module BenchHelpers
72
72
  end
73
73
  sleep rand(timeout)
74
74
  token = JSON.parse(session.last_result.body)[1]['token']
75
- progress_count = JSON.parse(session.last_result.body)[3]['progress_count']
75
+ progress_count = JSON.parse(session.last_result.body)[4]['total_count']
76
76
  return progress_count if token == ''
77
77
 
78
78
  verify_count(session,caller+"\n"+current_line)
@@ -92,7 +92,7 @@ module BenchHelpers
92
92
  verify_links(session,create_objs,caller+"\n"+current_line) if create_objs
93
93
 
94
94
  token = JSON.parse(session.last_result.body)[1]['token']
95
- progress_count = JSON.parse(session.last_result.body)[3]['progress_count']
95
+ progress_count = JSON.parse(session.last_result.body)[4]['total_count']
96
96
  end
97
97
  progress_count
98
98
  end
data/doc/web-console.txt CHANGED
@@ -4,7 +4,7 @@ Web Console
4
4
  Your RhoConnect application exposes a web interface which runs on http://localhost:9292/console/ (port 80 on Windows) by default. You can open the console by running the following in your application directory:
5
5
 
6
6
  :::term
7
- $ rake rhoconnect:web
7
+ $ rhoconnect web
8
8
 
9
9
  To login to the console:
10
10
 
@@ -13,12 +13,16 @@ To login to the console:
13
13
  3. Default username is 'rhoadmin' and the password is empty
14
14
  4. Now you will be presented with a page showing your current license, for example:
15
15
 
16
-
17
- Licensed to Rhomobile on Fri Apr 23 17:20:13 -0700 2010,
16
+
17
+ Licensed to Rhomobile on Fri Apr 23 17:20:13 -0700 2010,
18
18
  available 9 of 10 devices
19
19
 
20
20
  It will also show a link to "Application Users" where you can view users of the system as well as devices they have registered.
21
21
 
22
+ To reset the server, you can click on the "Reset" button at the bottom.
23
+
24
+ **NOTE: Resetting the server will remove all data from redis including registered devices, this cannot be undone.**
25
+
22
26
  If you want to disable this web interface, you can do so by editing the rackup file, config.ru:
23
27
 
24
28
  :::ruby
@@ -21,7 +21,7 @@ module Constants
21
21
  NGINX_URL = "http://nginx.org/download/#{NGINX}.tar.gz"
22
22
  EVENTMACHINE_URL = "https://github.com/rhomobile/eventmachine/tarball/master"
23
23
  URLS = [ REDIS_URL, SQLITE3_URL, NGINX_URL]
24
- GEMS = ["bundler", "thin"] #, foreman"
24
+ GEMS = ["bundler"] # foreman"
25
25
 
26
26
  SUPPORTED_PKG_MGRS = ["apt-get", "yum"]
27
27
  SUPPORTED_WEB_SERVERS = ["apache2", "nginx"]
@@ -3,6 +3,11 @@ require 'rhoconnect/ping'
3
3
  module Rhoconnect
4
4
  module PingJob
5
5
  @queue = :ping
6
+
7
+ # Enqueue a ping job
8
+ def self.enqueue(params)
9
+ Resque.enqueue(PingJob, params)
10
+ end
6
11
 
7
12
  # Perform a ping for all clients registered to a user
8
13
  def self.perform(params)
@@ -52,7 +57,12 @@ module Rhoconnect
52
57
  end
53
58
  if send_push
54
59
  type = client.device_push_type || client.device_type
55
- klass = Object.const_get(camelize(type.downcase))
60
+ klass = nil
61
+ begin
62
+ klass = Object.const_get(camelize(type.downcase))
63
+ rescue Exception => e
64
+ log "Dropping ping request for unsupported platform '#{type}'"
65
+ end
56
66
  if klass
57
67
  params['vibrate'] = params['vibrate'].to_s
58
68
  begin
@@ -50,8 +50,8 @@ module Rhoconnect
50
50
  raise AndroidPingError.new("Android ping error: #{$1 || ''}")
51
51
  else
52
52
  # store new token in redis for future calls
53
- if response[:update_client_auth]
54
- Store.put_value(C2DM_AUTHTOKEN_KEY, response[:update_client_auth])
53
+ if response.headers[:update_client_auth]
54
+ Store.put_value(C2DM_AUTHTOKEN_KEY, response.headers[:update_client_auth])
55
55
  end
56
56
  response.return!(request, result, &block)
57
57
  end
@@ -1,3 +1,3 @@
1
1
  module Rhoconnect
2
- VERSION = '3.3.4'
2
+ VERSION = '3.3.5'
3
3
  end
@@ -5,6 +5,7 @@ describe "RhoconnectApiPing" do
5
5
  it "should do ping synchronously" do
6
6
  params = {"user_id" => @u.id, "sources" => [@s.name], "message" => 'hello world',
7
7
  "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
8
+ PingJob.should respond_to :perform
8
9
  PingJob.should_receive(:perform).once.with(params)
9
10
  post "/rc/#{Rhoconnect::API_VERSION}/users/ping", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
10
11
  last_response.should be_ok
@@ -13,6 +14,8 @@ describe "RhoconnectApiPing" do
13
14
  it "should do ping asynchronously" do
14
15
  params = {"user_id" => @u.id, "async" => "true","sources" => [@s.name], "message" => 'hello world',
15
16
  "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
17
+
18
+ PingJob.should respond_to :enqueue
16
19
  PingJob.should_receive(:enqueue).once.with(params)
17
20
  post "/rc/#{Rhoconnect::API_VERSION}/users/ping", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
18
21
  last_response.should be_ok
@@ -63,6 +63,15 @@ describe "PingJob" do
63
63
  'device_port' => @c.device_port}.merge!(params))
64
64
  PingJob.perform(params)
65
65
  end
66
+
67
+ it "should skip ping for the unknown platform" do
68
+ params = {"user_id" => @u.id, "api_token" => @api_token,
69
+ "sources" => [@s.name], "message" => 'hello world',
70
+ "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3',"phone_id"=>nil}
71
+ @c.device_type = 'unknown_device_type'
72
+ PingJob.should_receive(:log).once.with("Dropping ping request for unsupported platform '#{@c.device_type}'")
73
+ PingJob.perform(params)
74
+ end
66
75
 
67
76
  it "should skip ping for empty device_type" do
68
77
  params = {"user_id" => @u.id, "api_token" => @api_token,
@@ -15,7 +15,7 @@ describe "Ping Android" do
15
15
  result = 'id=0:34234234134254%abc123\n'
16
16
  @response.stub!(:code).and_return(200)
17
17
  @response.stub!(:body).and_return(result)
18
- @response.stub!(:[]).and_return(false)
18
+ @response.stub!(:headers).and_return({})
19
19
  @response.stub!(:return!).and_return(@response)
20
20
  setup_post_yield(@response)
21
21
  Android.ping(@params).body.should == result
@@ -34,7 +34,7 @@ describe "Ping Android" do
34
34
  error = 'Error=QuotaExceeded'
35
35
  @response.stub!(:code).and_return(200)
36
36
  @response.stub!(:body).and_return(error)
37
- @response.stub!(:[]).and_return(nil)
37
+ @response.stub!(:headers).and_return(nil)
38
38
  setup_post_yield(@response)
39
39
  Android.should_receive(:log).twice
40
40
  lambda { Android.ping(@params) }.should raise_error(Android::AndroidPingError, "Android ping error: QuotaExceeded")
@@ -44,7 +44,7 @@ describe "Ping Android" do
44
44
  error = 'Error=BadAuthentication'
45
45
  @response.stub!(:code).and_return(403)
46
46
  @response.stub!(:body).and_return(error)
47
- @response.stub!(:[]).and_return(nil)
47
+ @response.stub!(:headers).and_return({})
48
48
  setup_post_yield(@response)
49
49
  Android.should_receive(:log).twice
50
50
  lambda { Android.ping(@params) }.should raise_error(Android::InvalidAuthToken, "Can not obtain auth token from C2DM service. Make sure that your C2DM credentials are valid.: Error=BadAuthentication")
@@ -54,7 +54,7 @@ describe "Ping Android" do
54
54
  result = "SID=somesid\nAuth=myauthtoken\n"
55
55
  @response.stub!(:code).and_return(200)
56
56
  @response.stub!(:body).and_return(result)
57
- @response.stub!(:[]).and_return(nil)
57
+ @response.stub!(:headers).and_return({})
58
58
  setup_post_yield(@response)
59
59
 
60
60
  Android.get_c2dm_token
@@ -79,7 +79,7 @@ describe "Ping Android" do
79
79
  Store.put_value(Android::C2DM_AUTHTOKEN_KEY, 'ValidAuthToken')
80
80
  @response.stub!(:code).and_return(200)
81
81
  @response.stub!(:body).and_return('')
82
- @response.stub!(:[]).and_return(:update_client_auth => 'abc123')
82
+ @response.stub!(:headers).and_return(:update_client_auth => 'abc123')
83
83
  @response.stub!(:return!).and_return(@response)
84
84
  setup_post_yield(@response)
85
85
  Android.ping(@params)