rpc_test.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 <pvorel@suse.cz>
  5. SERVER=
  6. CLIENT=
  7. CLIENT_EXTRA_OPTS=
  8. CLEANER=
  9. # Program number to register the services to rpcbind
  10. PROGNUMNOSVC=536875000
  11. TST_TESTFUNC=do_test
  12. TST_USAGE=usage
  13. TST_OPTS="c:e:s:"
  14. TST_SETUP=setup
  15. TST_CLEANUP=cleanup
  16. TST_PARSE_ARGS=rpc_parse_args
  17. TST_NEEDS_CMDS="pkill rpcinfo"
  18. . rpc_lib.sh
  19. usage()
  20. {
  21. cat << EOF
  22. USAGE: $0 [-s sprog] -c clprog [ -e extra ]
  23. Connect to the remote host and start sprog.
  24. Then execute clprog and passing it the remote host value.
  25. -c clprog client program binary
  26. -s sprog server program binary
  27. -e extra extra client options
  28. EOF
  29. }
  30. rpc_parse_args()
  31. {
  32. case "$1" in
  33. c) CLIENT="$OPTARG" ;;
  34. e) tst_check_cmds sed
  35. CLIENT_EXTRA_OPTS="$(echo $OPTARG | sed 's/,/ /')" ;;
  36. s) SERVER="$OPTARG" ;;
  37. esac
  38. }
  39. setup()
  40. {
  41. check_portmap_rpcbind
  42. if [ -n "$SERVER" ]; then
  43. CLEANER="rpc_cleaner"
  44. if echo "$SERVER" | grep -q '^tirpc'; then
  45. CLEANER="tirpc_cleaner"
  46. fi
  47. fi
  48. [ -n "$CLIENT" ] || tst_brk TBROK "client program not set"
  49. tst_check_cmds $CLIENT $SERVER || tst_brk TCONF "LTP compiled without TI-RPC support?"
  50. tst_cmd_available ldd which || return
  51. if ldd $(which $CLIENT) |grep -q /libtirpc\.so; then
  52. tst_res TINFO "using libtirpc: yes"
  53. else
  54. tst_res TINFO "using libtirpc: no (probably using glibc)"
  55. fi
  56. }
  57. cleanup()
  58. {
  59. if [ "$SERVER_STARTED" ]; then
  60. pkill -13 -x $SERVER
  61. $CLEANER $PROGNUMNOSVC
  62. fi
  63. }
  64. do_test()
  65. {
  66. local i
  67. if [ -n "$SERVER" ]; then
  68. $SERVER $PROGNUMNOSVC &
  69. SERVER_STARTED=1
  70. for i in $(seq 1 10); do
  71. rpcinfo -p localhost | grep -q $PROGNUMNOSVC && break
  72. [ "$i" -eq 30 ] && tst_brk TBROK "server not registered"
  73. tst_sleep 100ms
  74. done
  75. fi
  76. EXPECT_RHOST_PASS $CLIENT $(tst_ipaddr) $PROGNUMNOSVC $CLIENT_EXTRA_OPTS
  77. }
  78. tst_run