|
2 | 2 | import os
|
3 | 3 | from itertools import cycle
|
4 | 4 | from typing import TYPE_CHECKING
|
5 |
| -from unittest.mock import patch |
| 5 | +from unittest.mock import PropertyMock, patch |
6 | 6 | from zoneinfo import ZoneInfo
|
7 | 7 |
|
8 | 8 | from django.conf import settings
|
@@ -768,6 +768,67 @@ def test_run_script(self, run_script, email_task):
|
768 | 768 |
|
769 | 769 | self.assertEqual(Note.objects.get(agent=self.agent).note, "ok")
|
770 | 770 |
|
| 771 | + # test run on server |
| 772 | + with patch("core.utils.run_server_script") as mock_run_server_script: |
| 773 | + mock_run_server_script.return_value = ("output", "error", 1.23456789, 0) |
| 774 | + data = { |
| 775 | + "script": script.pk, |
| 776 | + "output": "wait", |
| 777 | + "args": ["arg1", "arg2"], |
| 778 | + "timeout": 15, |
| 779 | + "run_as_user": False, |
| 780 | + "env_vars": ["key1=val1", "key2=val2"], |
| 781 | + "run_on_server": True, |
| 782 | + } |
| 783 | + |
| 784 | + r = self.client.post(url, data, format="json") |
| 785 | + self.assertEqual(r.status_code, 200) |
| 786 | + hist = AgentHistory.objects.filter(agent=self.agent, script=script).last() |
| 787 | + if not hist: |
| 788 | + raise AgentHistory.DoesNotExist |
| 789 | + |
| 790 | + mock_run_server_script.assert_called_with( |
| 791 | + body=script.script_body, |
| 792 | + args=script.parse_script_args(self.agent, script.shell, data["args"]), |
| 793 | + env_vars=script.parse_script_env_vars( |
| 794 | + self.agent, script.shell, data["env_vars"] |
| 795 | + ), |
| 796 | + shell=script.shell, |
| 797 | + timeout=18, |
| 798 | + ) |
| 799 | + |
| 800 | + expected_ret = { |
| 801 | + "stdout": "output", |
| 802 | + "stderr": "error", |
| 803 | + "execution_time": "1.2346", |
| 804 | + "retcode": 0, |
| 805 | + } |
| 806 | + |
| 807 | + self.assertEqual(r.data, expected_ret) |
| 808 | + |
| 809 | + hist.refresh_from_db() |
| 810 | + expected_script_results = {**expected_ret, "id": hist.pk} |
| 811 | + self.assertEqual(hist.script_results, expected_script_results) |
| 812 | + |
| 813 | + # test run on server with server scripts disabled |
| 814 | + with patch( |
| 815 | + "core.models.CoreSettings.server_scripts_enabled", |
| 816 | + new_callable=PropertyMock, |
| 817 | + ) as server_scripts_enabled: |
| 818 | + server_scripts_enabled.return_value = False |
| 819 | + |
| 820 | + data = { |
| 821 | + "script": script.pk, |
| 822 | + "output": "wait", |
| 823 | + "args": ["arg1", "arg2"], |
| 824 | + "timeout": 15, |
| 825 | + "run_as_user": False, |
| 826 | + "env_vars": ["key1=val1", "key2=val2"], |
| 827 | + "run_on_server": True, |
| 828 | + } |
| 829 | + r = self.client.post(url, data, format="json") |
| 830 | + self.assertEqual(r.status_code, 400) |
| 831 | + |
771 | 832 | def test_get_notes(self):
|
772 | 833 | url = f"{base_url}/notes/"
|
773 | 834 |
|
|
0 commit comments