#!/bin/sh # compare - compare output # usage: compare original-servent-file reader-program # # $NetBSD: compare,v 1.4 2008/03/09 01:31:07 dholland Exp $ # REF=reference-output OBS=observed-output DIFFS=differences if [ $# != 2 ]; then echo "$0: usage: $0 original-servent-file reader-program" 1>&2 exit 1 fi if [ ! -f "$1" ]; then echo "$0: $1 missing" 1>&2 exit 1 fi if [ ! -x "$2" ]; then echo "$0: $2 missing" 1>&2 exit 1 fi # # Munge original to: # (1) match output format of the test program # (2) fold all names for the same port/proto together # (3) prune duplicates # tr '\t' ' ' < "$1" | awk ' function add(key, name, i, n, ar) { n = split(names[key], ar); for (i=1; i<=n; i++) { if (name == ar[i]) { return; } } delete ar; names[key] = names[key] " " name; } { sub("#.*", "", $0); gsub(" *", " ", $0); if (NF==0) { next; } add($2, $1, 0); for (i=3; i<=NF; i++) { add($2, $i, 1); } } END { for (key in names) { portproto = key; sub("/", ", proto=", portproto); portproto = "port=" portproto; n = split(names[key], ar); printf "name=%s, %s, aliases=", ar[1], portproto; for (i=2; i<=n; i++) { if (i>2) { printf " "; } printf "%s", ar[i]; } printf "\n"; delete ar; } } ' | sort > $REF # run test program $2 | sed 's/ *$//' | sort > $OBS diff $REF $OBS >$DIFFS 2>&1 if [ -s $DIFFS ]; then echo "servent: Observed output does not match reference output" 1>&2 echo "servent: Outputs left in `pwd`" 1>&2 exit 1 fi rm -f $REF $OBS $DIFFS exit 0