From 2ae02ad0479411c2319fee9fa4b7652a1e690600 Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Thu, 16 Dec 2021 09:17:05 -0500 Subject: [PATCH 01/11] add argument for dump_out directory --- emrun.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) mode change 100755 => 100644 emrun.py diff --git a/emrun.py b/emrun.py old mode 100755 new mode 100644 index b4c05cf24cf43..cabd72bdc41d1 --- a/emrun.py +++ b/emrun.py @@ -684,13 +684,12 @@ def do_POST(self): # Binary file dump/upload handling. Requests to # "stdio.html?file=filename" will write binary data to the given file. data = self.rfile.read(int(self.headers['Content-Length'])) - filename = query[len('file='):] - dump_out_directory = 'dump_out' + filename = unquote_u(query[len('file='):]) + filename = os.path.join(emrun_options.dump_out_directory, os.path.normpath(filename)) try: - os.mkdir(dump_out_directory) + os.makedirs(os.path.dirname(filename)) except OSError: pass - filename = os.path.join(dump_out_directory, os.path.normpath(filename)) with open(filename, 'wb') as fh: fh.write(data) logi('Wrote ' + str(len(data)) + ' bytes to file "' + filename + '".') @@ -1570,6 +1569,9 @@ def run(): parser.add_argument('--private_browsing', action='store_true', help='If specified, opens browser in private/incognito mode.') + + parser.add_argument('--dump_out_directory', default='dump_out', type=str, + help='If specified, overrides the directory for dump files using emrun_file_dump method.') parser.add_argument('serve', nargs='?', default='') From dce546e90f351232e5351277892bccb7c9294c4e Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Thu, 16 Dec 2021 10:08:36 -0500 Subject: [PATCH 02/11] remove spaces --- emrun.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emrun.py b/emrun.py index cabd72bdc41d1..acefc38602c8a 100644 --- a/emrun.py +++ b/emrun.py @@ -1569,7 +1569,7 @@ def run(): parser.add_argument('--private_browsing', action='store_true', help='If specified, opens browser in private/incognito mode.') - + parser.add_argument('--dump_out_directory', default='dump_out', type=str, help='If specified, overrides the directory for dump files using emrun_file_dump method.') From 1e3cb3afb34e3ac7554bdc244725606d37d434ed Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Thu, 16 Dec 2021 10:08:54 -0500 Subject: [PATCH 03/11] remove spaces --- emrun.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emrun.py b/emrun.py index acefc38602c8a..80a43e721133f 100644 --- a/emrun.py +++ b/emrun.py @@ -1569,7 +1569,7 @@ def run(): parser.add_argument('--private_browsing', action='store_true', help='If specified, opens browser in private/incognito mode.') - + parser.add_argument('--dump_out_directory', default='dump_out', type=str, help='If specified, overrides the directory for dump files using emrun_file_dump method.') From 6b6e0550cddc936b557fdb53b062e09b0656bbb7 Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Sat, 18 Dec 2021 17:29:05 -0500 Subject: [PATCH 04/11] tests --- tests/test_browser.py | 32 ++++++++++++++++++++++++++++++++ tests/test_emrun.c | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index 53ed45eb8bb9b..bdf40d653b4a6 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -5334,6 +5334,9 @@ def test_emrun(self): print(shared.shlex_join(args)) proc = self.run_process(args, check=False) self.assertEqual(proc.returncode, 100) + self.assertExists(self.in_dir('dump_out/test.txt')) + self.assertExists(self.in_dir('dump_out/heap.txt')) + self.assertExists(self.in_dir('dump_out/nested/with space.dat')) stdout = read_file(self.in_dir('stdout.txt')) stderr = read_file(self.in_dir('stderr.txt')) self.assertContained('argc: 4', stdout) @@ -5342,3 +5345,32 @@ def test_emrun(self): self.assertContained('Testing ASCII characters: !"$%&\'()*+,-./:;<=>?@[\\]^_`{|}~', stdout) self.assertContained('Testing char sequences: %20%21 ä', stdout) self.assertContained('hello, error stream!', stderr) + + def test_dump_directory(self): + self.run_process([EMCC, test_file('test_emrun.c'), '--emrun', '-o', 'hello_world.html']) + os.chdir(path_from_root()) + args = [EMRUN, '--dump_out_directory', 'other dir/multiple'] + if EMTEST_BROWSER is not None: + # If EMTEST_BROWSER carried command line arguments to pass to the browser, + # (e.g. "firefox -profile /path/to/foo") those can't be passed via emrun, + # so strip them out. + browser_cmd = shlex.split(EMTEST_BROWSER) + browser_path = browser_cmd[0] + args += ['--browser', browser_path] + if len(browser_cmd) > 1: + browser_args = browser_cmd[1:] + if 'firefox' in browser_path and ('-profile' in browser_args or '--profile' in browser_args): + # emrun uses its own -profile, strip it out + parser = argparse.ArgumentParser(add_help=False) # otherwise it throws with -headless + parser.add_argument('-profile') + parser.add_argument('--profile') + browser_args = parser.parse_known_args(browser_args)[1] + if browser_args: + args += ['--browser_args', ' ' + ' '.join(browser_args)] + self.run_process(args + [self.in_dir('hello_world.html')], check=False) + self.assertExists(self.in_dir('other dir/multiple/test.txt')) + self.assertExists(self.in_dir('other dir/multiple/heap.txt')) + self.assertExists(self.in_dir('other dir/multiple/nested/with space.dat')) + + + diff --git a/tests/test_emrun.c b/tests/test_emrun.c index bc017ae4387df..e18fae68fd1a0 100644 --- a/tests/test_emrun.c +++ b/tests/test_emrun.c @@ -16,8 +16,9 @@ int main(int argc, char **argv) { } // Dump a file to local filesystem with emrun. - EM_ASM(emrun_file_dump("test.dat", HEAPU8.subarray(0, 128));); + EM_ASM(emrun_file_dump("test.dat", c.subarray(0, 128));); EM_ASM(emrun_file_dump("heap.dat", HEAPU8)); + EM_ASM(emrun_file_dump("nested/with space.dat", HEAPU8)); if (argc <= 1) exit(1); From 57ac95736ffdaffc11979489d9b2f052eb7028f6 Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Sat, 18 Dec 2021 17:30:23 -0500 Subject: [PATCH 05/11] oops --- tests/test_emrun.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_emrun.c b/tests/test_emrun.c index e18fae68fd1a0..4cf77f82bf43b 100644 --- a/tests/test_emrun.c +++ b/tests/test_emrun.c @@ -16,7 +16,7 @@ int main(int argc, char **argv) { } // Dump a file to local filesystem with emrun. - EM_ASM(emrun_file_dump("test.dat", c.subarray(0, 128));); + EM_ASM(emrun_file_dump("test.dat", HEAPU8.subarray(0, 128));); EM_ASM(emrun_file_dump("heap.dat", HEAPU8)); EM_ASM(emrun_file_dump("nested/with space.dat", HEAPU8)); From 7586d891c06b03bccd43270586d37e288993fe6a Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Sat, 18 Dec 2021 17:32:30 -0500 Subject: [PATCH 06/11] fix --- tests/test_browser.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index bdf40d653b4a6..5010b668e720e 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -5370,7 +5370,4 @@ def test_dump_directory(self): self.run_process(args + [self.in_dir('hello_world.html')], check=False) self.assertExists(self.in_dir('other dir/multiple/test.txt')) self.assertExists(self.in_dir('other dir/multiple/heap.txt')) - self.assertExists(self.in_dir('other dir/multiple/nested/with space.dat')) - - - + self.assertExists(self.in_dir('other dir/multiple/nested/with space.dat')) \ No newline at end of file From 38356f8dbe499cbd9272191211a797a370ab8e42 Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Sat, 18 Dec 2021 17:34:07 -0500 Subject: [PATCH 07/11] add back --- tests/test_browser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index 5010b668e720e..aed6de26a04a5 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -5370,4 +5370,4 @@ def test_dump_directory(self): self.run_process(args + [self.in_dir('hello_world.html')], check=False) self.assertExists(self.in_dir('other dir/multiple/test.txt')) self.assertExists(self.in_dir('other dir/multiple/heap.txt')) - self.assertExists(self.in_dir('other dir/multiple/nested/with space.dat')) \ No newline at end of file + self.assertExists(self.in_dir('other dir/multiple/nested/with space.dat')) From cae204a43a7f2a673855c5f24061313ab4d16c33 Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Sat, 18 Dec 2021 17:53:01 -0500 Subject: [PATCH 08/11] collapse --- tests/test_browser.py | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index aed6de26a04a5..5fa95e2991102 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -5328,15 +5328,17 @@ def test_emrun(self): for args in [ args_base, - args_base + ['--private_browsing', '--port', '6941'] + args_base + ['--private_browsing', '--port', '6941'], + args_base + ['--dump_out_directory', 'other dir/multiple'] ]: args += [self.in_dir('hello_world.html'), '--', '1', '2', '--3'] print(shared.shlex_join(args)) proc = self.run_process(args, check=False) self.assertEqual(proc.returncode, 100) - self.assertExists(self.in_dir('dump_out/test.txt')) - self.assertExists(self.in_dir('dump_out/heap.txt')) - self.assertExists(self.in_dir('dump_out/nested/with space.dat')) + dump_dir = 'other dir/multiple' if '--dump_out_directory' in args else 'dump_out' + self.assertExists(self.in_dir(f'{dump_dir}/test.txt')) + self.assertExists(self.in_dir(f'{dump_dir}/heap.txt')) + self.assertExists(self.in_dir(f'{dump_dir}/nested/with space.dat')) stdout = read_file(self.in_dir('stdout.txt')) stderr = read_file(self.in_dir('stderr.txt')) self.assertContained('argc: 4', stdout) @@ -5345,29 +5347,3 @@ def test_emrun(self): self.assertContained('Testing ASCII characters: !"$%&\'()*+,-./:;<=>?@[\\]^_`{|}~', stdout) self.assertContained('Testing char sequences: %20%21 ä', stdout) self.assertContained('hello, error stream!', stderr) - - def test_dump_directory(self): - self.run_process([EMCC, test_file('test_emrun.c'), '--emrun', '-o', 'hello_world.html']) - os.chdir(path_from_root()) - args = [EMRUN, '--dump_out_directory', 'other dir/multiple'] - if EMTEST_BROWSER is not None: - # If EMTEST_BROWSER carried command line arguments to pass to the browser, - # (e.g. "firefox -profile /path/to/foo") those can't be passed via emrun, - # so strip them out. - browser_cmd = shlex.split(EMTEST_BROWSER) - browser_path = browser_cmd[0] - args += ['--browser', browser_path] - if len(browser_cmd) > 1: - browser_args = browser_cmd[1:] - if 'firefox' in browser_path and ('-profile' in browser_args or '--profile' in browser_args): - # emrun uses its own -profile, strip it out - parser = argparse.ArgumentParser(add_help=False) # otherwise it throws with -headless - parser.add_argument('-profile') - parser.add_argument('--profile') - browser_args = parser.parse_known_args(browser_args)[1] - if browser_args: - args += ['--browser_args', ' ' + ' '.join(browser_args)] - self.run_process(args + [self.in_dir('hello_world.html')], check=False) - self.assertExists(self.in_dir('other dir/multiple/test.txt')) - self.assertExists(self.in_dir('other dir/multiple/heap.txt')) - self.assertExists(self.in_dir('other dir/multiple/nested/with space.dat')) From 3039bea6e62ece6f5fac4eba5cdd409876b52687 Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Sat, 18 Dec 2021 20:20:48 -0500 Subject: [PATCH 09/11] different port --- tests/test_browser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index 5fa95e2991102..e59357760a17a 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -5329,7 +5329,7 @@ def test_emrun(self): for args in [ args_base, args_base + ['--private_browsing', '--port', '6941'], - args_base + ['--dump_out_directory', 'other dir/multiple'] + args_base + ['--dump_out_directory', 'other dir/multiple', '--port', '6942'] ]: args += [self.in_dir('hello_world.html'), '--', '1', '2', '--3'] print(shared.shlex_join(args)) From 86d0699b3b8e8282c985ad24f6101b06fff4cf63 Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Sat, 18 Dec 2021 21:37:58 -0500 Subject: [PATCH 10/11] reduce size --- tests/test_emrun.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_emrun.c b/tests/test_emrun.c index 4cf77f82bf43b..6bc280b8c3661 100644 --- a/tests/test_emrun.c +++ b/tests/test_emrun.c @@ -18,7 +18,7 @@ int main(int argc, char **argv) { // Dump a file to local filesystem with emrun. EM_ASM(emrun_file_dump("test.dat", HEAPU8.subarray(0, 128));); EM_ASM(emrun_file_dump("heap.dat", HEAPU8)); - EM_ASM(emrun_file_dump("nested/with space.dat", HEAPU8)); + EM_ASM(emrun_file_dump("nested/with space.dat", HEAPU8.subarray(128, 256));); if (argc <= 1) exit(1); From ac41196b1615009351d71e9e6e454c1b290f03bf Mon Sep 17 00:00:00 2001 From: Andrew Snyder Date: Mon, 10 Jan 2022 22:52:51 -0500 Subject: [PATCH 11/11] fix extension --- tests/test_browser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_browser.py b/tests/test_browser.py index 24167e396d0ef..a456dd8bb572c 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -5338,8 +5338,8 @@ def test_emrun(self): proc = self.run_process(args, check=False) self.assertEqual(proc.returncode, 100) dump_dir = 'other dir/multiple' if '--dump_out_directory' in args else 'dump_out' - self.assertExists(self.in_dir(f'{dump_dir}/test.txt')) - self.assertExists(self.in_dir(f'{dump_dir}/heap.txt')) + self.assertExists(self.in_dir(f'{dump_dir}/test.dat')) + self.assertExists(self.in_dir(f'{dump_dir}/heap.dat')) self.assertExists(self.in_dir(f'{dump_dir}/nested/with space.dat')) stdout = read_file(self.in_dir('stdout.txt')) stderr = read_file(self.in_dir('stderr.txt'))