1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0-or-later 3# Copyright (c) International Business Machines Corp., 2000 4# Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz> 5# Author: Robbie Williamson <robbiew@us.ibm.com> 6# 7# This is a basic $AR command test. 8 9AR="${AR:=ar}" 10TST_CNT=17 11TST_SETUP=setup 12TST_TESTFUNC=test 13TST_NEEDS_TMPDIR=1 14TST_NEEDS_CMDS="$AR" 15 16setup() 17{ 18 MOD= 19 $AR --help | grep "use zero for timestamps and uids/gids (default)" >/dev/null 20 [ $? -eq 0 ] && MOD="U" 21} 22 23test1() 24{ 25 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in 26 ROD $AR -ra"$MOD" file1.in lib.a $TST_DATAROOT/file2.in 27 ROD $AR -t lib.a \> ar.out 28 29 printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp 30 31 if diff ar.out ar.exp >/dev/null; then 32 tst_res TPASS "$AR added new file after another (-a)" 33 else 34 tst_res TFAIL "$AR failed to add new file after another (-a)" 35 cat ar.out 36 fi 37 38 ROD rm lib.a 39} 40 41test2() 42{ 43 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \ 44 $TST_DATAROOT/file3.in $TST_DATAROOT/file4.in 45 ROD $AR -ma"$MOD" file1.in lib.a file4.in 46 ROD $AR -t lib.a \> ar.out 47 48 printf "file1.in\nfile4.in\nfile2.in\nfile3.in\n" > ar.exp 49 50 if diff ar.out ar.exp > /dev/null; then 51 tst_res TPASS "$AR moved file correctly (-ma)" 52 else 53 tst_res TFAIL "$AR failed to move file (-ma)" 54 cat ar.out 55 fi 56 57 ROD rm lib.a 58} 59 60test3() 61{ 62 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in 63 ROD $AR -rb"$MOD" file3.in lib.a $TST_DATAROOT/file2.in 64 ROD $AR -t lib.a \> ar.out 65 66 printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp 67 68 if diff ar.out ar.exp; then 69 tst_res TPASS "$AR added new file before another (-b)" 70 else 71 tst_res TFAIL "$AR failed to add new file before another (-b)" 72 cat ar.out 73 fi 74 75 ROD rm lib.a 76} 77 78test4() 79{ 80 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in \ 81 $TST_DATAROOT/file2.in 82 ROD $AR -mb"$MOD" file3.in lib.a file2.in 83 ROD $AR -t lib.a \> ar.out 84 85 printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp 86 87 if diff ar.out ar.exp > /dev/null; then 88 tst_res TPASS "$AR moved file correctly (-mb)" 89 else 90 tst_res TFAIL "$AR failed to move file (-mb)" 91 cat ar.out 92 fi 93 94 ROD rm lib.a 95} 96 97test5() 98{ 99 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in \> ar.out 100 101 if [ -s ar.out ]; then 102 tst_res TFAIL "$AR produced output unexpectedly (-c)" 103 cat ar.out 104 else 105 tst_res TPASS "$AR haven't produced output (-c)" 106 fi 107 108 ROD rm lib.a 109} 110 111test6() 112{ 113 ROD $AR -qc"$MOD" lib.a $TST_DATAROOT/file1.in \> ar.out 114 115 if [ -s ar.out ]; then 116 tst_res TFAIL "$AR produced output unexpectedly (-qc)" 117 cat ar.out 118 else 119 tst_res TPASS "$AR haven't produced output (-qc)" 120 fi 121 122 ROD rm lib.a 123} 124 125test7() 126{ 127 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \ 128 $TST_DATAROOT/file3.in 129 ROD $AR -d"$MOD" lib.a file1.in file2.in 130 ROD $AR -t lib.a \> ar.out 131 132 printf "file3.in\n" > ar.exp 133 134 if diff ar.out ar.exp > /dev/null; then 135 tst_res TPASS "$AR deleted files correctly (-d)" 136 else 137 tst_res TFAIL "$AR messed up when deleting files (-d)" 138 cat ar.out 139 fi 140 141 ROD rm lib.a 142} 143 144test8() 145{ 146 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \ 147 $TST_DATAROOT/file3.in 148 ROD $AR -d"$MOD" lib.a 149 ROD $AR -t lib.a \> ar.out 150 151 printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp 152 153 if diff ar.out ar.exp > /dev/null; then 154 tst_res TPASS "$AR deleted nothing (-d with empty list)" 155 else 156 tst_res TFAIL "$AR deleted files (-d with empty list)" 157 cat ar.out 158 fi 159 160 ROD rm lib.a 161} 162 163test9() 164{ 165 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in 166 ROD $AR -ri"$MOD" file3.in lib.a $TST_DATAROOT/file2.in 167 ROD $AR -t lib.a \> ar.out 168 169 printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp 170 171 if diff ar.out ar.exp >/dev/null; then 172 tst_res TPASS "$AR added new file before another (-i)" 173 else 174 tst_res TFAIL "$AR failed to add new file before another (-i" 175 cat ar.out 176 fi 177 178 ROD rm lib.a 179} 180 181test10() 182{ 183 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in \ 184 $TST_DATAROOT/file2.in 185 ROD $AR -mi"$MOD" file3.in lib.a file2.in 186 ROD $AR -t lib.a \> ar.out 187 188 printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp 189 190 if diff ar.out ar.exp > /dev/null; then 191 tst_res TPASS "$AR moved file correctly (-mi)" 192 else 193 tst_res TFAIL "$AR failed to move file (-mi)" 194 cat ar.out 195 fi 196 197 ROD rm lib.a 198} 199 200test11() 201{ 202 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in \ 203 $TST_DATAROOT/file2.in 204 ROD $AR -m"$MOD" lib.a file3.in 205 ROD $AR -t lib.a \> ar.out 206 207 printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp 208 209 if diff ar.out ar.exp > /dev/null; then 210 tst_res TPASS "$AR moved file correctly (-m)" 211 else 212 tst_res TFAIL "$AR failed to move file (-m)" 213 cat ar.out 214 fi 215 216 ROD rm lib.a 217} 218 219test12() 220{ 221 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \ 222 $TST_DATAROOT/file3.in 223 ROD $AR -p"$MOD" lib.a \> ar.out 224 225 printf "This is file one\nThis is file two\nThis is file three\n" > ar.exp 226 227 if diff ar.out ar.exp > /dev/null; then 228 tst_res TPASS "$AR printed file content correctly (-p)" 229 else 230 tst_res TFAIL "$AR failed to print file content (-p)" 231 cat ar.out 232 fi 233 234 ROD rm lib.a 235} 236 237test13() 238{ 239 240 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \ 241 $TST_DATAROOT/file3.in 242 ROD $AR -q"$MOD" lib.a $TST_DATAROOT/file4.in 243 ROD $AR -t lib.a \> ar.out 244 245 printf "file1.in\nfile2.in\nfile3.in\nfile4.in\n" > ar.exp 246 247 if diff ar.out ar.exp > /dev/null; then 248 tst_res TPASS "$AR appended file correctly (-q)" 249 else 250 tst_res TFAIL "$AR failed to append file (-q)" 251 cat ar.out 252 fi 253 254 ROD rm lib.a 255} 256 257test14() 258{ 259 ROD touch file0.in 260 ROD $AR -cr"$MOD" lib.a file0.in $TST_DATAROOT/file1.in 261 262 file0_mtime1=$($AR -tv lib.a | grep file0.in) 263 file1_mtime1=$($AR -tv lib.a | grep file1.in) 264 265 touch -c -t $(date --date='next day' +"%Y%m%d%H%M") file0.in 266 267 ROD $AR -ru"$MOD" lib.a file0.in $TST_DATAROOT/file1.in 268 269 file0_mtime2=$($AR -tv lib.a | grep file0.in) 270 file1_mtime2=$($AR -tv lib.a | grep file1.in) 271 272 if [ "$file0_mtime1" = "$file0_mtime2" ]; then 273 tst_res TFAIL "$AR haven't updated modified file0 (-u)" 274 else 275 tst_res TPASS "$AR updated modified file0 (-u)" 276 fi 277 278 if [ "$file1_mtime1" = "$file1_mtime2" ]; then 279 tst_res TPASS "$AR haven't updated unmodified file1 (-u)" 280 else 281 tst_res TFAIL "$AR updated unmodified file1 (-u)" 282 fi 283 284 ROD rm lib.a file0.in 285} 286 287test15() 288{ 289 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in 290 ROD $AR -tv lib.a \> ar.out 291 292 if grep -q '[rwx-]\{9\} [0-9].*/[0-9].*\s*[0-9].*.*file1.in' ar.out; then 293 tst_res TPASS "$AR verbose listing works (-tv)" 294 else 295 tst_res TFAIL "$AR verbose listing failed (-tv)" 296 cat ar.out 297 fi 298 299 ROD rm lib.a 300} 301 302test16() 303{ 304 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \ 305 $TST_DATAROOT/file3.in 306 ROD $AR -xv"$MOD" lib.a \> ar.out 307 308 printf "x - file1.in\nx - file2.in\nx - file3.in\n" > ar.exp 309 310 if diff ar.out ar.exp > /dev/null; then 311 tst_res TPASS "$AR printed extracted filenames (-xv)" 312 else 313 tst_res TFAIL "$AR failed to print extracted filenames (-xv)" 314 cat ar.out 315 fi 316 317 if [ -e file1.in -a -e file2.in -a -e file3.in ]; then 318 tst_res TPASS "$AR extracted files correctly" 319 else 320 tst_res TFAIL "$AR failed to extract files" 321 fi 322 323 ROD rm -f lib.a file1.in file2.in file3.in 324} 325 326test17() 327{ 328 ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in 329 ROD $AR -xv"$MOD" lib.a file2.in \> ar.out 330 331 printf "x - file2.in\n" > ar.exp 332 333 if diff ar.out ar.exp > /dev/null; then 334 tst_res TPASS "$AR printed extracted filename (-xv)" 335 else 336 tst_res TFAIL "$AR failed to print extracted filename (-xv)" 337 cat ar.out 338 fi 339 340 if [ -e file2.in ]; then 341 tst_res TPASS "$AR extracted file correctly" 342 else 343 tst_res TFAIL "$AR failed to extract file" 344 fi 345 346 ROD rm -f lib.a file2.in 347} 348 349. tst_test.sh 350tst_run 351