Add some basic tests for hexdump(1)'s various output flags. Formatting

tests are omitted for this initial run as there are still some bugs to work
out there.

This covers -s flag testing on devices and non-devices that would have
caught breakage found in PR 219173 as well as other subtle breakage caused
locally.

Reviewed by:	cem, ngie
Approved by:	cem (acting co-mentor)
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D11279
This commit is contained in:
kevans 2017-07-13 03:52:54 +00:00
parent 9c15310d2d
commit dbc4c5f67a
27 changed files with 299 additions and 0 deletions

View File

@ -644,6 +644,8 @@
..
gzip
..
hexdump
..
ident
..
indent

View File

@ -1,6 +1,8 @@
# @(#)Makefile 8.1 (Berkeley) 6/6/93
# $FreeBSD$
.include <src.opts.mk>
PROG= hexdump
SRCS= conv.c display.c hexdump.c hexsyntax.c odsyntax.c parse.c
MAN= hexdump.1 od.1
@ -8,4 +10,8 @@ MLINKS= hexdump.1 hd.1
LINKS= ${BINDIR}/hexdump ${BINDIR}/od
LINKS+= ${BINDIR}/hexdump ${BINDIR}/hd
.if ${MK_TESTS} != "no"
SUBDIR+= tests
.endif
.include <bsd.prog.mk>

View File

@ -0,0 +1,31 @@
# $FreeBSD$
PACKAGE= tests
ATF_TESTS_SH= hexdump_test
${PACKAGE}FILES+= d_hexdump_a.in
${PACKAGE}FILES+= d_hexdump_b.in
${PACKAGE}FILES+= d_hexdump_c.in
${PACKAGE}FILES+= d_hexdump_bflag_a.out
${PACKAGE}FILES+= d_hexdump_bflag_b.out
${PACKAGE}FILES+= d_hexdump_bflag_c.out
${PACKAGE}FILES+= d_hexdump_cflag_a.out
${PACKAGE}FILES+= d_hexdump_cflag_b.out
${PACKAGE}FILES+= d_hexdump_cflag_c.out
${PACKAGE}FILES+= d_hexdump_dflag_a.out
${PACKAGE}FILES+= d_hexdump_dflag_b.out
${PACKAGE}FILES+= d_hexdump_dflag_c.out
${PACKAGE}FILES+= d_hexdump_nflag_a.out
${PACKAGE}FILES+= d_hexdump_oflag_a.out
${PACKAGE}FILES+= d_hexdump_oflag_b.out
${PACKAGE}FILES+= d_hexdump_oflag_c.out
${PACKAGE}FILES+= d_hexdump_sflag_a.out
${PACKAGE}FILES+= d_hexdump_UCflag_a.out
${PACKAGE}FILES+= d_hexdump_UCflag_b.out
${PACKAGE}FILES+= d_hexdump_UCflag_c.out
${PACKAGE}FILES+= d_hexdump_xflag_a.out
${PACKAGE}FILES+= d_hexdump_xflag_b.out
${PACKAGE}FILES+= d_hexdump_xflag_c.out
.include <bsd.test.mk>

View File

@ -0,0 +1,2 @@
00000000 54 65 73 74 0a |Test.|
00000005

View File

@ -0,0 +1,4 @@
00000000 54 68 65 20 71 75 69 63 6b 20 62 72 6f 77 6e 20 |The quick brown |
00000010 66 6f 78 20 6a 75 6d 70 65 64 20 6f 76 65 72 20 |fox jumped over |
00000020 74 68 65 20 62 6c 75 65 20 68 6f 75 73 65 0a 0a |the blue house..|
00000030

View File

@ -0,0 +1,4 @@
00000000 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA|
*
00000020 41 41 41 41 41 41 41 0a |AAAAAAA.|
00000028

View File

@ -0,0 +1 @@
Test

View File

@ -0,0 +1,2 @@
The quick brown fox jumped over the blue house

View File

@ -0,0 +1,2 @@
0000000 124 145 163 164 012
0000005

View File

@ -0,0 +1,4 @@
0000000 124 150 145 040 161 165 151 143 153 040 142 162 157 167 156 040
0000010 146 157 170 040 152 165 155 160 145 144 040 157 166 145 162 040
0000020 164 150 145 040 142 154 165 145 040 150 157 165 163 145 012 012
0000030

View File

@ -0,0 +1,4 @@
0000000 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101
*
0000020 101 101 101 101 101 101 101 012
0000028

View File

@ -0,0 +1 @@
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

View File

@ -0,0 +1,2 @@
0000000 T e s t \n
0000005

View File

@ -0,0 +1,4 @@
0000000 T h e q u i c k b r o w n
0000010 f o x j u m p e d o v e r
0000020 t h e b l u e h o u s e \n \n
0000030

View File

@ -0,0 +1,4 @@
0000000 A A A A A A A A A A A A A A A A
*
0000020 A A A A A A A \n
0000028

View File

@ -0,0 +1,2 @@
0000000 25940 29811 00010
0000005

View File

@ -0,0 +1,4 @@
0000000 26708 08293 30065 25449 08299 29282 30575 08302
0000010 28518 08312 30058 28781 25701 28448 25974 08306
0000020 26740 08293 27746 25973 26656 30063 25971 02570
0000030

View File

@ -0,0 +1,4 @@
0000000 16705 16705 16705 16705 16705 16705 16705 16705
*
0000020 16705 16705 16705 02625
0000028

