rhoconnect 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.0.2 (2011-10-05)
2
+ * #19143845 - support sinatra 1.3.x
3
+
1
4
  ## 3.0.1 (2011-10-04)
2
5
  * fix to lock in sinatra 1.2.7
3
6
 
data/Gemfile CHANGED
@@ -15,6 +15,7 @@ gem 'sqlite3', ">= 1.3.3", :platforms => [:ruby, :mswin, :mingw]
15
15
 
16
16
  group :development do
17
17
  gem 'fpm', '>= 0.3.8'
18
+ gem 'fog', '>= 1.0.0'
18
19
  gem 'ffaker', '~> 1.8.0'
19
20
  gem 'thor', '>= 0.13.6'
20
21
  gem 'webmock', '~> 1.6.4'
data/Gemfile.lock CHANGED
@@ -1,15 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rhoconnect (3.0.1)
4
+ rhoconnect (3.0.2)
5
5
  bundler (~> 1.0)
6
6
  json (~> 1.5.0)
7
7
  rake (= 0.9.2)
8
8
  redis (>= 2.2.0)
9
- resque (~> 1.17.0)
9
+ resque (~> 1.18.0)
10
10
  rest-client (~> 1.6.1)
11
11
  rubyzip (~> 0.9.4)
12
- sinatra (= 1.2.7)
12
+ sinatra (~> 1.3)
13
13
  templater (~> 1.0.0)
14
14
  uuidtools (>= 2.1.1)
15
15
 
@@ -17,37 +17,45 @@ GEM
17
17
  remote: http://rubygems.org/
18
18
  specs:
19
19
  addressable (2.2.6)
20
- bouncy-castle-java (1.5.0146.1)
20
+ builder (3.0.0)
21
21
  crack (0.3.1)
22
- dbd-jdbc (0.1.4)
23
- dbi (0.4.5)
24
- deprecated (= 2.0.1)
25
- deprecated (2.0.1)
26
22
  diff-lcs (1.1.3)
23
+ excon (0.7.6)
27
24
  extlib (0.9.15)
28
25
  ffaker (1.8.1)
26
+ fog (1.0.0)
27
+ builder
28
+ excon (~> 0.7.3)
29
+ formatador (~> 0.2.0)
30
+ mime-types
31
+ multi_json (~> 1.0.3)
32
+ net-scp (~> 1.0.4)
33
+ net-ssh (~> 2.1.4)
34
+ nokogiri (~> 1.5.0)
35
+ ruby-hmac
36
+ formatador (0.2.1)
29
37
  fpm (0.3.9)
30
38
  json
31
39
  highline (1.6.2)
32
- jdbc-sqlite3 (3.7.2)
33
- jruby-jars (1.6.4)
34
- jruby-openssl (0.7.4)
35
- bouncy-castle-java
36
- jruby-rack (1.0.10)
37
40
  json (1.5.4)
38
- json (1.5.4-java)
39
41
  mime-types (1.16)
40
- rack (1.3.3)
42
+ multi_json (1.0.3)
43
+ net-scp (1.0.4)
44
+ net-ssh (>= 1.99.1)
45
+ net-ssh (2.1.4)
46
+ nokogiri (1.5.0)
47
+ rack (1.3.4)
48
+ rack-protection (1.1.4)
49
+ rack
41
50
  rack-test (0.6.1)
42
51
  rack (>= 1.0)
43
52
  rake (0.9.2)
44
53
  rcov (0.9.10)
45
- rcov (0.9.10-java)
46
54
  redis (2.2.2)
47
55
  redis-namespace (1.0.3)
48
56
  redis (< 3.0.0)
49
- resque (1.17.1)
50
- json (< 1.6, >= 1.4.6)
57
+ resque (1.18.6)
58
+ multi_json (~> 1.0)
51
59
  redis-namespace (~> 1.0.2)
52
60
  sinatra (>= 0.9.2)
53
61
  vegas (~> 0.1.2)
@@ -61,10 +69,12 @@ GEM
61
69
  rspec-expectations (2.6.0)
62
70
  diff-lcs (~> 1.1.2)
63
71
  rspec-mocks (2.6.0)
72
+ ruby-hmac (0.4.0)
64
73
  rubyzip (0.9.4)
