net-http-server 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,14 +11,14 @@ describe Net::HTTP::Server::ChunkedStream do
11
11
  socket = StringIO.new("%x\r\n%s\r\n0\r\n\r\n" % [data.length, data])
12
12
  stream = described_class.new(socket)
13
13
 
14
- stream.read.should == data
14
+ expect(stream.read).to eq(data)
15
15
  end
16
16
 
17
17
  it "should ignore any extension data, after the length field" do
18
18
  socket = StringIO.new("%x;lol\r\n%s\r\n0\r\n\r\n" % [data.length, data])
19
19
  stream = described_class.new(socket)
20
20
 
21
- stream.read.should == data
21
+ expect(stream.read).to eq(data)
22
22
  end
23
23
 
24
24
  it "should read an amount of data from a socket, directly into a buffer" do
@@ -28,22 +28,22 @@ describe Net::HTTP::Server::ChunkedStream do
28
28
  socket = StringIO.new("%x\r\n%s\r\n0\r\n\r\n" % [data.length, data])
29
29
  stream = described_class.new(socket)
30
30
 
31
- stream.read(length,buffer).should == data[0,length]
31
+ expect(stream.read(length,buffer)).to eq(data[0,length])
32
32
  end
33
33
 
34
34
  it "should buffer unread data from the previously read chunk" do
35
35
  socket = StringIO.new("%x\r\n%s\r\n0\r\n\r\n" % [data.length, data])
36
36
  stream = described_class.new(socket)
37
37
 
38
- stream.read(4).should == data[0,4]
39
- stream.read.should == data[4..-1]
38
+ expect(stream.read(4)).to eq(data[0,4])
39
+ expect(stream.read).to eq(data[4..-1])
40
40
  end
41
41
 
42
42
  it "should return nil after it reads the last chunk" do
43
43
  socket = StringIO.new("0\r\n\r\n")
44
44
  stream = described_class.new(socket)
45
45
 
46
- stream.read.should be_nil
46
+ expect(stream.read).to be_nil
47
47
  end
48
48
  end
49
49
 
@@ -52,7 +52,7 @@ describe Net::HTTP::Server::ChunkedStream do
52
52
  socket = StringIO.new
53
53
  stream = described_class.new(socket)
54
54
 
55
- stream.write('foo').should == 3
55
+ expect(stream.write('foo')).to eq(3)
56
56
  end
57
57
 
58
58
  it "should write a length-line along with the data" do
@@ -61,7 +61,7 @@ describe Net::HTTP::Server::ChunkedStream do
61
61
 
62
62
  stream.write('foo')
63
63
 
64
- socket.string.should == "3\r\nfoo\r\n"
64
+ expect(socket.string).to eq("3\r\nfoo\r\n")
65
65
  end
66
66
 
67
67
  it "should not write empty Strings" do
@@ -70,7 +70,7 @@ describe Net::HTTP::Server::ChunkedStream do
70
70
 
71
71
  stream.write('')
72
72
 
73
- socket.string.should be_empty
73
+ expect(socket.string).to be_empty
74
74
  end
75
75
  end
76
76
 
@@ -81,7 +81,7 @@ describe Net::HTTP::Server::ChunkedStream do
81
81
 
82
82
  stream.close
83
83
 
84
- socket.string.should == "0\r\n\r\n"
84
+ expect(socket.string).to eq("0\r\n\r\n")
85
85
  end
86
86
  end
87
87
  end
@@ -8,17 +8,17 @@ describe Net::HTTP::Server::Daemon do
8
8
  subject { described_class.new { |request,response| } }
9
9
 
10
10
  it "should have a default host" do
11
- subject.host.should_not be_nil
11
+ expect(subject.host).to eq(described_class::DEFAULT_HOST)
12
12
  end
13
13
 
14
14
  it "should have a default port" do
15
- subject.port.should_not be_nil
15
+ expect(subject.port).to eq(described_class::DEFAULT_PORT)
16
16
  end
17
17
 
18
18
  it "should require a HTTP Request handler" do
19
- lambda {
19
+ expect {
20
20
  described_class.new
21
- }.should raise_error
21
+ }.to raise_error(ArgumentError,"no HTTP Request Handler block given")
22
22
  end
23
23
  end
24
24
  end
