-// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
break;
case 'v':
- // Print just Kea version and exit
- std::cout << getVersion(false) << std::endl;
- exit(EXIT_SUCCESS);
+ // gather Kea version and throw so main() can catch and return
+ // rather than calling exit() here which disrupts gtest.
+ isc_throw(VersionMessage, getVersion(false));
+ break;
case 'V':
- // Print extended Kea version and exit
- std::cout << getVersion(true) << std::endl;
- exit(EXIT_SUCCESS);
+ // gather Kea version and throw so main() can catch and return
+ // rather than calling exit() here which disrupts gtest.
+ isc_throw(VersionMessage, getVersion(true));
+ break;
case 'c':
// config file name
-// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
isc::Exception(file, line, what) { };
};
+/// @brief Exception used to convey version info upwards.
+/// Since command line argument parsing is done as part of
+/// DControllerBase::launch(), it uses this exception to propagate
+/// version information up to main(), when command line argument
+/// -v or -V is given.
+class VersionMessage : public isc::Exception {
+public:
+ VersionMessage(const char* file, size_t line, const char* what) :
+ isc::Exception(file, line, what) { };
+};
+
+
/// @brief Exception thrown when the application process fails.
class ProcessInitError: public isc::Exception {
public:
/// @param argc is the number of command line arguments supplied
/// @param argv is the array of string (char *) command line arguments
///
- /// @throw throws InvalidUsage when there are usage errors.
+ /// @throw InvalidUsage when there are usage errors.
+ /// @throw VersionMessage if the -v or -V arguments is given.
void parseArgs(int argc, char* argv[]);
/// @brief Instantiates the application process and then initializes it.
-// Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013, 2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
try {
// 'false' value disables test mode.
controller->launch(argc, argv, false);
+ } catch (const VersionMessage& ex) {
+ std::cout << ex.what() << std::endl;
} catch (const isc::Exception& ex) {
std::cerr << "Service failed:" << ex.what() << std::endl;
ret = EXIT_FAILURE;