Skip to content

Commit cc44c19

Browse files
committed
Add test case for when password or user contains special characters
1 parent 88a20d4 commit cc44c19

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

dbbackup/db/postgresql.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
from dbbackup import utils
1+
from urllib.parse import quote
22
import logging
3+
4+
from dbbackup import utils
35
from .base import BaseCommandDBConnector
46
from .exceptions import DumpError
57

@@ -12,9 +14,9 @@ def create_postgres_uri(self):
1214
raise DumpError('A host name is required')
1315

1416
dbname = self.settings.get('NAME') or ''
15-
user = self.settings.get('USER') or ''
17+
user = quote(self.settings.get('USER') or '')
1618
password = self.settings.get('PASSWORD') or ''
17-
password = ':{}'.format(password) if password else ''
19+
password = ':{}'.format(quote(password)) if password else ''
1820
if not user:
1921
password = ''
2022
else:

dbbackup/tests/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import sys
77
from dotenv import load_dotenv
88

9-
test = len(sys.argv) < 0 or sys.argv[1] == 'test'
9+
test = len(sys.argv) <= 1 or sys.argv[1] == 'test'
1010
if not test:
1111
load_dotenv()
1212

dbbackup/tests/test_connectors/test_postgresql.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ def setUp(self):
2121
self.connector.settings['NAME'] = 'dbname'
2222
self.connector.settings['HOST'] = 'hostname'
2323

24+
def test_user_password_uses_special_characters(self, mock_dump_cmd):
25+
self.connector.settings['PASSWORD'] = '@!'
26+
self.connector.settings['USER'] = '@'
27+
28+
self.connector.create_dump()
29+
30+
self.assertIn('postgresql://%40:%40%21@hostname/dbname', mock_dump_cmd.call_args[0][0])
31+
2432
def test_create_dump(self, mock_dump_cmd):
2533
dump = self.connector.create_dump()
2634
# Test dump

0 commit comments

Comments
 (0)