@@ -5,86 +5,86 @@ describe Net::HTTP::Server::Parser do
5
5
  it "should not parse garbage" do
6
6
  garbage = (1..255).map { |b| b.chr }.join * 100
7
7
 
8
- lambda {
8
+ expect {
9
9
  subject.parse(garbage)
10
- }.should raise_error(Parslet::ParseFailed)
10
+ }.to raise_error(Parslet::ParseFailed)
11
11
  end
12
12
 
13
13
  describe "request line" do
14
14
  it "should parse non-standard request methods" do
15
15
  request = subject.parse("FOO / HTTP/1.1\r\n\r\n")
16
16
 
17
- request[:method].should == 'FOO'
17
+ expect(request[:method]).to eq('FOO')
18
18
  end
19
19
 
20
20
  it "should allow '*' as the path" do
21
21
  request = subject.parse("OPTIONS * HTTP/1.1\r\n\r\n")
22
22
 
23
- request[:uri].should == '*'
23
+ expect(request[:uri]).to eq('*')
24
24
  end
25
25
 
26
26
  it "should not confuse the '/*' path with '*'" do
27
27
  request = subject.parse("OPTIONS /* HTTP/1.1\r\n\r\n")
28
28
 
29
- request[:uri][:path].should == '/*'
29
+ expect(request[:uri][:path]).to eq('/*')
30
30
  end
31
31
 
32
32
  it "should parse absolute paths" do
33
33
  request = subject.parse("GET /absolute/path HTTP/1.1\r\n\r\n")
34
34
 
35
- request[:uri][:path].should == '/absolute/path'
35
+ expect(request[:uri][:path]).to eq('/absolute/path')
36
36
  end
37
37
 
38
38
  it "should parse the params in the path" do
39
39
  request = subject.parse("GET /path;q=1;p=2 HTTP/1.1\r\n\r\n")
40
40
 
41
- request[:uri][:path].should == '/path'
42
- request[:uri][:params].should == 'q=1;p=2'
41
+ expect(request[:uri][:path]).to eq('/path')
42
+ expect(request[:uri][:params]).to eq('q=1;p=2')
43
43
  end
44
44
 
45
45
  it "should parse the query-string in the path" do
46
46
  request = subject.parse("GET /path?q=1&p=2 HTTP/1.1\r\n\r\n")
47
47
 
48
- request[:uri][:path].should == '/path'
49
- request[:uri][:query].should == 'q=1&p=2'
48
+ expect(request[:uri][:path]).to eq('/path')
49
+ expect(request[:uri][:query]).to eq('q=1&p=2')
50
50
  end
51
51
 
52
52
  it "should parse absolute URIs paths" do
53
53
  request = subject.parse("GET http://www.example.com:8080/path HTTP/1.1\r\n\r\n")
54
54
 
55
- request[:uri][:scheme].should == 'http'
56
- request[:uri][:host].should == 'www.example.com'
57
- request[:uri][:port].should == '8080'
58
- request[:uri][:path].should == '/path'
55
+ expect(request[:uri][:scheme]).to eq('http')
56
+ expect(request[:uri][:host]).to eq('www.example.com')
57
+ expect(request[:uri][:port]).to eq('8080')
58
+ expect(request[:uri][:path]).to eq('/path')
59
59
  end
60
60
 
61
61
  it "should parse non-http URIs" do
62
62
  request = subject.parse("GET xmpp://alice:secret@example.com/path HTTP/1.1\r\n\r\n")
63
63
 
64
- request[:uri][:scheme].should == 'xmpp'
65
- request[:uri][:user_info].should == 'alice:secret'
66
- request[:uri][:host].should == 'example.com'
67
- request[:uri][:path].should == '/path'
64
+ expect(request[:uri][:scheme]).to eq('xmpp')
65
+ expect(request[:uri][:user_info]).to eq('alice:secret')
66
+ expect(request[:uri][:host]).to eq('example.com')
67
+ expect(request[:uri][:path]).to eq('/path')
68
68
  end
69
69
 
70
70
  it "should parse the HTTP version" do
71
71
  request = subject.parse("GET /path HTTP/1.1\r\n\r\n")
72
72
 
73
- request[:version].should == '1.1'
73
+ expect(request[:version]).to eq('1.1')
74
74
  end
