Merge pull request #1730 from sherlock-project/enhanced-unit-tests

generate unclaimed username based on regex
pull/1731/head
Siddharth Dushantha 2 years ago committed by GitHub
commit 64eec640d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,3 +7,4 @@ stem>=1.8.0
torrequest>=0.1.0 torrequest>=0.1.0
pandas>=1.0.0 pandas>=1.0.0
openpyxl<=3.0.10 openpyxl<=3.0.10
exrex>=0.11.0

@ -94,6 +94,7 @@
"username_claimed": "pink" "username_claimed": "pink"
}, },
"AllMyLinks": { "AllMyLinks": {
"regexCheck": "^[a-z0-9][a-z0-9-]{2,32}$",
"errorMsg": "Not Found", "errorMsg": "Not Found",
"errorType": "message", "errorType": "message",
"url": "https://allmylinks.com/{}", "url": "https://allmylinks.com/{}",

@ -28,7 +28,7 @@ from sites import SitesInformation
from colorama import init from colorama import init
module_name = "Sherlock: Find Usernames Across Social Networks" module_name = "Sherlock: Find Usernames Across Social Networks"
__version__ = "0.14.2" __version__ = "0.14.3"
class SherlockFuturesSession(FuturesSession): class SherlockFuturesSession(FuturesSession):

@ -3,7 +3,7 @@
This module contains various tests. This module contains various tests.
""" """
from tests.base import SherlockBaseTest from tests.base import SherlockBaseTest
import secrets import exrex
class SherlockDetectTests(SherlockBaseTest): class SherlockDetectTests(SherlockBaseTest):
@ -27,10 +27,7 @@ class SherlockDetectTests(SherlockBaseTest):
# Ensure that the site's detection method has not changed. # Ensure that the site's detection method has not changed.
self.assertEqual("message", site_data["errorType"]) self.assertEqual("message", site_data["errorType"])
self.username_check([site_data["username_claimed"]], self.username_check([site_data["username_claimed"]], [site], exist_check=True)
[site],
exist_check=True
)
return return
@ -54,10 +51,16 @@ class SherlockDetectTests(SherlockBaseTest):
# Ensure that the site's detection method has not changed. # Ensure that the site's detection method has not changed.
self.assertEqual("message", site_data["errorType"]) self.assertEqual("message", site_data["errorType"])
self.username_check([secrets.token_urlsafe(10)], # Generate a valid username based on the regex for a username that the
[site], # site supports that is *most likely* not taken. The regex is slighlty
exist_check=False # modified version of site_data["regexCheck"] as we want a username
) # that has the maximum length that is supported by the site. This way,
# we wont generate a random username that might actually exist. This
# method is very hacky, but it does the job as having hardcoded
# usernames that dont exists will lead to people with ill intent to
# create an account with that username which will break the tests
valid_username = exrex.getone(r"^[a-z0-9][a-z0-9-]{32}$")
self.username_check([valid_username], [site], exist_check=False)
return return
@ -75,16 +78,13 @@ class SherlockDetectTests(SherlockBaseTest):
Will trigger an assert if detection mechanism did not work as expected. Will trigger an assert if detection mechanism did not work as expected.
""" """
site = "9GAG" site = "BitBucket"
site_data = self.site_data_all[site] site_data = self.site_data_all[site]
# Ensure that the site's detection method has not changed. # Ensure that the site's detection method has not changed.
self.assertEqual("status_code", site_data["errorType"]) self.assertEqual("status_code", site_data["errorType"])
self.username_check([site_data["username_claimed"]], self.username_check([site_data["username_claimed"]], [site], exist_check=True)
[site],
exist_check=True
)
return return
@ -102,57 +102,27 @@ class SherlockDetectTests(SherlockBaseTest):
Will trigger an assert if detection mechanism did not work as expected. Will trigger an assert if detection mechanism did not work as expected.
""" """
site = "9GAG" site = "BitBucket"
site_data = self.site_data_all[site] site_data = self.site_data_all[site]
# Ensure that the site's detection method has not changed. # Ensure that the site's detection method has not changed.
self.assertEqual("status_code", site_data["errorType"]) self.assertEqual("status_code", site_data["errorType"])
self.username_check([secrets.token_urlsafe(10)], # Generate a valid username based on the regex for a username that the
[site], # site supports that is *most likely* not taken. The regex is slighlty
exist_check=False # modified version of site_data["regexCheck"] as we want a username
) # that has the maximum length that is supported by the site. This way,
# we wont generate a random username that might actually exist. This
# method is very hacky, but it does the job as having hardcoded
# usernames that dont exists will lead to people with ill intent to
# create an account with that username which will break the tests
valid_username = exrex.getone(r"^[a-zA-Z0-9-_]{30}")
self.username_check([valid_username], [site], exist_check=False)
return return
class SherlockSiteCoverageTests(SherlockBaseTest): class SherlockSiteCoverageTests(SherlockBaseTest):
def test_coverage_false_via_response_url(self):
"""Test Username Does Not Exist Site Coverage (Via Response URL).
This test checks all sites with the "response URL" detection mechanism
to ensure that a Username that does not exist is reported that way.
Keyword Arguments:
self -- This object.
Return Value:
Nothing.
Will trigger an assert if detection mechanism did not work as expected.
"""
self.detect_type_check("response_url", exist_check=False)
return
def test_coverage_true_via_response_url(self):
"""Test Username Does Exist Site Coverage (Via Response URL).
This test checks all sites with the "response URL" detection mechanism
to ensure that a Username that does exist is reported that way.
Keyword Arguments:
self -- This object.
Return Value:
Nothing.
Will trigger an assert if detection mechanism did not work as expected.
"""
self.detect_type_check("response_url", exist_check=True)
return
def test_coverage_false_via_status(self): def test_coverage_false_via_status(self):
"""Test Username Does Not Exist Site Coverage (Via HTTP Status). """Test Username Does Not Exist Site Coverage (Via HTTP Status).

@ -7,7 +7,6 @@ import os.path
import unittest import unittest
import sherlock import sherlock
from result import QueryStatus from result import QueryStatus
from result import QueryResult
from notify import QueryNotify from notify import QueryNotify
from sites import SitesInformation from sites import SitesInformation
import warnings import warnings
@ -31,7 +30,7 @@ class SherlockBaseTest(unittest.TestCase):
warnings.simplefilter("ignore", ResourceWarning) warnings.simplefilter("ignore", ResourceWarning)
# Create object with all information about sites we are aware of. # Create object with all information about sites we are aware of.
sites = SitesInformation() sites = SitesInformation(data_file_path=os.path.join(os.path.dirname(__file__), "../resources/data.json"))
# Create original dictionary from SitesInformation() object. # Create original dictionary from SitesInformation() object.
# Eventually, the rest of the code will be updated to use the new object # Eventually, the rest of the code will be updated to use the new object

Loading…
Cancel
Save