65
- sinatra (1.2.7)
66
- rack (~> 1.1)
67
- tilt (>= 1.2.2, < 2.0)
74
+ sinatra (1.3.1)
75
+ rack (>= 1.3.4, ~> 1.3)
76
+ rack-protection (>= 1.1.2, ~> 1.1)
77
+ tilt (>= 1.3.3, ~> 1.3)
68
78
  sqlite3 (1.3.4)
69
79
  templater (1.0.0)
70
80
  diff-lcs (>= 1.1.2)
@@ -75,23 +85,18 @@ GEM
75
85
  uuidtools (2.1.2)
76
86
  vegas (0.1.8)
77
87
  rack (>= 1.0.0)
78
- warbler (1.3.2)
79
- jruby-jars (>= 1.4.0)
80
- jruby-rack (>= 1.0.0)
81
- rake (>= 0.8.7)
82
- rubyzip (>= 0.9.4)
83
88
  webmock (1.6.4)
84
89
  addressable (> 2.2.5, ~> 2.2)
85
90
  crack (>= 0.1.7)
86
91
 
87
92
  PLATFORMS
88
- java
89
93
  ruby
90
94
 
91
95
  DEPENDENCIES
92
96
  dbd-jdbc (>= 0.1.4)
93
97
  dbi (>= 0.4.5)
94
98
  ffaker (~> 1.8.0)
99
+ fog (>= 1.0.0)
95
100
  fpm (>= 0.3.8)
96
101
  jdbc-sqlite3 (>= 3.7.2)
97
102
  jruby-openssl (>= 0.7.4)
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  load 'tasks/redis.rake'
3
+ load 'installer/utils/nix_installation.rake'
3
4
 
4
5
  require 'bundler'
5
6
  Bundler.setup(:default, :development, :test)
@@ -34,6 +35,7 @@ begin
34
35
  RSpec::Core::RakeTask.new("spec:#{type}") do |t|
35
36
  t.rspec_opts = ["-b", "-c", "-fd"]
36
37
  t.pattern = FileList[TYPES[type]]
38
+ t.rcov = false
37
39
  end
38
40
  end
39
41
 
@@ -91,8 +93,8 @@ end
91
93
 
92
94
  # Debian and RPM package building tasks
93
95
  def build_pkg(dist, arch, deps)
94
- curr_dir = `pwd`.strip
95
- workspace = "#{curr_dir}/pkg/workspace"
96
+ start_dir = `pwd`.strip
97
+ workspace = "#{start_dir}/pkg/workspace"
96
98
  version = Rhoconnect::VERSION
97
99
  description = '"Rhoconnect production environment"'
98
100
  post_install = "#{workspace}/unix-like/post-install.sh"
@@ -129,6 +131,8 @@ def build_pkg(dist, arch, deps)
129
131
  system(fpm_cmd)
130
132
  # Leave no trace...
131
133
  system("rm -rf #{workspace}")
134
+
135
+ Dir.chdir(start_dir)
132
136
  end #build_pkg
133
137
 
134
138
  desc "Build Debian DEB rhoconnect-#{Rhoconnect::VERSION}_all.deb package into the pkg directory"
data/doc/benchmarks.txt CHANGED
@@ -1,10 +1,13 @@
1
1
  RhoConnect Benchmarks
2
2
  ===
3
3
 
4
- Note, these numbers reflect synchronization performance using the rhoconnect bench utility (see the rhoconnect/bench folder for more information).
4
+ Note, these numbers reflect synchronization performance using the rhoconnect bench utilities (see the rhoconnect/bench folder for more information).
5
5
  We will be adding more results as we test across different server environments.
6
6
 
7
-
7
+ ## Single-core Amazon EC2 server environment
8
+
9
+ ### Configuration
10
+
8
11
  Servers configuration (Amazon EC2 'm1.small' instances) :
9
12
 
10
13
  * CPU Units - 1 ECU
@@ -15,7 +18,6 @@ Servers configuration (Amazon EC2 'm1.small' instances) :
15
18
 
16
19
  * Platform - Ubuntu (2.6.38-8-virtual)
17
20
 
