agoo 2.8.4 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of agoo might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/ext/agoo/agoo.c +2 -0
- data/ext/agoo/con.c +74 -43
- data/ext/agoo/debug.h +1 -0
- data/ext/agoo/domain.c +145 -0
- data/ext/agoo/domain.h +16 -0
- data/ext/agoo/early.c +28 -0
- data/ext/agoo/early.h +23 -0
- data/ext/agoo/early_hints.c +116 -0
- data/ext/agoo/early_hints.h +13 -0
- data/ext/agoo/gqleval.c +2 -2
- data/ext/agoo/graphql.c +1 -1
- data/ext/agoo/page.c +139 -52
- data/ext/agoo/page.h +4 -4
- data/ext/agoo/request.c +9 -1
- data/ext/agoo/res.c +65 -7
- data/ext/agoo/res.h +11 -8
- data/ext/agoo/rserver.c +75 -8
- data/ext/agoo/server.c +2 -0
- data/ext/agoo/server.h +1 -0
- data/ext/agoo/text.c +3 -0
- data/ext/agoo/text.h +6 -5
- data/lib/agoo/version.rb +1 -1
- data/test/domain_test.rb +84 -0
- data/test/early_hints_test.rb +104 -0
- data/test/rack_handler_test.rb +4 -4
- metadata +16 -6
@@ -0,0 +1,104 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$: << File.dirname(__FILE__)
|
4
|
+
$root_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
5
|
+
%w(lib ext).each do |dir|
|
6
|
+
$: << File.join($root_dir, dir)
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'minitest'
|
10
|
+
require 'minitest/autorun'
|
11
|
+
require 'net/http'
|
12
|
+
|
13
|
+
require 'agoo'
|
14
|
+
|
15
|
+
class EarlyHandlerTest < Minitest::Test
|
16
|
+
@@server_started = false
|
17
|
+
|
18
|
+
class CallHandler
|
19
|
+
def self.call(req)
|
20
|
+
headers = { 'Content-Type' => 'text/plain' }
|
21
|
+
eh = req['early_hints']
|
22
|
+
unless eh.nil?
|
23
|
+
headers['Link'] = "Link: </style.css>; rel=preload; as=style, </script.js>; rel=preload; as=script"
|
24
|
+
eh.call([
|
25
|
+
["Link", "</style.css>; rel=preload; as=style"],
|
26
|
+
["Link", "</script.js>; rel=preload; as=script"],
|
27
|
+
])
|
28
|
+
end
|
29
|
+
sleep(0.2)
|
30
|
+
[ 200, headers, [ 'called' ]]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def start_server
|
35
|
+
Agoo::Log.configure(dir: '',
|
36
|
+
console: true,
|
37
|
+
classic: true,
|
38
|
+
colorize: true,
|
39
|
+
states: {
|
40
|
+
INFO: false,
|
41
|
+
DEBUG: false,
|
42
|
+
connect: false,
|
43
|
+
request: false,
|
44
|
+
response: false,
|
45
|
+
eval: true,
|
46
|
+
})
|
47
|
+
|
48
|
+
Agoo::Server.init(6473, 'root', thread_count: 1)
|
49
|
+
|
50
|
+
Agoo::Server.handle(:GET, "/call", CallHandler)
|
51
|
+
Agoo::Server.start()
|
52
|
+
Agoo::Server::rack_early_hints(true)
|
53
|
+
|
54
|
+
@@server_started = true
|
55
|
+
end
|
56
|
+
|
57
|
+
def setup
|
58
|
+
unless @@server_started
|
59
|
+
start_server
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Minitest.after_run {
|
64
|
+
GC.start
|
65
|
+
Agoo::shutdown
|
66
|
+
}
|
67
|
+
|
68
|
+
def test_rack_early_hint
|
69
|
+
on = Agoo::Server::rack_early_hints(true)
|
70
|
+
x = Agoo::Server::rack_early_hints(nil)
|
71
|
+
off = Agoo::Server::rack_early_hints(false)
|
72
|
+
Agoo::Server::rack_early_hints(true) # back to starting state
|
73
|
+
assert_equal(true, on, 'after turning on')
|
74
|
+
assert_equal(true, x, 'on query with nil')
|
75
|
+
assert_equal(false, off, 'after turning off')
|
76
|
+
assert_raises(ArgumentError) { Agoo::Server::rack_early_hints(2) }
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_call
|
80
|
+
res = long_request('http://localhost:6473/call')
|
81
|
+
assert_equal(%|HTTP/1.1 103 Early Hints\r
|
82
|
+
Link: </style.css>; rel=preload; as=style\r
|
83
|
+
Link: </script.js>; rel=preload; as=script\r
|
84
|
+
\r
|
85
|
+
HTTP/1.1 200 OK\r
|
86
|
+
Content-Length: 6\r
|
87
|
+
Content-Type: text/plain\r
|
88
|
+
Link: Link: </style.css>; rel=preload; as=style, </script.js>; rel=preload; as=script\r
|
89
|
+
\r
|
90
|
+
called|, res)
|
91
|
+
end
|
92
|
+
|
93
|
+
def long_request(uri)
|
94
|
+
u = URI(uri)
|
95
|
+
res = ''
|
96
|
+
TCPSocket.open(u.hostname, u.port) { |s|
|
97
|
+
s.send("GET #{u.path} HTTP/1.1\r\n\r\n", 0)
|
98
|
+
sleep(0.3) # wait for results to be collected
|
99
|
+
res = s.recv(1000)
|
100
|
+
}
|
101
|
+
res
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
data/test/rack_handler_test.rb
CHANGED
@@ -16,7 +16,7 @@ require 'agoo'
|
|
16
16
|
|
17
17
|
class RackHandlerTest < Minitest::Test
|
18
18
|
@@server_started = false
|
19
|
-
|
19
|
+
|
20
20
|
class TellMeHandler
|
21
21
|
def initialize
|
22
22
|
end
|
@@ -127,13 +127,13 @@ class RackHandlerTest < Minitest::Test
|
|
127
127
|
req['Accept-Encoding'] = '*'
|
128
128
|
req['Accept'] = 'application/json'
|
129
129
|
req['User-Agent'] = 'Ruby'
|
130
|
-
|
130
|
+
|
131
131
|
res = Net::HTTP.start(uri.hostname, uri.port) { |h|
|
132
132
|
h.request(req)
|
133
133
|
}
|
134
134
|
assert_equal(Net::HTTPNoContent, res.class)
|
135
135
|
end
|
136
|
-
|
136
|
+
|
137
137
|
def test_put
|
138
138
|
uri = URI('http://localhost:6467/makeme')
|
139
139
|
req = Net::HTTP::Put.new(uri)
|
@@ -142,7 +142,7 @@ class RackHandlerTest < Minitest::Test
|
|
142
142
|
req['Accept'] = 'application/json'
|
143
143
|
req['User-Agent'] = 'Ruby'
|
144
144
|
req.body = 'hello'
|
145
|
-
|
145
|
+
|
146
146
|
res = Net::HTTP.start(uri.hostname, uri.port) { |h|
|
147
147
|
h.request(req)
|
148
148
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: agoo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|
@@ -57,8 +57,14 @@ files:
|
|
57
57
|
- ext/agoo/debug.h
|
58
58
|
- ext/agoo/doc.c
|
59
59
|
- ext/agoo/doc.h
|
60
|
+
- ext/agoo/domain.c
|
61
|
+
- ext/agoo/domain.h
|
60
62
|
- ext/agoo/dtime.c
|
61
63
|
- ext/agoo/dtime.h
|
64
|
+
- ext/agoo/early.c
|
65
|
+
- ext/agoo/early.h
|
66
|
+
- ext/agoo/early_hints.c
|
67
|
+
- ext/agoo/early_hints.h
|
62
68
|
- ext/agoo/err.c
|
63
69
|
- ext/agoo/err.h
|
64
70
|
- ext/agoo/error_stream.c
|
@@ -137,6 +143,8 @@ files:
|
|
137
143
|
- lib/rack/handler/agoo.rb
|
138
144
|
- test/base_handler_test.rb
|
139
145
|
- test/bind_test.rb
|
146
|
+
- test/domain_test.rb
|
147
|
+
- test/early_hints_test.rb
|
140
148
|
- test/graphql_test.rb
|
141
149
|
- test/hijack_test.rb
|
142
150
|
- test/log_test.rb
|
@@ -172,15 +180,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
180
|
version: '0'
|
173
181
|
requirements:
|
174
182
|
- Linux or macOS
|
175
|
-
rubygems_version: 3.0.
|
183
|
+
rubygems_version: 3.0.3
|
176
184
|
signing_key:
|
177
185
|
specification_version: 4
|
178
186
|
summary: An HTTP server
|
179
187
|
test_files:
|
180
|
-
- test/base_handler_test.rb
|
181
|
-
- test/bind_test.rb
|
182
188
|
- test/graphql_test.rb
|
183
189
|
- test/hijack_test.rb
|
184
|
-
- test/log_test.rb
|
185
190
|
- test/rack_handler_test.rb
|
191
|
+
- test/base_handler_test.rb
|
192
|
+
- test/log_test.rb
|
193
|
+
- test/domain_test.rb
|
194
|
+
- test/early_hints_test.rb
|
195
|
+
- test/bind_test.rb
|
186
196
|
- test/static_test.rb
|