Compare commits
2 Commits
4b45acd0b6
...
38614aad08
Author | SHA1 | Date |
---|---|---|
Síle Ekaterin Liszka | 38614aad08 | |
Síle Ekaterin Liszka | 090d5191f7 |
|
@ -1 +0,0 @@
|
||||||
include tests/*.xbc
|
|
37
setup.py
37
setup.py
|
@ -1,37 +0,0 @@
|
||||||
|
|
||||||
import pathlib
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from setuptools import setup, find_packages
|
|
||||||
|
|
||||||
here = pathlib.Path(__file__).parent.resolve()
|
|
||||||
src = here / 'src'
|
|
||||||
|
|
||||||
sys.path.append(src.as_posix())
|
|
||||||
|
|
||||||
from xbc.version import version
|
|
||||||
|
|
||||||
long_description = (here / "README.md").read_text(encoding="utf-8")
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name='py-xbc',
|
|
||||||
version=version,
|
|
||||||
description='A library for manipulating eXtra Boot Configuration (XBC) files',
|
|
||||||
long_description=long_description,
|
|
||||||
long_description_content_type='text/markdown',
|
|
||||||
url='https://gitea.treehouse.systems/VulpineAmethyst/py-xbc',
|
|
||||||
author='Síle Ekaterin Liszka',
|
|
||||||
author_email='sheila@vulpine.house',
|
|
||||||
keywords='xbc, configuration, bootconfig',
|
|
||||||
package_dir={'': 'src'},
|
|
||||||
packages=find_packages(where='src'),
|
|
||||||
python_requires='>=3.7, <4',
|
|
||||||
install_requires=['pyparsing'],
|
|
||||||
extras_require={
|
|
||||||
'test': ['pytest'],
|
|
||||||
},
|
|
||||||
project_urls={
|
|
||||||
'Bug Reports': 'https://gitea.treehouse.systems/VulpineAmethyst/py-xbc/issues',
|
|
||||||
'Source': 'https://gitea.treehouse.systems/VulpineAmethyst/py-xbc',
|
|
||||||
}
|
|
||||||
)
|
|
|
@ -1,2 +0,0 @@
|
||||||
feature.option.foo = 1
|
|
||||||
feature.option.bar = 2
|
|
|
@ -1,4 +0,0 @@
|
||||||
feature.option {
|
|
||||||
foo = 1
|
|
||||||
bar = 2
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
feature.options = "foo", "bar"
|
|
|
@ -1 +0,0 @@
|
||||||
feature.option{foo=1;bar=2}
|
|
|
@ -1,21 +0,0 @@
|
||||||
ftrace.event {
|
|
||||||
task.task_newtask {
|
|
||||||
filter = "pid < 128"
|
|
||||||
enable
|
|
||||||
}
|
|
||||||
kprobes.vfs_read {
|
|
||||||
probes = "vfs_read $arg1 $arg2"
|
|
||||||
filter = "common_pid < 200"
|
|
||||||
enable
|
|
||||||
}
|
|
||||||
synthetic.initcall_latency {
|
|
||||||
fields = "unsigned long func", "u64 lat"
|
|
||||||
actions = "hist:keys=func.sym,lat:vals=lat:sort=lat"
|
|
||||||
}
|
|
||||||
initcall.initcall_start {
|
|
||||||
actions = "hist:keys=func:ts0=common_timestamp.usecs"
|
|
||||||
}
|
|
||||||
initcall.initcall_finish {
|
|
||||||
actions = "hist:keys=func:lat=common_timestamp.usecs-$ts0:onmatch(initcall.initcall_start).initcall_latency(func,$lat)"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
ftrace.event.synthetic.initcall_latency {
|
|
||||||
fields = "unsigned long func", "u64 lat"
|
|
||||||
hist {
|
|
||||||
from {
|
|
||||||
event = initcall.initcall_start
|
|
||||||
key = func
|
|
||||||
assigns = "ts0=common_timestamp.usecs"
|
|
||||||
}
|
|
||||||
to {
|
|
||||||
event = initcall.initcall_finish
|
|
||||||
key = func
|
|
||||||
assigns = "lat=common_timestamp.usecs-$ts0"
|
|
||||||
onmatch = func, $lat
|
|
||||||
}
|
|
||||||
keys = func.sym, lat
|
|
||||||
vals = lat
|
|
||||||
sort = lat
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +1,77 @@
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from xbc import load_xbc
|
from xbc import loads_xbc
|
||||||
|
|
||||||
|
'''
|
||||||
|
The tests in this file are samples drawn from
|
||||||
|
https://lwn.net/Articles/806002/.
|
||||||
|
'''
|
||||||
|
|
||||||
def test_01():
|
def test_01():
|
||||||
|
i = '''feature.option.foo = 1
|
||||||
|
feature.option.bar = 2'''
|
||||||
d = {
|
d = {
|
||||||
'feature.option': False,
|
'feature.option': False,
|
||||||
'feature': False,
|
'feature': False,
|
||||||
'feature.option.foo': '1',
|
'feature.option.foo': '1',
|
||||||
'feature.option.bar': '2'
|
'feature.option.bar': '2'
|
||||||
}
|
}
|
||||||
assert load_xbc('tests/01-keyvalue.xbc') == d
|
assert loads_xbc(i) == d
|
||||||
|
|
||||||
def test_02():
|
def test_02():
|
||||||
|
i = '''feature.option {
|
||||||
|
foo = 1
|
||||||
|
bar = 2
|
||||||
|
}'''
|
||||||
d = {
|
d = {
|
||||||
'feature.option': False,
|
'feature.option': False,
|
||||||
'feature': False,
|
'feature': False,
|
||||||
'feature.option.foo': '1',
|
'feature.option.foo': '1',
|
||||||
'feature.option.bar': '2'
|
'feature.option.bar': '2'
|
||||||
}
|
}
|
||||||
assert load_xbc('tests/02-block-keyvalue.xbc') == d
|
assert loads_xbc(i) == d
|
||||||
|
|
||||||
def test_03():
|
def test_03():
|
||||||
|
i = 'feature.options = "foo", "bar"'
|
||||||
d = {
|
d = {
|
||||||
'feature': False,
|
'feature': False,
|
||||||
'feature.options': ['foo', 'bar']
|
'feature.options': ['foo', 'bar']
|
||||||
}
|
}
|
||||||
assert load_xbc('tests/03-keyvalue-string.xbc') == d
|
assert loads_xbc(i) == d
|
||||||
|
|
||||||
def test_10():
|
def test_10():
|
||||||
|
i = 'feature.option{foo=1;bar=2}'
|
||||||
d = {
|
d = {
|
||||||
'feature.option': False,
|
'feature.option': False,
|
||||||
'feature': False,
|
'feature': False,
|
||||||
'feature.option.foo': '1',
|
'feature.option.foo': '1',
|
||||||
'feature.option.bar': '2'
|
'feature.option.bar': '2'
|
||||||
}
|
}
|
||||||
assert load_xbc('tests/10-compact.xbc') == d
|
assert loads_xbc(i) == d
|
||||||
|
|
||||||
def test_11():
|
def test_11():
|
||||||
|
i = '''ftrace.event {
|
||||||
|
task.task_newtask {
|
||||||
|
filter = "pid < 128"
|
||||||
|
enable
|
||||||
|
}
|
||||||
|
kprobes.vfs_read {
|
||||||
|
probes = "vfs_read $arg1 $arg2"
|
||||||
|
filter = "common_pid < 200"
|
||||||
|
enable
|
||||||
|
}
|
||||||
|
synthetic.initcall_latency {
|
||||||
|
fields = "unsigned long func", "u64 lat"
|
||||||
|
actions = "hist:keys=func.sym,lat:vals=lat:sort=lat"
|
||||||
|
}
|
||||||
|
initcall.initcall_start {
|
||||||
|
actions = "hist:keys=func:ts0=common_timestamp.usecs"
|
||||||
|
}
|
||||||
|
initcall.initcall_finish {
|
||||||
|
actions = "hist:keys=func:lat=common_timestamp.usecs-$ts0:onmatch(initcall.initcall_start).initcall_latency(func,$lat)"
|
||||||
|
}
|
||||||
|
}'''
|
||||||
d = {
|
d = {
|
||||||
'ftrace': False,
|
'ftrace': False,
|
||||||
'ftrace.event': False,
|
'ftrace.event': False,
|
||||||
|
@ -60,9 +94,28 @@ def test_11():
|
||||||
'ftrace.event.initcall.initcall_finish': False,
|
'ftrace.event.initcall.initcall_finish': False,
|
||||||
'ftrace.event.initcall.initcall_finish.actions': "hist:keys=func:lat=common_timestamp.usecs-$ts0:onmatch(initcall.initcall_start).initcall_latency(func,$lat)"
|
'ftrace.event.initcall.initcall_finish.actions': "hist:keys=func:lat=common_timestamp.usecs-$ts0:onmatch(initcall.initcall_start).initcall_latency(func,$lat)"
|
||||||
}
|
}
|
||||||
assert load_xbc('tests/11-config.xbc') == d
|
assert loads_xbc(i) == d
|
||||||
|
|
||||||
def test_12():
|
def test_12():
|
||||||
|
i = '''ftrace.event.synthetic.initcall_latency {
|
||||||
|
fields = "unsigned long func", "u64 lat"
|
||||||
|
hist {
|
||||||
|
from {
|
||||||
|
event = initcall.initcall_start
|
||||||
|
key = func
|
||||||
|
assigns = "ts0=common_timestamp.usecs"
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
event = initcall.initcall_finish
|
||||||
|
key = func
|
||||||
|
assigns = "lat=common_timestamp.usecs-$ts0"
|
||||||
|
onmatch = func, $lat
|
||||||
|
}
|
||||||
|
keys = func.sym, lat
|
||||||
|
vals = lat
|
||||||
|
sort = lat
|
||||||
|
}
|
||||||
|
}'''
|
||||||
d = {
|
d = {
|
||||||
'ftrace': False,
|
'ftrace': False,
|
||||||
'ftrace.event': False,
|
'ftrace.event': False,
|
||||||
|
@ -83,4 +136,4 @@ def test_12():
|
||||||
'ftrace.event.synthetic.initcall_latency.hist.vals': 'lat',
|
'ftrace.event.synthetic.initcall_latency.hist.vals': 'lat',
|
||||||
'ftrace.event.synthetic.initcall_latency.hist.sort': 'lat'
|
'ftrace.event.synthetic.initcall_latency.hist.sort': 'lat'
|
||||||
}
|
}
|
||||||
assert load_xbc('tests/12-config2.xbc') == d
|
assert loads_xbc(i) == d
|
Loading…
Reference in New Issue