[Python-checkins] bpo-36301: Test Python init with isolated (GH-12569)
Victor Stinner
webhook-mailer at python.org
Tue Mar 26 19:26:21 EDT 2019
https://github.com/python/cpython/commit/6da20a49507c46738632baf3e4bfe3bdd086155b
commit: 6da20a49507c46738632baf3e4bfe3bdd086155b
branch: master
author: Victor Stinner <vstinner at redhat.com>
committer: GitHub <noreply at github.com>
date: 2019-03-27T00:26:18+01:00
summary:
bpo-36301: Test Python init with isolated (GH-12569)
Add test_preinit_isolated1() and test_preinit_isolated2() test_embed.
files:
M Lib/test/test_embed.py
M Programs/_testembed.c
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index 7efd5be23e03..c44d24ecfdd3 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -662,6 +662,26 @@ def test_init_isolated(self):
}
self.check_config("init_isolated", config, preconfig)
+ def test_preinit_isolated1(self):
+ # _PyPreConfig.isolated=1, _PyCoreConfig.isolated not set
+ preconfig = {}
+ config = {
+ 'isolated': 1,
+ 'use_environment': 0,
+ 'user_site_directory': 0,
+ }
+ self.check_config("preinit_isolated1", config, preconfig)
+
+ def test_preinit_isolated2(self):
+ # _PyPreConfig.isolated=0, _PyCoreConfig.isolated=1
+ preconfig = {}
+ config = {
+ 'isolated': 1,
+ 'use_environment': 0,
+ 'user_site_directory': 0,
+ }
+ self.check_config("preinit_isolated2", config, preconfig)
+
if __name__ == "__main__":
unittest.main()
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 7fb0d695b475..76de8aab5ba6 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -648,6 +648,74 @@ static int test_init_isolated(void)
}
+/* _PyPreConfig.isolated=1, _PyCoreConfig.isolated=0 */
+static int test_preinit_isolated1(void)
+{
+ _PyInitError err;
+
+ _PyPreConfig preconfig = _PyPreConfig_INIT;
+
+ /* Set coerce_c_locale and utf8_mode to not depend on the locale */
+ preconfig.coerce_c_locale = 0;
+ preconfig.utf8_mode = 0;
+ preconfig.isolated = 1;
+
+ err = _Py_PreInitializeFromPreConfig(&preconfig);
+ if (_Py_INIT_FAILED(err)) {
+ _Py_ExitInitError(err);
+ }
+
+ _PyCoreConfig config = _PyCoreConfig_INIT;
+ config.program_name = L"./_testembed";
+
+ test_init_env_dev_mode_putenvs();
+ err = _Py_InitializeFromConfig(&config);
+ if (_Py_INIT_FAILED(err)) {
+ _Py_ExitInitError(err);
+ }
+ dump_config();
+ Py_Finalize();
+ return 0;
+}
+
+
+/* _PyPreConfig.isolated=0, _PyCoreConfig.isolated=1 */
+static int test_preinit_isolated2(void)
+{
+ _PyInitError err;
+
+ _PyPreConfig preconfig = _PyPreConfig_INIT;
+
+ /* Set coerce_c_locale and utf8_mode to not depend on the locale */
+ preconfig.coerce_c_locale = 0;
+ preconfig.utf8_mode = 0;
+ preconfig.isolated = 0;
+
+ err = _Py_PreInitializeFromPreConfig(&preconfig);
+ if (_Py_INIT_FAILED(err)) {
+ _Py_ExitInitError(err);
+ }
+
+ /* Test _PyCoreConfig.isolated=1 */
+ _PyCoreConfig config = _PyCoreConfig_INIT;
+
+ Py_IsolatedFlag = 0;
+ config.isolated = 1;
+
+ /* Use path starting with "./" avoids a search along the PATH */
+ config.program_name = L"./_testembed";
+
+ test_init_env_dev_mode_putenvs();
+ err = _Py_InitializeFromConfig(&config);
+ if (_Py_INIT_FAILED(err)) {
+ _Py_ExitInitError(err);
+ }
+ dump_config();
+ Py_Finalize();
+ return 0;
+}
+
+
static int test_init_dev_mode(void)
{
_PyCoreConfig config = _PyCoreConfig_INIT;
@@ -699,6 +767,8 @@ static struct TestCase TestCases[] = {
{ "init_env_dev_mode_alloc", test_init_env_dev_mode_alloc },
{ "init_dev_mode", test_init_dev_mode },
{ "init_isolated", test_init_isolated },
+ { "preinit_isolated1", test_preinit_isolated1 },
+ { "preinit_isolated2", test_preinit_isolated2 },
{ NULL, NULL }
};
More information about the Python-checkins
mailing list