Skip to content

Commit 04ae722

Browse files
authored
Merge pull request #1298 from okorach:maintainability
Maintainability
2 parents 9e29cdd + af96f9d commit 04ae722

File tree

7 files changed

+125
-137
lines changed

7 files changed

+125
-137
lines changed

cli/loc.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,21 @@ def __parse_args(desc):
198198
return args
199199

200200

201-
def main():
201+
def __check_options(edition: str, kwargs: dict[str, str]) -> dict[str, str]:
202+
"""Verifies a certain number of options for compatibility with edition"""
203+
kwargs[options.FORMAT] = util.deduct_format(kwargs[options.FORMAT], kwargs[options.REPORT_FILE])
204+
if kwargs[options.WITH_BRANCHES] and edition == "community":
205+
util.exit_fatal(f"No branches in {edition} edition, aborting...", errcodes.UNSUPPORTED_OPERATION)
206+
if kwargs[options.COMPONENT_TYPE] == "portfolios" and edition in ("community", "developer"):
207+
util.exit_fatal(f"No portfolios in {edition} edition, aborting...", errcodes.UNSUPPORTED_OPERATION)
208+
if kwargs[options.COMPONENT_TYPE] == "portfolios" and kwargs[options.WITH_BRANCHES]:
209+
log.warning("Portfolio LoC export selected, branch option is ignored")
210+
kwargs[options.WITH_BRANCHES] = False
211+
return kwargs
212+
213+
214+
def main() -> None:
215+
"""sonar-loc entry point"""
202216
start_time = util.start_clock()
203217
try:
204218
kwargs = util.convert_args(
@@ -209,16 +223,7 @@ def main():
209223
except (options.ArgumentsError, exceptions.ConnectionError) as e:
210224
util.exit_fatal(e.message, e.errcode)
211225

212-
kwargs[options.FORMAT] = util.deduct_format(kwargs[options.FORMAT], kwargs[options.REPORT_FILE])
213-
214-
edition = endpoint.edition()
215-
if kwargs[options.WITH_BRANCHES] and edition == "community":
216-
util.exit_fatal(f"No branches in {edition} edition, aborting...", errcodes.UNSUPPORTED_OPERATION)
217-
if kwargs[options.COMPONENT_TYPE] == "portfolios" and edition in ("community", "developer"):
218-
util.exit_fatal(f"No portfolios in {edition} edition, aborting...", errcodes.UNSUPPORTED_OPERATION)
219-
if kwargs[options.COMPONENT_TYPE] == "portfolios" and kwargs[options.WITH_BRANCHES]:
220-
log.warning("Portfolio LoC export selected, branch option is ignored")
221-
kwargs[options.WITH_BRANCHES] = False
226+
kwargs = __check_options(endpoint.edition(), kwargs)
222227

223228
try:
224229
if kwargs[options.COMPONENT_TYPE] == "portfolios":

cli/measures_export.py

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
"""
2727
import sys
2828
import csv
29+
30+
from typing import Union
31+
2932
from http import HTTPStatus
3033
from requests.exceptions import HTTPError
3134
from sonar.util import types
@@ -277,6 +280,23 @@ def __check_options_vs_edition(edition: str, params: dict[str, str]) -> dict[str
277280
return params
278281

279282

283+
def __get_measures(obj: object, wanted_metrics: types.KeyList, hist: bool) -> Union[dict[str, any], None]:
284+
"""Returns object measures (last measures or history of measures)"""
285+
data = obj.component_data()
286+
try:
287+
if hist:
288+
data.update(__get_json_measures_history(obj, wanted_metrics))
289+
else:
290+
data.update(__get_object_measures(obj, wanted_metrics))
291+
except HTTPError as e:
292+
if e.response.status_code == HTTPStatus.FORBIDDEN:
293+
log.error("Insufficient permission to retrieve measures of %s, export skipped for this object", str(obj))
294+
else:
295+
log.error("HTTP Error %s while retrieving measures of %s, export skipped for this object", str(e), str(obj))
296+
return None
297+
return data
298+
299+
280300
def main() -> None:
281301
"""Entry point for sonar-measures-export"""
282302
start_time = util.start_clock()
@@ -299,19 +319,9 @@ def main() -> None:
299319

300320
measure_list = []
301321
for obj in obj_list:
302-
data = obj.component_data()
303-
try:
304-
if kwargs["history"]:
305-
data.update(__get_json_measures_history(obj, wanted_metrics))
306-
else:
307-
data.update(__get_object_measures(obj, wanted_metrics))
308-
except HTTPError as e:
309-
if e.response.status_code == HTTPStatus.FORBIDDEN:
310-
log.error("Insufficient permission to retrieve measures of %s, export skipped for this object", str(obj))
311-
else:
312-
log.error("HTTP Error %s while retrieving measures of %s, export skipped for this object", str(e), str(obj))
313-
continue
314-
measure_list += [data]
322+
data = __get_measures(obj, wanted_metrics, kwargs["history"])
323+
if data is not None:
324+
measure_list += [data]
315325

316326
if fmt == "json":
317327
with util.open_file(file) as fd:

sonar/platform.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def __credentials(self) -> tuple[str, str]:
100100

101101
def verify_connection(self) -> None:
102102
try:
103-
self.get("projects/search", params={"qualifiers": "TRK", "ps": 1})
103+
self.get("server/version")
104104
except HTTPError as e:
105105
raise exceptions.ConnectionError(util.sonar_error(e.response))
106106

sonar/qualityprofiles.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ def audit(self, audit_settings: types.ConfigSettings = None) -> list[Problem]:
482482
problems = []
483483
age = util.age(self.last_update(), rounded=True)
484484
if age > audit_settings.get("audit.qualityProfiles.maxLastChangeAge", 180):
485-
problems.append(Problem(get_rule(RuleId.QP_LAST_CHANGE_DATE), self, str(self, age)))
485+
problems.append(Problem(get_rule(RuleId.QP_LAST_CHANGE_DATE), self, str(self), age))
486486

487487
total_rules = rules.count(endpoint=self.endpoint, languages=self.language)
488488
if self.nbr_rules < int(total_rules * audit_settings.get("audit.qualityProfiles.minNumberOfRules", 0.5)):

sonar/rules.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ def export(endpoint: platform.Platform, export_settings: types.ConfigSettings, k
247247
rule_list["instantiated"] = instantiated_rules
248248
if len(extended_rules) > 0:
249249
rule_list["extended"] = extended_rules
250-
if len(other_rules) > 0:
250+
if len(other_rules) > 0 and full:
251251
rule_list["standard"] = other_rules
252252
return rule_list
253253

test/it.sh

Lines changed: 56 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -20,43 +20,10 @@
2020
#
2121
set -euo pipefail
2222

23+
DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
24+
source "$DIR/test-tools.sh"
2325
DB_BACKUPS_DIR=~/backup
2426

25-
function logmsg {
26-
echo "$@" | tee -a "$IT_LOG_FILE"
27-
}
28-
29-
function run_test {
30-
file=$1; shift
31-
logmsg "$@"
32-
if [ "$SONAR_HOST_URL" == "$SONAR_HOST_URL_SONARCLOUD" ]; then
33-
"$@" -o okorach
34-
else
35-
"$@"
36-
fi
37-
check "$file"
38-
}
39-
40-
function run_test_stdout {
41-
file=$1; shift
42-
logmsg "$@" ">$file"
43-
if [ "$SONAR_HOST_URL" == "$SONAR_HOST_URL_SONARCLOUD" ]; then
44-
"$@" -o okorach >"$file"
45-
else
46-
"$@" >"$file"
47-
fi
48-
check "$file"
49-
}
50-
51-
check() {
52-
if [ -s "$1" ]; then
53-
logmsg "Output file $1 is OK"
54-
else
55-
logmsg "Output file $1 is missing or empty"
56-
# exit 1
57-
fi
58-
}
59-
6027
function backup_for {
6128
case $1 in
6229
lts|lta|lts-ce|lta-ce|lts-de|lta-de)
@@ -122,140 +89,128 @@ for env in "$@"
12289
do
12390

12491
logmsg "Install sonar-tools current local version: root = $TMP"
125-
cd "$REPO_ROOT"; ./deploy.sh nodoc; cd -
92+
cd "$REPO_ROOT"; ./deploy.sh nodoc nodocker 1>$IT_LOG_FILE 2>&1; cd -
12693

12794
if [ "$env" = "sonarcloud" ]; then
12895
logmsg "Running with environment $env"
12996
export SONAR_TOKEN=$SONAR_TOKEN_SONARCLOUD
13097
export SONAR_HOST_URL=$SONAR_HOST_URL_SONARCLOUD
13198
else
13299
id="it$$"
133-
logmsg "Running with environment $env - sonarId $id"
100+
logmsg "Creating IT test environment $env - sonarId $id"
134101
sqport=10020
135102
# echo sonar create -i $id -t "$(tag_for "$env")" -s $sqport -p 6020 -f "$(backup_for "$env")"
136-
sonar create -i $id -t "$(tag_for "$env")" -s $sqport -p 6020 -f "$(backup_for "$env")"
103+
sonar create -i $id -t "$(tag_for "$env")" -s $sqport -p 6020 -f "$(backup_for "$env")" 1>$IT_LOG_FILE 2>&1
137104
export SONAR_TOKEN=$SONAR_TOKEN_ADMIN_USER
138105
export SONAR_HOST_URL="http://localhost:$sqport"
139106
fi
140107

141-
logmsg "IT $env sonar-measures-export"
142-
f="$TMP/measures-$env-unrel.csv"; run_test "$f" sonar-measures-export -b -f "$f" -m _main --withURL
143-
f="$TMP/measures-$env-2.csv"; run_test_stdout "$f" sonar-measures-export -b -m _main --withURL
144-
f="$TMP/measures-$env-3.csv"; run_test_stdout "$f" sonar-measures-export -b -p -r -d -m _all
108+
f="measures-$env-unrel.csv"; run_test "$f" sonar-measures-export -b -m _main --withURL
109+
f="measures-$env-2.csv"; run_test_stdout "$f" sonar-measures-export -b -m _main --withURL
110+
f="measures-$env-3.csv"; run_test_stdout "$f" sonar-measures-export -b -p -r -d -m _all
145111

146-
f="$TMP/measures-$env-1.json"; run_test "$f" sonar-measures-export -b -f "$f" -m _all
147-
f="$TMP/measures-$env-2.json"; run_test_stdout "$f" sonar-measures-export -b -p -r -d -m _all --format json
148-
f="$TMP/measures-$env-3.csv"; run_test "$f" sonar-measures-export -b -f "$f" --csvSeparator '+' -m _main
112+
f="measures-$env-1.json"; run_test "$f" sonar-measures-export -b -m _all
113+
f="measures-$env-2.json"; run_test_stdout "$f" sonar-measures-export -b -p -r -d -m _all --format json
114+
f="measures-$env-3.csv"; run_test "$f" sonar-measures-export -b --csvSeparator '+' -m _main
149115

150-
f="$TMP/measures-history-$env-1.csv"; run_test "$f" sonar-measures-export -b -f "$f" --history
151-
f="$TMP/measures-history-$env-2.csv"; run_test "$f" sonar-measures-export -b -f "$f" -k okorach_sonar-tools --history --asTable
152-
f="$TMP/measures-history-$env-3.json"; run_test "$f" sonar-measures-export -b -f "$f" --history
116+
f="measures-history-$env-1.csv"; run_test "$f" sonar-measures-export -b --history
117+
f="measures-history-$env-2.csv"; run_test "$f" sonar-measures-export -b -k okorach_sonar-tools --history --asTable
118+
f="measures-history-$env-3.json"; run_test "$f" sonar-measures-export -b --history
153119

154120
logmsg "IT $env sonar-findings-export"
155121

156-
f="$TMP/findings-$env-unrel.csv"; run_test "$f" sonar-findings-export -v DEBUG -f "$f"
157-
f="$TMP/findings-$env-1.json"; run_test "$f" sonar-findings-export -f "$f"
158-
f="$TMP/findings-$env-2.json"; run_test_stdout "$f" sonar-findings-export -v DEBUG --format json -k okorach_audio-video-tools,okorach_sonar-tools
159-
f="$TMP/findings-$env-3.json"; run_test_stdout "$f" sonar-findings-export -v DEBUG --format json -k okorach_audio-video-tools,okorach_sonar-tools --useFindings
160-
f="$TMP/findings-$env-4.csv"; run_test_stdout "$f" sonar-findings-export --format csv -k okorach_audio-video-tools,okorach_sonar-tools --csvSeparator '+'
122+
f="findings-$env-unrel.csv"; run_test "$f" sonar-findings-export -v DEBUG
123+
f="findings-$env-1.json"; run_test "$f" sonar-findings-export
124+
f="findings-$env-2.json"; run_test_stdout "$f" sonar-findings-export -v DEBUG --format json -k okorach_audio-video-tools,okorach_sonar-tools
125+
f="findings-$env-3.json"; run_test_stdout "$f" sonar-findings-export -v DEBUG --format json -k okorach_audio-video-tools,okorach_sonar-tools --useFindings
126+
f="findings-$env-4.csv"; run_test_stdout "$f" sonar-findings-export --format csv -k okorach_audio-video-tools,okorach_sonar-tools --csvSeparator '+'
161127

162128
if [ "$env" = "sonarcloud" ]; then
163129
logmsg "IT $env sonar-audit SKIPPED"
164130
logmsg "IT $env sonar-housekeeper SKIPPED"
165131
else
166132
logmsg "IT $env sonar-audit"
167-
f="$TMP/audit-$env-unrel.csv"; run_test_stdout "$f" sonar-audit
168-
f="$TMP/audit-$env-1.json"; run_test "$f" sonar-audit -f "$f"
169-
f="$TMP/audit-$env-2.json"; run_test_stdout "$f" sonar-audit --format json --what qualitygates,qualityprofiles,settings
170-
f="$TMP/audit-$env-3.csv"; run_test_stdout "$f" sonar-audit --csvSeparator '+' --format csv
133+
f="audit-$env-unrel.csv"; run_test_stdout "$f" sonar-audit
134+
f="audit-$env-1.json"; run_test "$f" sonar-audit
135+
f="audit-$env-2.json"; run_test_stdout "$f" sonar-audit --format json --what qualitygates,qualityprofiles,settings
136+
f="audit-$env-3.csv"; run_test_stdout "$f" sonar-audit --csvSeparator '+' --format csv
171137

172138
logmsg "IT $env sonar-housekeeper"
173-
f="$TMP/housekeeper-$env-1.csv"; run_test_stdout "$f" sonar-housekeeper -P 365 -B 90 -T 180 -R 30
139+
f="housekeeper-$env-1.csv"; run_test_stdout "$f" sonar-housekeeper -P 365 -B 90 -T 180 -R 30
174140
fi
175141

176142
logmsg "IT $env sonar-loc"
177-
f="$TMP/loc-$env-1.csv"; run_test_stdout "$f" sonar-loc
178-
f="$TMP/loc-$env-unrel.csv"; run_test_stdout "$f" sonar-loc -n -a
179-
f="$TMP/loc-$env-2.csv"; run_test "$f" sonar-loc -n -a -f "$f" --csvSeparator ';'
143+
f="loc-$env-1.csv"; run_test_stdout "$f" sonar-loc
144+
f="loc-$env-unrel.csv"; run_test_stdout "$f" sonar-loc -n -a
145+
f="loc-$env-2.csv"; run_test "$f" sonar-loc -n -a --csvSeparator ';'
180146

181147
logmsg "sonar-rules $env"
182-
f="$TMP/rules-$env-1.csv"; run_test_stdout "$f" sonar-rules -e
183-
f="$TMP/rules-$env-2.csv"; run_test "$f" sonar-rules -e -f "$f"
184-
f="$TMP/rules-$env-3.json"; run_test_stdout "$f" sonar-rules -e --format json
185-
f="$TMP/rules-$env-4.json"; run_test "$f" sonar-rules -e -f "$f"
148+
f="rules-$env-1.csv"; run_test_stdout "$f" sonar-rules -e
149+
f="rules-$env-2.csv"; run_test "$f" sonar-rules -e
150+
f="rules-$env-3.json"; run_test_stdout "$f" sonar-rules -e --format json
151+
f="rules-$env-4.json"; run_test "$f" sonar-rules -e
186152

187153
logmsg "sonar-config $env"
188-
f="$TMP/config-$env-1.json"; run_test_stdout "$f" sonar-config -e -w "qualitygates, qualityprofiles, projects" -k okorach_audio-video-tools,okorach_sonar-tools
189-
f="$TMP/config-$env-2.json"; run_test_stdout "$f" sonar-config --export
190-
f="$TMP/config-$env-unrel.json"; run_test "$f" sonar-config --export -f "$f"
154+
f="config-$env-1.json"; run_test_stdout "$f" sonar-config -e -w "qualitygates, qualityprofiles, projects" -k okorach_audio-video-tools,okorach_sonar-tools
155+
f="config-$env-2.json"; run_test_stdout "$f" sonar-config --export
156+
f="config-$env-unrel.json"; run_test "$f" sonar-config --export
191157

192158
if [ $noExport -eq 1 ]; then
193159
logmsg "sonar-projects-export $env test skipped"
194160
elif [ "$env" = "sonarcloud" ]; then
195161
logmsg "sonar-projects-export $env SKIPPED"
196162
else
197163
logmsg "sonar-projects-export $env"
198-
sonar-projects-export
164+
f="proj-export-$env-2.json"; run_test "$f" sonar-projects-export
199165
fi
200166

201167
logmsg "sonar-findings-export $env ADMIN export"
202-
f1="$TMP/findings-$env-admin.csv"; run_test "$f1" sonar-findings-export -v DEBUG -f "$f1" -k okorach_audio-video-tools,okorach_sonar-tools
168+
f1="findings-$env-admin.csv"; run_test "$f1" sonar-findings-export -v DEBUG -k okorach_audio-video-tools,okorach_sonar-tools
203169

204170
if [ "$env" = "sonarcloud" ]; then
205171
logmsg "sonar-projects-export $env SKIPPED"
206172
else
207173
logmsg "sonar-findings-export $env USER export"
208174
export SONAR_TOKEN=$SONAR_TOKEN_USER_USER
209-
f2="$TMP/findings-$env-user.csv"; run_test "$f2" sonar-findings-export -v DEBUG -f "$f2" -k okorach_audio-video-tools,okorach_sonar-tools
175+
f2="findings-$env-user.csv"; run_test "$f2" sonar-findings-export -v DEBUG -k okorach_audio-video-tools,okorach_sonar-tools
210176
fi
211177

212178
# Restore admin token as long as previous version is 2.9 or less
213179
logmsg "Restore sonar-tools last released version"
214-
echo "Y" | pip uninstall sonar-tools
215-
pip install sonar-tools
180+
pip install --force-reinstall sonar-tools 1>$IT_LOG_FILE 2>&1;
216181

217182
export SONAR_TOKEN="$SONAR_TOKEN_ADMIN_USER"
218183
logmsg "IT released tools $env"
219-
sonar-measures-export -b -f "$TMP/measures-$env-rel.csv" -m _main --withURL
220-
sonar-findings-export -f "$TMP/findings-$env-rel.csv"
221-
if [ "$env" != "sonarcloud" ]; then
222-
sonar-audit >"$TMP/audit-$env-rel.csv" || echo "OK"
223-
fi
224-
sonar-loc -n -a >"$TMP/loc-$env-rel.csv"
225-
sonar-config -e >"$TMP/config-$env-rel.json"
226-
227-
echo "IT compare released and unreleased $env" | tee -a "$IT_LOG_FILE"
228-
for f in measures findings audit loc
184+
f="measures-$env-rel.csv"; run_test "$f" sonar-measures-export -b -m _main --withURL
185+
# sonar-measures-export -b -f "$f"
186+
f="findings-$env-rel.csv"; run_test "$f" sonar-findings-export
187+
# f="audit-$env-rel.csv"; run_test "$f" sonar-audit -f "audit-$env-rel.csv"
188+
f="loc-$env-rel.csv"; run_test "$f" sonar-loc -n -a
189+
f="config-$env-rel.json"; run_test "$f" sonar-config -e
190+
191+
logmsg "IT compare released and unreleased $env"
192+
for f in measures findings loc
229193
do
230194
root="$TMP/$f-$env"
231-
logmsg "=========================="
232-
logmsg "$f-$env diff"
233-
logmsg "=========================="
234-
sort "$root-rel.csv" >"$root-rel.sorted.csv"
235-
sort "$root-unrel.csv" >"$root-unrel.sorted.csv"
236-
diff "$root-rel.sorted.csv" "$root-unrel.sorted.csv" | tee -a "$IT_LOG_FILE" || echo ""
195+
announce_test "$f-$env diff"
196+
sort -o "$root-rel.csv" "$root-rel.csv"
197+
sort -o "$root-unrel.csv" "$root-unrel.csv"
198+
test_passed_if_identical "$root-rel.csv" "$root-unrel.csv"
237199
done
238200
for f in config
239201
do
240202
root="$TMP/$f-$env"
241-
logmsg "=========================="
242-
logmsg "$f-$env diff"
243-
logmsg "=========================="
244-
diff "$root-rel.json" "$root-unrel.json" | tee -a "$IT_LOG_FILE" || echo ""
203+
announce_test "$f-$env diff"
204+
test_passed_if_identical "$root-rel.json" "$root-unrel.json"
245205
done
246-
logmsg "=========================="
247-
logmsg "findings-$env admin vs user diff"
248-
logmsg "=========================="
249-
f1="$TMP/findings-$env-admin.csv"
250-
f2="$TMP/findings-$env-user.csv"
251-
diff "$f1" "$f2" | tee -a "$IT_LOG_FILE" || echo ""
252-
206+
announce_test "findings-$env admin vs user diff"
207+
test_passed_if_identical "$TMP/findings-$env-admin.csv" "$TMP/findings-$env-user.csv"
253208
if [ "$env" != "sonarcloud" ]; then
254209
logmsg "Deleting environment sonarId $id"
255210
sonar delete -i "$id"
256211
fi
257212
done
258213

259214
logmsg "====================================="
260-
logmsg " IT tests success"
215+
logmsg " IT tests end"
261216
logmsg "====================================="

0 commit comments

Comments
 (0)