RemoteRF 2.2.4__tar.gz → 2.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. {remoterf-2.2.4/src/remoterf.egg-info → remoterf-2.2.5}/PKG-INFO +1 -1
  2. {remoterf-2.2.4 → remoterf-2.2.5}/pyproject.toml +1 -1
  3. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/app.py +5 -2
  4. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/deployment/homes.py +1 -1
  5. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/remoterf_cli.py +4 -4
  6. {remoterf-2.2.4 → remoterf-2.2.5/src/remoterf.egg-info}/PKG-INFO +1 -1
  7. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_cli_login_fresh.py +19 -19
  8. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_homes.py +3 -3
  9. {remoterf-2.2.4 → remoterf-2.2.5}/LICENSE +0 -0
  10. {remoterf-2.2.4 → remoterf-2.2.5}/README.md +0 -0
  11. {remoterf-2.2.4 → remoterf-2.2.5}/setup.cfg +0 -0
  12. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/__init__.py +0 -0
  13. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/__init__.py +0 -0
  14. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/__init__.py +0 -0
  15. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/deployment_capabilities.proto +0 -0
  16. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/deployment_capabilities_pb2.py +0 -0
  17. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/deployment_capabilities_pb2_grpc.py +0 -0
  18. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/grpc.proto +0 -0
  19. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/grpc_pb2.py +0 -0
  20. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/grpc_pb2_grpc.py +0 -0
  21. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/grpc/v2_codec.py +0 -0
  22. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/tos_notice.txt +0 -0
  23. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/utils/__init__.py +0 -0
  24. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/utils/ansi_codes.py +0 -0
  25. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/utils/api_token.py +0 -0
  26. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/utils/banner.py +0 -0
  27. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/utils/list_string.py +0 -0
  28. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/common/utils/process_arg.py +0 -0
  29. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/config/__init__.py +0 -0
  30. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/config/cert_fetcher.py +0 -0
  31. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/config/config.py +0 -0
  32. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/__init__.py +0 -0
  33. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/acc_login.py +0 -0
  34. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/banner_note.txt +0 -0
  35. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/direct_path.py +0 -0
  36. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/dynamic_v2_transport.py +0 -0
  37. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/grpc_acc.py +0 -0
  38. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/grpc_client.py +0 -0
  39. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/secure_channel.py +0 -0
  40. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/core/v2_errors.py +0 -0
  41. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/deployment/__init__.py +0 -0
  42. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/deployment/backend.py +0 -0
  43. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/deployment/direct.py +0 -0
  44. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/deployment/http.py +0 -0
  45. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/deployment/state.py +0 -0
  46. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/__init__.py +0 -0
  47. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/_virtual.py +0 -0
  48. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/adalm_pluto/__init__.py +0 -0
  49. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/adalm_pluto/adalm_pluto_remote.py +0 -0
  50. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/dynamic_device.py +0 -0
  51. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/dynamic_v2.py +0 -0
  52. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/hackrf/__init__.py +0 -0
  53. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/hackrf/hackrf_remote.py +0 -0
  54. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/rtl_sdr/__init__.py +0 -0
  55. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/rtl_sdr/rtl_sdr_remote.py +0 -0
  56. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/sim_sdr/__init__.py +0 -0
  57. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/sim_sdr/sim_sdr_remote.py +0 -0
  58. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/support/__init__.py +0 -0
  59. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/support/ti_mmwave.py +0 -0
  60. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/support/uhd.py +0 -0
  61. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/support/uhd_dsp.py +0 -0
  62. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/support/uhd_v2.py +0 -0
  63. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/ti_mmwave/__init__.py +0 -0
  64. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/ti_mmwave/ti_mmwave_remote.py +0 -0
  65. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/usrp/__init__.py +0 -0
  66. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/usrp/usrp_remote.py +0 -0
  67. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/drivers/usrp/usrp_remote.pyi +0 -0
  68. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf/version.py +0 -0
  69. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf.egg-info/SOURCES.txt +0 -0
  70. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf.egg-info/dependency_links.txt +0 -0
  71. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf.egg-info/entry_points.txt +0 -0
  72. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf.egg-info/requires.txt +0 -0
  73. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf.egg-info/top_level.txt +0 -0
  74. {remoterf-2.2.4 → remoterf-2.2.5}/src/remoterf.py +0 -0
  75. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_banner.py +0 -0
  76. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_config_address.py +0 -0
  77. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_deployment_accounts.py +0 -0
  78. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_direct_path_fixed.py +0 -0
  79. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_direct_path_partner.py +0 -0
  80. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_direct_path_race.py +0 -0
  81. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_dynamic_device_codegen.py +0 -0
  82. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_dynamic_v2.py +0 -0
  83. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_federated_devices.py +0 -0
  84. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_fetch_idl_fallback.py +0 -0
  85. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_finish_prompt.py +0 -0
  86. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_gate_i_direct_path.py +0 -0
  87. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_grpc_client_target.py +0 -0
  88. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_native_account_credentials.py +0 -0
  89. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_native_devices.py +0 -0
  90. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_partner_dynamic_v2.py +0 -0
  91. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_pluto_virtual.py +0 -0
  92. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_process_arg.py +0 -0
  93. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_remoterf_cli.py +0 -0
  94. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_ti_mmwave.py +0 -0
  95. {remoterf-2.2.4 → remoterf-2.2.5}/tests/test_upgrade_rescue.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoterf
