Skip to content
Merged

Test #69

Show file tree
Hide file tree
Changes from 16 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/publish_pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ jobs:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v1
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
Expand Down
23 changes: 12 additions & 11 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ jobs:
os: [ubuntu-22.04, windows-2022, macOS-13]
python-version: [3.7, 3.8, 3.9, 3.10.5, 3.11.0, 3.12.0, 3.13.0]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
# Setup WARP (Ubuntu only)
- name: Setup WARP
if: matrix.os == 'ubuntu-22.04'
uses: ./.github/actions/setup-warp
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Installation
Expand All @@ -60,16 +60,17 @@ jobs:
run: |
python otherfiles/requirements-splitter.py
pip install --upgrade --upgrade-strategy=only-if-needed -r test-requirements.txt
- name: Test with pytest
- name: Test with pytest (IPv4 functions)
run: |
OS="${{ matrix.os }}"
TEST_OS="${{ env.TEST_OS }}"
if [[ "$OS" == "$TEST_OS" ]]; then
python -m pytest . --cov=ipspot --cov-report=term
else
python -m pytest . --cov=ipspot --cov-report=term --ignore=tests/test_ipv6.py
fi
shell: bash
python -m pytest . --cov=ipspot --cov-report=term --ignore-glob="tests/test_ipv6_*.py" --ignore=tests/test_ipv4_api.py
- name: Test with pytest (IPv4 / IPv6 functions)
run: |
python -m pytest . --cov=ipspot --cov-report=term --ignore=tests/test_ipv6_api.py --ignore=tests/test_ipv4_api.py
if: matrix.os == env.TEST_OS
- name: Test with pytest (IPv4 API)
run: |
python -m pytest . --cov=ipspot --cov-report=term --ignore=tests/test_ipv6_api.py
if: matrix.python-version == env.TEST_PYTHON_VERSION && matrix.os == env.TEST_OS
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
Expand Down
2 changes: 1 addition & 1 deletion ipspot/ipv4.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ def _my_ip_io_ipv4(geo: bool=False, timeout: Union[float, Tuple[float, float]]
return {"status": False, "error": str(e)}


def _ifconfig_co_ipv4(geo: bool=False, timeout: Union[float, Tuple[float, float]] # very low rate limit
def _ifconfig_co_ipv4(geo: bool=False, timeout: Union[float, Tuple[float, float]] # very low rate limit
=5) -> Dict[str, Union[bool, Dict[str, Union[str, float]], str]]:
"""
Get public IP and geolocation using ifconfig.co.
Expand Down
155 changes: 155 additions & 0 deletions tests/test_ipv4_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
from ipspot import is_ipv4
from ipspot import get_public_ipv4, IPv4API

TEST_CASE_NAME = "IPv4 API tests"
DATA_ITEMS = {'country_code', 'latitude', 'longitude', 'api', 'country', 'timezone', 'organization', 'region', 'ip', 'city'}


def test_public_ipv4_auto_success():
result = get_public_ipv4(api=IPv4API.AUTO, geo=True)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS


def test_public_ipv4_auto_safe_success():
result = get_public_ipv4(api=IPv4API.AUTO_SAFE, geo=True)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS


def test_public_ipv4_ipapi_co_success():
result = get_public_ipv4(api=IPv4API.IPAPI_CO, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ipapi.co"


def test_public_ipv4_ipleak_net_success():
result = get_public_ipv4(api=IPv4API.IPLEAK_NET, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ipleak.net"


def test_public_ipv4_my_ip_io_success():
result = get_public_ipv4(api=IPv4API.MY_IP_IO, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "my-ip.io"


def test_public_ipv4_ifconfig_co_success():
result = get_public_ipv4(api=IPv4API.IFCONFIG_CO, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ifconfig.co"



def test_public_ipv4_myip_la_success():
result = get_public_ipv4(api=IPv4API.MYIP_LA, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "myip.la"


def test_public_ipv4_ipquery_io_success():
result = get_public_ipv4(api=IPv4API.IPQUERY_IO, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ipquery.io"


def test_public_ipv4_ipwho_is_success():
result = get_public_ipv4(api=IPv4API.IPWHO_IS, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ipwho.is"


def test_public_ipv4_freeipapi_com_success():
result = get_public_ipv4(api=IPv4API.FREEIPAPI_COM, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "freeipapi.com"



def test_public_ipv4_ip_api_com_success():
result = get_public_ipv4(api=IPv4API.IP_API_COM, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ip-api.com"




Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why there are more spaces between these api test versus others

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 840c6b1

def test_public_ipv4_ipinfo_io_success():
result = get_public_ipv4(api=IPv4API.IPINFO_IO, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ipinfo.io"





def test_public_ipv4_ip_sb_success():
result = get_public_ipv4(api=IPv4API.IP_SB, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ip.sb"




def test_public_ipv4_ident_me_success():
result = get_public_ipv4(api=IPv4API.IDENT_ME, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "ident.me"





def test_public_ipv4_tnedi_me_success():
result = get_public_ipv4(api=IPv4API.TNEDI_ME, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "tnedi.me"




def test_public_ipv4__reallyfreegeoip_org_success():
result = get_public_ipv4(api=IPv4API.REALLYFREEGEOIP_ORG, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "reallyfreegeoip.org"




def test_public_ipv4_wtfismyip_com_success():
result = get_public_ipv4(api=IPv4API.WTFISMYIP_COM, geo=True, timeout=40, max_retries=4, retry_delay=90)
assert result["status"]
assert is_ipv4(result["data"]["ip"])
assert set(result["data"].keys()) == DATA_ITEMS
assert result["data"]["api"] == "wtfismyip.com"
Loading