Compare commits
No commits in common. "38614aad080084990500c00977e31cbe8add6191" and "4b45acd0b6700e65ddea30bb77f29bd373f11e8a" have entirely different histories.
38614aad08
...
4b45acd0b6
|
@ -0,0 +1 @@
|
||||||
|
include tests/*.xbc
|
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
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',
|
||||||
|
}
|
||||||
|
)
|
|
@ -0,0 +1,2 @@
|
||||||
|
feature.option.foo = 1
|
||||||
|
feature.option.bar = 2
|
|
@ -0,0 +1,4 @@
|
||||||
|
feature.option {
|
||||||
|
foo = 1
|
||||||
|
bar = 2
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
feature.options = "foo", "bar"
|
|
@ -0,0 +1 @@
|
||||||
|
feature.option{foo=1;bar=2}
|
|
@ -0,0 +1,21 @@
|
||||||
|
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)"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
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,77 +1,43 @@
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from xbc import loads_xbc
|
from xbc import load_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 loads_xbc(i) == d
|
assert load_xbc('tests/01-keyvalue.xbc') == 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 loads_xbc(i) == d
|
assert load_xbc('tests/02-block-keyvalue.xbc') == 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 loads_xbc(i) == d
|
assert load_xbc('tests/03-keyvalue-string.xbc') == 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 loads_xbc(i) == d
|
assert load_xbc('tests/10-compact.xbc') == 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,
|
||||||
|
@ -94,28 +60,9 @@ 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 loads_xbc(i) == d
|
assert load_xbc('tests/11-config.xbc') == 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,
|
||||||
|
@ -136,4 +83,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 loads_xbc(i) == d
|
assert load_xbc('tests/12-config2.xbc') == d
|
Loading…
Reference in New Issue