jubilee 1.1.2-java → 1.1.3-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile +0 -1
- data/Gemfile.lock +0 -11
- data/README.md +15 -5
- data/Rakefile +9 -5
- data/jars/{netty-all-4.0.13.Final.jar → netty-all-4.0.14.Final.jar} +0 -0
- data/jars/{vertx-core-2.1M3-SNAPSHOT.jar → vertx-core-2.1M3.jar} +0 -0
- data/jars/{vertx-hazelcast-2.1M3-SNAPSHOT.jar → vertx-hazelcast-2.1M3.jar} +0 -0
- data/java/src/org/jruby/jubilee/RackApplication.java +11 -2
- data/lib/jubilee.rb +3 -3
- data/lib/jubilee/cli.rb +7 -1
- data/lib/jubilee/configuration.rb +9 -6
- data/lib/jubilee/jubilee.jar +0 -0
- data/lib/jubilee/version.rb +1 -1
- data/spec/apps/sinatra/basic/basic.rb +1 -0
- data/spec/integration/basic_sinatra_spec.rb +2 -1
- data/spec/spec_helper.rb +0 -1
- data/test/config/app.rb +9 -1
- data/test/config/app.ru +3 -0
- data/test/config/config.ru +3 -0
- data/test/jubilee/test_cli.rb +14 -2
- data/test/jubilee/test_configuration.rb +28 -13
- data/test/jubilee/test_rack_server.rb +18 -9
- data/test/jubilee/test_server.rb +3 -3
- data/test/jubilee/test_upload.rb +6 -1
- data/test/test_helper.rb +3 -9
- metadata +7 -9
- data/test/sinatra_app/app.rb +0 -31
- data/test/sinatra_app/config.ru +0 -6
- data/test/sinatra_app/public/test.html +0 -10
- data/test/sinatra_app/unicorn.conf.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71daf5448046b7a808de9b5c8dbb61989e713d52
|
4
|
+
data.tar.gz: 501ac68ce907fe002466c95d3a39ef68f90e9335
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13e23da533cade9811bf8633c4f9852dc242ec7f497ef63612e44ef54cd09cef75dfe4ace8bb5519f9acf0f54d225c7303cedfec08c0bd8ca5ec9a61aa7879c8
|
7
|
+
data.tar.gz: 142003d9a46ee61c5aabb8d1b3ee15171e428d43263991002e0d50632110b49335232978727d7dd07281d9424f3f73d00adac544aaeb67aa0534ed8fbc7b928b
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -29,7 +29,6 @@ GEM
|
|
29
29
|
tzinfo (~> 0.3.37)
|
30
30
|
addressable (2.3.5)
|
31
31
|
arel (4.0.1)
|
32
|
-
atomic (1.1.14)
|
33
32
|
atomic (1.1.14-java)
|
34
33
|
builder (3.1.4)
|
35
34
|
capybara (2.2.0)
|
@@ -54,7 +53,6 @@ GEM
|
|
54
53
|
execjs (2.0.2)
|
55
54
|
faraday (0.8.8)
|
56
55
|
multipart-post (~> 1.2.0)
|
57
|
-
ffi (1.9.3)
|
58
56
|
ffi (1.9.3-java)
|
59
57
|
formatador (0.2.4)
|
60
58
|
git (1.2.6)
|
@@ -127,10 +125,6 @@ GEM
|
|
127
125
|
multi_json (~> 1.0)
|
128
126
|
websocket-driver (>= 0.2.0)
|
129
127
|
polyglot (0.3.3)
|
130
|
-
pry (0.9.12.4)
|
131
|
-
coderay (~> 1.0)
|
132
|
-
method_source (~> 0.8)
|
133
|
-
slop (~> 3.4)
|
134
128
|
pry (0.9.12.4-java)
|
135
129
|
coderay (~> 1.0)
|
136
130
|
method_source (~> 0.8)
|
@@ -158,7 +152,6 @@ GEM
|
|
158
152
|
rb-fsevent (0.9.4)
|
159
153
|
rb-inotify (0.9.3)
|
160
154
|
ffi (>= 0.5.0)
|
161
|
-
rcov (0.9.11)
|
162
155
|
rcov (0.9.11-java)
|
163
156
|
rdoc (4.1.0)
|
164
157
|
json (~> 1.4)
|
@@ -195,8 +188,6 @@ GEM
|
|
195
188
|
therubyrhino_jar (>= 1.7.3)
|
196
189
|
therubyrhino_jar (1.7.4)
|
197
190
|
thor (0.18.1)
|
198
|
-
thread_safe (0.1.3)
|
199
|
-
atomic
|
200
191
|
thread_safe (0.1.3-java)
|
201
192
|
atomic
|
202
193
|
tilt (1.4.1)
|
@@ -210,7 +201,6 @@ GEM
|
|
210
201
|
uglifier (2.4.0)
|
211
202
|
execjs (>= 0.3.0)
|
212
203
|
json (>= 1.8.0)
|
213
|
-
websocket-driver (0.3.2)
|
214
204
|
websocket-driver (0.3.2-java)
|
215
205
|
xpath (2.0.0)
|
216
206
|
nokogiri (~> 1.3)
|
@@ -231,7 +221,6 @@ DEPENDENCIES
|
|
231
221
|
jquery-rails (>= 3.0)
|
232
222
|
multipart-post
|
233
223
|
poltergeist
|
234
|
-
pry
|
235
224
|
rack (>= 1.4.1)
|
236
225
|
rails (~> 4.0.0)
|
237
226
|
rcov
|
data/README.md
CHANGED
@@ -17,9 +17,6 @@ Why another rack server?
|
|
17
17
|
> that's designed for modern mobile, web, and enterprise applications."
|
18
18
|
> - vertx.io site
|
19
19
|
|
20
|
-
In short, Vertx is nodejs on the JVM, only much more faster, checkout the awesome
|
21
|
-
[benchmarks](http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/)
|
22
|
-
|
23
20
|
By using Vertx, jubilee inherent advantages in terms of performance, and all
|
24
21
|
the other cool features of Vertx:
|
25
22
|
|
@@ -36,6 +33,16 @@ Installation
|
|
36
33
|
|
37
34
|
Jubilee requires JRuby 1.7.5 or later, and JDK 7+
|
38
35
|
|
36
|
+
Build from source
|
37
|
+
-----------------
|
38
|
+
|
39
|
+
Checkout the source and run the following command in the root directory of the
|
40
|
+
project:
|
41
|
+
|
42
|
+
```shell
|
43
|
+
bundle && bundle exec rake install
|
44
|
+
```
|
45
|
+
|
39
46
|
Get started
|
40
47
|
-----------
|
41
48
|
|
@@ -62,7 +69,8 @@ Event Bus
|
|
62
69
|
=========
|
63
70
|
|
64
71
|
Event Bus is a pub/sub mechanism, it can be used from server to server, server
|
65
|
-
to client and client to client, with the same API!
|
72
|
+
to client and client to client, with the same API! You can use it to build
|
73
|
+
living real time web application.
|
66
74
|
|
67
75
|
Examples
|
68
76
|
--------
|
@@ -91,7 +99,9 @@ var eb = new vertx.EventBus("/eventbus");
|
|
91
99
|
eb.send("test", "hello, world");
|
92
100
|
```
|
93
101
|
|
94
|
-
|
102
|
+
In the previous tab it should print the greetings you just sent.
|
103
|
+
|
104
|
+
For more advanced examples, please checkout the
|
95
105
|
[chatapp](https://github.com/isaiah/jubilee/tree/master/examples/chatapp).
|
96
106
|
|
97
107
|
Performance Tuning
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ include\
|
|
13
13
|
end
|
14
14
|
|
15
15
|
begin
|
16
|
-
Bundler.setup(:default, :development)
|
16
|
+
Bundler.setup(:default, :development, :test)
|
17
17
|
rescue Bundler::BundlerError => e
|
18
18
|
$stderr.puts e.message
|
19
19
|
$stderr.puts "Run `bundle install` to install missing gems"
|
@@ -86,7 +86,7 @@ desc "Compile the extension, need jdk7 because vertx relies on it"
|
|
86
86
|
task :compile => [DEST_PATH, "#{DEST_PATH}/META-INF"] do |t|
|
87
87
|
ant.javac :srcdir => "java", :destdir => t.prerequisites.first,
|
88
88
|
:source => "1.7", :target => "1.7", :debug => true, :includeantruntime => false,
|
89
|
-
:classpath => "${java.class.path}:${sun.boot.class.path}:jars/vertx-core-2.1M3
|
89
|
+
:classpath => "${java.class.path}:${sun.boot.class.path}:jars/vertx-core-2.1M3.jar:jars/netty-all-4.0.14.Final.jar:jars/jackson-core-2.2.2.jar:jars/jackson-databind-2.2.2.jar:jars/jackson-annotations-2.2.2.jar:jars/hazelcast-2.6.3.jar"
|
90
90
|
end
|
91
91
|
|
92
92
|
desc "Copy META-INF"
|
@@ -102,7 +102,11 @@ end
|
|
102
102
|
|
103
103
|
task :build => :jar
|
104
104
|
|
105
|
-
|
106
|
-
|
107
|
-
|
105
|
+
require 'rspec/core/rake_task'
|
106
|
+
desc "Run integration tests"
|
107
|
+
RSpec::Core::RakeTask.new do |t|
|
108
|
+
t.ruby_opts = ['-I"spec:lib"']
|
109
|
+
t.pattern = 'spec/**/*_spec.rb'
|
108
110
|
end
|
111
|
+
|
112
|
+
task :spec => :jar
|
Binary file
|
Binary file
|
Binary file
|
@@ -6,6 +6,7 @@ import org.jruby.Ruby;
|
|
6
6
|
import org.jruby.RubyArray;
|
7
7
|
import org.jruby.RubyClass;
|
8
8
|
import org.jruby.RubyFixnum;
|
9
|
+
import org.jruby.exceptions.RaiseException;
|
9
10
|
import org.jruby.javasupport.JavaEmbedUtils;
|
10
11
|
import org.jruby.jubilee.impl.RubyIORackInput;
|
11
12
|
import org.jruby.jubilee.impl.RubyNullIO;
|
@@ -19,6 +20,8 @@ import org.vertx.java.core.http.HttpServerRequest;
|
|
19
20
|
import org.vertx.java.core.impl.DefaultVertx;
|
20
21
|
|
21
22
|
import java.io.IOException;
|
23
|
+
import java.io.PrintWriter;
|
24
|
+
import java.io.StringWriter;
|
22
25
|
import java.util.concurrent.atomic.AtomicBoolean;
|
23
26
|
|
24
27
|
/**
|
@@ -92,8 +95,14 @@ public class RackApplication {
|
|
92
95
|
httpServerResponseClass,
|
93
96
|
request.response());
|
94
97
|
response.respond(resp);
|
95
|
-
} catch (
|
96
|
-
|
98
|
+
} catch (Exception e) {
|
99
|
+
request.response().setStatusCode(500);
|
100
|
+
String message = "Jubilee caught this error: " + e.getMessage() + "\n";
|
101
|
+
StringWriter stringWriter = new StringWriter();
|
102
|
+
PrintWriter printWriter = new PrintWriter(stringWriter);
|
103
|
+
e.printStackTrace(printWriter);
|
104
|
+
request.response().end(message + stringWriter.toString());
|
105
|
+
e.printStackTrace(runtime.getErrorStream());
|
97
106
|
}
|
98
107
|
}
|
99
108
|
};
|
data/lib/jubilee.rb
CHANGED
@@ -2,9 +2,9 @@ require File.join(File.dirname(__FILE__), "../jars/jackson-core-2.2.2.jar")
|
|
2
2
|
require File.join(File.dirname(__FILE__), "../jars/jackson-databind-2.2.2.jar")
|
3
3
|
require File.join(File.dirname(__FILE__), "../jars/jackson-annotations-2.2.2.jar")
|
4
4
|
require File.join(File.dirname(__FILE__), "../jars/hazelcast-2.6.3.jar")
|
5
|
-
require File.join(File.dirname(__FILE__), "../jars/vertx-core-2.1M3
|
6
|
-
require File.join(File.dirname(__FILE__), "../jars/vertx-hazelcast-2.1M3
|
7
|
-
require File.join(File.dirname(__FILE__), "../jars/netty-all-4.0.
|
5
|
+
require File.join(File.dirname(__FILE__), "../jars/vertx-core-2.1M3.jar")
|
6
|
+
require File.join(File.dirname(__FILE__), "../jars/vertx-hazelcast-2.1M3.jar")
|
7
|
+
require File.join(File.dirname(__FILE__), "../jars/netty-all-4.0.14.Final.jar")
|
8
8
|
|
9
9
|
require 'jubilee/jubilee.jar'
|
10
10
|
require 'rack'
|
data/lib/jubilee/cli.rb
CHANGED
@@ -66,7 +66,7 @@ module Jubilee
|
|
66
66
|
@options[:daemon] = true
|
67
67
|
end
|
68
68
|
o.on "--dir DIR", "Change to DIR before starting" do |arg|
|
69
|
-
@options[:
|
69
|
+
@options[:chdir] = arg
|
70
70
|
end
|
71
71
|
o.on "-p", "--port PORT", "Defind which PORT the server should bind" do |arg|
|
72
72
|
@options[:Port] = arg.to_i
|
@@ -111,9 +111,15 @@ module Jubilee
|
|
111
111
|
o.on "--verbose", "Log low level debug information" do
|
112
112
|
@options[:debug] = true
|
113
113
|
end
|
114
|
+
|
114
115
|
o.on "-q", "--quiet", "Disable logging" do
|
115
116
|
@options[:quiet] = true
|
116
117
|
end
|
118
|
+
|
119
|
+
o.on "-v", "--version", "Print the version information" do
|
120
|
+
puts "jubilee version #{Jubilee::Version::STRING} on Vert.x 2.1M3"
|
121
|
+
exit 0
|
122
|
+
end
|
117
123
|
end
|
118
124
|
|
119
125
|
@parser.banner = "jubilee <options> <rackup file>"
|
@@ -128,17 +128,20 @@ module Jubilee
|
|
128
128
|
if block
|
129
129
|
inner_app = Rack::Builder.new(&block).to_app
|
130
130
|
else
|
131
|
-
if options[:
|
132
|
-
|
133
|
-
|
134
|
-
else
|
135
|
-
Dir.chdir options[:chdir] if options[:chdir]
|
136
|
-
inner_app, _ = Rack::Builder.parse_file "config.ru"
|
131
|
+
Dir.chdir options[:chdir] if options[:chdir]
|
132
|
+
if !File.exist?(rackup)
|
133
|
+
raise "Missing rackup file #{File.absolute_path(rackup)}"
|
137
134
|
end
|
135
|
+
inner_app, opts = Rack::Builder.parse_file(rackup)
|
136
|
+
@options.merge!(opts)
|
138
137
|
end
|
139
138
|
inner_app
|
140
139
|
end
|
141
140
|
|
141
|
+
def rackup
|
142
|
+
@options[:rackup] || "config.ru"
|
143
|
+
end
|
144
|
+
|
142
145
|
def expand_addr(addr, var = nil)
|
143
146
|
return ["0.0.0.0", addr] if addr.is_a?(Fixnum)
|
144
147
|
case addr
|
data/lib/jubilee/jubilee.jar
CHANGED
Binary file
|
data/lib/jubilee/version.rb
CHANGED
@@ -31,9 +31,10 @@ feature "basic sinatra test" do
|
|
31
31
|
|
32
32
|
it "should return 304 for unmodified static assets" do
|
33
33
|
uri = URI.parse("#{Capybara.app_host}/some_page.html")
|
34
|
+
mtime = File.mtime(File.expand_path("../../apps/sinatra/basic/public/some_page.html", __FILE__)).gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
34
35
|
Net::HTTP.start(uri.host, uri.port) do |http|
|
35
36
|
request = Net::HTTP::Get.new(uri.request_uri)
|
36
|
-
request.add_field('If-Modified-Since',
|
37
|
+
request.add_field('If-Modified-Since', mtime)
|
37
38
|
response = http.request(request)
|
38
39
|
response.code.should == "304"
|
39
40
|
end
|
data/spec/spec_helper.rb
CHANGED
data/test/config/app.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
class App
|
2
|
+
def initialize(resp = nil)
|
3
|
+
if resp
|
4
|
+
@resp = resp.is_a?(Array) ? resp : [resp]
|
5
|
+
else
|
6
|
+
@resp = ["embedded app"]
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
2
10
|
def call(env)
|
3
|
-
[200, {"Content-Type" => "text/plain"},
|
11
|
+
[200, {"Content-Type" => "text/plain"}, @resp]
|
4
12
|
end
|
5
13
|
end
|
data/test/config/app.ru
ADDED
data/test/jubilee/test_cli.rb
CHANGED
@@ -3,8 +3,20 @@ require 'jubilee/cli'
|
|
3
3
|
|
4
4
|
class TestJubileeCLI < MiniTest::Unit::TestCase
|
5
5
|
def test_parse_options
|
6
|
-
cli = Jubilee::CLI.new(["app.
|
6
|
+
cli = Jubilee::CLI.new(["app.ru"])
|
7
7
|
cli.parse_options
|
8
|
-
assert_equal "app.
|
8
|
+
assert_equal "app.ru", cli.options[:rackup]
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_chdir
|
12
|
+
cli = Jubilee::CLI.new(["--dir", "test", "app.ru"])
|
13
|
+
cli.parse_options
|
14
|
+
assert_equal "test", cli.options[:chdir]
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_eventbus_prefix
|
18
|
+
cli = Jubilee::CLI.new(["--eventbus", "/eb"])
|
19
|
+
cli.parse_options
|
20
|
+
assert_equal "/eb", cli.options[:eventbus_prefix]
|
9
21
|
end
|
10
22
|
end
|
@@ -5,16 +5,29 @@ class TestConfig < MiniTest::Unit::TestCase
|
|
5
5
|
|
6
6
|
def setup
|
7
7
|
@tmp = Tempfile.new("jubilee_config")
|
8
|
+
@resp = [200, {"Content-Type" => "text/plain"}, ["embedded app"]]
|
9
|
+
@dir = Dir.getwd
|
8
10
|
end
|
9
11
|
|
10
12
|
def teardown
|
11
13
|
@tmp.close
|
12
14
|
@tmp.unlink
|
15
|
+
Dir.chdir(@dir)
|
13
16
|
end
|
14
17
|
|
15
18
|
def test_load
|
16
|
-
@config = Jubilee::Configuration.new({rackup: "config/
|
17
|
-
resp
|
19
|
+
@config = Jubilee::Configuration.new({rackup: "test/config/config.ru"})
|
20
|
+
assert_equal @resp, @config.app.call({})
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_change_dir
|
24
|
+
@config = Jubilee::Configuration.new({chdir: "test/config"})
|
25
|
+
assert_equal @resp, @config.app.call({})
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_customize_config_file
|
29
|
+
@config = Jubilee::Configuration.new({chdir: "test/config", rackup: "app.ru"})
|
30
|
+
resp = [200, {"Content-Type" => "text/plain"}, ["customized body"]]
|
18
31
|
assert_equal resp, @config.app.call({})
|
19
32
|
end
|
20
33
|
|
@@ -53,18 +66,20 @@ class TestConfig < MiniTest::Unit::TestCase
|
|
53
66
|
assert_equal("/eb", options[:eventbus_prefix])
|
54
67
|
end
|
55
68
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
69
|
+
# This will trigger the initialization of vertx cluster manager so the rake
|
70
|
+
# task won't quit at the end
|
71
|
+
#def test_config_file_clustering_true
|
72
|
+
# @tmp.syswrite(%q(clustering true))
|
73
|
+
# options = Jubilee::Configuration.new(config_file: @tmp.path).options
|
74
|
+
# assert_equal("0.0.0.0", options[:cluster_host])
|
75
|
+
#end
|
61
76
|
|
62
|
-
def test_config_file_clustering_host_and_port
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
77
|
+
#def test_config_file_clustering_host_and_port
|
78
|
+
# @tmp.syswrite(%q(clustering "localhost:5701"))
|
79
|
+
# options = Jubilee::Configuration.new(config_file: @tmp.path).options
|
80
|
+
# assert_equal("127.0.0.1", options[:cluster_host])
|
81
|
+
# assert_equal(5701, options[:cluster_port])
|
82
|
+
#end
|
68
83
|
|
69
84
|
def test_config_file_working_directory
|
70
85
|
@tmp.syswrite(%q(working_directory "chatapp"))
|
@@ -39,9 +39,14 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
class RackCrasher < Rack::Lint
|
43
|
+
def call(env)
|
44
|
+
raise "Oops"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
42
48
|
def setup
|
43
49
|
@valid_request = "GET / HTTP/1.1\r\nHost: test.com\r\nContent-Type: text/plain\r\n\r\n"
|
44
|
-
|
45
50
|
@simple = lambda { |env| [200, { "X-Header" => "Works" }, ["Hello"]] }
|
46
51
|
@checker = ErrorChecker.new ServerLint.new(@simple)
|
47
52
|
@host = "localhost"
|
@@ -49,7 +54,7 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
49
54
|
end
|
50
55
|
|
51
56
|
def teardown
|
52
|
-
@server.stop
|
57
|
+
@server.stop if @server
|
53
58
|
sleep 0.1
|
54
59
|
end
|
55
60
|
|
@@ -70,7 +75,6 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
70
75
|
@server = Jubilee::Server.new @checker
|
71
76
|
|
72
77
|
@server.start
|
73
|
-
sleep 0.1
|
74
78
|
|
75
79
|
big = "x" * (1024 * 16)
|
76
80
|
|
@@ -84,7 +88,7 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
84
88
|
|
85
89
|
def test_path_info
|
86
90
|
input = nil
|
87
|
-
@server = Jubilee::Server.new
|
91
|
+
@server = Jubilee::Server.new(lambda { |env| input = env; @simple.call(env) })
|
88
92
|
@server.start
|
89
93
|
|
90
94
|
hit(['http://127.0.0.1:8080/test/a/b/c'])
|
@@ -96,7 +100,6 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
96
100
|
input = nil
|
97
101
|
@server = Jubilee::Server.new(Rack::MethodOverride.new(lambda { |env| input = env; @simple.call(env) }))
|
98
102
|
@server.start
|
99
|
-
sleep 0.1
|
100
103
|
|
101
104
|
POST('/test/a/b/c', {"_method" => "delete", "user" => 1})
|
102
105
|
assert_equal "DELETE", input['REQUEST_METHOD']
|
@@ -109,7 +112,7 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
109
112
|
|
110
113
|
def test_query_string
|
111
114
|
input = nil
|
112
|
-
@server = Jubilee::Server.new
|
115
|
+
@server = Jubilee::Server.new(lambda { |env| input = env; @simple.call(env) })
|
113
116
|
@server.start
|
114
117
|
|
115
118
|
hit(['http://127.0.0.1:8080/test/a/b/c?foo=bar'])
|
@@ -120,12 +123,11 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
120
123
|
def test_post_data
|
121
124
|
require 'rack/request'
|
122
125
|
input = nil
|
123
|
-
@server = Jubilee::Server.new
|
126
|
+
@server = Jubilee::Server.new(lambda { |env| input = env; @simple.call(env) })
|
124
127
|
@server.start
|
125
|
-
sleep 0.1
|
126
128
|
|
127
129
|
req = Net::HTTP::Post::Multipart.new("/", "foo" => "bar")
|
128
|
-
|
130
|
+
Net::HTTP.start('localhost', 8080) do |http|
|
129
131
|
http.request req
|
130
132
|
end
|
131
133
|
|
@@ -134,4 +136,11 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
134
136
|
request = Rack::Request.new input
|
135
137
|
assert_equal "bar", request.params["foo"]
|
136
138
|
end
|
139
|
+
|
140
|
+
def test_end_request_when_rack_crashes
|
141
|
+
@server = Jubilee::Server.new(RackCrasher.new(@simple))
|
142
|
+
@server.start
|
143
|
+
res = hit(['http://127.0.0.1:8080/test'])
|
144
|
+
assert_kind_of Net::HTTPServerError, res[0]
|
145
|
+
end
|
137
146
|
end
|
data/test/jubilee/test_server.rb
CHANGED
@@ -27,8 +27,8 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
27
27
|
assert_equal "http", body
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
31
|
-
config = Jubilee::Configuration.new(rackup: File.join(File.dirname(__FILE__), "../config/
|
30
|
+
def test_server_embedded
|
31
|
+
config = Jubilee::Configuration.new(rackup: File.join(File.dirname(__FILE__), "../config/config.ru"))
|
32
32
|
@server = Jubilee::Server.new(config.app)
|
33
33
|
@server.start
|
34
34
|
sleep 0.1
|
@@ -39,7 +39,7 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
39
39
|
body = resp.body
|
40
40
|
end
|
41
41
|
end
|
42
|
-
assert_equal "
|
42
|
+
assert_equal "embedded app", body
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_large_post_body
|
data/test/jubilee/test_upload.rb
CHANGED
@@ -70,6 +70,7 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
70
70
|
assert_equal "HTTP/1.0 200 OK", read[0]
|
71
71
|
resp = eval(read.grep(/^X-Resp: /).first.sub!(/X-Resp: /, ''))
|
72
72
|
assert_equal @sha1.hexdigest, resp[:sha1]
|
73
|
+
sock.close
|
73
74
|
end
|
74
75
|
|
75
76
|
def test_put_content_md5
|
@@ -115,6 +116,7 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
115
116
|
assert_equal "HTTP/1.0 200 OK", read[0]
|
116
117
|
resp = eval(read.grep(/^X-Resp: /).first.sub!(/X-Resp: /, ''))
|
117
118
|
assert_equal @sha1.hexdigest, resp[:sha1]
|
119
|
+
sock.close
|
118
120
|
end
|
119
121
|
|
120
122
|
def test_put_keepalive_truncates_small_overwrite
|
@@ -139,6 +141,7 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
139
141
|
resp = eval(read.grep(/^X-Resp: /).first.sub!(/X-Resp: /, ''))
|
140
142
|
#assert_equal to_upload, resp[:size]
|
141
143
|
assert_equal @sha1.hexdigest, resp[:sha1]
|
144
|
+
sock.close
|
142
145
|
end
|
143
146
|
|
144
147
|
def test_put_excessive_overwrite_closed
|
@@ -153,7 +156,8 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
153
156
|
[ 200, @hdr, [] ]
|
154
157
|
})
|
155
158
|
sock = TCPSocket.new(@addr, @port)
|
156
|
-
buf = ' ' * @bs
|
159
|
+
# buf = ' ' * @bs # Something is wrong with the vertx http compression
|
160
|
+
buf = 'a' * @bs
|
157
161
|
sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n")
|
158
162
|
|
159
163
|
@count.times { sock.syswrite(buf) }
|
@@ -163,6 +167,7 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
163
167
|
sock.gets
|
164
168
|
tmp.rewind
|
165
169
|
assert_equal length, tmp.read.to_i
|
170
|
+
sock.close
|
166
171
|
end
|
167
172
|
|
168
173
|
def test_uncomfortable_with_onenine_encodings
|
data/test/test_helper.rb
CHANGED
@@ -9,15 +9,7 @@ require 'yaml'
|
|
9
9
|
def hit(uris)
|
10
10
|
sleep 0.1
|
11
11
|
uris.map do |u|
|
12
|
-
res =
|
13
|
-
|
14
|
-
if u.kind_of? String
|
15
|
-
res = Net::HTTP.get(URI.parse(u))
|
16
|
-
else
|
17
|
-
url = URI.parse(u[0])
|
18
|
-
res = Net::HTTP.new(url.host, url.port).start {|h| h.request(u[1]) }
|
19
|
-
end
|
20
|
-
|
12
|
+
res = Net::HTTP.get_response(URI(u))
|
21
13
|
assert res != nil, "Didn't get a response: #{u}"
|
22
14
|
res
|
23
15
|
end
|
@@ -59,6 +51,7 @@ module Helpers
|
|
59
51
|
attr_reader :status, :response
|
60
52
|
|
61
53
|
def GET(path, header={})
|
54
|
+
sleep 0.1
|
62
55
|
Net::HTTP.start(@host, @port) { |http|
|
63
56
|
user = header.delete(:user)
|
64
57
|
passwd = header.delete(:passwd)
|
@@ -77,6 +70,7 @@ module Helpers
|
|
77
70
|
end
|
78
71
|
|
79
72
|
def POST(path, formdata={}, header={})
|
73
|
+
sleep 0.1
|
80
74
|
Net::HTTP.start(@host, @port) { |http|
|
81
75
|
user = header.delete(:user)
|
82
76
|
passwd = header.delete(:passwd)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jubilee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Isaiah Peng
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -93,9 +93,9 @@ files:
|
|
93
93
|
- jars/jackson-annotations-2.2.2.jar
|
94
94
|
- jars/jackson-core-2.2.2.jar
|
95
95
|
- jars/jackson-databind-2.2.2.jar
|
96
|
-
- jars/netty-all-4.0.
|
97
|
-
- jars/vertx-core-2.1M3
|
98
|
-
- jars/vertx-hazelcast-2.1M3
|
96
|
+
- jars/netty-all-4.0.14.Final.jar
|
97
|
+
- jars/vertx-core-2.1M3.jar
|
98
|
+
- jars/vertx-hazelcast-2.1M3.jar
|
99
99
|
- java/resources/META-INF/services/org.vertx.java.core.spi.cluster.ClusterManagerFactory
|
100
100
|
- java/resources/default-cluster.xml
|
101
101
|
- java/src/jubilee/JubileeService.java
|
@@ -205,16 +205,14 @@ files:
|
|
205
205
|
- spec/spec_helper.rb
|
206
206
|
- test/.ruby-version
|
207
207
|
- test/config/app.rb
|
208
|
+
- test/config/app.ru
|
209
|
+
- test/config/config.ru
|
208
210
|
- test/jubilee/test_cli.rb
|
209
211
|
- test/jubilee/test_configuration.rb
|
210
212
|
- test/jubilee/test_rack_server.rb
|
211
213
|
- test/jubilee/test_response.rb
|
212
214
|
- test/jubilee/test_server.rb
|
213
215
|
- test/jubilee/test_upload.rb
|
214
|
-
- test/sinatra_app/app.rb
|
215
|
-
- test/sinatra_app/config.ru
|
216
|
-
- test/sinatra_app/public/test.html
|
217
|
-
- test/sinatra_app/unicorn.conf.rb
|
218
216
|
- test/test_helper.rb
|
219
217
|
homepage: http://isaiah.github.io/jubilee
|
220
218
|
licenses:
|
data/test/sinatra_app/app.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
#$:.unshift("/home/isaiah/codes/ruby/rack/lib")
|
2
|
-
require 'sinatra'
|
3
|
-
|
4
|
-
class Vertx < Sinatra::Base
|
5
|
-
get '/' do
|
6
|
-
"<h1>Hello Sinatra!</h1>"
|
7
|
-
end
|
8
|
-
|
9
|
-
post "/home/test" do
|
10
|
-
#require 'pp'
|
11
|
-
#pp env['rack.input'].gets
|
12
|
-
#require 'rack/multipart'
|
13
|
-
#puts "=========="
|
14
|
-
##pp Rack::Multipart.parse_multipart(env)
|
15
|
-
#puts "=========="
|
16
|
-
##pp env
|
17
|
-
#pp request.params
|
18
|
-
#puts "=========="
|
19
|
-
a = ""
|
20
|
-
params.each{|k,v| a << "#{k}:#{v}\n"}
|
21
|
-
a
|
22
|
-
end
|
23
|
-
|
24
|
-
get '/app' do
|
25
|
-
<<EOF
|
26
|
-
<h1>Powered by Jubilee</h1>
|
27
|
-
<a href="http://www.github.com/isaiah/jubilee">Homepage</a>
|
28
|
-
<p>Date: #{Time.now.strftime("%m %d, %Y")}</p>
|
29
|
-
EOF
|
30
|
-
end
|
31
|
-
end
|
data/test/sinatra_app/config.ru
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
require './app'
|
2
|
-
#$:.unshift("/home/isaiah/codes/ruby/rack/lib")
|
3
|
-
#require 'pp'
|
4
|
-
#require 'rack/multipart'
|
5
|
-
#run lambda { |env| pp env; puts "=="; pp env['rack.input'].gets; puts "=="; params = Rack::Multipart.parse_multipart(env); pp params; [200, {"Content-Type" => "text/plain", "Content-Length" => "44"}, params.map{|k,v| k + ":" + v}] }
|
6
|
-
run Vertx
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# Use at least one worker per core if you're on a dedicated server,
|
2
|
-
# more will usually help for _short_ waits on databases/caches.
|
3
|
-
worker_processes 10
|
4
|
-
|
5
|
-
# Since Unicorn is never exposed to outside clients, it does not need to
|
6
|
-
# run on the standard HTTP port (80), there is no reason to start Unicorn
|
7
|
-
# as root unless it's from system init scripts.
|
8
|
-
# If running the master process as root and the workers as an unprivileged
|
9
|
-
# user, do this to switch euid/egid in the workers (also chowns logs):
|
10
|
-
# user "unprivileged_user", "unprivileged_group"
|
11
|
-
|
12
|
-
# Help ensure your application will always spawn in the symlinked
|
13
|
-
# "current" directory that Capistrano sets up.
|
14
|
-
|
15
|
-
# listen on both a Unix domain socket and a TCP port,
|
16
|
-
# we use a shorter backlog for quicker failover when busy
|
17
|
-
listen 8080, :tcp_nopush => true
|
18
|
-
|
19
|
-
# nuke workers after 30 seconds instead of 60 seconds (the default)
|
20
|
-
timeout 30
|
21
|
-
|
22
|
-
# feel free to point this anywhere accessible on the filesystem
|
23
|
-
pid "/tmp/unicorn.pid"
|
24
|
-
|
25
|
-
# By default, the Unicorn logger will write to stderr.
|
26
|
-
# Additionally, ome applications/frameworks log to stderr or stdout,
|
27
|
-
# so prevent them from going to /dev/null when daemonized here:
|
28
|
-
#stderr_path "log/unicorn.stderr.log"
|
29
|
-
#stdout_path "log/unicorn.stdout.log"
|