From 8def7f9e56eee434460eea77152ee0d5c01a6769 Mon Sep 17 00:00:00 2001 From: vodorok Date: Wed, 15 Feb 2023 17:00:13 +0100 Subject: [PATCH 1/3] [server] Rate limit based on report count This patch implements a basic implementation of rate limiting based on the raw report count in the incoming storage request. [feat][server][gui] Report limit in prof config Added database entries in config db. Modified api for passing report limit information. Added widgets on the gui. Added config option for commandline project creation. A test is included. Resolve conflict Fix product remove parameter in web tests --- docs/web/products.md | 4 ++ ...-6.53.0.tgz => codechecker-api-6.54.0.tgz} | Bin 62227 -> 62288 bytes web/api/js/codechecker-api-node/package.json | 2 +- web/api/products.thrift | 6 ++- .../dist/codechecker_api.tar.gz | Bin 54031 -> 54261 bytes web/api/py/codechecker_api/setup.py | 2 +- .../dist/codechecker_api_shared.tar.gz | Bin 3615 -> 3634 bytes web/api/py/codechecker_api_shared/setup.py | 2 +- web/client/codechecker_client/cmd/cmd.py | 9 ++++ web/client/codechecker_client/cmd/store.py | 45 ++++++++++++++-- .../codechecker_client/product_client.py | 5 ++ web/client/codechecker_client/thrift_call.py | 48 +++++++++++------- web/codechecker_web/shared/version.py | 2 +- .../codechecker_server/api/mass_store_run.py | 39 ++++++++++++++ .../codechecker_server/api/product_server.py | 8 ++- .../database/config_db_model.py | 5 +- .../versions/00099e8bc212_store_limit.py | 28 ++++++++++ web/server/vue-cli/package-lock.json | 12 ++--- web/server/vue-cli/package.json | 2 +- .../components/Product/ProductConfigForm.vue | 24 +++++++++ web/tests/functional/store/test_store.py | 40 ++++++++++++++- web/tests/libtest/codechecker.py | 15 +++--- web/tests/libtest/env.py | 4 +- 23 files changed, 256 insertions(+), 46 deletions(-) rename web/api/js/codechecker-api-node/dist/{codechecker-api-6.53.0.tgz => codechecker-api-6.54.0.tgz} (51%) create mode 100644 web/server/codechecker_server/migrations/config/versions/00099e8bc212_store_limit.py diff --git a/docs/web/products.md b/docs/web/products.md index 6a529977cb..2dc4540f1a 100644 --- a/docs/web/products.md +++ b/docs/web/products.md @@ -118,6 +118,7 @@ making a new product available on the server. ``` usage: CodeChecker cmd products add [-h] [-n DISPLAY_NAME] [--description DESCRIPTION] + [--report-limit REPORT_LIMIT] [--sqlite SQLITE_FILE | --postgresql] [--dbaddress DBADDRESS] [--dbport DBPORT] [--dbusername DBUSERNAME] @@ -142,6 +143,9 @@ optional arguments: --description DESCRIPTION A custom textual description to be shown alongside the product. + --report-limit REPORT_LIMIT + The maximum number of reports allowed to store in one + run, if exceeded, the storeaction will be rejected. database arguments: NOTE: These database arguments are relative to the server machine, as it diff --git a/web/api/js/codechecker-api-node/dist/codechecker-api-6.53.0.tgz b/web/api/js/codechecker-api-node/dist/codechecker-api-6.54.0.tgz similarity index 51% rename from web/api/js/codechecker-api-node/dist/codechecker-api-6.53.0.tgz rename to web/api/js/codechecker-api-node/dist/codechecker-api-6.54.0.tgz index 416c878d138cc1a97460044995ae0cf2c2cff02e..ad14888696a3a95238ea7862f03ba4609c602845 100644 GIT binary patch delta 28538 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 delta 28469 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 ProductConfigurations @@ -53,7 +54,8 @@ struct Product { 11: i64 runLimit, // Number of allowed runs for this product. 12: list admins, // Administrators of this product. 13: list runStoreInProgress, // List of run names which are in progress. - 14: optional Confidentiality confidentiality // Confidentiality classification of the product + 14: optional Confidentiality confidentiality, // Confidentiality classification of the product. + 15: optional i64 reportLimit // Maximum number of reports allowed in a run. } typedef list Products diff --git a/web/api/py/codechecker_api/dist/codechecker_api.tar.gz b/web/api/py/codechecker_api/dist/codechecker_api.tar.gz index fe714e89f656acdcd4e4164f9a6c72e9bbeb6bda..e2fb1622dfddb96b91ea1bb2c5082e0237f585f8 100644 GIT binary patch delta 51773 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�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 E0J?HQL;wH) literal 3615 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 diff --git a/web/api/py/codechecker_api_shared/setup.py b/web/api/py/codechecker_api_shared/setup.py index f16016b4e3..747e74be03 100644 --- a/web/api/py/codechecker_api_shared/setup.py +++ b/web/api/py/codechecker_api_shared/setup.py @@ -8,7 +8,7 @@ with open('README.md', encoding='utf-8', errors="ignore") as f: long_description = f.read() -api_version = '6.53.0' +api_version = '6.54.0' setup( name='codechecker_api_shared', diff --git a/web/client/codechecker_client/cmd/cmd.py b/web/client/codechecker_client/cmd/cmd.py index e8c74600b6..6cb34a94f3 100644 --- a/web/client/codechecker_client/cmd/cmd.py +++ b/web/client/codechecker_client/cmd/cmd.py @@ -743,6 +743,15 @@ def __register_add(parser): help="A custom textual description to be shown " "alongside the product.") + parser.add_argument('--report-limit', + type=int, + dest="report_limit", + default=argparse.SUPPRESS, + required=False, + help="The maximum number of reports allowed to " + "store in one run, if exceeded, the store " + "action will be rejected.") + dbmodes = parser.add_argument_group( "database arguments", "NOTE: These database arguments are relative to the server " diff --git a/web/client/codechecker_client/cmd/store.py b/web/client/codechecker_client/cmd/store.py index b0663bbb7d..2c6271a935 100644 --- a/web/client/codechecker_client/cmd/store.py +++ b/web/client/codechecker_client/cmd/store.py @@ -32,11 +32,13 @@ from codechecker_report_converter import twodim from codechecker_report_converter.report import Report, report_file, \ reports as reports_helper, statistics as report_statistics -from codechecker_report_converter.report.hash import HashType +from codechecker_report_converter.report.hash import HashType, \ + get_report_path_hash from codechecker_report_converter.source_code_comment_handler import \ SourceCodeCommentHandler from codechecker_client import client as libclient +from codechecker_client import product from codechecker_common import arg, logger, cmd_config from codechecker_common.checker_labels import CheckerLabels from codechecker_common.util import load_json @@ -415,7 +417,11 @@ def parse_analyzer_result_files( return analyzer_result_file_reports -def assemble_zip(inputs, zip_file, client, checker_labels: CheckerLabels): +def assemble_zip(inputs, + zip_file, + client, + prod_client, + checker_labels: CheckerLabels): """Collect and compress report and source files, together with files contanining analysis related information into a zip file which will be sent to the server. @@ -459,6 +465,7 @@ def assemble_zip(inputs, zip_file, client, checker_labels: CheckerLabels): changed_files = set() file_paths = set() file_report_positions: FileReportPositions = defaultdict(set) + unique_reports = set() for file_path, reports in analyzer_result_file_reports.items(): files_to_compress.add(file_path) stats.num_of_analyzer_result_files += 1 @@ -467,6 +474,9 @@ def assemble_zip(inputs, zip_file, client, checker_labels: CheckerLabels): if report.changed_files: changed_files.update(report.changed_files) continue + # Need to calculate unique reoirt count to determine report limit + unique_reports.add(get_report_path_hash(report)) + stats.add_report(report) file_paths.update(report.original_files) @@ -576,6 +586,25 @@ def assemble_zip(inputs, zip_file, client, checker_labels: CheckerLabels): # Print statistics what will be stored to the server. stats.write() + # Fail store early if too many reports. + p = prod_client.getCurrentProduct() + if len(unique_reports) > p.reportLimit: + LOG.error(f"""Report Limit Exceeded + +This report folder cannot be stored because the number of reports in the +result folder is too high. Usually noisy checkers, generating a lot of +reports are not useful and it is better to disable them. + +Run `CodeChecker parse ` to gain a better understanding on +report counts. + +Disable checkers that have generated an excessive number of reports and then +rerun the analysis to be able to store the results on the server. + +Configured report limit for this product: {p.reportLimit} + """) + sys.exit(1) + zip_size = os.stat(zip_file).st_size LOG.info("Compressing report zip file...") @@ -761,6 +790,12 @@ def main(args): # Setup connection to the remote server. client = libclient.setup_client(args.product_url) + protocol, host, port, product_name = \ + product.split_product_url(args.product_url) + prod_client = libclient.setup_product_client(protocol, + host, + port, + product_name=product_name) zip_file_handle, zip_file = tempfile.mkstemp('.zip') LOG.debug("Will write mass store ZIP to '%s'...", zip_file) @@ -770,7 +805,11 @@ def main(args): LOG.debug("Assembling zip file.") try: - assemble_zip(args.input, zip_file, client, context.checker_labels) + assemble_zip(args.input, + zip_file, + client, + prod_client, + context.checker_labels) except Exception as ex: print(ex) import traceback diff --git a/web/client/codechecker_client/product_client.py b/web/client/codechecker_client/product_client.py index 725cd6c372..618bb4b7dc 100644 --- a/web/client/codechecker_client/product_client.py +++ b/web/client/codechecker_client/product_client.py @@ -113,10 +113,15 @@ def handle_add_product(args): desc = convert.to_b64(args.description) \ if 'description' in args else None + report_limit = None + if hasattr(args, "report_limit") and args.report_limit: + report_limit = int(args.report_limit) + prod = ProductConfiguration( endpoint=args.endpoint, displayedName_b64=name, description_b64=desc, + reportLimit=report_limit, connection=dbc) LOG.debug("Sending request to add product...") diff --git a/web/client/codechecker_client/thrift_call.py b/web/client/codechecker_client/thrift_call.py index 0b55f646b9..e3544ef945 100644 --- a/web/client/codechecker_client/thrift_call.py +++ b/web/client/codechecker_client/thrift_call.py @@ -56,26 +56,36 @@ def wrapper(self, *args, **kwargs): except codechecker_api_shared.ttypes.RequestFailed as reqfailure: LOG.error('Calling API endpoint: %s', funcName) if reqfailure.errorCode ==\ - codechecker_api_shared.ttypes.ErrorCode.DATABASE: - LOG.error('Database error on server\n%s', - str(reqfailure.message)) - elif reqfailure.errorCode ==\ - codechecker_api_shared.ttypes.ErrorCode.AUTH_DENIED: - LOG.error('Authentication denied\n %s', - str(reqfailure.message)) - elif reqfailure.errorCode ==\ - codechecker_api_shared.ttypes.ErrorCode.UNAUTHORIZED: - LOG.error('Unauthorized to access\n %s', - str(reqfailure.message)) - LOG.error('Ask the product admin for additional access ' - 'rights.') - elif reqfailure.errorCode ==\ - codechecker_api_shared.ttypes.ErrorCode.API_MISMATCH: - LOG.error('Client/server API mismatch\n %s', - str(reqfailure.message)) + codechecker_api_shared.ttypes.ErrorCode.GENERAL and \ + reqfailure.extraInfo and \ + reqfailure.extraInfo[0] == "report_limit": + # We handle this error in near the business logic. + raise reqfailure else: - LOG.error('API call error: %s\n%s', funcName, str(reqfailure)) - sys.exit(1) + if reqfailure.errorCode ==\ + codechecker_api_shared.ttypes.ErrorCode.DATABASE: + LOG.error('Database error on server\n%s', + str(reqfailure.message)) + elif reqfailure.errorCode ==\ + codechecker_api_shared.ttypes.ErrorCode.AUTH_DENIED: + LOG.error('Authentication denied\n %s', + str(reqfailure.message)) + elif reqfailure.errorCode ==\ + codechecker_api_shared.ttypes.ErrorCode.UNAUTHORIZED: + LOG.error('Unauthorized to access\n %s', + str(reqfailure.message)) + LOG.error('Ask the product admin for additional access ' + 'rights.') + elif reqfailure.errorCode ==\ + codechecker_api_shared.ttypes.ErrorCode.API_MISMATCH: + LOG.error('Client/server API mismatch\n %s', + str(reqfailure.message)) + else: + LOG.error('API call error: %s\n%s', + funcName, + str(reqfailure) + ) + sys.exit(1) except TApplicationException as ex: LOG.error("Internal server error: %s", str(ex.message)) sys.exit(1) diff --git a/web/codechecker_web/shared/version.py b/web/codechecker_web/shared/version.py index 52c8d760d9..c045815196 100644 --- a/web/codechecker_web/shared/version.py +++ b/web/codechecker_web/shared/version.py @@ -18,7 +18,7 @@ # The newest supported minor version (value) for each supported major version # (key) in this particular build. SUPPORTED_VERSIONS = { - 6: 53 + 6: 54 } # Used by the client to automatically identify the latest major and minor diff --git a/web/server/codechecker_server/api/mass_store_run.py b/web/server/codechecker_server/api/mass_store_run.py index e15362eeca..75a6a98569 100644 --- a/web/server/codechecker_server/api/mass_store_run.py +++ b/web/server/codechecker_server/api/mass_store_run.py @@ -266,6 +266,7 @@ def __init__( self.__analysis_info: Dict[str, AnalysisInfo] = {} self.__duration: int = 0 self.__report_count: int = 0 + self.__report_limit: int = 0 self.__wrong_src_code_comments: List[str] = [] self.__already_added_report_hashes: Set[str] = set() self.__severity_map: Dict[str, int] = {} @@ -273,6 +274,8 @@ def __init__( self.__all_report_checkers: Set[str] = set() self.__added_reports: List[Tuple[DBReport, Report]] = list() + self.__get_report_limit_for_product() + @property def __manager(self): return self.__report_server._manager @@ -1011,6 +1014,7 @@ def get_missing_file_ids(report: Report) -> List[str]: else: fixed_at = run_history_time + self.__check_report_count() report_id = self.__add_report( session, run_id, report, file_path_to_id, rs_from_source, detection_status, detected_at, @@ -1069,6 +1073,41 @@ def __validate_and_add_report_annotations( f"'{ALLOWED_ANNOTATIONS[key]['display']}'." ) + def __get_report_limit_for_product(self): + with DBSession(self.__config_database) as session: + product = session.query(Product).get(self.__product.id) + if product.report_limit: + self.__report_limit = product.report_limit + + def __check_report_count(self): + """ + This method comparest the already added report count to the report + limit, Raises exception if the number of reports is more than the + that is configured for the product. + """ + if len(self.__added_reports) >= self.__report_limit: + LOG.error("The number of reports in the given report folder is " + + "larger than the allowed." + + f"The limit: {self.__report_limit}!") + extra_info = [ + "report_limit", + f"limit:{self.__report_limit}" + ] + raise codechecker_api_shared.ttypes.RequestFailed( + codechecker_api_shared.ttypes. + ErrorCode.GENERAL, + "**Report Limit Exceeded** " + + "This report folder cannot be stored because the number of " + + "reports in the result folder is too high. Usually noisy " + + "checkers, generating a lot of reports are not useful and " + + "it is better to disable them. Run `CodeChecker parse " + + "` to gain a better understanding on report " + + "counts. Disable checkers that have generated an excessive " + + "number of reports and then rerun the analysis to be able " + + "to store the results on the server. " + + f"Limit: {self.__report_limit}", + extra_info) + def __store_reports( self, session: DBSession, diff --git a/web/server/codechecker_server/api/product_server.py b/web/server/codechecker_server/api/product_server.py index ad11dad4f2..1d14307fdb 100644 --- a/web/server/codechecker_server/api/product_server.py +++ b/web/server/codechecker_server/api/product_server.py @@ -129,6 +129,8 @@ def __get_product(self, session, product): confidentiality = \ confidentiality_enum(product.confidentiality) + report_limit = product.report_limit + return server_product, ttypes.Product( id=product.id, endpoint=product.endpoint, @@ -141,7 +143,8 @@ def __get_product(self, session, product): administrating=self.__administrating(args), databaseStatus=server_product.db_status, admins=[admin.name for admin in admins], - confidentiality=confidentiality) + confidentiality=confidentiality, + reportLimit=report_limit) @timeit def getPackageVersion(self): @@ -295,6 +298,7 @@ def getProductConfiguration(self, product_id): description_b64=descr, connection=dbc, runLimit=product.run_limit, + reportLimit=product.report_limit, isReviewStatusChangeDisabled=is_review_status_change_disabled, confidentiality=confidentiality) @@ -387,6 +391,7 @@ def addProduct(self, product): name=displayed_name, description=description, run_limit=product.runLimit, + report_limit=product.reportLimit, is_review_status_change_disabled=is_rws_change_disabled, confidentiality=confidentiality) @@ -583,6 +588,7 @@ def editProduct(self, product_id, new_config): # Update the settings in the database. product.endpoint = new_config.endpoint product.run_limit = new_config.runLimit + product.report_limit = new_config.reportLimit product.is_review_status_change_disabled = \ new_config.isReviewStatusChangeDisabled product.connection = conn_str diff --git a/web/server/codechecker_server/database/config_db_model.py b/web/server/codechecker_server/database/config_db_model.py index 48c94f9115..376162d90c 100644 --- a/web/server/codechecker_server/database/config_db_model.py +++ b/web/server/codechecker_server/database/config_db_model.py @@ -39,6 +39,7 @@ class Product(Base): display_name = Column(String, nullable=False) description = Column(Text) run_limit = Column(Integer) + report_limit = Column(Integer, nullable=False, server_default="500000") num_of_runs = Column(Integer, server_default="0") latest_storage_date = Column(DateTime, nullable=True) @@ -49,13 +50,15 @@ class Product(Base): confidentiality = Column(String, nullable=True) def __init__(self, endpoint, conn_str, name=None, description=None, - run_limit=None, is_review_status_change_disabled=False, + run_limit=None, report_limit=500000, + is_review_status_change_disabled=False, confidentiality=None): self.endpoint = endpoint self.connection = conn_str self.display_name = name if name else endpoint self.description = description self.run_limit = run_limit + self.report_limit = report_limit self.is_review_status_change_disabled = \ True if is_review_status_change_disabled else False self.confidentiality = confidentiality diff --git a/web/server/codechecker_server/migrations/config/versions/00099e8bc212_store_limit.py b/web/server/codechecker_server/migrations/config/versions/00099e8bc212_store_limit.py new file mode 100644 index 0000000000..22b459797f --- /dev/null +++ b/web/server/codechecker_server/migrations/config/versions/00099e8bc212_store_limit.py @@ -0,0 +1,28 @@ +"""Store limit + +Revision ID: 00099e8bc212 +Revises: 7829789fc19c +Create Date: 2023-03-10 16:45:19.301602 + +""" + +# revision identifiers, used by Alembic. +revision = '00099e8bc212' +down_revision = '7829789fc19c' +branch_labels = None +depends_on = None + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('products', sa.Column('report_limit', sa.Integer(), server_default='500000', nullable=False)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('products', 'report_limit') + # ### end Alembic commands ### diff --git a/web/server/vue-cli/package-lock.json b/web/server/vue-cli/package-lock.json index e6ee7a3154..6860da6d5a 100644 --- a/web/server/vue-cli/package-lock.json +++ b/web/server/vue-cli/package-lock.json @@ -11,7 +11,7 @@ "@mdi/font": "^6.5.95", "chart.js": "^2.9.4", "chartjs-plugin-datalabels": "^0.7.0", - "codechecker-api": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.53.0.tgz", + "codechecker-api": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.54.0.tgz", "codemirror": "^5.65.0", "date-fns": "^2.28.0", "js-cookie": "^3.0.1", @@ -4834,9 +4834,9 @@ } }, "node_modules/codechecker-api": { - "version": "6.53.0", - "resolved": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.53.0.tgz", - "integrity": "sha512-156RuFb5HCRhvxVbvJDbNKUsjxuga4DdjaiC0FbIORhQlIt/Wm1RtBxx9mPVp+YTJCpWh3MxFTrvxH8JlIb6zA==", + "version": "6.54.0", + "resolved": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.54.0.tgz", + "integrity": "sha512-1+5Q0B4ehDO7s9bHe0iIqprajdQqVl9iW4TPjyMq9ITlsN5/XQLhzyCwmvhlADpNLKVQVY7oAuvQ67JVMw62GQ==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "thrift": "0.13.0-hotfix.1" @@ -19756,8 +19756,8 @@ "dev": true }, "codechecker-api": { - "version": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.53.0.tgz", - "integrity": "sha512-156RuFb5HCRhvxVbvJDbNKUsjxuga4DdjaiC0FbIORhQlIt/Wm1RtBxx9mPVp+YTJCpWh3MxFTrvxH8JlIb6zA==", + "version": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.54.0.tgz", + "integrity": "sha512-1+5Q0B4ehDO7s9bHe0iIqprajdQqVl9iW4TPjyMq9ITlsN5/XQLhzyCwmvhlADpNLKVQVY7oAuvQ67JVMw62GQ==", "requires": { "thrift": "0.13.0-hotfix.1" } diff --git a/web/server/vue-cli/package.json b/web/server/vue-cli/package.json index 5f4b729ef6..3923339d3b 100644 --- a/web/server/vue-cli/package.json +++ b/web/server/vue-cli/package.json @@ -27,9 +27,9 @@ }, "dependencies": { "@mdi/font": "^6.5.95", + "codechecker-api": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.54.0.tgz", "chart.js": "^2.9.4", "chartjs-plugin-datalabels": "^0.7.0", - "codechecker-api": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.53.0.tgz", "codemirror": "^5.65.0", "date-fns": "^2.28.0", "js-cookie": "^3.0.1", diff --git a/web/server/vue-cli/src/components/Product/ProductConfigForm.vue b/web/server/vue-cli/src/components/Product/ProductConfigForm.vue index 09142a126b..f76a170f1c 100644 --- a/web/server/vue-cli/src/components/Product/ProductConfigForm.vue +++ b/web/server/vue-cli/src/components/Product/ProductConfigForm.vue @@ -39,6 +39,27 @@ @input="productConfig.runLimit = $event || null" /> + + + + + The maximum number of reports allowed to + store in one run, if exceeded, the store + action will be rejected. + + + @@ -196,6 +217,9 @@ export default { ], runLimit: [ v => (!v || !!v && !isNaN(parseInt(v))) || "Number is required" + ], + reportLimit: [ + v => (!v || !!v && !isNaN(parseInt(v))) || "Number is required" ] }, }; diff --git a/web/tests/functional/store/test_store.py b/web/tests/functional/store/test_store.py index 3dc6097b4a..9bcf3a8151 100644 --- a/web/tests/functional/store/test_store.py +++ b/web/tests/functional/store/test_store.py @@ -62,13 +62,19 @@ def setup_class(self): 'workspace': TEST_WORKSPACE, 'checkers': [], 'reportdir': os.path.join(TEST_WORKSPACE, 'reports'), - 'test_project': 'store_test' + 'test_project': 'store_test', + 'test_project_2': 'store_limited_product' } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() + + server_access['viewer_product'] = 'store_limited_product' + codechecker.add_test_package_product(server_access, TEST_WORKSPACE, + report_limit=2) + server_access['viewer_product'] = 'store_test' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) @@ -104,6 +110,11 @@ def teardown_class(self): 'codechecker_cfg']['check_env'] codechecker.remove_test_package_product(TEST_WORKSPACE, check_env) + codechecker.remove_test_package_product( + TEST_WORKSPACE, + check_env, + product="store_limited_product") + print("Removing: " + TEST_WORKSPACE) shutil.rmtree(TEST_WORKSPACE, ignore_errors=True) @@ -115,7 +126,9 @@ def setup_method(self, method): print("Running " + test_class + " tests in " + self._test_workspace) self._test_cfg = env.import_test_cfg(self._test_workspace) + self._codechecker_cfg = self._test_cfg["codechecker_cfg"] + self._test_directory = os.path.dirname(os.path.abspath(inspect.getfile( inspect.currentframe()))) self._temp_workspace = os.path.join(self._codechecker_cfg["workspace"], @@ -130,13 +143,20 @@ def setup_method(self, method): self.product_name = self._codechecker_cfg['viewer_product'] + self.limited_product_name = self._codechecker_cfg['test_project_2'] + # Setup a viewer client to test viewer API calls. self._cc_client = env.setup_viewer_client(self._test_workspace) self.assertIsNotNone(self._cc_client) self._pr_client = env.setup_product_client( self._test_workspace, product=self.product_name) + + self._limited_pr_client = env.setup_product_client( + self._test_workspace, product=self.limited_product_name) + self.assertIsNotNone(self._pr_client) + self.assertIsNotNone(self._limited_pr_client) def test_product_details(self): """ @@ -454,3 +474,21 @@ def analyze_tidy(cfg): reports = json.loads(out) self.assertEqual(len(reports), 2) + + def test_store_limit(self): + """ + Test store limit of a product. + """ + + run_name = "limit_test" + store_cmd = [ + env.codechecker_cmd(), "store", + self._divide_zero_workspace, + "--name", run_name, + "--url", env.parts_to_url(self._codechecker_cfg, 'test_project_2'), + "--trim-path-prefix", self._divide_zero_workspace, + "--verbose", "debug", + ] + + _, out, _ = _call_cmd(store_cmd) + self.assertIn("Report Limit Exceeded", out) diff --git a/web/tests/libtest/codechecker.py b/web/tests/libtest/codechecker.py index 4ec0859b6e..2dd773727b 100644 --- a/web/tests/libtest/codechecker.py +++ b/web/tests/libtest/codechecker.py @@ -717,7 +717,7 @@ def start_server_proc(event, server_cmd, checking_env): def add_test_package_product(server_data, test_folder, check_env=None, - protocol='http', + protocol='http', report_limit=None, user_permissions=DEFAULT_USER_PERMISSIONS): """ Add a product for a test suite to the server provided by server_data. @@ -745,6 +745,8 @@ def add_test_package_product(server_data, test_folder, check_env=None, '--name', os.path.basename(test_folder), '--description', "Automatically created product for test.", '--verbose', 'debug'] + if report_limit: + add_command.extend(['--report-limit', str(report_limit)]) # If tests are running on postgres, we need to create a database. pg_config = env.get_postgresql_cfg() @@ -806,7 +808,8 @@ def add_test_package_product(server_data, test_folder, check_env=None, raise Exception("Failed to add the product to the test server!") -def remove_test_package_product(test_folder, check_env=None, protocol='http'): +def remove_test_package_product(test_folder, check_env=None, protocol='http', + product=None): """ Remove the product associated with the given test folder. The folder must exist, as the server configuration is read from the folder. @@ -817,6 +820,7 @@ def remove_test_package_product(test_folder, check_env=None, protocol='http'): server_data = env.import_test_cfg(test_folder)['codechecker_cfg'] print(server_data) + product_to_remove = product if product else server_data['viewer_product'] if 'check_env' not in server_data: server_data['check_env'] = check_env @@ -827,12 +831,11 @@ def remove_test_package_product(test_folder, check_env=None, protocol='http'): str(server_data['viewer_port']), '') del_command = ['CodeChecker', 'cmd', 'products', 'del', - server_data['viewer_product'], - '--url', url] + product_to_remove, '--url', url] print(' '.join(del_command)) - # Authenticate as SUPERUSER to be able to create the product. + # Authenticate as SUPERUSER to be able to delete the product. login(server_data, test_folder, "root", "root", protocol) returncode = subprocess.call( del_command, @@ -845,7 +848,7 @@ def remove_test_package_product(test_folder, check_env=None, protocol='http'): # SQLite databases are deleted automatically as part of the # workspace removal. if env.get_postgresql_cfg(): - env.del_database(server_data['viewer_product'], check_env) + env.del_database(product_to_remove, check_env) if returncode: raise Exception("Failed to remove the product from the test server!") diff --git a/web/tests/libtest/env.py b/web/tests/libtest/env.py index ec5e932028..b6642771fc 100644 --- a/web/tests/libtest/env.py +++ b/web/tests/libtest/env.py @@ -256,13 +256,13 @@ def get_run_names(workspace): return import_test_cfg(workspace)['codechecker_cfg']['run_names'] -def parts_to_url(codechecker_cfg): +def parts_to_url(codechecker_cfg, product='viewer_product'): """ Creates a product URL string from the test configuration dict. """ return codechecker_cfg['viewer_host'] + ':' + \ str(codechecker_cfg['viewer_port']) + '/' + \ - codechecker_cfg['viewer_product'] + codechecker_cfg[product] def get_workspace(test_id='test'): From ef5d4866afed961a21ac27400f8956b42f498550 Mon Sep 17 00:00:00 2001 From: vodorok Date: Thu, 19 Oct 2023 13:02:08 +0200 Subject: [PATCH 2/3] [cmd] Store command should print deduplicated statistics Previously the store command printed the raw statistics of the report folder, but none of the other commands or result of actions (parse command or the result of the store) reflected these numbers. This patch fixes that, and now the store commands prints the same summary as the parse command. --- web/client/codechecker_client/cmd/store.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/web/client/codechecker_client/cmd/store.py b/web/client/codechecker_client/cmd/store.py index 2c6271a935..451f02e3f4 100644 --- a/web/client/codechecker_client/cmd/store.py +++ b/web/client/codechecker_client/cmd/store.py @@ -475,9 +475,10 @@ def assemble_zip(inputs, changed_files.update(report.changed_files) continue # Need to calculate unique reoirt count to determine report limit - unique_reports.add(get_report_path_hash(report)) - - stats.add_report(report) + report_path_hash = get_report_path_hash(report) + if report_path_hash not in unique_reports: + unique_reports.add(report_path_hash) + stats.add_report(report) file_paths.update(report.original_files) file_report_positions[report.file.original_path].add(report.line) From 76adc4ae67fd1066e1f2ac66662c4edf386cb860 Mon Sep 17 00:00:00 2001 From: vodorok Date: Thu, 19 Oct 2023 14:39:39 +0200 Subject: [PATCH 3/3] [test] Test the store statistics output --- web/tests/functional/store/test_store.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/web/tests/functional/store/test_store.py b/web/tests/functional/store/test_store.py index 9bcf3a8151..d4cd7473a7 100644 --- a/web/tests/functional/store/test_store.py +++ b/web/tests/functional/store/test_store.py @@ -492,3 +492,23 @@ def test_store_limit(self): _, out, _ = _call_cmd(store_cmd) self.assertIn("Report Limit Exceeded", out) + + def test_store_stats(self): + """ + Tests that the statistics printed during the store command + are deduplicated. + """ + + run_name = "stats_test" + store_cmd = [ + env.codechecker_cmd(), "store", + self._same_headers_workspace, + "--name", run_name, + "--url", env.parts_to_url(self._codechecker_cfg, 'test_project') + ] + + _, out, _ = _call_cmd(store_cmd) + # There are 9 individual reports, but only 6 unique. + # The statistics should only print the unique ones. + self.assertIn("Number of analyzer reports | 6", + out)