75
75
 
76
76
  it "should allow future HTTP versions" do
77
77
  request = subject.parse("GET /path HTTP/2.0\r\n\r\n")
78
78
 
79
- request[:version].should == '2.0'
79
+ expect(request[:version]).to eq('2.0')
80
80
  end
81
81
 
82
82
  it "should parse simple GET requests" do
83
83
  request = subject.parse("GET / HTTP/1.1\r\n\r\n")
84
84
 
85
- request[:method].should == 'GET'
86
- request[:uri][:path].should == '/'
87
- request[:version].should == '1.1'
85
+ expect(request[:method]).to eq('GET')
86
+ expect(request[:uri][:path]).to eq('/')
87
+ expect(request[:version]).to eq('1.1')
88
88
  end
89
89
  end
90
90
  end
@@ -10,20 +10,20 @@ describe Net::HTTP::Server::Requests do
10
10
  it "should ignore requests that do not contain an HTTP version" do
11
11
  stream = StringIO.new("GET /\r\n")
12
12
 
13
- read_request(stream).should be_nil
13
+ expect(read_request(stream)).to be_nil
14
14
  end
15
15
 
16
16
  it "should ignore requests with malformed headers" do
17
17
  stream = StringIO.new("GET / HTTP/1.1\r\nFoo: Bar\r\nBAZ\r\n\r\n")
18
18
 
19
- read_request(stream).should be_nil
19
+ expect(read_request(stream)).to be_nil
20
20
  end
21
21
 
22
22
  it "should read requests with an HTTP Version and Headers" do
23
23
  request = "GET / HTTP/1.1\r\nFoo: Bar\r\n\r\n"
24
24
  stream = StringIO.new(request)
25
25
 
26
- read_request(stream).should == request
26
+ expect(read_request(stream)).to eq(request)
27
27
  end
28
28
 
29
29
  it "should not read the body of the request" do
@@ -33,7 +33,7 @@ describe Net::HTTP::Server::Requests do
33
33
 
34
34
  read_request(stream)
35
35
 
36
- stream.read.should == body
36
+ expect(stream.read).to eq(body)
37
37
  end
38
38
  end
39
39
 
@@ -42,21 +42,21 @@ describe Net::HTTP::Server::Requests do
42
42
  request = {:uri => {:scheme => 'https'}}
43
43
  normalize_uri(request)
44
44
 
45
- request[:uri][:port].should == 443
45
+ expect(request[:uri][:port]).to eq(443)
46
46
  end
47
47
 
48
48
  it "should convert :port to an Integer" do
49
49
  request = {:uri => {:scheme => 'http', :port => '80'}}
50
50
  normalize_uri(request)
51
51
 
52
- request[:uri][:port].should == 80
52
+ expect(request[:uri][:port]).to eq(80)
53
53
  end
54
54
 
55
55
  it "should replace a '*' URI with an empty Hash" do
56
56
  request = {:uri => '*'}
57
57
  normalize_uri(request)
58
58
 
59
- request[:uri].should == {}
59
+ expect(request[:uri]).to eq({})
60
60
  end
61
61
  end
62
62
 
@@ -65,7 +65,7 @@ describe Net::HTTP::Server::Requests do
65
65
  request = {:headers => []}
66
66
  normalize_headers(request)
67
67
 
68
- request[:headers].should == {}
68
+ expect(request[:headers]).to eq({})
69
69
  end
70
70
 
71
71
  it "should convert header names and values into a Hash" do
@@ -75,10 +75,10 @@ describe Net::HTTP::Server::Requests do
75
75
  ]}
76
76
  normalize_headers(request)
77
77
 
78
- request[:headers].should == {
78
+ expect(request[:headers]).to eq({
79
79
  'Content-Type' => 'text/html',
80
80
  'Content-Length' => '5'
81
- }
81
+ })
82
82
  end
83
83
 
84
84
  it "should group duplicate header names into the same Hash key" do
@@ -88,9 +88,9 @@ describe Net::HTTP::Server::Requests do
88
88
  ]}
89
89
  normalize_headers(request)
90
90
 
91
- request[:headers].should == {
91
+ expect(request[:headers]).to eq({
92
92
  'Content-Type' => ['text/html', 'UTF8']
93
- }
93
+ })
94
94
  end