18
-
19
21
  Environment (instance #1):
20
22
 
21
23
  * Nginx 1.0.0
@@ -77,7 +79,7 @@ Environment (instance #2):
77
79
  Server instance #1 is running rhoconnect bench applications,
78
80
  the 2nd one executes rhoconnect bench scripts.
79
81
 
80
- ## Bench application #1
82
+ ### Bench application #1 (benchapp)
81
83
  * Simulates creating multiple objects
82
84
 
83
85
  * 100 concurrent users
@@ -100,7 +102,7 @@ Throughput(req/s) : 7.13629650622702
100
102
  Throughput(req/min) : 428.177790373621
101
103
  </pre>
102
104
 
103
- ## Bench application #2
105
+ ### Bench application #2 (blobapp)
104
106
  * Simulates creating multiple objects
105
107
 
106
108
  * 100 concurrent users
@@ -123,7 +125,7 @@ Throughput(req/s) : 7.22833609137099
123
125
  Throughput(req/min): 433.700165482259
124
126
  </pre>
125
127
 
126
- ## Prepare bench applications for running on server #1
128
+ ### Prepare bench applications for running on server #1
127
129
 
128
130
  Go to rhoconnect/bench directory and configure benchapp application:
129
131
 
@@ -149,7 +151,7 @@ running by visiting its web concole, i.e. :
149
151
  http://server_dns_public_name/console/
150
152
  </pre>
151
153
 
152
- ## How to execute bench scripts on server #2
154
+ ### How to execute bench scripts on server #2
153
155
  Before running bench scripts you need configure bench application settings properly.
154
156
 
155
157
  Edit rhoconnect/bench/benchapp/settings/settings.yml and set redis and syncserver properties:
@@ -164,5 +166,107 @@ Do the same for blobapp settings.yml file.
164
166
 
165
167
  Then from rhoconnect/becnh directory execute run_cud_script.sh and run_blob_script.sh scripts respectively.
166
168
 
169
+ ## Multi-core Amazon EC2 server environments
170
+
171
+ ### Configuration
172
+
173
+ Server configurations:
174
+
175
+ * Large (m1.large, 2 cores, 7.5GB memory)
176
+
177
+ * Extra Large (m1.xlarge, 4 cores, 15GB memory)
178
+
179
+ * High-CPU Extra Large (c1.xlarge, 8 cores, 7GB memory)
180
+
181
+ * Platform - Basic 64-bit Amazon Linux AMI 2011.09 (Red Hat based)
182
+
183
+ Software environment:
184
+
185
+ * Nginx 1.0.6
186
+
187
+ * Ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-linux], Ruby Enterprise Edition 2011.03
188
+
189
+ * Passenger 3.0.9
190
+
191
+ * Redis 2.2.14
192
+
193
+ * Rhoconnect 3.0.0
194
+
195
+ All above software are installed on servers by executing the following commands:
196
+ <pre>
197
+ sudo yum install make patch gcc-c++ zlib-devel curl-devel pcre-devel readline-devel openssl-devel
198
+ sudo rpm -i rhoconnect-3.0.0.noarch.rpm
199
+ </pre>
200
+
201
+ ### Tested bench application (benchapp)
202
+
203
+ * Simulates creating multiple objects
204
+
205
+ * 100 concurrent users
206
+
207
+ * 1 device per user
208
+
209
+ * 20 object dataset
210
+
211
+ * each object has 7 attributes
212
+
213
+ ### Prepare bench application for running on servers
167
214
 
215
+ 1. Go to rhoconnect/bench directory and configure benchapp application:
216
+ <pre>
217
+ sudo cp -R benchapp /opt/nginx/html
218
+ cd /opt/nginx/html/benchapp
219
+ sudo /opt/rhoconnect/bin/bundle install --without=test development
220
+ sudo mkdir public
221
+ sudo chown -R nginx:nginx /opt/nginx/html/benchapp
222
+ </pre>
223
+
224
+ 2. Edit '/opt/nginx/conf/conf.d/rhoconnect.conf' file and point root entry to <b>/opt/nginx/html/benchapp/public</b> directory:
225
+ <pre>
226
+ server {
227
+ listen 80;
228
+ root /opt/nginx/html/benchapp/public;
229
+ passenger_enabled on;
230
+ }
231
+ </pre>
232
+
233
+ 3. Start redis and nginx servers:
234
+ <pre>
235
+ sudo /etc/init.d/redis start
236
+ sudo /etc/init.d/nginx start
237
+ </pre>
238
+
239
+ ### Benchmark results for large (2 cores) server
240
+ <pre>
241
+ Request clientcreate : min: 0.0058, max: 1.0360, avg: 0.1138, err: 0, verification err: 0
242
+ Request ack-cud : min: 0.0258, max: 0.1998, avg: 0.0642, err: 0, verification err: 0
243
+ Request clientlogin : min: 0.0056, max: 0.0958, avg: 0.0128, err: 0, verification err: 0
244
+ Request get-cud : min: 0.0234, max: 0.1777, avg: 0.0476, err: 0, verification err: 0
245
+ Request create-object : min: 0.0526, max: 0.3074, avg: 0.1242, err: 0, verification err: 0
246
+ Throughput(req/s) : 8.40951725551376
247
+ Throughput(req/min): 504.571035330826
248
+ </pre>
249
+
250
+ ### Benchmark results for extra large (4 cores) server
251
+ <pre>
252
+ Request clientcreate : min: 0.0080, max: 1.0194, avg: 0.0944, err: 0, verification err: 0
253
+ Request ack-cud : min: 0.0298, max: 0.1381, avg: 0.0573, err: 0, verification err: 0
254
+ Request clientlogin : min: 0.0091, max: 0.0591, avg: 0.0152, err: 0, verification err: 0
255
+ Request get-cud : min: 0.0259, max: 0.1679, avg: 0.0443, err: 0, verification err: 0
256
+ Request create-object : min: 0.0618, max: 0.2778, avg: 0.1112, err: 0, verification err: 0
257
+ Throughput(req/s) : 8.19117682939103
258
+ Throughput(req/min): 491.470609763462
259
+ </pre>
260
+
261
+ ### Benchmark results for high-cpu extra large (8 cores) server
262
+ <pre>
263
+ Request clientcreate : min: 0.0083, max: 1.0162, avg: 0.0741, err: 0, verification err: 0
264
+ Request ack-cud : min: 0.0277, max: 0.1803, avg: 0.0525, err: 0, verification err: 0
265
+ Request clientlogin : min: 0.0092, max: 0.0681, avg: 0.0147, err: 0, verification err: 0
266
+ Request get-cud : min: 0.0259, max: 0.1729, avg: 0.0474, err: 0, verification err: 0
267
+ Request create-object : min: 0.0599, max: 0.2850, avg: 0.1102, err: 0, verification err: 0
268
+ Throughput(req/s) : 8.08355941878833
269
+ Throughput(req/min): 485.0135651273
270
+ </pre>
168
271
 
272
+ All above results produced by bench script <b>cud_script</b> hosted by large (2 cores) EC2 server.
@@ -25,7 +25,7 @@ Rhoconnect::Server.disable :run
25
25
  Rhoconnect::Server.disable :clean_trace
26
26
  Rhoconnect::Server.enable :raise_errors
27
27
  Rhoconnect::Server.set :root, ROOT_PATH
28
- Rhoconnect::Server.enable :stats
28
+ #Rhoconnect::Server.enable :stats
29
29
  Rhoconnect::Server.set :secret, '3ddaa72a36466bae3fc5e54c09324db50cfc30588d8dee1a2700e61195bdbbb5eeb65da2a184d274ce644b20b0e986046c2447730c85555ce18a4eb2fce7ebf5'
30
30
  Rhoconnect::Server.use Rack::Static, :urls => ["/data"], :root => Rhoconnect::Server.root
31
31
 
Binary file
@@ -3,9 +3,12 @@ require 'rubygems'
3
3
  require 'bundler'
4
4
  Bundler.require
5
5
 
6
+ ROOT_PATH = File.expand_path(File.dirname(__FILE__))
7
+
6
8
  if ENV['DEBUG'] == 'yes'
7
- ENV['APP_TYPE'] = 'rhosync'
8
- require 'debugger'
9
+ ENV['APP_TYPE'] = 'rhosync'
10
+ ENV['ROOT_PATH'] = ROOT_PATH
11
+ require 'debugger'
9
12
  end
10
13
 
11
14
  # Try to load vendor-ed rhoconnect, otherwise load the gem
@@ -20,7 +23,6 @@ end
20
23
  # By default, turn on the resque web console
21
24
  require 'resque/server'
22
25
 
23
- ROOT_PATH = File.expand_path(File.dirname(__FILE__))
24
26
 
25
27
  # Rhoconnect server flags
26
28
  Rhoconnect::Server.disable :run
@@ -1,9 +1,10 @@
1
- #! /usr/bin/env ruby
1
+ $:.unshift File.expand_path(File.dirname(__FILE__))
2
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'installer', 'utils'))
2
3
 
