Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
avocado
提交
ab10314f
A
avocado
项目概览
openeuler
/
avocado
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
avocado
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ab10314f
编写于
3月 03, 2016
作者:
A
Amador Pahim
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1070 from clebergnu/data_dir_settings
data_dir: make settings dynamic
上级
9a0eebb5
be47dcc4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
107 addition
and
34 deletion
+107
-34
avocado/core/data_dir.py
avocado/core/data_dir.py
+17
-12
selftests/functional/test_basic.py
selftests/functional/test_basic.py
+34
-0
selftests/unit/test_datadir.py
selftests/unit/test_datadir.py
+56
-22
未找到文件。
avocado/core/data_dir.py
浏览文件 @
ab10314f
...
...
@@ -34,7 +34,7 @@ import time
import
tempfile
from
.
import
job_id
from
.
settings
import
settings
from
.
import
settings
from
..utils
import
path
as
utils_path
from
..utils.data_structures
import
Borg
...
...
@@ -42,11 +42,6 @@ _BASE_DIR = os.path.join(sys.modules[__name__].__file__, "..", "..", "..")
_BASE_DIR
=
os
.
path
.
abspath
(
_BASE_DIR
)
_IN_TREE_TESTS_DIR
=
os
.
path
.
join
(
_BASE_DIR
,
'examples'
,
'tests'
)
SETTINGS_BASE_DIR
=
os
.
path
.
expanduser
(
settings
.
get_value
(
'datadir.paths'
,
'base_dir'
))
SETTINGS_TEST_DIR
=
os
.
path
.
expanduser
(
settings
.
get_value
(
'datadir.paths'
,
'test_dir'
))
SETTINGS_DATA_DIR
=
os
.
path
.
expanduser
(
settings
.
get_value
(
'datadir.paths'
,
'data_dir'
))
SETTINGS_LOG_DIR
=
os
.
path
.
expanduser
(
settings
.
get_value
(
'datadir.paths'
,
'logs_dir'
))
SYSTEM_BASE_DIR
=
'/var/lib/avocado'
if
'VIRTUAL_ENV'
in
os
.
environ
:
SYSTEM_BASE_DIR
=
os
.
environ
[
'VIRTUAL_ENV'
]
...
...
@@ -60,6 +55,13 @@ USER_DATA_DIR = os.path.join(USER_BASE_DIR, 'data')
USER_LOG_DIR
=
os
.
path
.
join
(
USER_BASE_DIR
,
'job-results'
)
def
_get_settings_dir
(
dir_name
):
"""
Returns a given "datadir" directory as set by the configuration system
"""
return
os
.
path
.
expanduser
(
settings
.
settings
.
get_value
(
'datadir.paths'
,
dir_name
))
def
_get_rw_dir
(
settings_location
,
system_location
,
user_location
):
if
utils_path
.
usable_rw_dir
(
settings_location
):
return
settings_location
...
...
@@ -73,7 +75,7 @@ def _get_rw_dir(settings_location, system_location, user_location):
def
_get_ro_dir
(
settings_location
,
system_location
,
user_location
):
if
not
settings
.
intree
:
if
not
settings
.
settings
.
intree
:
if
utils_path
.
usable_ro_dir
(
settings_location
):
return
settings_location
...
...
@@ -97,7 +99,8 @@ def get_base_dir():
* Data directory
* Tests directory
"""
return
_get_rw_dir
(
SETTINGS_BASE_DIR
,
SYSTEM_BASE_DIR
,
USER_BASE_DIR
)
return
_get_rw_dir
(
_get_settings_dir
(
'base_dir'
),
SYSTEM_BASE_DIR
,
USER_BASE_DIR
)
def
get_test_dir
():
...
...
@@ -106,9 +109,9 @@ def get_test_dir():
The test location is where we store tests written with the avocado API.
"""
if
settings
.
intree
:
if
settings
.
settings
.
intree
:
return
_IN_TREE_TESTS_DIR
return
_get_ro_dir
(
SETTINGS_TEST_DIR
,
SYSTEM_TEST_DIR
,
USER_TEST_DIR
)
return
_get_ro_dir
(
_get_settings_dir
(
'test_dir'
)
,
SYSTEM_TEST_DIR
,
USER_TEST_DIR
)
def
get_data_dir
():
...
...
@@ -124,7 +127,8 @@ def get_data_dir():
* VM images
* Reference bitmaps
"""
return
_get_rw_dir
(
SETTINGS_DATA_DIR
,
SYSTEM_DATA_DIR
,
USER_DATA_DIR
)
return
_get_rw_dir
(
_get_settings_dir
(
'data_dir'
),
SYSTEM_DATA_DIR
,
USER_DATA_DIR
)
def
get_datafile_path
(
*
args
):
...
...
@@ -143,7 +147,8 @@ def get_logs_dir():
The log dir is where we store job/test logs in general.
"""
return
_get_rw_dir
(
SETTINGS_LOG_DIR
,
SYSTEM_LOG_DIR
,
USER_LOG_DIR
)
return
_get_rw_dir
(
_get_settings_dir
(
'logs_dir'
),
SYSTEM_LOG_DIR
,
USER_LOG_DIR
)
def
create_job_logs_dir
(
logdir
=
None
,
unique_id
=
None
):
...
...
selftests/functional/test_basic.py
浏览文件 @
ab10314f
...
...
@@ -63,6 +63,40 @@ class RunnerOperationTest(unittest.TestCase):
"Version string does not match 'Avocado
\\
d
\\
.
\\
d
\\
.
\\
"
"d':
\n
%r"
%
(
result
.
stderr
))
def
test_alternate_config_datadir
(
self
):
"""
Uses the "--config" flag to check custom configuration is applied
Even on the more complex data_dir module, which adds extra checks
to what is set on the plain settings module.
"""
base_dir
=
os
.
path
.
join
(
self
.
tmpdir
,
'datadir_base'
)
os
.
mkdir
(
base_dir
)
mapping
=
{
'base_dir'
:
base_dir
,
'test_dir'
:
os
.
path
.
join
(
base_dir
,
'test'
),
'data_dir'
:
os
.
path
.
join
(
base_dir
,
'data'
),
'logs_dir'
:
os
.
path
.
join
(
base_dir
,
'logs'
)}
config
=
'[datadir.paths]'
for
key
,
value
in
mapping
.
iteritems
():
if
not
os
.
path
.
isdir
(
value
):
os
.
mkdir
(
value
)
config
+=
"%s = %s
\n
"
%
(
key
,
value
)
fd
,
config_file
=
tempfile
.
mkstemp
(
dir
=
self
.
tmpdir
)
os
.
write
(
fd
,
config
)
os
.
close
(
fd
)
os
.
chdir
(
basedir
)
cmd
=
'./scripts/avocado --config %s config --datadir'
%
config_file
result
=
process
.
run
(
cmd
)
output
=
result
.
stdout
expected_rc
=
exit_codes
.
AVOCADO_ALL_OK
self
.
assertEqual
(
result
.
exit_status
,
expected_rc
,
"Avocado did not return rc %d:
\n
%s"
%
(
expected_rc
,
result
))
self
.
assertIn
(
' base '
+
mapping
[
'base_dir'
],
result
.
stdout
)
self
.
assertIn
(
' data '
+
mapping
[
'data_dir'
],
result
.
stdout
)
self
.
assertIn
(
' logs '
+
mapping
[
'logs_dir'
],
result
.
stdout
)
def
test_runner_all_ok
(
self
):
os
.
chdir
(
basedir
)
cmd_line
=
'./scripts/avocado run --sysinfo=off --job-results-dir %s passtest passtest'
%
self
.
tmpdir
...
...
selftests/unit/test_datadir.py
浏览文件 @
ab10314f
...
...
@@ -8,47 +8,53 @@ from flexmock import flexmock
from
avocado.core
import
settings
def
_get_bogus_settings
(
args
):
return
(
'[datadir.paths]
\n
'
'base_dir = %(base_dir)s
\n
'
'test_dir = %(test_dir)s
\n
'
'data_dir = %(data_dir)s
\n
'
'logs_dir = %(logs_dir)s
\n
'
)
%
args
class
DataDirTest
(
unittest
.
TestCase
):
@
staticmethod
def
_get_temporary_dirs_mapping_and_config
():
"""
Creates a temporary bogus base data dir
class
DataDirTest
(
unittest
.
TestCase
):
And returns a dictionary containing the temporary data dir paths and
a the path to a configuration file contain those same settings
"""
base_dir
=
tempfile
.
mkdtemp
(
prefix
=
'avocado_'
+
__name__
)
mapping
=
{
'base_dir'
:
base_dir
,
'test_dir'
:
os
.
path
.
join
(
base_dir
,
'tests'
),
'data_dir'
:
os
.
path
.
join
(
base_dir
,
'data'
),
'logs_dir'
:
os
.
path
.
join
(
base_dir
,
'logs'
)}
temp_settings
=
(
'[datadir.paths]
\n
'
'base_dir = %(base_dir)s
\n
'
'test_dir = %(test_dir)s
\n
'
'data_dir = %(data_dir)s
\n
'
'logs_dir = %(logs_dir)s
\n
'
)
%
mapping
config_file
=
tempfile
.
NamedTemporaryFile
(
delete
=
False
)
config_file
.
write
(
temp_settings
)
config_file
.
close
()
return
(
mapping
,
config_file
.
name
)
def
setUp
(
self
):
tbase
=
tempfile
.
mkdtemp
(
prefix
=
'avocado_'
+
__name__
)
tdir
=
os
.
path
.
join
(
tbase
,
'tests'
)
tdata
=
os
.
path
.
join
(
tbase
,
'data'
)
tlogs
=
os
.
path
.
join
(
tbase
,
'logs'
)
self
.
mapping
=
{
'base_dir'
:
tbase
,
'test_dir'
:
tdir
,
'data_dir'
:
tdata
,
'logs_dir'
:
tlogs
}
self
.
config_file
=
tempfile
.
NamedTemporaryFile
(
delete
=
False
)
self
.
config_file
.
write
(
_get_bogus_settings
(
self
.
mapping
))
self
.
config_file
.
close
()
(
self
.
mapping
,
self
.
config_file_path
)
=
self
.
_get_temporary_dirs_mapping_and_config
()
def
testDataDirFromConfig
(
self
):
"""
When avocado.conf is present, honor the values coming from it.
"""
stg_orig
=
settings
.
settings
stg
=
settings
.
Settings
(
self
.
config_file
.
name
)
stg
=
settings
.
Settings
(
self
.
config_file
_path
)
try
:
# Trick the module to think we're on a system wide install
stg
.
intree
=
False
flexmock
(
settings
,
settings
=
stg
)
from
avocado.core
import
data_dir
flexmock
(
data_dir
,
settings
=
stg
)
self
.
assertFalse
(
data_dir
.
settings
.
intree
)
reload
(
data_dir
)
flexmock
(
data_dir
.
settings
,
settings
=
stg
)
self
.
assertFalse
(
data_dir
.
settings
.
settings
.
intree
)
for
key
in
self
.
mapping
.
keys
():
data_dir_func
=
getattr
(
data_dir
,
'get_%s'
%
key
)
self
.
assertEqual
(
data_dir_func
(),
stg
.
get_value
(
'datadir.paths'
,
key
))
finally
:
flexmock
(
settings
,
settings
=
stg_orig
)
reload
(
data_dir
)
del
data_dir
def
testUniqueLogDir
(
self
):
...
...
@@ -72,9 +78,37 @@ class DataDirTest(unittest.TestCase):
self
.
assertEqual
(
path
,
path_prefix
+
uid
+
".1"
)
self
.
assertTrue
(
os
.
path
.
exists
(
path
))
def
testSettingsDirAlternateDynamic
(
self
):
"""
Tests that changes to the data_dir settings are applied dynamically
To guarantee that, first the data_dir module is loaded. Then a new,
alternate set of data directories are created and set in the
"canonical" settings location, that is, avocado.core.settings.settings.
No data_dir module reload should be necessary to get the new locations
from data_dir APIs.
"""
stg_orig
=
settings
.
settings
from
avocado.core
import
data_dir
(
self
.
alt_mapping
,
self
.
alt_config_file_path
)
=
self
.
_get_temporary_dirs_mapping_and_config
()
stg
=
settings
.
Settings
(
self
.
alt_config_file_path
)
flexmock
(
settings
,
settings
=
stg
)
for
key
in
self
.
alt_mapping
.
keys
():
data_dir_func
=
getattr
(
data_dir
,
'get_%s'
%
key
)
self
.
assertEqual
(
data_dir_func
(),
self
.
alt_mapping
[
key
])
flexmock
(
settings
,
settings
=
stg_orig
)
del
data_dir
def
tearDown
(
self
):
os
.
unlink
(
self
.
config_file
.
name
)
os
.
unlink
(
self
.
config_file
_path
)
shutil
.
rmtree
(
self
.
mapping
[
'base_dir'
])
# clean up alternate configuration file if set by the test
if
hasattr
(
self
,
'alt_config_file_path'
):
os
.
unlink
(
self
.
alt_config_file_path
)
if
hasattr
(
self
,
'alt_mapping'
):
shutil
.
rmtree
(
self
.
alt_mapping
[
'base_dir'
])
if
__name__
==
'__main__'
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录