95
95
  end
96
96
  end
@@ -17,23 +17,23 @@ describe Net::HTTP::Server::Responses do
17
17
  it "should write the HTTP Version" do
18
18
  parts = @stream.string.split(' ')
19
19
 
20
- parts[0].should =~ /HTTP\/1.1/
20
+ expect(parts[0]).to match(/HTTP\/1.1/)
21
21
  end
22
22
 
23
23
  it "should write the Status Code" do
24
24
  parts = @stream.string.split(' ')
25
25
 
26
- parts[1].should == status.to_s
26
+ expect(parts[1]).to eq(status.to_s)
27
27
  end
28
28
 
29
29
  it "should write the Reason String" do
30
30
  parts = @stream.string.split(' ')
31
31
 
32
- parts[2].should == reason
32
+ expect(parts[2]).to eq(reason)
33
33
  end
34
34
 
35
35
  it "should end the line with a '\\r\\n'" do
36
- @stream.string[-2..-1].should == "\r\n"
36
+ expect(@stream.string[-2..-1]).to eq("\r\n")
37
37
  end
38
38
  end
39
39
 
@@ -41,57 +41,57 @@ describe Net::HTTP::Server::Responses do
41
41
  it "should separate header names and values with a ': '" do
42
42
  write_headers(@stream, 'Foo' => 'Bar')
43
43
 
44
- @stream.string.should include(': ')
44
+ expect(@stream.string).to include(': ')
45
45
  end
46
46
 
47
47
  it "should terminate each header with a '\\r\\n'" do
48
48
  write_headers(@stream, 'Foo' => 'Bar', 'Baz' => 'Qix')
49
49
 
50
- @stream.string.split("\r\n").should =~ [
50
+ expect(@stream.string.split("\r\n")).to match_array([
51
51
  'Foo: Bar',
52
52
  'Baz: Qix'
53
- ]
53
+ ])
54
54
  end
55
55
 
56
56
  it "should end the headers with a '\\r\\n'" do
57
57
  write_headers(@stream, {})
58
58
 
59
- @stream.string.should == "\r\n"
59
+ expect(@stream.string).to eq("\r\n")
60
60
  end
61
61
 
62
62
  it "should write String headers" do
63
63
  write_headers(@stream, 'Content-Type' => 'text/html')
64
64
 
65
- @stream.string.split("\r\n").should == [
65
+ expect(@stream.string.split("\r\n")).to eq([
66
66
  'Content-Type: text/html'
67
- ]
67
+ ])
68
68
  end
69
69
 
70
70
  it "should write multiple headers for multi-line String values" do
71
71
  write_headers(@stream, 'Content-Type' => "text/html\ncharset=UTF8")
72
72
 
73
- @stream.string.split("\r\n").should == [
73
+ expect(@stream.string.split("\r\n")).to eq([
74
74
  'Content-Type: text/html',
75
75
  'Content-Type: charset=UTF8'
76
- ]
76
+ ])
77
77
  end
78
78
 
79
79
  it "should properly format Time values" do
80
80
  time = Time.parse('2011-01-25 14:15:29 -0800')
81
81
  write_headers(@stream, 'Date' => time)
82
82
 
83
- @stream.string.split("\r\n").should == [
83
+ expect(@stream.string.split("\r\n")).to eq([
84
84
  'Date: Tue, 25 Jan 2011 22:15:29 GMT'
85
- ]
85
+ ])
86
86
  end
87
87
 
88
88
  it "should write Array values as multiple headers" do
89
89
  write_headers(@stream, 'Content-Type' => ['text/html', 'charset=UTF8'])
90
90
 
91
- @stream.string.split("\r\n").should == [
91
+ expect(@stream.string.split("\r\n")).to eq([
92
92
  'Content-Type: text/html',
93
93
  'Content-Type: charset=UTF8'
94
- ]
94
+ ])
95
95
  end
96
96
  end
97
97
 
@@ -99,7 +99,7 @@ describe Net::HTTP::Server::Responses do
99
99
  it "should write each check of the body" do
100
100
  write_body(@stream,['one', 'two', 'three'])
101
101
 
102
- @stream.string.should == 'onetwothree'
102
+ expect(@stream.string).to eq('onetwothree')
103
103
  end