3
- require 'net/http'
4
- require 'constants'
5
4
  require 'rubygems'
6
5
  require 'fog'
6
+ require 'net/http'
7
+ require 'constants'
7
8
  require 'readline'
8
9
 
9
10
  # METHODS
@@ -202,6 +203,7 @@ end #compute_time
202
203
 
203
204
  # SCRIPT
204
205
 
206
+ ### This part has been set as a dependency in the :test rake task
205
207
  # Create Packages
206
208
 
207
209
  # Creating debian package
@@ -1,3 +1,7 @@
1
- #! /usr/bin/env ruby
2
-
3
-
1
+ namespace :rc_pkg do
2
+ desc 'Test creation and installation of both DEB and RPM rhoconnect packages.'
3
+ task :test => ['build:deb', 'build:rpm'] do
4
+ # Run installation test
5
+ sudo ruby "installer/utils/nix_install_test.rb"
6
+ end #:test
7
+ end #:rc_pkg
@@ -0,0 +1,29 @@
1
+ module Rhoconnect
2
+ class BodyContentTypeParser
3
+
4
+ # Constants
5
+ #
6
+ CONTENT_TYPE = 'CONTENT_TYPE'.freeze
7
+ POST_BODY = 'rack.input'.freeze
8
+ FORM_INPUT = 'rack.request.form_input'.freeze
9
+ FORM_HASH = 'rack.request.form_hash'.freeze
10
+
11
+ def initialize(app)
12
+ @app = app
13
+ end
14
+
15
+ def call(env)
16
+ if env['CONTENT_TYPE'] && env['CONTENT_TYPE'].match(/^application\/json/)
17
+ begin
18
+ if (body = env[POST_BODY].read).length != 0
19
+ env.update(FORM_HASH => JSON.parse(body), FORM_INPUT => env[POST_BODY])
20
+ end
21
+ rescue JSON::ParserError => jpe
22
+ log jpe.message + jpe.backtrace.join("\n")
23
+ return [500, {'Content-Type' => 'text/plain'}, ["Server error while processing client data"]]
24
+ end
25
+ end
26
+ @app.call(env)
27
+ end
28
+ end
29
+ end
@@ -14,9 +14,9 @@ module RhoconnectConsole
14
14
  end
