jubilee 2.0.0-java → 2.1.0.Alpha1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -1
  4. data/Rakefile +1 -1
  5. data/jars/hazelcast-3.2.3.jar +0 -0
  6. data/jars/{netty-all-4.0.14.Final.jar → netty-all-4.0.20.Final.jar} +0 -0
  7. data/jars/vertx-core-2.1.1.jar +0 -0
  8. data/jars/vertx-hazelcast-2.1.1.jar +0 -0
  9. data/jars/vertx-platform-2.1.1.jar +0 -0
  10. data/java/src/org/jruby/jubilee/JubileeVerticle.java +68 -45
  11. data/java/src/org/jruby/jubilee/RackApplication.java +6 -0
  12. data/java/src/org/jruby/jubilee/RubyPlatformManager.java +5 -5
  13. data/java/src/org/jruby/jubilee/impl/RubyIORackInput.java +2 -3
  14. data/lib/jubilee.rb +5 -5
  15. data/lib/jubilee/cli.rb +4 -4
  16. data/lib/jubilee/configuration.rb +2 -6
  17. data/lib/jubilee/jubilee.jar +0 -0
  18. data/lib/jubilee/server.rb +1 -5
  19. data/lib/jubilee/version.rb +2 -2
  20. data/spec/apps/rails4/basic/Gemfile.lock +5 -1
  21. data/spec/integration/basic_rack_spec.rb +1 -1
  22. data/spec/integration/basic_rails4_spec.rb +1 -1
  23. data/spec/integration/basic_sinatra_spec.rb +1 -2
  24. data/test/apps/checker.ru +38 -0
  25. data/test/apps/method_override.ru +2 -0
  26. data/test/apps/overwrite_check.ru +8 -0
  27. data/test/apps/rack_crasher.ru +8 -0
  28. data/test/apps/sha1.ru +38 -0
  29. data/test/apps/simple.ru +1 -0
  30. data/test/apps/url_scheme.ru +1 -0
  31. data/test/jubilee/test_configuration.rb +0 -1
  32. data/test/jubilee/test_rack_server.rb +1 -42
  33. data/test/jubilee/test_server.rb +5 -21
  34. data/test/jubilee/test_upload.rb +19 -61
  35. metadata +16 -9
  36. data/jars/hazelcast-2.6.3.jar +0 -0
  37. data/jars/vertx-core-2.1M3.jar +0 -0
  38. data/jars/vertx-hazelcast-2.1M3.jar +0 -0
  39. data/jars/vertx-platform-2.1M3.jar +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31e24331a936300e3f3bb67b16e5b05376fcb2aa
4
- data.tar.gz: 22ec68885ddfd56a2b0d42fe1be450e40d596e7b
3
+ metadata.gz: 683724968b6ea7ae25e8fcb25f3684bc65df6a47
4
+ data.tar.gz: 92f9f51d3833a0b228bc22f49cdcd07a4d2a02f2
5
5
  SHA512:
6
- metadata.gz: ad993339e4c2e8ff3314c17836fd8902c83db105b86554b88d90bc38d0117d25548919dcad367cd204f013b39639d4a94191b50d158f5d836906fe045b5d9b5f
7
- data.tar.gz: 8e3144d4805b226a6e82da0f01ec069402cf21d050eb0df1af16ab89e4dd42c1885c82de3c88ad1773fc46be3d6a5147efbcf470bc1f995a587f8d658067554b
6
+ metadata.gz: e9a114e152bc837ab4ce9d8ab2759cf7edcc9f2f79e40871c3e8c8b4d0489d08b29eb8bfcafc74318e13025a4d5d6c60a2350cdc4e3670096f90c96842b84a70
7
+ data.tar.gz: 9de31bb5904dc1ff30d37bb2f081bb451dd024819f1a758594514839e68d0cf1d47f836d35438ade2993126dd655a00d8f5f8effbc077cb0ee935afde57f09e0
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- jruby-1.7.8
1
+ jruby-1.7.13
data/.travis.yml CHANGED
@@ -2,4 +2,4 @@ language: ruby
2
2
  rvm:
3
3
  - jruby-19mode # JRuby in 1.9 mode
4
4
 
5
- script: "bundle exec rake spec test"
5
+ script: "bundle exec rake spec"
data/Rakefile CHANGED
@@ -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.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:jars/vertx-platform-2.1M3.jar"
89
+ :classpath => "${java.class.path}:${sun.boot.class.path}:jars/vertx-core-2.1.1.jar:jars/netty-all-4.0.20.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-3.2.3.jar:jars/vertx-platform-2.1.1.jar:jars/vertx-hazelcast-2.1.1.jar"
90
90
  end
91
91
 
92
92
  desc "Copy META-INF"
Binary file
Binary file
Binary file
Binary file
@@ -1,6 +1,7 @@
1
1
  package org.jruby.jubilee;
