xref: /aosp_15_r20/external/ltp/testcases/network/rpc/rpc-tirpc/rpc_test.sh (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1# SPDX-License-Identifier: GPL-2.0-or-later
2#!/bin/sh
3# Copyright (c) 2014 Oracle and/or its affiliates. All Rights Reserved.
4# Copyright (c) 2017-2020 Petr Vorel <[email protected]>
5
6SERVER=
7CLIENT=
8CLIENT_EXTRA_OPTS=
9CLEANER=
10# Program number to register the services to rpcbind
11PROGNUMNOSVC=536875000
12
13TST_TESTFUNC=do_test
14TST_USAGE=usage
15TST_OPTS="c:e:s:"
16TST_SETUP=setup
17TST_CLEANUP=cleanup
18TST_PARSE_ARGS=rpc_parse_args
19TST_NEEDS_CMDS="pkill rpcinfo"
20
21usage()
22{
23	cat << EOF
24USAGE: $0 [-s sprog] -c clprog [ -e extra ]
25
26Connect to the remote host and start sprog.
27Then execute clprog and passing it the remote host value.
28
29-c clprog client program binary
30-s sprog  server program binary
31-e extra  extra client options
32EOF
33}
34
35rpc_parse_args()
36{
37	case "$1" in
38		c) CLIENT="$OPTARG" ;;
39		e) tst_check_cmds sed
40		   CLIENT_EXTRA_OPTS="$(echo $OPTARG | sed 's/,/ /')" ;;
41		s) SERVER="$OPTARG" ;;
42	esac
43}
44
45setup()
46{
47	check_rpc
48
49	if [ -n "$SERVER" ]; then
50		CLEANER="rpc_cleaner"
51		if echo "$SERVER" | grep -q '^tirpc'; then
52			CLEANER="tirpc_cleaner"
53		fi
54	fi
55
56	[ -n "$CLIENT" ] || tst_brk TBROK "client program not set"
57	tst_check_cmds $CLIENT $SERVER || tst_brk TCONF "LTP compiled without TI-RPC support?"
58
59	tst_cmd_available ldd which || return
60	if ldd $(which $CLIENT) |grep -q /libtirpc\.so; then
61		tst_res TINFO "using libtirpc: yes"
62	else
63		tst_res TINFO "using libtirpc: no (probably using glibc)"
64	fi
65}
66
67cleanup()
68{
69	if [ "$SERVER_STARTED" ]; then
70		pkill -13 -x $SERVER
71		$CLEANER $PROGNUMNOSVC
72	fi
73}
74
75do_test()
76{
77	local i
78
79	if [ -n "$SERVER" ]; then
80		$SERVER $PROGNUMNOSVC &
81		SERVER_STARTED=1
82
83		for i in $(seq 1 10); do
84			rpcinfo -p localhost | grep -q $PROGNUMNOSVC && break
85			[ "$i" -eq 10 ] && tst_brk TBROK "server not registered"
86			tst_sleep 100ms
87		done
88	fi
89
90	EXPECT_RHOST_PASS $CLIENT $(tst_ipaddr) $PROGNUMNOSVC $CLIENT_EXTRA_OPTS
91}
92
93. rpc_lib.sh
94tst_run
95