diff options
Diffstat (limited to 'v_windows/v/vlib/vweb/tests/vweb_test_server.v')
| -rw-r--r-- | v_windows/v/vlib/vweb/tests/vweb_test_server.v | 118 | 
1 files changed, 118 insertions, 0 deletions
diff --git a/v_windows/v/vlib/vweb/tests/vweb_test_server.v b/v_windows/v/vlib/vweb/tests/vweb_test_server.v new file mode 100644 index 0000000..4dfeb7d --- /dev/null +++ b/v_windows/v/vlib/vweb/tests/vweb_test_server.v @@ -0,0 +1,118 @@ +module main + +import os +import vweb +import time + +const ( +	known_users = ['bilbo', 'kent'] +) + +struct App { +	vweb.Context +	port          int +	timeout       int +	global_config shared Config +} + +struct Config { +	max_ping int +} + +fn exit_after_timeout(timeout_in_ms int) { +	time.sleep(timeout_in_ms * time.millisecond) +	// eprintln('webserver is exiting ...') +	exit(0) +} + +fn main() { +	if os.args.len != 3 { +		panic('Usage: `vweb_test_server.exe PORT TIMEOUT_IN_MILLISECONDS`') +	} +	http_port := os.args[1].int() +	assert http_port > 0 +	timeout := os.args[2].int() +	assert timeout > 0 +	go exit_after_timeout(timeout) +	// +	shared config := &Config{ +		max_ping: 50 +	} +	app := &App{ +		port: http_port +		timeout: timeout +		global_config: config +	} +	eprintln('>> webserver: started on http://127.0.0.1:$app.port/ , with maximum runtime of $app.timeout milliseconds.') +	// vweb.run<App>(mut app, http_port) +	vweb.run(app, http_port) +} + +// pub fn (mut app App) init_server() { +//} + +pub fn (mut app App) index() vweb.Result { +	assert app.global_config.max_ping == 50 +	return app.text('Welcome to VWeb') +} + +pub fn (mut app App) simple() vweb.Result { +	return app.text('A simple result') +} + +pub fn (mut app App) html_page() vweb.Result { +	return app.html('<h1>ok</h1>') +} + +// the following serve custom routes +['/:user/settings'] +pub fn (mut app App) settings(username string) vweb.Result { +	if username !in known_users { +		return app.not_found() +	} +	return app.html('username: $username') +} + +['/:user/:repo/settings'] +pub fn (mut app App) user_repo_settings(username string, repository string) vweb.Result { +	if username !in known_users { +		return app.not_found() +	} +	return app.html('username: $username | repository: $repository') +} + +['/json_echo'; post] +pub fn (mut app App) json_echo() vweb.Result { +	// eprintln('>>>>> received http request at /json_echo is: $app.req') +	app.set_content_type(app.req.header.get(.content_type) or { '' }) +	return app.ok(app.req.data) +} + +['/form_echo'; post] +pub fn (mut app App) form_echo() vweb.Result { +	app.set_content_type(app.req.header.get(.content_type) or { '' }) +	return app.ok(app.form['foo']) +} + +// Make sure [post] works without the path +[post] +pub fn (mut app App) json() vweb.Result { +	// eprintln('>>>>> received http request at /json is: $app.req') +	app.set_content_type(app.req.header.get(.content_type) or { '' }) +	return app.ok(app.req.data) +} + +pub fn (mut app App) shutdown() vweb.Result { +	session_key := app.get_cookie('skey') or { return app.not_found() } +	if session_key != 'superman' { +		return app.not_found() +	} +	go app.gracefull_exit() +	return app.ok('good bye') +} + +fn (mut app App) gracefull_exit() { +	eprintln('>> webserver: gracefull_exit') +	time.sleep(100 * time.millisecond) +	exit(0) +}  | 
