Skip to content

Commit c05d5fd

Browse files
authored
[test] Use POST when reporting stdout/stderr in browser tests (#24179)
This helps avoid issues around encoding and limits on URL length. Followup to #24174
1 parent f163dc2 commit c05d5fd

File tree

4 files changed

+23
-20
lines changed

4 files changed

+23
-20
lines changed
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3934
1+
3936

test/browser_reporting.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ async function reportResultToServer(result) {
2323
}
2424

2525
function sendFileToServer(filename, contents) {
26-
fetch(`${reportingURL}/?file=${encodeURIComponent(filename)}`, {method: "POST", body: contents});
26+
fetch(`${reportingURL}/upload?file=${encodeURIComponent(filename)}`, { method: "POST", body: contents });
27+
}
28+
29+
function logMessageToServer(filename, message) {
30+
fetch(`${reportingURL}/log?file=${filename}`, { method: "POST", body: message })
2731
}
2832

2933
function maybeReportResultToServer(result) {
@@ -36,15 +40,15 @@ function reportStderrToServer(message) {
3640
if (typeof ENVIRONMENT_IS_NODE !== 'undefined' && ENVIRONMENT_IS_NODE) {
3741
err(message);
3842
} else {
39-
fetch(`${reportingURL}?stderr=${encodeURIComponent(message)}`);
43+
logMessageToServer('stderr', message);
4044
}
4145
}
4246

4347
function reportStdoutToServer(message) {
4448
if (typeof ENVIRONMENT_IS_NODE !== 'undefined' && ENVIRONMENT_IS_NODE) {
4549
out(message);
4650
} else {
47-
fetch(`${reportingURL}?stdout=${encodeURIComponent(message)}`);
51+
logMessageToServer('stdout', message);
4852
}
4953
}
5054

test/common.py

+14-15
Original file line numberDiff line numberDiff line change
@@ -2109,19 +2109,28 @@ def end_headers(self):
21092109
def do_POST(self):
21102110
urlinfo = urlparse(self.path)
21112111
query = parse_qs(urlinfo.query)
2112-
if query['file']:
2113-
print('do_POST: got file: %s' % query['file'])
2112+
content_length = int(self.headers['Content-Length'])
2113+
post_data = self.rfile.read(content_length)
2114+
if urlinfo.path == '/log':
2115+
# Logging reported by reportStdoutToServer / reportStderrToServer.
2116+
#
2117+
# To automatically capture stderr/stdout message from browser tests, modify
2118+
# `captureStdoutStderr` in `test/browser_reporting.js`.
2119+
filename = query['file'][0]
2120+
print(f"[client {filename}: '{post_data.decode()}']")
2121+
self.send_response(200)
2122+
self.end_headers()
2123+
elif urlinfo.path == '/upload':
21142124
filename = query['file'][0]
2115-
contentLength = int(self.headers['Content-Length'])
2116-
create_file(filename, self.rfile.read(contentLength), binary=True)
2125+
print(f'do_POST: got file: {filename}')
2126+
create_file(filename, post_data, binary=True)
21172127
self.send_response(200)
21182128
self.end_headers()
21192129
else:
21202130
print(f'do_POST: unexpected POST: {urlinfo.query}')
21212131

21222132
def do_GET(self):
21232133
info = urlparse(self.path)
2124-
query = parse_qs(info.query)
21252134
if info.path == '/run_harness':
21262135
if DEBUG:
21272136
print('[server startup]')
@@ -2162,16 +2171,6 @@ def do_GET(self):
21622171
self.end_headers()
21632172
self.wfile.write(b'OK')
21642173

2165-
elif info.path == '/' and 'stdout' in query or 'stderr' in query:
2166-
# Logging reported by reportStdoutToServer / reportStderrToServer.
2167-
#
2168-
# To automatically capture stderr/stdout message from browser tests, modify
2169-
# `captureStdoutStderr` in `test/browser_reporting.js`.
2170-
for key, value in query.items():
2171-
print(f"[client {key}: '{value[0]}']")
2172-
self.send_response(200)
2173-
self.send_header('Content-type', 'text/html')
2174-
self.end_headers()
21752174
elif info.path == '/check':
21762175
self.send_response(200)
21772176
self.send_header('Content-type', 'text/html')

test/fetch/test_fetch_post.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ int main() {
5757
attr.onerror = onError;
5858
attr.requestData = "Hello, world!";
5959
attr.requestDataSize = strlen(attr.requestData);
60-
emscripten_fetch(&attr, "?file=newfile.txt");
60+
emscripten_fetch(&attr, "upload?file=newfile.txt");
6161

6262
// This return code should be ignored
6363
return 99;

0 commit comments

Comments
 (0)