|
@@ -103,4 +103,58 @@ TEST_F(ParseAddresses, invalid) {
|
|
|
"}]", "Bad address");
|
|
|
}
|
|
|
|
|
|
+// Test fixture for installListenAddresses
|
|
|
+struct InstallListenAddresses : public ::testing::Test {
|
|
|
+ InstallListenAddresses() :
|
|
|
+ dnss_(ios_, NULL, NULL, NULL)
|
|
|
+ {
|
|
|
+ valid_.push_back(AddressPair("127.0.0.1", 5288));
|
|
|
+ valid_.push_back(AddressPair("::1", 5288));
|
|
|
+ invalid_.push_back(AddressPair("192.0.2.2", 1));
|
|
|
+ }
|
|
|
+ IOService ios_;
|
|
|
+ DNSService dnss_;
|
|
|
+ AddressList store_;
|
|
|
+ // We should be able to bind to these addresses
|
|
|
+ AddressList valid_;
|
|
|
+ // But this shouldn't work
|
|
|
+ AddressList invalid_;
|
|
|
+ // Check that the store_ addresses are the same as expected
|
|
|
+ void checkAddresses(const AddressList& expected, const string& name) {
|
|
|
+ SCOPED_TRACE(name);
|
|
|
+
|
|
|
+ ASSERT_EQ(expected.size(), store_.size()) <<
|
|
|
+ "Different amount of elements, not checking content";
|
|
|
+ // Run in parallel trough the vectors
|
|
|
+ for (AddressList::const_iterator ei(expected.begin()),
|
|
|
+ si(store_.begin()); ei != expected.end(); ++ei, ++si) {
|
|
|
+ EXPECT_EQ(ei->first, si->first);
|
|
|
+ EXPECT_EQ(ei->second, si->second);
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// Try switching valid addresses
|
|
|
+TEST_F(InstallListenAddresses, valid) {
|
|
|
+ // First, bind to the valid addresses
|
|
|
+ EXPECT_NO_THROW(installListenAddresses(valid_, store_, dnss_));
|
|
|
+ checkAddresses(valid_, "Valid addresses");
|
|
|
+ // TODO Maybe some test to actually connect to them
|
|
|
+ // Try setting it back to nothing
|
|
|
+ EXPECT_NO_THROW(installListenAddresses(AddressList(), store_, dnss_));
|
|
|
+ checkAddresses(AddressList(), "No addresses");
|
|
|
+ // TODO: Once #338 is solved, try switching back to valid addresses
|
|
|
+}
|
|
|
+
|
|
|
+// Try if rollback works
|
|
|
+// TODO Enable after #338
|
|
|
+TEST_F(InstallListenAddresses, DISABLED_rollback) {
|
|
|
+ // Set some addresses
|
|
|
+ EXPECT_NO_THROW(installListenAddresses(valid_, store_, dnss_));
|
|
|
+ checkAddresses(valid_, "Before rollback");
|
|
|
+ // This should not bind them, but should leave the original addresses
|
|
|
+ EXPECT_THROW(installListenAddresses(invalid_, store_, dnss_), IOError);
|
|
|
+ checkAddresses(valid_, "After rollback");
|
|
|
+}
|
|
|
+
|
|
|
}
|