face: support IPv6-only WebSocket channels

Change-Id: Ib9ba27d04611c13882e50995d701fc1b707cea5f
Refs: #4710
diff --git a/tests/daemon/face/websocket-factory.t.cpp b/tests/daemon/face/websocket-factory.t.cpp
index 5c85e2e..1234737 100644
--- a/tests/daemon/face/websocket-factory.t.cpp
+++ b/tests/daemon/face/websocket-factory.t.cpp
@@ -61,10 +61,10 @@
   parseConfig(CONFIG, true);
   parseConfig(CONFIG, false);
 
-  checkChannelListEqual(factory, {"ws://[::]:9696"});
+  checkChannelListEqual(factory, {"ws://0.0.0.0:9696", "ws://[::]:9696"});
   auto channels = factory.getChannels();
   BOOST_CHECK(std::all_of(channels.begin(), channels.end(),
-                          [] (const shared_ptr<const Channel>& ch) { return ch->isListening(); }));
+                          [] (const auto& ch) { return ch->isListening(); }));
 }
 
 BOOST_AUTO_TEST_CASE(DisableListen)
@@ -100,8 +100,10 @@
     }
   )CONFIG";
 
-  BOOST_CHECK_THROW(parseConfig(CONFIG, true), ConfigFile::Error);
-  BOOST_CHECK_THROW(parseConfig(CONFIG, false), ConfigFile::Error);
+  parseConfig(CONFIG, true);
+  parseConfig(CONFIG, false);
+
+  checkChannelListEqual(factory, {"ws://[::]:7001"});
 }
 
 BOOST_AUTO_TEST_CASE(DisableV6)
@@ -124,7 +126,7 @@
   checkChannelListEqual(factory, {"ws://0.0.0.0:7001"});
 }
 
-BOOST_AUTO_TEST_CASE(ChangeEndpoint)
+BOOST_AUTO_TEST_CASE(ChangePort)
 {
   const std::string CONFIG1 = R"CONFIG(
     face_system
@@ -137,7 +139,7 @@
   )CONFIG";
 
   parseConfig(CONFIG1, false);
-  checkChannelListEqual(factory, {"ws://[::]:9001"});
+  checkChannelListEqual(factory, {"ws://0.0.0.0:9001", "ws://[::]:9001"});
 
   const std::string CONFIG2 = R"CONFIG(
     face_system
@@ -150,7 +152,8 @@
   )CONFIG";
 
   parseConfig(CONFIG2, false);
-  checkChannelListEqual(factory, {"ws://[::]:9001", "ws://[::]:9002"});
+  checkChannelListEqual(factory, {"ws://0.0.0.0:9001", "ws://[::]:9001",
+                                  "ws://0.0.0.0:9002", "ws://[::]:9002"});
 }
 
 BOOST_AUTO_TEST_CASE(Omitted)
@@ -275,6 +278,21 @@
   checkChannelListEqual(factory, expected);
 }
 
+BOOST_AUTO_TEST_CASE(CreateChannel)
+{
+  auto channel1 = createChannel("127.0.0.1", "20070");
+  auto channel1a = createChannel("127.0.0.1", "20070");
+  BOOST_CHECK_EQUAL(channel1, channel1a);
+  BOOST_CHECK_EQUAL(channel1->getUri().toString(), "ws://127.0.0.1:20070");
+
+  auto channel2 = createChannel("127.0.0.1", "20071");
+  BOOST_CHECK_NE(channel1, channel2);
+
+  auto channel3 = createChannel("::1", "20071");
+  BOOST_CHECK_NE(channel2, channel3);
+  BOOST_CHECK_EQUAL(channel3->getUri().toString(), "ws://[::1]:20071");
+}
+
 BOOST_AUTO_TEST_CASE(UnsupportedCreateFace)
 {
   createFace(factory,