07 规则赋值¶
特性描述¶
测试11种赋值规则的功能
特性约束¶
无
子场景 1¶
NAME规则赋值的功能测试
备注¶
同场景 6.4
准备工作¶
不涉及
测试步骤¶
不涉及
结果验证¶
不涉及
测试结束¶
不涉及
测试场景约束¶
不涉及
子场景 2¶
SYMLINK规则赋值的功能测试
备注¶
同场景 6.6
准备工作¶
不涉及
测试步骤¶
不涉及
结果验证¶
不涉及
测试结束¶
不涉及
测试场景约束¶
不涉及
子场景 3¶
ENV规则赋值的功能测试
备注¶
同场景 6.9
准备工作¶
不涉及
测试步骤¶
不涉及
结果验证¶
不涉及
测试结束¶
不涉及
测试场景约束¶
不涉及
子场景 4¶
TAG规则所有标签和当前标签机制测试。首先给设备赋予current和all标签,然后删除all标签,/run/devmaster/tags目录下包含所有标签,因此期望存在current和all子目录,且子目录中包含该设备的id,查看/run/devmaster/data目录下的设备数据库,其中所有标签G包含all和current,当前标签Q仅包含current。
备注¶
所有标签会记录设备所有新增的标签,如果某个标签在某条规则中删除,所有标签中仍然会保有已删除标签的记录。当前标签则剔除已被删除的标签。
准备工作¶
创建配置文件:/etc/devmaster/config.toml
创建规则文件:/tmp/1/rules.d/00-test.rules
启动devmaster
测试步骤¶
触发任意设备的uevent事件,比如/sys/class/net/lo:
结果验证¶
查看/run/devmaster/tags下是否生成标签目录all和current,且标签目录中包含n1:
# tree /run/devmaster/tags/
/run/devmaster/tags/
├── all
│ └── n1
└── current
└── n1
2 directories, 2 files
查看/sys/class/net/lo的数据库文件中,G(历史标签)包含current和all,Q(当前标签)仅包含current:
测试结束¶
清理devmaster残留数据
测试场景约束¶
无
子场景 5¶
MODE, OWNER, GROUP规则测试。使用OWNER、GROUP、MODE分别改变设备节点的用户、属组和权限。
备注¶
无
准备工作¶
创建配置文件:/etc/devmaster/config.toml
创建回环块设备$loop0, $loop1
创建规则文件:/tmp/1/rules.d/00-test.rules
KERNEL=="$loop0", OWNER="devmaster", GROUP="devmaster", MODE="444"
KERNEL=="$loop1", OWNER="1659", GROUP="1659", MODE="444"
创建用户devmaster、属组devmaster
记录\(loop0、\)loop1原本的用户、属组、权限
# origin_mod=$(stat /dev/$loop0 | grep Access | grep Uid | awk '{ print $2 }' | awk -F'/' '{ print $1 }' | awk -F'(' '{ print $2 }')
# origin_user=$(stat /dev/$loop0 | grep Access | grep Uid | awk '{ print $5 }' | awk -F'/' '{ print $1 }')
# origin_group=$(stat /dev/$loop0 | grep Access | grep Uid | awk '{ print $8 }' | awk -F'/' '{ pri
nt $1 }')
启动devmaster
测试步骤¶
触发$loop0的uevent事件,有结果1:
触发$loop1的uevent事件,有结果2:
结果验证¶
结果1:$loop0的用户、属组、权限变更为tss、tss和444
结果2:$loop1的用户、属组、权限变更为tss、tss和444:
测试结束¶
删除devmaster数据残留
恢复\(loop0、\)loop1的用户、属组、权限
# chmod $origin_mod /dev/$loop0
# chmod $origin_mod /dev/$loop1
# chown $origin_user /dev/$loop0
# chown $origin_user /dev/$loop1
# chgrp $origin_group /dev/$loop0
# chgrp $origin_group /dev/$loop1
测试场景约束¶
无
子场景 6¶
ATTR赋值规则测试。接收到设备的add事件后,使用ATTR{uevent}="change"规则,在设备事件触发后再次触发一个change事件。接收到change事件后,创建/dev/attr_assign软链接。
备注¶
无
准备工作¶
创建配置文件:/etc/devmaster/config.toml
创建规则文件:/tmp/1/rules.d/00-test.rules
创建回环块设备$loop0
启动devmaster
测试步骤¶
触发$loop0的add事件:
结果验证¶
检查软链接/dev/attr_assign:
测试结束¶
删除devmaster数据残留
删除软链接残留
测试场景约束¶
无
子场景 7¶
RUN赋值规则测试。首先使用RUN{program}规则,将/bin/touch /tmp/assign_run_program_1加入program执行列表,再使用RUN规则,将/bin/touch /tmp/assign_run_program_2加入program执行列表。RUN规则如果未指明builin或program,则默认转换为RUN{program}规则。最后使用RUN{builtin}将mod load loop加入到builtin执行列表中。规则执行的最后阶段,统一运行执行列表中的program命令和builtin命令。
备注¶
无
准备工作¶
创建配置文件:/etc/devmaster/config.toml
创建规则文件:/tmp/1/rules.d/00-test.rules
SUBSYSTEM!="net", GOTO="end"
RUN{program}+="/bin/touch /tmp/assign_run_program_1"
RUN+="/bin/touch /tmp/assign_run_program_2"
RUN{builtin}+="kmod load joydev"
LABEL="end"
卸载loop内核模块
启动devmaster
测试步骤¶
触发虚拟回环网卡/sys/class/net/lo的uevent事件:
结果验证¶
检查loop内核模块是否加载完毕:
检查临时文件是否创建成功:
# ll /tmp/assign_run_program_*
-rw-r--r-- 1 root root 0 Aug 6 13:12 /tmp/assign_run_program_1
-rw-r--r-- 1 root root 0 Aug 6 13:12 /tmp/assign_run_program_2
测试结束¶
删除devmaster数据残留
删除临时文件
测试场景约束¶
系统中存在joydev内核模块。该用例和其他涉及joydev内核模块的用例存在冲突,需要串行执行。
子场景 8¶
OPTIONS="link_priority=xxx"赋值规则测试。通过OPTIONS="link_priority=xxx"规则,设置\(loop0的软链接优先级为10,优先级较大的设备优先设置同名软链接。然后通过SYMLINK+="assign_options_link_priority"给 \(loop0和\)loop1设备赋予软链接,并分别触发两者的事件,结果应是assign_options_link_priority指向 \(loop0。触发\)loop0的remove事件后,软链接assign_options_link_priority则指向\)loop1。
备注¶
无
准备工作¶
创建配置文件:/etc/devmaster/config.toml
rules_d = ["/tmp/1/rules.d"]
创建规则文件:/tmp/1/rules.d/00-test.rules
KERNEL=="$loop0", OPTIONS="link_priority=10"
SYMLINK="assign_options_link_priority"
创建回环块设备\(loop0和\)loop1
# dd if=/dev/zero of=loop0.img bs=1M count=100
# loop0=$(losetup -f)
# losetup $loop0 loop0.img
#
# dd if=/dev/zero of=loop1.img bs=1M count=100
# loop1=$(losetup -f)
# losetup $loop1 loop1.img
启动devmaster
测试步骤¶
触发\(loop0和\)loop1的uevent事件,有结果1:
间隔1s后,触发$loop0的remove事件,有结果2:
结果验证¶
结果1:生成/dev/assign_options_link_priority 软链接,指向$loop0,/run/devmaster/links/assign_options_link_priority/下生成两个空软链接 device id -> link_priority:devnode
# ll /dev/assign_options_link_priority
lrwxrwxrwx 1 root root 5 Aug 6 13:46 /dev/assign_options_link_priority -> $loop0
# tree /run/devmaster/links/assign_options_link_priority/
/run/devmaster/links/assign_options_link_priority/
├── b7:0 -> 10:/dev/$loop0
└── b7:1 -> 0:/dev/$loop1
0 directories, 2 files
结果2:/dev/assign_options_link_priority 软链接指向 \(loop1,/run/devmaster/links/assign_options_link_priority/下保留指代\)loop1的软链接
# ll /dev/assign_options_link_priority
lrwxrwxrwx 1 root root 5 Aug 6 13:56 /dev/assign_options_link_priority -> $loop1
# tree /run/devmaster/links/assign_options_link_priority/
/run/devmaster/links/assign_options_link_priority/
└── b7:1 -> 0:/dev/$loop1
0 directories, 1 file
测试结束¶
删除devmaster数据残留
删除临时文件
测试场景约束¶
无
子场景 9¶
OPTIONS="string_escape=none|replace"赋值规则测试。首先通过OPTIONS="string_escape=replace"规则,使本规则行中后续SYMLINK+="link1 link2"规则添加link1_link2软链接。string_escape=replace仅影响当前行的SYMLINK、ENV和NAME赋值规则的字符串空格转译,使得空格转移为下划线,执行到下一行后重制。默认不转译字符串空格,因此执行SYMLINK+="link3 link4"规则后,分别生成link3和link4软链接。OPTIONS="string_escape=none"规则取消字符串空格转移,和默认行为相同。
备注¶
无
准备工作¶
创建配置文件:/etc/devmaster/config.toml
创建规则文件:/tmp/1/rules.d/00-test.rules
OPTIONS="string_escape=replace", SYMLINK+="link1 link2"
SYMLINK+="link3 link4"
OPTIONS="string_escape=none", SYMLINK+="link5 link6"
创建回环块设备$loop0
启动devmaster
测试步骤¶
触发$loop的uevent事件:
结果验证¶
生成link_link2、link3、link4、link5、link6软链接
# ll /dev/link*
lrwxrwxrwx 1 root root 5 Aug 6 14:51 /dev/link1_link2 -> loop0
lrwxrwxrwx 1 root root 5 Aug 6 14:51 /dev/link3 -> loop0
lrwxrwxrwx 1 root root 5 Aug 6 14:51 /dev/link4 -> loop0
lrwxrwxrwx 1 root root 5 Aug 6 14:51 /dev/link5 -> loop0
lrwxrwxrwx 1 root root 5 Aug 6 14:51 /dev/link6 -> loop0
测试结束¶
删除devmaster数据残留
清理软链接
测试场景约束¶
string_escape选项仅影响当前规则行的字符串空格转译行为,到新行后重制。string_escape仅影响ENV、NAME、SYMLINK三类赋值规则。
子场景 10¶
OPTIONS="static_node="赋值规则测试。OPTIONS="static_node="规则会使devmaster启动后立即将该规则行中的MODE、OWNER、GROUP三类赋值规则作用在设备节点上。
备注¶
无
准备工作¶
创建配置文件:/etc/devmaster/config.toml
创建回环块设备$loop0
创建用户、属组
获取$loop0原来的用户、属组、权限
# origin_mod=$(stat /dev/$loop0 | grep Access | grep Uid | awk '{ print $2 }' | awk -F'/' '{ print $1 }' | awk -F'(' '{ print $2 }'))
# origin_user=$(stat /dev/$loop0 | grep Access | grep Uid | awk '{ print $5 }' | awk -F'/' '{ print $1 }')
# origin_group=$(stat /dev/$loop0 | grep Access | grep Uid | awk '{ print $8 }' | awk -F'/' '{ pri
nt $1 }')
创建规则文件:/tmp/1/rules.d/00-test.rules
测试步骤¶
启动devmaster:
结果验证¶
/dev/$loop0的权限、用户、属组变为444、devmaster、devmaster
测试结束¶
删除devmaster残留数据
恢复$loop0的用户、属组、权限
测试场景约束¶
静态节点选项在devmaster启动后仅将本行中的OWNER、GROUP、MODE赋值选项作用在设备节点上,其他规则不生效。
子场景 11¶
OPTIONS="db_persist"赋值规则测试。OPTIONS="db_persist"规则使数据库文件的权限变为1644,默认权限为0644。生成数据库需要满足规则处理后设备包含数据库条目,因此通过ENV赋值规则添加任意环境变量。
备注¶
无
准备工作¶
创建配置文件:/etc/devmaster/config.toml
创建回环块设备$loop0
创建规则文件:/tmp/1/rules.d/00-test.rules
启动devmaster:
测试步骤¶
触发回环块设备/dev/$loop0的uevent事件
结果验证¶
/dev/$loop0的数据库权限为1644:
# stat /run/devmaster/data/b7\:0
File: /run/devmaster/data/b7:0
Size: 27 Blocks: 8 IO Block: 4096 regular file
Device: 0,25 Inode: 770940 Links: 1
Access: (1644/-rw-r--r-T) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-08-06 15:36:10.433211063 +0800
Modify: 2023-08-06 15:36:04.833576196 +0800
Change: 2023-08-06 15:36:04.833576196 +0800
Birth: -
测试结束¶
删除devmaster残留数据
测试场景约束¶
无
Created: August 23, 2023