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