ASSERT_TRUE(cfg);
StdoutControlSocketPtr scs(new StdoutControlSocket(cfg));
ASSERT_TRUE(scs);
- EXPECT_THROW(scs->configGet("foo"), NotImplemented);
+ EXPECT_THROW_MSG(scs->configGet("foo"), NotImplemented,
+ "No config-get for stdout control socket");
}
// Verifies that a stdout control socket does not nothing for configTest.
thread_.reset(new thread([this]() { waitReady(); }));
// Try configGet: it should get a communication error,
- EXPECT_THROW(ucs->configGet("foo"), ControlSocketError);
+ EXPECT_THROW_MSG(ucs->configGet("foo"), ControlSocketError,
+ "communication error: No such file or directory");
signalReady();
}
EXPECT_EQ(1, ctx.getCfgServersMap()->size());
ASSERT_NO_THROW_LOG(ctx.getCfgServersMap()->at("d2"));
EXPECT_EQ(server1, ctx.getCfgServersMap()->at("d2"));
- EXPECT_THROW(ctx.getCfgServersMap()->at("dhcp4"), std::out_of_range);
+ EXPECT_FALSE(ctx.getCfgServersMap()->contains("dhcp4"));
// Now set the v6 server and sanity check again
EXPECT_NO_THROW_LOG(ctx.getCfgServersMap()->insert(make_pair("dhcp6", server2)));
EXPECT_EQ(0, globals->mapValue().size());
// Attempting to extract globals from a non-map should throw.
- ASSERT_THROW(ctx.extractConfiguredGlobals(Element::create(777)), BadValue);
+ EXPECT_THROW_MSG(ctx.extractConfiguredGlobals(Element::create(777)), BadValue,
+ "extractConfiguredGlobals must be given a map element");
// Now let's create a configuration from which to extract global scalars.
// Extraction (currently) has no business logic, so the elements we use
char* argv2[] = { const_cast<char*>("progName"),
const_cast<char*>("-x") };
argc = 2;
- EXPECT_THROW(parseArgs(argc, argv2), InvalidUsage);
+ EXPECT_THROW_MSG(parseArgs(argc, argv2), InvalidUsage, "unsupported option: [x] ");
}
// Tests application process creation and initialization.
// Verify that the constructor will fail if given an empty
// io service.
IOServicePtr lcl_io_service;
- EXPECT_THROW(NetconfProcess("TestProcess", lcl_io_service),
- DProcessBaseError);
+ EXPECT_THROW_MSG(NetconfProcess("TestProcess", lcl_io_service), DProcessBaseError,
+ "IO Service cannot be null");
// Verify that the constructor succeeds with a valid io_service
lcl_io_service.reset(new IOService());
/// @param json the JSON configuration with the duplicate entry.
void testDuplicate(ConstElementPtr json) {
string config = json->str();
+ SCOPED_TRACE("\n* Tested config: \n---\n" + json->str() + "\n---");
+
size_t where = config.find("DDDD");
ASSERT_NE(string::npos, where);
string before = config.substr(0, where);
string after = config.substr(where + 4, string::npos);
ParserContext ctx;
- EXPECT_THROW(ctx.parseString(before + after,
- ParserContext::PARSER_NETCONF),
- ParseError) << "config: " << config;
+ EXPECT_THROW(ctx.parseString(before + after, ParserContext::PARSER_NETCONF), ParseError);
}
// This test checks that duplicate entries make parsing to fail.
continue;
}
+ SCOPED_TRACE("\n* Tested duplicate element: " + elem.first);
+
// Perform tests.
string dup = elem.first + "DDDD";
json->set(dup, elem.second);
"}";
ConstElementPtr json;
ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
- EXPECT_THROW(AdaptorOption::checkType(json), MissingKey);
+ EXPECT_THROW_MSG(AdaptorOption::checkType(json), MissingKey,
+ "missing type in option definition { }");
}
// Verifies that checkCode accepts an option with code.
"}";
ConstElementPtr json;
ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
- EXPECT_THROW(AdaptorOption::checkCode(json), MissingKey);
+ EXPECT_THROW_MSG(AdaptorOption::checkCode(json), MissingKey, "missing code in option { }");
}
// Verifies that collect works as expected.
ASSERT_NO_THROW_LOG(AdaptorOption::collect(json, codes));
EXPECT_EQ(1, codes.size());
EXPECT_EQ(123, codes["bar@foo"]);
- EXPECT_THROW(codes.at("foo@bar"), out_of_range);
+ EXPECT_FALSE(codes.contains("foo@bar"));
}
// Verifies that collect skips an already known option definition.
ElementPtr json;
ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
OptionCodes codes;
- EXPECT_THROW(AdaptorOption::setCode(json, codes), MissingKey);
+ EXPECT_THROW_MSG(AdaptorOption::setCode(json, codes), MissingKey,
+ "missing name and code in option { \"space\": \"bar\" }");
}
// Note the code assumes there is a space, i.e. setSpace was called.
ElementPtr json;
ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
OptionCodes codes;
- EXPECT_THROW(AdaptorOption::setCode(json, codes), MissingKey);
+ EXPECT_THROW_MSG(AdaptorOption::setCode(json, codes), MissingKey,
+ "can't get code from option { \"name\": \"foo\", \"space\": \"bar\" }");
}
/// @brief Test class to make initCodes public.
ASSERT_NO_THROW_LOG(AdaptorOption::initCodes(codes, DHCP4_OPTION_SPACE));
EXPECT_EQ(DHO_SUBNET_MASK, codes["dhcp4@subnet-mask"]);
EXPECT_EQ(DHO_TIME_OFFSET, codes["dhcp4@time-offset"]);
- EXPECT_THROW(codes.at("dhcp6@clientid"), out_of_range);
+ EXPECT_FALSE(codes.contains("dhcp6@clientid"));
// initCodes loads last resort too.
EXPECT_EQ(DHO_VENDOR_ENCAPSULATED_OPTIONS,
ASSERT_NO_THROW_LOG(AdaptorOption::initCodes(codes, DHCP6_OPTION_SPACE));
EXPECT_EQ(D6O_CLIENTID, codes["dhcp6@clientid"]);
EXPECT_EQ(D6O_SERVERID, codes["dhcp6@serverid"]);
- EXPECT_THROW(codes.at("dhcp4@subnet-mask"), out_of_range);
+ EXPECT_FALSE(codes.contains("dhcp4@subnet-mask"));
// initCodes loads DOCSIS3 too.
EXPECT_EQ(32, codes["vendor-4491@tftp-servers"]);
EXPECT_TRUE(copied->equals(*json));
// Check that the model name is actually checked.
- EXPECT_THROW(AdaptorPool::fromSubnet("non-existent-module", json, pools),
- NotImplemented);
+ EXPECT_THROW_MSG(AdaptorPool::fromSubnet("non-existent-module", json, pools), NotImplemented,
+ "fromSubnet not implemented for the model: non-existent-module");
}
// Verifies that fromSubnet works as expected.
EXPECT_NO_THROW_LOG(AdaptorPool::toSubnet(KEA_DHCP6_SERVER, json, pools));
EXPECT_TRUE(copied->equals(*json));
// Model name is not free: an error is raised if it is not expected.
- EXPECT_THROW(AdaptorPool::toSubnet("keatest-module", json, pools),
- NotImplemented);
+ EXPECT_THROW_MSG(AdaptorPool::toSubnet("keatest-module", json, pools), NotImplemented,
+ "toSubnet not implemented for the model: keatest-module");
}
// Verifies that toSubnet works as expected.
ElementPtr json;
ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
ConstElementPtr pools = json->get("pools");
- EXPECT_THROW(AdaptorPool::toSubnet(IETF_DHCPV6_SERVER, json, pools),
- BadValue);
+ EXPECT_THROW_MSG(AdaptorPool::toSubnet(IETF_DHCPV6_SERVER, json, pools), BadValue,
+ "inconsistent value of rebind-timer in [ { \"pool\": \"2001:db8:1::/80\", "
+ "\"rebind-timer\": 2000 }, { \"pool\": \"2001:db8:1:0:1::/80\", "
+ "\"rebind-timer\": 20 } ]");
}
}; // end of anonymous namespace
EXPECT_TRUE(json->equals(*Element::fromJSON(expected)));
// param[345] have different values so it should throw.
- EXPECT_THROW(Adaptor::toParent("param3",json, json->get("list")),
- BadValue);
- EXPECT_THROW(Adaptor::toParent("param4",json, json->get("list")),
- BadValue);
- EXPECT_THROW(Adaptor::toParent("param5",json, json->get("list")),
- BadValue);
+ EXPECT_THROW_MSG(Adaptor::toParent("param3", json, json->get("list")), BadValue,
+ "inconsistent value of param3 in [ { \"param3\": 234, \"param4\": true }, { "
+ "\"another\": \"entry\", \"param3\": 123, \"param5\": false } ]");
+ EXPECT_THROW_MSG(Adaptor::toParent("param4", json, json->get("list")), BadValue,
+ "inconsistent value of param4 in [ { \"param3\": 234, \"param4\": true }, { "
+ "\"another\": \"entry\", \"param3\": 123, \"param5\": false } ]");
+ EXPECT_THROW_MSG(Adaptor::toParent("param5", json, json->get("list")), BadValue,
+ "inconsistent value of param5 in [ { \"param3\": 234, \"param4\": true }, { "
+ "\"another\": \"entry\", \"param3\": 123, \"param5\": false } ]");
+
// And not modify the value.
EXPECT_TRUE(json->equals(*Element::fromJSON(expected)));
}
// Not found.
xpath = "/keatest-module:main/no_such_string";
- EXPECT_THROW(t_obj->deleteItem(xpath), NetconfError);
- EXPECT_THROW(elem = t_obj->getItem(xpath), NetconfError);
+ EXPECT_THROW_MSG(t_obj->deleteItem(xpath), NetconfError,
+ "sysrepo error getting item at '/keatest-module:main/no_such_string': "
+ "Couldn't find schema node: /keatest-module:main/no_such_string");
+ EXPECT_THROW_MSG(elem = t_obj->getItem(xpath), NetconfError,
+ "sysrepo error getting item at '/keatest-module:main/no_such_string': "
+ "Couldn't find schema node: /keatest-module:main/no_such_string");
EXPECT_FALSE(elem);
elem.reset();
// Container.
elem = Element::createMap();
- EXPECT_THROW(TranslatorBasic::translate(elem, LeafBaseType::Unknown), NotImplemented);
+ EXPECT_THROW_MSG(TranslatorBasic::translate(elem, LeafBaseType::Unknown), NotImplemented,
+ "TranslatorBasic::value(): map element");
// List.
elem = Element::createList();
- EXPECT_THROW(TranslatorBasic::translate(elem, LeafBaseType::Unknown), NotImplemented);
+ EXPECT_THROW_MSG(TranslatorBasic::translate(elem, LeafBaseType::Unknown), NotImplemented,
+ "TranslatorBasic::value(): list element");
// String.
string str("foo");