|
17 | 17 | # along with this program; if not, write to the Free Software Foundation, |
18 | 18 | # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
19 | 19 | # |
20 | | -from unittest.mock import patch |
| 20 | +import pathlib |
| 21 | +from pathlib import Path |
| 22 | +from unittest.mock import patch, Mock |
21 | 23 |
|
22 | 24 | from pyfakefs import fake_filesystem_unittest as pyfakefs |
23 | 25 |
|
24 | | -from pysonar_scanner.__main__ import scan |
| 26 | +from pysonar_scanner.__main__ import scan, check_version, create_jre |
| 27 | +from pysonar_scanner.api import SQVersion, SonarQubeApi |
| 28 | +from pysonar_scanner.cache import Cache |
25 | 29 | from pysonar_scanner.configuration.configuration_loader import ConfigurationLoader |
26 | | -from pysonar_scanner.configuration.properties import SONAR_PROJECT_KEY, SONAR_TOKEN |
27 | | -from pysonar_scanner.scannerengine import ScannerEngine |
| 30 | +from pysonar_scanner.configuration.properties import ( |
| 31 | + SONAR_PROJECT_KEY, |
| 32 | + SONAR_TOKEN, |
| 33 | + SONAR_HOST_URL, |
| 34 | + SONAR_SCANNER_API_BASE_URL, |
| 35 | + SONAR_SCANNER_SONARCLOUD_URL, |
| 36 | + SONAR_SCANNER_PROXY_PORT, |
| 37 | + SONAR_SCANNER_OS, |
| 38 | + SONAR_SCANNER_ARCH, |
| 39 | + SONAR_SCANNER_JAVA_EXE_PATH, |
| 40 | +) |
| 41 | +from pysonar_scanner.exceptions import SQTooOldException |
| 42 | +from pysonar_scanner.jre import JREResolvedPath, JREResolver |
| 43 | +from pysonar_scanner.scannerengine import ScannerEngine, ScannerEngineProvisioner |
| 44 | +from tests.unit import sq_api_utils |
28 | 45 |
|
29 | 46 |
|
30 | 47 | class TestMain(pyfakefs.TestCase): |
31 | | - @patch.object(ConfigurationLoader, "load", return_value={SONAR_TOKEN: "myToken", SONAR_PROJECT_KEY: "myProjectKey"}) |
| 48 | + @patch.object( |
| 49 | + ConfigurationLoader, |
| 50 | + "load", |
| 51 | + return_value={ |
| 52 | + SONAR_TOKEN: "myToken", |
| 53 | + SONAR_PROJECT_KEY: "myProjectKey", |
| 54 | + SONAR_SCANNER_OS: "linux", |
| 55 | + SONAR_SCANNER_ARCH: "x64", |
| 56 | + }, |
| 57 | + ) |
| 58 | + @patch.object(ScannerEngineProvisioner, "provision", return_value=JREResolvedPath(Path("scanner_engine_path"))) |
| 59 | + @patch("pysonar_scanner.__main__.create_jre", return_value=JREResolvedPath(Path("jre_path"))) |
32 | 60 | @patch.object(ScannerEngine, "run", return_value=0) |
33 | | - def test_minimal_success_run(self, load_mock, run_mock): |
| 61 | + def test_minimal_success_run(self, run_mock, create_jre_mock, provision_mock, load_mock): |
34 | 62 | exitcode = scan() |
35 | 63 | self.assertEqual(exitcode, 0) |
| 64 | + |
| 65 | + # Verify that run was called with the expected configuration |
| 66 | + run_mock.assert_called_once() |
| 67 | + config = run_mock.call_args[0][0] # Extract the configuration arg |
| 68 | + |
| 69 | + # Check expected configuration with a single assertion |
| 70 | + expected_config = { |
| 71 | + SONAR_TOKEN: "myToken", |
| 72 | + SONAR_PROJECT_KEY: "myProjectKey", |
| 73 | + SONAR_SCANNER_OS: "linux", |
| 74 | + SONAR_SCANNER_ARCH: "x64", |
| 75 | + SONAR_HOST_URL: "https://sonarcloud.io", |
| 76 | + SONAR_SCANNER_API_BASE_URL: "https://api.sonarcloud.io", |
| 77 | + SONAR_SCANNER_SONARCLOUD_URL: "https://sonarcloud.io", |
| 78 | + SONAR_SCANNER_PROXY_PORT: "443", |
| 79 | + SONAR_SCANNER_JAVA_EXE_PATH: "jre_path", |
| 80 | + } |
| 81 | + |
| 82 | + self.assertEqual(expected_config, config) |
| 83 | + |
| 84 | + def test_version_check_outdated_sonarqube(self): |
| 85 | + sq_cloud_api = sq_api_utils.get_sq_server() |
| 86 | + sq_cloud_api.get_analysis_version = Mock(return_value=SQVersion.from_str("9.9.9")) |
| 87 | + |
| 88 | + with self.assertRaises(SQTooOldException): |
| 89 | + check_version(sq_cloud_api) |
| 90 | + |
| 91 | + def test_version_check_recent_sonarqube(self): |
| 92 | + sq_cloud_api = sq_api_utils.get_sq_server() |
| 93 | + sq_cloud_api.get_analysis_version = Mock(return_value=SQVersion.from_str("10.7")) |
| 94 | + |
| 95 | + check_version(sq_cloud_api) |
| 96 | + sq_cloud_api.get_analysis_version.assert_called_once() |
| 97 | + |
| 98 | + def test_version_check_sonarqube_cloud(self): |
| 99 | + sq_cloud_api = sq_api_utils.get_sq_cloud() |
| 100 | + sq_cloud_api.get_analysis_version = Mock() |
| 101 | + |
| 102 | + check_version(sq_cloud_api) |
| 103 | + sq_cloud_api.get_analysis_version.assert_not_called() |
| 104 | + |
| 105 | + |
| 106 | +@patch("pysonar_scanner.scannerengine.CmdExecutor") |
| 107 | +@patch.object(JREResolver, "resolve_jre") |
| 108 | +def test_get_jre(self, resolve_jre_mock): |
| 109 | + resolve_jre_mock.return_value = JREResolvedPath(pathlib.Path("jre/bin/java")) |
| 110 | + api = SonarQubeApi(Mock(), Mock()) |
| 111 | + cache = Cache(Mock()) |
| 112 | + create_jre(api, cache, {SONAR_SCANNER_OS: "linux", SONAR_SCANNER_ARCH: "x64"}) |
0 commit comments