Skip to content

Commit c87befa

Browse files
SCANPY-155 Provide properties computed during bootstrapping to the scanner engine
1 parent 644549f commit c87befa

4 files changed

Lines changed: 47 additions & 5 deletions

File tree

src/pysonar_scanner/__main__.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,16 @@
2020

2121
from pysonar_scanner import app_logging
2222
from pysonar_scanner import cache
23-
from pysonar_scanner.api import get_base_urls, SonarQubeApi
23+
from pysonar_scanner.api import get_base_urls, SonarQubeApi, BaseUrls
2424
from pysonar_scanner.configuration import configuration_loader
2525
from pysonar_scanner.configuration.configuration_loader import ConfigurationLoader
26-
from pysonar_scanner.configuration.properties import SONAR_VERBOSE
26+
from pysonar_scanner.configuration.properties import (
27+
SONAR_VERBOSE,
28+
SONAR_HOST_URL,
29+
SONAR_SCANNER_API_BASE_URL,
30+
SONAR_SCANNER_SONARCLOUD_URL,
31+
SONAR_SCANNER_PROXY_PORT,
32+
)
2733
from pysonar_scanner.scannerengine import ScannerEngine
2834

2935

@@ -35,6 +41,7 @@ def scan():
3541

3642
cache_manager = cache.get_default()
3743
api = __build_api(config)
44+
__update_config_with_api_urls(config, api.base_urls)
3845
scanner = ScannerEngine(api, cache_manager)
3946
return scanner.run(config)
4047

@@ -47,3 +54,12 @@ def __build_api(config: dict[str, any]) -> SonarQubeApi:
4754
token = configuration_loader.get_token(config)
4855
base_urls = get_base_urls(config)
4956
return SonarQubeApi(base_urls, token)
57+
58+
59+
def __update_config_with_api_urls(config, base_urls: BaseUrls):
60+
config[SONAR_HOST_URL] = base_urls.base_url
61+
config[SONAR_SCANNER_API_BASE_URL] = base_urls.api_base_url
62+
if base_urls.is_sonar_qube_cloud:
63+
config[SONAR_SCANNER_SONARCLOUD_URL] = base_urls.base_url
64+
config[SONAR_SCANNER_SONARCLOUD_URL] = base_urls.base_url
65+
config[SONAR_SCANNER_PROXY_PORT] = "443" if base_urls.base_url.startswith("https") else "80"

src/pysonar_scanner/scannerengine.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
from pysonar_scanner.api import SonarQubeApi
3333
from pysonar_scanner.cache import Cache, CacheFile
34-
from pysonar_scanner.configuration.properties import SONAR_SCANNER_OS, SONAR_SCANNER_ARCH
34+
from pysonar_scanner.configuration.properties import SONAR_SCANNER_OS, SONAR_SCANNER_ARCH, SONAR_SCANNER_JAVA_EXE_PATH
3535
from pysonar_scanner.exceptions import ChecksumException, SQTooOldException
3636
from pysonar_scanner.jre import JREProvisioner, JREResolvedPath, JREResolver, JREResolverConfiguration
3737
from subprocess import Popen, PIPE
@@ -150,6 +150,8 @@ def __fetch_scanner_engine(self) -> pathlib.Path:
150150
def run(self, config: dict[str, any]):
151151
self.__version_check()
152152
jre_path = self.__resolve_jre(config)
153+
154+
config[SONAR_SCANNER_JAVA_EXE_PATH] = str(jre_path.path)
153155
scanner_engine_path = self.__fetch_scanner_engine()
154156
cmd = self.__build_command(jre_path, scanner_engine_path)
155157
properties_str = self.__config_to_json(config)

tests/test_main.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,36 @@
2323

2424
from pysonar_scanner.__main__ import scan
2525
from pysonar_scanner.configuration.configuration_loader import ConfigurationLoader
26-
from pysonar_scanner.configuration.properties import SONAR_PROJECT_KEY, SONAR_TOKEN
26+
from pysonar_scanner.configuration.properties import (
27+
SONAR_PROJECT_KEY,
28+
SONAR_TOKEN,
29+
SONAR_HOST_URL,
30+
SONAR_SCANNER_API_BASE_URL,
31+
SONAR_SCANNER_SONARCLOUD_URL,
32+
SONAR_SCANNER_PROXY_PORT,
33+
)
2734
from pysonar_scanner.scannerengine import ScannerEngine
2835

2936

3037
class TestMain(pyfakefs.TestCase):
3138
@patch.object(ConfigurationLoader, "load", return_value={SONAR_TOKEN: "myToken", SONAR_PROJECT_KEY: "myProjectKey"})
3239
@patch.object(ScannerEngine, "run", return_value=0)
33-
def test_minimal_success_run(self, load_mock, run_mock):
40+
def test_minimal_success_run(self, run_mock, load_mock):
3441
exitcode = scan()
3542
self.assertEqual(exitcode, 0)
43+
44+
# Verify that run was called with the expected configuration
45+
run_mock.assert_called_once()
46+
config = run_mock.call_args[0][0] # Extract the configuration arg
47+
48+
# Check expected configuration with a single assertion
49+
expected_config = {
50+
SONAR_TOKEN: "myToken",
51+
SONAR_PROJECT_KEY: "myProjectKey",
52+
SONAR_HOST_URL: "https://sonarcloud.io",
53+
SONAR_SCANNER_API_BASE_URL: "https://api.sonarcloud.io",
54+
SONAR_SCANNER_SONARCLOUD_URL: "https://sonarcloud.io",
55+
SONAR_SCANNER_PROXY_PORT: "443",
56+
}
57+
58+
self.assertEqual(expected_config, config)

tests/test_scannerengine.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ def test_command_building(self, provision_mock, resolve_jre_mock, execute_mock):
158158
{"key": "sonar.projectKey", "value": "myProjectKey"},
159159
{"key": "sonar.scanner.os", "value": "linux"},
160160
{"key": "sonar.scanner.arch", "value": "x64"},
161+
{"key": "sonar.scanner.javaExePath", "value": "jre/bin/java"},
161162
]
162163
}
163164
)

0 commit comments

Comments
 (0)