104
104
  end
105
105
  end
@@ -9,7 +9,7 @@ describe Net::HTTP::Server::Stream do
9
9
 
10
10
  it "should read data from a socket" do
11
11
  stream = described_class.new(StringIO.new(data))
12
- stream.read.should == data
12
+ expect(stream.read).to eq(data)
13
13
  end
14
14
 
15
15
  it "should read an amount of data from a socket, directly into a buffer" do
@@ -19,7 +19,7 @@ describe Net::HTTP::Server::Stream do
19
19
  stream = described_class.new(StringIO.new(data))
20
20
  stream.read(length,buffer)
21
21
 
22
- buffer.should == data[0,length]
22
+ expect(buffer).to eq(data[0,length])
23
23
  end
24
24
  end
25
25
 
@@ -30,7 +30,7 @@ describe Net::HTTP::Server::Stream do
30
30
  stream = described_class.new(StringIO.new())
31
31
  stream.each { |chunk| results << chunk }
32
32
 
33
- results.should be_empty
33
+ expect(results).to be_empty
34
34
  end
35
35
 
36
36
  it "should yield each chunk in the stream" do
@@ -41,7 +41,7 @@ describe Net::HTTP::Server::Stream do
41
41
  stream = described_class.new(StringIO.new(data))
42
42
  stream.each { |chunk| results << chunk }
43
43
 
44
- results.should == chunks
44
+ expect(results).to eq(chunks)
45
45
  end
46
46
  end
47
47
 
@@ -51,7 +51,7 @@ describe Net::HTTP::Server::Stream do
51
51
  data = chunks.join('')
52
52
 
53
53
  stream = described_class.new(StringIO.new(data))
54
- stream.body.should == data
54
+ expect(stream.body).to eq(data)
55
55
  end
56
56
  end
57
57
 
@@ -60,7 +60,7 @@ describe Net::HTTP::Server::Stream do
60
60
  data = "foo\n\rbar"
61
61
 
62
62
  stream = described_class.new(StringIO.new)
63
- stream.write(data).should == data.length
63
+ expect(stream.write(data)).to eq(data.length)
64
64
  end
65
65
  end
66
66
  end
@@ -6,6 +6,15 @@ class TestRequest
6
6
  def call(env)
7
7
  status = env["QUERY_STRING"] =~ /secret/ ? 403 : 200
8
8
  env["test.postdata"] = env["rack.input"].read
9
+ # clean out complex objects that won't translate over anyways.
10
+ env.keys.each do |key|
11
+ case env[key]
12
+ when String, Fixnum, Bignum
13
+ # leave it
14
+ else
15
+ env[key] = nil
16
+ end
17
+ end
9
18
  body = env.to_yaml
10
19
  size = body.respond_to?(:bytesize) ? body.bytesize : body.size
11
20
  [status, {"Content-Type" => "text/yaml", "Content-Length" => size.to_s}, [body]]
@@ -31,7 +40,7 @@ class TestRequest
31
40
  passwd = header.delete(:passwd)
32
41
 
33
42
  get = Net::HTTP::Get.new(path, header)
34
- get.basic_auth user, passwd if user && passwd
43
+ get.basic_auth user, passwd if user && passwd
35
44
  http.request(get) { |response|
36
45
  @status = response.code.to_i
37
46
  if response.content_type == "text/yaml"
@@ -50,14 +59,14 @@ class TestRequest
50
59
 
51
60
  post = Net::HTTP::Post.new(path, header)
52
61
  post.form_data = formdata
53
- post.basic_auth user, passwd if user && passwd
62
+ post.basic_auth user, passwd if user && passwd
54
63
  http.request(post) { |response|
55
64
  @status = response.code.to_i
56
65
  @response = YAML.load(response.body)
57
66
  }
58
67
  }
59
68
  end
60
-
69
+
61
70
  def load_yaml(response)
62
71
  begin
63
72
  @response = YAML.load(response.body)
@@ -12,7 +12,8 @@ describe Rack::Handler::HTTP do
12
12
  before(:all) do
13
13
  app = Rack::Builder.app do
14
14
  use Rack::Lint
15
- use Rack::Static, :urls => ["/spec/images"]
15
+ use Rack::Static, :urls => ["/images"],
16
+ :root => TestRequest::Helpers::ROOT
16
17
  run TestRequest.new
