File: timeout.bs

package info (click to toggle)
storm-lang 0.7.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,028 kB
  • sloc: ansic: 261,471; cpp: 140,432; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (80 lines) | stat: -rw-r--r-- 2,408 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
use core:io;
use core:net;
use crypto;
use test;

// Test SSL timeout handling.
test SSLTimeoutA {
	var context = crypto:ClientContext:systemDefault();
	unless (socket = connect("storm-lang.org", 443))
		abort;

	socket.input.timeout = 1s;
	var ssl = context.connect(socket, "storm-lang.org");

	// Ask the server to close the connection. This ends the SSL session for us, but OpenSSL will
	// not read "too far" in the stream, and therefore the underlying stream will not signal a
	// timeout.
	Utf8Output out(ssl.output, windowsTextInfo(false));
	out.write("GET /nonexisting HTTP/1.1\nHost: storm-lang.org\nConnection: close\n\n");
	out.flush();

	Utf8Input in(ssl.input);
	check in.readAll() != "";
	check in.more == false;
	check ssl.input.more == false;

	// print("--- all done ---");
	// print("More? ${socket.input.more}");
	// print("More? ${ssl.input.more}");
	// print("--- next request ---");

	out.write("GET /nonexisting HTTP/1.1\nHost: storm-lang.org\nConnection: close\n\n");
	check in.readAll() == "";
	check ssl.input.more == false;

	ssl.close();
	socket.close();

	// print("--- all done ---");
	// print("More? ${socket.input.more}");
	// print("More? ${ssl.input.more}");
}

// Version of the above where we don't ask the server to close the session.
test SSLTimeoutB {
	var context = crypto:ClientContext:systemDefault();
	unless (socket = connect("storm-lang.org", 443))
		abort;

	socket.input.timeout = 1s;
	var ssl = context.connect(socket, "storm-lang.org");

	// Ask the server to keep the connection open. This means that the SSL layer will see a read of
	// zero bytes and will have to handle it correctly.
	Utf8Output out(ssl.output, windowsTextInfo(false));
	out.write("GET /nonexisting HTTP/1.1\nHost: storm-lang.org\nConnection: keep-alive\n\n");
	out.flush();

	Utf8Input in(ssl.input);
	check in.readAll() != "";
	check in.more() == false; // TODO: Perhaps surprising?
	check socket.input.more == true;
	check ssl.input.more == true;

	// print("--- all done ---");
	// print("More? ${socket.input.more}");
	// print("More? ${ssl.input.more}");
	// print("--- next request ---");

	out.write("GET /nonexisting HTTP/1.1\nHost: storm-lang.org\nConnection: close\n\n");
	check in.readAll() != "";
	check ssl.input.more == false;

	ssl.close();
	socket.close();

	// print("--- all done ---");
	// print("More? ${socket.input.more}");
	// print("More? ${ssl.input.more}");
}