1311895Sasomers# Copyright (c) 2016 Alan Somers 2311895Sasomers# All rights reserved. 3311895Sasomers# 4311895Sasomers# Redistribution and use in source and binary forms, with or without 5311895Sasomers# modification, are permitted provided that the following conditions 6311895Sasomers# are met: 7311895Sasomers# 1. Redistributions of source code must retain the above copyright 8311895Sasomers# notice, this list of conditions and the following disclaimer. 9311895Sasomers# 2. Redistributions in binary form must reproduce the above copyright 10311895Sasomers# notice, this list of conditions and the following disclaimer in the 11311895Sasomers# documentation and/or other materials provided with the distribution. 12311895Sasomers# 13311895Sasomers# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14311895Sasomers# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15311895Sasomers# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16311895Sasomers# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17311895Sasomers# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18311895Sasomers# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19311895Sasomers# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20311895Sasomers# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21311895Sasomers# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22311895Sasomers# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23311895Sasomers# SUCH DAMAGE. 24311895Sasomers# 25311895Sasomers# $FreeBSD: stable/10/usr.bin/tail/tests/tail_test.sh 332610 2018-04-16 16:42:16Z asomers $ 26311895Sasomers 27311895Sasomersatf_test_case empty_r 28311895Sasomersempty_r_head() 29311895Sasomers{ 30311895Sasomers atf_set "descr" "Reverse an empty file" 31311895Sasomers} 32311895Sasomersempty_r_body() 33311895Sasomers{ 34311895Sasomers touch infile expectfile 35311895Sasomers tail -r infile > outfile 36311895Sasomers tail -r < infile > outpipe 37311895Sasomers atf_check cmp expectfile outfile 38311895Sasomers atf_check cmp expectfile outpipe 39311895Sasomers} 40311895Sasomers 41311895Sasomersatf_test_case file_r 42311895Sasomersfile_r_head() 43311895Sasomers{ 44311895Sasomers atf_set "descr" "Reverse a file" 45311895Sasomers} 46311895Sasomersfile_r_body() 47311895Sasomers{ 48311895Sasomers cat > infile <<HERE 49311895SasomersThis is the first line 50311895SasomersThis is the second line 51311895SasomersThis is the third line 52311895SasomersHERE 53311895Sasomers cat > expectfile << HERE 54311895SasomersThis is the third line 55311895SasomersThis is the second line 56311895SasomersThis is the first line 57311895SasomersHERE 58311895Sasomers tail -r infile > outfile 59311895Sasomers tail -r < infile > outpipe 60311895Sasomers atf_check cmp expectfile outfile 61311895Sasomers atf_check cmp expectfile outpipe 62311895Sasomers} 63311895Sasomers 64311895Sasomersatf_test_case file_rn2 65311895Sasomersfile_rn2_head() 66311895Sasomers{ 67311895Sasomers atf_set "descr" "Reverse the last two lines of a file" 68311895Sasomers} 69311895Sasomersfile_rn2_body() 70311895Sasomers{ 71311895Sasomers cat > infile <<HERE 72311895SasomersThis is the first line 73311895SasomersThis is the second line 74311895SasomersThis is the third line 75311895SasomersHERE 76311895Sasomers cat > expectfile << HERE 77311895SasomersThis is the third line 78311895SasomersThis is the second line 79311895SasomersHERE 80311895Sasomers tail -rn2 infile > outfile 81311895Sasomers tail -rn2 < infile > outpipe 82311895Sasomers atf_check cmp expectfile outfile 83311895Sasomers atf_check cmp expectfile outpipe 84311895Sasomers} 85311895Sasomers 86332610Sasomers# Regression test for PR 222671 87332610Sasomers# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=222671 88332610Sasomersatf_test_case pipe_leading_newline_r 89332610Sasomerspipe_leading_newline_r_head() 90332610Sasomers{ 91332610Sasomers atf_set "descr" "Reverse a pipe whose first character is a newline" 92332610Sasomers} 93332610Sasomerspipe_leading_newline_r_body() 94332610Sasomers{ 95332610Sasomers cat > expectfile << HERE 96332610Sasomers3 97332610Sasomers2 98332610Sasomers1 99332610Sasomers 100332610SasomersHERE 101332610Sasomers printf '\n1\n2\n3\n' | tail -r > outfile 102332610Sasomers printf '\n1\n2\n3\n' | tail -r > outpipe 103332610Sasomers atf_check cmp expectfile outfile 104332610Sasomers atf_check cmp expectfile outpipe 105332610Sasomers} 106332610Sasomers 107311895Sasomersatf_test_case file_rc28 108311895Sasomersfile_rc28_head() 109311895Sasomers{ 110311895Sasomers atf_set "descr" "Reverse a file and display the last 28 characters" 111311895Sasomers} 112311895Sasomersfile_rc28_body() 113311895Sasomers{ 114311895Sasomers cat > infile <<HERE 115311895SasomersThis is the first line 116311895SasomersThis is the second line 117311895SasomersThis is the third line 118311895SasomersHERE 119311895Sasomers cat > expectfile << HERE 120311895SasomersThis is the third line 121311895Sasomersline 122311895SasomersHERE 123311895Sasomers tail -rc28 infile > outfile 124311895Sasomers tail -rc28 < infile > outpipe 125311895Sasomers atf_check cmp expectfile outfile 126311895Sasomers atf_check cmp expectfile outpipe 127311895Sasomers} 128311895Sasomers 129332610Sasomersatf_test_case file_rc28 130332610Sasomersfile_rc28_head() 131332610Sasomers{ 132332610Sasomers atf_set "descr" "Reverse a file and display the last 28 characters" 133332610Sasomers} 134332610Sasomersfile_rc28_body() 135332610Sasomers{ 136332610Sasomers cat > infile <<HERE 137332610SasomersThis is the first line 138332610SasomersThis is the second line 139332610SasomersThis is the third line 140332610SasomersHERE 141332610Sasomers cat > expectfile << HERE 142332610SasomersThis is the third line 143332610Sasomersline 144332610SasomersHERE 145332610Sasomers tail -rc28 infile > outfile 146332610Sasomers tail -rc28 < infile > outpipe 147332610Sasomers atf_check cmp expectfile outfile 148332610Sasomers atf_check cmp expectfile outpipe 149332610Sasomers} 150332610Sasomers 151311895Sasomersatf_test_case longfile_r 152311895Sasomerslongfile_r_head() 153311895Sasomers{ 154311895Sasomers atf_set "descr" "Reverse a long file" 155311895Sasomers} 156311895Sasomerslongfile_r_body() 157311895Sasomers{ 158311895Sasomers jot -w "%0511d" 1030 0 > infile 159311895Sasomers jot -w "%0511d" 1030 1029 0 -1 > expectfile 160311895Sasomers tail -r infile > outfile 161311895Sasomers tail -r < infile > outpipe 162311895Sasomers atf_check cmp expectfile outfile 163311895Sasomers atf_check cmp expectfile outpipe 164311895Sasomers} 165311895Sasomers 166311895Sasomersatf_test_case longfile_r_enomem 167311895Sasomerslongfile_r_enomem_head() 168311895Sasomers{ 169311895Sasomers atf_set "descr" "Reverse a file that's too long to store in RAM" 170311895Sasomers} 171311895Sasomerslongfile_r_enomem_body() 172311895Sasomers{ 173311895Sasomers # When we reverse a file that's too long for RAM, tail should drop the 174311895Sasomers # first part and just print what it can. We'll check that the last 175311895Sasomers # part is ok 176311895Sasomers { 177311895Sasomers ulimit -v 32768 || atf_skip "Can't adjust ulimit" 178311895Sasomers jot -w "%01023d" 32768 0 | tail -r > outfile ; 179311895Sasomers } 180311895Sasomers if [ "$?" -ne 1 ]; then 181311895Sasomers atf_skip "Didn't get ENOMEM. Adjust test parameters" 182311895Sasomers fi 183311895Sasomers # We don't know how much of the input we dropped. So just check that 184311895Sasomers # the first ten lines of tail's output are the same as the last ten of 185311895Sasomers # the input 186311895Sasomers jot -w "%01023d" 10 32767 0 -1 > expectfile 187311895Sasomers head -n 10 outfile > outtrunc 188311895Sasomers diff expectfile outtrunc 189311895Sasomers atf_check cmp expectfile outtrunc 190311895Sasomers} 191311895Sasomers 192311895Sasomersatf_test_case longfile_r_longlines 193311895Sasomerslongfile_r_longlines_head() 194311895Sasomers{ 195311895Sasomers atf_set "descr" "Reverse a long file with extremely long lines" 196311895Sasomers} 197311895Sasomerslongfile_r_longlines_body() 198311895Sasomers{ 199311895Sasomers jot -s " " -w "%07d" 18000 0 > infile 200311895Sasomers jot -s " " -w "%07d" 18000 18000 >> infile 201311895Sasomers jot -s " " -w "%07d" 18000 36000 >> infile 202311895Sasomers jot -s " " -w "%07d" 18000 36000 > expectfile 203311895Sasomers jot -s " " -w "%07d" 18000 18000 >> expectfile 204311895Sasomers jot -s " " -w "%07d" 18000 0 >> expectfile 205311895Sasomers tail -r infile > outfile 206311895Sasomers tail -r < infile > outpipe 207311895Sasomers atf_check cmp expectfile outfile 208311895Sasomers atf_check cmp expectfile outpipe 209311895Sasomers} 210311895Sasomers 211311895Sasomersatf_test_case longfile_rc135782 212311895Sasomerslongfile_rc135782_head() 213311895Sasomers{ 214311895Sasomers atf_set "descr" "Reverse a long file and print the last 135,782 bytes" 215311895Sasomers} 216311895Sasomerslongfile_rc135782_body() 217311895Sasomers{ 218311895Sasomers jot -w "%063d" 9000 0 > infile 219311895Sasomers jot -w "%063d" 2121 8999 0 -1 > expectfile 220311895Sasomers echo "0000000000000000000000000000000006878" >> expectfile 221311895Sasomers tail -rc135782 infile > outfile 222311895Sasomers tail -rc135782 < infile > outpipe 223311895Sasomers atf_check cmp expectfile outfile 224311895Sasomers atf_check cmp expectfile outpipe 225311895Sasomers} 226311895Sasomers 227311895Sasomersatf_test_case longfile_rc145782_longlines 228311895Sasomerslongfile_rc145782_longlines_head() 229311895Sasomers{ 230311895Sasomers atf_set "descr" "Reverse a long file with extremely long lines and print the last 145,782 bytes" 231311895Sasomers} 232311895Sasomerslongfile_rc145782_longlines_body() 233311895Sasomers{ 234311895Sasomers jot -s " " -w "%07d" 18000 0 > infile 235311895Sasomers jot -s " " -w "%07d" 18000 18000 >> infile 236311895Sasomers jot -s " " -w "%07d" 18000 36000 >> infile 237311895Sasomers jot -s " " -w "%07d" 18000 36000 > expectfile 238311895Sasomers echo -n "35777 " >> expectfile 239311895Sasomers jot -s " " -w "%07d" 222 35778 >> expectfile 240311895Sasomers tail -rc145782 infile > outfile 241311895Sasomers tail -rc145782 < infile > outpipe 242311895Sasomers atf_check cmp expectfile outfile 243311895Sasomers atf_check cmp expectfile outpipe 244311895Sasomers} 245311895Sasomers 246311895Sasomersatf_test_case longfile_rn2500 247311895Sasomerslongfile_rn2500_head() 248311895Sasomers{ 249311895Sasomers atf_set "descr" "Reverse a long file and print the last 2,500 lines" 250311895Sasomers} 251311895Sasomerslongfile_rn2500_body() 252311895Sasomers{ 253311895Sasomers jot -w "%063d" 9000 0 > infile 254311895Sasomers jot -w "%063d" 2500 8999 0 -1 > expectfile 255311895Sasomers tail -rn2500 infile > outfile 256311895Sasomers tail -rn2500 < infile > outpipe 257311895Sasomers atf_check cmp expectfile outfile 258311895Sasomers atf_check cmp expectfile outpipe 259311895Sasomers} 260311895Sasomers 261311895Sasomers 262311895Sasomersatf_init_test_cases() 263311895Sasomers{ 264311895Sasomers atf_add_test_case empty_r 265311895Sasomers atf_add_test_case file_r 266311895Sasomers atf_add_test_case file_rc28 267311895Sasomers atf_add_test_case file_rn2 268332610Sasomers atf_add_test_case pipe_leading_newline_r 269311895Sasomers # The longfile tests are designed to exercise behavior in r_buf(), 270311895Sasomers # which operates on 128KB blocks 271311895Sasomers atf_add_test_case longfile_r 272311895Sasomers atf_add_test_case longfile_r_enomem 273311895Sasomers atf_add_test_case longfile_r_longlines 274311895Sasomers atf_add_test_case longfile_rc135782 275311895Sasomers atf_add_test_case longfile_rc145782_longlines 276311895Sasomers atf_add_test_case longfile_rn2500 277311895Sasomers} 278