Added support for 2015 team number parsing and test.
Change-Id: I736eb02ee6225e791fdc90523855715928bf4511
diff --git a/aos/common/network/BUILD b/aos/common/network/BUILD
index a452e8f..fd9a831 100644
--- a/aos/common/network/BUILD
+++ b/aos/common/network/BUILD
@@ -35,3 +35,16 @@
'//aos/linux_code:configuration',
],
)
+
+cc_test(
+ name = 'team_number_test',
+ srcs = [
+ 'team_number_test.cc',
+ ],
+ deps = [
+ ':team_number',
+ '//aos/testing:googletest',
+ '//aos/common:queue_testutils',
+ ],
+)
+
diff --git a/aos/common/network/team_number.cc b/aos/common/network/team_number.cc
index 134113a..4aa7626 100644
--- a/aos/common/network/team_number.cc
+++ b/aos/common/network/team_number.cc
@@ -14,21 +14,14 @@
namespace aos {
namespace network {
-namespace {
-
-uint16_t override_team;
-
-::std::string GetHostname() {
- char buf[256];
- buf[sizeof(buf) - 1] = '\0';
- PCHECK(gethostname(buf, sizeof(buf) - 1));
- return buf;
-}
-
+namespace internal {
int ParseTeamNumber(const std::string &hostname, uint16_t *teamnumber) {
for (size_t i = 0; i < hostname.size(); i++) {
if (hostname[i] == '-') {
- const std::string num_as_s = hostname.substr(i + 1);
+ const std::string num_as_s =
+ hostname[hostname.size() - 1] == 'C'
+ ? hostname.substr(i + 1, hostname.size() - 5 - i)
+ : hostname.substr(i + 1);
int num;
if (!::aos::util::StringToNumber(num_as_s, &num)) {
@@ -45,6 +38,18 @@
}
return -1;
}
+} // namespace internal
+
+namespace {
+
+uint16_t override_team;
+
+::std::string GetHostname() {
+ char buf[256];
+ buf[sizeof(buf) - 1] = '\0';
+ PCHECK(gethostname(buf, sizeof(buf) - 1));
+ return buf;
+}
uint16_t *DoGetTeamNumber() {
if (override_team != 0) return &override_team;
@@ -59,7 +64,7 @@
LOG(WARNING, "team number overridden by AOS_TEAM_NUMBER to %" PRIu16 "\n",
r);
} else {
- int error = ParseTeamNumber(GetHostname(), &r);
+ int error = internal::ParseTeamNumber(GetHostname(), &r);
if (error) {
LOG(FATAL, "Invalid hostname %s\n", GetHostname().c_str());
}
diff --git a/aos/common/network/team_number.h b/aos/common/network/team_number.h
index 520b9ba..5a14872 100644
--- a/aos/common/network/team_number.h
+++ b/aos/common/network/team_number.h
@@ -3,6 +3,8 @@
#include <stdint.h>
+#include <string>
+
namespace aos {
namespace network {
@@ -18,6 +20,9 @@
// Guaranteed to be safe to call during static initialization time.
void OverrideTeamNumber(uint16_t team);
+namespace internal {
+int ParseTeamNumber(const std::string &hostname, uint16_t *teamnumber);
+} // namespace internal
} // namespace network
} // namespace aos
diff --git a/aos/common/network/team_number_test.cc b/aos/common/network/team_number_test.cc
new file mode 100644
index 0000000..f0adcce
--- /dev/null
+++ b/aos/common/network/team_number_test.cc
@@ -0,0 +1,33 @@
+#include "aos/common/network/team_number.h"
+
+#include "gtest/gtest.h"
+
+#include "aos/common/macros.h"
+
+namespace aos {
+namespace network {
+namespace internal {
+namespace testing {
+
+TEST(TeamNumberTest, Parse2015TeamNumber) {
+ uint16_t team_number;
+ EXPECT_EQ(0, ParseTeamNumber("roboRIO-971", &team_number));
+ EXPECT_EQ(971u, team_number);
+
+ EXPECT_EQ(0, ParseTeamNumber("roboRIO-8971", &team_number));
+ EXPECT_EQ(8971u, team_number);
+}
+
+TEST(TeamNumberTest, Parse2016TeamNumber) {
+ uint16_t team_number;
+ EXPECT_EQ(0, ParseTeamNumber("roboRIO-971-FRC", &team_number));
+ EXPECT_EQ(971u, team_number);
+
+ EXPECT_EQ(0, ParseTeamNumber("roboRIO-8971-FRC", &team_number));
+ EXPECT_EQ(8971u, team_number);
+}
+
+} // namespace testing
+} // namespace internal
+} // namespace network
+} // namespace aos