View File

@ -0,0 +1,2 @@
0000000 124
0000001

View File

@ -0,0 +1,2 @@
0000000 062524 072163 000012
0000005

View File

@ -0,0 +1,4 @@
0000000 064124 020145 072561 061551 020153 071142 073557 020156
0000010 067546 020170 072552 070155 062145 067440 062566 020162
0000020 064164 020145 066142 062565 064040 072557 062563 005012
0000030

View File

@ -0,0 +1,4 @@
0000000 040501 040501 040501 040501 040501 040501 040501 040501
*
0000020 040501 040501 040501 005101
0000028

View File

@ -0,0 +1,2 @@
0000004 012
0000005

View File

@ -0,0 +1,2 @@
0000000 6554 7473 000a
0000005

View File

@ -0,0 +1,4 @@
0000000 6854 2065 7571 6369 206b 7262 776f 206e
0000010 6f66 2078 756a 706d 6465 6f20 6576 2072
0000020 6874 2065 6c62 6575 6820 756f 6573 0a0a
0000030

View File

@ -0,0 +1,4 @@
0000000 4141 4141 4141 4141 4141 4141 4141 4141
*
0000020 4141 4141 4141 0a41
0000028

View File

@ -0,0 +1,192 @@
#
# Copyright (c) 2017 Kyle Evans <kevans@FreeBSD.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$
atf_test_case b_flag
b_flag_head()
{
atf_set "descr" "Verify -b output"
}
b_flag_body()
{
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_bflag_a.out" \
hexdump -b "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_bflag_b.out" \
hexdump -b "$(atf_get_srcdir)/d_hexdump_b.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_bflag_c.out" \
hexdump -b "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_test_case c_flag
c_flag_head()
{
atf_set "descr" "Verify -c output"
}
c_flag_body()
{
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_cflag_a.out" \
hexdump -c "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_cflag_b.out" \
hexdump -c "$(atf_get_srcdir)/d_hexdump_b.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_cflag_c.out" \
hexdump -c "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_test_case C_flag
C_flag_head()
{
atf_set "descr" "Verify -C output"
}
C_flag_body()
{
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_a.out" \
hexdump -C "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_b.out" \
hexdump -C "$(atf_get_srcdir)/d_hexdump_b.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
hexdump -C "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_test_case hd_name
hd_name_head()
{
atf_set "descr" "Verify hd output matching -C output"
}
hd_name_body()
{
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_a.out" \
hd "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_b.out" \
hd "$(atf_get_srcdir)/d_hexdump_b.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_UCflag_c.out" \
hd "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_test_case d_flag
d_flag_head()
{
atf_set "descr" "Verify -d output"
}
d_flag_body()
{
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_dflag_a.out" \
hexdump -d "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_dflag_b.out" \
hexdump -d "$(atf_get_srcdir)/d_hexdump_b.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_dflag_c.out" \
hexdump -d "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_test_case n_flag
n_flag_head()
{
atf_set "descr" "Check -n functionality"
}
n_flag_body()
{
atf_check -o empty hexdump -bn 0 "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_nflag_a.out" \
hexdump -bn 1 "$(atf_get_srcdir)/d_hexdump_a.in"
}
atf_test_case o_flag
o_flag_head()
{
atf_set "descr" "Verify -o output"
}
o_flag_body()
{
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_oflag_a.out" \
hexdump -o "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_oflag_b.out" \
hexdump -o "$(atf_get_srcdir)/d_hexdump_b.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_oflag_c.out" \
hexdump -o "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_test_case s_flag
s_flag_head()
{
atf_set "descr" "Verify -s output"
}
s_flag_body()
{
atf_expect_fail "-s option is currently broken due to capsicum (PR 219173)"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_sflag_a.out" \
hexdump -bs 4 "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o not-empty hexdump -n 100 -s 1024 /dev/random
}
atf_test_case v_flag
v_flag_head()
{
atf_set "descr" "Verify -v functionality"
}
v_flag_body()
{
atf_expect_fail "-s option is currently broken due to capsicum (PR 219173)"
for i in $(seq 0 7); do
atf_check -o match:"^\*$" \
hexdump -s ${i} "$(atf_get_srcdir)/d_hexdump_c.in"
atf_check -o not-match:"^\*$" \
hexdump -vs ${i} "$(atf_get_srcdir)/d_hexdump_c.in"
done
atf_check -o not-match:"^\*$" \
hexdump -s 8 "$(atf_get_srcdir)/d_hexdump_c.in"
atf_check -o not-match:"^\*$" \
hexdump -vs 8 "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_test_case x_flag
x_flag_head()
{
atf_set "descr" "Verify -x output"
}
x_flag_body()
{
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_xflag_a.out" \
hexdump -x "$(atf_get_srcdir)/d_hexdump_a.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_xflag_b.out" \
hexdump -x "$(atf_get_srcdir)/d_hexdump_b.in"
atf_check -o file:"$(atf_get_srcdir)/d_hexdump_xflag_c.out" \
hexdump -x "$(atf_get_srcdir)/d_hexdump_c.in"
}
atf_init_test_cases()
{
atf_add_test_case b_flag
atf_add_test_case c_flag
atf_add_test_case C_flag
atf_add_test_case hd_name
atf_add_test_case d_flag
atf_add_test_case n_flag
atf_add_test_case o_flag
atf_add_test_case s_flag
atf_add_test_case v_flag
atf_add_test_case x_flag
}