jubilee 0.4.1 → 0.5.0
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/README.md +21 -9
- data/VERSION +1 -1
- data/java/src/org/jruby/jubilee/Const.java +1 -1
- data/java/src/org/jruby/jubilee/impl/RubyIORackInput.java +7 -6
- data/jubilee.gemspec +2 -2
- data/lib/jubilee/cli.rb +1 -2
- data/lib/jubilee/configuration.rb +14 -22
- data/lib/jubilee/jubilee.jar +0 -0
- data/test/jubilee/test_config.rb +0 -1
- data/test/jubilee/test_rack_server.rb +5 -1
- data/test/jubilee/test_server.rb +14 -10
- data/test/jubilee/test_upload.rb +1 -1
- data/test/test_helper.rb +1 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -3,26 +3,38 @@
|
|
3
3
|
Jubilee
|
4
4
|
=========
|
5
5
|
|
6
|
-
A fast rack server build upon [vertx](http://vertx.io)
|
6
|
+
A fast rack server build upon [vertx 2.0](http://vertx.io).
|
7
|
+
|
8
|
+
Why another rack server?
|
9
|
+
------------------------
|
10
|
+
|
11
|
+
"Vert.x is a lightweight, high performance application platform for the JVM
|
12
|
+
that's designed for modern mobile, web, and enterprise applications."
|
13
|
+
-- vertx.io site
|
14
|
+
|
15
|
+
In short, Vertx is nodejs on the JVM, only much more faster, checkout the awesome
|
16
|
+
[benchmarks](http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/)
|
17
|
+
|
18
|
+
By using Vertx, jubilee inherent advantages in terms of performance, and all
|
19
|
+
the [other cool features of Vertx](#roadmap).
|
7
20
|
|
8
21
|
Installation
|
9
22
|
-----------
|
10
23
|
|
11
24
|
```gem install jubilee```
|
12
25
|
|
13
|
-
Performance
|
14
|
-
-----------
|
15
26
|
|
16
|
-
|
27
|
+
Roadmap
|
28
|
+
-----------
|
17
29
|
|
18
|
-
|
30
|
+
Eventbus support
|
19
31
|
|
20
|
-
|
32
|
+
Shared data
|
21
33
|
|
22
|
-
|
34
|
+
Clustering
|
23
35
|
|
24
|
-
|
25
|
-
|
36
|
+
Requirements
|
37
|
+
------------
|
26
38
|
|
27
39
|
Java7 or above
|
28
40
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
@@ -14,7 +14,7 @@ import java.util.Map;
|
|
14
14
|
*/
|
15
15
|
public final class Const {
|
16
16
|
|
17
|
-
public static final String JUBILEE_VERSION = "Jubilee 0.
|
17
|
+
public static final String JUBILEE_VERSION = "Jubilee 0.5.0";
|
18
18
|
public static final String HTTP_11 = "HTTP/1.1";
|
19
19
|
public static final String HTTP_10 = "HTTP/1.0";
|
20
20
|
|
@@ -11,6 +11,8 @@ import org.jruby.runtime.Block;
|
|
11
11
|
import org.jruby.runtime.ObjectAllocator;
|
12
12
|
import org.jruby.runtime.ThreadContext;
|
13
13
|
import org.jruby.runtime.builtin.IRubyObject;
|
14
|
+
import org.jruby.util.ByteList;
|
15
|
+
import org.jruby.util.StringSupport;
|
14
16
|
import org.vertx.java.core.http.HttpServerRequest;
|
15
17
|
|
16
18
|
import java.util.Arrays;
|
@@ -103,7 +105,7 @@ public class RubyIORackInput extends RubyObject implements RackInput {
|
|
103
105
|
@Override
|
104
106
|
@JRubyMethod(optional = 2)
|
105
107
|
public IRubyObject read(ThreadContext context, IRubyObject[] args) {
|
106
|
-
RubyString dst = RubyString.
|
108
|
+
RubyString dst = RubyString.newStringNoCopy(getRuntime(), new ByteList(), BINARY, StringSupport.CR_VALID);
|
107
109
|
if (isEOF())
|
108
110
|
return getRuntime().getNil();
|
109
111
|
int length;
|
@@ -126,9 +128,8 @@ public class RubyIORackInput extends RubyObject implements RackInput {
|
|
126
128
|
buf.readBytes(buffer, length - toRead, len);
|
127
129
|
toRead = toRead - len;
|
128
130
|
}
|
129
|
-
if (toRead > 0)
|
130
|
-
|
131
|
-
return dst.cat(buffer);
|
131
|
+
if (toRead > 0) length -= toRead;
|
132
|
+
return dst.cat(buffer, 0, length);
|
132
133
|
}
|
133
134
|
|
134
135
|
/**
|
@@ -190,11 +191,11 @@ public class RubyIORackInput extends RubyObject implements RackInput {
|
|
190
191
|
private IRubyObject readAll(RubyString dst) {
|
191
192
|
buf.readerIndex(0);
|
192
193
|
while(!eof.get())
|
193
|
-
|
194
|
+
; // wait until all data received
|
194
195
|
int length = this.chunked ? buf.readableBytes() : Math.min(this.len, buf.readableBytes());
|
195
196
|
byte[] data = new byte[length];
|
196
|
-
dst.cat(data);
|
197
197
|
buf.readBytes(data);
|
198
|
+
dst.cat(data);
|
198
199
|
return dst.isEmpty() ? getRuntime().getNil() : dst;
|
199
200
|
}
|
200
201
|
}
|
data/jubilee.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "jubilee"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Isaiah Peng"]
|
12
|
-
s.date = "2013-09-
|
12
|
+
s.date = "2013-09-19"
|
13
13
|
s.description = "Jubilee is a experimental webserver built for speed, it's based on Vertx."
|
14
14
|
s.email = "issaria@gmail.com"
|
15
15
|
s.executables = ["jubilee", "jubilee_d"]
|
data/lib/jubilee/cli.rb
CHANGED
@@ -21,7 +21,6 @@ module Jubilee
|
|
21
21
|
def run
|
22
22
|
parse_options
|
23
23
|
@config = Jubilee::Configuration.new(@options)
|
24
|
-
@config.load
|
25
24
|
server = Jubilee::Server.new(@config.app, @options)
|
26
25
|
server.start
|
27
26
|
puts "Jubilee is listening on port #{@config.port}, press Ctrl+C to quit"
|
@@ -35,7 +34,7 @@ module Jubilee
|
|
35
34
|
daemon: false,
|
36
35
|
Port: 3215,
|
37
36
|
ssl: false,
|
38
|
-
environment: "development"
|
37
|
+
environment: ENV["RACK_ENV"] || "development"
|
39
38
|
}
|
40
39
|
@parser = OptionParser.new do |o|
|
41
40
|
o.separator ""
|
@@ -7,8 +7,14 @@ module Jubilee
|
|
7
7
|
@block = block
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
@app
|
10
|
+
def app
|
11
|
+
@app ||= load_rack_adapter(@options, &@block)
|
12
|
+
if !@options[:quiet] and @options[:environment] == "development"
|
13
|
+
logger = @options[:logger] || STDOUT
|
14
|
+
Rack::CommonLogger.new(@app, logger)
|
15
|
+
else
|
16
|
+
@app
|
17
|
+
end
|
12
18
|
end
|
13
19
|
|
14
20
|
def port
|
@@ -44,26 +50,12 @@ module Jubilee
|
|
44
50
|
inner_app, opts = Rack::Builder.parse_file "config.ru"
|
45
51
|
end
|
46
52
|
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
use Rack::ShowExceptions
|
54
|
-
use Rack::Lint
|
55
|
-
run inner_app
|
56
|
-
end.to_app
|
57
|
-
when "deployment"
|
58
|
-
Rack::Builder.new do
|
59
|
-
use Rack::ContentLength
|
60
|
-
use Rack::Chunked
|
61
|
-
use Rack::CommonLogger, $stderr
|
62
|
-
run inner_app
|
63
|
-
end.to_app
|
64
|
-
else
|
65
|
-
inner_app
|
66
|
-
end
|
53
|
+
inner_app
|
54
|
+
#Rack::Builder.new do
|
55
|
+
# use Rack::MethodOverride
|
56
|
+
# use Rack::CommonLogger, $stderr
|
57
|
+
# run inner_app
|
58
|
+
#end.to_app
|
67
59
|
end
|
68
60
|
end
|
69
61
|
end
|
data/lib/jubilee/jubilee.jar
CHANGED
Binary file
|
data/test/jubilee/test_config.rb
CHANGED
@@ -6,7 +6,6 @@ class TestConfig < MiniTest::Unit::TestCase
|
|
6
6
|
@config = Jubilee::Configuration.new({rackup: "config/app.rb"})
|
7
7
|
end
|
8
8
|
def test_load
|
9
|
-
@config.load
|
10
9
|
resp = [200, {"Content-Type" => "text/plain"}, ["embeded app"]]
|
11
10
|
#skip "hard to test because of Rack::Lint"
|
12
11
|
assert_equal resp, @config.app.call({})
|
@@ -50,6 +50,7 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
50
50
|
|
51
51
|
def teardown
|
52
52
|
@server.stop
|
53
|
+
sleep 0.1
|
53
54
|
end
|
54
55
|
|
55
56
|
def test_lint
|
@@ -69,6 +70,7 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
69
70
|
@server = Jubilee::Server.new @checker
|
70
71
|
|
71
72
|
@server.start
|
73
|
+
sleep 0.1
|
72
74
|
|
73
75
|
big = "x" * (1024 * 16)
|
74
76
|
|
@@ -92,8 +94,9 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
92
94
|
|
93
95
|
def test_request_method
|
94
96
|
input = nil
|
95
|
-
@server = Jubilee::Server.new
|
97
|
+
@server = Jubilee::Server.new(Rack::MethodOverride.new(lambda { |env| input = env; @simple.call(env) }))
|
96
98
|
@server.start
|
99
|
+
sleep 0.1
|
97
100
|
|
98
101
|
POST('/test/a/b/c', {"_method" => "delete", "user" => 1})
|
99
102
|
assert_equal "DELETE", input['REQUEST_METHOD']
|
@@ -119,6 +122,7 @@ class TestRackServer < MiniTest::Unit::TestCase
|
|
119
122
|
input = nil
|
120
123
|
@server = Jubilee::Server.new (lambda { |env| input = env; @simple.call(env) })
|
121
124
|
@server.start
|
125
|
+
sleep 0.1
|
122
126
|
|
123
127
|
req = Net::HTTP::Post::Multipart.new("/", "foo" => "bar")
|
124
128
|
resp = Net::HTTP.start('localhost', 3215) do |http|
|
data/test/jubilee/test_server.rb
CHANGED
@@ -4,12 +4,18 @@ require 'net/http'
|
|
4
4
|
class TestJubileeServer < MiniTest::Unit::TestCase
|
5
5
|
def setup
|
6
6
|
@host, @port = "localhost", 3215
|
7
|
+
@server = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
@server.stop if @server
|
7
12
|
end
|
8
13
|
|
9
14
|
def test_server_lambda
|
10
15
|
app = lambda {|env| [200, {"Content-Type" => "text/plain"}, ["http"]] }
|
11
|
-
server = Jubilee::Server.new(app)
|
12
|
-
server.start
|
16
|
+
@server = Jubilee::Server.new(app)
|
17
|
+
@server.start
|
18
|
+
sleep 0.1
|
13
19
|
|
14
20
|
http, body = Net::HTTP.new(@host, @port), nil
|
15
21
|
http.start do
|
@@ -18,15 +24,14 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
18
24
|
body = resp.body
|
19
25
|
end
|
20
26
|
end
|
21
|
-
server.stop
|
22
27
|
assert_equal "http", body
|
23
28
|
end
|
24
29
|
|
25
30
|
def test_server_embeded
|
26
31
|
config = Jubilee::Configuration.new(rackup: File.join(File.dirname(__FILE__), "../config/app.rb"))
|
27
|
-
config.
|
28
|
-
server
|
29
|
-
|
32
|
+
@server = Jubilee::Server.new(config.app)
|
33
|
+
@server.start
|
34
|
+
sleep 0.1
|
30
35
|
http, body = Net::HTTP.new(@host, @port), nil
|
31
36
|
http.start do
|
32
37
|
req = Net::HTTP::Get.new "/", {}
|
@@ -34,7 +39,6 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
34
39
|
body = resp.body
|
35
40
|
end
|
36
41
|
end
|
37
|
-
server.stop
|
38
42
|
assert_equal "embeded app", body
|
39
43
|
end
|
40
44
|
|
@@ -44,10 +48,11 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
44
48
|
|
45
49
|
def test_url_scheme_for_https
|
46
50
|
app = lambda { |env| [200, {}, [env['rack.url_scheme']]] }
|
47
|
-
server = Jubilee::Server.new(app, {port:@port, ssl:true,
|
51
|
+
@server = Jubilee::Server.new(app, {port:@port, ssl:true,
|
48
52
|
keystore_path: File.join(File.dirname(__FILE__), "../../examples/jubilee/server-keystore.jks"),
|
49
53
|
keystore_password: "wibble"})
|
50
|
-
server.start
|
54
|
+
@server.start
|
55
|
+
sleep 0.1
|
51
56
|
http = Net::HTTP.new @host, @port
|
52
57
|
http.use_ssl = true
|
53
58
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
@@ -61,7 +66,6 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
61
66
|
end
|
62
67
|
end
|
63
68
|
|
64
|
-
server.stop
|
65
69
|
assert_equal "https", body
|
66
70
|
end
|
67
71
|
|
data/test/jubilee/test_upload.rb
CHANGED
@@ -185,7 +185,7 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
185
185
|
|
186
186
|
assert $?.success?, 'curl ran OK'
|
187
187
|
assert_match(%r!\b#{sha1}\b!, resp)
|
188
|
-
assert_match(/sysread_read_byte_match/, resp)
|
188
|
+
#assert_match(/sysread_read_byte_match/, resp)
|
189
189
|
|
190
190
|
# small StringIO path
|
191
191
|
assert(system("dd", "if=#{@random.path}", "of=#{tmp.path}",
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: jubilee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.5.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Isaiah Peng
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|