예제 #1
0
class TestIndexClass(unittest.TestCase):

    def setUp(self):
        self.root_path = os.path.abspath(os.path.dirname(__file__) + "/../")
        self.jsons = glob.glob(os.path.join(self.root_path, "data/*.json"))
        self.backups = glob.glob(os.path.join(self.root_path, "data/*.backup"))
        for file in self.jsons + self.backups:
            os.unlink(file)

        self.index = Index(connection=Mockup())

    def tearDown(self):
        files = glob.glob(os.path.join(self.root_path, "data/*.json")) + \
            glob.glob(os.path.join(self.root_path, "data/*.backup"))
        for prevConfig in files:
            try:
                os.unlink(prevConfig)
            except:
                pass

        self.index.stop()
        self.index = None

    @patch.object(status, "get_disks")
    @patch.object(status, "get_memory")
    @patch.object(status, "get_memory_usage")
    @patch.object(status, "get_cpu_usage")
    @patch.object(status, "get_uptime")
    @patch.object(status, "get_product_version")
    @patch.object(status, "get_hostname")
    def test__get_status(
        self, mock_hostname, mock_version, mock_uptime,
            mock_cpu_usage, mock_memory_usage, mock_memory,
            mock_disks):
        """test__get_status: Get system status"""
        mock_hostname.return_value = "Moxa"
        mock_version.return_value = "1.1"
        mock_uptime.return_value = 181499
        mock_cpu_usage.return_value = 98.7
        mock_memory_usage.return_value = 16.8
        mock_memory.return_value = 257286144
        mock_disks.return_value = []
        resp = Mock()
        mock_message = MockMessage()
        mock_message.query = {}
        self.index.get_status(message=mock_message, response=resp, test=True)
        resp.assert_called_once_with(
            data={
                "hostname": mock_hostname.return_value,
                "version": mock_version.return_value,
                "uptimeSec": mock_uptime.return_value,
                "cpuUsage": mock_cpu_usage.return_value,
                "memoryUsage": mock_memory_usage.return_value,
                "memory": mock_memory.return_value,
                "disks": mock_disks.return_value
            }
        )

    @patch.object(status, "get_disks")
    @patch.object(status, "get_memory")
    @patch.object(status, "get_memory_usage")
    @patch.object(status, "get_cpu_usage")
    @patch.object(status, "get_uptime")
    @patch.object(status, "get_product_version")
    @patch.object(status, "get_hostname")
    def test__get_status_querystring(
        self, mock_hostname, mock_version, mock_uptime,
            mock_cpu_usage, mock_memory_usage, mock_memory,
            mock_disks):
        """test__get_status: Get system status"""
        mock_hostname.return_value = "Moxa"
        mock_version.return_value = "1.1"
        mock_uptime.return_value = 181499
        mock_cpu_usage.return_value = 98.7
        mock_memory_usage.return_value = 16.8
        mock_memory.return_value = 257286144
        mock_disks.return_value = []
        resp = Mock()
        mock_message = MockMessage()
        mock_message.query = {
            "fields": "cpuUsage,disks"
        }
        self.index.get_status(message=mock_message, response=resp, test=True)
        resp.assert_called_once_with(
            data={
                "cpuUsage": mock_cpu_usage.return_value,
                "disks": mock_disks.return_value
            }
        )
        self.assertFalse(mock_hostname.called)
        self.assertFalse(mock_version.called)
        self.assertFalse(mock_uptime.called)
        self.assertFalse(mock_memory_usage.called)
        self.assertFalse(mock_memory.called)

    @patch.object(status, "set_hostname")
    def test__put_status(self, mock_set_hostname):
        """test__put_status: Update hostname"""
        resp = Mock()
        message = Message({
            "data": {
                "hostname": "test"
            }
        })
        self.index.put_status(message=message, response=resp, test=True)
        resp.assert_called_once_with(data=message.data)

    @patch.object(status, "get_net_interfaces")
    def test__get_net_interfaces(self, mock_netifaces):
        """test__get_net_interfaces: Get network interface list"""
        mock_netifaces.return_value = ["eth0", "eth1", "wwan0"]

        resp = Mock()
        self.index.get_net_interface(message=None, response=resp, test=True)
        resp.assert_called_once_with(data=mock_netifaces.return_value)

    @patch("status.tar_syslog_files")
    @patch("index.requests.post")
    @patch("index.sh")
    def test_post_syslog(
            self, mock_sh, mock_post_requests, mock_tar_syslog_files):
        """
        post
        "data": {
            "hostname": "test"
        }
        """
        message = Message({
            "data": {
                "headers": {
                    "xxx": "yyy"
                },
                "url": "https://localhost"
            }, "query": {}, "param": {}})
        download_url = "https://localhost/api/v1/download/123456789"
        filename = "xxx.tar.gz"
        mock_tar_syslog_files.return_value = filename
        mock_post_result = Mock()
        mock_post_requests.return_value = mock_post_result
        mock_post_result.status_code = requests.codes.ok
        mock_post_result.json.return_value = {
            "url": download_url
        }

        def resp(code=200, data=None):
            self.assertEqual(200, code)
            self.assertEqual(download_url, data["url"])

        with patch("__builtin__.open"):
            self.index.post_syslog(message=message, response=resp, test=True)
        mock_tar_syslog_files.assert_called_once_with(ANY)
        self.assertTrue(mock_sh.rm.called)
        mock_post_requests.assert_called_once_with(
            message.data["url"],
            files={filename: ANY},
            headers=message.data["headers"],
            verify=False
        )