[OE-core] [PATCH 1/1] selftest/eSDK.py: Cleanup when there is an error in setUpClass
akuster808
akuster808 at gmail.com
Thu Feb 23 15:53:17 UTC 2017
Mariano,
On 02/22/2017 05:12 AM, mariano.lopez at linux.intel.com wrote:
> From: Mariano Lopez <mariano.lopez at linux.intel.com>
>
> Lately autobuilders are experiencing hangs with selftest,
> it seems it is cause if an error happens in setUpClass
> method of oeSDKExtSelfTest class because HTTP server
> keeps running in background.
Any issue if Morty gets this?
- armin
> This patch will ensure tearDownClass will be run if there
> is an error in setUpClass.
>
> Signed-off-by: Mariano Lopez <mariano.lopez at linux.intel.com>
> ---
> meta/lib/oeqa/selftest/eSDK.py | 46 +++++++++++++++++++++++-------------------
> 1 file changed, 25 insertions(+), 21 deletions(-)
>
> diff --git a/meta/lib/oeqa/selftest/eSDK.py b/meta/lib/oeqa/selftest/eSDK.py
> index ee1ca6a..b68e997 100644
> --- a/meta/lib/oeqa/selftest/eSDK.py
> +++ b/meta/lib/oeqa/selftest/eSDK.py
> @@ -64,7 +64,7 @@ class oeSDKExtSelfTest(oeSelfTest):
> runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
>
> cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
> -
> +
> sstate_config="""
> SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS"
> SSTATE_MIRRORS = "file://.* http://%s/PATH"
> @@ -73,37 +73,41 @@ CORE_IMAGE_EXTRA_INSTALL = "perl"
>
> with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
> f.write(sstate_config)
> -
>
> @classmethod
> def setUpClass(cls):
> - # Start to serve sstate dir
> - sstate_dir = get_bb_var('SSTATE_DIR')
> - cls.http_service = HTTPService(sstate_dir)
> - cls.http_service.start()
> + # If there is an exception in setUpClass it will not run tearDownClass
> + # method and it leaves HTTP server running forever, so we need to be
> + # sure tearDownClass is run.
> + try:
> + cls.tmpdir_eSDKQA = tempfile.mkdtemp(prefix='eSDKQA')
>
> - cls.http_url = "http://127.0.0.1:%d" % cls.http_service.port
> -
> - cls.image = 'core-image-minimal'
> + # Start to serve sstate dir
> + sstate_dir = get_bb_var('SSTATE_DIR')
> + cls.http_service = HTTPService(sstate_dir)
> + cls.http_url = "http://127.0.0.1:%d" % cls.http_service.port
> + cls.http_service.start()
>
> - cls.tmpdir_eSDKQA = tempfile.mkdtemp(prefix='eSDKQA')
> - oeSDKExtSelfTest.generate_eSDK(cls.image)
> + cls.image = 'core-image-minimal'
> + oeSDKExtSelfTest.generate_eSDK(cls.image)
>
> - # Install eSDK
> - cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
> - runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
> + # Install eSDK
> + cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
> + runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
>
> - cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
> + cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
>
> - # Configure eSDK to use sstate mirror from poky
> - sstate_config="""
> + # Configure eSDK to use sstate mirror from poky
> + sstate_config="""
> SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS"
> SSTATE_MIRRORS = "file://.* http://%s/PATH"
> - """ % cls.http_url
> - with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
> - f.write(sstate_config)
> + """ % cls.http_url
> + with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
> + f.write(sstate_config)
> + except:
> + cls.tearDownClass()
> + raise
>
> -
> @classmethod
> def tearDownClass(cls):
> shutil.rmtree(cls.tmpdir_eSDKQA)
More information about the Openembedded-core
mailing list