xref: /freebsd/contrib/sendmail/libsmutil/t-lockfile-0.sh (revision 2fb4f839f3fc72ce2bab12f9ba4760f97f73e97f)
1*2fb4f839SGregory Neil Shapiro#!/bin/sh
2*2fb4f839SGregory Neil Shapiro# Copyright (c) 2021 Proofpoint, Inc. and its suppliers.
3*2fb4f839SGregory Neil Shapiro#	All rights reserved.
4*2fb4f839SGregory Neil Shapiro#
5*2fb4f839SGregory Neil Shapiro# By using this file, you agree to the terms and conditions set
6*2fb4f839SGregory Neil Shapiro# forth in the LICENSE file which can be found at the top level of
7*2fb4f839SGregory Neil Shapiro# the sendmail distribution.
8*2fb4f839SGregory Neil Shapiro#
9*2fb4f839SGregory Neil Shapiro# ----------------------------------------
10*2fb4f839SGregory Neil Shapiro# test t-lockfile, analyze result
11*2fb4f839SGregory Neil Shapiro# ----------------------------------------
12*2fb4f839SGregory Neil Shapiro
13*2fb4f839SGregory Neil Shapirofail()
14*2fb4f839SGregory Neil Shapiro{
15*2fb4f839SGregory Neil Shapiro  echo "$0: $@"
16*2fb4f839SGregory Neil Shapiro  exit 1
17*2fb4f839SGregory Neil Shapiro}
18*2fb4f839SGregory Neil Shapiro
19*2fb4f839SGregory Neil ShapiroPRG=./t-lockfile
20*2fb4f839SGregory Neil ShapiroO=l.log
21*2fb4f839SGregory Neil Shapiro
22*2fb4f839SGregory Neil Shapiroanalyze()
23*2fb4f839SGregory Neil Shapiro{
24*2fb4f839SGregory Neil Shapiro # the "owner" unlock operation must be before
25*2fb4f839SGregory Neil Shapiro # the "client" lock operation can succeed
26*2fb4f839SGregory Neil Shapiro U=`grep -n 'owner=1, unlock.*done' $O | cut -d: -f1 | head -n1`
27*2fb4f839SGregory Neil Shapiro [ x"$U" = "x" ] && U=`grep -n '_close' $O | cut -d: -f1 | head -n1`
28*2fb4f839SGregory Neil Shapiro L=`grep -n 'owner=0, lock.* ok' $O | cut -d: -f1`
29*2fb4f839SGregory Neil Shapiro [ x"$U" = "x" ] && return 1
30*2fb4f839SGregory Neil Shapiro [ x"$L" = "x" ] && return 1
31*2fb4f839SGregory Neil Shapiro [ $U -lt $L ]
32*2fb4f839SGregory Neil Shapiro}
33*2fb4f839SGregory Neil Shapiro
34*2fb4f839SGregory Neil Shapiroall=true
35*2fb4f839SGregory Neil Shapirowhile getopts 2a: FLAG
36*2fb4f839SGregory Neil Shapirodo
37*2fb4f839SGregory Neil Shapiro  case "${FLAG}" in
38*2fb4f839SGregory Neil Shapiro    2) all=false;;
39*2fb4f839SGregory Neil Shapiro    a) O=${OPTARG}
40*2fb4f839SGregory Neil Shapiro       analyze || fail "$opts: unlock1=$U, lock2=$L"
41*2fb4f839SGregory Neil Shapiro       exit;;
42*2fb4f839SGregory Neil Shapiro  esac
43*2fb4f839SGregory Neil Shapirodone
44*2fb4f839SGregory Neil Shapiroshift `expr ${OPTIND} - 1`
45*2fb4f839SGregory Neil Shapiro
46*2fb4f839SGregory Neil Shapiro[ -x ${PRG} ] || fail "missing ${PRG}"
47*2fb4f839SGregory Neil Shapiro
48*2fb4f839SGregory Neil Shapiroif $all
49*2fb4f839SGregory Neil Shapirothen
50*2fb4f839SGregory Neil Shapirofor opts in "" "-r" "-n" "-nr"
51*2fb4f839SGregory Neil Shapirodo
52*2fb4f839SGregory Neil Shapiro  ${PRG} $opts > $O 2>&1 || fail "$opts: $?"
53*2fb4f839SGregory Neil Shapiro  analyze || fail "$opts: unlock1=$U, lock2=$L"
54*2fb4f839SGregory Neil Shapirodone
55*2fb4f839SGregory Neil Shapirofi
56*2fb4f839SGregory Neil Shapiro
57*2fb4f839SGregory Neil Shapiro# try with two processes
58*2fb4f839SGregory Neil Shapirofor opts in "" "-r"
59*2fb4f839SGregory Neil Shapirodo
60*2fb4f839SGregory Neil Shapirorm -f $O
61*2fb4f839SGregory Neil Shapiro${PRG} -W >> $O 2>&1 || fail "-W: $?"
62*2fb4f839SGregory Neil Shapirowpid=$!
63*2fb4f839SGregory Neil Shapiro${PRG} -R $opts >> $O 2>&1 || fail "-R $opts: $?"
64*2fb4f839SGregory Neil Shapirorpid=$!
65*2fb4f839SGregory Neil Shapiroanalyze || fail "$opts: unlock1=$U, lock2=$L"
66*2fb4f839SGregory Neil Shapirowait $wpid
67*2fb4f839SGregory Neil Shapirowait $rpid
68*2fb4f839SGregory Neil Shapirodone
69*2fb4f839SGregory Neil Shapiro
70*2fb4f839SGregory Neil Shapiroexit 0
71