net/addr/ether: Add FromStr conversion
Change-Id: I85ae2b914fa5a84d2acb103a61d78ce60ab9bef4
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/net/addr/ether.cpp b/test/net/addr/ether.cpp
index 73ae5eb..012e1b0 100644
--- a/test/net/addr/ether.cpp
+++ b/test/net/addr/ether.cpp
@@ -13,4 +13,33 @@
std::hash<EtherAddr>{}(EtherAddr{});
}
+TEST(FromStr, EtherAddr)
+{
+ EXPECT_THROW(fromStr<EtherAddr>("0x:00:00:00:00:00"),
+ std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00:00"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00:00:"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00::00"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>(":00:00:00:00:00"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("00::00:00:00:00"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>(":::::"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("00:0:0:0:0"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00:00:00:00"),
+ std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>(""), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("123456789XYZ"), std::invalid_argument);
+ EXPECT_THROW(fromStr<EtherAddr>("123456789AB"), std::overflow_error);
+ EXPECT_THROW(fromStr<EtherAddr>("123456789ABCD"), std::overflow_error);
+
+ EXPECT_EQ((EtherAddr{}), fromStr<EtherAddr>("00:00:00:00:00:00"));
+ EXPECT_EQ((EtherAddr{0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa}),
+ fromStr<EtherAddr>("FF:EE:DD:cc:bb:aa"));
+ EXPECT_EQ((EtherAddr{0x00, 0x01, 0x02, 0x03, 0x04, 0x05}),
+ fromStr<EtherAddr>("0:1:2:3:4:5"));
+ EXPECT_EQ((EtherAddr{0x01, 0x23, 0x45, 0x67, 0x89, 0xab}),
+ fromStr<EtherAddr>("0123456789AB"));
+ EXPECT_EQ((EtherAddr{0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa}),
+ fromStr<EtherAddr>("FFEEDDccbbaa"));
+}
+
} // namespace stdplus