00_bootstrap.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import os, sys, mmap
  2. from regression import Regression
  3. loader = sys.argv[1]
  4. # Running Bootstrap
  5. regression = Regression(loader, "bootstrap")
  6. regression.add_check(name="Basic Bootstrapping",
  7. check=lambda res: "User Program Started" in res[0].out)
  8. regression.add_check(name="One Argument Given",
  9. check=lambda res: "# of Arguments: 1" in res[0].out and \
  10. "argv[0] = file:bootstrap" in res[0].out)
  11. regression.add_check(name="Five Arguments Given",
  12. args = ['a', 'b', 'c', 'd'],
  13. check=lambda res: "# of Arguments: 5" in res[0].out and \
  14. "argv[0] = file:bootstrap" in res[0].out and \
  15. "argv[1] = a" in res[0].out and "argv[2] = b" in res[0].out and \
  16. "argv[3] = c" in res[0].out and "argv[4] = d" in res[0].out)
  17. rv = regression.run_checks()
  18. if rv: sys.exit(rv)
  19. regression = Regression(loader, "bootstrap-c++")
  20. regression.add_check(name="Basic Bootstrapping (C++)",
  21. check=lambda res: "User Program Started" in res[0].out)
  22. rv = regression.run_checks()
  23. if rv: sys.exit(rv)
  24. # Running Exec
  25. regression = Regression(loader, "exec")
  26. regression.add_check(name="2 page child binary",
  27. check=lambda res: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 " in res[0].out)
  28. rv = regression.run_checks()
  29. if rv: sys.exit(rv)
  30. # Running fork and exec
  31. regression = Regression(loader, "fork_and_exec")
  32. regression.add_check(name="fork and exec 2 page child binary",
  33. check=lambda res: "child exited with status: 0" in res[0].out and \
  34. "test completed successfully" in res[0].out)
  35. rv = regression.run_checks()
  36. if rv: sys.exit(rv)
  37. # Running vfork and exec
  38. regression = Regression(loader, "vfork_and_exec")
  39. regression.add_check(name="vfork and exec 2 page child binary",
  40. check=lambda res: "child exited with status: 0" in res[0].out and \
  41. "test completed successfully" in res[0].out)
  42. rv = regression.run_checks()
  43. if rv: sys.exit(rv)
  44. # Running execve with invalid pointers in arguments
  45. regression = Regression(loader, "exec_invalid_args")
  46. regression.add_check(name="Execve with invalid pointers in arguments",
  47. check=lambda res: "execve(invalid-path) correctly returned error" in res[0].out and \
  48. "execve(invalid-argv-ptr) correctly returned error" in res[0].out and \
  49. "execve(invalid-envp-ptr) correctly returned error" in res[0].out and \
  50. "execve(invalid-argv) correctly returned error" in res[0].out and \
  51. "execve(invalid-envp) correctly returned error" in res[0].out)
  52. rv = regression.run_checks()
  53. if rv: sys.exit(rv)
  54. # Shared Object Test
  55. regression = Regression(loader, "shared_object")
  56. regression.add_check(name="Shared Object",
  57. check=lambda res: "Hello world" in res[0].out)
  58. rv = regression.run_checks()
  59. if rv: sys.exit(rv)
  60. # Exit test
  61. regression = Regression(loader, "exit")
  62. regression.add_check(name="Exit Code Propagation",
  63. check=lambda res: 113 == res[0].code)
  64. rv = regression.run_checks()
  65. if rv: sys.exit(rv)
  66. # Early abort test
  67. regression = Regression(loader, "init_fail")
  68. regression.add_check(name="Early abort",
  69. check=lambda res: res[0].code != 42 and res[0].code != 0)
  70. rv = regression.run_checks()
  71. if rv: sys.exit(rv)