From 07f685dc481a03bf67a239d1e72202378f5db8fd Mon Sep 17 00:00:00 2001 From: Ryan Eckenrode <77176215+reckenro@users.noreply.github.com> Date: Fri, 29 Jul 2022 14:16:34 -0700 Subject: [PATCH] Updates behavior when new session name is in use in different resource repository. (#687) * Update code to fail unit test. * Throw exception instead of returning warning status. * Updated test passes. * Update codegen to catch SessionException in init methods * Simplify error message for already used session name. --- generated/nidaqmx/nidaqmx_service.cpp | 12 +++++++++ generated/nidcpower/nidcpower_service.cpp | 6 +++++ .../nidigitalpattern_service.cpp | 6 +++++ generated/nidmm/nidmm_service.cpp | 6 +++++ generated/nifake/nifake_service.cpp | 9 +++++++ .../nifake_non_ivi/nifake_non_ivi_service.cpp | 21 +++++++++++++++ generated/nifgen/nifgen_service.cpp | 9 +++++++ .../nirfmxbluetooth_service.cpp | 6 +++++ generated/nirfmxinstr/nirfmxinstr_service.cpp | 12 +++++++++ generated/nirfmxlte/nirfmxlte_service.cpp | 6 +++++ generated/nirfmxnr/nirfmxnr_service.cpp | 6 +++++ .../nirfmxspecan/nirfmxspecan_service.cpp | 6 +++++ generated/nirfmxwlan/nirfmxwlan_service.cpp | 6 +++++ generated/nirfsa/nirfsa_service.cpp | 6 +++++ generated/nirfsg/nirfsg_service.cpp | 6 +++++ generated/niscope/niscope_service.cpp | 6 +++++ generated/niswitch/niswitch_service.cpp | 9 +++++++ generated/nisync/nisync_service.cpp | 6 +++++ generated/nixnet/nixnet_service.cpp | 18 +++++++++++++ .../nixnetsocket/nixnetsocket_service.cpp | 12 +++++++++ source/codegen/templates/service.cpp.mako | 5 ++++ source/server/session_resource_repository.h | 6 ++--- source/server/shared_library.h | 6 +++++ .../session_resource_repository_tests.cpp | 27 ++++++++++++------- 24 files changed, 205 insertions(+), 13 deletions(-) diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 8294a9892..9617a74e6 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -6709,6 +6709,9 @@ namespace nidaqmx_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -6761,6 +6764,9 @@ namespace nidaqmx_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -6793,6 +6799,9 @@ namespace nidaqmx_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -12146,6 +12155,9 @@ namespace nidaqmx_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nidcpower/nidcpower_service.cpp b/generated/nidcpower/nidcpower_service.cpp index 2fbad26c9..fb82e3742 100644 --- a/generated/nidcpower/nidcpower_service.cpp +++ b/generated/nidcpower/nidcpower_service.cpp @@ -791,6 +791,9 @@ namespace nidcpower_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2880,6 +2883,9 @@ namespace nidcpower_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nidigitalpattern/nidigitalpattern_service.cpp b/generated/nidigitalpattern/nidigitalpattern_service.cpp index e59d747a0..49cfd1674 100644 --- a/generated/nidigitalpattern/nidigitalpattern_service.cpp +++ b/generated/nidigitalpattern/nidigitalpattern_service.cpp @@ -2478,6 +2478,9 @@ namespace nidigitalpattern_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2515,6 +2518,9 @@ namespace nidigitalpattern_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nidmm/nidmm_service.cpp b/generated/nidmm/nidmm_service.cpp index aa18b275b..aa6f5ccc3 100644 --- a/generated/nidmm/nidmm_service.cpp +++ b/generated/nidmm/nidmm_service.cpp @@ -2005,6 +2005,9 @@ namespace nidmm_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2042,6 +2045,9 @@ namespace nidmm_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nifake/nifake_service.cpp b/generated/nifake/nifake_service.cpp index a1771d1df..c34cc70fe 100644 --- a/generated/nifake/nifake_service.cpp +++ b/generated/nifake/nifake_service.cpp @@ -1265,6 +1265,9 @@ namespace nifake_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1296,6 +1299,9 @@ namespace nifake_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1346,6 +1352,9 @@ namespace nifake_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nifake_non_ivi/nifake_non_ivi_service.cpp b/generated/nifake_non_ivi/nifake_non_ivi_service.cpp index 1dc04cbf6..6fc575c02 100644 --- a/generated/nifake_non_ivi/nifake_non_ivi_service.cpp +++ b/generated/nifake_non_ivi/nifake_non_ivi_service.cpp @@ -120,6 +120,9 @@ namespace nifake_non_ivi_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -362,6 +365,9 @@ namespace nifake_non_ivi_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -393,6 +399,9 @@ namespace nifake_non_ivi_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -430,6 +439,9 @@ namespace nifake_non_ivi_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -459,6 +471,9 @@ namespace nifake_non_ivi_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -489,6 +504,9 @@ namespace nifake_non_ivi_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -519,6 +537,9 @@ namespace nifake_non_ivi_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nifgen/nifgen_service.cpp b/generated/nifgen/nifgen_service.cpp index 394a1c163..9cf79c333 100644 --- a/generated/nifgen/nifgen_service.cpp +++ b/generated/nifgen/nifgen_service.cpp @@ -2447,6 +2447,9 @@ namespace nifgen_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2484,6 +2487,9 @@ namespace nifgen_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2521,6 +2527,9 @@ namespace nifgen_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfmxbluetooth/nirfmxbluetooth_service.cpp b/generated/nirfmxbluetooth/nirfmxbluetooth_service.cpp index 9d3574169..83544292b 100644 --- a/generated/nirfmxbluetooth/nirfmxbluetooth_service.cpp +++ b/generated/nirfmxbluetooth/nirfmxbluetooth_service.cpp @@ -2417,6 +2417,9 @@ namespace nirfmxbluetooth_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2452,6 +2455,9 @@ namespace nirfmxbluetooth_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfmxinstr/nirfmxinstr_service.cpp b/generated/nirfmxinstr/nirfmxinstr_service.cpp index 05be36b3f..7dd07b709 100644 --- a/generated/nirfmxinstr/nirfmxinstr_service.cpp +++ b/generated/nirfmxinstr/nirfmxinstr_service.cpp @@ -1717,6 +1717,9 @@ namespace nirfmxinstr_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1898,6 +1901,9 @@ namespace nirfmxinstr_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1933,6 +1939,9 @@ namespace nirfmxinstr_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1974,6 +1983,9 @@ namespace nirfmxinstr_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfmxlte/nirfmxlte_service.cpp b/generated/nirfmxlte/nirfmxlte_service.cpp index 0265da843..792e6a2d7 100644 --- a/generated/nirfmxlte/nirfmxlte_service.cpp +++ b/generated/nirfmxlte/nirfmxlte_service.cpp @@ -4241,6 +4241,9 @@ namespace nirfmxlte_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -4276,6 +4279,9 @@ namespace nirfmxlte_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfmxnr/nirfmxnr_service.cpp b/generated/nirfmxnr/nirfmxnr_service.cpp index ff9b1531e..b12d3243b 100644 --- a/generated/nirfmxnr/nirfmxnr_service.cpp +++ b/generated/nirfmxnr/nirfmxnr_service.cpp @@ -3324,6 +3324,9 @@ namespace nirfmxnr_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -3359,6 +3362,9 @@ namespace nirfmxnr_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfmxspecan/nirfmxspecan_service.cpp b/generated/nirfmxspecan/nirfmxspecan_service.cpp index 1e06aeb6b..80c385f49 100644 --- a/generated/nirfmxspecan/nirfmxspecan_service.cpp +++ b/generated/nirfmxspecan/nirfmxspecan_service.cpp @@ -7727,6 +7727,9 @@ namespace nirfmxspecan_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -7762,6 +7765,9 @@ namespace nirfmxspecan_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfmxwlan/nirfmxwlan_service.cpp b/generated/nirfmxwlan/nirfmxwlan_service.cpp index e1356d47b..7fb76b948 100644 --- a/generated/nirfmxwlan/nirfmxwlan_service.cpp +++ b/generated/nirfmxwlan/nirfmxwlan_service.cpp @@ -2641,6 +2641,9 @@ namespace nirfmxwlan_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2676,6 +2679,9 @@ namespace nirfmxwlan_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfsa/nirfsa_service.cpp b/generated/nirfsa/nirfsa_service.cpp index c0aad35cd..d050e77a3 100644 --- a/generated/nirfsa/nirfsa_service.cpp +++ b/generated/nirfsa/nirfsa_service.cpp @@ -2283,6 +2283,9 @@ namespace nirfsa_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2320,6 +2323,9 @@ namespace nirfsa_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nirfsg/nirfsg_service.cpp b/generated/nirfsg/nirfsg_service.cpp index 2d32c6b24..cf0e88ac0 100644 --- a/generated/nirfsg/nirfsg_service.cpp +++ b/generated/nirfsg/nirfsg_service.cpp @@ -2280,6 +2280,9 @@ namespace nirfsg_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2317,6 +2320,9 @@ namespace nirfsg_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/niscope/niscope_service.cpp b/generated/niscope/niscope_service.cpp index 1285b5443..eca8b2913 100644 --- a/generated/niscope/niscope_service.cpp +++ b/generated/niscope/niscope_service.cpp @@ -2016,6 +2016,9 @@ namespace niscope_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -2053,6 +2056,9 @@ namespace niscope_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/niswitch/niswitch_service.cpp b/generated/niswitch/niswitch_service.cpp index 6f442730e..57883d567 100644 --- a/generated/niswitch/niswitch_service.cpp +++ b/generated/niswitch/niswitch_service.cpp @@ -1031,6 +1031,9 @@ namespace niswitch_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1068,6 +1071,9 @@ namespace niswitch_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1105,6 +1111,9 @@ namespace niswitch_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nisync/nisync_service.cpp b/generated/nisync/nisync_service.cpp index 9d10d3998..a1ddd9ab5 100644 --- a/generated/nisync/nisync_service.cpp +++ b/generated/nisync/nisync_service.cpp @@ -74,6 +74,9 @@ namespace nisync_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1565,6 +1568,9 @@ namespace nisync_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nixnet/nixnet_service.cpp b/generated/nixnet/nixnet_service.cpp index d9dfd775f..770f5ffff 100644 --- a/generated/nixnet/nixnet_service.cpp +++ b/generated/nixnet/nixnet_service.cpp @@ -395,6 +395,9 @@ namespace nixnet_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -449,6 +452,9 @@ namespace nixnet_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -543,6 +549,9 @@ namespace nixnet_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -620,6 +629,9 @@ namespace nixnet_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -796,6 +808,9 @@ namespace nixnet_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1397,6 +1412,9 @@ namespace nixnet_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/generated/nixnetsocket/nixnetsocket_service.cpp b/generated/nixnetsocket/nixnetsocket_service.cpp index 8dc15bba9..08c768b2f 100644 --- a/generated/nixnetsocket/nixnetsocket_service.cpp +++ b/generated/nixnetsocket/nixnetsocket_service.cpp @@ -83,6 +83,9 @@ namespace nixnetsocket_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -638,6 +641,9 @@ namespace nixnetsocket_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -748,6 +754,9 @@ namespace nixnetsocket_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- @@ -1158,6 +1167,9 @@ namespace nixnetsocket_grpc { catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } } //--------------------------------------------------------------------- diff --git a/source/codegen/templates/service.cpp.mako b/source/codegen/templates/service.cpp.mako index dd057c751..92aedffa2 100644 --- a/source/codegen/templates/service.cpp.mako +++ b/source/codegen/templates/service.cpp.mako @@ -144,6 +144,11 @@ ${mako_helper.define_simple_method_body(function_name=function_name, function_da catch (nidevice_grpc::LibraryLoadException& ex) { return ::grpc::Status(::grpc::NOT_FOUND, ex.what()); } +% if common_helpers.is_init_method(function_data): + catch (nidevice_grpc::SessionException& ex) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, ex.what()); + } +% endif % if service_helpers.requires_checked_conversion(parameters, custom_types): catch (nidevice_grpc::ValueOutOfRangeException& ex) { return ::grpc::Status(::grpc::OUT_OF_RANGE, ex.what()); diff --git a/source/server/session_resource_repository.h b/source/server/session_resource_repository.h index 5b7e6610d..459fbee39 100644 --- a/source/server/session_resource_repository.h +++ b/source/server/session_resource_repository.h @@ -6,6 +6,7 @@ #include #include "session_repository.h" +#include "shared_library.h" namespace nidevice_grpc { @@ -112,11 +113,8 @@ int SessionResourceRepository::add_session( } // session_name resolves to a session in a different resource repository. - // Report error. if (!resource_map_->contains(session_from_repository)) { - session_id = 0; - const int kError_InvalidArg = 1; - return kError_InvalidArg; + throw nidevice_grpc::SessionException("The session name \"" + session_name + "\" is being used by a different driver."); } session_id = session_from_repository; diff --git a/source/server/shared_library.h b/source/server/shared_library.h index 68adcbb3d..8cd3506d5 100644 --- a/source/server/shared_library.h +++ b/source/server/shared_library.h @@ -22,6 +22,12 @@ struct LibraryLoadException : std::runtime_error { LibraryLoadException(const LibraryLoadException& other) : std::runtime_error(other) {} }; +struct SessionException : std::runtime_error { + SessionException(const std::string& message) : std::runtime_error(message) {} + SessionException(const char* message) : std::runtime_error(message) {} + SessionException(const SessionException& other) : std::runtime_error(other) {} +}; + class SharedLibrary { public: SharedLibrary(); diff --git a/source/tests/unit/session_resource_repository_tests.cpp b/source/tests/unit/session_resource_repository_tests.cpp index df3de505e..725deea44 100644 --- a/source/tests/unit/session_resource_repository_tests.cpp +++ b/source/tests/unit/session_resource_repository_tests.cpp @@ -246,7 +246,7 @@ TEST(SessionResourceRepositoryTests, AddSessionResource_AccessFromDifferentRepos EXPECT_EQ(kNoSession, session_from_other_repository); } -TEST(SessionResourceRepositoryTests, AddSessionResource_AddSessionWithSameNameFromDifferentRepository_FailsWithoutCallingInit) +TEST(SessionResourceRepositoryTests, AddSessionResource_AddSessionWithSameNameFromDifferentRepository_ThrowsSessionException) { SessionRepository repository; SessionResourceRepository resource_repository( @@ -265,15 +265,24 @@ TEST(SessionResourceRepositoryTests, AddSessionResource_AddSessionWithSameNameFr const int32_t kErrorCode = 9999; using MockInitDelegate = ::testing::MockFunction(void)>; MockInitDelegate mock_init; - uint32_t second_session_id; - result = other_resource_repository.add_session( - kTestResource, - mock_init.AsStdFunction(), - [](int32_t handle) { FAIL() << "Unexpected Cleanup"; }, - second_session_id); - + uint32_t second_session_id = kNoSession; + EXPECT_THROW( + { + try { + result = other_resource_repository.add_session( + kTestResource, + mock_init.AsStdFunction(), + [](int32_t handle) { FAIL() << "Unexpected Cleanup"; }, + second_session_id); + } + catch (const nidevice_grpc::SessionException& ex) { + const std::string expected_message("The session name \"" + kTestResource + "\" is being used by a different driver."); + EXPECT_STREQ(expected_message.c_str(), ex.what()); + throw; + } + }, + nidevice_grpc::SessionException); EXPECT_EQ(kNoSession, second_session_id); - EXPECT_NE(kNoError, result); } template