async def METHOD_NAME(
    mock_initiator_run: AsyncMock,
    mock_downloader_run: AsyncMock,
    mock_eraser_run: AsyncMock,
    mock_hex_record_builder: MagicMock,
    should_erase: bool,
    mock_path_exists: MagicMock,
    hex_file_path: str,
) -> None:
    """It should call all the functions."""
    mock_can_messenger = AsyncMock()
    mock_usb_messenger = AsyncMock()
    mock_hex_record_processor = MagicMock()
    mock_hex_record_builder.return_value = mock_hex_record_processor
    target = Target.from_single_node(NodeId.head)
    update_details: Dict[FirmwareTarget, str] = {
        target.system_node: hex_file_path,
    }
    updater = RunUpdate(
        can_messenger=mock_can_messenger,
        usb_messenger=mock_usb_messenger,
        update_details=update_details,
        retry_count=12,
        timeout_seconds=11,
        erase=should_erase,
    )
    with mock.patch("os.path.exists"), mock.patch("builtins.open"):
        await updater._run_can_update(
            messenger=mock_can_messenger,
            node_id=target.system_node,
            filepath=hex_file_path,
            retry_count=12,
            timeout_seconds=11,
            erase=should_erase,
        )
    mock_initiator_run.assert_called_once_with(
        target=target, retry_count=12, ready_wait_time_sec=11
    )
    if should_erase:
        mock_eraser_run.assert_called_once_with(
            node_id=target.bootloader_node, timeout_sec=60
        )
    else:
        mock_eraser_run.assert_not_called()
    mock_downloader_run.assert_called_once_with(
        node_id=target.bootloader_node,
        hex_processor=mock_hex_record_processor,
        ack_wait_seconds=11,
    )
    mock_can_messenger.send.assert_called_once_with(
        node_id=target.bootloader_node, message=FirmwareUpdateStartApp()
    )