Bug 1315869 - gtestify security/manager/ssl/tests/compiled/*.cpp. r=cykesiopka.
authorNicholas Nethercote <nnethercote@mozilla.com>
Tue, 08 Nov 2016 15:37:06 +1100
changeset 352352 ae039aa6accf827582bf6d3fbee5760d5950e88e
parent 352351 556c13784a9c6704cc7a6a4fa9bda2d44ada96d8
child 352353 63cafb0c2f0ff94ef9a9b99fad972566b6847cb2
push id6795
push userjlund@mozilla.com
push dateMon, 23 Jan 2017 14:19:46 +0000
treeherdermozilla-esr52@76101b503191 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerscykesiopka
bugs1315869
milestone52.0a1
Bug 1315869 - gtestify security/manager/ssl/tests/compiled/*.cpp. r=cykesiopka.
security/manager/ssl/tests/compiled/TestCertDB.cpp
security/manager/ssl/tests/compiled/TestSTSParser.cpp
security/manager/ssl/tests/compiled/moz.build
security/manager/ssl/tests/gtest/CertDBTest.cpp
security/manager/ssl/tests/gtest/STSParserTest.cpp
security/manager/ssl/tests/gtest/moz.build
security/manager/ssl/tests/moz.build
testing/cppunittest.ini
deleted file mode 100644
--- a/security/manager/ssl/tests/compiled/moz.build
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-CppUnitTests([
-    'TestSTSParser',
-])
-
-GeckoCppUnitTests([
-    'TestCertDB',
-])
-
-USE_LIBS += [
-    'nss',
-]
-
-DEFINES['CERT_AddTempCertToPerm'] = '__CERT_AddTempCertToPerm'
rename from security/manager/ssl/tests/compiled/TestCertDB.cpp
rename to security/manager/ssl/tests/gtest/CertDBTest.cpp
--- a/security/manager/ssl/tests/compiled/TestCertDB.cpp
+++ b/security/manager/ssl/tests/gtest/CertDBTest.cpp
@@ -1,83 +1,60 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#include "TestHarness.h"
+#include "gtest/gtest.h"
 #include "nsCOMPtr.h"
 #include "nsIPrefService.h"
 #include "nsISimpleEnumerator.h"
 #include "nsIX509Cert.h"
 #include "nsIX509CertDB.h"
 #include "nsIX509CertList.h"
 #include "nsServiceManagerUtils.h"
 
-int
-main(int argc, char* argv[])
+TEST(psm_CertDB, Test)
 {
-  ScopedXPCOM xpcom("TestCertDB");
-  if (xpcom.failed()) {
-    fail("couldn't initialize XPCOM");
-    return 1;
-  }
   {
     nsCOMPtr<nsIPrefBranch> prefs(do_GetService(NS_PREFSERVICE_CONTRACTID));
-    if (!prefs) {
-      fail("couldn't get nsIPrefBranch");
-      return 1;
-    }
+    ASSERT_TRUE(prefs) << "couldn't get nsIPrefBranch";
+
     // When PSM initializes, it attempts to get some localized strings.
     // As a result, Android flips out if this isn't set.
     nsresult rv = prefs->SetBoolPref("intl.locale.matchOS", true);
-    if (NS_FAILED(rv)) {
-      fail("couldn't set pref 'intl.locale.matchOS'");
-      return 1;
-    }
+    ASSERT_TRUE(NS_SUCCEEDED(rv)) << "couldn't set pref 'intl.locale.matchOS'";
+
     nsCOMPtr<nsIX509CertDB> certdb(do_GetService(NS_X509CERTDB_CONTRACTID));
-    if (!certdb) {
-      fail("couldn't get certdb");
-      return 1;
-    }
+    ASSERT_TRUE(certdb) << "couldn't get certdb";
+
     nsCOMPtr<nsIX509CertList> certList;
     rv = certdb->GetCerts(getter_AddRefs(certList));
-    if (NS_FAILED(rv)) {
-      fail("couldn't get list of certificates");
-      return 1;
-    }
+    ASSERT_TRUE(NS_SUCCEEDED(rv)) << "couldn't get list of certificates";
+
     nsCOMPtr<nsISimpleEnumerator> enumerator;
     rv = certList->GetEnumerator(getter_AddRefs(enumerator));
-    if (NS_FAILED(rv)) {
-      fail("couldn't enumerate certificate list");
-      return 1;
-    }
+    ASSERT_TRUE(NS_SUCCEEDED(rv)) << "couldn't enumerate certificate list";
+
     bool foundBuiltIn = false;
     bool hasMore = false;
     while (NS_SUCCEEDED(enumerator->HasMoreElements(&hasMore)) && hasMore) {
       nsCOMPtr<nsISupports> supports;
-      if (NS_FAILED(enumerator->GetNext(getter_AddRefs(supports)))) {
-        fail("couldn't get next certificate");
-        return 1;
-      }
+      ASSERT_TRUE(NS_SUCCEEDED(enumerator->GetNext(getter_AddRefs(supports))))
+        << "couldn't get next certificate";
+
       nsCOMPtr<nsIX509Cert> cert(do_QueryInterface(supports));
-      if (!cert) {
-        fail("couldn't QI to nsIX509Cert");
-        return 1;
-      }
-      if (NS_FAILED(cert->GetIsBuiltInRoot(&foundBuiltIn))) {
-        fail("GetIsBuiltInRoot failed");
-        return 1;
-      }
+      ASSERT_TRUE(cert) << "couldn't QI to nsIX509Cert";
+
+      ASSERT_TRUE(NS_SUCCEEDED(cert->GetIsBuiltInRoot(&foundBuiltIn))) <<
+        "GetIsBuiltInRoot failed";
+
       if (foundBuiltIn) {
         break;
       }
     }
-    if (foundBuiltIn) {
-      passed("successfully loaded at least one built-in certificate");
-    } else {
-      fail("didn't load any built-in certificates");
-      return 1;
-    }
+
+    ASSERT_TRUE(foundBuiltIn) << "didn't load any built-in certificates";
+
+    printf("successfully loaded at least one built-in certificate\n");
+
   } // this scopes the nsCOMPtrs
-  // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM
-  return 0;
 }
rename from security/manager/ssl/tests/compiled/TestSTSParser.cpp
rename to security/manager/ssl/tests/gtest/STSParserTest.cpp
--- a/security/manager/ssl/tests/compiled/TestSTSParser.cpp
+++ b/security/manager/ssl/tests/gtest/STSParserTest.cpp
@@ -1,189 +1,144 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#include "TestHarness.h"
 #include <stdio.h>
+
+#include "gtest/gtest.h"
 #include "nsNetUtil.h"
 #include "nsISiteSecurityService.h"
-
-#define EXPECT_SUCCESS(rv, ...) \
-  PR_BEGIN_MACRO \
-  if (NS_FAILED(rv)) { \
-    fail(__VA_ARGS__); \
-    return false; \
-  } \
-  PR_END_MACRO
-
+#include "nsIURI.h"
 
-#define EXPECT_FAILURE(rv, ...) \
-  PR_BEGIN_MACRO \
-  if (NS_SUCCEEDED(rv)) { \
-    fail(__VA_ARGS__); \
-    return false; \
-  } \
-  PR_END_MACRO
-
-#define REQUIRE_EQUAL(a, b, ...) \
-  PR_BEGIN_MACRO \
-  if (a != b) { \
-    fail(__VA_ARGS__); \
-    return false; \
-  } \
-  PR_END_MACRO
-
-bool
+void
 TestSuccess(const char* hdr, bool extraTokens,
             uint64_t expectedMaxAge, bool expectedIncludeSubdomains,
             nsISiteSecurityService* sss)
 {
   nsCOMPtr<nsIURI> dummyUri;
   nsresult rv = NS_NewURI(getter_AddRefs(dummyUri), "https://foo.com/bar.html");
-  EXPECT_SUCCESS(rv, "Failed to create URI");
+  ASSERT_TRUE(NS_SUCCEEDED(rv)) << "Failed to create URI";
 
   uint64_t maxAge = 0;
   bool includeSubdomains = false;
   rv = sss->UnsafeProcessHeader(nsISiteSecurityService::HEADER_HSTS, dummyUri,
                                 hdr, 0, &maxAge, &includeSubdomains, nullptr);
-  EXPECT_SUCCESS(rv, "Failed to process valid header: %s", hdr);
+  ASSERT_TRUE(NS_SUCCEEDED(rv)) << "Failed to process valid header: " << hdr;
 
-  REQUIRE_EQUAL(maxAge, expectedMaxAge, "Did not correctly parse maxAge");
-  REQUIRE_EQUAL(includeSubdomains, expectedIncludeSubdomains, "Did not correctly parse presence/absence of includeSubdomains");
+  ASSERT_EQ(maxAge, expectedMaxAge) << "Did not correctly parse maxAge";
+  EXPECT_EQ(includeSubdomains, expectedIncludeSubdomains) <<
+    "Did not correctly parse presence/absence of includeSubdomains";
 
   if (extraTokens) {
-    REQUIRE_EQUAL(rv, NS_SUCCESS_LOSS_OF_INSIGNIFICANT_DATA,
-                  "Extra tokens were expected when parsing, but were not encountered.");
+    EXPECT_EQ(rv, NS_SUCCESS_LOSS_OF_INSIGNIFICANT_DATA) <<
+      "Extra tokens were expected when parsing, but were not encountered.";
   } else {
-    REQUIRE_EQUAL(rv, NS_OK, "Unexpected tokens found during parsing.");
+    EXPECT_EQ(rv, NS_OK) << "Unexpected tokens found during parsing.";
   }
 
-  passed(hdr);
-  return true;
+  printf("%s\n", hdr);
 }
 
-bool TestFailure(const char* hdr,
+void TestFailure(const char* hdr,
                  nsISiteSecurityService* sss)
 {
   nsCOMPtr<nsIURI> dummyUri;
   nsresult rv = NS_NewURI(getter_AddRefs(dummyUri), "https://foo.com/bar.html");
-  EXPECT_SUCCESS(rv, "Failed to create URI");
+  ASSERT_TRUE(NS_SUCCEEDED(rv)) << "Failed to create URI";
 
   rv = sss->UnsafeProcessHeader(nsISiteSecurityService::HEADER_HSTS, dummyUri,
                                 hdr, 0, nullptr, nullptr, nullptr);
-  EXPECT_FAILURE(rv, "Parsed invalid header: %s", hdr);
-  passed(hdr);
-  return true;
+  ASSERT_TRUE(NS_FAILED(rv)) << "Parsed invalid header: " << hdr;
+
+  printf("%s\n", hdr);
 }
 
-
-int
-main(int32_t argc, char *argv[])
+TEST(psm_STSParser, Test)
 {
     nsresult rv;
-    ScopedXPCOM xpcom("STS Parser Tests");
-    if (xpcom.failed())
-      return -1;
-    // Initialize a profile folder to ensure a clean shutdown.
-    nsCOMPtr<nsIFile> profile = xpcom.GetProfileDirectory();
-    if (!profile) {
-      fail("Couldn't get the profile directory.");
-      return -1;
-    }
 
     // grab handle to the service
     nsCOMPtr<nsISiteSecurityService> sss;
     sss = do_GetService("@mozilla.org/ssservice;1", &rv);
-    NS_ENSURE_SUCCESS(rv, -1);
-
-    int rv0, rv1;
-
-    nsTArray<bool> rvs(24);
+    ASSERT_TRUE(NS_SUCCEEDED(rv));
 
     // *** parsing tests
     printf("*** Attempting to parse valid STS headers ...\n");
 
     // SHOULD SUCCEED:
-    rvs.AppendElement(TestSuccess("max-age=100", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("max-age  =100", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess(" max-age=100", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("max-age = 100 ", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("max-age = \"100\" ", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("max-age=\"100\"", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess(" max-age =\"100\" ", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("\tmax-age\t=\t\"100\"\t", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("max-age  =       100             ", false, 100, false, sss));
+    TestSuccess("max-age=100", false, 100, false, sss);
+    TestSuccess("max-age  =100", false, 100, false, sss);
+    TestSuccess(" max-age=100", false, 100, false, sss);
+    TestSuccess("max-age = 100 ", false, 100, false, sss);
+    TestSuccess("max-age = \"100\" ", false, 100, false, sss);
+    TestSuccess("max-age=\"100\"", false, 100, false, sss);
+    TestSuccess(" max-age =\"100\" ", false, 100, false, sss);
+    TestSuccess("\tmax-age\t=\t\"100\"\t", false, 100, false, sss);
+    TestSuccess("max-age  =       100             ", false, 100, false, sss);
 
-    rvs.AppendElement(TestSuccess("maX-aGe=100", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("MAX-age  =100", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("max-AGE=100", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("Max-Age = 100 ", false, 100, false, sss));
-    rvs.AppendElement(TestSuccess("MAX-AGE = 100 ", false, 100, false, sss));
+    TestSuccess("maX-aGe=100", false, 100, false, sss);
+    TestSuccess("MAX-age  =100", false, 100, false, sss);
+    TestSuccess("max-AGE=100", false, 100, false, sss);
+    TestSuccess("Max-Age = 100 ", false, 100, false, sss);
+    TestSuccess("MAX-AGE = 100 ", false, 100, false, sss);
 
-    rvs.AppendElement(TestSuccess("max-age=100;includeSubdomains", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess("max-age=100\t; includeSubdomains", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess(" max-age=100; includeSubdomains", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess("max-age = 100 ; includeSubdomains", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess("max-age  =       100             ; includeSubdomains", false, 100, true, sss));
+    TestSuccess("max-age=100;includeSubdomains", false, 100, true, sss);
+    TestSuccess("max-age=100\t; includeSubdomains", false, 100, true, sss);
+    TestSuccess(" max-age=100; includeSubdomains", false, 100, true, sss);
+    TestSuccess("max-age = 100 ; includeSubdomains", false, 100, true, sss);
+    TestSuccess("max-age  =       100             ; includeSubdomains",
+                false, 100, true, sss);
 
-    rvs.AppendElement(TestSuccess("maX-aGe=100; includeSUBDOMAINS", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess("MAX-age  =100; includeSubDomains", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess("max-AGE=100; iNcLuDeSuBdoMaInS", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess("Max-Age = 100; includesubdomains ", false, 100, true, sss));
-    rvs.AppendElement(TestSuccess("INCLUDESUBDOMAINS;MaX-AgE = 100 ", false, 100, true, sss));
+    TestSuccess("maX-aGe=100; includeSUBDOMAINS", false, 100, true, sss);
+    TestSuccess("MAX-age  =100; includeSubDomains", false, 100, true, sss);
+    TestSuccess("max-AGE=100; iNcLuDeSuBdoMaInS", false, 100, true, sss);
+    TestSuccess("Max-Age = 100; includesubdomains ", false, 100, true, sss);
+    TestSuccess("INCLUDESUBDOMAINS;MaX-AgE = 100 ", false, 100, true, sss);
     // Turns out, the actual directive is entirely optional (hence the
     // trailing semicolon)
-    rvs.AppendElement(TestSuccess("max-age=100;includeSubdomains;", true, 100, true, sss));
+    TestSuccess("max-age=100;includeSubdomains;", true, 100, true, sss);
 
     // these are weird tests, but are testing that some extended syntax is
     // still allowed (but it is ignored)
-    rvs.AppendElement(TestSuccess("max-age=100 ; includesubdomainsSomeStuff", true, 100, false, sss));
-    rvs.AppendElement(TestSuccess("\r\n\t\t    \tcompletelyUnrelated = foobar; max-age= 34520103    \t \t; alsoUnrelated;asIsThis;\tincludeSubdomains\t\t \t", true, 34520103, true, sss));
-    rvs.AppendElement(TestSuccess("max-age=100; unrelated=\"quoted \\\"thingy\\\"\"", true, 100, false, sss));
-
-    rv0 = rvs.Contains(false) ? 1 : 0;
-    if (rv0 == 0)
-      passed("Successfully Parsed STS headers with mixed case and LWS");
-
-    rvs.Clear();
+    TestSuccess("max-age=100 ; includesubdomainsSomeStuff",
+                true, 100, false, sss);
+    TestSuccess("\r\n\t\t    \tcompletelyUnrelated = foobar; max-age= 34520103"
+                "\t \t; alsoUnrelated;asIsThis;\tincludeSubdomains\t\t \t",
+                true, 34520103, true, sss);
+    TestSuccess("max-age=100; unrelated=\"quoted \\\"thingy\\\"\"",
+                true, 100, false, sss);
 
     // SHOULD FAIL:
-    printf("*** Attempting to parse invalid STS headers (should not parse)...\n");
+    printf("* Attempting to parse invalid STS headers (should not parse)...\n");
     // invalid max-ages
-    rvs.AppendElement(TestFailure("max-age", sss));
-    rvs.AppendElement(TestFailure("max-age ", sss));
-    rvs.AppendElement(TestFailure("max-age=p", sss));
-    rvs.AppendElement(TestFailure("max-age=*1p2", sss));
-    rvs.AppendElement(TestFailure("max-age=.20032", sss));
-    rvs.AppendElement(TestFailure("max-age=!20032", sss));
-    rvs.AppendElement(TestFailure("max-age==20032", sss));
+    TestFailure("max-age", sss);
+    TestFailure("max-age ", sss);
+    TestFailure("max-age=p", sss);
+    TestFailure("max-age=*1p2", sss);
+    TestFailure("max-age=.20032", sss);
+    TestFailure("max-age=!20032", sss);
+    TestFailure("max-age==20032", sss);
 
     // invalid headers
-    rvs.AppendElement(TestFailure("foobar", sss));
-    rvs.AppendElement(TestFailure("maxage=100", sss));
-    rvs.AppendElement(TestFailure("maxa-ge=100", sss));
-    rvs.AppendElement(TestFailure("max-ag=100", sss));
-    rvs.AppendElement(TestFailure("includesubdomains", sss));
-    rvs.AppendElement(TestFailure(";", sss));
-    rvs.AppendElement(TestFailure("max-age=\"100", sss));
+    TestFailure("foobar", sss);
+    TestFailure("maxage=100", sss);
+    TestFailure("maxa-ge=100", sss);
+    TestFailure("max-ag=100", sss);
+    TestFailure("includesubdomains", sss);
+    TestFailure(";", sss);
+    TestFailure("max-age=\"100", sss);
     // The max-age directive here doesn't conform to the spec, so it MUST
     // be ignored. Consequently, the REQUIRED max-age directive is not
     // present in this header, and so it is invalid.
-    rvs.AppendElement(TestFailure("max-age=100, max-age=200; includeSubdomains", sss));
-    rvs.AppendElement(TestFailure("max-age=100 includesubdomains", sss));
-    rvs.AppendElement(TestFailure("max-age=100 bar foo", sss));
-    rvs.AppendElement(TestFailure("max-age=100randomstuffhere", sss));
+    TestFailure("max-age=100, max-age=200; includeSubdomains", sss);
+    TestFailure("max-age=100 includesubdomains", sss);
+    TestFailure("max-age=100 bar foo", sss);
+    TestFailure("max-age=100randomstuffhere", sss);
     // All directives MUST appear only once in an STS header field.
-    rvs.AppendElement(TestFailure("max-age=100; max-age=200", sss));
-    rvs.AppendElement(TestFailure("includeSubdomains; max-age=200; includeSubdomains", sss));
-    rvs.AppendElement(TestFailure("max-age=200; includeSubdomains; includeSubdomains", sss));
+    TestFailure("max-age=100; max-age=200", sss);
+    TestFailure("includeSubdomains; max-age=200; includeSubdomains", sss);
+    TestFailure("max-age=200; includeSubdomains; includeSubdomains", sss);
     // The includeSubdomains directive is valueless.
-    rvs.AppendElement(TestFailure("max-age=100; includeSubdomains=unexpected", sss));
+    TestFailure("max-age=100; includeSubdomains=unexpected", sss);
     // LWS must have at least one space or horizontal tab
-    rvs.AppendElement(TestFailure("\r\nmax-age=200", sss));
-
-    rv1 = rvs.Contains(false) ? 1 : 0;
-    if (rv1 == 0)
-      passed("Avoided parsing invalid STS headers");
-
-    return (rv0 + rv1);
+    TestFailure("\r\nmax-age=200", sss);
 }
--- a/security/manager/ssl/tests/gtest/moz.build
+++ b/security/manager/ssl/tests/gtest/moz.build
@@ -1,19 +1,21 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 SOURCES += [
+    'CertDBTest.cpp',
     'DataStorageTest.cpp',
     'DeserializeCertTest.cpp',
     'MD4Test.cpp',
     'OCSPCacheTest.cpp',
+    'STSParserTest.cpp',
     'TLSIntoleranceTest.cpp',
 ]
 
 LOCAL_INCLUDES += [
     '/security/certverifier',
     '/security/manager/ssl',
     '/security/pkix/include',
     '/security/pkix/test/lib',
--- a/security/manager/ssl/tests/moz.build
+++ b/security/manager/ssl/tests/moz.build
@@ -6,16 +6,12 @@
 
 DIRS += ['unit']
 
 TEST_DIRS += [
     'gtest',
     'mochitest',
 ]
 
-TEST_DIRS += [
-  'compiled',
-]
-
 XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini']
 
 if not CONFIG['MOZ_NO_SMART_CARDS']:
     XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell-smartcards.ini']
--- a/testing/cppunittest.ini
+++ b/testing/cppunittest.ini
@@ -3,17 +3,16 @@
 [TestArray]
 [TestArrayUtils]
 [TestAtomics]
 [TestBinarySearch]
 [TestBind]
 [TestBloomFilter]
 [TestCasting]
 [TestCeilingFloor]
-[TestCertDB]
 [TestCheckedInt]
 [TestCookie]
 [TestCountPopulation]
 [TestCountZeroes]
 [TestDllInterceptor]
 skip-if = os != 'win'
 [TestEndian]
 [TestEnumeratedArray]
@@ -35,17 +34,16 @@ skip-if = os == 'b2g'  #Bug 1038197
 [TestPair]
 [TestPoisonArea]
 skip-if = os == 'android' # Bug 1147630
 [TestRefPtr]
 [TestRollingMean]
 [TestScopeExit]
 [TestSegmentedVector]
 [TestSHA1]
-[TestSTSParser]
 [TestSaturate]
 [TestSplayTree]
 [TestStartupCache]
 skip-if = os == 'b2g' || os == 'android'  # Bug 929655
 support-files = TestStartupCacheTelemetry.js TestStartupCacheTelemetry.manifest
 [TestSyncRunnable]
 [TestTXMgr]
 skip-if = os == 'b2g'  #Bug 919595