Commit ddb94ad8 authored by Michal 'vorner' Vaner's avatar Michal 'vorner' Vaner
Browse files

[805] Test when rollback doesn't work

* The test fails
* It should at last return and get to some consistent state (eg. not
  listening on anything).
parent 9ec8253a
......@@ -144,7 +144,7 @@ struct InstallListenAddresses : public ::testing::Test,
public SocketRequestor {
InstallListenAddresses() :
dnss_(ios_, NULL, NULL, NULL),
last_token_(0), break_rollback_(false)
valid_.push_back(AddressPair("", 5288));
valid_.push_back(AddressPair("::1", 5288));
......@@ -163,6 +163,8 @@ struct InstallListenAddresses : public ::testing::Test,
vector<string> given_tokens_;
// Last token number and fd given out
size_t last_token_;
// Should we break the rollback?
bool break_rollback_;
// Check that the store_ addresses are the same as expected
void checkAddresses(const AddressList& expected, const string& name) {
......@@ -185,6 +187,15 @@ struct InstallListenAddresses : public ::testing::Test,
if (address == "") {
isc_throw(SocketError, "This address is not allowed");
if (address == "::1" && break_rollback_) {
// This is valid address, but in case we need to break the
// rollback, it needs to be busy or whatever
// We break the second address to see the first one was
// allocated and then returned
"This address is available, but not for you");
const string proto(protocol == TCP ? "TCP" : "UDP");
size_t number = ++ last_token_;
EXPECT_EQ(5288, port);
......@@ -308,7 +319,39 @@ TEST_F(InstallListenAddresses, rollback) {
checkTokens(released1, released_tokens_, "Released after rollback");
// TODO: Test where rollback fails, test it does return whatever it
// requested during the rollback.
// Try it at last returns everything when even the rollback fails.
TEST_F(InstallListenAddresses, brokenRollback) {
EXPECT_NO_THROW(installListenAddresses(valid_, store_, dnss_));
checkAddresses(valid_, "Before rollback");
// Don't check the tokens now, we already do it in rollback and valid tests
break_rollback_ = true;
EXPECT_THROW(installListenAddresses(invalid_, store_, dnss_), exception);
// No addresses here
// These should be requested in the first part of the failure to bind
// and the second pair in the first part of rollback
const char* tokens[] = {
// The first set should be returned, as well as all the ones we request now
const char* released[] = {
checkTokens(tokens, given_tokens_, "given");
checkTokens(released, released_tokens_, "released");
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment