1 module tests;
2 
3 import vibe.core.core;
4 import vibe.d;
5 
6 import core.stdc.stdlib;
7 
8 import std.stdio;
9 
10 struct TestStruct {int i;}
11 
12 interface IService
13 {
14 	@safe TestStruct getTest(int sleepsecs);
15 	@safe TestStruct getTest2(int sleepsecs);
16 }
17 
18 class Service : IService
19 {
20 	@safe TestStruct getTestImpl(int sleep_msecs)
21 	{
22 		sleep(sleep_msecs.msecs);
23 		TestStruct test_struct = {sleep_msecs};
24 		return test_struct;
25 	}
26 
27 	@safe TestStruct getTest(int sleep_msecs)
28 	{
29 		return getTestImpl(sleep_msecs);
30 	}
31 
32 	@safe TestStruct getTest2(int sleep_msecs)
33 	{
34 		return getTestImpl(sleep_msecs);
35 	}
36 }
37 
38 void main()
39 {
40 	setLogLevel(LogLevel.trace);
41 	auto settings_server = new HTTPServerSettings;
42 	settings_server.port = 5000;
43 	settings_server.bindAddresses = ["127.0.0.1"];
44 	auto router = new URLRouter;
45 	router.registerRestInterface(new Service);
46 	auto server_addr = listenHTTP(settings_server, router);
47 
48 	runTask({
49 		scope (exit) exitEventLoop(true);
50 		try {
51 			auto settings = new RestInterfaceSettings();
52 			settings.httpClientSettings = new HTTPClientSettings();
53 			settings.httpClientSettings.readTimeout = 1.seconds;
54 			settings.baseURL = URL("http://127.0.0.1:5000/");
55 			auto service_client = new RestInterfaceClient!IService(settings);
56 			try {service_client.getTest(2000);} catch (Exception e) {}
57 			sleep(1200.msecs);
58 			auto result = service_client.getTest2(500);
59 			writeln("result:", result);
60 			assert(result.i == 500);
61 		} catch (Exception e) assert(false, e.msg);
62 	});
63 
64 	runApplication();
65 	return;
66 }