Date: Mon, 28 Sep 2015 03:36:16 +0000 (UTC) From: Garrett Cooper <ngie@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r288330 - in head: bin/ls bin/ls/tests etc/mtree Message-ID: <201509280336.t8S3aGE1045873@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ngie Date: Mon Sep 28 03:36:15 2015 New Revision: 288330 URL: https://svnweb.freebsd.org/changeset/base/288330 Log: Add initial testcases for bin/ls MFC after: 1 week Sponsored by: EMC / Isilon Storage Division Added: head/bin/ls/tests/ - copied from r284388, user/ngie/more-tests/bin/ls/tests/ Modified: head/bin/ls/Makefile head/bin/ls/tests/Makefile head/bin/ls/tests/ls_tests.sh head/etc/mtree/BSD.tests.dist Directory Properties: head/ (props changed) Modified: head/bin/ls/Makefile ============================================================================== --- head/bin/ls/Makefile Mon Sep 28 03:31:01 2015 (r288329) +++ head/bin/ls/Makefile Mon Sep 28 03:36:15 2015 (r288330) @@ -13,4 +13,8 @@ CFLAGS+= -DCOLORLS LIBADD+= termcapw .endif +.if ${MK_TESTS} != "no" +SUBDIR+= tests +.endif + .include <bsd.prog.mk> Modified: head/bin/ls/tests/Makefile ============================================================================== --- user/ngie/more-tests/bin/ls/tests/Makefile Sun Jun 14 20:52:52 2015 (r284388) +++ head/bin/ls/tests/Makefile Mon Sep 28 03:36:15 2015 (r288330) @@ -1,8 +1,11 @@ +# $FreeBSD$ + TESTSDIR= ${TESTSBASE}/bin/ls ATF_TESTS_SH+= ls_tests # This seems like overkill, but the idea in mind is that all of the testcases # should be runnable as !root TEST_METADATA.ls_tests+= required_user="unprivileged" +TEST_METADATA.ls_tests+= required_files="/usr/bin/nc" .include <bsd.test.mk> Modified: head/bin/ls/tests/ls_tests.sh ============================================================================== --- user/ngie/more-tests/bin/ls/tests/ls_tests.sh Sun Jun 14 20:52:52 2015 (r284388) +++ head/bin/ls/tests/ls_tests.sh Mon Sep 28 03:36:15 2015 (r288330) @@ -27,9 +27,11 @@ # $FreeBSD$ # -create_test_inputs() +create_test_dir() { - ATF_TMPDIR=$(pwd) + [ -z "$ATF_TMPDIR" ] || return 0 + + export ATF_TMPDIR=$(pwd) # XXX: need to nest this because of how kyua creates $TMPDIR; otherwise # it will run into EPERM issues later @@ -37,6 +39,12 @@ create_test_inputs() atf_check -e empty -s exit:0 mkdir -m 0777 -p $TEST_INPUTS_DIR cd $TEST_INPUTS_DIR +} + +create_test_inputs() +{ + create_test_dir + atf_check -e empty -s exit:0 mkdir -m 0755 -p a/b atf_check -e empty -s exit:0 ln -s a/b c atf_check -e empty -s exit:0 touch d @@ -44,16 +52,76 @@ create_test_inputs() atf_check -e empty -s exit:0 touch .f atf_check -e empty -s exit:0 mkdir .g atf_check -e empty -s exit:0 mkfifo h + atf_check -e ignore -s exit:0 dd if=/dev/zero of=i count=1000 bs=1 + atf_check -e empty -s exit:0 \ + sh -c "pid=${ATF_TMPDIR}/nc.pid; daemon -p \$pid nc -lU j; sleep 2; pkill -F \$pid" + atf_check -e empty -s exit:0 touch klmn + atf_check -e empty -s exit:0 touch opqr + atf_check -e empty -s exit:0 touch stuv + atf_check -e empty -s exit:0 touch wxyz + atf_check -e empty -s exit:0 touch 0b00000001 + atf_check -e empty -s exit:0 touch 0b00000010 + atf_check -e empty -s exit:0 touch 0b00000011 + atf_check -e empty -s exit:0 touch 0b00000100 + atf_check -e empty -s exit:0 touch 0b00000101 + atf_check -e empty -s exit:0 touch 0b00000110 + atf_check -e empty -s exit:0 touch 0b00000111 + atf_check -e empty -s exit:0 touch 0b00001000 + atf_check -e empty -s exit:0 touch 0b00001001 + atf_check -e empty -s exit:0 touch 0b00001010 + atf_check -e empty -s exit:0 touch 0b00001011 + atf_check -e empty -s exit:0 touch 0b00001100 + atf_check -e empty -s exit:0 touch 0b00001101 + atf_check -e empty -s exit:0 touch 0b00001110 + atf_check -e empty -s exit:0 touch 0b00001111 +} + +atf_test_case a_flag +a_flag_head() +{ + atf_set "descr" "Verify -a support" +} + +a_flag_body() +{ + create_test_dir + + # Make sure "." and ".." show up with -a + atf_check -e empty -o match:'\.[[:space:]]+\.\.' -s exit:0 ls -ax + + create_test_inputs + + WITH_a=$PWD/../with_a.out + WITHOUT_a=$PWD/../without_a.out + + atf_check -e empty -o save:$WITH_a -s exit:0 ls -A + atf_check -e empty -o save:$WITHOUT_a -s exit:0 ls + + echo "-A usage" + cat $WITH_a + echo "No -A usage" + cat $WITHOUT_a + + for dot_path in '\.f' '\.g'; do + atf_check -e empty -o not-empty -s exit:0 grep "${dot_path}" \ + $WITH_a + atf_check -e empty -o empty -s not-exit:0 grep "${dot_path}" \ + $WITHOUT_a + done } atf_test_case A_flag A_flag_head() { - atf_set "require.user" "unprivileged" + atf_set "descr" "Verify -A support with unprivileged users" } A_flag_body() { + create_test_dir + + atf_check -e empty -o empty -s exit:0 ls -A + create_test_inputs WITH_A=$PWD/../with_A.out @@ -84,6 +152,10 @@ A_flag_implied_when_root_head() A_flag_implied_when_root_body() { + create_test_dir + + atf_check -e empty -o empty -s exit:0 ls -A + create_test_inputs WITH_EXPLICIT=$PWD/../with_explicit_A.out @@ -100,9 +172,187 @@ A_flag_implied_when_root_body() atf_check_equal "$(cat $WITH_EXPLICIT)" "$(cat $WITH_IMPLIED)" } +atf_test_case B_flag +B_flag_head() +{ + atf_set "descr" "Verify that the output from ls -B prints out non-printable characters" +} + +B_flag_body() +{ + + atf_check -e empty -o empty -s exit:0 touch "$(printf "y\013z")" + atf_check -e empty -o match:'y\\013z' -s exit:0 ls -B +} + +atf_test_case C_flag +C_flag_head() +{ + atf_set "descr" "Verify that the output from ls -C is multi-column, sorted down" +} + +C_flag_body() +{ + create_test_inputs + + WITH_C=$PWD/../with_C.out + + atf_check -e empty -o save:$WITH_C -s exit:0 ls -C + + echo "With -C usage" + cat $WITH_C + + atf_check -e ignore -o not-empty -s exit:0 \ + egrep "0b00000001[[:space:]]+0b00000111[[:space:]]+0b00001101[[:space:]]+e[[:space:]]+stuv" $WITH_C + atf_check -e ignore -o not-empty -s exit:0 \ + egrep "0b00000010[[:space:]]+0b00001000[[:space:]]+0b00001110[[:space:]]+h[[:space:]]+wxyz" $WITH_C +} + +atf_test_case I_flag +I_flag_head() +{ + atf_set "descr" "Verify that the output from ls -I is the same as ls for an unprivileged user" +} + +I_flag_body() +{ + create_test_inputs + + WITH_I=$PWD/../with_I.out + WITHOUT_I=$PWD/../without_I.out + + atf_check -e empty -o save:$WITH_I -s exit:0 ls -I + atf_check -e empty -o save:$WITHOUT_I -s exit:0 ls + + echo "Explicit -I usage" + cat $WITH_I + echo "No -I usage" + cat $WITHOUT_I + + atf_check_equal "$(cat $WITH_I)" "$(cat $WITHOUT_I)" +} + +atf_test_case I_flag_voids_implied_A_flag_when_root +I_flag_voids_implied_A_flag_when_root_head() +{ + atf_set "descr" "Verify that -I voids out implied -A for root" + atf_set "require.user" "root" +} + +I_flag_voids_implied_A_flag_when_root_body() +{ + create_test_inputs + + atf_check -o not-match:'\.f' -s exit:0 ls -I + atf_check -o not-match:'\.g' -s exit:0 ls -I + + atf_check -o match:'\.f' -s exit:0 ls -A -I + atf_check -o match:'\.g' -s exit:0 ls -A -I +} + +lcomma_flag_head() +{ + atf_set "descr" "Verify that -l, prints out the size with , delimiters" +} + +lcomma_flag_body() +{ + create_test_inputs + + atf_check \ + -o match:'\-rw\-r\-\-r\-\-[[:space:]]+.+[[:space:]]+1,000[[:space:]]+.+i' \ + env LC_ALL=en_US.ISO8859-1 ls -l, i +} + +x_flag_head() +{ + atf_set "descr" "Verify that -x prints out one item per line" +} + +x_flag_body() +{ + create_test_inputs + + WITH_x=$PWD/../with_x.out + + atf_check -e empty -o save:$WITH_x -s exit:0 ls -x + + echo "With -x usage" + cat $WITH_x + + atf_check -e ignore -o not-empty -s exit:0 \ + egrep "a[[:space:]]+c[[:space:]]+d[[:space:]]+e[[:space:]]+h" $WITH_x + atf_check -e ignore -o not-empty -s exit:0 \ + egrep "i[[:space:]]+j[[:space:]]+klmn[[:space:]]+opqr[[:space:]]+stuv" $WITH_x +} + +1_flag_head() +{ + atf_set "descr" "Verify that -1 prints out one item per line" +} + +1_flag_body() +{ + create_test_inputs + + WITH_1=$PWD/../with_1.out + WITHOUT_1=$PWD/../without_1.out + + atf_check -e empty -o save:$WITH_1 -s exit:0 ls -1 + atf_check -e empty -o save:$WITHOUT_1 -s exit:0 \ + sh -c 'for i in $(ls); do echo $i; done' + + echo "Explicit -1 usage" + cat $WITH_1 + echo "No -1 usage" + cat $WITHOUT_1 + + atf_check_equal "$(cat $WITH_1)" "$(cat $WITHOUT_1)" +} + atf_init_test_cases() { atf_add_test_case A_flag atf_add_test_case A_flag_implied_when_root + atf_add_test_case B_flag + atf_add_test_case C_flag + #atf_add_test_case D_flag + #atf_add_test_case F_flag + #atf_add_test_case G_flag + #atf_add_test_case H_flag + atf_add_test_case I_flag + atf_add_test_case I_flag_voids_implied_A_flag_when_root + #atf_add_test_case L_flag + #atf_add_test_case P_flag + #atf_add_test_case R_flag + #atf_add_test_case S_flag + #atf_add_test_case T_flag + #atf_add_test_case U_flag + #atf_add_test_case W_flag + #atf_add_test_case Z_flag + atf_add_test_case a_flag + #atf_add_test_case b_flag + #atf_add_test_case c_flag + #atf_add_test_case d_flag + #atf_add_test_case f_flag + #atf_add_test_case g_flag + #atf_add_test_case h_flag + #atf_add_test_case i_flag + #atf_add_test_case k_flag + #atf_add_test_case l_flag + atf_add_test_case lcomma_flag + #atf_add_test_case m_flag + #atf_add_test_case n_flag + #atf_add_test_case o_flag + #atf_add_test_case p_flag + #atf_add_test_case q_flag + #atf_add_test_case r_flag + #atf_add_test_case s_flag + #atf_add_test_case t_flag + #atf_add_test_case u_flag + #atf_add_test_case w_flag + atf_add_test_case x_flag + #atf_add_test_case y_flag + atf_add_test_case 1_flag } Modified: head/etc/mtree/BSD.tests.dist ============================================================================== --- head/etc/mtree/BSD.tests.dist Mon Sep 28 03:31:01 2015 (r288329) +++ head/etc/mtree/BSD.tests.dist Mon Sep 28 03:36:15 2015 (r288330) @@ -14,6 +14,8 @@ .. expr .. + ls + .. mv .. pax
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201509280336.t8S3aGE1045873>