test_blackmagicprobe.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # Copyright (c) 2018 Foundries.io
  2. # Copyright (c) 2019 Nordic Semiconductor ASA.
  3. #
  4. # SPDX-License-Identifier: Apache-2.0
  5. import argparse
  6. from unittest.mock import patch, call
  7. import pytest
  8. from runners.blackmagicprobe import BlackMagicProbeRunner
  9. from conftest import RC_KERNEL_ELF, RC_GDB
  10. TEST_GDB_SERIAL = 'test-gdb-serial'
  11. # Expected subprocesses to be run for each command. Using the
  12. # runner_config fixture (and always specifying gdb-serial) means we
  13. # don't get 100% coverage, but it's a starting out point.
  14. EXPECTED_COMMANDS = {
  15. 'attach':
  16. ([RC_GDB,
  17. '-ex', "set confirm off",
  18. '-ex', "target extended-remote {}".format(TEST_GDB_SERIAL),
  19. '-ex', "monitor swdp_scan",
  20. '-ex', "attach 1",
  21. '-ex', "file {}".format(RC_KERNEL_ELF)],),
  22. 'debug':
  23. ([RC_GDB,
  24. '-ex', "set confirm off",
  25. '-ex', "target extended-remote {}".format(TEST_GDB_SERIAL),
  26. '-ex', "monitor swdp_scan",
  27. '-ex', "attach 1",
  28. '-ex', "file {}".format(RC_KERNEL_ELF),
  29. '-ex', "load {}".format(RC_KERNEL_ELF)],),
  30. 'flash':
  31. ([RC_GDB,
  32. '-ex', "set confirm off",
  33. '-ex', "target extended-remote {}".format(TEST_GDB_SERIAL),
  34. '-ex', "monitor swdp_scan",
  35. '-ex', "attach 1",
  36. '-ex', "load {}".format(RC_KERNEL_ELF),
  37. '-ex', "kill",
  38. '-ex', "quit",
  39. '-silent'],),
  40. }
  41. def require_patch(program):
  42. assert program == RC_GDB
  43. @pytest.mark.parametrize('command', EXPECTED_COMMANDS)
  44. @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
  45. @patch('runners.core.ZephyrBinaryRunner.check_call')
  46. def test_blackmagicprobe_init(cc, req, command, runner_config):
  47. '''Test commands using a runner created by constructor.'''
  48. runner = BlackMagicProbeRunner(runner_config, TEST_GDB_SERIAL)
  49. runner.run(command)
  50. assert cc.call_args_list == [call(x) for x in EXPECTED_COMMANDS[command]]
  51. @pytest.mark.parametrize('command', EXPECTED_COMMANDS)
  52. @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
  53. @patch('runners.core.ZephyrBinaryRunner.check_call')
  54. def test_blackmagicprobe_create(cc, req, command, runner_config):
  55. '''Test commands using a runner created from command line parameters.'''
  56. args = ['--gdb-serial', TEST_GDB_SERIAL]
  57. parser = argparse.ArgumentParser()
  58. BlackMagicProbeRunner.add_parser(parser)
  59. arg_namespace = parser.parse_args(args)
  60. runner = BlackMagicProbeRunner.create(runner_config, arg_namespace)
  61. runner.run(command)
  62. assert cc.call_args_list == [call(x) for x in EXPECTED_COMMANDS[command]]