15
15
 
16
16
  class Server < Sinatra::Base
17
- set :views, RhoconnectConsole::root_path("app","views")
18
- set :public, RhoconnectConsole::root_path("app","public")
19
- set :static, true
17
+ set :views, RhoconnectConsole::root_path("app","views")
18
+ set :public_folder, RhoconnectConsole::root_path("app","public")
19
+ set :static, true
20
20
  use Rack::Session::Cookie
21
21
  HEROKU_NAV = ENV['INSTANCE_ID'] ? RestClient.get('http://nav.heroku.com/v1/providers/header') : nil
22
22
  before do
@@ -18,7 +18,7 @@ module Rack
18
18
  env['HTTP_ORIGIN'] = 'file://'
19
19
  end
20
20
  if env['HTTP_X_ORIGIN'] and not env['HTTP_ORIGIN']
21
- puts 'ORIGIN header is empty, X-ORIGIN workaround header applied.'
21
+ log 'ORIGIN header is empty, X-ORIGIN workaround header applied.'
22
22
  env['HTTP_ORIGIN'] = env['HTTP_X_ORIGIN']
23
23
  end
24
24
  cors_headers = nil
@@ -3,8 +3,10 @@ require 'sinatra/base'
3
3
  require 'erb'
4
4
  require 'json'
5
5
  require 'fileutils'
6
+ #require 'rack/contrib'
6
7
  require 'rhoconnect'
7
8
  require 'rhoconnect/x_domain_session_wrapper'
9
+ require 'rhoconnect/body_content_type_parser'
8
10
  require 'rhoconnect/cors'
9
11
 
10
12
  module Rhoconnect
@@ -19,15 +21,13 @@ module Rhoconnect
19
21
 
20
22
  class Server < Sinatra::Base
21
23
  libdir = File.dirname(File.expand_path(__FILE__))
