Skip to content

Commit

Permalink
bpo-36301: Test Python init with isolated (pythonGH-12569)
Browse files Browse the repository at this point in the history
Add test_preinit_isolated1() and test_preinit_isolated2() test_embed.
  • Loading branch information
vstinner authored Mar 26, 2019
1 parent 6cd658b commit 6da20a4
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 0 deletions.
20 changes: 20 additions & 0 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
70 changes: 70 additions & 0 deletions Programs/_testembed.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 }
};

Expand Down

0 comments on commit 6da20a4

Please sign in to comment.