17
18
  end
18
19
 
@@ -31,56 +32,56 @@ describe Rack::Handler::HTTP do
31
32
 
32
33
  it "should respond to a simple get request" do
33
34
  GET "/"
34
- status.should == 200
35
+ expect(status).to eq(200)
35
36
  end
36
37
 
37
38
  it "should have CGI headers on GET" do
38
39
  GET("/")
39
- response["REQUEST_METHOD"].should == "GET"
40
- response["SCRIPT_NAME"].should == ''
41
- response["PATH_INFO"].should == "/"
42
- response["QUERY_STRING"].should == ""
43
- response["test.postdata"].should == ""
40
+ expect(response["REQUEST_METHOD"]).to eq("GET")
41
+ expect(response["SCRIPT_NAME"]).to eq('')
42
+ expect(response["PATH_INFO"]).to eq("/")
43
+ expect(response["QUERY_STRING"]).to eq("")
44
+ expect(response["test.postdata"]).to eq("")
44
45
 
45
46
  GET("/test/foo?quux=1")
46
- response["REQUEST_METHOD"].should == "GET"
47
- response["SCRIPT_NAME"].should == ''
48
- response["REQUEST_URI"].should == "/test/foo"
49
- response["PATH_INFO"].should == "/test/foo"
50
- response["QUERY_STRING"].should == "quux=1"
47
+ expect(response["REQUEST_METHOD"]).to eq("GET")
48
+ expect(response["SCRIPT_NAME"]).to eq('')
49
+ expect(response["REQUEST_URI"]).to eq("/test/foo")
50
+ expect(response["PATH_INFO"]).to eq("/test/foo")
51
+ expect(response["QUERY_STRING"]).to eq("quux=1")
51
52
  end
52
53
 
53
54
  it "should have CGI headers on POST" do
54
55
  POST("/", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
55
- status.should == 200
56
- response["REQUEST_METHOD"].should == "POST"
57
- response["REQUEST_URI"].should == "/"
58
- response["QUERY_STRING"].should == ""
59
- response["HTTP_X_TEST_HEADER"].should == "42"
60
- response["test.postdata"].should == "rack-form-data=23"
56
+ expect(status).to eq(200)
57
+ expect(response["REQUEST_METHOD"]).to eq("POST")
58
+ expect(response["REQUEST_URI"]).to eq("/")
59
+ expect(response["QUERY_STRING"]).to eq("")
60
+ expect(response["HTTP_X_TEST_HEADER"]).to eq("42")
61
+ expect(response["test.postdata"]).to eq("rack-form-data=23")
61
62
  end
62
63
 
63
64
  it "should support HTTP auth" do
64
65
  GET("/test", {:user => "ruth", :passwd => "secret"})
65
- response["HTTP_AUTHORIZATION"].should == "Basic cnV0aDpzZWNyZXQ="
66
+ expect(response["HTTP_AUTHORIZATION"]).to eq("Basic cnV0aDpzZWNyZXQ=")
66
67
  end
67
68
 
68
69
  it "should set status" do
69
70
  GET("/test?secret")
70
- status.should == 403
71
- response["rack.url_scheme"].should == "http"
71
+ expect(status).to eq(403)
72
+ expect(response["rack.url_scheme"]).to eq("http")
72
73
  end
73
74
 
74
75
  it "should not set content-type to '' in requests" do
75
76
  GET("/test", 'Content-Type' => '')
76
- response['Content-Type'].should == nil
77
+ expect(response['Content-Type']).to eq(nil)
77
78
  end
78
79
 
79
80
  it "should serve images" do
80
81
  file_size = File.size(File.join(File.dirname(__FILE__), 'images', 'image.jpg'))
81
- GET("/spec/images/image.jpg")
82
- status.should == 200
83
- response.content_length.should == file_size
84
- response.body.size.should == file_size
82
+ GET("/images/image.jpg")
83
+ expect(status).to eq(200)
84
+ expect(response.content_length).to eq(file_size)
85
+ expect(response.body.size).to eq(file_size)
85
86
  end
86
87
  end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1 @@
1
- gem 'rspec', '~> 2.4'
2
1
  require 'rspec'