File size: 5,932 Bytes
2f3c093
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import unittest
import logging
from unittest.mock import patch, MagicMock
import platform
from core.networking.identity_manager import IdentityManager
from core.utils.logger import setup_logger

class TestIdentityManager(unittest.TestCase):

    def setUp(self):
        self.logger = setup_logger(__name__, level=logging.CRITICAL)
        self.identity_manager = IdentityManager(self.logger)

    @patch("subprocess.run")
    def test_get_default_interface_linux(self, mock_run):
        if platform.system() == "Linux":
            mock_run.return_value.stdout = "0.0.0.0         0.0.0.0         0.0.0.0         UG    0      0        0 eth0"
            mock_run.return_value.returncode = 0
            interface = self.identity_manager._get_default_interface()
            self.assertEqual(interface, "eth0")

    @patch("subprocess.run")
    def test_get_default_interface_darwin(self, mock_run):
        if platform.system() == "Darwin":
            mock_run.return_value.stdout = "interface: en0"
            mock_run.return_value.returncode = 0
            interface = self.identity_manager._get_default_interface()
            self.assertEqual(interface, "en0")

    @patch("subprocess.run")
    def test_get_default_interface_unsupported(self, mock_run):
        if platform.system() not in ["Linux", "Darwin"]:
            interface = self.identity_manager._get_default_interface()
            self.assertEqual(interface, "eth0")

    @patch("subprocess.run")
    def test_get_current_mac(self, mock_run):
        mock_run.return_value.stdout = "        ether 00:11:22:33:44:55 "
        mock_run.return_value.returncode = 0
        mac = self.identity_manager.get_current_mac()
        self.assertEqual(mac, "00:11:22:33:44:55")

        mock_run.return_value.stdout = "        lladdr 00:11:22:33:44:55 "
        mock_run.return_value.returncode = 0
        mac = self.identity_manager.get_current_mac()
        self.assertEqual(mac, "00:11:22:33:44:55")

        mock_run.return_value.stdout = "        invalid output "
        mock_run.return_value.returncode = 0
        mac = self.identity_manager.get_current_mac()
        self.assertIsNone(mac)

        mock_run.side_effect = Exception("Test Exception")
        mac = self.identity_manager.get_current_mac()
        self.assertIsNone(mac)

    @patch("subprocess.run")
    def test_get_current_ip(self, mock_run):
        mock_run.return_value.stdout = "        inet 192.168.1.100 "
        mock_run.return_value.returncode = 0
        ip = self.identity_manager.get_current_ip()
        self.assertEqual(ip, "192.168.1.100")

        mock_run.return_value.stdout = "        invalid output "
        mock_run.return_value.returncode = 0
        ip = self.identity_manager.get_current_ip()
        self.assertIsNone(ip)

        mock_run.side_effect = Exception("Test Exception")
        ip = self.identity_manager.get_current_ip()
        self.assertIsNone(ip)

    @patch("subprocess.run")
    def test_change_mac_address(self, mock_run):
        mock_run.return_value.returncode = 0
        result = self.identity_manager.change_mac_address(new_mac="00:AA:BB:CC:DD:EE")
        self.assertTrue(result)
        mock_run.side_effect = Exception("Test Exception")
        result = self.identity_manager.change_mac_address(new_mac="00:AA:BB:CC:DD:EE")
        self.assertFalse(result)

    @patch("subprocess.run")
    def test_restore_mac_address(self, mock_run):
        self.identity_manager.original_mac = "00:11:22:33:44:55"
        mock_run.return_value.returncode = 0
        self.identity_manager.restore_mac_address()
        self.assertTrue(mock_run.called)

        self.identity_manager.original_mac = None
        self.identity_manager.restore_mac_address()
        self.assertFalse(mock_run.called)

    @patch("subprocess.run")
    def test_change_ip_address(self, mock_run):
        mock_run.return_value.returncode = 0
        result = self.identity_manager.change_ip_address(new_ip="192.168.1.200")
        self.assertTrue(result)
        mock_run.side_effect = Exception("Test Exception")
        result = self.identity_manager.change_ip_address(new_ip="192.168.1.200")
        self.assertFalse(result)

    @patch("subprocess.run")
    def test_restore_ip_address(self, mock_run):
        self.identity_manager.original_ip = "192.168.1.100"
        mock_run.return_value.returncode = 0
        self.identity_manager.restore_ip_address()
        self.assertTrue(mock_run.called)

        self.identity_manager.original_ip = None
        self.identity_manager.restore_ip_address()
        self.assertFalse(mock_run.called)

    def test_start_tor_session(self):
        with patch.object(self.identity_manager, 'get_current_mac', return_value="00:11:22:33:44:55"):
            with patch.object(self.identity_manager, 'get_current_ip', return_value="192.168.1.100"):
                with patch.object(self.identity_manager, 'change_mac_address', return_value=True):
                    with patch.object(self.identity_manager, 'change_ip_address', return_value=True):
                        self.identity_manager.start_tor_session()
                        self.assertEqual(self.identity_manager.original_mac, "00:11:22:33:44:55")
                        self.assertEqual(self.identity_manager.original_ip, "192.168.1.100")

    def test_stop_tor_session(self):
        with patch.object(self.identity_manager, 'restore_mac_address', return_value=True):
            with patch.object(self.identity_manager, 'restore_ip_address', return_value=True):
                self.identity_manager.stop_tor_session()
                self.assertTrue(self.identity_manager.restore_mac_address.called)
                self.assertTrue(self.identity_manager.restore_ip_address.called)

if __name__ == '__main__':
    unittest.main()