From a8c6774cc6ee5c40ce72fee14c001166bd8ad649 Mon Sep 17 00:00:00 2001 From: vodorok Date: Wed, 15 Feb 2023 17:00:13 +0100 Subject: [PATCH] [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 --- ...-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 | 8 +++ web/client/codechecker_client/cmd/store.py | 29 +++++++++- .../codechecker_client/product_client.py | 5 ++ web/client/codechecker_client/thrift_call.py | 45 +++++++++------- web/codechecker_web/shared/version.py | 2 +- .../codechecker_server/api/mass_store_run.py | 51 ++++++++++++++++++ .../codechecker_server/api/product_server.py | 11 +++- .../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 | 23 ++++++++ web/tests/functional/store/test_store.py | 40 +++++++++++++- web/tests/libtest/codechecker.py | 15 +++--- web/tests/libtest/env.py | 4 +- 22 files changed, 247 insertions(+), 45 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/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..c17b4da9aa 100644 --- a/web/client/codechecker_client/cmd/cmd.py +++ b/web/client/codechecker_client/cmd/cmd.py @@ -743,6 +743,14 @@ 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" + "to store in one go.") + 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..67b6a70f73 100644 --- a/web/client/codechecker_client/cmd/store.py +++ b/web/client/codechecker_client/cmd/store.py @@ -37,6 +37,7 @@ 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 +416,7 @@ 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. @@ -576,6 +577,28 @@ 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 stats.num_of_reports > p.reportLimit: + over_limit = stats.num_of_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. This measeure is in place to protect the server +from overloading. + +Please review the 'Checker Statistics' section of this output to gain a better +understanding of which checkers have generated an excessive number of reports. + +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} +* Number of reports in the result folder: {stats.num_of_reports} +* The report folder exceeds the limit by {over_limit} reports + """) + sys.exit(1) + zip_size = os.stat(zip_file).st_size LOG.info("Compressing report zip file...") @@ -761,6 +784,8 @@ 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 +795,7 @@ 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..5966786bf5 100644 --- a/web/client/codechecker_client/thrift_call.py +++ b/web/client/codechecker_client/thrift_call.py @@ -56,26 +56,33 @@ 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..062b381234 100644 --- a/web/server/codechecker_server/api/mass_store_run.py +++ b/web/server/codechecker_server/api/mass_store_run.py @@ -18,6 +18,7 @@ from collections import defaultdict from datetime import datetime from hashlib import sha256 +from pathlib import Path from tempfile import TemporaryDirectory from typing import Any, Dict, List, Optional, Set, Tuple @@ -1069,6 +1070,53 @@ def __validate_and_add_report_annotations( f"'{ALLOWED_ANNOTATIONS[key]['display']}'." ) + def __check_report_count(self, report_dir: Path): + """ + This method checks the number of reports in the given report, + Raises exception if the number of reports is more than the + that is configured for the product. + """ + # Read all plist files in report directory. + plist_files = list(report_dir.glob('**/*.plist')) + report_count = 0 + for plist_file in plist_files: + # The check_name tag only occurs exactly once per report. + # Don't parse plist, just count the number of + # check_name occurances. + unique_tag = b'check_name' + with plist_file.open('rb') as f: + plist_file_content = f.read() + report_count += plist_file_content.count(unique_tag) + + report_limit = 0 + with DBSession(self.__config_database) as session: + product = session.query(Product).get(self.__product.id) + if product.report_limit: + report_limit = product.report_limit + + if report_count > report_limit: + LOG.error("The number of reports in the given zip file is " + + "larger than the allowed." + + f"The limit is {report_limit}, you have: {report_count}!") + extra_info = [ + "report_limit", + f"limit:{report_limit}", + f"report_count:{report_count}" + ] + raise codechecker_api_shared.ttypes.RequestFailed( + codechecker_api_shared.ttypes. + ErrorCode.GENERAL, + "**Warning: Excessive Reports in This Report Folder** " + + "There are too many reports in this report " + + "folder, which has triggered a server " + + "protection measure. To proceed, please " + + "reduce the number of reports to a maximum " + + f"of {report_limit}. **Current Reports:** {report_count} " + + f"**Excess Reports:** {report_count-report_limit} You can " + + "identify specific checkers to disable by using the " + + "`CodeChecker parse --summary ` command.", + extra_info) + def __store_reports( self, session: DBSession, @@ -1264,6 +1312,9 @@ def store(self) -> int: content_hash_file = os.path.join( zip_dir, 'content_hashes.json') + # Validate that the report count is less than it is allowed. + self.__check_report_count(Path(report_dir)) + filename_to_hash = load_json(content_hash_file, {}) with LogTask(run_name=self.__name, diff --git a/web/server/codechecker_server/api/product_server.py b/web/server/codechecker_server/api/product_server.py index ad11dad4f2..b0999168a4 100644 --- a/web/server/codechecker_server/api/product_server.py +++ b/web/server/codechecker_server/api/product_server.py @@ -129,6 +129,11 @@ def __get_product(self, session, product): confidentiality = \ confidentiality_enum(product.confidentiality) + if product.report_limit is not None: + report_limit = product.report_limit + else: + report_limit = None + return server_product, ttypes.Product( id=product.id, endpoint=product.endpoint, @@ -141,7 +146,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 +301,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 +394,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 +591,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..57849f3776 100644 --- a/web/server/vue-cli/src/components/Product/ProductConfigForm.vue +++ b/web/server/vue-cli/src/components/Product/ProductConfigForm.vue @@ -39,6 +39,26 @@ @input="productConfig.runLimit = $event || null" /> + + + + + Maximum number of reports allowed to store in one go, + if exceeded, the store action will be rejected. + + + @@ -196,6 +216,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..33c6962238 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("There are too many reports in this report folder!", 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'):