From bdc78a27bfde4b3d4758df2924ae8bbbdac29145 Mon Sep 17 00:00:00 2001
From: miigotu <miigotu@gmail.com>
Date: Fri, 11 Dec 2015 17:05:03 -0800
Subject: [PATCH] Rework ssl_sni test to be a little more accurate, less
 spammy, and not fail on cert verification when cert is expired or self signed

---
 sickbeard/providers/animenzb.py |  2 +-
 tests/ssl_sni_tests.py          | 61 ++++++++++++++++++++-------------
 2 files changed, 39 insertions(+), 24 deletions(-)

diff --git a/sickbeard/providers/animenzb.py b/sickbeard/providers/animenzb.py
index 57d230096..93460b518 100644
--- a/sickbeard/providers/animenzb.py
+++ b/sickbeard/providers/animenzb.py
@@ -42,7 +42,7 @@ class animenzb(NZBProvider):
         self.supports_absolute_numbering = True
         self.anime_only = True
 
-        self.urls = {'base_url': 'http://animenzb.com//'}
+        self.urls = {'base_url': 'http://animenzb.com/'}
         self.url = self.urls['base_url']
 
         self.cache = animenzbCache(self)
diff --git a/tests/ssl_sni_tests.py b/tests/ssl_sni_tests.py
index 1d69b9631..add4e7040 100644
--- a/tests/ssl_sni_tests.py
+++ b/tests/ssl_sni_tests.py
@@ -36,34 +36,49 @@ import requests  # pylint: disable=import-error
 import sickbeard.providers as providers
 
 
-class SniTests(unittest.TestCase):
-    """
-    Test SNI
+def test_generator(_provider):
     """
-    self_signed_cert_providers = ["Womble's Index", "Libertalia"]
+    Generate tests for each provider
 
-    def test_sni_urls(self):
+    :param test_strings: to generate tests from
+    :return: test
+    """
+    def _connectivity_test(self):  # pylint: disable=unused-argument
         """
-        Test SNI urls
-        :return:
+        Generate tests
+        :param self:
+        :return: test to run
         """
-        print ''
-        # Just checking all providers - we should make this error on non-existent urls.
-        for provider in [provider for provider in providers.makeProviderList() if provider.name not in self.self_signed_cert_providers]:
-            print 'Checking %s' % provider.name
-            try:
-                requests.head(provider.url, verify=certifi.old_where(), timeout=10)
-            except requests.exceptions.Timeout:
-                pass
-            except requests.exceptions.SSLError as error:
-                if u'SSL3_GET_SERVER_CERTIFICATE' not in ex(error):
-                    print 'SSLError on %s: %s' % (provider.name, ex(error.message))
-                    raise
-                else:
-                    print 'Cannot verify certificate for %s' % provider.name
-            except Exception:  # pylint: disable=broad-except
-                pass
+        if not _provider.url:
+            print '%s has no url set, skipping' % _provider.name
+            return
+
+        try:
+            requests.head(_provider.url, verify=certifi.old_where(), timeout=10)
+        except requests.exceptions.SSLError as error:
+            if 'certificate verify failed' in str(error):
+                print 'Cannot verify certificate for %s' % _provider.name
+            else:
+                print 'SSLError on %s: %s' % (_provider.name, ex(error.message))
+                raise
+        except requests.exceptions.Timeout:
+            print 'Provider timed out'
+
+    return _connectivity_test
+
+class SniTests(unittest.TestCase):
+    pass
 
 if __name__ == "__main__":
+    print("==================")
+    print("STARTING - Provider Connectivity TESTS and SSL/SNI")
+    print("==================")
+    print("######################################################################")
+    # Just checking all providers - we should make this error on non-existent urls.
+    for provider in [p for p in providers.makeProviderList()]:
+        test_name = 'test_%s' % provider.name
+        test = test_generator(provider)
+        setattr(SniTests, test_name, test)
+
     SUITE = unittest.TestLoader().loadTestsFromTestCase(SniTests)
     unittest.TextTestRunner(verbosity=2).run(SUITE)
-- 
GitLab