3
- Version: 2.2.4
3
+ Version: 2.2.5
4
4
  Summary: A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts.
5
5
  Author-email: Ethan Ge <ethoGalaxy@gmail.com>
6
6
  License-Expression: GPL-3.0-or-later
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoterf"
7
- version = "2.2.4"
7
+ version = "2.2.5"
8
8
  description = "A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts."
9
9
  readme = "README.md"
10
10
  license = "GPL-3.0-or-later"
@@ -258,7 +258,7 @@ def _account_command(command):
258
258
  from ..deployment import homes
259
259
  typed = pending_username or _ask('Username or Email' if account.is_https_home else 'Username')
260
260
  pending_username = None
261
- # `ethan@ucla` typed at ucla is `ethan` there.
261
+ # `alice@ucla` typed at ucla is `alice` there.
262
262
  name, where = homes.split_account(typed)
263
263
  here = homes.GLOBAL_ACCOUNTS if account.is_https_home else home_name
264
264
  account.username = name if where == here else typed
@@ -1628,9 +1628,12 @@ def run(backend=None, *, register=False, enrollment_code=None, server_label=None
1628
1628
  # Continue below the banner rather than wiping the screen: with a
1629
1629
  # stored login the wipe came a split second after everything appeared.
1630
1630
  session_line()
1631
+ from ..deployment import homes
1632
+ # The prompt is the account's full name: alice@ucla, alice@global.
1633
+ where = homes.GLOBAL_ACCOUNTS if account.is_https_home else (home_name or 'remoterf')
1631
1634
  while True:
1632
1635
  try:
1633
- inpu = session.prompt(stylize(f'{account.username}@remoterf: ', Sty.BOLD))
1636
+ inpu = session.prompt(stylize(f'{account.username}@{where}: ', Sty.BOLD))
1634
1637
  if inpu in ('register', 'verify', 'login', 'forgot-password', 'reset-password'):
1635
1638
  authenticated = _account_command(inpu)
1636
1639
  if inpu == 'reset-password' and not welcome(show_banner=False):
@@ -273,7 +273,7 @@ GLOBAL_ACCOUNTS = "global"
273
273
 
274
274
 
275
275
  def split_account(text: str) -> tuple[str, str | None]:
276
- """`ethan@ucla` -> ("ethan", "ucla"). A bare name, or an email (a dot
276
+ """`alice@ucla` -> ("alice", "ucla"). A bare name, or an email (a dot
277
277
  after the @; deployment names never have one), names no deployment."""
278
278
  text = text.strip()
279
279
  name, at, where = text.rpartition("@")
@@ -150,7 +150,7 @@ def print_help() -> None:
150
150
  printf(" remoterf -h | --help", Sty.CYAN, " Show this help", Sty.DEFAULT)
151
151
  print()
152
152
  printf("Commands:", (Sty.BOLD, Sty.MAGENTA))
153
- printf(" remoterf -l | --login [target]", Sty.CYAN, " Login: last used, 'global', a home name, or an account (ethan@ucla)", Sty.DEFAULT)
153
+ printf(" remoterf -l | --login [target]", Sty.CYAN, " Login: last used, 'global', a home name, or an account (username@lab)", Sty.DEFAULT)
154
154
  printf(" remoterf -r | --register [global]", Sty.CYAN, " Register with an enrollment code (or a RemoteRF Global account)", Sty.DEFAULT)
155
155
  printf(" remoterf homes", Sty.CYAN, " List saved deployment homes", Sty.DEFAULT)
156
156
  printf(" remoterf -v | --version", Sty.CYAN, " Print version", Sty.DEFAULT)
@@ -171,7 +171,7 @@ def print_help() -> None:
171
171
  printf(" remoterf --login", Sty.GREEN)
172
172
  printf(" remoterf --login ucla", Sty.GREEN)
173
173
  printf(" remoterf --login global", Sty.GREEN)
174
- printf(" remoterf --login ethan@ucla", Sty.GREEN)
174
+ printf(" remoterf --login jdoe@ucla", Sty.GREEN)
175
175
  printf(" remoterf homes", Sty.GREEN)
176
176
  printf(" remoterf --version", Sty.GREEN)
177
177
  printf(" remoterf --config --addr 203.0.113.10:12321", Sty.GREEN)
@@ -417,10 +417,10 @@ def _login(target: str | None) -> int:
417
417
 
418
418
 
419
419
  def _login_by_username() -> int:
420
- """A fresh install: an account says where it lives (`ethan@ucla`), so
420
+ """A fresh install: an account says where it lives (`alice@ucla`), so
421
421
  asking for it is enough. Enter registers, as `-l` here always did."""
422
422
  try:
423
- name = input('Account, e.g. ethan@ucla (Enter to register): ').strip()
423
+ name = input('Account (username@lab, Enter to register): ').strip()
424
424
  except (EOFError, KeyboardInterrupt):
425
425
  print()
426
426
  return 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoterf
3
- Version: 2.2.4
3
+ Version: 2.2.5
4
4
  Summary: A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts.
5
5
  Author-email: Ethan Ge <ethoGalaxy@gmail.com>
6
6
  License-Expression: GPL-3.0-or-later
@@ -29,14 +29,14 @@ def test_login_on_a_fresh_install_registers_on_enter():
29
29
  def test_an_account_name_says_where_it_lives():
30
30
  from remoterf.deployment.homes import split_account
31
31
 
32
- assert split_account(" ian@ucla ") == ("ian", "ucla")
33
- assert split_account("Ian@UCLA") == ("Ian", "ucla")
34
- assert split_account("ian@global") == ("ian", "global")
35
- assert split_account("ian") == ("ian", None)
36
- assert split_account("ian@ucla.edu") == ("ian@ucla.edu", None) # an email
32
+ assert split_account(" jdoe@ucla ") == ("jdoe", "ucla")
33
+ assert split_account("JDoe@UCLA") == ("JDoe", "ucla")
34
+ assert split_account("jdoe@global") == ("jdoe", "global")
35
+ assert split_account("jdoe") == ("jdoe", None)
36
+ assert split_account("jdoe@ucla.edu") == ("jdoe@ucla.edu", None) # an email
37
37
  assert split_account("a@b@ucla") == ("a@b", "ucla")
38
38
  assert split_account("@ucla") == ("@ucla", None)
39
- assert split_account("ian@") == ("ian@", None)
39
+ assert split_account("jdoe@") == ("jdoe@", None)
40
40
 
41
41
 
42
42
  def test_login_on_a_fresh_install_goes_to_the_lab_in_the_account_name():
@@ -46,7 +46,7 @@ def test_login_on_a_fresh_install_goes_to_the_lab_in_the_account_name():
46
46
  route = {"kind": "relay", "host": "ucla.global.remoterf.net", "port": 12321}
47
47
  with tmp, env, \
48
48
  mock.patch("remoterf.config.config.require_tos_for_login", return_value=True), \
49
- mock.patch("builtins.input", return_value="ian@ucla"), \
49
+ mock.patch("builtins.input", return_value="jdoe@ucla"), \
50
50
  mock.patch("remoterf.deployment.homes.register_home",
51
51
  return_value=("ucla", {"display_name": "UCLA"}, route)) as register_home, \
52
52
  mock.patch.object(remoterf_cli, "_account_shell", return_value=0) as shell:
@@ -54,13 +54,13 @@ def test_login_on_a_fresh_install_goes_to_the_lab_in_the_account_name():
54
54
  register_home.assert_called_once_with("ucla.global.remoterf.net")
55
55
  assert shell.call_args.kwargs["register"] is False
56
56
  assert shell.call_args.kwargs["home"] == "ucla"
57
- assert shell.call_args.kwargs["username"] == "ian"
57
+ assert shell.call_args.kwargs["username"] == "jdoe"
58
58
 
59
59
 
60
60
  def test_login_on_a_fresh_install_global_bare_names_and_emails_go_to_global():
61
61
  from remoterf import remoterf_cli
62
62
 
63
- for typed, username in (("ian@global", "ian"), ("ian", "ian"), ("ian@ucla.edu", "ian@ucla.edu")):
63
+ for typed, username in (("jdoe@global", "jdoe"), ("jdoe", "jdoe"), ("jdoe@ucla.edu", "jdoe@ucla.edu")):
64
64
  tmp, env = _fresh_home()
65
65
  with tmp, env, \
66
66
  mock.patch("remoterf.config.config.require_tos_for_login", return_value=True), \
@@ -78,7 +78,7 @@ def test_login_to_a_lab_that_does_not_answer():
78
78
  tmp, env = _fresh_home()
79
79
  with tmp, env, \
80
80
  mock.patch("remoterf.config.config.require_tos_for_login", return_value=True), \
81
- mock.patch("builtins.input", return_value="ian@nolab"), \
81
+ mock.patch("builtins.input", return_value="jdoe@nolab"), \
82
82
  mock.patch("remoterf.deployment.homes.register_home",
83
83
  side_effect=RuntimeError("no such deployment")) as register_home, \
84
84
  mock.patch.object(remoterf_cli, "_account_shell") as shell:
@@ -96,8 +96,8 @@ def test_login_with_an_account_uses_the_saved_home():
96
96
  mock.patch("remoterf.deployment.homes.homes", return_value={"ucla": {}}), \
97
97
  mock.patch("remoterf.deployment.homes.register_home") as register_home, \
98
98
  mock.patch.object(remoterf_cli, "_use_home", return_value=0) as use_home:
99
- assert remoterf_cli._login("ian@ucla") == 0
100
- use_home.assert_called_once_with("ucla", register=False, username="ian")
99
+ assert remoterf_cli._login("jdoe@ucla") == 0
100
+ use_home.assert_called_once_with("ucla", register=False, username="jdoe")
101
101
  register_home.assert_not_called()
102
102
 
103
103
 
@@ -190,14 +190,14 @@ def _login_at(home, typed, *, https=False, pending=None):
190
190
 
191
191
 
192
192
  def test_a_found_username_is_not_asked_again():
193
- username, ask = _login_at("ucla", None, pending="ian")
194
- assert username == "ian"
193
+ username, ask = _login_at("ucla", None, pending="jdoe")
194
+ assert username == "jdoe"
195
195
  ask.assert_called_once_with("Password (Hidden)", hidden=True)
196
196
 
197
197
 
198
198
  def test_the_full_account_name_works_at_its_own_home_only():
199
- assert _login_at("ucla", "ian@ucla")[0] == "ian"
200
- assert _login_at("ucla", "ian")[0] == "ian"
201
- assert _login_at("otheruni", "ian@ucla")[0] == "ian@ucla" # not this lab's: no such name here
202
- assert _login_at(None, "ian@global", https=True)[0] == "ian"
203
- assert _login_at(None, "ian@ucla.edu", https=True)[0] == "ian@ucla.edu" # an email
199
+ assert _login_at("ucla", "jdoe@ucla")[0] == "jdoe"
200
+ assert _login_at("ucla", "jdoe")[0] == "jdoe"
201
+ assert _login_at("otheruni", "jdoe@ucla")[0] == "jdoe@ucla" # not this lab's: no such name here
202
+ assert _login_at(None, "jdoe@global", https=True)[0] == "jdoe"
203
+ assert _login_at(None, "jdoe@ucla.edu", https=True)[0] == "jdoe@ucla.edu" # an email
@@ -444,7 +444,7 @@ def test_every_command_after_login_goes_native_to_the_home(reachable, monkeypatc
444
444
  return response
445
445
 
446
446
  monkeypatch.setattr(grpc_acc, "rpc_client", rpc_client)
447
- account = grpc_acc.RemoteRFAccount("ethan", "secret")
447
+ account = grpc_acc.RemoteRFAccount("jdoe", "secret")
448
448
  # A deployment-native account is not an HTTPS home: no Global in the path.
449
449
  assert not account.is_https_home
450
450
 
@@ -466,7 +466,7 @@ def test_every_command_after_login_goes_native_to_the_home(reachable, monkeypatc
466
466
  assert token == "reservation-token"
467
467
  # Credentials go to the HOME itself, never through any broker.
468
468
  for _, args in sent:
469
- assert args["un"].string_value == "ethan"
469
+ assert args["un"].string_value == "jdoe"
470
470
 
471
471
  # And the transport those calls ride is this HOME's own direct channel.
472
472
  monkeypatch.setattr("grpc.secure_channel", lambda *a, **k: mock.Mock())
@@ -626,7 +626,7 @@ def test_reserve_shows_the_token_even_when_the_driver_fetch_fails(monkeypatch, c
626
626
 
627
627
  monkeypatch.setattr(grpc_acc, "rpc_client", rpc_client)
628
628
  monkeypatch.setattr("remoterf.drivers.dynamic_device.install_driver", install_driver)
629
- account = grpc_acc.RemoteRFAccount("ethan", "secret")
629
+ account = grpc_acc.RemoteRFAccount("jdoe", "secret")
630
630
  now = datetime.datetime.now()
631
631
 
632
632
  assert account.reserve_device(0, now, now + datetime.timedelta(hours=1)) == "reservation-token"
File without changes
File without changes
File without changes
File without changes
File without changes