]> granicus.if.org Git - python/commitdiff
bpo-36301: Test Python init with isolated (GH-12569)
authorVictor Stinner <vstinner@redhat.com>
Tue, 26 Mar 2019 23:26:18 +0000 (00:26 +0100)
committerGitHub <noreply@github.com>
Tue, 26 Mar 2019 23:26:18 +0000 (00:26 +0100)
Add test_preinit_isolated1() and test_preinit_isolated2() test_embed.

Lib/test/test_embed.py
Programs/_testembed.c

index 7efd5be23e036b026a36b30b4998d8f34a709794..c44d24ecfdd34b5f3ec39b56ba7f62ccf2df96dc 100644 (file)
@@ -662,6 +662,26 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
         }
         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()
index 7fb0d695b47519e70e340a0d2e40e1ca871d2983..76de8aab5ba6cbde1aadee19594bb9a9d3605cc2 100644 (file)
@@ -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 }
 };