22
- set :views, "#{libdir}/server/views"
23
- set :public, "#{libdir}/server/public"
24
- set :static, true
25
-
24
+ set :views, "#{libdir}/server/views"
25
+ set :public_folder, "#{libdir}/server/public"
26
+ set :static, true
27
+ set :stats, false
28
+
26
29
  # default secret
27
30
  @@secret = '<changeme>'
28
-
29
- # stats middleware disabled by default
30
- @@stats = false
31
31
 
32
32
  # Setup route and mimetype for bulk data downloads
33
33
  # TODO: Figure out why "mime :data, 'application/octet-stream'" doesn't work
@@ -62,7 +62,7 @@ module Rhoconnect
62
62
  def login
63
63
  if params[:login] == 'rhoadmin'
64
64
  user = User.authenticate(params[:login], params[:password])
65
- elsif current_app and current_app.can_authenticate?
65
+ elsif current_app and current_app.can_authenticate? and params[:login]
66
66
  user = current_app.authenticate(params[:login], params[:password], session)
67
67
  end
68
68
  if user
@@ -151,7 +151,7 @@ module Rhoconnect
151
151
  def mark_deprecated_call_and_reroute(name, namespace, *params)
152
152
  namespace_val = namespace.nil? ? "<namespace>" : "#{namespace}"
153
153
  http_method = request.get? ? "GET" : "POST"
154
- warning_message = "Use of the #{http_method} #{request.route} is deprecated. Use #{http_method} /api/#{namespace_val}/#{name} instead."
154
+ warning_message = "Use of the #{http_method} #{request.path} is deprecated. Use #{http_method} /api/#{namespace_val}/#{name} instead."
155
155
  response.headers['Warning'] = warning_message
156
156
  Rhoconnect.log warning_message
157
157
  if namespace != nil
@@ -177,17 +177,10 @@ module Rhoconnect
177
177
  end
178
178
  end
179
179
 
180
+ # TODO: Load middleware statically
180
181
  # hook into new so we can enable middleware
181
182
  def self.new
182
- if @@stats == true
183
- use Rhoconnect::Stats::Middleware
184
- Rhoconnect.stats = true
185
- end
186
183
  use XDomainSessionWrapper
187
- use Rack::Session::Cookie,
188
- :key => 'rhoconnect_session',
189
- :expire_after => Rhoconnect.cookie_expire,
190
- :secret => @@secret
191
184
  use Rack::Cors do |cfg|
192
185
  cfg.allow do |allow|
193
186
  allow.origins /.*/
@@ -197,18 +190,27 @@ module Rhoconnect
197
190
  allow.resource '/api/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
198
191
  end
199
192
  end
200
- super
201
- end
202
-
203
- def self.set(option, value=self, &block)
204
- @@stats = value if option == :stats and (value.is_a?(TrueClass) or value.is_a?(FalseClass))
205
- @@secret = value if option == :secret and value.is_a?(String)
193
+ use Rhoconnect::BodyContentTypeParser
194
+
195
+ if settings.respond_to?(:stats) and settings.send(:stats) == true
196
+ use Rhoconnect::Stats::Middleware
197
+ Rhoconnect.stats = true
198
+ else
199
+ Rhoconnect::Server.disable :stats
200
+ Rhoconnect.stats = false
201
+ end
202
+
203
+ Rhoconnect::Server.set :secret, @@secret unless settings.respond_to?(:secret)
204
+ use Rack::Session::Cookie,
205
+ :key => 'rhoconnect_session',
206
+ :expire_after => Rhoconnect.cookie_expire,
207
+ :secret => Rhoconnect::Server.secret
206
208
  super
207
209
  end
208
210
 
209
211
  def initialize
210
212
  # Whine about default session secret
211
- check_default_secret!(@@secret)
213
+ check_default_secret!(Rhoconnect::Server.secret)
212
214
  super
213
215
  end
214
216
 
@@ -223,12 +225,7 @@ module Rhoconnect
223
225
  cud = JSON.parse(params["cud"])
224
226
  params.delete("cud")
225
227
  params.merge!(cud)
226
- end
227
- #application/json; charset=UTF-8
228
- if request.env['CONTENT_TYPE'] && request.env['CONTENT_TYPE'].match(/^application\/json/)
229
- params.merge!(JSON.parse(request.body.read))
230
- request.body.rewind
231
- end
228
+ end
232
229
  rescue JSON::ParserError => jpe
