rocket-server 0.0.1

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.
@@ -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
+