Refactor rtc_unittests into several targets.

Also fix some warnings.

NOTRY=True
BUG=webrtc:6954

Review-Url: https://codereview.webrtc.org/2611663002
Cr-Commit-Position: refs/heads/master@{#15900}
diff --git a/webrtc/BUILD.gn b/webrtc/BUILD.gn
index ba58565..cf43954 100644
--- a/webrtc/BUILD.gn
+++ b/webrtc/BUILD.gn
@@ -360,7 +360,6 @@
     # come from a config and can"t be on the target directly.
     if (is_clang) {
       cflags = [
-        "-Wno-missing-braces",
         "-Wno-sign-compare",
         "-Wno-unused-const-variable",
       ]
@@ -369,155 +368,14 @@
 
   rtc_test("rtc_unittests") {
     testonly = true
-    sources = [
-      "api/fakemetricsobserver.cc",
-      "base/analytics/exp_filter_unittest.cc",
-      "base/analytics/percentile_filter_unittest.cc",
-      "base/array_view_unittest.cc",
-      "base/atomicops_unittest.cc",
-      "base/autodetectproxy_unittest.cc",
-      "base/base64_unittest.cc",
-      "base/basictypes_unittest.cc",
-      "base/bind_unittest.cc",
-      "base/bitbuffer_unittest.cc",
-      "base/buffer_unittest.cc",
-      "base/bufferqueue_unittest.cc",
-      "base/bytebuffer_unittest.cc",
-      "base/byteorder_unittest.cc",
-      "base/callback_unittest.cc",
-      "base/copyonwritebuffer_unittest.cc",
-      "base/crc32_unittest.cc",
-      "base/criticalsection_unittest.cc",
-      "base/event_tracer_unittest.cc",
-      "base/event_unittest.cc",
-      "base/file_unittest.cc",
-      "base/filerotatingstream_unittest.cc",
-      "base/fileutils_unittest.cc",
-      "base/function_view_unittest.cc",
-      "base/helpers_unittest.cc",
-      "base/httpbase_unittest.cc",
-      "base/httpcommon_unittest.cc",
-      "base/httpserver_unittest.cc",
-      "base/ipaddress_unittest.cc",
-      "base/logging_unittest.cc",
-      "base/md5digest_unittest.cc",
-      "base/messagedigest_unittest.cc",
-      "base/messagequeue_unittest.cc",
-      "base/mod_ops_unittest.cc",
-      "base/nat_unittest.cc",
-      "base/network_unittest.cc",
-      "base/onetimeevent_unittest.cc",
-      "base/optional_unittest.cc",
-      "base/optionsfile_unittest.cc",
-      "base/pathutils_unittest.cc",
-      "base/platform_thread_unittest.cc",
-      "base/proxy_unittest.cc",
-      "base/proxydetect_unittest.cc",
-      "base/random_unittest.cc",
-      "base/rate_limiter_unittest.cc",
-      "base/rate_statistics_unittest.cc",
-      "base/ratelimiter_unittest.cc",
-      "base/ratetracker_unittest.cc",
-      "base/refcountedobject_unittest.cc",
-      "base/rollingaccumulator_unittest.cc",
-      "base/rtccertificate_unittest.cc",
-      "base/rtccertificategenerator_unittest.cc",
-      "base/safe_compare_unittest.cc",
-      "base/scopedptrcollection_unittest.cc",
-      "base/sequenced_task_checker_unittest.cc",
-      "base/sha1digest_unittest.cc",
-      "base/sharedexclusivelock_unittest.cc",
-      "base/signalthread_unittest.cc",
-      "base/sigslot_unittest.cc",
-      "base/sigslottester_unittest.cc",
-      "base/stream_unittest.cc",
-      "base/stringencode_unittest.cc",
-      "base/stringutils_unittest.cc",
-      "base/swap_queue_unittest.cc",
-
-      # TODO(ronghuawu): Reenable this test.
-      # "systeminfo_unittest.cc",
-      "base/task_queue_unittest.cc",
-      "base/task_unittest.cc",
-      "base/testclient_unittest.cc",
-      "base/thread_annotations_unittest.cc",
-      "base/thread_checker_unittest.cc",
-      "base/thread_unittest.cc",
-      "base/timestampaligner_unittest.cc",
-      "base/timeutils_unittest.cc",
-      "base/weak_ptr_unittest.cc",
-      "p2p/base/asyncstuntcpsocket_unittest.cc",
-      "p2p/base/dtlstransportchannel_unittest.cc",
-      "p2p/base/fakeportallocator.h",
-      "p2p/base/faketransportcontroller.h",
-      "p2p/base/jseptransport_unittest.cc",
-      "p2p/base/p2ptransportchannel_unittest.cc",
-      "p2p/base/port_unittest.cc",
-      "p2p/base/portallocator_unittest.cc",
-      "p2p/base/pseudotcp_unittest.cc",
-      "p2p/base/relayport_unittest.cc",
-      "p2p/base/relayserver_unittest.cc",
-      "p2p/base/stun_unittest.cc",
-      "p2p/base/stunport_unittest.cc",
-      "p2p/base/stunrequest_unittest.cc",
-      "p2p/base/stunserver_unittest.cc",
-      "p2p/base/tcpport_unittest.cc",
-      "p2p/base/testrelayserver.h",
-      "p2p/base/teststunserver.h",
-      "p2p/base/testturnserver.h",
-      "p2p/base/transportcontroller_unittest.cc",
-      "p2p/base/transportdescriptionfactory_unittest.cc",
-      "p2p/base/turnport_unittest.cc",
-      "p2p/base/turnserver_unittest.cc",
-      "p2p/base/udptransportchannel_unittest.cc",
-      "p2p/client/basicportallocator_unittest.cc",
-      "p2p/stunprober/stunprober_unittest.cc",
-    ]
-
-    if (is_win) {
-      sources += [
-        "base/win32_unittest.cc",
-        "base/win32window_unittest.cc",
-      ]
-    }
-
-    if (is_mac) {
-      sources += [ "base/macutils_unittest.cc" ]
-    }
-
-    if (is_posix) {
-      sources += [
-        "base/ssladapter_unittest.cc",
-        "base/sslidentity_unittest.cc",
-        "base/sslstreamadapter_unittest.cc",
-      ]
-    }
-    if (rtc_use_quic) {
-      sources += [
-        "p2p/quic/quicconnectionhelper_unittest.cc",
-        "p2p/quic/quicsession_unittest.cc",
-        "p2p/quic/quictransport_unittest.cc",
-        "p2p/quic/quictransportchannel_unittest.cc",
-        "p2p/quic/reliablequicstream_unittest.cc",
-      ]
-    }
-
-    configs += [ ":rtc_unittests_config" ]
-
-    if (!build_with_chromium && is_clang) {
-      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
-    }
 
     deps = [
-      "base:rtc_analytics",
-      "base:rtc_base",
-      "base:rtc_base_tests_utils",
-      "base:rtc_task_queue",
-      "p2p:libstunprober",
-      "p2p:rtc_p2p",
-      "//testing/gmock",
-      "//testing/gtest",
+      "base:rtc_analytics_unittests",
+      "base:rtc_base_approved_unittests",
+      "base:rtc_base_unittests",
+      "base:rtc_task_queue_unittests",
+      "p2p:libstunprober_unittests",
+      "p2p:rtc_p2p_unittests",
     ]
 
     if (rtc_enable_protobuf) {
@@ -530,28 +388,7 @@
     }
 
     if (is_ios || is_mac) {
-      deps += [
-        "sdk:rtc_sdk_peerconnection_objc",
-        "system_wrappers:system_wrappers_default",
-        "//third_party/ocmock",
-      ]
-      sources += [
-        "sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm",
-        "sdk/objc/Framework/UnitTests/RTCDataChannelConfigurationTest.mm",
-        "sdk/objc/Framework/UnitTests/RTCIceCandidateTest.mm",
-        "sdk/objc/Framework/UnitTests/RTCIceServerTest.mm",
-        "sdk/objc/Framework/UnitTests/RTCMediaConstraintsTest.mm",
-        "sdk/objc/Framework/UnitTests/RTCSessionDescriptionTest.mm",
-        "sdk/objc/Framework/UnitTests/avformatmappertests.mm",
-      ]
-
-      # TODO(tkchin): Cleanup this warning.
-      cflags = [ "-Wno-objc-property-no-attribute" ]
-
-      # |-ObjC| flag needed to make sure category method implementations
-      # are included:
-      # https://developer.apple.com/library/mac/qa/qa1490/_index.html
-      ldflags = [ "-ObjC" ]
+      deps += [ "sdk:rtc_sdk_peerconnection_objc_unittests" ]
     }
   }
 
diff --git a/webrtc/api/BUILD.gn b/webrtc/api/BUILD.gn
index 45fcd91..7fbcb5d 100644
--- a/webrtc/api/BUILD.gn
+++ b/webrtc/api/BUILD.gn
@@ -224,8 +224,6 @@
     sources = [
       "datachannel_unittest.cc",
       "dtmfsender_unittest.cc",
-      "fakemetricsobserver.cc",
-      "fakemetricsobserver.h",
       "jsepsessiondescription_unittest.cc",
       "localaudiosource_unittest.cc",
       "mediaconstraintsinterface_unittest.cc",
@@ -307,6 +305,7 @@
     }
 
     deps += [
+      ":fakemetricsobserver",
       ":libjingle_peerconnection",
       "..:webrtc_common",
       "../base:rtc_base_tests_utils",
@@ -338,4 +337,20 @@
       "//webrtc/test:test_support",
     ]
   }
+
+  rtc_source_set("fakemetricsobserver") {
+    testonly = true
+    sources = [
+      "fakemetricsobserver.cc",
+      "fakemetricsobserver.h",
+    ]
+    deps = [
+      ":libjingle_peerconnection",
+      "../base:rtc_base_approved",
+    ]
+    if (!build_with_chromium && is_clang) {
+      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+    }
+  }
 }
