diff --git a/docs/system_base/bsdtar/tc_bsdtar_fun_001.yaml b/docs/system_base/bsdtar/tc_bsdtar_fun_001.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bf48685e5cad8c139e9fc2aac5182be4eac8d968 --- /dev/null +++ b/docs/system_base/bsdtar/tc_bsdtar_fun_001.yaml @@ -0,0 +1,40 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试 bsdtar基本安装和命令 功能 +修改人: xufei + +前置条件: +- 可访问软件仓库 +- 具有root权限 +- bsdtar软件包已安装 +- 有足够的磁盘空间 +- 可访问/tmp目录 + +测试步骤: +- ## 基本功能验证 +- 获取bsdtar版本 +- 执行bsdtar --version命令 +- 检查bsdtar命令位置 +- 执行which bsdtar命令 +- 获取bsdtar帮助信息 +- 执行bsdtar --help命令 +- 验证帮助输出 +- ## 测试文件准备 +- 创建测试文件 +- 在/tmp目录下创建test_file.txt +- 验证文件创建成功 +- 检查文件属性 +- ## 清理环境 +- 清理临时文件 + +期望结果: +- 成功获取bsdtar版本号 +- 成功找到bsdtar命令路径 +- 成功获取bsdtar帮助信息 +- 成功创建测试文件 +- 所有命令返回码为0 +- 基本功能测试通过 \ No newline at end of file diff --git a/docs/system_base/bsdtar/tc_bsdtar_fun_002.yaml b/docs/system_base/bsdtar/tc_bsdtar_fun_002.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7246433a300cbc1e066404e39d09e2857ec50bd2 --- /dev/null +++ b/docs/system_base/bsdtar/tc_bsdtar_fun_002.yaml @@ -0,0 +1,62 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试 bsdtar压缩和解压 功能 +修改人: xufei + +前置条件: +- bsdtar软件包已安装 +- 具有root权限 +- 有足够的磁盘空间 +- 可访问/tmp目录 +- 支持tar和gzip格式 + +测试步骤: +- ## 测试环境准备 +- 创建测试目录结构 +- 创建test_dir目录 +- 创建test1.txt文件 +- 创建test2.txt文件 +- 创建subdir子目录 +- 创建test3.txt文件 +- ## tar压缩测试 +- 创建tar压缩包 +- 使用bsdtar -cf创建tar包 +- 验证tar包创建成功 +- 列出tar包内容 +- 使用bsdtar -tf列出文件 +- 验证文件数量正确 +- ## tar解压测试 +- 解压tar包 +- 创建解压目录 +- 使用bsdtar -xf解压 +- 验证解压成功 +- 检查解压文件内容 +- 验证test1.txt内容 +- 验证子目录文件内容 +- ## gzip压缩测试 +- 创建gzip压缩包 +- 使用bsdtar -czf创建tar.gz +- 验证文件类型 +- 确认是gzip格式 +- ## gzip解压测试 +- 解压gzip包 +- 创建解压目录 +- 使用bsdtar -xzf解压 +- 验证解压成功 +- ## 清理环境 +- 清理所有临时文件和目录 + +期望结果: +- 成功创建测试目录结构 +- 成功创建tar压缩包 +- 成功列出tar包内容 +- 成功解压tar包 +- 解压文件内容正确 +- 成功创建gzip压缩包 +- 成功解压gzip包 +- 所有命令返回码为0 +- 压缩解压功能正常 \ No newline at end of file diff --git a/docs/system_base/bsdtar/tc_bsdtar_fun_003.yaml b/docs/system_base/bsdtar/tc_bsdtar_fun_003.yaml new file mode 100644 index 0000000000000000000000000000000000000000..107ffc385a9c9c7c682619542ef17622f2a11808 --- /dev/null +++ b/docs/system_base/bsdtar/tc_bsdtar_fun_003.yaml @@ -0,0 +1,68 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试 bsdtar高级 功能 +修改人: xufei + +前置条件: +- bsdtar软件包已安装 +- 具有root权限 +- 有足够的磁盘空间 +- 可访问/tmp目录 +- 支持tar和gzip格式 + +测试步骤: +- ## 测试环境准备 +- 创建源目录结构 +- 创建source_dir目录 +- 创建file1.txt文件 +- 创建file2.txt文件 +- 创建empty_dir空目录 +- ## 文件追加功能测试 +- 创建初始tar包 +- 包含file1.txt +- 追加file2.txt到tar包 +- 验证两个文件都在tar中 +- ## 排除模式测试 +- 使用排除模式创建tar +- 排除*2.txt文件 +- 验证排除功能正常 +- file1.txt应该包含 +- file2.txt应该排除 +- ## 详细输出模式测试 +- 使用-v详细模式 +- 验证输出显示文件列表 +- 验证详细输出包含文件名 +- ## 指定目录解压测试 +- 解压到特定目录 +- 使用-C参数指定目录 +- 验证解压到正确位置 +- ## 部分解压测试 +- 仅解压指定文件 +- 只解压file1.txt +- 验证只有指定文件被解压 +- 验证文件内容正确 +- ## 压缩级别测试 +- 使用压缩级别参数 +- 创建压缩tar包 +- 验证压缩包创建成功 +- ## 空目录处理测试 +- 检查空目录处理 +- 验证空目录是否被包含 +- ## 清理环境 +- 清理所有临时文件和目录 + +期望结果: +- 成功创建源目录结构 +- 成功追加文件到tar包 +- 排除模式工作正常 +- 详细输出模式正常工作 +- 成功解压到指定目录 +- 部分解压功能正常 +- 压缩级别设置有效 +- 空目录正确处理 +- 所有命令返回码为0 +- 高级功能测试通过 \ No newline at end of file diff --git a/docs/system_base/bsdtar/tc_bsdtar_fun_004.yaml b/docs/system_base/bsdtar/tc_bsdtar_fun_004.yaml new file mode 100644 index 0000000000000000000000000000000000000000..665b8fea2a4735991446cfe071a9bba5118ad934 --- /dev/null +++ b/docs/system_base/bsdtar/tc_bsdtar_fun_004.yaml @@ -0,0 +1,62 @@ +作者: xufei +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local +用例描述: 测试bsdtar格式支持和特殊功能 +修改人: xufei + +前置条件: +- bsdtar软件包已安装 +- 具有root权限 +- 有足够的磁盘空间 +- 可访问/tmp目录 +- 可能支持多种压缩格式 + +测试步骤: +- ## 测试环境准备 +- 创建测试文件 +- 创建format_test.txt文件 +- 创建format_test_dir目录 +- 创建nested.txt嵌套文件 +- ## 压缩格式测试 +- 测试gzip格式 +- 创建.tar.gz文件 +- 验证gzip格式 +- 测试bzip2格式 +- 创建.tar.bz2文件 +- 验证bzip2格式 +- 测试xz格式 +- 创建.tar.xz文件 +- 验证xz格式 +- 测试普通tar格式 +- 创建.tar文件 +- 验证tar格式 +- ## 自动检测测试 +- 测试格式自动检测 +- 解压gzip包不指定格式 +- 验证自动检测功能 +- ## 大文件处理测试 +- 测试大文件处理 +- 创建1MB大文件 +- 打包大文件 +- 验证打包成功 +- ## 符号链接测试 +- 测试符号链接处理 +- 创建符号链接 +- 打包符号链接 +- 测试链接处理 +- ## 清理环境 +- 清理所有临时文件和目录 + +期望结果: +- 成功创建测试文件 +- 支持多种压缩格式 +- 格式自动检测工作正常 +- 能够列出支持的格式 +- 权限信息正确处理 +- 大文件处理正常 +- 符号链接处理正常 +- 大部分功能测试通过 +- 兼容性功能正常 \ No newline at end of file diff --git a/tests/system_base/bsdtar/tc_bsdtar_fun_001.py b/tests/system_base/bsdtar/tc_bsdtar_fun_001.py new file mode 100644 index 0000000000000000000000000000000000000000..6a5f693048dbe77f58bb0314b90dec2e7c16aef8 --- /dev/null +++ b/tests/system_base/bsdtar/tc_bsdtar_fun_001.py @@ -0,0 +1,61 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_bsdtar_fun_001.py +@Time: 2026/03/27 10: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_bsdtar_fun_001.yaml for details + + :avocado: tags=P1,noarch,local,bsdtar + """ + PARAM_DIC = {"pkg_name": "bsdtar"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + self.log.info("Start to run test.") + code1,result1=self.cmd('bsdtar --version') + self.assertEqual(code1, 0, "Failed to get bsdtar version") + self.log.info(f"bsdtar version: {result1.strip()}") + + code2,result2=self.cmd('which bsdtar') + self.assertEqual(code2, 0, "bsdtar command not found") + self.log.info(f"bsdtar location: {result2.strip()}") + + code3,result3=self.cmd('bsdtar --help 2>&1 | head -5') + self.assertEqual(code3, 0, "Failed to get bsdtar help") + self.log.info(f"bsdtar help: {result3.strip()}") + + test_file = """cat << 'EOF' > /tmp/test_file.txt +This is a test file for bsdtar testing. +Line 2 of the test file. +Line 3 of the test file. +EOF +""" + self.cmd(test_file) + + code4,result4=self.cmd('ls -la /tmp/test_file.txt') + self.assertEqual(code4, 0, "Test file not created") + self.log.info(f"Test file created: {result4.strip()}") + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + self.log.info("Start environment cleanup.") + self.cmd('rm -rf /tmp/test_file.txt') + self.log.info("Finish environment cleanup!") + + diff --git a/tests/system_base/bsdtar/tc_bsdtar_fun_002.py b/tests/system_base/bsdtar/tc_bsdtar_fun_002.py new file mode 100644 index 0000000000000000000000000000000000000000..6b19f4bcf63fc258973b4f218c700372acbf3748 --- /dev/null +++ b/tests/system_base/bsdtar/tc_bsdtar_fun_002.py @@ -0,0 +1,125 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_bsdtar_fun_002.py +@Time: 2026/03/27 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_bsdtar_fun_002.yaml for details + + :avocado: tags=P1,noarch,local,bsdtar + """ + PARAM_DIC = {"pkg_name": "bsdtar"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + self.log.info("Start to prepare the test environment.") + # 鍒涘缓娴嬭瘯鏂囦欢鍜岀洰褰 + test_dir = """cat << 'EOF' > /tmp/test_dir/test1.txt +Test file 1 content +This is the first test file. +EOF +""" + self.cmd('mkdir -p /tmp/test_dir') + self.cmd(test_dir) + + test_file2 = """cat << 'EOF' > /tmp/test_dir/test2.txt +Test file 2 content +This is the second test file with more content. +Line 3 of test file 2. +EOF +""" + self.cmd(test_file2) + + self.cmd('mkdir -p /tmp/test_dir/subdir') + test_file3 = """cat << 'EOF' > /tmp/test_dir/subdir/test3.txt +Test file 3 in subdirectory +This file is in a subdirectory. +EOF +""" + self.cmd(test_file3) + + self.log.info("End to prepare the test environment.") + + def test(self): + self.log.info("Start to run test.") + + # 1. 娴嬭瘯鍒涘缓tar鍘嬬缉鍖 + self.log.info("Testing tar compression") + code1,result1=self.cmd('cd /tmp && bsdtar -cf test_dir.tar test_dir') + self.assertEqual(code1, 0, f"Failed to create tar archive: {result1}") + + code2,result2=self.cmd('ls -la /tmp/test_dir.tar') + self.assertEqual(code2, 0, "Tar archive not created") + self.log.info(f"Tar archive created: {result2.strip()}") + + # 2. 娴嬭瘯鍒楀嚭tar鍖呭唴瀹 + self.log.info("Testing tar list contents") + code3,result3=self.cmd('bsdtar -tf /tmp/test_dir.tar') + self.assertEqual(code3, 0, f"Failed to list tar contents: {result3}") + file_count = len(result3.strip().split('\n')) + self.assertGreaterEqual(file_count, 3, f"Expected at least 3 files, got {file_count}") + self.log.info(f"Tar contains {file_count} files") + + # 3. 娴嬭瘯瑙e帇tar鍖 + self.log.info("Testing tar extraction") + self.cmd('rm -rf /tmp/extract_dir') + code4,result4=self.cmd('mkdir -p /tmp/extract_dir && cd /tmp/extract_dir && bsdtar -xf /tmp/test_dir.tar') + self.assertEqual(code4, 0, f"Failed to extract tar archive: {result4}") + + code5,result5=self.cmd('ls -la /tmp/extract_dir/test_dir/') + self.assertEqual(code5, 0, "Extraction directory not created properly") + self.log.info("Tar extraction successful") + + # 4. 楠岃瘉瑙e帇鐨勬枃浠跺唴瀹 + code6,result6=self.cmd('cat /tmp/extract_dir/test_dir/test1.txt') + self.assertEqual(code6, 0, "Extracted file not found") + self.assertIn("Test file 1 content", result6, "Extracted file content incorrect") + + code7,result7=self.cmd('cat /tmp/extract_dir/test_dir/subdir/test3.txt') + self.assertEqual(code7, 0, "Extracted subdirectory file not found") + self.assertIn("Test file 3 in subdirectory", result7, "Extracted subdirectory file content incorrect") + + # 5. 娴嬭瘯gzip鍘嬬缉 + self.log.info("Testing gzip compression") + code8,result8=self.cmd('cd /tmp && bsdtar -czf test_dir.tar.gz test_dir') + self.assertEqual(code8, 0, f"Failed to create gzipped tar: {result8}") + + code9,result9=self.cmd('file /tmp/test_dir.tar.gz') + self.assertEqual(code9, 0, "Cannot check gzip file type") + self.assertIn("gzip compressed data", result9, "File is not gzip compressed") + self.log.info("Gzip compression test passed") + + # 6. 娴嬭瘯瑙e帇gzip鍖 + self.log.info("Testing gzip extraction") + self.cmd('rm -rf /tmp/extract_gz_dir') + code10,result10=self.cmd('mkdir -p /tmp/extract_gz_dir && cd /tmp/extract_gz_dir && bsdtar -xzf /tmp/test_dir.tar.gz') + self.assertEqual(code10, 0, f"Failed to extract gzipped tar: {result10}") + + code11,result11=self.cmd('ls -la /tmp/extract_gz_dir/test_dir/') + self.assertEqual(code11, 0, "Gzip extraction directory not created properly") + self.log.info("Gzip extraction successful") + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + self.log.info("Start environment cleanup.") + self.cmd('rm -rf /tmp/test_dir') + self.cmd('rm -rf /tmp/extract_dir') + self.cmd('rm -rf /tmp/extract_gz_dir') + self.cmd('rm -rf /tmp/test_dir.tar') + self.cmd('rm -rf /tmp/test_dir.tar.gz') + self.log.info("Finish environment cleanup!") + + diff --git a/tests/system_base/bsdtar/tc_bsdtar_fun_003.py b/tests/system_base/bsdtar/tc_bsdtar_fun_003.py new file mode 100644 index 0000000000000000000000000000000000000000..f594c81fad7ed7ffe850645ffc3032c277546b53 --- /dev/null +++ b/tests/system_base/bsdtar/tc_bsdtar_fun_003.py @@ -0,0 +1,142 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_bsdtar_fun_003.py +@Time: 2026/03/27 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_bsdtar_fun_003.yaml for details + + :avocado: tags=P1,noarch,local,bsdtar + """ + PARAM_DIC = {"pkg_name": "bsdtar"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + self.log.info("Start to prepare the test environment.") + # 鍒涘缓娴嬭瘯鏂囦欢鍜岀洰褰 + test_file = """cat << 'EOF' > /tmp/source_dir/file1.txt +First test file with some content. +This file will be used for various bsdtar tests. +EOF +""" + self.cmd('mkdir -p /tmp/source_dir') + self.cmd(test_file) + + test_file2 = """cat << 'EOF' > /tmp/source_dir/file2.txt +Second test file with different content. +This file has more lines for testing. +Line 3 of the second file. +Line 4 of the second file. +EOF +""" + self.cmd(test_file2) + + self.cmd('mkdir -p /tmp/source_dir/empty_dir') + + self.log.info("End to prepare the test environment.") + + def test(self): + self.log.info("Start to run test.") + + # 1. 娴嬭瘯杩藉姞鏂囦欢鍒皌ar鍖 + self.log.info("Testing appending files to tar archive") + # 鍏堝垱寤哄熀纭tar鍖 + code1,result1=self.cmd('cd /tmp && bsdtar -cf combined.tar source_dir/file1.txt') + self.assertEqual(code1, 0, f"Failed to create initial tar: {result1}") + + # 杩藉姞绗簩涓枃浠 + code2,result2=self.cmd('cd /tmp && bsdtar -rf combined.tar source_dir/file2.txt') + self.assertEqual(code2, 0, f"Failed to append to tar: {result2}") + + code3,result3=self.cmd('bsdtar -tf /tmp/combined.tar') + self.assertEqual(code3, 0, f"Failed to list tar contents: {result3}") + self.assertIn("source_dir/file1.txt", result3, "First file not in tar") + self.assertIn("source_dir/file2.txt", result3, "Second file not in tar") + self.log.info("File appending test passed") + + # 2. 娴嬭瘯鎺掗櫎鏂囦欢鍔熻兘 + self.log.info("Testing exclude pattern") + code4,result4=self.cmd('cd /tmp && bsdtar -cf exclude_test.tar --exclude="*2.txt" source_dir/') + self.assertEqual(code4, 0, f"Failed to create tar with exclude: {result4}") + + code5,result5=self.cmd('bsdtar -tf /tmp/exclude_test.tar') + self.assertEqual(code5, 0, f"Failed to list exclude tar contents: {result5}") + self.assertIn("source_dir/file1.txt", result5, "file1.txt should be included") + self.assertNotIn("source_dir/file2.txt", result5, "file2.txt should be excluded") + self.log.info("Exclude pattern test passed") + + # 3. 娴嬭瘯璇︾粏杈撳嚭妯″紡 + self.log.info("Testing verbose mode") + code6,result6=self.cmd('cd /tmp && bsdtar -cvf verbose.tar source_dir/ 2>&1') + self.assertEqual(code6, 0, f"Failed to create tar in verbose mode: {result6}") + self.assertIn("source_dir/file1.txt", result6, "Verbose output missing file1") + self.assertIn("source_dir/file2.txt", result6, "Verbose output missing file2") + self.log.info("Verbose mode test passed") + + # 4. 娴嬭瘯瑙e帇鍒版寚瀹氱洰褰 + self.log.info("Testing extraction to specific directory") + self.cmd('rm -rf /tmp/specific_extract') + code7,result7=self.cmd('mkdir -p /tmp/specific_extract && bsdtar -xf /tmp/combined.tar -C /tmp/specific_extract') + self.assertEqual(code7, 0, f"Failed to extract to specific directory: {result7}") + + code8,result8=self.cmd('ls -la /tmp/specific_extract/source_dir/') + self.assertEqual(code8, 0, "Specific directory extraction failed") + self.log.info("Extraction to specific directory test passed") + + # 5. 娴嬭瘯浠呰В鍘嬫寚瀹氭枃浠 + self.log.info("Testing extract specific files only") + self.cmd('rm -rf /tmp/partial_extract') + code9,result9=self.cmd('mkdir -p /tmp/partial_extract && cd /tmp/partial_extract && bsdtar -xf /tmp/combined.tar source_dir/file1.txt') + self.assertEqual(code9, 0, f"Failed to extract specific file: {result9}") + + code10,result10=self.cmd('ls -la /tmp/partial_extract/source_dir/') + self.assertEqual(code10, 0, "Partial extraction directory check failed") + + code11,result11=self.cmd('cat /tmp/partial_extract/source_dir/file1.txt') + self.assertEqual(code11, 0, "Partially extracted file not found") + self.assertIn("First test file", result11, "Partially extracted file content incorrect") + self.log.info("Partial extraction test passed") + + # 6. 娴嬭瘯鍘嬬缉绾у埆璁剧疆 + self.log.info("Testing compression level") + code12,result12=self.cmd('cd /tmp && bsdtar -cz -f test_level1.tar.gz source_dir/') + self.assertEqual(code12, 0, f"Failed to create compressed tar: {result12}") + + code13,result13=self.cmd('ls -la /tmp/test_level1.tar.gz') + self.assertEqual(code13, 0, "Compressed tar not created") + self.log.info("Compression level test passed") + + # 7. 娴嬭瘯绌虹洰褰曞鐞 + self.log.info("Testing empty directory handling") + code14,result14=self.cmd('bsdtar -tf /tmp/verbose.tar | grep "empty_dir"') + if code14 == 0: + self.log.info("Empty directory preserved in tar") + else: + self.log.info("Empty directory may not be included (some tar implementations exclude empty dirs)") + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + self.log.info("Start environment cleanup.") + self.cmd('rm -rf /tmp/source_dir') + self.cmd('rm -rf /tmp/specific_extract') + self.cmd('rm -rf /tmp/partial_extract') + self.cmd('rm -rf /tmp/combined.tar') + self.cmd('rm -rf /tmp/exclude_test.tar') + self.cmd('rm -rf /tmp/verbose.tar') + self.cmd('rm -rf /tmp/test_level1.tar.gz') + self.log.info("Finish environment cleanup!") + + diff --git a/tests/system_base/bsdtar/tc_bsdtar_fun_004.py b/tests/system_base/bsdtar/tc_bsdtar_fun_004.py new file mode 100644 index 0000000000000000000000000000000000000000..a2fae78255daf59839a3b62a82b06791e0bc152c --- /dev/null +++ b/tests/system_base/bsdtar/tc_bsdtar_fun_004.py @@ -0,0 +1,146 @@ +# -*- encoding: utf-8 -*- + +""" +@File: tc_bsdtar_fun_004.py +@Time: 2026/03/27 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_bsdtar_fun_004.yaml for details + + :avocado: tags=P1,noarch,local,bsdtar + """ + PARAM_DIC = {"pkg_name": "bsdtar"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + self.log.info("Start to prepare the test environment.") + # 鍒涘缓娴嬭瘯鏂囦欢 + test_file = """cat << 'EOF' > /tmp/format_test.txt +Test file for format testing. +This file will be used to test different archive formats. +Multiple lines for better testing. +EOF +""" + self.cmd(test_file) + + self.cmd('mkdir -p /tmp/format_test_dir') + test_file2 = """cat << 'EOF' > /tmp/format_test_dir/nested.txt +Nested file for format testing. +This is inside a directory. +EOF +""" + self.cmd(test_file2) + + self.log.info("End to prepare the test environment.") + + def test(self): + self.log.info("Start to run test.") + + # 1. 娴嬭瘯涓嶅悓鍘嬬缉鏍煎紡鏀寔 + self.log.info("Testing different compression formats") + + # 娴嬭瘯gzip鏍煎紡 + code1,result1=self.cmd('cd /tmp && bsdtar -czf test_gzip.tar.gz format_test.txt format_test_dir/') + self.assertEqual(code1, 0, f"Failed to create gzip archive: {result1}") + + code2,result2=self.cmd('file /tmp/test_gzip.tar.gz') + self.assertEqual(code2, 0, "Cannot check gzip file type") + self.assertIn("gzip compressed data", result2, "Not a valid gzip file") + self.log.info("Gzip format test passed") + + # 娴嬭瘯bzip2鏍煎紡 + code3,result3=self.cmd('cd /tmp && bsdtar -cjf test_bzip2.tar.bz2 format_test.txt format_test_dir/') + if code3 == 0: + code4,result4=self.cmd('file /tmp/test_bzip2.tar.bz2') + if code4 == 0 and ("bzip2 compressed data" in result4 or "bz2" in result4.lower()): + self.log.info("Bzip2 format test passed") + else: + self.log.info("Bzip2 may not be supported or file check failed") + else: + self.log.info("Bzip2 compression may not be supported (expected on some systems)") + + # 娴嬭瘯xz鏍煎紡 + code5,result5=self.cmd('cd /tmp && bsdtar -cJf test_xz.tar.xz format_test.txt format_test_dir/') + if code5 == 0: + code6,result6=self.cmd('file /tmp/test_xz.tar.xz') + if code6 == 0 and ("xz compressed data" in result6 or "xz" in result6.lower()): + self.log.info("XZ format test passed") + else: + self.log.info("XZ may not be supported or file check failed") + else: + self.log.info("XZ compression may not be supported (expected on some systems)") + + # 娴嬭瘯鏃犲帇缂╃殑tar + code7,result7=self.cmd('cd /tmp && bsdtar -cf test_plain.tar format_test.txt format_test_dir/') + self.assertEqual(code7, 0, f"Failed to create plain tar: {result7}") + + code8,result8=self.cmd('file /tmp/test_plain.tar') + self.assertEqual(code8, 0, "Cannot check tar file type") + self.assertIn("POSIX tar archive", result8) or self.assertIn("tar archive", result8.lower()) + self.log.info("Plain tar format test passed") + + # 2. 娴嬭瘯鏍煎紡鑷姩妫娴 + self.log.info("Testing format auto-detection") + + # 瑙e帇gzip鍖咃紙搴旇鑳借嚜鍔ㄦ娴嬫牸寮忥級 + self.cmd('rm -rf /tmp/extract_gzip') + code9,result9=self.cmd('mkdir -p /tmp/extract_gzip && cd /tmp/extract_gzip && bsdtar -xf /tmp/test_gzip.tar.gz') + self.assertEqual(code9, 0, f"Failed to extract gzip with auto-detection: {result9}") + + code10,result10=self.cmd('ls -la /tmp/extract_gzip/') + self.assertEqual(code10, 0, "Gzip auto-extraction failed") + self.log.info("Gzip auto-detection test passed") + + # 3. 娴嬭瘯澶ф枃浠跺鐞 + self.log.info("Testing large file handling") + # 鍒涘缓1MB娴嬭瘯鏂囦欢 + code11,result11=self.cmd('dd if=/dev/zero of=/tmp/large_file.bin bs=1M count=1 2>/dev/null') + if code11 == 0: + code12,result12=self.cmd('cd /tmp && bsdtar -cf test_large.tar large_file.bin') + if code12 == 0: + code13,result13=self.cmd('ls -lh /tmp/test_large.tar') + self.log.info(f"Large file tar created: {result13.strip()}") + else: + self.log.info("Large file tar creation failed") + else: + self.log.info("Skipping large file test (dd command failed)") + + # 4. 娴嬭瘯绗﹀彿閾炬帴澶勭悊 + self.log.info("Testing symbolic link handling") + self.cmd('ln -sf /tmp/format_test.txt /tmp/test_link.txt 2>/dev/null') + code14,result14=self.cmd('cd /tmp && bsdtar -chf test_symlink.tar test_link.txt 2>&1') + if code14 == 0: + self.log.info("Symbolic link tar creation attempted") + else: + self.log.info("Symbolic link handling may have limitations") + + self.log.info("End to run test.") + + def tearDown(self): + super().tearDown(self.PARAM_DIC) + self.log.info("Start environment cleanup.") + self.cmd('rm -rf /tmp/format_test.txt') + self.cmd('rm -rf /tmp/format_test_dir') + self.cmd('rm -rf /tmp/extract_gzip') + self.cmd('rm -rf /tmp/test_gzip.tar.gz') + self.cmd('rm -rf /tmp/test_bzip2.tar.bz2') + self.cmd('rm -rf /tmp/test_xz.tar.xz') + self.cmd('rm -rf /tmp/test_plain.tar') + self.cmd('rm -rf /tmp/test_perm.tar') + self.cmd('rm -rf /tmp/large_file.bin') + self.cmd('rm -rf /tmp/test_large.tar') + self.cmd('rm -rf /tmp/test_link.txt') + self.cmd('rm -rf /tmp/test_symlink.tar') + self.log.info("Finish environment cleanup!") + +