Test cases for shared.py
This commit is contained in:
parent
0ed566500f
commit
d555a79200
152
src/tests/test_shared.py
Normal file
152
src/tests/test_shared.py
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
"""Test cases for shared.py"""
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from pybitmessage.shared import (
|
||||||
|
isAddressInMyAddressBook,
|
||||||
|
isAddressInMySubscriptionsList,
|
||||||
|
checkSensitiveFilePermissions,
|
||||||
|
reloadBroadcastSendersForWhichImWatching,
|
||||||
|
fixSensitiveFilePermissions,
|
||||||
|
MyECSubscriptionCryptorObjects,
|
||||||
|
stat,
|
||||||
|
os,
|
||||||
|
)
|
||||||
|
|
||||||
|
from .samples import sample_address
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Python 3
|
||||||
|
from unittest.mock import patch, PropertyMock
|
||||||
|
except ImportError:
|
||||||
|
# Python 2
|
||||||
|
from mock import patch, PropertyMock
|
||||||
|
|
||||||
|
# mock os.stat data for file
|
||||||
|
PERMISSION_MODE1 = stat.S_IRUSR # allow Read permission for the file owner.
|
||||||
|
PERMISSION_MODE2 = (
|
||||||
|
stat.S_IRWXO
|
||||||
|
) # allow read, write, serach & execute permission for other users
|
||||||
|
INODE = 753
|
||||||
|
DEV = 1795
|
||||||
|
NLINK = 1
|
||||||
|
UID = 1000
|
||||||
|
GID = 0
|
||||||
|
SIZE = 1021
|
||||||
|
ATIME = 1711587560
|
||||||
|
MTIME = 1709449249
|
||||||
|
CTIME = 1709449603
|
||||||
|
|
||||||
|
|
||||||
|
class TestShared(unittest.TestCase):
|
||||||
|
"""Test class for shared.py"""
|
||||||
|
|
||||||
|
@patch("pybitmessage.shared.sqlQuery")
|
||||||
|
def test_isaddress_in_myaddressbook(self, mock_sql_query):
|
||||||
|
"""Test if address is in MyAddressbook"""
|
||||||
|
address = sample_address
|
||||||
|
|
||||||
|
# if address is in MyAddressbook
|
||||||
|
mock_sql_query.return_value = [address]
|
||||||
|
return_val = isAddressInMyAddressBook(address)
|
||||||
|
mock_sql_query.assert_called_once()
|
||||||
|
self.assertTrue(return_val)
|
||||||
|
|
||||||
|
# if address is not in MyAddressbook
|
||||||
|
mock_sql_query.return_value = []
|
||||||
|
return_val = isAddressInMyAddressBook(address)
|
||||||
|
self.assertFalse(return_val)
|
||||||
|
self.assertEqual(mock_sql_query.call_count, 2)
|
||||||
|
|
||||||
|
@patch("pybitmessage.shared.sqlQuery")
|
||||||
|
def test_isaddress_in_mysubscriptionslist(self, mock_sql_query):
|
||||||
|
"""Test if address is in MySubscriptionsList"""
|
||||||
|
|
||||||
|
address = sample_address
|
||||||
|
|
||||||
|
# if address is in MySubscriptionsList
|
||||||
|
mock_sql_query.return_value = [address]
|
||||||
|
return_val = isAddressInMySubscriptionsList(address)
|
||||||
|
self.assertTrue(return_val)
|
||||||
|
|
||||||
|
# if address is not in MySubscriptionsList
|
||||||
|
mock_sql_query.return_value = []
|
||||||
|
return_val = isAddressInMySubscriptionsList(address)
|
||||||
|
self.assertFalse(return_val)
|
||||||
|
self.assertEqual(mock_sql_query.call_count, 2)
|
||||||
|
|
||||||
|
@patch("pybitmessage.shared.sqlQuery")
|
||||||
|
def test_reloadBroadcastSendersForWhichImWatching(self, mock_sql_query):
|
||||||
|
"""Test for reload Broadcast Senders For Which Im Watching"""
|
||||||
|
mock_sql_query.return_value = [
|
||||||
|
(sample_address,),
|
||||||
|
]
|
||||||
|
# before reload
|
||||||
|
self.assertEqual(len(MyECSubscriptionCryptorObjects), 0)
|
||||||
|
|
||||||
|
# reloading with addressVersionNumber 1
|
||||||
|
reloadBroadcastSendersForWhichImWatching()
|
||||||
|
self.assertGreater(len(MyECSubscriptionCryptorObjects), 0)
|
||||||
|
|
||||||
|
@patch("pybitmessage.shared.os.stat")
|
||||||
|
@patch(
|
||||||
|
"pybitmessage.shared.sys",
|
||||||
|
new_callable=PropertyMock, # pylint: disable=used-before-assignment
|
||||||
|
)
|
||||||
|
def test_check_sensitive_file_permissions(self, mock_sys, mock_os_stat):
|
||||||
|
"""Test to check file permissions"""
|
||||||
|
fake_filename = "path/to/file"
|
||||||
|
|
||||||
|
# test for windows system
|
||||||
|
mock_sys.platform = "win32"
|
||||||
|
result = checkSensitiveFilePermissions(fake_filename)
|
||||||
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
# test for freebsd system
|
||||||
|
mock_sys.platform = "freebsd7"
|
||||||
|
# returning file permission mode stat.S_IRUSR
|
||||||
|
MOCK_OS_STAT_RETURN = os.stat_result(
|
||||||
|
sequence=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
dict={
|
||||||
|
"st_mode": PERMISSION_MODE1,
|
||||||
|
"st_ino": INODE,
|
||||||
|
"st_dev": DEV,
|
||||||
|
"st_nlink": NLINK,
|
||||||
|
"st_uid": UID,
|
||||||
|
"st_gid": GID,
|
||||||
|
"st_size": SIZE,
|
||||||
|
"st_atime": ATIME,
|
||||||
|
"st_mtime": MTIME,
|
||||||
|
"st_ctime": CTIME,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
mock_os_stat.return_value = MOCK_OS_STAT_RETURN
|
||||||
|
result = checkSensitiveFilePermissions(fake_filename)
|
||||||
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
@patch("pybitmessage.shared.os.chmod")
|
||||||
|
@patch("pybitmessage.shared.os.stat")
|
||||||
|
def test_fix_sensitive_file_permissions( # pylint: disable=no-self-use
|
||||||
|
self, mock_os_stat, mock_chmod
|
||||||
|
):
|
||||||
|
"""Test to fix file permissions"""
|
||||||
|
fake_filename = "path/to/file"
|
||||||
|
|
||||||
|
# returning file permission mode stat.S_IRWXO
|
||||||
|
MOCK_OS_STAT_RETURN = os.stat_result(
|
||||||
|
sequence=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
dict={
|
||||||
|
"st_mode": PERMISSION_MODE2,
|
||||||
|
"st_ino": INODE,
|
||||||
|
"st_dev": DEV,
|
||||||
|
"st_nlink": NLINK,
|
||||||
|
"st_uid": UID,
|
||||||
|
"st_gid": GID,
|
||||||
|
"st_size": SIZE,
|
||||||
|
"st_atime": ATIME,
|
||||||
|
"st_mtime": MTIME,
|
||||||
|
"st_ctime": CTIME,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
mock_os_stat.return_value = MOCK_OS_STAT_RETURN
|
||||||
|
fixSensitiveFilePermissions(fake_filename, False)
|
||||||
|
mock_chmod.assert_called_once()
|
Reference in New Issue
Block a user