diff --git a/webrtc/base/BUILD.gn b/webrtc/base/BUILD.gn
index 51beb8e..cb4702c 100644
--- a/webrtc/base/BUILD.gn
+++ b/webrtc/base/BUILD.gn
@@ -103,6 +103,7 @@
     "atomicops.h",
     "base64.cc",
     "base64.h",
+    "basictypes.h",
     "bind.h",
     "bitbuffer.cc",
     "bitbuffer.h",
@@ -285,6 +286,61 @@
   }
 }
 
+if (rtc_include_tests) {
+  rtc_source_set("rtc_base_approved_unittests") {
+    testonly = true
+    sources = [
+      "array_view_unittest.cc",
+      "atomicops_unittest.cc",
+      "base64_unittest.cc",
+      "basictypes_unittest.cc",
+      "bind_unittest.cc",
+      "bitbuffer_unittest.cc",
+      "buffer_unittest.cc",
+      "bufferqueue_unittest.cc",
+      "bytebuffer_unittest.cc",
+      "byteorder_unittest.cc",
+      "copyonwritebuffer_unittest.cc",
+      "criticalsection_unittest.cc",
+      "event_tracer_unittest.cc",
+      "event_unittest.cc",
+      "file_unittest.cc",
+      "function_view_unittest.cc",
+      "logging_unittest.cc",
+      "md5digest_unittest.cc",
+      "mod_ops_unittest.cc",
+      "onetimeevent_unittest.cc",
+      "optional_unittest.cc",
+      "pathutils_unittest.cc",
+      "platform_thread_unittest.cc",
+      "random_unittest.cc",
+      "rate_limiter_unittest.cc",
+      "rate_statistics_unittest.cc",
+      "ratetracker_unittest.cc",
+      "refcountedobject_unittest.cc",
+      "safe_compare_unittest.cc",
+      "stringencode_unittest.cc",
+      "stringutils_unittest.cc",
+      "swap_queue_unittest.cc",
+
+      # TODO(ronghuawu): Reenable this test.
+      # "systeminfo_unittest.cc",
+      "thread_annotations_unittest.cc",
+      "thread_checker_unittest.cc",
+      "timestampaligner_unittest.cc",
+      "timeutils_unittest.cc",
+    ]
+    deps = [
+      ":rtc_base_approved",
+      ":rtc_base_tests_utils",
+    ]
+    if (!build_with_chromium && is_clang) {
+      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+    }
+  }
+}
+
 config("enable_libevent_config") {
   defines = [ "WEBRTC_BUILD_LIBEVENT" ]
 }