233
230
  log jpe.message + jpe.backtrace.join("\n")
234
231
  throw :halt, [500, "Server error while processing client data"]
@@ -239,7 +236,6 @@ module Rhoconnect
239
236
  if params[:version] and params[:version].to_i < 3
240
237
  throw :halt, [404, "Server supports version 3 or higher of the protocol."]
241
238
  end
242
- #log "request params: #{params.inspect}"
243
239
  end
244
240
 
245
241
  %w[get post].each do |verb|
@@ -272,12 +268,12 @@ module Rhoconnect
272
268
  def self.api(name, namespace = nil, verb = :post, &block)
273
269
  old_api_prefix = (namespace == :application) ? :application : :api
274
270
  client_call = (namespace == :application) ? true : false
275
- send verb, "/#{old_api_prefix}/#{name}" do
276
- mark_deprecated_call_and_reroute(name, namespace, &block)
271
+ send verb, "/#{old_api_prefix}/#{name}" do
272
+ mark_deprecated_call_and_reroute(name, namespace, params, &block)
277
273
  end
278
274
 
279
275
  send verb, "/api/#{namespace}/#{name}" do
280
- execute_api_call client_call, &block
276
+ execute_api_call(client_call, &block)
281
277
  end
282
278
  end
283
279
  end
@@ -1,3 +1,3 @@
1
1
  module Rhoconnect
2
- VERSION = '3.0.1'
2
+ VERSION = '3.0.2'
3
3
  end
data/rhoconnect.gemspec CHANGED
@@ -37,13 +37,13 @@ Gem::Specification.new do |s|
37
37
  ]
38
38
 
39
39
  s.add_dependency('bundler', '~> 1.0')
40
- s.add_dependency("sinatra", '= 1.2.7')
40
+ s.add_dependency("sinatra", '~> 1.3')
41
41
  s.add_dependency('rake', '0.9.2')
42
42
  s.add_dependency('json', '~> 1.5.0')
43
43
  s.add_dependency('rubyzip', '~> 0.9.4')
44
44
  s.add_dependency('uuidtools', '>= 2.1.1')
45
45
  s.add_dependency('redis', '>= 2.2.0')
46
- s.add_dependency('resque', '~> 1.17.0')
46
+ s.add_dependency('resque', '~> 1.18.0')
47
47
  s.add_dependency('rest-client', '~> 1.6.1')
48
48
  s.add_dependency('templater', '~> 1.0.0')
49
49
  end
@@ -2,12 +2,17 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
2
2
 
3
3
  describe "RhoconnectApiStats" do
4
4
  it_should_behave_like "ApiHelper" do
5
+
6
+ def app
7
+ @app ||= Rhoconnect::Server.new
8
+ end
9
+
5
10
  before(:each) do
6
- Rhoconnect.stats = true
11
+ Rhoconnect::Server.set :stats, true
7
12
  end
8
-
13
+
9
14
  after(:each) do
10
- Rhoconnect.stats = false
15
+ Rhoconnect::Server.set :stats, false
11
16
  end
12
17
 
13
18
  it "should retrieve metric names" do
@@ -54,7 +59,7 @@ describe "RhoconnectApiStats" do
54
59
  end
55
60
 
56
61
  it "should raise error if stats not enabled" do
57
- Rhoconnect.stats = false
62
+ Rhoconnect::Server.set :stats, false
58
63
  post "/api/admin/stats", {
59
64
  :api_token => @api_token,
60
65
  :metric => 'foo'
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__),'..','spec_helper')
6
6
  require File.join(File.dirname(__FILE__), '..', 'support', 'shared_examples')
7
7
 
8
8
  def app
9
+ Rhoconnect::Server.set :stats, false
9
10
  @app ||= Rhoconnect::Server.new
10
11
  end
11
12
 
File without changes
@@ -28,7 +28,7 @@ describe "CORS middleware" do
28
28
  end
29
29
 
30
30
  before(:each) do
31
- @app ||= StubApp.new
31
+ @app = StubApp.new
32
32
 
33
33
  @middleware = Rack::Cors.new @app, {} do |cfg|
34
34
  cfg.allow do |allow|
@@ -32,7 +32,7 @@ describe "Server" do
32
32
  end
33
33
 
34
34
  it "should login if content-type contains extra parameters" do
