rocket-server 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,146 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ describe Rocket::Server do
4
+ subject do
5
+ Rocket::Server
6
+ end
7
+
8
+ it ".version should be valid" do
9
+ subject.version.should =~ /\d+(.\d+){1,2}.*/
10
+ end
11
+
12
+ describe ".logger=" do
13
+ it "should set given logger" do
14
+ subject.logger = :testing
15
+ subject.instance_variable_get("@logger").should == :testing
16
+ end
17
+ end
18
+
19
+ describe ".logger" do
20
+ before do
21
+ subject.instance_variable_set("@logger", nil)
22
+ end
23
+
24
+ it "should return default logger when other is not specified" do
25
+ subject.expects(:default_logger).returns(:test)
26
+ subject.logger.should == :test
27
+ end
28
+
29
+ it "should return specified logger" do
30
+ subject.logger = :testing
31
+ subject.logger.should == :testing
32
+ end
33
+ end
34
+
35
+ describe ".default_logger" do
36
+ before do
37
+ @logger = subject.default_logger
38
+ end
39
+
40
+ it "should return logger with default configuration" do
41
+ @logger.should be_kind_of(Logging::Logger)
42
+ end
43
+
44
+ it "should set it verbosity level to :info" do
45
+ @logger.level.should == 1
46
+ end
47
+
48
+ it "should add stdout appender" do
49
+ @logger.instance_variable_get("@appenders").should include(Logging.appenders.stdout)
50
+ end
51
+ end
52
+
53
+ describe ".configure_logger" do
54
+ before :each do
55
+ subject.logger = nil
56
+ end
57
+
58
+ after :each do
59
+ subject.logger.appenders = nil
60
+ end
61
+
62
+ context "when logfile specified" do
63
+ it "should set appender for it" do
64
+ begin
65
+ subject.set :log, "test.log"
66
+ subject.configure_logger
67
+ subject.logger.instance_variable_get("@appenders").last.name.should == "test.log"
68
+ ensure
69
+ FileUtils.rm("test.log")
70
+ end
71
+ end
72
+ end
73
+
74
+ context "when no logfile specified" do
75
+ it "shouldn't modify appenders" do
76
+ subject.set :log, nil
77
+ subject.configure_logger
78
+ subject.logger.instance_variable_get("@appenders").should have(1).item
79
+ end
80
+ end
81
+
82
+ context "when verbose mode" do
83
+ it "should set log level to :debug" do
84
+ subject.enable :verbose
85
+ subject.configure_logger
86
+ subject.logger.level.should == 0
87
+ end
88
+ end
89
+
90
+ context "when no verbose mode" do
91
+ context "and quiet mode" do
92
+ it "should set log level to :error" do
93
+ subject.disable :verbose
94
+ subject.enable :quiet
95
+ subject.configure_logger
96
+ subject.logger.level.should == 3
97
+ end
98
+ end
99
+ end
100
+ end
101
+
102
+ describe ".load_settings" do
103
+ context "when error raised" do
104
+ it "should rescue it and display, and exit program" do
105
+ out, err = capture_output {
106
+ subject.expects(:load_settings_without_setup).raises(Errno::EACCES)
107
+ expect { subject.load_settings("test.yml") }.to raise_error(SystemExit)
108
+ }
109
+ out.should == "Permission denied\n"
110
+ end
111
+ end
112
+
113
+ context "when everything's ok" do
114
+ before do
115
+ subject.expects(:load_settings_without_setup).returns(true)
116
+ end
117
+
118
+ it "should merge settings with given locals" do
119
+ subject.settings.expects(:merge!).with(:test => true)
120
+ subject.load_settings("test.yml", :test => true)
121
+ end
122
+
123
+ it "should configure logger" do
124
+ subject.expects(:configure_logger).returns(true)
125
+ subject.load_settings("test.yml")
126
+ end
127
+
128
+ it "should require specified plugins" do
129
+ subject.expects(:require_plugins).returns(true)
130
+ subject.load_settings("test.yml")
131
+ end
132
+ end
133
+ end
134
+
135
+ describe ".require_plugins" do
136
+ it "should require all specified extensions" do
137
+ begin
138
+ subject.set :plugins, %w[test/plugin]
139
+ subject.expects(:require).with("test/plugin").returns(true)
140
+ subject.require_plugins
141
+ ensure
142
+ subject.set :plugins, []
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,110 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ describe Rocket::Server::Session do
4
+ let(:mock_app) do
5
+ stub(:id => "test")
6
+ end
7
+
8
+ subject do
9
+ Rocket::Server::App.expects(:find).with("test").returns(mock_app)
10
+ Rocket::Server::Session.new('test')
11
+ end
12
+
13
+ describe "#initialize" do
14
+ context "when given app exists" do
15
+ it "should initialize subscriptions hash" do
16
+ subject.subscriptions.should == {}
17
+ end
18
+
19
+ it "should find given app" do
20
+ mock_app.expects(:id).returns("test")
21
+ subject.app_id.should == "test"
22
+ end
23
+ end
24
+
25
+ context "when given app doesn't exist" do
26
+ it "should raise error" do
27
+ Rocket::Server::App.expects(:find).with("this-app-does-not-exist").raises(Rocket::Server::App::NotFoundError)
28
+ expect { Rocket::Server::Session.new("this-app-does-not-exist") }.to raise_error(Rocket::Server::App::NotFoundError)
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "in authentication flow" do
34
+ describe "#authenticated?" do
35
+ it "should be false by default" do
36
+ subject.should_not be_authenticated
37
+ end
38
+ end
39
+
40
+ describe "#authenticate!" do
41
+ describe "when invalid secret given" do
42
+ it "shouldn't authenticate current session" do
43
+ mock_app.expects(:secret).returns("test")
44
+ @session = subject
45
+ @session.authenticate!("not-test").should be_false
46
+ @session.should_not be_authenticated
47
+ end
48
+ end
49
+
50
+ describe "when valid secret given" do
51
+ it "should authenticate current session" do
52
+ mock_app.expects(:secret).returns("test")
53
+ @session = subject
54
+ @session.authenticate!("test").should be_true
55
+ @session.should be_authenticated
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "#subscribe" do
62
+ before do
63
+ @conn = stub(:signature => 123)
64
+ Rocket::Server::Channel["test" => "test-channel"].expects(:subscribe).returns(234)
65
+ @session = subject
66
+ end
67
+
68
+ it "should subscribe given channel" do
69
+ @session.subscribe("test-channel", @conn).should == 234
70
+ end
71
+
72
+ it "should store subscription on list" do
73
+ @session.subscribe("test-channel", @conn)
74
+ @session.subscriptions.should have(1).item
75
+ @session.subscriptions["test-channel" => 123].should == 234
76
+ end
77
+ end
78
+
79
+ describe "#unsubscribe" do
80
+ before do
81
+ @conn = stub(:signature => 123)
82
+ Rocket::Server::Channel["test" => "test-channel"].expects(:unsubscribe).with(234)
83
+ @session = subject
84
+ @session.stubs(:subscriptions).returns({{"test-channel" => 123} => 234})
85
+ end
86
+
87
+ it "should unsubscribe given channel" do
88
+ @session.unsubscribe("test-channel", @conn)
89
+ end
90
+
91
+ it "should remove subscription from list" do
92
+ @session.unsubscribe("test-channel", @conn)
93
+ @session.subscriptions.should_not have_key("test-channel" => 123)
94
+ end
95
+ end
96
+
97
+ describe "#close" do
98
+ before do
99
+ @conn = stub(:signature => 123)
100
+ end
101
+
102
+ it "should unsubscibe all active subscriptions" do
103
+ @session = subject
104
+ @session.stubs(:subscriptions).returns({{"test-channel" => 123} => 234})
105
+ Rocket::Server::Channel["test" => "test-channel"].expects(:unsubscribe).with(234)
106
+ @session.close
107
+ @session.subscriptions.should be_empty
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'mocha'
3
+ require 'rspec'
4
+ require 'fileutils'
5
+ require 'rocket-server'
6
+
7
+ RSpec.configure do |config|
8
+ config.mock_with :mocha
9
+ end
10
+
11
+ Rocket::Server.logger.appenders = nil
12
+
13
+ def capture_output
14
+ out, err = StringIO.new, StringIO.new
15
+ begin
16
+ $stdout, $stderr = out, err
17
+ yield
18
+ ensure
19
+ $stdout, $stderr = STDOUT, STDERR
20
+ end
21
+ [out.string, err.string]
22
+ end
metadata ADDED
@@ -0,0 +1,237 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rocket-server
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Araneo
14
+ - Chris Kowalik
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2010-11-03 00:00:00 +01:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: optitron
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 15
31
+ segments:
32
+ - 0
33
+ - 2
34
+ version: "0.2"
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: json
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 7
46
+ segments:
47
+ - 1
48
+ - 4
49
+ version: "1.4"
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: eventmachine
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 19
61
+ segments:
62
+ - 0
63
+ - 12
64
+ version: "0.12"
65
+ type: :runtime
66
+ version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: em-websocket
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 19
76
+ segments:
77
+ - 0
78
+ - 1
79
+ - 4
80
+ version: 0.1.4
81
+ type: :runtime
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: logging
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ hash: 7
92
+ segments:
93
+ - 1
94
+ - 4
95
+ version: "1.4"
96
+ type: :runtime
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: daemons
100
+ prerelease: false
101
+ requirement: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ~>
105
+ - !ruby/object:Gem::Version
106
+ hash: 13
107
+ segments:
108
+ - 1
109
+ - 1
110
+ version: "1.1"
111
+ type: :runtime
112
+ version_requirements: *id006
113
+ - !ruby/object:Gem::Dependency
114
+ name: konfigurator
115
+ prerelease: false
116
+ requirement: &id007 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ hash: 25
122
+ segments:
123
+ - 0
124
+ - 1
125
+ - 1
126
+ version: 0.1.1
127
+ type: :runtime
128
+ version_requirements: *id007
129
+ - !ruby/object:Gem::Dependency
130
+ name: rspec
131
+ prerelease: false
132
+ requirement: &id008 !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ~>
136
+ - !ruby/object:Gem::Version
137
+ hash: 3
138
+ segments:
139
+ - 2
140
+ - 0
141
+ version: "2.0"
142
+ type: :development
143
+ version_requirements: *id008
144
+ - !ruby/object:Gem::Dependency
145
+ name: mocha
146
+ prerelease: false
147
+ requirement: &id009 !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ hash: 25
153
+ segments:
154
+ - 0
155
+ - 9
156
+ version: "0.9"
157
+ type: :development
158
+ version_requirements: *id009
159
+ description: |
160
+
161
+ This is a fast web socket server built on awesome EventMachine with em-websockets help.
162
+ It provides easy to use, event-oriented middleware for your web-socket powered applications.
163
+
164
+ email: chris@nu7hat.ch
165
+ executables: []
166
+
167
+ extensions: []
168
+
169
+ extra_rdoc_files:
170
+ - LICENSE
171
+ - README.md
172
+ files:
173
+ - .gitignore
174
+ - LICENSE
175
+ - README.md
176
+ - Rakefile
177
+ - bin/rocket-server
178
+ - etc/testing.yml
179
+ - lib/rocket-server.rb
180
+ - lib/rocket/server.rb
181
+ - lib/rocket/server/app.rb
182
+ - lib/rocket/server/channel.rb
183
+ - lib/rocket/server/cli.rb
184
+ - lib/rocket/server/connection.rb
185
+ - lib/rocket/server/helpers.rb
186
+ - lib/rocket/server/misc.rb
187
+ - lib/rocket/server/runner.rb
188
+ - lib/rocket/server/session.rb
189
+ - lib/rocket/server/templates/config.yml.tpl
190
+ - lib/rocket/server/version.rb
191
+ - rocket-server.gemspec
192
+ - spec/apps_spec.rb
193
+ - spec/channel_spec.rb
194
+ - spec/cli_spec.rb
195
+ - spec/connection_spec.rb
196
+ - spec/helpers_spec.rb
197
+ - spec/misc_spec.rb
198
+ - spec/runner_spec.rb
199
+ - spec/server_spec.rb
200
+ - spec/session_spec.rb
201
+ - spec/spec_helper.rb
202
+ has_rdoc: true
203
+ homepage: http://github.com/araneo/rocket
204
+ licenses: []
205
+
206
+ post_install_message:
207
+ rdoc_options:
208
+ - --charset=UTF-8
209
+ require_paths:
210
+ - lib
211
+ required_ruby_version: !ruby/object:Gem::Requirement
212
+ none: false
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ hash: 3
217
+ segments:
218
+ - 0
219
+ version: "0"
220
+ required_rubygems_version: !ruby/object:Gem::Requirement
221
+ none: false
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ hash: 3
226
+ segments:
227
+ - 0
228
+ version: "0"
229
+ requirements: []
230
+
231
+ rubyforge_project:
232
+ rubygems_version: 1.3.7
233
+ signing_key:
234
+ specification_version: 3
235
+ summary: Fast and extensible web socket server built upon em-websockets.
236
+ test_files: []
237
+