PageRenderTime 47ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/minix/commands/swifi/tests/run_t2

http://www.minix3.org/
Shell | 146 lines | 125 code | 14 blank | 7 comment | 9 complexity | 6f51728e9d72d9ea9ce7ffde47f62d3a MD5 | raw file
Possible License(s): MIT, WTFPL, AGPL-1.0, BSD-3-Clause, GPL-3.0, LGPL-2.0, JSON, 0BSD
  1. #!/bin/sh
  2. LABEL=dp8390
  3. EXEDIR=/service/dp8390
  4. EXE=$EXEDIR/$LABEL
  5. DAYTIME_HOST=jetsam.cs.vu.nl
  6. FAULTS_PER_BLOCK=1
  7. :>log
  8. fault_blocks=0
  9. connect_blocks=0
  10. dont_connect=0
  11. do_one()
  12. {
  13. # $1 = test-nr, $2 = count, $3 = seed
  14. pid=''
  15. while [ X"$pid" = X ]
  16. do
  17. pid=`ps ax | grep $LABEL | grep -v grep |
  18. sed 's,^[ ]*,,;s,[ ].*,,'`
  19. if [ X"$pid" != X ]
  20. then
  21. break
  22. fi
  23. sleep 10
  24. done
  25. echo pid = $pid
  26. swifi -f $EXE $pid $1 $2 $3 >/tmp/out
  27. sleep 1
  28. fault_blocks=`expr $fault_blocks + 1`
  29. if kill -0 $pid
  30. then
  31. if [ $dont_connect -eq 0 ]
  32. then
  33. if ./socket -t 10 $DAYTIME_HOST daytime < /dev/null
  34. then
  35. connect_blocks=`expr $connect_blocks + 1`
  36. else
  37. dont_connect=1
  38. fi
  39. fi
  40. echo "driver failed to die, params: test $1, count $2, seed $3"
  41. else
  42. connect_blocks=`expr $connect_blocks + 1`
  43. echo "driver crashed after $fault_blocks blocks"
  44. echo "driver failed to connect after $connect_blocks blocks"
  45. fault_blocks=0
  46. connect_blocks=0
  47. dont_connect=0
  48. fi
  49. }
  50. one_round()
  51. {
  52. # $1 = count, $2 = seed
  53. count=$1
  54. seed=$2
  55. echo "Seed: $seed" >> log
  56. sync
  57. do_one 6 $count $seed # Source fault
  58. do_one 5 $count $seed # Destination fault
  59. do_one 8 $count $seed # Pointer fault
  60. do_one 14 $count $seed # Interface fault
  61. do_one 12 $count $seed # Loop fault
  62. do_one 0 $count $seed # Text fault
  63. do_one 4 $count $seed # Nop fault
  64. }
  65. usage()
  66. {
  67. echo "Usage: run_t2 <count> <type> <seed>" >&2
  68. echo \
  69. "Valid types are: source destination pointer interface loop text nop random" >&2
  70. exit 1
  71. }
  72. select_from()
  73. {
  74. # $1 = index, $2... = choices
  75. index="$1"
  76. index=`expr "$index" + 1`
  77. shift
  78. v=`eval echo '$'$index`
  79. echo "$v"
  80. }
  81. random_type()
  82. {
  83. # $1 = seed
  84. seed="$1"
  85. r=`./rnd -m 7 -s "$seed"`
  86. select_from "$r" 6 5 8 14 12 0 4
  87. }
  88. if [ $# -ne 3 ]; then usage; fi
  89. count="$1"
  90. type="$2"
  91. seed="$3"
  92. case "$type" in
  93. source) type_arg=6
  94. ;;
  95. destination) type_arg=5
  96. ;;
  97. pointer) type_arg=8
  98. ;;
  99. interface) type_arg=14
  100. ;;
  101. loop) type_arg=12
  102. ;;
  103. text) type_arg=0
  104. ;;
  105. nop) type_arg=4
  106. ;;
  107. random)
  108. ;;
  109. *)
  110. usage
  111. esac
  112. # Start our own driver.
  113. service down $LABEL
  114. sleep 10 # Allow driver to die
  115. service up $EXE -script `pwd`/rs.restart_imm -period 3HZ
  116. i=0
  117. while [ $i -lt "$count" ]
  118. do
  119. echo "Seed: $seed"
  120. if [ "$type" = "random" ]
  121. then
  122. type_arg=`random_type $seed`
  123. fi
  124. do_one "$type_arg" $FAULTS_PER_BLOCK $seed
  125. i=`expr $i + 1`
  126. seed=`expr $seed + 1`
  127. done
  128. connect_blocks=`expr $connect_blocks + 1`
  129. echo "driver crashed after $fault_blocks blocks"
  130. echo "driver failed to connect after $connect_blocks blocks"
  131. # Restart the driver
  132. service refresh $LABEL