35
- post "/api/admin/login", {"login" => 'rhoadmin', "password" => ''}.to_json, {'CONTENT_TYPE'=>'application/json; charset=UTF-8'}
35
+ post "/api/admin/login", {"login" => 'rhoadmin', "password" => ''}.to_json, {'CONTENT_TYPE'=>'application/json; charset=UTF-8'}
36
36
  last_response.should be_ok
37
37
  end
38
38
 
@@ -56,11 +56,13 @@ describe "Server" do
56
56
  end
57
57
 
58
58
  it "should use Stats::Middleware if stats enabled" do
59
+ Rhoconnect::Server.server = nil
59
60
  Rhoconnect::Server.enable :stats
60
61
  Rhoconnect::Server.new
61
62
  Rhoconnect.stats.should == true
62
63
  Rhoconnect.stats = nil
63
64
  Rhoconnect::Server.disable :stats
65
+ Rhoconnect::Server.server = nil
64
66
  end
65
67
 
66
68
  it "should update session secret to default" do
@@ -253,11 +255,10 @@ describe "Server" do
253
255
  last_response.body.should == "Server error while processing client data"
254
256
  end
255
257
 
256
- it "should handle client posting broken body" do
257
- broken_json = ['foo']
258
- post "/api/application/queue_updates", broken_json, {'CONTENT_TYPE'=>'application/json'}
259
- last_response.status.should == 500
260
- last_response.body.should == "Internal server error"
258
+ it "should not login if login is empty" do
259
+ post "/api/application/clientlogin", ''
260
+ last_response.status.should == 401
261
+ last_response.body.should == ""
261
262
  end
262
263
 
263
264
  it "should get inserts json" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhoconnect
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 3
8
8
  - 0
9
- - 1
10
- version: 3.0.1
9
+ - 2
10
+ version: 3.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rhomobile
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-04 00:00:00 Z
18
+ date: 2011-10-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  type: :runtime
@@ -38,14 +38,13 @@ dependencies:
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
- - - "="
41
+ - - ~>
42
42
  - !ruby/object:Gem::Version
43
- hash: 17
43
+ hash: 9
44
44
  segments:
45
45
  - 1
46
- - 2
47
- - 7
48
- version: 1.2.7
46
+ - 3
47
+ version: "1.3"
49
48
  version_requirements: *id002
50
49
  name: sinatra
51
50
  - !ruby/object:Gem::Dependency
@@ -136,12 +135,12 @@ dependencies:
136
135
  requirements:
137
136
  - - ~>
138
137
  - !ruby/object:Gem::Version
139
- hash: 83
138
+ hash: 95
140
139
  segments:
141
140
  - 1
142
- - 17
141
+ - 18
143
142
  - 0
144
- version: 1.17.0
143
+ version: 1.18.0
145
144
  version_requirements: *id008
146
145
  name: resque
147
146
  - !ruby/object:Gem::Dependency
@@ -369,6 +368,7 @@ files:
369
368
  - lib/rhoconnect/api/user/update_user.rb
370
369
  - lib/rhoconnect/api_token.rb
371
370
  - lib/rhoconnect/app.rb
371
+ - lib/rhoconnect/body_content_type_parser.rb
372
372
  - lib/rhoconnect/bulk_data/bulk_data.rb
373
373
  - lib/rhoconnect/bulk_data/syncdb.index.schema
374
374
  - lib/rhoconnect/bulk_data/syncdb.schema
@@ -538,7 +538,7 @@ files:
538
538
  - spec/ping/apple_spec.rb
539
539
  - spec/ping/blackberry_spec.rb
540
540
  - spec/read_state_spec.rb
541
- - spec/rhosync_spec.rb
541
+ - spec/rhoconnect_spec.rb
542
542
  - spec/server/cors_spec.rb
543
543
  - spec/server/server_spec.rb
544
544
  - spec/server/x_domain_session_wrapper_spec.rb
@@ -663,7 +663,7 @@ test_files:
663
663
  - spec/ping/apple_spec.rb
664
664
  - spec/ping/blackberry_spec.rb
665
665
  - spec/read_state_spec.rb
666
- - spec/rhosync_spec.rb
666
+ - spec/rhoconnect_spec.rb
667
667
  - spec/server/cors_spec.rb
668
668
  - spec/server/server_spec.rb
669
669
  - spec/server/x_domain_session_wrapper_spec.rb