Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,203 @@
|
||||
import net
|
||||
import net.http
|
||||
import time
|
||||
|
||||
fn test_https_get() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
assert http.get_text('https://vlang.io/version') == '0.1.5'
|
||||
println('https ok')
|
||||
}
|
||||
|
||||
fn test_http_get_from_vlang_utc_now() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
url := 'http://vlang.io/utc_now'
|
||||
println('Test getting current time from HTTP ${url} by http.get')
|
||||
res := http.get(url) or { panic(err) }
|
||||
assert res.status() == .ok
|
||||
assert res.body != ''
|
||||
assert res.body.int() > 1566403696
|
||||
println('Current time is: ${res.body.int()}')
|
||||
}
|
||||
|
||||
fn test_https_get_from_vlang_utc_now() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
url := 'https://vlang.io/utc_now'
|
||||
println('Test getting current time from HTTPS ${url} by http.get')
|
||||
res := http.get(url) or { panic(err) }
|
||||
assert res.status() == .ok
|
||||
assert res.body != ''
|
||||
assert res.body.int() > 1566403696
|
||||
println('Current time is: ${res.body.int()}')
|
||||
}
|
||||
|
||||
fn test_http_public_servers() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
urls := [
|
||||
'http://github.com/robots.txt',
|
||||
'http://google.com/robots.txt',
|
||||
// 'http://yahoo.com/robots.txt',
|
||||
]
|
||||
for url in urls {
|
||||
println('Testing http.get on public HTTP url: ${url} ')
|
||||
res := http.get(url) or { panic(err) }
|
||||
assert res.status() == .ok
|
||||
assert res.body != ''
|
||||
}
|
||||
}
|
||||
|
||||
fn test_https_public_servers() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
urls := [
|
||||
'https://github.com/robots.txt',
|
||||
'https://google.com/robots.txt',
|
||||
// 'https://yahoo.com/robots.txt',
|
||||
]
|
||||
for url in urls {
|
||||
println('Testing http.get on public HTTPS url: ${url} ')
|
||||
res := http.get(url) or { panic(err) }
|
||||
assert res.status() == .ok
|
||||
assert res.body != ''
|
||||
}
|
||||
}
|
||||
|
||||
struct RelativeRedirectHandler {}
|
||||
|
||||
fn (mut handler RelativeRedirectHandler) handle(req http.Request) http.Response {
|
||||
mut res := http.Response{}
|
||||
match req.url {
|
||||
'/relative-redirect/3?abc=xyz' {
|
||||
res.header = http.new_header(key: .location, value: '/relative-redirect/2?abc=xyz')
|
||||
res.set_status(.found)
|
||||
}
|
||||
'/relative-redirect/2?abc=xyz' {
|
||||
res.header = http.new_header(key: .location, value: '/relative-redirect/1?abc=xyz')
|
||||
res.set_status(.found)
|
||||
}
|
||||
'/relative-redirect/1?abc=xyz' {
|
||||
res.header = http.new_header(key: .location, value: '/get?abc=xyz')
|
||||
res.set_status(.found)
|
||||
}
|
||||
'/get?abc=xyz' {
|
||||
res.body = '{"args": {"abc": "xyz"}}'
|
||||
res.set_status(.ok)
|
||||
}
|
||||
else {
|
||||
res.body = req.url
|
||||
res.set_status(.not_found)
|
||||
}
|
||||
}
|
||||
|
||||
res.set_version(req.version)
|
||||
return res
|
||||
}
|
||||
|
||||
fn test_relative_redirects() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
mut server := &http.Server{
|
||||
accept_timeout: 100 * time.millisecond
|
||||
handler: RelativeRedirectHandler{}
|
||||
addr: '127.0.0.1:0'
|
||||
show_startup_message: false
|
||||
}
|
||||
t := spawn server.listen_and_serve()
|
||||
server.wait_till_running() or {
|
||||
server.stop()
|
||||
t.wait()
|
||||
panic(err)
|
||||
}
|
||||
defer {
|
||||
server.stop()
|
||||
t.wait()
|
||||
}
|
||||
res := http.get('http://${server.addr}/relative-redirect/3?abc=xyz') or { panic(err) }
|
||||
assert res.status() == .ok
|
||||
assert res.body != ''
|
||||
assert res.body.contains('"abc": "xyz"')
|
||||
}
|
||||
|
||||
fn user_agent_response_body(request string) string {
|
||||
for line in request.split('\r\n') {
|
||||
if line.to_lower().starts_with('user-agent:') {
|
||||
user_agent := line.all_after(':').trim_space()
|
||||
return '{"user-agent": "${user_agent}"}'
|
||||
}
|
||||
}
|
||||
return '{"user-agent": ""}'
|
||||
}
|
||||
|
||||
fn serve_user_agent_once(mut listener net.TcpListener) {
|
||||
mut conn := listener.accept() or {
|
||||
listener.close() or {}
|
||||
return
|
||||
}
|
||||
defer {
|
||||
conn.close() or {}
|
||||
listener.close() or {}
|
||||
}
|
||||
mut request := ''
|
||||
mut buf := []u8{len: 4096}
|
||||
for {
|
||||
n := conn.read(mut buf) or { return }
|
||||
if n <= 0 {
|
||||
return
|
||||
}
|
||||
request += buf[..n].bytestr()
|
||||
if request.contains('\r\n\r\n') {
|
||||
break
|
||||
}
|
||||
}
|
||||
body := user_agent_response_body(request)
|
||||
response := 'HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: ${body.len}\r\nConnection: close\r\n\r\n${body}'
|
||||
conn.write(response.bytes()) or {}
|
||||
}
|
||||
|
||||
fn start_user_agent_server() !(int, thread) {
|
||||
mut listener := net.listen_tcp(.ip, '127.0.0.1:0')!
|
||||
port := listener.addr()!.port()!
|
||||
return port, spawn serve_user_agent_once(mut listener)
|
||||
}
|
||||
|
||||
fn test_default_user_agent() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
port, server := start_user_agent_server()!
|
||||
res := http.get('http://127.0.0.1:${port}/user-agent') or {
|
||||
server.wait()
|
||||
panic(err)
|
||||
}
|
||||
server.wait()
|
||||
assert res.status() == .ok
|
||||
assert res.body != ''
|
||||
assert res.body.contains('"user-agent": "v.http"')
|
||||
}
|
||||
|
||||
fn test_custom_user_agent() {
|
||||
$if !network ? {
|
||||
return
|
||||
}
|
||||
ua := 'V http test for UA'
|
||||
port, server := start_user_agent_server()!
|
||||
mut req := http.new_request(.get, 'http://127.0.0.1:${port}/user-agent', '')
|
||||
req.user_agent = ua
|
||||
res := req.do() or {
|
||||
server.wait()
|
||||
panic(err)
|
||||
}
|
||||
server.wait()
|
||||
assert res.status() == .ok
|
||||
assert res.body != ''
|
||||
assert res.body.contains('"user-agent": "${ua}"')
|
||||
}
|
||||
Reference in new issue
Block a user