diff --git a/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_001.yaml b/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_001.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a9aaca8c5ceb5306388b26a85da8f1ef56d6dafc --- /dev/null +++ b/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_001.yaml @@ -0,0 +1,49 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试 accountsservice-devel基本安装和开发文件 功能 +修改人: xufei + +前置条件: +- 可访问软件仓库 +- 具有root权限 +- 有足够的磁盘空间 +- 系统支持C/C++开发 +- 支持pkg-config工具 +- 安装accountsservice-devel软件包 + +测试步骤: +- ## 检查头文件 +- 检查开发头文件存在 +- 检查头文件位置 +- ## 检查pkg-config +- 检查pkg-config文件 +- 检查pkg-config文件内容 +- ## 检查库文件 +- 检查库文件存在 +- 检查库符号链接 +- ## 检查包信息 +- 检查包详细信息 +- 检查包版本信息 +- 检查包依赖关系 +- ## 检查文件数量 +- 检查包包含的文件数量 +- ## 检查主包 +- 检查accountsservice主包安装 +- ## 清理环境 +- 卸载accountsservice-devel和accountsservice软件包 + +期望结果: +- 成功安装accountsservice-devel软件包 +- 成功找到开发头文件 +- 成功找到pkg-config文件 +- 成功检查pkg-config内容 +- 成功找到库文件 +- 成功检查库符号链接 +- 成功获取包信息 +- 成功验证包文件数量 +- 成功检查主包安装状态 +- 所有命令返回码符合预期 \ No newline at end of file diff --git a/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_002.yaml b/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_002.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f8757fa15307709738d7f5ae0ee4d6ca5326afdb --- /dev/null +++ b/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_002.yaml @@ -0,0 +1,54 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试 accountsservice开发环境和编译 功能 +修改人: xufei + +前置条件: +- 可访问软件仓库 +- 具有root权限 +- 有足够的磁盘空间 +- 安装accountsservice-devel(gcc编译器、pkg-config工具)软件包 +- 系统支持C程序开发 + +测试步骤: +- ## 检查pkg-config +- 检查pkg-config模块列表 +- 检查pkg-config模块存在性 +- 检查pkg-config编译标志 +- 检查pkg-config链接标志 +- ## 创建测试程序 +- 创建测试C程序文件 +- 包含accountsservice头文件 +- 使用账户管理器API +- ## 编译测试程序 +- 使用gcc编译测试程序 +- 使用pkg-config获取编译参数 +- 检查编译结果 +- ## 运行测试程序 +- 运行编译后的程序 +- 验证程序输出 +- ## 检查API文档 +- 检查头文件中的API定义 +- 检查HTML文档 +- 检查gtk-doc文档 +- ## 检查语言绑定 +- 检查Vala绑定文件 +- 检查GIR自省文件 +- ## 清理环境 +- 清理测试文件 +- 卸载相关软件包 + +期望结果: +- 成功找到pkg-config模块 +- 成功获取编译链接标志 +- 成功创建测试程序文件 +- 成功编译测试程序 +- 成功运行测试程序 +- 成功找到API文档 +- 成功检查头文件内容 +- 成功找到语言绑定文件 +- 所有命令返回码符合预期 \ No newline at end of file diff --git a/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_003.yaml b/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_003.yaml new file mode 100644 index 0000000000000000000000000000000000000000..400c7789288f7487c62656d28ff5408126c1719c --- /dev/null +++ b/docs/system_base/accountsservice-devel/tc_accountsservice-devel_fun_003.yaml @@ -0,0 +1,59 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试 accountsservice功能集成和系统服务 功能 +修改人: xufei + +前置条件: +- 可访问软件仓库 +- 具有root权限 +- 有足够的磁盘空间 +- 已安装accountsservice和accountsservice-devel软件包 +- 系统支持D-Bus和systemd +- 建议安装GLib开发库 + +测试步骤: +- ## 检查系统服务 +- 检查accounts-daemon服务状态 +- 尝试启动accounts-daemon服务 +- ## 检查D-Bus接口 +- 检查Accountsservice D-Bus接口 +- 验证D-Bus通信 +- ## 创建高级测试程序 +- 创建复杂C程序 +- 包含用户管理功能 +- 包含信号处理 +- ## 编译和运行 +- 编译高级测试程序 +- 运行高级测试程序 +- 验证用户列表功能 +- ## 检查系统集成 +- 检查系统用户列表 +- 检查账户数据目录 +- 检查用户图标配置 +- ## 检查桌面环境集成 +- 检查GNOME控制中心 +- 检查PolKit规则 +- ## 检查文档示例 +- 检查示例文件 +- ## 检查版本兼容性 +- 检查主包和开发包版本 +- 验证版本一致性 +- ## 清理环境 +- 清理测试文件 +- 卸载相关软件包 + +期望结果: +- 成功检查accounts-daemon服务 +- 成功访问D-Bus接口 +- 成功创建高级测试程序 +- 成功编译高级程序 +- 成功运行高级程序 +- 成功列出系统用户 +- 成功检查账户数据目录 +- 成功检查桌面环境集成 +- 成功检查版本兼容性 +- 所有命令返回码符合预期 \ No newline at end of file diff --git a/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_001.py b/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_001.py new file mode 100644 index 0000000000000000000000000000000000000000..b992645bf431189ea080ae5805d8e104531a8111 --- /dev/null +++ b/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_001.py @@ -0,0 +1,103 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_accountsservice-devel_fun_001.py +@Time: 2026/03/02 15:53:53 +@Author: xufei +@Version: 1.0 +@Contact: xufei@inspur.com +@License: Mulan PSL v2 +@Modify: xufei +""" + +from common.basetest import LocalTest + + +class Test(LocalTest): + """ + See tc_accountsservice-devel_fun_001.yaml for details + + :avocado: tags=P1,noarch,local,accountsservice-devel + """ + PARAM_DIC = {"pkg_name": "accountsservice-devel"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + self.log.info("Start to run test.") + + # 妫鏌ュ紑鍙戝ご鏂囦欢 + code2,result2=self.cmd('find /usr/include -name "*accountsservice*.h" 2>/dev/null | head -5') + if code2 == 0 and result2.strip(): + header_files = result2.strip().split('\n') + self.log.info(f"Found {len(header_files)} header files") + for header in header_files: + if header.strip(): + self.log.info(f"Header file: {header.strip()}") + else: + # 妫鏌ュ閫変綅缃 + code3,result3=self.cmd('rpm -ql accountsservice-devel | grep "\\.h$" | head -5') + if code3 == 0 and result3.strip(): + self.log.info("Header files from package: " + result3) + + # 妫鏌kg-config鏂囦欢 + code4,result4=self.cmd('find /usr/lib* -name "*accountsservice*.pc" 2>/dev/null | head -2') + if code4 == 0 and result4.strip(): + pc_files = result4.strip().split('\n') + for pc_file in pc_files: + if pc_file.strip(): + # 妫鏌kg-config鍐呭 + code5,result5=self.cmd(f'cat "{pc_file.strip()}" 2>/dev/null | head -5') + if code5 == 0 and result5.strip(): + self.log.info(f"pkg-config file {pc_file}: {result5[:50]}") + + # 妫鏌ュ簱鏂囦欢 + code6,result6=self.cmd('find /usr/lib* -name "*accountsservice*.so" 2>/dev/null | head -3') + if code6 == 0 and result6.strip(): + so_files = result6.strip().split('\n') + for so_file in so_files: + if so_file.strip(): + self.log.info(f"Library file: {so_file.strip()}") + + # 妫鏌ュ簱绗﹀彿閾炬帴 + code7,result7=self.cmd('ls -la /usr/lib*/*accountsservice*.so* 2>/dev/null | head -5') + if code7 == 0 and result7.strip(): + self.log.info("Library symlinks: " + result7) + + # 妫鏌ュ寘淇℃伅 + code8,result8=self.cmd('rpm -qi accountsservice-devel | head -5') + if code8 == 0: + self.log.info("Package information: " + result8) + + # 妫鏌ュ寘鐗堟湰 + code9,result9=self.cmd('rpm -q --queryformat="%{VERSION}-%{RELEASE}\\n" accountsservice-devel') + if code9 == 0: + self.log.info(f"accountsservice-devel package version: {result9.strip()}") + + # 妫鏌ュ寘渚濊禆 + code10,result10=self.cmd('rpm -qR accountsservice-devel 2>/dev/null | head -5') + if code10 == 0 and result10.strip(): + self.log.info("Package dependencies: " + result10) + + # 妫鏌ュ寘鏂囦欢鏁伴噺 + code11,result11=self.cmd('rpm -ql accountsservice-devel | wc -l') + if code11 == 0: + file_count = int(result11.strip()) + self.assertGreater(file_count, 0, "accountsservice-devel package contains no files") + self.log.info(f"accountsservice-devel package contains {file_count} files") + + # 妫鏌ヤ笌涓诲寘鐨勫叧绯 + code12,result12=self.cmd('rpm -q accountsservice 2>/dev/null || echo "accountsservice not installed"') + if "accountsservice not installed" not in result12: + self.log.info("accountsservice package is installed") + else: + self.log.warning("accountsservice package not installed, installing for testing") + self.cmd('dnf install -y accountsservice') + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + + diff --git a/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_002.py b/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_002.py new file mode 100644 index 0000000000000000000000000000000000000000..d3bf4471faf3ad21d22a1210c39b3db68620da39 --- /dev/null +++ b/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_002.py @@ -0,0 +1,131 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_accountsservice-devel_fun_002.py +@Time: 2026/03/02 16:23:53 +@Author: xufei +@Version: 1.0 +@Contact: xufei@inspur.com +@License: Mulan PSL v2 +@Modify: xufei +""" + +from common.basetest import LocalTest + + +class Test(LocalTest): + """ + See tc_accountsservice-devel_fun_002.yaml for details + + :avocado: tags=P1,noarch,local,accountsservice-devel + """ + PARAM_DIC = {"pkg_name": "accountsservice-devel"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + self.log.info("Start to run test.") + + # 妫鏌kg-config鏄惁鍙互鎵惧埌accountsservice + code1,result1=self.cmd('pkg-config --list-all | grep -i accountsservice 2>/dev/null') + if code1 == 0 and result1.strip(): + self.log.info("pkg-config found accountsservice: " + result1.strip()) + else: + # 鐩存帴鏌ヨ + code2,result2=self.cmd('pkg-config --exists accountsservice && echo "found" || echo "not found"') + if "found" in result2: + self.log.info("accountsservice pkg-config module found") + + # 妫鏌kg-config鍖呭惈鐨勫簱鍜屽ご鏂囦欢 + code3,result3=self.cmd('pkg-config --cflags accountsservice 2>/dev/null') + if code3 == 0 and result3.strip(): + self.log.info(f"pkg-config cflags: {result3.strip()}") + + code4,result4=self.cmd('pkg-config --libs accountsservice 2>/dev/null') + if code4 == 0 and result4.strip(): + self.log.info(f"pkg-config libs: {result4.strip()}") + + # 鍒涘缓娴嬭瘯C绋嬪簭 + test_c = ''' +#include +#include + +int main() { + printf("Testing accountsservice development environment\\n"); + + // 灏濊瘯浣跨敤璐︽埛绠$悊鍣 + ActUserManager *manager = act_user_manager_get_default(); + if (manager) { + printf("Account manager created successfully\\n"); + g_object_unref(manager); + } else { + printf("Failed to create account manager\\n"); + } + + return 0; +} +''' + code5,result5=self.cmd('echo \'{}\' > /tmp/test_accounts.c'.format(test_c.replace('\n', '\\n'))) + self.assertEqual(code5, 0, "Create test C file failed") + + # 缂栬瘧娴嬭瘯绋嬪簭 + compile_cmd = '''gcc -o /tmp/test_accounts /tmp/test_accounts.c \\ + $(pkg-config --cflags --libs accountsservice) \\ + 2>&1 || echo "Compile failed: $?"''' + + code6,result6=self.cmd(compile_cmd) + if "Compile failed" in result6: + self.log.info("Compilation result: " + result6) + else: + self.log.info("Compilation successful") + + # 妫鏌ョ敓鎴愮殑鍙墽琛屾枃浠 + code7,result7=self.cmd('file /tmp/test_accounts') + if code7 == 0 and "ELF" in result7: + self.log.info("Executable file created: " + result7.strip()) + + # 杩愯娴嬭瘯绋嬪簭 + code8,result8=self.cmd('/tmp/test_accounts 2>&1') + if code8 == 0 and "Testing accountsservice" in result8: + self.log.info("Test program executed successfully: " + result8.strip()) + else: + self.log.info("Test program output: " + result8) + + # 妫鏌ュご鏂囦欢鍐呭 + code9,result9=self.cmd('grep -r "act_user_manager" /usr/include/act/ 2>/dev/null | head -2') + if code9 == 0 and result9.strip(): + self.log.info("Found act_user_manager in headers: " + result9) + + # 妫鏌PI鏂囨。 + code10,result10=self.cmd('find /usr/share -name "*accountsservice*.html" 2>/dev/null | head -2') + if code10 == 0 and result10.strip(): + self.log.info("Found HTML documentation: " + result10) + + # 妫鏌tk-doc鏂囨。 + code11,result11=self.cmd('find /usr/share/gtk-doc -name "*accountsservice*" 2>/dev/null | head -2') + if code11 == 0 and result11.strip(): + self.log.info("Found gtk-doc documentation: " + result11) + + # 妫鏌ala缁戝畾 + code12,result12=self.cmd('find /usr/share -name "*accountsservice*.vapi" 2>/dev/null | head -2') + if code12 == 0 and result12.strip(): + self.log.info("Found Vala bindings: " + result12) + + # 妫鏌IR鏂囦欢 + code13,result13=self.cmd('find /usr/share -name "*Accountsservice*.gir" 2>/dev/null | head -2') + if code13 == 0 and result13.strip(): + self.log.info("Found GIR introspection files: " + result13) + + # 娓呯悊娴嬭瘯鏂囦欢 + self.cmd('rm -f /tmp/test_accounts.c /tmp/test_accounts 2>/dev/null') + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + self.log.info("start environment cleanup.") + self.cmd('rm -f /tmp/test_accounts.c /tmp/test_accounts 2>/dev/null') + self.log.info("Finish environment cleanup!") + + diff --git a/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_003.py b/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_003.py new file mode 100644 index 0000000000000000000000000000000000000000..528b57531a778ce5bf0e40c15eacfb0524624b3e --- /dev/null +++ b/tests/system_base/accountsservice-devel/tc_accountsservice-devel_fun_003.py @@ -0,0 +1,173 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_accountsservice-devel_fun_003.py +@Time: 2026/03/02 16:53:53 +@Author: xufei +@Version: 1.0 +@Contact: xufei@inspur.com +@License: Mulan PSL v2 +@Modify: xufei +""" + +from common.basetest import LocalTest + + +class Test(LocalTest): + """ + See tc_accountsservice-devel_fun_003.yaml for details + + :avocado: tags=P1,noarch,local,accountsservice-devel + """ + PARAM_DIC = {"pkg_name": "accountsservice-devel"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + self.log.info("Start to run test.") + + # 妫鏌ccountsservice鏈嶅姟鐘舵 + code1,result1=self.cmd('systemctl status accounts-daemon 2>&1 | head -5') + if "active" in result1.lower() or "running" in result1.lower(): + self.log.info("accounts-daemon service is active") + else: + # 灏濊瘯鍚姩鏈嶅姟 + code2,result2=self.cmd('systemctl start accounts-daemon 2>&1') + if code2 == 0: + self.log.info("Started accounts-daemon service") + else: + self.log.info("accounts-daemon service status: " + result1[:100]) + + # 妫鏌-Bus鏈嶅姟 + code3,result3=self.cmd('dbus-send --system --dest=org.freedesktop.Accounts --print-reply /org/freedesktop/Accounts org.freedesktop.DBus.Introspectable.Introspect 2>&1 | head -5') + if code3 == 0 or "interface" in result3.lower(): + self.log.info("Accountsservice D-Bus interface accessible") + else: + self.log.info("D-Bus test result: " + result3[:100]) + + # 鍒涘缓鏇村鏉傜殑娴嬭瘯绋嬪簭 + test_complex_c = ''' +#include +#include +#include + +static void user_changed_cb(ActUserManager *manager, ActUser *user, gpointer user_data) { + printf("User changed callback triggered\\n"); +} + +int main() { + printf("Testing advanced accountsservice features\\n"); + + // 鍒濆鍖朑Lib + g_type_init(); + + // 鑾峰彇鐢ㄦ埛绠$悊鍣 + ActUserManager *manager = act_user_manager_get_default(); + if (!manager) { + printf("Failed to get user manager\\n"); + return 1; + } + + printf("User manager obtained\\n"); + + // 鍒楀嚭鐢ㄦ埛 + GList *users = act_user_manager_list_users(manager); + printf("Number of users: %d\\n", g_list_length(users)); + + // 閬嶅巻鐢ㄦ埛 + for (GList *l = users; l != NULL; l = l->next) { + ActUser *user = ACT_USER(l->data); + const gchar *username = act_user_get_user_name(user); + printf(" User: %s\\n", username ? username : "(null)"); + } + + g_list_free(users); + + // 淇″彿澶勭悊 + g_signal_connect(manager, "user-added", G_CALLBACK(user_changed_cb), NULL); + g_signal_connect(manager, "user-deleted", G_CALLBACK(user_changed_cb), NULL); + printf("Signals connected\\n"); + + g_object_unref(manager); + + printf("Test completed successfully\\n"); + return 0; +} +''' + code4,result4=self.cmd('echo \'{}\' > /tmp/test_accounts_adv.c'.format(test_complex_c.replace('\n', '\\n'))) + self.assertEqual(code4, 0, "Create advanced test C file failed") + + # 缂栬瘧楂樼骇娴嬭瘯绋嬪簭 + compile_cmd = '''gcc -o /tmp/test_accounts_adv /tmp/test_accounts_adv.c \\ + $(pkg-config --cflags --libs accountsservice) \\ + -D_GNU_SOURCE 2>&1 || echo "Compile failed: $?"''' + + code5,result5=self.cmd(compile_cmd) + if "Compile failed" in result5: + self.log.info("Advanced compilation result: " + result5) + else: + self.log.info("Advanced compilation successful") + + # 杩愯楂樼骇娴嬭瘯绋嬪簭 + code6,result6=self.cmd('/tmp/test_accounts_adv 2>&1') + if code6 == 0 and "Test completed successfully" in result6: + self.log.info("Advanced test program executed successfully") + if "Number of users:" in result6: + self.log.info("User listing feature works") + else: + self.log.info("Advanced test program output: " + result6[:200]) + + # 妫鏌ョ郴缁熺敤鎴 + code7,result7=self.cmd('getent passwd | head -3') + if code7 == 0 and result7.strip(): + self.log.info("System users: " + result7.strip()) + + # 妫鏌ヨ处鎴锋暟鎹簱 + code8,result8=self.cmd('ls -la /var/lib/AccountsService/ 2>/dev/null || echo "AccountsService data directory not found"') + if "not found" not in result8: + self.log.info("AccountsService data directory: " + result8) + + # 妫鏌ュ浘鏍囬厤缃 + code9,result9=self.cmd('ls -la /var/lib/AccountsService/icons/ 2>/dev/null | head -3 || echo "Icons directory not found"') + if "not found" not in result9: + self.log.info("User icons directory: " + result9) + + # 妫鏌ョ郴缁熼泦鎴 + code10,result10=self.cmd('which gnome-control-center 2>/dev/null || echo "GNOME control center not found"') + if "not found" not in result10: + self.log.info("GNOME control center found, likely uses accountsservice") + + # 妫鏌olKit闆嗘垚 + code11,result11=self.cmd('find /usr/share/polkit-1 -name "*account*" 2>/dev/null | head -2') + if code11 == 0 and result11.strip(): + self.log.info("Found account-related PolKit rules: " + result11) + + # 妫鏌ユ枃妗e拰绀轰緥 + code12,result12=self.cmd('find /usr/share/doc -name "*example*" -type f 2>/dev/null | grep -i account | head -2') + if code12 == 0 and result12.strip(): + self.log.info("Found example files: " + result12) + + # 妫鏌ョ増鏈吋瀹规 + code13,result13=self.cmd('rpm -q accountsservice accountsservice-devel --queryformat="%{NAME}: %{VERSION}-%{RELEASE}\\n"') + if code13 == 0 and result13.strip(): + self.log.info("Package versions: " + result13) + versions = result13.strip().split('\n') + if len(versions) == 2: + main_ver = versions[0].split(': ')[1] if ': ' in versions[0] else "" + devel_ver = versions[1].split(': ')[1] if ': ' in versions[1] else "" + if main_ver and devel_ver and main_ver == devel_ver: + self.log.info("Main and devel packages version match") + + # 娓呯悊娴嬭瘯鏂囦欢 + self.cmd('rm -f /tmp/test_accounts_adv.c /tmp/test_accounts_adv 2>/dev/null') + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + self.log.info("start environment cleanup.") + self.cmd('rm -f /tmp/test_accounts_adv.c /tmp/test_accounts_adv 2>/dev/null') + self.log.info("Finish environment cleanup!") + +