mirror of
https://github.com/KevinMidboe/cloudflare-ddns.git
synced 2025-10-29 17:40:17 +00:00
Unit tests for valid IP, public IP & CF API requests
This commit is contained in:
20
.drone.yml
20
.drone.yml
@@ -1,3 +1,21 @@
|
|||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: Test
|
||||||
|
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Run unit tests
|
||||||
|
image: python:3.10-alpine
|
||||||
|
commands:
|
||||||
|
- pip install -r requirements.txt
|
||||||
|
- pip install -r requirements-test.txt
|
||||||
|
- python3 -m unittest tests/test_*.py -v
|
||||||
|
|
||||||
---
|
---
|
||||||
kind: pipeline
|
kind: pipeline
|
||||||
type: docker
|
type: docker
|
||||||
@@ -99,6 +117,6 @@ volumes:
|
|||||||
|
|
||||||
---
|
---
|
||||||
kind: signature
|
kind: signature
|
||||||
hmac: d3088aaf784f4eaac3223f43a86a19bfccff416fd854351c527d785002ae2c26
|
hmac: 65e2dbf1e3ea133f91518bee0532663a3e3941d05c8335114141910dcca8f660
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|||||||
2
tests/__init__.py
Normal file
2
tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
from src.logger import logger
|
||||||
|
logger.setLevel('WARNING')
|
||||||
80
tests/test_cloudflare_dns_record_ip.py
Normal file
80
tests/test_cloudflare_dns_record_ip.py
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
import re
|
||||||
|
import unittest
|
||||||
|
import responses
|
||||||
|
from src.main import cloudflareDDNS
|
||||||
|
|
||||||
|
MOCK_IP = '44.208.147.61'
|
||||||
|
CLOUDFLARE_GET_RECORDS_URL = re.compile(
|
||||||
|
r"https\:\/\/api.cloudflare.com\/client\/v4\/zones\/\w*\/dns_records\?type\=A")
|
||||||
|
CLOUDFLARE_ADDR_RECORD_EXISTS_RESPONSE = {
|
||||||
|
'success': True,
|
||||||
|
'result': [{
|
||||||
|
'content': MOCK_IP,
|
||||||
|
'name': 'addr.',
|
||||||
|
'id': 'id',
|
||||||
|
'ttl': 86400,
|
||||||
|
'proxied': True
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
CLOUDFLARE_ADDR_RECORD_NONEXISTANT_RESPONSE = {
|
||||||
|
'success': True,
|
||||||
|
'result': [{
|
||||||
|
'content': MOCK_IP,
|
||||||
|
'name': None,
|
||||||
|
'id': 'id',
|
||||||
|
'ttl': 86400,
|
||||||
|
'proxied': True
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
CLOUDFLARE_500_RESPONSE = {
|
||||||
|
'success': False,
|
||||||
|
'errors': 'someerror'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class TestCloudflareDNSRecordIP(unittest.TestCase):
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_successfull_response(self):
|
||||||
|
responses.add(responses.GET, CLOUDFLARE_GET_RECORDS_URL,
|
||||||
|
json=CLOUDFLARE_ADDR_RECORD_EXISTS_RESPONSE, status=200)
|
||||||
|
|
||||||
|
ip = cloudflareDDNS()
|
||||||
|
|
||||||
|
self.assertEqual(MOCK_IP, ip)
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_addr_record_exists(self):
|
||||||
|
responses.add(responses.GET, CLOUDFLARE_GET_RECORDS_URL,
|
||||||
|
json=CLOUDFLARE_ADDR_RECORD_NONEXISTANT_RESPONSE,
|
||||||
|
status=200)
|
||||||
|
|
||||||
|
self.assertRaises(Exception, cloudflareDDNS)
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_cloudflare_500_response(self):
|
||||||
|
responses.add(responses.GET, CLOUDFLARE_GET_RECORDS_URL,
|
||||||
|
json=CLOUDFLARE_500_RESPONSE,
|
||||||
|
status=500)
|
||||||
|
|
||||||
|
self.assertRaises(Exception, cloudflareDDNS)
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_cloudflare_empty_200_response(self):
|
||||||
|
responses.add(responses.GET, CLOUDFLARE_GET_RECORDS_URL,
|
||||||
|
json={},
|
||||||
|
status=500)
|
||||||
|
|
||||||
|
self.assertRaises(Exception, cloudflareDDNS)
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_cloudflare_empty_500_response(self):
|
||||||
|
responses.add(responses.GET, CLOUDFLARE_GET_RECORDS_URL,
|
||||||
|
json={},
|
||||||
|
status=500)
|
||||||
|
|
||||||
|
self.assertRaises(Exception, cloudflareDDNS)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
33
tests/test_ip_address.py
Normal file
33
tests/test_ip_address.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import unittest
|
||||||
|
from src.main import validIP
|
||||||
|
|
||||||
|
MOCK_IP = "44.208.147.61"
|
||||||
|
|
||||||
|
|
||||||
|
class TestIPAddress(unittest.TestCase):
|
||||||
|
def test_valid_ip(self):
|
||||||
|
self.assertTrue(validIP(MOCK_IP))
|
||||||
|
|
||||||
|
def test_invalid_ip(self):
|
||||||
|
ip = "256.0.0.1"
|
||||||
|
self.assertFalse(validIP(ip))
|
||||||
|
|
||||||
|
def test_invalid_format(self):
|
||||||
|
ip = "192.168.1"
|
||||||
|
self.assertFalse(validIP(ip))
|
||||||
|
|
||||||
|
def test_empty_string(self):
|
||||||
|
ip = ""
|
||||||
|
self.assertFalse(validIP(ip))
|
||||||
|
|
||||||
|
def test_error_looking_string(self):
|
||||||
|
ip = "upstream connect error or disconnect/reset before headers. reset reason: connection timeout."
|
||||||
|
self.assertFalse(validIP(ip))
|
||||||
|
|
||||||
|
def test_none(self):
|
||||||
|
ip = None
|
||||||
|
self.assertFalse(validIP(ip))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
40
tests/test_public_ip.py
Normal file
40
tests/test_public_ip.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import unittest
|
||||||
|
import responses
|
||||||
|
from src.main import publicAddress
|
||||||
|
|
||||||
|
MOCK_IP = '44.208.147.61'
|
||||||
|
MOCK_TIMEOUT = 'upstream connect error or disconnect/reset before headers. reset reason: connection timeout.'
|
||||||
|
|
||||||
|
|
||||||
|
class TestPublicAddress(unittest.TestCase):
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_successfull_response(self):
|
||||||
|
responses.add(responses.GET, 'https://ifconfig.me',
|
||||||
|
body=MOCK_IP, status=200)
|
||||||
|
|
||||||
|
ip = publicAddress()
|
||||||
|
|
||||||
|
self.assertEqual(MOCK_IP, ip)
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_timeout_response(self):
|
||||||
|
responses.add(responses.GET, 'https://ifconfig.me',
|
||||||
|
body=MOCK_TIMEOUT, status=500)
|
||||||
|
|
||||||
|
ip = publicAddress()
|
||||||
|
|
||||||
|
self.assertIsNone(ip)
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_mangled_response(self):
|
||||||
|
responses.add(responses.GET, 'https://ifconfig.me',
|
||||||
|
body='123.22', status=200)
|
||||||
|
|
||||||
|
ip = publicAddress()
|
||||||
|
|
||||||
|
self.assertIsNone(ip)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
Reference in New Issue
Block a user