1fb25420bSRobert Mustacchi#!/usr/bin/ksh 2fb25420bSRobert Mustacchi# 3fb25420bSRobert Mustacchi# This file and its contents are supplied under the terms of the 4fb25420bSRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0. 5fb25420bSRobert Mustacchi# You may only use this file in accordance with the terms of version 6fb25420bSRobert Mustacchi# 1.0 of the CDDL. 7fb25420bSRobert Mustacchi# 8fb25420bSRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this 9fb25420bSRobert Mustacchi# source. A copy of the CDDL is also available via the Internet at 10fb25420bSRobert Mustacchi# http://www.illumos.org/license/CDDL. 11fb25420bSRobert Mustacchi# 12fb25420bSRobert Mustacchi 13fb25420bSRobert Mustacchi# 14*11029d9dSRobert Mustacchi# Copyright 2022 Oxide Computer Company 15fb25420bSRobert Mustacchi# 16fb25420bSRobert Mustacchi 17fb25420bSRobert Mustacchi# 18fb25420bSRobert Mustacchi# This contains a number of basic tests for ar(1). When adding something 19fb25420bSRobert Mustacchi# to ar or fixing a bug, please expand this! 20fb25420bSRobert Mustacchi# 21fb25420bSRobert Mustacchi 22fb25420bSRobert Mustacchiunalias -a 23fb25420bSRobert Mustacchiset -o pipefail 24fb25420bSRobert Mustacchi 25fb25420bSRobert Mustacchiar_arg0="$(basename $0)" 26fb25420bSRobert Mustacchiar_data="$(dirname $0)" 27fb25420bSRobert Mustacchiar_data0="$ar_data/ar_test0.o" 28fb25420bSRobert Mustacchiar_data1="$ar_data/ar_test1.o" 29fb25420bSRobert Mustacchiar_prog=/usr/bin/ar 30fb25420bSRobert Mustacchiar_tmpdir=/tmp/ar.$$ 31fb25420bSRobert Mustacchi 32fb25420bSRobert Mustacchiar_f01="$ar_tmpdir/test01.a" 33fb25420bSRobert Mustacchiar_f10="$ar_tmpdir/test10.a" 34fb25420bSRobert Mustacchi 35fb25420bSRobert Mustacchiar_t01="ar_test0.o 36fb25420bSRobert Mustacchiar_test1.o" 37fb25420bSRobert Mustacchiar_t10="ar_test1.o 38fb25420bSRobert Mustacchiar_test0.o" 39fb25420bSRobert Mustacchi 40fb25420bSRobert Mustacchistrip_prog=/usr/bin/strip 41fb25420bSRobert Mustacchidump_prog=/usr/bin/dump 42fb25420bSRobert Mustacchinm_prog=/usr/bin/nm 43fb25420bSRobert Mustacchi 44fb25420bSRobert Mustacchiar_exit=0 45fb25420bSRobert Mustacchi 46fb25420bSRobert Mustacchifunction warn 47fb25420bSRobert Mustacchi{ 48fb25420bSRobert Mustacchi typeset msg="$*" 49fb25420bSRobert Mustacchi [[ -z "$msg" ]] && msg="failed" 50fb25420bSRobert Mustacchi print -u2 "TEST FAILED: $ar_arg0: $msg" 51fb25420bSRobert Mustacchi ar_exit=1 52fb25420bSRobert Mustacchi} 53fb25420bSRobert Mustacchi 54fb25420bSRobert Mustacchifunction compare_files 55fb25420bSRobert Mustacchi{ 56fb25420bSRobert Mustacchi typeset base="$1" 57fb25420bSRobert Mustacchi typeset comp="$2" 58fb25420bSRobert Mustacchi typeset err=0 59fb25420bSRobert Mustacchi 60fb25420bSRobert Mustacchi if ! $dump_prog -g $comp | sed 1d > $comp.dump; then 61fb25420bSRobert Mustacchi warn "failed to dump -g $comp" 62fb25420bSRobert Mustacchi err=1 63fb25420bSRobert Mustacchi fi 64fb25420bSRobert Mustacchi 65fb25420bSRobert Mustacchi if ! $nm_prog -P -tx $comp > $comp.nm; then 66fb25420bSRobert Mustacchi warn "failed to nm $comp" 67fb25420bSRobert Mustacchi err=1 68fb25420bSRobert Mustacchi fi 69fb25420bSRobert Mustacchi 70fb25420bSRobert Mustacchi if ! diff $base.dump $comp.dump; then 71fb25420bSRobert Mustacchi warn "$base.dump and $comp.dump don't match" 72fb25420bSRobert Mustacchi err=1 73fb25420bSRobert Mustacchi fi 74fb25420bSRobert Mustacchi 75fb25420bSRobert Mustacchi if ! diff $base.nm $comp.nm; then 76fb25420bSRobert Mustacchi warn "$base.dump and $comp.dump don't match" 77fb25420bSRobert Mustacchi err=1 78fb25420bSRobert Mustacchi fi 79fb25420bSRobert Mustacchi 80fb25420bSRobert Mustacchi return $err 81fb25420bSRobert Mustacchi} 82fb25420bSRobert Mustacchi 83fb25420bSRobert Mustacchi# 84fb25420bSRobert Mustacchi# To set things up, we first go and create two basic archives that we 85fb25420bSRobert Mustacchi# will then use as the basis for comaring various operations later. 86fb25420bSRobert Mustacchi# 87fb25420bSRobert Mustacchifunction setup_baseline 88fb25420bSRobert Mustacchi{ 89fb25420bSRobert Mustacchi if ! $ar_prog cr $ar_f01 $ar_data0 $ar_data1; then 90fb25420bSRobert Mustacchi warn "failed to create basic archive $ar_f01" 91fb25420bSRobert Mustacchi fi 92fb25420bSRobert Mustacchi 93fb25420bSRobert Mustacchi if ! $ar_prog cr $ar_f10 $ar_data1 $ar_data0; then 94fb25420bSRobert Mustacchi warn "failed to create basic archive $ar_f10" 95fb25420bSRobert Mustacchi fi 96fb25420bSRobert Mustacchi 97fb25420bSRobert Mustacchi if ! $dump_prog -g $ar_f01 | sed 1d > $ar_f01.dump; then 98fb25420bSRobert Mustacchi warn "failed to dump archive $ar_f01" 99fb25420bSRobert Mustacchi fi 100fb25420bSRobert Mustacchi 101fb25420bSRobert Mustacchi if ! $dump_prog -g $ar_f10 | sed 1d > $ar_f10.dump; then 102fb25420bSRobert Mustacchi warn "failed to dump archive $ar_f10" 103fb25420bSRobert Mustacchi fi 104fb25420bSRobert Mustacchi 105fb25420bSRobert Mustacchi if ! $nm_prog -P -tx $ar_f01 > $ar_f01.nm; then 106fb25420bSRobert Mustacchi warn "failed to nm archive $ar_f01" 107fb25420bSRobert Mustacchi fi 108fb25420bSRobert Mustacchi 109fb25420bSRobert Mustacchi if ! $nm_prog -P -tx $ar_f10 > $ar_f10.nm; then 110fb25420bSRobert Mustacchi warn "failed to nm archive $ar_f01" 111fb25420bSRobert Mustacchi fi 112fb25420bSRobert Mustacchi 113fb25420bSRobert Mustacchi print "TEST PASSED: basic archive creation" 114fb25420bSRobert Mustacchi} 115fb25420bSRobert Mustacchi 116fb25420bSRobert Mustacchifunction strip_archive 117fb25420bSRobert Mustacchi{ 118fb25420bSRobert Mustacchi typeset file="$1" 119fb25420bSRobert Mustacchi typeset output= 120fb25420bSRobert Mustacchi 121fb25420bSRobert Mustacchi if ! $strip_prog $file 2>/dev/null; then 122fb25420bSRobert Mustacchi warn "failed to strip $alt" 123fb25420bSRobert Mustacchi return 1 124fb25420bSRobert Mustacchi fi 125fb25420bSRobert Mustacchi 126fb25420bSRobert Mustacchi output=$($dump_prog -g $file) 127fb25420bSRobert Mustacchi if [[ -n "$output" ]]; then 128fb25420bSRobert Mustacchi warn "stripped file $file somehow has an ar header" 129fb25420bSRobert Mustacchi return 1 130fb25420bSRobert Mustacchi fi 131fb25420bSRobert Mustacchi 132fb25420bSRobert Mustacchi return 0 133fb25420bSRobert Mustacchi} 134fb25420bSRobert Mustacchi 135fb25420bSRobert Mustacchi# 136fb25420bSRobert Mustacchi# Validate that stripping and regenerating a symbol table actually 137fb25420bSRobert Mustacchi# works. 138fb25420bSRobert Mustacchi# 139fb25420bSRobert Mustacchifunction test_s 140fb25420bSRobert Mustacchi{ 141fb25420bSRobert Mustacchi typeset alt="$ar_tmpdir/s.a" 142fb25420bSRobert Mustacchi typeset output= 143fb25420bSRobert Mustacchi 144fb25420bSRobert Mustacchi if ! cp $ar_f01 $alt; then 145fb25420bSRobert Mustacchi warn "failed to copy file" 146fb25420bSRobert Mustacchi return 147fb25420bSRobert Mustacchi fi 148fb25420bSRobert Mustacchi 149fb25420bSRobert Mustacchi if ! strip_archive $alt; then 150fb25420bSRobert Mustacchi return 151fb25420bSRobert Mustacchi fi 152fb25420bSRobert Mustacchi 153fb25420bSRobert Mustacchi if ! $ar_prog s $alt; then 154fb25420bSRobert Mustacchi warn "restore symbol table with ar s" 155fb25420bSRobert Mustacchi fi 156fb25420bSRobert Mustacchi 157fb25420bSRobert Mustacchi if compare_files "$ar_f01" "$alt"; then 158fb25420bSRobert Mustacchi print "TEST PASSED: restoring stripped archive with -s" 159fb25420bSRobert Mustacchi fi 160fb25420bSRobert Mustacchi 161fb25420bSRobert Mustacchi if ! strip_archive $alt; then 162fb25420bSRobert Mustacchi return 163fb25420bSRobert Mustacchi fi 164fb25420bSRobert Mustacchi 165fb25420bSRobert Mustacchi if ! $ar_prog st $alt >/dev/null; then 166fb25420bSRobert Mustacchi warn "restore symbol table with ar st" 167fb25420bSRobert Mustacchi fi 168fb25420bSRobert Mustacchi 169fb25420bSRobert Mustacchi if compare_files "$ar_f01" "$alt"; then 170fb25420bSRobert Mustacchi print "TEST PASSED: restoring stripped archive with -st" 171fb25420bSRobert Mustacchi fi 172fb25420bSRobert Mustacchi 173fb25420bSRobert Mustacchi if ! strip_archive $alt; then 174fb25420bSRobert Mustacchi return 175fb25420bSRobert Mustacchi fi 176fb25420bSRobert Mustacchi 177fb25420bSRobert Mustacchi output=$($ar_prog sv $alt 2>&1) 178fb25420bSRobert Mustacchi if [[ "$output" == "ar: writing $alt" ]]; then 179fb25420bSRobert Mustacchi print "TEST PASSED: ar -sv has proper output" 180fb25420bSRobert Mustacchi else 181fb25420bSRobert Mustacchi warn "ar -sv has unexpected output: $output" 182fb25420bSRobert Mustacchi fi 183fb25420bSRobert Mustacchi 184fb25420bSRobert Mustacchi if compare_files "$ar_f01" "$alt"; then 185fb25420bSRobert Mustacchi print "TEST PASSED: restoring stripped archive with -sv" 186fb25420bSRobert Mustacchi fi 187fb25420bSRobert Mustacchi} 188fb25420bSRobert Mustacchi 189fb25420bSRobert Mustacchi# 190fb25420bSRobert Mustacchi# Ensure that use of -s and -r still works. This is a regression test 191fb25420bSRobert Mustacchi# for the original integration of standalone -s support. 192fb25420bSRobert Mustacchi# 193fb25420bSRobert Mustacchifunction test_rs 194fb25420bSRobert Mustacchi{ 195fb25420bSRobert Mustacchi typeset alt="$ar_tmpdir/rs.a" 196fb25420bSRobert Mustacchi 197fb25420bSRobert Mustacchi if ! $ar_prog rs $alt $ar_data1 $ar_data0; then 198fb25420bSRobert Mustacchi warn "ar -rs: did not create an archive" 199fb25420bSRobert Mustacchi fi 200fb25420bSRobert Mustacchi 201fb25420bSRobert Mustacchi if ! compare_files $ar_f10 $alt; then 202fb25420bSRobert Mustacchi warn "ar -rs: did not create expected file" 203fb25420bSRobert Mustacchi else 204fb25420bSRobert Mustacchi print "TEST PASSED: ar -rs creates archives" 205fb25420bSRobert Mustacchi fi 206fb25420bSRobert Mustacchi 207fb25420bSRobert Mustacchi rm -f $alt 208fb25420bSRobert Mustacchi 209fb25420bSRobert Mustacchi if ! $ar_prog crs $alt $ar_data1 $ar_data0; then 210fb25420bSRobert Mustacchi warn "ar -crs: did not create an archive" 211fb25420bSRobert Mustacchi fi 212fb25420bSRobert Mustacchi 213fb25420bSRobert Mustacchi if ! compare_files $ar_f10 $alt; then 214fb25420bSRobert Mustacchi warn "ar -crs: did not create expected file" 215fb25420bSRobert Mustacchi else 216fb25420bSRobert Mustacchi print "TEST PASSED: ar -crs creates archives" 217fb25420bSRobert Mustacchi fi 218fb25420bSRobert Mustacchi} 219fb25420bSRobert Mustacchi 220fb25420bSRobert Mustacchi# 221fb25420bSRobert Mustacchi# Verify that basic ar -r invocations ultimately end up creating what 222fb25420bSRobert Mustacchi# we'd expect. 223fb25420bSRobert Mustacchi# 224fb25420bSRobert Mustacchifunction test_incremental 225fb25420bSRobert Mustacchi{ 226fb25420bSRobert Mustacchi typeset alt="$ar_tmpdir/incr.a" 227fb25420bSRobert Mustacchi 228fb25420bSRobert Mustacchi if ! $ar_prog cr $alt $ar_data0; then 229fb25420bSRobert Mustacchi warn "incremental archive: failed to create archive" 230fb25420bSRobert Mustacchi return 231fb25420bSRobert Mustacchi fi 232fb25420bSRobert Mustacchi 233fb25420bSRobert Mustacchi if ! $ar_prog cr $alt $ar_data1; then 234fb25420bSRobert Mustacchi warn "incremental archive: failed to add to archive" 235fb25420bSRobert Mustacchi return 236fb25420bSRobert Mustacchi fi 237fb25420bSRobert Mustacchi 238fb25420bSRobert Mustacchi if ! compare_files $ar_f01 $alt; then 239fb25420bSRobert Mustacchi warn "incremental archive: did not create expected file" 240fb25420bSRobert Mustacchi else 241fb25420bSRobert Mustacchi print "TEST PASSED: incremental archive creation" 242fb25420bSRobert Mustacchi fi 243fb25420bSRobert Mustacchi 244fb25420bSRobert Mustacchi} 245fb25420bSRobert Mustacchi 246fb25420bSRobert Mustacchi# 247fb25420bSRobert Mustacchi# Validate that ar's various -a and -b variants work. 248fb25420bSRobert Mustacchi# 249fb25420bSRobert Mustacchifunction test_pos 250fb25420bSRobert Mustacchi{ 251fb25420bSRobert Mustacchi typeset alt="$ar_tmpdir/pos.a" 252fb25420bSRobert Mustacchi 253fb25420bSRobert Mustacchi if ! $ar_prog cr $alt $ar_data1; then 254fb25420bSRobert Mustacchi warn "positional tests: failed to create archive" 255fb25420bSRobert Mustacchi return; 256fb25420bSRobert Mustacchi fi 257fb25420bSRobert Mustacchi 258fb25420bSRobert Mustacchi if ! $ar_prog -cra ar_test1.o $alt $ar_data0; then 259fb25420bSRobert Mustacchi warn "positional tests: -a append failed" 260fb25420bSRobert Mustacchi return 261fb25420bSRobert Mustacchi fi 262fb25420bSRobert Mustacchi 263fb25420bSRobert Mustacchi if ! compare_files $ar_f10 $alt; then 264fb25420bSRobert Mustacchi warn "positional tests: -cra archive is incorrect" 265fb25420bSRobert Mustacchi else 266fb25420bSRobert Mustacchi print "TEST PASSED: positional tests: ar -cra" 267fb25420bSRobert Mustacchi fi 268fb25420bSRobert Mustacchi 269fb25420bSRobert Mustacchi rm -f $alt 270fb25420bSRobert Mustacchi 271fb25420bSRobert Mustacchi if ! $ar_prog cr $alt $ar_data1; then 272fb25420bSRobert Mustacchi warn "positional tests: failed to create archive" 273fb25420bSRobert Mustacchi return; 274fb25420bSRobert Mustacchi fi 275fb25420bSRobert Mustacchi 276fb25420bSRobert Mustacchi if ! $ar_prog -crb ar_test1.o $alt $ar_data0; then 277fb25420bSRobert Mustacchi warn "positional tests: -b prepend failed" 278fb25420bSRobert Mustacchi return 279fb25420bSRobert Mustacchi fi 280fb25420bSRobert Mustacchi 281fb25420bSRobert Mustacchi if ! compare_files $ar_f01 $alt; then 282fb25420bSRobert Mustacchi warn "positional tests: -crb archive is incorrect" 283fb25420bSRobert Mustacchi else 284fb25420bSRobert Mustacchi print "TEST PASSED: positional tests: ar -crb" 285fb25420bSRobert Mustacchi fi 286fb25420bSRobert Mustacchi 287fb25420bSRobert Mustacchi rm -f $alt 288fb25420bSRobert Mustacchi 289fb25420bSRobert Mustacchi if ! $ar_prog cr $alt $ar_data1; then 290fb25420bSRobert Mustacchi warn "positional tests: failed to create archive" 291fb25420bSRobert Mustacchi return; 292fb25420bSRobert Mustacchi fi 293fb25420bSRobert Mustacchi 294fb25420bSRobert Mustacchi if ! $ar_prog -cri ar_test1.o $alt $ar_data0; then 295fb25420bSRobert Mustacchi warn "positional tests: -i prepend failed" 296fb25420bSRobert Mustacchi return 297fb25420bSRobert Mustacchi fi 298fb25420bSRobert Mustacchi 299fb25420bSRobert Mustacchi if ! compare_files $ar_f01 $alt; then 300fb25420bSRobert Mustacchi warn "positional tests: -cri archive is incorrect" 301fb25420bSRobert Mustacchi else 302fb25420bSRobert Mustacchi print "TEST PASSED: positional tests: ar -cri" 303fb25420bSRobert Mustacchi fi 304fb25420bSRobert Mustacchi 305fb25420bSRobert Mustacchi} 306fb25420bSRobert Mustacchi 307fb25420bSRobert Mustacchi# 308fb25420bSRobert Mustacchi# Go through and validate the various versions of ar x. 309fb25420bSRobert Mustacchi# 310fb25420bSRobert Mustacchifunction test_x 311fb25420bSRobert Mustacchi{ 312fb25420bSRobert Mustacchi typeset out0="$ar_tmpdir/ar_test0.o" 313fb25420bSRobert Mustacchi typeset out1="$ar_tmpdir/ar_test1.o" 314fb25420bSRobert Mustacchi typeset output= 315fb25420bSRobert Mustacchi 316fb25420bSRobert Mustacchi rm -f $out0 $out1 317fb25420bSRobert Mustacchi 318fb25420bSRobert Mustacchi if ! $ar_prog x $ar_f01; then 319fb25420bSRobert Mustacchi warn "ar -x: failed to extract files" 320fb25420bSRobert Mustacchi fi 321fb25420bSRobert Mustacchi 322fb25420bSRobert Mustacchi if cmp -s $out0 $ar_data0 && cmp -s $out1 $ar_data1; then 323fb25420bSRobert Mustacchi print "TEST PASSED: ar -x" 324fb25420bSRobert Mustacchi else 325fb25420bSRobert Mustacchi warn "ar -x: extracted files differs" 326fb25420bSRobert Mustacchi fi 327fb25420bSRobert Mustacchi 328fb25420bSRobert Mustacchi rm -f $out0 $out1 329fb25420bSRobert Mustacchi echo elberth > $out0 330fb25420bSRobert Mustacchi 331fb25420bSRobert Mustacchi # 332fb25420bSRobert Mustacchi # For some reason, ar -Cx will actually fail if you have an 333fb25420bSRobert Mustacchi # existing file. It seems a bit weird as it means you can't 334fb25420bSRobert Mustacchi # extract existing files (depdendent on order), but that's how 335fb25420bSRobert Mustacchi # it goes. 336fb25420bSRobert Mustacchi # 337fb25420bSRobert Mustacchi if $ar_prog Cx $ar_f01 ar_test0.o; then 338fb25420bSRobert Mustacchi warn "ar -Cx: failed to extract file that wasn't in fs\n" 339fb25420bSRobert Mustacchi fi 340fb25420bSRobert Mustacchi 341fb25420bSRobert Mustacchi output=$(cat $out0) 342fb25420bSRobert Mustacchi if [[ "$output" != "elberth" ]]; then 343fb25420bSRobert Mustacchi warn "ar -Cx: overwrote pre-existing file" 344fb25420bSRobert Mustacchi else 345fb25420bSRobert Mustacchi print "TEST PASSED: ar -Cx did not overwrite existing file" 346fb25420bSRobert Mustacchi fi 347fb25420bSRobert Mustacchi 348fb25420bSRobert Mustacchi if ! $ar_prog Cx $ar_f01 ar_test1.o; then 349fb25420bSRobert Mustacchi warn "ar -Cx: failed to extract file that wasn't in fs\n" 350fb25420bSRobert Mustacchi fi 351fb25420bSRobert Mustacchi 352fb25420bSRobert Mustacchi if cmp -s $out1 $ar_data1; then 353fb25420bSRobert Mustacchi print "TEST PASSED: ar -Cx extracted file that didn't exist" 354fb25420bSRobert Mustacchi else 355fb25420bSRobert Mustacchi warn "ar -Cx: failed to extract file that exists" 356fb25420bSRobert Mustacchi fi 357fb25420bSRobert Mustacchi} 358fb25420bSRobert Mustacchi 359fb25420bSRobert Mustacchi# 360fb25420bSRobert Mustacchi# Variant of -x that ensures we restore stripped archives. 361fb25420bSRobert Mustacchi# 362fb25420bSRobert Mustacchifunction test_xs 363fb25420bSRobert Mustacchi{ 364fb25420bSRobert Mustacchi typeset alt="$ar_tmpdir/xs.a" 365fb25420bSRobert Mustacchi typeset out0="$ar_tmpdir/ar_test0.o" 366fb25420bSRobert Mustacchi typeset out1="$ar_tmpdir/ar_test1.o" 367fb25420bSRobert Mustacchi 368fb25420bSRobert Mustacchi rm -f $out0 $out1 369fb25420bSRobert Mustacchi 370fb25420bSRobert Mustacchi if ! cp $ar_f01 $alt; then 371fb25420bSRobert Mustacchi warn "failed to copy file" 372fb25420bSRobert Mustacchi return 373fb25420bSRobert Mustacchi fi 374fb25420bSRobert Mustacchi 375fb25420bSRobert Mustacchi if ! strip_archive $alt; then 376fb25420bSRobert Mustacchi return 377fb25420bSRobert Mustacchi fi 378fb25420bSRobert Mustacchi 379fb25420bSRobert Mustacchi if ! $ar_prog xs $alt; then 380fb25420bSRobert Mustacchi warn "ar -xs: failed to extract files" 381fb25420bSRobert Mustacchi fi 382fb25420bSRobert Mustacchi 383fb25420bSRobert Mustacchi if cmp -s $out0 $ar_data0 && cmp -s $out1 $ar_data1 && \ 384fb25420bSRobert Mustacchi compare_files "$ar_f01" "$alt"; then 385fb25420bSRobert Mustacchi print "TEST PASSED: ar -xs" 386fb25420bSRobert Mustacchi else 387fb25420bSRobert Mustacchi warn "ar -xs: extracted and restore archive differ" 388fb25420bSRobert Mustacchi fi 389fb25420bSRobert Mustacchi} 390fb25420bSRobert Mustacchi 391fb25420bSRobert Mustacchifunction test_m 392fb25420bSRobert Mustacchi{ 393fb25420bSRobert Mustacchi typeset alt="$ar_tmpdir/pos.a" 394fb25420bSRobert Mustacchi 395fb25420bSRobert Mustacchi if ! cp $ar_f01 $alt; then 396fb25420bSRobert Mustacchi warn "failed to copy file" 397fb25420bSRobert Mustacchi return 398fb25420bSRobert Mustacchi fi 399fb25420bSRobert Mustacchi 400fb25420bSRobert Mustacchi if ! $ar_prog ma ar_test1.o $alt ar_test0.o; then 401fb25420bSRobert Mustacchi warn "ar -ma: failed didn't work" 402fb25420bSRobert Mustacchi fi 403fb25420bSRobert Mustacchi 404fb25420bSRobert Mustacchi if compare_files "$ar_f10" "$alt"; then 405fb25420bSRobert Mustacchi print "TEST PASSED: ar -ma" 406fb25420bSRobert Mustacchi else 407fb25420bSRobert Mustacchi warn "ar -ma: did not create expected archive" 408fb25420bSRobert Mustacchi fi 409fb25420bSRobert Mustacchi 410fb25420bSRobert Mustacchi if ! $ar_prog mb ar_test1.o $alt ar_test0.o; then 411fb25420bSRobert Mustacchi warn "ar -ma: failed didn't work" 412fb25420bSRobert Mustacchi fi 413fb25420bSRobert Mustacchi 414fb25420bSRobert Mustacchi if compare_files "$ar_f01" "$alt"; then 415fb25420bSRobert Mustacchi print "TEST PASSED: ar -mb" 416fb25420bSRobert Mustacchi else 417fb25420bSRobert Mustacchi warn "ar -mb: did not create expected archive" 418fb25420bSRobert Mustacchi fi 419fb25420bSRobert Mustacchi} 420fb25420bSRobert Mustacchi 421fb25420bSRobert Mustacchifunction test_t 422fb25420bSRobert Mustacchi{ 423fb25420bSRobert Mustacchi typeset output= 424fb25420bSRobert Mustacchi 425fb25420bSRobert Mustacchi output=$($ar_prog t $ar_f01) 426fb25420bSRobert Mustacchi if [[ "$ar_t01" != "$output" ]]; then 427fb25420bSRobert Mustacchi warn "ar t: mismatched output on $ar_t01, found $output" 428fb25420bSRobert Mustacchi else 429fb25420bSRobert Mustacchi print "TEST PASSED: ar -t (output 01)" 430fb25420bSRobert Mustacchi fi 431fb25420bSRobert Mustacchi 432fb25420bSRobert Mustacchi output=$($ar_prog t $ar_f10) 433fb25420bSRobert Mustacchi if [[ "$ar_t10" != "$output" ]]; then 434fb25420bSRobert Mustacchi warn "ar t: mismatched output on $ar_f10, found $output" 435fb25420bSRobert Mustacchi else 436fb25420bSRobert Mustacchi print "TEST PASSED: ar -t (output 10)" 437fb25420bSRobert Mustacchi fi 438fb25420bSRobert Mustacchi} 439fb25420bSRobert Mustacchi 440*11029d9dSRobert Mustacchifunction test_q 441*11029d9dSRobert Mustacchi{ 442*11029d9dSRobert Mustacchi typeset alt="$ar_tmpdir/q.a" 443*11029d9dSRobert Mustacchi 444*11029d9dSRobert Mustacchi if ! $ar_prog q $alt $ar_data1 $ar_data0; then 445*11029d9dSRobert Mustacchi warn "ar -q: did not create an archive" 446*11029d9dSRobert Mustacchi fi 447*11029d9dSRobert Mustacchi 448*11029d9dSRobert Mustacchi if ! compare_files $ar_f10 $alt; then 449*11029d9dSRobert Mustacchi warn "ar -q: did not create expected file" 450*11029d9dSRobert Mustacchi else 451*11029d9dSRobert Mustacchi print "TEST PASSED: ar -q creates archives" 452*11029d9dSRobert Mustacchi fi 453*11029d9dSRobert Mustacchi 454*11029d9dSRobert Mustacchi rm -f $alt 455*11029d9dSRobert Mustacchi 456*11029d9dSRobert Mustacchi if ! $ar_prog cq $alt $ar_data1 $ar_data0; then 457*11029d9dSRobert Mustacchi warn "ar -rs: did not create an archive" 458*11029d9dSRobert Mustacchi fi 459*11029d9dSRobert Mustacchi 460*11029d9dSRobert Mustacchi if ! compare_files $ar_f10 $alt; then 461*11029d9dSRobert Mustacchi warn "ar -cq: did not create expected file" 462*11029d9dSRobert Mustacchi else 463*11029d9dSRobert Mustacchi print "TEST PASSED: ar -cq creates archives" 464*11029d9dSRobert Mustacchi fi 465*11029d9dSRobert Mustacchi 466*11029d9dSRobert Mustacchi rm -f $alt 467*11029d9dSRobert Mustacchi 468*11029d9dSRobert Mustacchi if ! $ar_prog cqs $alt $ar_data1 $ar_data0; then 469*11029d9dSRobert Mustacchi warn "ar -cqs: did not create an archive" 470*11029d9dSRobert Mustacchi fi 471*11029d9dSRobert Mustacchi 472*11029d9dSRobert Mustacchi if ! compare_files $ar_f10 $alt; then 473*11029d9dSRobert Mustacchi warn "ar -cqs: did not create expected file" 474*11029d9dSRobert Mustacchi else 475*11029d9dSRobert Mustacchi print "TEST PASSED: ar -cqs creates archives" 476*11029d9dSRobert Mustacchi fi 477*11029d9dSRobert Mustacchi 478*11029d9dSRobert Mustacchi} 479*11029d9dSRobert Mustacchi 480fb25420bSRobert Mustacchifunction test_err 481fb25420bSRobert Mustacchi{ 482fb25420bSRobert Mustacchi if $ar_prog $@ 2>/dev/null 1>/dev/null; then 483fb25420bSRobert Mustacchi warn "should have failed with args "$@", but passed" 484fb25420bSRobert Mustacchi else 485fb25420bSRobert Mustacchi printf "TEST PASSED: invalid arguments %s\n" "$*" 486fb25420bSRobert Mustacchi fi 487fb25420bSRobert Mustacchi} 488fb25420bSRobert Mustacchi 489fb25420bSRobert Mustacchi# 490fb25420bSRobert Mustacchi# Before we begin execution, set up the environment such that we have a 491fb25420bSRobert Mustacchi# standard locale and that umem will help us catch mistakes. 492fb25420bSRobert Mustacchi# 493fb25420bSRobert Mustacchiexport LC_ALL=C.UTF-8 494fb25420bSRobert Mustacchiexport LD_PRELOAD=libumem.so 495fb25420bSRobert Mustacchiexport UMEM_DEBUG=default 496fb25420bSRobert Mustacchi 497fb25420bSRobert Mustacchiif ! mkdir "$ar_tmpdir"; then 498fb25420bSRobert Mustacchi printf "failed to make output directory %s\n" "$ar_tmpdir" >&2 499fb25420bSRobert Mustacchi exit 1 500fb25420bSRobert Mustacchifi 501fb25420bSRobert Mustacchi 502fb25420bSRobert Mustacchiif ! cd "$ar_tmpdir"; then 503fb25420bSRobert Mustacchi printf "failed to cd into output directory %s\n" "$ar_tmpdir" >&2 504fb25420bSRobert Mustacchi exit 1 505fb25420bSRobert Mustacchifi 506fb25420bSRobert Mustacchi 507fb25420bSRobert Mustacchiif [[ ! -d "$ar_data" ]]; then 508fb25420bSRobert Mustacchi printf "failed to find data directory %s\n" "$ar_data" >&2 509fb25420bSRobert Mustacchi exit 1 510fb25420bSRobert Mustacchifi 511fb25420bSRobert Mustacchi 512fb25420bSRobert Mustacchiif [[ -n $AR ]]; then 513fb25420bSRobert Mustacchi echo overwrote AR as $AR 514fb25420bSRobert Mustacchi ar_prog=$AR 515fb25420bSRobert Mustacchifi 516fb25420bSRobert Mustacchi 517fb25420bSRobert Mustacchisetup_baseline 518fb25420bSRobert Mustacchitest_s 519fb25420bSRobert Mustacchitest_rs 520fb25420bSRobert Mustacchitest_incremental 521fb25420bSRobert Mustacchitest_pos 522fb25420bSRobert Mustacchitest_x 523fb25420bSRobert Mustacchitest_xs 524fb25420bSRobert Mustacchitest_m 525fb25420bSRobert Mustacchitest_t 526*11029d9dSRobert Mustacchitest_q 527fb25420bSRobert Mustacchi 528fb25420bSRobert Mustacchi# 529fb25420bSRobert Mustacchi# Note, there are many cases here which probably should be failures and 530fb25420bSRobert Mustacchi# aren't (e.g. ar -mabi) because that's how the tool works today. With 531fb25420bSRobert Mustacchi# proper regression testing of building 3rd party packages this could be 532fb25420bSRobert Mustacchi# changed. 533fb25420bSRobert Mustacchi# 534fb25420bSRobert Mustacchitest_err "" 535fb25420bSRobert Mustacchitest_err "-z" 536fb25420bSRobert Mustacchitest_err "-d" 537fb25420bSRobert Mustacchitest_err "-d" "$ar_tmpdir/enoent" 538fb25420bSRobert Mustacchitest_err "-d" "$ar_f01" "foobar.exe" 539fb25420bSRobert Mustacchitest_err "-m" "$ar_tmpdir/enoent" 540fb25420bSRobert Mustacchitest_err "-ma" "foobar.exe" "$ar_tmpdir/enoent" 541fb25420bSRobert Mustacchitest_err "-mb" "foobar.exe" "$ar_tmpdir/enoent" 542fb25420bSRobert Mustacchitest_err "-mi" "foobar.exe" "$ar_tmpdir/enoent" 543fb25420bSRobert Mustacchitest_err "-p" "$ar_tmpdir/enoent" 544fb25420bSRobert Mustacchitest_err "-P" "$ar_tmpdir/enoent" 545fb25420bSRobert Mustacchitest_err "-q" 546fb25420bSRobert Mustacchitest_err "-qa" "foobar.exe" "$ar_f0.a" 547fb25420bSRobert Mustacchitest_err "-qb" "foobar.exe" "$ar_f0.a" 548fb25420bSRobert Mustacchitest_err "-qi" "foobar.exe" "$ar_f0.a" 549fb25420bSRobert Mustacchitest_err "-qa" "ar_test0.o" "$ar_f0.a" 550fb25420bSRobert Mustacchitest_err "-qb" "ar_test0.o" "$ar_f0.a" 551fb25420bSRobert Mustacchitest_err "-qi" "ar_test0.o" "$ar_f0.a" 552fb25420bSRobert Mustacchitest_err "-r" 553fb25420bSRobert Mustacchitest_err "-ra" "foobar.exe" 554fb25420bSRobert Mustacchitest_err "-ra" "foobar.exe" "$ar_tmpdir/enoent" 555fb25420bSRobert Mustacchitest_err "-rb" "foobar.exe" 556fb25420bSRobert Mustacchitest_err "-rb" "foobar.exe" "$ar_tmpdir/enoent" 557fb25420bSRobert Mustacchitest_err "-ri" "foobar.exe" 558fb25420bSRobert Mustacchitest_err "-ri" "foobar.exe" "$ar_tmpdir/enoent" 559fb25420bSRobert Mustacchitest_err "-t" 560fb25420bSRobert Mustacchitest_err "-t" "$ar_tmpdir/enoent" 561fb25420bSRobert Mustacchitest_err "-x" 562fb25420bSRobert Mustacchitest_err "-x" "$ar_tmpdir/enoent" 563fb25420bSRobert Mustacchitest_err "-s" 564fb25420bSRobert Mustacchitest_err "-s" "$ar_tmpdir/enoent" 565fb25420bSRobert Mustacchitest_err "-s" "$ar_f01" "$ar_f10" 566fb25420bSRobert Mustacchitest_err "-sz" "$ar_f01" 567fb25420bSRobert Mustacchitest_err "-rd" 568fb25420bSRobert Mustacchitest_err "-xd" 569fb25420bSRobert Mustacchitest_err "-qp" 570fb25420bSRobert Mustacchi 571fb25420bSRobert Mustacchiif (( ar_exit == 0 )); then 572fb25420bSRobert Mustacchi printf "All tests passed successfully!\n" 573fb25420bSRobert Mustacchifi 574fb25420bSRobert Mustacchi 575fb25420bSRobert Mustacchicd - >/dev/null 576fb25420bSRobert Mustacchirm -rf "$ar_tmpdir" 577fb25420bSRobert Mustacchiexit $ar_exit 578