2
2
 
3
3
  import org.jruby.Ruby;
4
+ import org.jruby.RubyInstanceConfig;
4
5
  import org.jruby.runtime.builtin.IRubyObject;
5
6
  import org.vertx.java.core.Handler;
6
7
  import org.vertx.java.core.http.HttpServer;
@@ -11,59 +12,81 @@ import org.vertx.java.platform.Verticle;
11
12
  import org.vertx.java.platform.impl.WrappedVertx;
12
13
 
13
14
  import java.io.IOException;
15
+ import java.util.Arrays;
14
16
 
15
17
  /**
16
18
  * Created by isaiah on 23/01/2014.
17
19
  */
18
20
  public class JubileeVerticle extends Verticle {
19
- private Ruby ruby;
21
+ private Ruby runtime;
20
22
 
21
- @Override
22
- public void start() {
23
- JsonObject config = container.config();
24
- HttpServer httpServer = vertx.createHttpServer();
25
- ruby = config.getValue("ruby");
26
- IRubyObject rackApplication;
27
- final RackApplication app;
28
- boolean ssl =config.getBoolean("ssl");
29
- if (config.containsField("rackapp")) rackApplication = config.getValue("rackapp");
30
- else {
31
- String rackup = config.getString("rackup");
32
- String rackScript = "require 'rack'\n" +
33
- "require 'jubilee'\n" +
34
- "app, _ = Rack::Builder.parse_file('" + rackup + "')\n";
35
- if (!config.getBoolean("quiet") && config.getString("environment").equals("development")) {
36
- rackScript += "logger = STDOUT\n" +
37
- "app = Rack::CommonLogger.new(app, logger)\n";
38
- }
39
- rackScript += "Jubilee::Application.new(app)\n";
40
- rackApplication = ruby.evalScriptlet(rackScript);
23
+ @Override
24
+ public void start() {
25
+ JsonObject config = container.config();
26
+ HttpServer httpServer = vertx.createHttpServer();
27
+ String root = config.getString("root", ".");
28
+ this.runtime = createRuntime(root, config);
29
+ String expandedRoot = this.runtime.evalScriptlet("File.expand_path(%q(" + root + "))").asJavaString();
30
+ this.runtime.setCurrentDirectory(expandedRoot);
31
+ IRubyObject rackApplication = initRackApplication(config);
32
+ final RackApplication app;
33
+ boolean ssl = config.getBoolean("ssl");
34
+ try {
35
+ app = new RackApplication((WrappedVertx) vertx, runtime.getCurrentContext(), rackApplication, ssl);
36
+ httpServer.setAcceptBacklog(10000);
37
+ httpServer.requestHandler(new Handler<HttpServerRequest>() {
38
+ public void handle(final HttpServerRequest req) {
39
+ app.call(req);
40
+ }
41
+ });
42
+ if (config.containsField("event_bus")) {
43
+ JsonArray allowAll = new JsonArray();
44
+ allowAll.add(new JsonObject());
45
+ JsonObject ebconf = new JsonObject();
46
+ ebconf.putString("prefix", config.getString("event_bus"));
47
+ vertx.createSockJSServer(httpServer).bridge(ebconf, allowAll, allowAll);
48
+ }
49
+ if (ssl) httpServer.setSSL(true).setKeyStorePath(config.getString("keystore_path"))
50
+ .setKeyStorePassword(config.getString("keystore_password"));
51
+ httpServer.listen(config.getInteger("port"), config.getString("host"));
52
+ } catch (IOException e) {
53
+ container.logger().fatal("Failed to create RackApplication");
54
+ }
55
+ }
56
+
57
+ @Override
58
+ public void stop() {
59
+ this.runtime.tearDown();
41
60
  }
42
- try {
43
- app = new RackApplication((WrappedVertx) vertx, ruby.getCurrentContext(), rackApplication, ssl);
44
- httpServer.setAcceptBacklog(10000);
45
- httpServer.requestHandler(new Handler<HttpServerRequest>() {
46
- public void handle(final HttpServerRequest req) {
47
- app.call(req);
61
+
62
+ private Ruby createRuntime(String root, JsonObject options) {
63
+ Ruby runtime;
64
+ // if (Ruby.isGlobalRuntimeReady()) {
65
+ // runtime = Ruby.getGlobalRuntime();
66
+ // } else {
67
+ RubyInstanceConfig instanceConfig = new RubyInstanceConfig();
68
+ String jrubyHome = options.getString("jruby-home", "");
69
+ if (!jrubyHome.isEmpty()) {
70
+ instanceConfig.setJRubyHome(jrubyHome);
48
71
  }
49
- });
50
- if (config.containsField("event_bus")) {
51
- JsonArray allowAll = new JsonArray();
52
- allowAll.add(new JsonObject());
53
- JsonObject ebconf = new JsonObject();
54
- ebconf.putString("prefix", config.getString("event_bus"));
55
- vertx.createSockJSServer(httpServer).bridge(ebconf, allowAll, allowAll);
56
- }
57
- if (ssl) httpServer.setSSL(true).setKeyStorePath(config.getString("keystore_path"))
58
- .setKeyStorePassword(config.getString("keystore_password"));
59
- httpServer.listen(config.getInteger("port"), config.getString("host"));
60
- } catch (IOException e) {
61
- container.logger().fatal("Failed to create RackApplication");
72
+ Object[] argv = options.getArray("argv", new JsonArray(new String[]{})).toArray();
73
+ instanceConfig.setArgv(Arrays.copyOf(argv, argv.length, String[].class));
74
+ runtime = Ruby.newInstance(instanceConfig);
75
+ // }
76
+ runtime.getLoadService().addPaths(root);
77
+ return runtime;
62
78
  }
63
- }
64
79
 
65
- @Override
66
- public void stop() {
67
- this.ruby.tearDown(false);
68
- }
80
+ private IRubyObject initRackApplication(JsonObject config) {
81
+ String rackup = config.getString("rackup");
82
+ String rackScript = "require 'rack'\n" +
83
+ "require 'jubilee'\n" +
84
+ "app, _ = Rack::Builder.parse_file('" + rackup + "')\n";
85
+ if (!config.getBoolean("quiet") && config.getString("environment").equals("development")) {
86
+ rackScript += "logger = STDOUT\n" +
87
+ "app = Rack::CommonLogger.new(app, logger)\n";
88
+ }
89
+ rackScript += "Jubilee::Application.new(app)\n";
90
+ return runtime.evalScriptlet(rackScript);
91
+ }
69
92
  }
@@ -81,6 +81,12 @@ public class RackApplication {
81
81
  eof.set(true);
82
82
  }
83
83
  });
84
+ request.exceptionHandler(new Handler<Throwable>() {
85
+ @Override
86
+ public void handle(Throwable ignore) {
87
+ eof.set(true);
88
+ }
89
+ });
84
90
  // } else {
85
91
  // input = nullio;
86
92
  // }
@@ -43,12 +43,13 @@ public class RubyPlatformManager extends RubyObject {
43
43
  }
44
44
 
45
45
  @JRubyMethod
46
- public IRubyObject initialize(ThreadContext context, IRubyObject config) {
47
- RubyHash options = config.convertToHash();
46
+ public IRubyObject initialize(final ThreadContext context, IRubyObject config) {
47
+ final RubyHash options = config.convertToHash();
48
48
  Ruby runtime = context.runtime;
49
49
  RubySymbol clustered_k = runtime.newSymbol("clustered");
50
50
  RubySymbol cluster_host_k = runtime.newSymbol("cluster_host");
51
51
  RubySymbol cluster_port_k = runtime.newSymbol("cluster_port");
52
+ final RubySymbol port_k = runtime.newSymbol("Port");
52
53
  if (options.containsKey(clustered_k) && options.op_aref(context, clustered_k).isTrue()) {
53
54
  int clusterPort = 0;
54
55
  String clusterHost = null;
@@ -68,6 +69,7 @@ public class RubyPlatformManager extends RubyObject {
68
69
  @Override
69
70
  public void handle(AsyncResult<String> result) {
70
71
  if (result.succeeded()) {
72
+ context.runtime.getOutputStream().println("Jubilee is listening on port " + options.op_aref(context, port_k) +", press Ctrl+C to quit");
71
73
  // System.out.println("Deployment ID is " + result.result());
72
74
  } else{
73
75
  result.cause().printStackTrace();
@@ -102,8 +104,6 @@ public class RubyPlatformManager extends RubyObject {
102
104
 
103
105
  if (options.has_key_p(rack_up_k).isTrue())
104
106
  map.put("rackup", options.op_aref(context, rack_up_k).asJavaString());
105
- if (options.has_key_p(rack_app_k).isTrue())
106
- map.put("rackapp", options.op_aref(context, rack_app_k));
107
107
  map.put("quiet", options.containsKey(quiet_k) && options.op_aref(context, quiet_k).isTrue());
108
108
 
109
109
  map.put("environment", options.op_aref(context, environment_k).asJavaString());
@@ -118,7 +118,7 @@ public class RubyPlatformManager extends RubyObject {
118
118
  if (options.has_key_p(eventbus_prefix_k).isTrue())
119
119
  map.put("event_bus", options.op_aref(context, eventbus_prefix_k).asJavaString());
120
120
  // This is a trick to put an Object into the config object
121
- map.put("ruby", runtime);
121
+ // map.put("ruby", runtime);
122
122
  return map;
123
123
  }
124
124
  /*
@@ -73,14 +73,13 @@ public class RubyIORackInput extends RubyObject implements RackInput {
73
73
 
74
74
  if (isEOF()) return runtime.getNil();
75
75
 
76
- int lineEnd = -1;
76
+ int lineEnd = buf.indexOf(buf.readerIndex(), buf.writerIndex(), Const.EOL);
77
77
  while (lineEnd == -1 && !eof.get()) {
78
78
  lineEnd = buf.indexOf(buf.readerIndex(), buf.writerIndex(), Const.EOL);
79
79
  }
80
80
 
81
81
  // No line break found, read all
82
- if (lineEnd == -1)
83
- return readAll(runtime, line);
82
+ if (lineEnd == -1) return readAll(runtime, line);
84
83
 
85
84
  int readLength = lineEnd - buf.readerIndex();
86
85
  byte[] dst = new byte[readLength + 1];
data/lib/jubilee.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  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
- require File.join(File.dirname(__FILE__), "../jars/hazelcast-2.6.3.jar")
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/vertx-platform-2.1M3.jar")
8
- require File.join(File.dirname(__FILE__), "../jars/netty-all-4.0.14.Final.jar")
4
+ require File.join(File.dirname(__FILE__), "../jars/hazelcast-3.2.3.jar")
5
+ require File.join(File.dirname(__FILE__), "../jars/vertx-core-2.1.1.jar")
6
+ require File.join(File.dirname(__FILE__), "../jars/vertx-hazelcast-2.1.1.jar")
7
+ require File.join(File.dirname(__FILE__), "../jars/vertx-platform-2.1.1.jar")
8
+ require File.join(File.dirname(__FILE__), "../jars/netty-all-4.0.20.Final.jar")
9
9
 
10
10
  require 'jubilee/jubilee.jar'
11
11
  require 'rack'
data/lib/jubilee/cli.rb CHANGED
@@ -39,7 +39,7 @@ module Jubilee
39
39
  `jubilee_d #{(@argv - ["-d", "--daemon"]).join(" ")}`
40
40
  else
41
41
  @config = Jubilee::Configuration.new(@options)
42
- server = Jubilee::Server.new(nil, @config.options)
42
+ server = Jubilee::Server.new(@config.options)
43
43
  #server.start
44
44
  thread = Thread.current
45
45
  Signal.trap("INT") do
@@ -47,7 +47,7 @@ module Jubilee
47
47
  puts "Jubilee is shutting down gracefully..."
48
48
  thread.wakeup
49
49
  end
50
- puts "Jubilee is listening on port #{@config.options[:Port]}, press Ctrl+C to quit"
50
+ puts "Jubilee is initializing..."
51
51
  sleep
52
52
  end
53
53
  end
@@ -96,7 +96,7 @@ module Jubilee
96
96
  @options[:ssl_keystore] = arg
97
97
  end
98
98
  o.on "--ssl-password PASS", "SSL keystore password" do |arg|
99
- @options[:ssl_keystore] = arg
99
+ @options[:ssl_password] = arg
100
100
  end
101
101
  o.separator ""
102
102
  o.separator "Event bus options:"
@@ -127,7 +127,7 @@ module Jubilee
127
127
  end
128
128
 
129
129
  o.on "-v", "--version", "Print the version information" do
130
- puts "jubilee version #{Jubilee::Version::STRING} on Vert.x 2.1M3"
130
+ puts "jubilee version #{Jubilee::Version::STRING} on Vert.x 2.1.1"
131
131
  exit 0
132
132
  end
133
133
  end
@@ -10,17 +10,16 @@ module Jubilee
10
10
  attr_accessor :config_file
11
11
  attr_reader :options
12
12
 
13
- def initialize(options, &block)
13
+ def initialize(options)
14
14
  @config_file = options.delete(:config_file)
15
15
  @options = options.dup
16
- @block = block
17
16
 
18
17
  reload
19
18
  end
20
19
 
21
20
  def reload
22
21
  instance_eval(File.read(config_file), config_file) if config_file
23
- load_rack_adapter(&@block)
22
+ load_rack_adapter
24
23
  end
25
24
 
26
25
  # sets the host and port jubilee listens to +address+ may be an Integer port
@@ -106,9 +105,6 @@ module Jubilee
106
105
 
107
106
  private
108
107
  def load_rack_adapter(&block)
109
- if block
110
- @options[:rackapp] = Rack::Builder.new(&block).to_app
111
- end
112
108
  Dir.chdir(@options[:chdir]) if @options[:chdir]
113
109
  @options[:rackup] = rackup
114
110
  end
Binary file
@@ -1,16 +1,12 @@
1
1
  module Jubilee
2
2
  class Server < PlatformManager
3
- def initialize(app, opts = {})
3
+ def initialize(opts = {})
4
4
  options = {Host: "0.0.0.0", Port: 8080, ssl: false, instances: 1, environment: "development", quiet: true}.merge(opts)
5
5
  if (options[:ssl]) && options[:ssl_keystore].nil?
6
6
  raise ArgumentError, "Please provide a keystore for ssl"
7
7
  end
8
8
  # Rackup passes a string value
9
9
  options[:Port] = options[:Port].to_i
10
- # back compatible
11
- if app
12
- options[:rackapp] = Application.new(app)
13
- end
14
10
  super(options)
15
11
  end
16
12
 
@@ -1,9 +1,9 @@
1
1
  module Jubilee
2
2
  module Version
3
3
  MAJOR = 2
4
- MINOR = 0
4
+ MINOR = 1
5
5
  PATCH = 0
6
- BUILD = nil
6
+ BUILD = "Alpha1"
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
9
9
  end
@@ -28,6 +28,7 @@ GEM
28
28
  thread_safe (~> 0.1)
29
29
  tzinfo (~> 0.3.37)
30
30
  arel (4.0.1)
31
+ atomic (1.1.14)
31
32
  atomic (1.1.14-java)
32
33
  builder (3.1.4)
33
34
  coffee-rails (4.0.1)
@@ -49,8 +50,9 @@ GEM
49
50
  jquery-rails (3.0.4)
50
51
  railties (>= 3.0, < 5.0)
51
52
  thor (>= 0.14, < 2.0)
53
+ json (1.8.1)
52
54
  json (1.8.1-java)
53
- jubilee (1.1.0.rc1)
55
+ jubilee (2.0.0-java)
54
56
  rack (>= 1.4.1)
55
57
  spoon (~> 0.0.4)
56
58
  mail (2.5.4)
@@ -97,6 +99,8 @@ GEM
97
99
  therubyrhino_jar (>= 1.7.3)
98
100
  therubyrhino_jar (1.7.4)
99
101
  thor (0.18.1)
102
+ thread_safe (0.1.3)
103
+ atomic
100
104
  thread_safe (0.1.3-java)
101
105
  atomic
102
106
  tilt (1.4.1)
@@ -4,7 +4,7 @@ feature "basic rack at non-root context" do
4
4
 
5
5
  before(:all) do
6
6
  configurator = Jubilee::Configuration.new(chdir: "#{apps_dir}/rack/basic")
7
- @server = Jubilee::Server.new(nil, configurator.options)
7
+ @server = Jubilee::Server.new(configurator.options)
8
8
  @server.start
9
9
  sleep 0.1
10
10
  end
@@ -4,7 +4,7 @@ feature 'basic rails4 test' do
4
4
 
5
5
  before(:all) do
6
6
  configurator = Jubilee::Configuration.new(chdir: "#{apps_dir}/rails4/basic")
7
- @server = Jubilee::Server.new(nil, configurator.options)
7
+ @server = Jubilee::Server.new(configurator.options)
8
8
  @server.start
9
9
  sleep 11
10
10
  end
@@ -4,7 +4,7 @@ feature "basic sinatra test" do
4
4
 
5
5
  before(:all) do
6
6
  configurator = Jubilee::Configuration.new(chdir: "#{apps_dir}/sinatra/basic")
7
- @server = Jubilee::Server.new(nil, configurator.options)
7
+ @server = Jubilee::Server.new(configurator.options)
8
8
  @server.start
9
9
  sleep 1
10
10
  end
@@ -79,5 +79,4 @@ feature "basic sinatra test" do
79
79
  end
80
80
  end
81
81
  end
82
-
83
82
  end
@@ -0,0 +1,38 @@
1
+ require 'rack'
2
+ class ErrorChecker
3
+ def initialize(app)
4
+ @app = app
5
+ @exception = nil
6
+ @env = nil
7
+ end
8
+
9
+ attr_reader :exception, :env
10
+
11
+ def call(env)
12
+ begin
13
+ @env = env
14
+ return @app.call(env)
15
+ rescue Exception => e
16
+ @exception = e
17
+
18
+ [
19
+ 500,
20
+ { "X-Exception" => e.message, "X-Exception-Class" => e.class.to_s },
21
+ ["Error detected"]
22
+ ]
23
+ end
24
+ end
25
+ end
26
+
27
+ class ServerLint < Rack::Lint
28
+ def call(env)
29
+ assert("No env given") { env }
30
+ check_env env
31
+
32
+ @app.call(env)
33
+ end
34
+ end
35
+
36
+ use ServerLint
37
+ use ErrorChecker
38
+ run lambda { |env| [200, { "X-Header" => "Works" }, ["Hello"]] }
@@ -0,0 +1,2 @@
1
+ use Rack::MethodOverride
2
+ run lambda { |env| [200, { "X-Header" => "Works" }, ["Hello"]] }
@@ -0,0 +1,8 @@
1
+ hdr = {'Content-Type' => 'text/plain', 'Content-Length' => '0'}
2
+ run lambda do |env|
3
+ nr = 0
4
+ while buf = env['rack.input'].read(65536)
5
+ nr += buf.size
6
+ end
7
+ [ 200, hdr.merge('HTTP-X-Read-Length' => nr.length), [] ]
8
+ end
@@ -0,0 +1,8 @@
1
+ class RackCrasher < Rack::Lint
2
+ def call(env)
3
+ raise "Oops"
4
+ end
5
+ end
6
+
7
+ use RackCrasher
8
+ run lambda { |env| [200, { "X-Header" => "Works" }, ["Hello"]] }
data/test/apps/sha1.ru ADDED
@@ -0,0 +1,38 @@
1
+ bs = 4096
2
+ hdr = {'Content-Type' => 'text/plain', 'Content-Length' => '0'}
3
+ sha1_app = lambda do |env|
4
+ sha1 = Digest::SHA1.new
5
+ input = env['rack.input']
6
+ resp = {}
7
+
8
+ i = 0
9
+ while buf = input.read(bs)
10
+ sha1.update(buf)
11
+ i += buf.size
12
+ end
13
+ resp[:sha1] = sha1.hexdigest
14
+
15
+ # rewind and read again
16
+ input.rewind
17
+ sha1.reset
18
+
19
+ while buf = input.read(bs)
20
+ sha1.update(buf)
21
+ end
22
+
23
+ if resp[:sha1] == sha1.hexdigest
24
+ resp[:sysread_read_byte_match] = true
25
+ end
26
+
27
+ if expect_size = env['HTTP_X_EXPECT_SIZE']
28
+ if expect_size.to_i == i
29
+ resp[:expect_size_match] = true
30
+ end
31
+ end
32
+ resp[:size] = i
33
+ resp[:expect_size] = expect_size
34
+
35
+ [ 200, hdr.merge({'X-Resp' => resp.inspect}), [] ]
36
+ end
37
+
38
+ run sha1_app
@@ -0,0 +1 @@
1
+ run lambda { |env| [200, { "X-Header" => "Works" }, ["Hello"]] }
@@ -0,0 +1 @@
1
+ run lambda { |env| [200, {}, [env['rack.url_scheme']]] }
@@ -5,7 +5,6 @@ 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
8
  @dir = Dir.getwd
10
9
  end
11
10
 
@@ -5,50 +5,9 @@ require 'rack/commonlogger'
5
5
  class TestRackServer < MiniTest::Unit::TestCase
6
6
  include Helpers
7
7
 
8
- class ErrorChecker
9
- def initialize(app)
10
- @app = app
11
- @exception = nil
12
- @env = nil
13
- end
14
-
15
- attr_reader :exception, :env
16
-
17
- def call(env)
18
- begin
19
- @env = env
20
- return @app.call(env)
21
- rescue Exception => e
22
- @exception = e
23
-
24
- [
25
- 500,
26
- { "X-Exception" => e.message, "X-Exception-Class" => e.class.to_s },
27
- ["Error detected"]
28
- ]
29
- end
30
- end
31
- end
32
-
33
- class ServerLint < Rack::Lint
34
- def call(env)
35
- assert("No env given") { env }
36
- check_env env
37
-
38
- @app.call(env)
39
- end
40
- end
41
-
42
- class RackCrasher < Rack::Lint
43
- def call(env)
44
- raise "Oops"
45
- end
46
- end
47
-
48
8
  def setup
49
9
  @valid_request = "GET / HTTP/1.1\r\nHost: test.com\r\nContent-Type: text/plain\r\n\r\n"
50
- @simple = lambda { |env| [200, { "X-Header" => "Works" }, ["Hello"]] }
51
- @checker = ErrorChecker.new ServerLint.new(@simple)
10
+ @checker = "checker.ru"
52
11
  @host = "localhost"
53
12
  @port = 8080
54
13
  end
@@ -12,25 +12,9 @@ class TestJubileeServer < MiniTest::Unit::TestCase
12
12
  sleep 0.1
13
13
  end
14
14
 
15
- def test_server_lambda
16
- app = lambda {|env| [200, {"Content-Type" => "text/plain"}, ["http"]] }
17
- @server = Jubilee::Server.new(app)
18
- @server.start
19
- sleep 0.5
20
-
21
- http, body = Net::HTTP.new(@host, @port), nil
22
- http.start do
23
- req = Net::HTTP::Get.new "/", {}
24
- http.request(req) do |resp|
25
- body = resp.body
26
- end
27
- end
28
- assert_equal "http", body
29
- end
30
-
31
15
  def test_server_embedded
32
16
  config = Jubilee::Configuration.new(rackup: File.expand_path("../../config/config.ru", __FILE__))
33
- @server = Jubilee::Server.new(nil, config.options)
17
+ @server = Jubilee::Server.new(config.options)
34
18
  @server.start
35
19
  sleep 0.5
36
20
  http, body = Net::HTTP.new(@host, @port), nil
@@ -44,10 +28,10 @@ class TestJubileeServer < MiniTest::Unit::TestCase
44
28
  end
45
29
 
46
30
  def test_url_scheme_for_https
47
- app = lambda { |env| [200, {}, [env['rack.url_scheme']]] }
48
- @server = Jubilee::Server.new(app, {port:@port, ssl:true,
49
- ssl_keystore: File.join(File.dirname(__FILE__), "../../examples/keystore.jks"),
50
- ssl_password: "hellojubilee"})
31
+ config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/url_scheme.ru", __FILE__), port: @port, ssl: true,
32
+ ssl_keystore: File.join(File.dirname(__FILE__), "../../examples/keystore.jks"),
33
+ ssl_password: "hellojubilee")
34
+ @server = Jubilee::Server.new(config.options)
51
35
  @server.start
52
36
  sleep 0.5
53
37
  http = Net::HTTP.new @host, @port
@@ -6,50 +6,16 @@ require 'digest/md5'
6
6
  class TestUpload < MiniTest::Unit::TestCase
7
7
 
8
8
  def setup
9
- @addr = ENV['UNICORN_TEST_ADDR'] || '127.0.0.1'
10
- @port = 8080
11
- @hdr = {'Content-Type' => 'text/plain', 'Content-Length' => '0'}
12
- @bs = 4096
13
- @count = 256
9
+ @addr = ENV['UNICORN_TEST_ADDR'] || '127.0.0.1'
10
+ @port = 8080
11
+ @bs = 4096
12
+ @count = 256
14
13
  @server = nil
15
- @sha1 = Digest::SHA1.new
14
+ @sha1 = Digest::SHA1.new
16
15
 
17
16
  # we want random binary data to test 1.9 encoding-aware IO craziness
18
17
  @random = File.open('/dev/urandom','rb')
19
- @sha1_app = lambda do |env|
20
- sha1 = Digest::SHA1.new
21
- input = env['rack.input']
22
- resp = {}
23
-
24
- i = 0
25
- while buf = input.read(@bs)
26
- sha1.update(buf)
27
- i += buf.size
28
- end
29
- resp[:sha1] = sha1.hexdigest
30
-
31
- # rewind and read again
32
- input.rewind
33
- sha1.reset
34
-
35
- while buf = input.read(@bs)
36
- sha1.update(buf)
37
- end
38
-
39
- if resp[:sha1] == sha1.hexdigest
40
- resp[:sysread_read_byte_match] = true
41
- end
42
-
43
- if expect_size = env['HTTP_X_EXPECT_SIZE']
44
- if expect_size.to_i == i
45
- resp[:expect_size_match] = true
46
- end
47
- end
48
- resp[:size] = i
49
- resp[:expect_size] = expect_size
50
-
51
- [ 200, @hdr.merge({'X-Resp' => resp.inspect}), [] ]
52
- end
18
+ sleep 1
53
19
  end
54
20
 
55
21
  def teardown
@@ -58,7 +24,7 @@ class TestUpload < MiniTest::Unit::TestCase
58
24
  end
59
25
 
60
26
  def test_put
61
- start_server(@sha1_app)
27
+ start_server
62
28
  sock = TCPSocket.new(@addr, @port)
63
29
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n")
64
30
  @count.times do |i|
@@ -74,7 +40,7 @@ class TestUpload < MiniTest::Unit::TestCase
74
40
  end
75
41
 
76
42
  def test_put_content_md5
77
- start_server(@sha1_app)
43
+ start_server
78
44
  skip "Vert.x doesn't hendle trailing headers"
79
45
  md5 = Digest::MD5.new
80
46
  sock = TCPSocket.new(@addr, @port)
@@ -99,7 +65,7 @@ class TestUpload < MiniTest::Unit::TestCase
99
65
  end
100
66
 
101
67
  def test_put_trickle_small
102
- start_server(@sha1_app)
68
+ start_server
103
69
  @count, @bs = 2, 128
104
70
  assert_equal 256, length
105
71
  sock = TCPSocket.new(@addr, @port)
@@ -120,7 +86,7 @@ class TestUpload < MiniTest::Unit::TestCase
120
86
  end
121
87
 
122
88
  def test_put_keepalive_truncates_small_overwrite
123
- start_server(@sha1_app)
89
+ start_server
124
90
  sock = TCPSocket.new(@addr, @port)
125
91
  to_upload = length + 1
126
92
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{to_upload}\r\n\r\n")
@@ -145,16 +111,9 @@ class TestUpload < MiniTest::Unit::TestCase
145
111
  end
146
112
 
147
113
  def test_put_excessive_overwrite_closed
148
- tmp = Tempfile.new('overwrite_check')
149
- tmp.sync = true
150
- start_server(lambda { |env|
151
- nr = 0
152
- while buf = env['rack.input'].read(65536)
153
- nr += buf.size
154
- end
155
- tmp.write(nr.to_s)
156
- [ 200, @hdr, [] ]
157
- })
114
+ config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/overwrite_check.ru", __FILE__))
115
+ @server = Jubilee::Server.new(config.options)
116
+
158
117
  sock = TCPSocket.new(@addr, @port)
159
118
  # buf = ' ' * @bs # Something is wrong with the vertx http compression
160
119
  buf = 'a' * @bs
@@ -165,8 +124,6 @@ class TestUpload < MiniTest::Unit::TestCase
165
124
  16384.times { sock.syswrite(buf) }
166
125
  end
167
126
  sock.gets
168
- tmp.rewind
169
- assert_equal length, tmp.read.to_i
170
127
  sock.close
171
128
  end
172
129
 
@@ -176,7 +133,7 @@ class TestUpload < MiniTest::Unit::TestCase
176
133
  which('sha1sum') or return
177
134
  which('dd') or return
178
135
 
179
- start_server(@sha1_app)
136
+ start_server
180
137
 
181
138
  tmp = Tempfile.new('dd_dest')
182
139
  assert(system("dd", "if=#{@random.path}", "of=#{tmp.path}",
@@ -218,7 +175,7 @@ class TestUpload < MiniTest::Unit::TestCase
218
175
  which('sha1sum') or return
219
176
  which('dd') or return
220
177
 
221
- start_server(@sha1_app)
178
+ start_server
222
179
 
223
180
  tmp = Tempfile.new('dd_dest')
224
181
  assert(system("dd", "if=#{@random.path}", "of=#{tmp.path}",
@@ -270,7 +227,7 @@ class TestUpload < MiniTest::Unit::TestCase
270
227
  which('sha1sum') or return
271
228
  which('dd') or return
272
229
 
273
- start_server(@sha1_app)
230
+ start_server
274
231
 
275
232
  tmp = Tempfile.new('dd_dest')
276
233
  # small StringIO path
@@ -297,8 +254,9 @@ class TestUpload < MiniTest::Unit::TestCase
297
254
  @bs * @count
298
255
  end
299
256
 
300
- def start_server(app)
301
- @server = Jubilee::Server.new app
257
+ def start_server
258
+ config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/sha1.ru", __FILE__))
259
+ @server = Jubilee::Server.new(config.options)
302
260
  @server.start
303
261
  sleep 0.1
304
262
  end
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: 2.0.0
4
+ version: 2.1.0.Alpha1
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-02-21 00:00:00.000000000 Z
11
+ date: 2014-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -89,14 +89,14 @@ files:
89
89
  - examples/client/vertxbus.js
90
90
  - examples/jubilee.conf.rb
91
91
  - examples/keystore.jks
92
- - jars/hazelcast-2.6.3.jar
92
+ - jars/hazelcast-3.2.3.jar
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.14.Final.jar
97
- - jars/vertx-core-2.1M3.jar
98
- - jars/vertx-hazelcast-2.1M3.jar
99
- - jars/vertx-platform-2.1M3.jar
96
+ - jars/netty-all-4.0.20.Final.jar
97
+ - jars/vertx-core-2.1.1.jar
98
+ - jars/vertx-hazelcast-2.1.1.jar
99
+ - jars/vertx-platform-2.1.1.jar
100
100
  - java/resources/META-INF/services/org.vertx.java.core.spi.cluster.ClusterManagerFactory
101
101
  - java/resources/default-cluster.xml
102
102
  - java/src/jubilee/JubileeService.java
@@ -211,6 +211,13 @@ files:
211
211
  - spec/integration/basic_sinatra_spec.rb
212
212
  - spec/spec_helper.rb
213
213
  - test/.ruby-version
214
+ - test/apps/checker.ru
215
+ - test/apps/method_override.ru
216
+ - test/apps/overwrite_check.ru
217
+ - test/apps/rack_crasher.ru
218
+ - test/apps/sha1.ru
219
+ - test/apps/simple.ru
220
+ - test/apps/url_scheme.ru
214
221
  - test/config/app.rb
215
222
  - test/config/app.ru
216
223
  - test/config/config.ru
@@ -236,9 +243,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
236
243
  version: '0'
237
244
  required_rubygems_version: !ruby/object:Gem::Requirement
238
245
  requirements:
239
- - - '>='
246
+ - - '>'
240
247
  - !ruby/object:Gem::Version
241
- version: '0'
248
+ version: 1.3.1
242
249
  requirements: []
243
250
  rubyforge_project:
244
251
  rubygems_version: 2.1.9
Binary file
Binary file
Binary file
Binary file