def _get_rw_dir(settings_location, system_location, user_location): if utils_path.usable_rw_dir(settings_location): return settings_location if utils_path.usable_rw_dir(system_location): return system_location user_location = os.path.expanduser(user_location) if utils_path.usable_rw_dir(user_location): return user_location
def get_test_dir(): """ Get the most appropriate test location. The test location is where we store tests written with the avocado API. The heuristics used to determine the test dir are: 1) If an explicit test dir is set in the configuration system, it is used. 2) If user is running Avocado from its source code tree, the example test dir is used. 3) System wide test dir is used. 4) User default test dir (~/avocado/tests) is used. """ configured = _get_settings_dir('test_dir') if utils_path.usable_ro_dir(configured): return configured source_tree_root = os.path.dirname( os.path.dirname(os.path.dirname(__file__))) if os.path.exists(os.path.join(source_tree_root, 'examples')): return os.path.join(source_tree_root, 'examples', 'tests') if utils_path.usable_ro_dir(SYSTEM_TEST_DIR): return SYSTEM_TEST_DIR if utils_path.usable_rw_dir(USER_TEST_DIR): return USER_TEST_DIR
def get_tmp_dir(public=True): """ Get the most appropriate tmp dir location. :param public: If public for all users' access """ persistent_dir = get_settings_value('vt.common', 'tmp_dir', default="") if persistent_dir != "": return persistent_dir tmp_dir = None # apparmor deny /tmp/* /var/tmp/* and cause failure across tests # it is better to handle here if distro.detect().name == 'Ubuntu': tmp_dir = "/var/lib/libvirt/images" if not utils_path.usable_rw_dir(tmp_dir): logging.warning("Unable to write in '/var/lib/libvirt/images' " "on Ubuntu, apparmor might complain...") tmp_dir = None tmp_dir = data_dir.get_tmp_dir(basedir=tmp_dir) if public: tmp_dir_st = os.stat(tmp_dir) os.chmod( tmp_dir, tmp_dir_st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH | stat.S_IRGRP | stat.S_IROTH) return tmp_dir
def _get_writable_cache_dir(self): """ Returns the first available writable cache directory When a asset has to be downloaded, a writable cache directory is then needed. The first available writable cache directory will be used. :returns: the first writable cache dir :rtype: str :raises: OSError """ for cache_dir in self.cache_dirs: cache_dir = os.path.expanduser(cache_dir) if utils_path.usable_rw_dir(cache_dir): return cache_dir raise OSError("Can't find a writable cache directory.")
def get_tmp_dir(public=True): """ Get the most appropriate tmp dir location. :param public: If public for all users' access """ tmp_dir = None # apparmor deny /tmp/* /var/tmp/* and cause failure across tests # it is better to handle here if distro.detect().name == 'Ubuntu': tmp_dir = "/var/lib/libvirt/images" if not utils_path.usable_rw_dir(tmp_dir): logging.warning("Unable to write in '/var/lib/libvirt/images' " "on Ubuntu, apparmor might complain...") tmp_dir = None tmp_dir = data_dir.get_tmp_dir(basedir=tmp_dir) if public: tmp_dir_st = os.stat(tmp_dir) os.chmod(tmp_dir, tmp_dir_st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH | stat.S_IRGRP | stat.S_IROTH) return tmp_dir