From ce4016c070ffc81267b0d071bbc738fb688fb902 Mon Sep 17 00:00:00 2001 From: Mariano Lopez Date: Wed, 22 Feb 2017 13:12:55 +0000 Subject: selftest/eSDK.py: Cleanup when there is an error in setUpClass 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. This patch will ensure tearDownClass will be run if there is an error in setUpClass. (From OE-Core rev: eb1383949f76c6eb36f86c051057f761a71016a3) (From OE-Core rev: 5dc68a378d9f4ec2c313ac395e91225a02e5b2c7) Signed-off-by: Mariano Lopez Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- meta/lib/oeqa/selftest/eSDK.py | 46 +++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 21 deletions(-) (limited to 'meta/lib/oeqa') diff --git a/meta/lib/oeqa/selftest/eSDK.py b/meta/lib/oeqa/selftest/eSDK.py index c95ca6deb2..4c58d2b410 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) -- cgit v1.2.3-54-g00ecf