@@ -338,6 +394,25 @@
   }
 }
 
+if (rtc_include_tests) {
+  rtc_source_set("rtc_task_queue_unittests") {
+    testonly = true
+    sources = [
+      "sequenced_task_checker_unittest.cc",
+      "task_queue_unittest.cc",
+      "weak_ptr_unittest.cc",
+    ]
+    deps = [
+      ":rtc_base_tests_utils",
+      ":rtc_task_queue",
+    ]
+    if (!build_with_chromium && is_clang) {
+      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+    }
+  }
+}
+
 rtc_static_library("rtc_analytics") {
   sources = [
     "analytics/exp_filter.cc",
@@ -349,6 +424,20 @@
   ]
 }
 
+if (rtc_include_tests) {
+  rtc_source_set("rtc_analytics_unittests") {
+    testonly = true
+    sources = [
+      "analytics/exp_filter_unittest.cc",
+      "analytics/percentile_filter_unittest.cc",
+    ]
+    deps = [
+      ":rtc_analytics",
+      ":rtc_base_tests_utils",
+    ]
+  }
+}
+
 config("rtc_base_warnings_config") {
   if (is_win && is_clang) {
     cflags = [
@@ -686,6 +775,77 @@
   }
 }
 
+if (rtc_include_tests) {
+  config("rtc_base_unittests_config") {
+    if (is_clang) {
+      cflags = [ "-Wno-unused-const-variable" ]
+    }
+  }
+  rtc_source_set("rtc_base_unittests") {
+    testonly = true
+    sources = [
+      "autodetectproxy_unittest.cc",
+      "callback_unittest.cc",
+      "crc32_unittest.cc",
+      "filerotatingstream_unittest.cc",
+      "fileutils_unittest.cc",
+      "helpers_unittest.cc",
+      "httpbase_unittest.cc",
+      "httpcommon_unittest.cc",
+      "httpserver_unittest.cc",
+      "ipaddress_unittest.cc",
+      "messagedigest_unittest.cc",
+      "messagequeue_unittest.cc",
+      "nat_unittest.cc",
+      "network_unittest.cc",
+      "optionsfile_unittest.cc",
+      "proxy_unittest.cc",
+      "proxydetect_unittest.cc",
+      "ratelimiter_unittest.cc",
+      "rollingaccumulator_unittest.cc",
+      "rtccertificate_unittest.cc",
+      "rtccertificategenerator_unittest.cc",
+      "scopedptrcollection_unittest.cc",
+      "sha1digest_unittest.cc",
+      "sharedexclusivelock_unittest.cc",
+      "signalthread_unittest.cc",
+      "sigslot_unittest.cc",
+      "sigslottester_unittest.cc",
+      "stream_unittest.cc",
+      "task_unittest.cc",
+      "testclient_unittest.cc",
+      "thread_unittest.cc",
+    ]
+    if (is_win) {
+      sources += [
+        "win32_unittest.cc",
+        "win32window_unittest.cc",
+      ]
+    }
+    if (is_mac) {
+      sources += [ "macutils_unittest.cc" ]
+    }
+    if (is_posix) {
+      sources += [
+        "ssladapter_unittest.cc",
+        "sslidentity_unittest.cc",
+        "sslstreamadapter_unittest.cc",
+      ]
+    }
+    deps = [
+      ":rtc_base_tests_utils",
+    ]
+    public_deps = [
+      ":rtc_base",
+    ]
+    configs += [ ":rtc_base_unittests_config" ]
+    if (!build_with_chromium && is_clang) {
+      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+    }
+  }
+}
+
 rtc_source_set("gtest_prod") {
   sources = [
     "gtest_prod_util.h",
@@ -742,6 +902,7 @@
       "../test:test_support",
     ]
     public_deps = [
+      "//testing/gmock",
       "//testing/gtest",
     ]
 
diff --git a/webrtc/base/file_unittest.cc b/webrtc/base/file_unittest.cc
index d7cefc8..99a5d58 100644
--- a/webrtc/base/file_unittest.cc
+++ b/webrtc/base/file_unittest.cc
@@ -52,11 +52,11 @@
 class FileTest : public ::testing::Test {
  protected:
   std::string path_;
-  void SetUp() {
+  void SetUp() override {
     path_ = webrtc::test::TempFilename(webrtc::test::OutputPath(), "test_file");
     ASSERT_FALSE(path_.empty());
   }
-  void TearDown() { RemoveFile(path_); }
+  void TearDown() override { RemoveFile(path_); }
 };
 
 TEST_F(FileTest, DefaultConstructor) {
diff --git a/webrtc/base/logging_unittest.cc b/webrtc/base/logging_unittest.cc
index c08b1ef..5035035 100644
--- a/webrtc/base/logging_unittest.cc
+++ b/webrtc/base/logging_unittest.cc
@@ -88,12 +88,12 @@
 // We should restore the correct global state at the end.
 class LogThread : public Thread {
  public:
-  virtual ~LogThread() {
+  ~LogThread() override {
     Stop();
   }
 
  private:
-  void Run() {
+  void Run() override {
     // LS_SENSITIVE to avoid cluttering up any real logging going on
     LOG(LS_SENSITIVE) << "LOG";
   }
diff --git a/webrtc/base/rate_limiter_unittest.cc b/webrtc/base/rate_limiter_unittest.cc
index f799a97..3c1b541 100644
--- a/webrtc/base/rate_limiter_unittest.cc
+++ b/webrtc/base/rate_limiter_unittest.cc
@@ -24,7 +24,7 @@
  public:
   RateLimitTest()
       : clock_(0), rate_limiter(new RateLimiter(&clock_, kWindowSizeMs)) {}
-  virtual ~RateLimitTest() {}
+  ~RateLimitTest() override {}
 
   void SetUp() override { rate_limiter->SetMaxRate(kMaxRateBps); }
 
@@ -147,7 +147,7 @@
    public:
     explicit SetWindowSizeTask(RateLimiter* rate_limiter)
         : ThreadTask(rate_limiter) {}
-    virtual ~SetWindowSizeTask() {}
+    ~SetWindowSizeTask() override {}
 
     void DoRun() override {
       EXPECT_TRUE(rate_limiter_->SetWindowSize(kWindowSizeMs / 2));
@@ -160,7 +160,7 @@
    public:
     explicit SetMaxRateTask(RateLimiter* rate_limiter)
         : ThreadTask(rate_limiter) {}
-    virtual ~SetMaxRateTask() {}
+    ~SetMaxRateTask() override {}
 
     void DoRun() override { rate_limiter_->SetMaxRate(kMaxRateBps * 2); }
   } set_max_rate_task(rate_limiter.get());
@@ -171,7 +171,7 @@
    public:
     UseRateTask(RateLimiter* rate_limiter, SimulatedClock* clock)
         : ThreadTask(rate_limiter), clock_(clock) {}
-    virtual ~UseRateTask() {}
+    ~UseRateTask() override {}
 
     void DoRun() override {
       EXPECT_TRUE(rate_limiter_->TryUseRate(kRateFillingBytes / 2));
diff --git a/webrtc/base/ratetracker_unittest.cc b/webrtc/base/ratetracker_unittest.cc
index 136934f..e2b51c1 100644
--- a/webrtc/base/ratetracker_unittest.cc
+++ b/webrtc/base/ratetracker_unittest.cc
@@ -19,7 +19,7 @@
 class RateTrackerForTest : public RateTracker {
  public:
   RateTrackerForTest() : RateTracker(kBucketIntervalMs, 10u), time_(0) {}
-  virtual int64_t Time() const { return time_; }
+  int64_t Time() const override { return time_; }
   void AdvanceTime(int delta) { time_ += delta; }
 
  private:
diff --git a/webrtc/base/refcountedobject_unittest.cc b/webrtc/base/refcountedobject_unittest.cc
index 3d8163f..f6096be 100644
--- a/webrtc/base/refcountedobject_unittest.cc
+++ b/webrtc/base/refcountedobject_unittest.cc
@@ -30,7 +30,7 @@
   RefClass() {}
 
  protected:
-  virtual ~RefClass() {}
+  ~RefClass() override {}
 };
 
 class RefClassWithRvalue : public RefCountInterface {
@@ -38,7 +38,7 @@
   explicit RefClassWithRvalue(std::unique_ptr<A> a) : a_(std::move(a)) {}
 
  protected:
-  virtual ~RefClassWithRvalue() {}
+  ~RefClassWithRvalue() override {}
 
  public:
   std::unique_ptr<A> a_;
@@ -50,7 +50,7 @@
       : a_(std::move(a)), b_(b), c_(c) {}
 
  protected:
-  virtual ~RefClassWithMixedValues() {}
+  ~RefClassWithMixedValues() override {}
 
  public:
   std::unique_ptr<A> a_;
diff --git a/webrtc/base/timeutils_unittest.cc b/webrtc/base/timeutils_unittest.cc
index db939cb..7c8b2eb 100644
--- a/webrtc/base/timeutils_unittest.cc
+++ b/webrtc/base/timeutils_unittest.cc
@@ -118,7 +118,7 @@
     // Set use of the test RNG to get deterministic expiration timestamp.
     rtc::SetRandomTestMode(true);
   }
-  ~TmToSeconds() {
+  ~TmToSeconds() override {
     // Put it back for the next test.
     rtc::SetRandomTestMode(false);
   }
diff --git a/webrtc/base/win32window_unittest.cc b/webrtc/base/win32window_unittest.cc
index 5dba67e..1819f92 100644
--- a/webrtc/base/win32window_unittest.cc
+++ b/webrtc/base/win32window_unittest.cc
@@ -45,9 +45,9 @@
   EXPECT_TRUE(wnd.Create(0, L"Test", 0, 0, 0, 0, 100, 100));
   EXPECT_TRUE(wnd.handle() != NULL);
   EXPECT_EQ(kDummyResult, ::SendMessage(wnd.handle(), WM_USER, 1, 2));
-  EXPECT_EQ(WM_USER, wnd.msg().message);
-  EXPECT_EQ(1, wnd.msg().wParam);
-  EXPECT_EQ(2, wnd.msg().lParam);
+  EXPECT_EQ(static_cast<UINT>(WM_USER), wnd.msg().message);
+  EXPECT_EQ(1u, wnd.msg().wParam);
+  EXPECT_EQ(2l, wnd.msg().lParam);
   wnd.Destroy();
   EXPECT_TRUE(wnd.handle() == NULL);
   EXPECT_TRUE(wnd.destroyed());
diff --git a/webrtc/p2p/BUILD.gn b/webrtc/p2p/BUILD.gn
index c2dc282..120a800 100644
--- a/webrtc/p2p/BUILD.gn
+++ b/webrtc/p2p/BUILD.gn
@@ -141,6 +141,59 @@
   }
 }
 
+if (rtc_include_tests) {
+  rtc_source_set("rtc_p2p_unittests") {
+    testonly = true
+    sources = [
+      "base/asyncstuntcpsocket_unittest.cc",
+      "base/dtlstransportchannel_unittest.cc",
+      "base/fakeportallocator.h",
+      "base/faketransportcontroller.h",
+      "base/jseptransport_unittest.cc",
+      "base/p2ptransportchannel_unittest.cc",
+      "base/port_unittest.cc",
+      "base/portallocator_unittest.cc",
+      "base/pseudotcp_unittest.cc",
+      "base/relayport_unittest.cc",
+      "base/relayserver_unittest.cc",
+      "base/stun_unittest.cc",
+      "base/stunport_unittest.cc",
+      "base/stunrequest_unittest.cc",
+      "base/stunserver_unittest.cc",
+      "base/tcpport_unittest.cc",
+      "base/testrelayserver.h",
+      "base/teststunserver.h",
+      "base/testturnserver.h",
+      "base/transportcontroller_unittest.cc",
+      "base/transportdescriptionfactory_unittest.cc",
+      "base/turnport_unittest.cc",
+      "base/turnserver_unittest.cc",
+      "base/udptransportchannel_unittest.cc",
+      "client/basicportallocator_unittest.cc",
+    ]
+    if (rtc_use_quic) {
+      sources += [
+        "quic/quicconnectionhelper_unittest.cc",
+        "quic/quicsession_unittest.cc",
+        "quic/quictransport_unittest.cc",
+        "quic/quictransportchannel_unittest.cc",
+        "quic/reliablequicstream_unittest.cc",
+      ]
+    }
+    deps = [
+      ":rtc_p2p",
+      "../api:fakemetricsobserver",
+      "//testing/gmock",
+      "//testing/gtest",
+    ]
+    if (!build_with_chromium && is_clang) {
+      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+    }
+    defines = [ "GTEST_RELATIVE_PATH" ]
+  }
+}
+
 rtc_static_library("libstunprober") {
   sources = [
     "stunprober/stunprober.cc",
@@ -157,3 +210,22 @@
     "../base:rtc_base",
   ]
 }
+
+if (rtc_include_tests) {
+  rtc_source_set("libstunprober_unittests") {
+    testonly = true
+    sources = [
+      "stunprober/stunprober_unittest.cc",
+    ]
+    deps = [
+      ":libstunprober",
+      "//testing/gmock",
+      "//testing/gtest",
+    ]
+    if (!build_with_chromium && is_clang) {
+      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+    }
+    defines = [ "GTEST_RELATIVE_PATH" ]
+  }
+}
diff --git a/webrtc/p2p/base/stun_unittest.cc b/webrtc/p2p/base/stun_unittest.cc
index 033c5dd..1624e68 100644
--- a/webrtc/p2p/base/stun_unittest.cc
+++ b/webrtc/p2p/base/stun_unittest.cc
@@ -494,7 +494,7 @@
 const in_addr kIPv4TestAddress1 =  { 0xe64417ac };
 #elif defined WEBRTC_WIN
 // Windows in_addr has a union with a uchar[] array first.
-const in_addr kIPv4TestAddress1 =  { { 0x0ac, 0x017, 0x044, 0x0e6 } };
+const in_addr kIPv4TestAddress1 =  { { { 0x0ac, 0x017, 0x044, 0x0e6 } } };
 #endif
 const char kTestUserName1[] = "abcdefgh";
 const char kTestUserName2[] = "abc";
diff --git a/webrtc/sdk/BUILD.gn b/webrtc/sdk/BUILD.gn
index 279434b..4ccd530 100644
--- a/webrtc/sdk/BUILD.gn
+++ b/webrtc/sdk/BUILD.gn
@@ -230,6 +230,40 @@
     }
   }
 
+  if (rtc_include_tests) {
+    rtc_source_set("rtc_sdk_peerconnection_objc_unittests") {
+      testonly = true
+      sources = [
+        "objc/Framework/UnitTests/RTCConfigurationTest.mm",
+        "objc/Framework/UnitTests/RTCDataChannelConfigurationTest.mm",
+        "objc/Framework/UnitTests/RTCIceCandidateTest.mm",
+        "objc/Framework/UnitTests/RTCIceServerTest.mm",
+        "objc/Framework/UnitTests/RTCMediaConstraintsTest.mm",
+        "objc/Framework/UnitTests/RTCSessionDescriptionTest.mm",
+        "objc/Framework/UnitTests/avformatmappertests.mm",
+      ]
+      deps = [
+        ":rtc_sdk_peerconnection_objc",
+        "//third_party/ocmock",
+        "//webrtc/system_wrappers:system_wrappers_default",
+      ]
+
+      # TODO(tkchin): Cleanup this warning.
+      cflags = [ "-Wno-objc-property-no-attribute" ]
+
+      # |-ObjC| flag needed to make sure category method implementations
+      # are included:
+      # https://developer.apple.com/library/mac/qa/qa1490/_index.html
+      ldflags = [ "-ObjC" ]
+
+      defines = [ "GTEST_RELATIVE_PATH" ]
+      if (!build_with_chromium && is_clang) {
+        # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+      }
+    }
+  }
+
   if (is_ios) {
     ios_framework_bundle("rtc_sdk_framework_objc") {
       info_plist = "objc/Framework/Info.plist"
diff --git a/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm b/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm
index 623ac6f..5f8cacb 100644
--- a/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm
+++ b/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm
@@ -160,7 +160,7 @@
       webrtc::GetSupportedVideoFormatsForDevice(mockDevice);
 
   // then
-  EXPECT_EQ(1, result.size());
+  EXPECT_EQ(1u, result.size());
 
   // make sure the set has the expected format
   EXPECT_EQ(expectedFormat, *result.begin());