Bug 1239870 - Part 3: Add a base mtransport gtest. r=bwc
☠☠ backed out by 22424f6eeb30 ☠ ☠
authorEric Rahm <erahm@mozilla.com>
Thu, 25 Feb 2016 14:25:49 -0800
changeset 322235 8574075bf42f47cde9692541b5e345ff6844c073
parent 322234 ba077a3afbc702e15fe5a727dc00aabfc4f1becc
child 322236 ceb3e1ee7dda59c010b172a8c13b872a4fa65220
push id5913
push userjlund@mozilla.com
push dateMon, 25 Apr 2016 16:57:49 +0000
treeherdermozilla-beta@dcaf0a6fa115 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbwc
bugs1239870
milestone47.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1239870 - Part 3: Add a base mtransport gtest. r=bwc This adds a base test for other mtransport tests to be derived from. It handles common setup used by the mtransport tests and parses relevant env vars.
media/mtransport/test/gtest_utils.h
--- a/media/mtransport/test/gtest_utils.h
+++ b/media/mtransport/test/gtest_utils.h
@@ -31,28 +31,37 @@
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 // Original author: ekr@rtfm.com
-#ifndef gtest_utils_h__
-#define gtest_utils_h__
+#ifndef gtest_utils__h__
+#define gtest_utils__h__
 
 #include <iostream>
 
 #include "nspr.h"
 #include "prinrval.h"
 #include "prthread.h"
 
 #define GTEST_HAS_RTTI 0
 #include "gtest/gtest.h"
 
+#include "mtransport_test_utils.h"
+#include "nss.h"
+#include "ssl.h"
+
+extern "C" {
+#include "registry.h"
+#include "transport_addr.h"
+}
+
 // Wait up to timeout seconds for expression to be true
 #define WAIT(expression, timeout) \
   do { \
     for (PRIntervalTime start = PR_IntervalNow(); !(expression) && \
            ! ((PR_IntervalNow() - start) > PR_MillisecondsToInterval(timeout));) { \
       PR_Sleep(10); \
     } \
   } while(0)
@@ -83,9 +92,99 @@
   } while(0)
 
 #define ASSERT_EQ_WAIT(expected, actual, timeout) \
   do { \
     WAIT(expected == actual, timeout); \
     ASSERT_EQ(expected, actual); \
   } while(0)
 
+class MtransportTest : public ::testing::Test {
+public:
+  MtransportTest()
+    : test_utils_(nullptr)
+  {
+  }
+
+  void SetUp() {
+    test_utils_ = new MtransportTestUtils();
+    NSS_NoDB_Init(nullptr);
+    NSS_SetDomesticPolicy();
+
+    NR_reg_init(NR_REG_MODE_LOCAL);
+
+    // Attempt to load env vars used by tests.
+    GetEnvironment("TURN_SERVER_ADDRESS", turn_server_);
+    GetEnvironment("TURN_SERVER_USER", turn_user_);
+    GetEnvironment("TURN_SERVER_PASSWORD", turn_password_);
+    GetEnvironment("STUN_SERVER_ADDRESS", stun_server_address_);
+    GetEnvironment("STUN_SERVER_HOSTNAME", stun_server_hostname_);
+
+    std::string disable_non_local;
+    GetEnvironment("MOZ_DISABLE_NONLOCAL_CONNECTIONS", disable_non_local);
+    std::string upload_dir;
+    GetEnvironment("MOZ_UPLOAD_DIR", upload_dir);
+
+    if ((!disable_non_local.empty() && disable_non_local != "0") ||
+        !upload_dir.empty()) {
+      // We're assuming that MOZ_UPLOAD_DIR is only set on tbpl;
+      // MOZ_DISABLE_NONLOCAL_CONNECTIONS probably should be set when running the
+      // cpp unit-tests, but is not presently.
+      stun_server_address_ = "";
+      stun_server_hostname_ = "";
+      turn_server_ = "";
+    }
+
+    // Some tests are flaky and need to check if they're supposed to run.
+    webrtc_enabled_ = CheckEnvironmentFlag("MOZ_WEBRTC_TESTS");
+  }
+
+  void TearDown() {
+    delete test_utils_;
+  }
+
+  void GetEnvironment(const char* aVar, std::string& out) {
+    char* value = getenv(aVar);
+    if (value) {
+      out = value;
+    }
+  }
+
+  bool CheckEnvironmentFlag(const char* aVar) {
+    std::string value;
+    GetEnvironment(aVar, value);
+    return value == "1";
+  }
+
+  bool WarnIfTurnNotConfigured() const {
+    bool configured =
+        !turn_server_.empty() &&
+        !turn_user_.empty() &&
+        !turn_password_.empty();
+
+    if (configured) {
+      nr_transport_addr addr;
+      if (nr_str_port_to_transport_addr(turn_server_.c_str(), 3478,
+                                        IPPROTO_UDP, &addr)) {
+        printf("Invalid TURN_SERVER_ADDRESS \"%s\". Only IP numbers supported.\n",
+               turn_server_.c_str());
+        configured = false;
+      }
+    } else {
+      printf(
+        "Set TURN_SERVER_ADDRESS, TURN_SERVER_USER, and TURN_SERVER_PASSWORD\n"
+        "environment variables to run this test\n");
+    }
+
+    return !configured;
+  }
+
+  MtransportTestUtils* test_utils_;
+
+  std::string turn_server_;
+  std::string turn_user_;
+  std::string turn_password_;
+  std::string stun_server_address_;
+  std::string stun_server_hostname_;
+
+  bool webrtc_enabled_;
+};
 #endif