diff --git a/docs/system_base/adcli-doc/tc_adcli-doc_fun_001.yaml b/docs/system_base/adcli-doc/tc_adcli-doc_fun_001.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f5d1a80523d34f5d148a7d214576556befbae2c6 --- /dev/null +++ b/docs/system_base/adcli-doc/tc_adcli-doc_fun_001.yaml @@ -0,0 +1,48 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试adcli-doc基本安装和文档结构功能 +修改人: xufei + +前置条件: +- 可访问软件仓库 +- 具有root权限 +- 有足够的磁盘空间 +- 系统支持HTML文档查看 +- 安装adcli-doc软件包 + +测试步骤: +- ## 检查文档文件 +- 检查HTML格式文档文件 +- 检查其他格式文档文件 +- ## 检查主页面 +- 查找文档主索引页面 +- 验证索引文件存在性 +- 检查HTML文件内容 +- ## 检查README文件 +- 查找README文件 +- 检查README文件内容 +- ## 检查目录结构 +- 检查文档目录结构 +- 检查备选文档位置 +- ## 检查包信息 +- 检查包详细信息 +- 检查包版本信息 +- 检查包依赖关系 +- ## 检查文件数量 +- 检查包包含的文件数量 +- ## 清理环境 +- 卸载adcli-doc软件包 + +期望结果: +- 成功安装adcli-doc软件包 +- 成功找到文档文件 +- 成功找到文档主页面 +- 成功检查README文件 +- 成功检查目录结构 +- 成功获取包信息 +- 成功验证包文件数量 +- 所有命令返回码符合预期 \ No newline at end of file diff --git a/docs/system_base/adcli-doc/tc_adcli-doc_fun_002.yaml b/docs/system_base/adcli-doc/tc_adcli-doc_fun_002.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cefd2bcb472a00ff929ba522d0ad65aa77b8d9bd --- /dev/null +++ b/docs/system_base/adcli-doc/tc_adcli-doc_fun_002.yaml @@ -0,0 +1,56 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试adcli-doc文档内容和格式 +修改人: xufei + +前置条件: +- 可访问软件仓库 +- 具有root权限 +- 有足够的磁盘空间 +- 已安装adcli-doc软件包 +- 系统支持grep和find命令 + +测试步骤: +- ## 检查文档文件 +- 查找所有文档文件 +- 检查文件类型 +- 检查HTML文件标题 +- 检查文本文件内容 +- ## 检查关键词 +- 检查adcli相关关键词 +- 检查命令示例 +- 检查配置示例 +- 检查Active Directory术语 +- ## 检查版本信息 +- 检查版本相关信息 +- ## 检查许可证 +- 检查许可证信息 +- ## 检查安装说明 +- 检查安装相关说明 +- ## 检查配置说明 +- 检查配置相关说明 +- ## 检查文档属性 +- 检查文档目录大小 +- 检查文档权限 +- ## 清理环境 +- 卸载adcli-doc软件包 + +期望结果: +- 成功找到所有文档文件 +- 成功识别文件类型 +- 成功检查HTML文件标题 +- 成功检查文本文件内容 +- 成功找到adcli相关关键词 +- 成功找到命令示例 +- 成功找到配置示例 +- 成功找到版本信息 +- 成功找到许可证信息 +- 成功找到安装说明 +- 成功找到配置说明 +- 成功检查文档大小 +- 成功检查文档权限 +- 所有命令返回码符合预期 \ No newline at end of file diff --git a/docs/system_base/adcli-doc/tc_adcli-doc_fun_003.yaml b/docs/system_base/adcli-doc/tc_adcli-doc_fun_003.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4c8fe6c5659cef1cd8158e8f891fb666deab70f9 --- /dev/null +++ b/docs/system_base/adcli-doc/tc_adcli-doc_fun_003.yaml @@ -0,0 +1,58 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试adcli工具集成和文档关联功能 +修改人: xufei + +前置条件: +- 可访问软件仓库 +- 具有root权限 +- 有足够的磁盘空间 +- 安装adcli和adcli-doc软件包 +- 系统支持Active Directory相关功能 + +测试步骤: +- ## 检查adcli工具 +- 检查adcli工具是否存在 +- 检查adcli工具版本 +- 检查adcli帮助信息 +- ## 检查工具与文档一致性 +- 检查adcli join命令文档 +- 验证adcli join命令 +- 检查adcli leave命令文档 +- 验证adcli leave命令 +- 检查adcli testjoin命令文档 +- 验证adcli testjoin命令 +- ## 检查手册页 +- 检查adcli手册页 +- 检查手册页内容 +- 检查文档与手册页一致性 +- ## 检查配置文档 +- 检查配置相关文档 +- 检查示例配置 +- 检查故障排除文档 +- ## 检查文档链接 +- 检查文档中的web链接 +- ## 检查版本匹配 +- 检查adcli和adcli-doc版本 +- 验证版本一致性 +- ## 清理环境 +- 卸载adcli和adcli-doc软件包 + +期望结果: +- 成功找到adcli工具 +- 成功获取adcli版本 +- 成功检查adcli帮助 +- 成功验证工具与文档一致性 +- 成功检查adcli命令文档 +- 成功验证adcli命令功能 +- 成功检查手册页 +- 成功检查配置文档 +- 成功检查示例配置 +- 成功检查故障排除文档 +- 成功检查文档链接 +- 成功检查版本匹配 +- 所有命令返回码符合预期 \ No newline at end of file diff --git a/tests/system_base/adcli-doc/tc_adcli-doc_fun_001.py b/tests/system_base/adcli-doc/tc_adcli-doc_fun_001.py new file mode 100644 index 0000000000000000000000000000000000000000..19a6889118d8f7eb7acec8808237a0537ecb40d6 --- /dev/null +++ b/tests/system_base/adcli-doc/tc_adcli-doc_fun_001.py @@ -0,0 +1,106 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_adcli-doc_fun_001.py +@Time: 2026/03/02 13: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_adcli-doc_fun_001.yaml for details + + :avocado: tags=P1,noarch,local,adcli-doc + """ + PARAM_DIC = {"pkg_name": "adcli-doc"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + self.log.info("Start to run test.") + + # 妫鏌dcli-doc鏂囨。鏂囦欢 + code1,result1=self.cmd('rpm -ql adcli-doc | grep -i "\\.html$" | head -3') + if code1 == 0 and result1.strip(): + self.log.info("HTML documentation files found: " + result1) + else: + # 妫鏌ュ叾浠栨牸寮忕殑鏂囨。 + code2,result2=self.cmd('rpm -ql adcli-doc | head -5') + if code2 == 0 and result2.strip(): + self.log.info("Documentation files: " + result2) + + # 妫鏌ユ枃妗d富椤甸潰 + code3,result3=self.cmd('find /usr/share/doc/adcli-doc -name "index.html" 2>/dev/null | head -1') + if code3 == 0 and result3.strip(): + index_file = result3.strip() + self.log.info(f"Main documentation index: {index_file}") + + # 妫鏌ndex.html鏄惁瀛樺湪 + code4,result4=self.cmd(f'test -f "{index_file}" && echo "exists" || echo "not found"') + if "exists" in result4: + self.log.info("Documentation index file exists") + + # 妫鏌TML鏂囦欢鍐呭 + code5,result5=self.cmd(f'grep -i "adcli" "{index_file}" 2>/dev/null | head -3') + if code5 == 0 and result5.strip(): + self.log.info("HTML content contains adcli reference") + + # 妫鏌EADME鏂囦欢 + code6,result6=self.cmd('find /usr/share/doc/adcli-doc -name "*README*" 2>/dev/null | head -2') + if code6 == 0 and result6.strip(): + readme_files = result6.strip() + self.log.info(f"README files: {readme_files}") + + # 妫鏌EADME鍐呭 + for readme in readme_files.split('\n'): + if readme.strip(): + code7,result7=self.cmd(f'head -5 "{readme.strip()}" 2>/dev/null') + if code7 == 0 and result7.strip(): + self.log.info(f"README preview: {result7[:50]}") + + # 妫鏌ユ枃妗g洰褰曠粨鏋 + code8,result8=self.cmd('ls -la /usr/share/doc/adcli-doc/ 2>/dev/null || echo "doc directory not found"') + if "doc directory not found" not in result8: + self.log.info("Documentation directory structure: " + result8[:100]) + else: + # 妫鏌ュ閫夋枃妗d綅缃 + code9,result9=self.cmd('find /usr/share -name "*adcli*" -type d 2>/dev/null | head -3') + if code9 == 0 and result9.strip(): + self.log.info("Alternative adcli directories: " + result9) + + # 妫鏌ュ寘淇℃伅 + code10,result10=self.cmd('rpm -qi adcli-doc | head -5') + if code10 == 0: + self.log.info("Package information: " + result10) + + # 妫鏌ュ寘鐗堟湰 + code11,result11=self.cmd('rpm -q --queryformat="%{VERSION}-%{RELEASE}\\n" adcli-doc') + if code11 == 0: + self.log.info(f"adcli-doc package version: {result11.strip()}") + + # 妫鏌ュ寘渚濊禆 + code12,result12=self.cmd('rpm -qR adcli-doc 2>/dev/null | head -3 || echo "no dependencies"') + if "no dependencies" not in result12: + self.log.info("Package dependencies: " + result12) + + # 妫鏌ユ枃浠舵暟閲 + code13,result13=self.cmd('rpm -ql adcli-doc | wc -l') + if code13 == 0: + file_count = int(result13.strip()) + self.assertGreater(file_count, 0, "adcli-doc package contains no files") + self.log.info(f"adcli-doc package contains {file_count} files") + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + + diff --git a/tests/system_base/adcli-doc/tc_adcli-doc_fun_002.py b/tests/system_base/adcli-doc/tc_adcli-doc_fun_002.py new file mode 100644 index 0000000000000000000000000000000000000000..5988123d483c615b84e1f220041a2d1cb424f627 --- /dev/null +++ b/tests/system_base/adcli-doc/tc_adcli-doc_fun_002.py @@ -0,0 +1,113 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_adcli-doc_fun_002.py +@Time: 2026/03/02 14: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_adcli-doc_fun_002.yaml for details + + :avocado: tags=P1,noarch,local,adcli-doc + """ + PARAM_DIC = {"pkg_name": "adcli-doc"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + self.log.info("Start to run test.") + + # 鏌ユ壘鎵鏈夋枃妗f枃浠 + code1,result1=self.cmd('find /usr/share/doc/adcli-doc -type f 2>/dev/null | head -10') + if code1 == 0 and result1.strip(): + doc_files = result1.strip().split('\n') + self.log.info(f"Found {len(doc_files)} documentation files") + + for doc_file in doc_files: + if doc_file.strip(): + # 妫鏌ユ枃浠剁被鍨 + code2,result2=self.cmd(f'file "{doc_file.strip()}" 2>/dev/null | head -1') + if code2 == 0: + file_type = result2.strip() + self.log.info(f"File: {doc_file} - Type: {file_type}") + + # 妫鏌TML鏂囦欢 + if "HTML" in file_type or doc_file.endswith('.html'): + # 妫鏌TML鏍囬 + code3,result3=self.cmd(f'grep -i "" "{doc_file}" 2>/dev/null | head -1') + if code3 == 0 and result3.strip(): + self.log.info(f"HTML title: {result3.strip()}") + + # 妫鏌ユ枃鏈枃浠 + if "text" in file_type.lower() and not doc_file.endswith('.html'): + # 妫鏌ユ枃浠跺墠鍑犺 + code4,result4=self.cmd(f'head -3 "{doc_file}" 2>/dev/null') + if code4 == 0 and result4.strip(): + self.log.info(f"Text preview: {result4.strip()}") + + # 妫鏌ユ枃妗d腑鐨勫叧閿瘝 + code5,result5=self.cmd('grep -r -i "adcli" /usr/share/doc/adcli-doc/ 2>/dev/null | head -5') + if code5 == 0 and result5.strip(): + self.log.info("Found adcli references in documentation: " + result5) + + # 妫鏌ユ枃妗d腑鐨勫懡浠ょず渚 + code6,result6=self.cmd('grep -r -i "adcli join" /usr/share/doc/adcli-doc/ 2>/dev/null | head -3') + if code6 == 0 and result6.strip(): + self.log.info("Found adcli join examples: " + result6) + + # 妫鏌ラ厤缃枃浠剁ず渚 + code7,result7=self.cmd('grep -r -i "krb5.conf" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code7 == 0 and result7.strip(): + self.log.info("Found kerberos configuration references: " + result7) + + # 妫鏌ctive Directory鐩稿叧鏈 + code8,result8=self.cmd('grep -r -i "active directory" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code8 == 0 and result8.strip(): + self.log.info("Found Active Directory references: " + result8) + + # 妫鏌ョ増鏈俊鎭 + code9,result9=self.cmd('grep -r -i "version" /usr/share/doc/adcli-doc/ 2>/dev/null | grep -i "adcli" | head -2') + if code9 == 0 and result9.strip(): + self.log.info("Found version information: " + result9) + + # 妫鏌ヨ鍙瘉淇℃伅 + code10,result10=self.cmd('grep -r -i "license\|licence\|copyright" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code10 == 0 and result10.strip(): + self.log.info("Found license information: " + result10) + + # 妫鏌ュ畨瑁呰鏄 + code11,result11=self.cmd('grep -r -i "install\|install.*ation" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code11 == 0 and result11.strip(): + self.log.info("Found installation instructions: " + result11) + + # 妫鏌ラ厤缃鏄 + code12,result12=self.cmd('grep -r -i "config\|configuration\|configure" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code12 == 0 and result12.strip(): + self.log.info("Found configuration instructions: " + result12) + + # 妫鏌ユ枃妗eぇ灏 + code13,result13=self.cmd('du -sh /usr/share/doc/adcli-doc/ 2>/dev/null || echo "size check failed"') + if "size check failed" not in result13: + self.log.info("Documentation directory size: " + result13.strip()) + + # 妫鏌ユ枃妗f潈闄 + code14,result14=self.cmd('ls -ld /usr/share/doc/adcli-doc/ 2>/dev/null || echo "permission check failed"') + if "permission check failed" not in result14: + self.log.info("Documentation directory permissions: " + result14.strip()) + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + + diff --git a/tests/system_base/adcli-doc/tc_adcli-doc_fun_003.py b/tests/system_base/adcli-doc/tc_adcli-doc_fun_003.py new file mode 100644 index 0000000000000000000000000000000000000000..5f4baac5c730e78bdbda253dbf87590cb19d7b9f --- /dev/null +++ b/tests/system_base/adcli-doc/tc_adcli-doc_fun_003.py @@ -0,0 +1,132 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_adcli-doc_fun_003.py +@Time: 2026/03/02 14: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_adcli-doc_fun_003.yaml for details + + :avocado: tags=P1,noarch,local,adcli-doc + """ + PARAM_DIC = {"pkg_name": "adcli-doc"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + self.log.info("Start to run test.") + + # 妫鏌dcli宸ュ叿鏄惁瀛樺湪 + code1,result1=self.cmd('which adcli 2>/dev/null || echo "adcli not found"') + if "adcli not found" in result1: + self.log.warning("adcli command not found, installing...") + self.cmd('dnf install -y adcli') + else: + self.log.info(f"adcli executable found: {result1.strip()}") + + # 妫鏌dcli鐗堟湰 + code2,result2=self.cmd('adcli --version 2>&1 | head -2') + if code2 == 0 or "version" in result2.lower(): + self.log.info("adcli version: " + result2.strip()) + + # 妫鏌dcli甯姪 + code3,result3=self.cmd('adcli --help 2>&1 | head -5') + if code3 == 0 or "usage" in result3.lower(): + self.log.info("adcli help output verified") + + # 妫鏌dcli鏂囨。涓庡伐鍏风殑涓鑷存 + code4,result4=self.cmd('grep -r -i "adcli join" /usr/share/doc/adcli-doc/ 2>/dev/null | head -1') + if code4 == 0 and result4.strip(): + self.log.info("Found adcli join documentation") + + # 妫鏌dcli宸ュ叿鏄惁鏀寔join鍛戒护 + code5,result5=self.cmd('adcli join --help 2>&1 | head -3') + if "usage" in result5.lower() or "help" in result5.lower(): + self.log.info("adcli join command is available") + + # 妫鏌dcli leave鍛戒护 + code6,result6=self.cmd('grep -r -i "adcli leave" /usr/share/doc/adcli-doc/ 2>/dev/null | head -1') + if code6 == 0 and result6.strip(): + self.log.info("Found adcli leave documentation") + + code7,result7=self.cmd('adcli leave --help 2>&1 | head -3') + if "usage" in result7.lower() or "help" in result7.lower(): + self.log.info("adcli leave command is available") + + # 妫鏌dcli testjoin鍛戒护 + code8,result8=self.cmd('grep -r -i "adcli testjoin" /usr/share/doc/adcli-doc/ 2>/dev/null | head -1') + if code8 == 0 and result8.strip(): + self.log.info("Found adcli testjoin documentation") + + code9,result9=self.cmd('adcli testjoin --help 2>&1 | head -3') + if "usage" in result9.lower() or "help" in result9.lower(): + self.log.info("adcli testjoin command is available") + + # 妫鏌ユ墜鍐岄〉鍏宠仈 + code10,result10=self.cmd('man -w adcli 2>/dev/null || echo "no man page"') + if "no man page" not in result10: + self.log.info(f"adcli man page found: {result10.strip()}") + + # 妫鏌an椤甸潰鍐呭 + code11,result11=self.cmd('man adcli 2>/dev/null | head -5') + if code11 == 0 and result11.strip(): + self.log.info("Man page content verified") + + # 妫鏌dcli鏂囨。涓庢墜鍐岄〉鐨勪竴鑷存 + code12,result12=self.cmd('grep -r -i "synopsis" /usr/share/doc/adcli-doc/ 2>/dev/null | head -1') + if code12 == 0 and result12.strip(): + self.log.info("Found synopsis in documentation") + + # 妫鏌dcli閰嶇疆鏂囨。 + code13,result13=self.cmd('find /usr/share/doc/adcli-doc -name "*conf*" 2>/dev/null | head -2') + if code13 == 0 and result13.strip(): + self.log.info("Found configuration documentation: " + result13) + + # 妫鏌ョず渚嬮厤缃 + code14,result14=self.cmd('grep -r -i "example" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code14 == 0 and result14.strip(): + self.log.info("Found example configurations: " + result14) + + # 妫鏌ユ晠闅滄帓闄ゆ枃妗 + code15,result15=self.cmd('grep -r -i "troubleshoot\|faq\|issue" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code15 == 0 and result15.strip(): + self.log.info("Found troubleshooting documentation: " + result15) + + # 妫鏌ユ枃妗i摼鎺 + code16,result16=self.cmd('grep -r -i "http\|https" /usr/share/doc/adcli-doc/ 2>/dev/null | head -2') + if code16 == 0 and result16.strip(): + self.log.info("Found web links in documentation: " + result16) + + # 妫鏌dcli鍜屾枃妗g増鏈尮閰 + code17,result17=self.cmd('rpm -q adcli adcli-doc --queryformat="%{NAME}: %{VERSION}-%{RELEASE}\\n"') + if code17 == 0 and result17.strip(): + self.log.info("Package versions: " + result17) + + # 妫鏌ョ増鏈槸鍚﹀尮閰 + versions = result17.strip().split('\n') + if len(versions) >= 2: + adcli_version = versions[0].split(': ')[1] if ': ' in versions[0] else "" + doc_version = versions[1].split(': ')[1] if len(versions) > 1 and ': ' in versions[1] else "" + + if adcli_version and doc_version and adcli_version == doc_version: + self.log.info("adcli and adcli-doc versions match") + else: + self.log.info("adcli and adcli-doc versions may differ") + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + +