1717# along with this program; if not, write to the Free Software Foundation,
1818# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1919#
20- from unittest .mock import patch
20+ import pathlib
21+ from pathlib import Path
22+ from unittest .mock import patch , Mock
2123
2224from pyfakefs import fake_filesystem_unittest as pyfakefs
2325
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
2529from pysonar_scanner .configuration .configuration_loader import ConfigurationLoader
2630from pysonar_scanner .configuration .properties import (
2731 SONAR_PROJECT_KEY ,
3034 SONAR_SCANNER_API_BASE_URL ,
3135 SONAR_SCANNER_SONARCLOUD_URL ,
3236 SONAR_SCANNER_PROXY_PORT ,
37+ SONAR_SCANNER_OS ,
38+ SONAR_SCANNER_ARCH ,
39+ SONAR_SCANNER_JAVA_EXE_PATH ,
3340)
34- from pysonar_scanner .scannerengine import ScannerEngine
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
3545
3646
3747class TestMain (pyfakefs .TestCase ):
38- @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" )))
3960 @patch .object (ScannerEngine , "run" , return_value = 0 )
40- def test_minimal_success_run (self , run_mock , load_mock ):
61+ def test_minimal_success_run (self , run_mock , create_jre_mock , provision_mock , load_mock ):
4162 exitcode = scan ()
4263 self .assertEqual (exitcode , 0 )
4364
@@ -49,10 +70,43 @@ def test_minimal_success_run(self, run_mock, load_mock):
4970 expected_config = {
5071 SONAR_TOKEN : "myToken" ,
5172 SONAR_PROJECT_KEY : "myProjectKey" ,
73+ SONAR_SCANNER_OS : "linux" ,
74+ SONAR_SCANNER_ARCH : "x64" ,
5275 SONAR_HOST_URL : "https://sonarcloud.io" ,
5376 SONAR_SCANNER_API_BASE_URL : "https://api.sonarcloud.io" ,
5477 SONAR_SCANNER_SONARCLOUD_URL : "https://sonarcloud.io" ,
5578 SONAR_SCANNER_PROXY_PORT : "443" ,
79+ SONAR_SCANNER_JAVA_EXE_PATH : "jre_path" ,
5680 }
5781
5882 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