def fixture_edition_short(monkeypatch, request): edition_short = request.param if edition_short == "cme" and not is_managed_repo(): pytest.skip("Needed files are not available") if edition_short == "cee" and not is_enterprise_repo(): pytest.skip("Needed files are not available") monkeypatch.setattr(cmk_version, "edition_short", lambda: edition_short) yield edition_short
def test_unused_scss_variables() -> None: definitions, usages = _scss_variables(_scss_files()) unused = [var for var in definitions if var not in usages] expected = [ "$self", # used in interpolation with #{} ] if not is_enterprise_repo(): expected.append("$ntop-protocol-painter-padding-top") assert sorted(unused) == sorted(expected), "Found unused SCSS variables"
def fixture_edition(monkeypatch, request) -> Iterable[cmk_version.Edition]: edition_short = request.param if edition_short == "cpe" and not is_plus_repo(): pytest.skip("Needed files are not available") if edition_short == "cme" and not is_managed_repo(): pytest.skip("Needed files are not available") if edition_short == "cee" and not is_enterprise_repo(): pytest.skip("Needed files are not available") yield cmk_version.Edition[edition_short.upper()]
def test_load_plugins(): main.load_plugins() expected = [ "sites", "hosts_and_folders", "update_core_config", "warn_remote_site", "warn_about_network_ports", "warn_about_configs_to_review", ] if is_enterprise_repo(): expected.append("dcd_connections") assert sorted(rename_action_registry.keys()) == sorted(expected)
def register(linter): # Disable some CEE/CME specific things when linting CRE repos if not is_enterprise_repo(): # Is used to disable import-error. Would be nice if no-name-in-module could be # disabled using this, but this does not seem to be possible :( linter.global_set_option( "ignored-modules", "cmk.base.cee,cmk.gui.cee,cmk.gui.cme,cmk.gui.cme.managed") # This disables no-member errors linter.global_set_option( "generated-members", r"(cmk\.base\.cee|cmk\.gui\.cee|cmk\.gui\.cme)(\..*)?") linter.register_reporter(CMKColorizedTextReporter) linter.register_reporter(CMKParseableTextReporter)
def registry_reset(): """Fixture to reset registries to its default entries.""" registries = [ cmk.gui.dashboard.dashlet_registry, cmk.gui.views.icon_and_action_registry, cmk.gui.permissions.permission_registry, cmk.gui.permissions.permission_section_registry, ] if is_enterprise_repo(): registries.append( cmk.cee.dcd.plugins.connectors.connectors_api.v1.connector_config_registry ) registries.append(cmk.cee.dcd.plugins.connectors.connectors_api.v1.connector_registry) defaults_per_registry = [(registry, list(registry)) for registry in registries] # type: ignore[call-overload] try: yield finally: for registry, defaults in defaults_per_registry: for entry in list(registry): # type: ignore[call-overload] if entry not in defaults: registry.unregister(entry) # type: ignore[attr-defined]
def test_default_config_from_plugins(): expected = [ "roles", "debug", "screenshotmode", "profile", "users", "admin_users", "guest_users", "default_user_role", "user_online_maxage", "log_levels", "slow_views_duration_threshold", "multisite_users", "multisite_hostgroups", "multisite_servicegroups", "multisite_contactgroups", "sidebar", "sidebar_update_interval", "sidebar_show_scrollbar", "sidebar_notify_interval", "quicksearch_dropdown_limit", "quicksearch_search_order", "failed_notification_horizon", "soft_query_limit", "hard_query_limit", "sound_url", "enable_sounds", "sounds", "view_option_refreshes", "view_option_columns", "doculink_urlformat", "view_action_defaults", "custom_links", "debug_livestatus_queries", "show_livestatus_errors", "liveproxyd_enabled", "visible_views", "hidden_views", "service_view_grouping", "custom_style_sheet", "ui_theme", "show_mode", "start_url", "page_heading", "login_screen", "reschedule_timeout", "filter_columns", "default_language", "hide_languages", "default_ts_format", "selection_livetime", "auth_by_http_header", "table_row_limit", "multisite_draw_ruleicon", "adhoc_downtime", "pagetitle_date_format", "staleness_threshold", "escape_plugin_output", "virtual_host_trees", "crash_report_url", "crash_report_target", "guitests_enabled", "bulk_discovery_default_settings", "use_siteicons", "graph_timeranges", "userdb_automatic_sync", "user_login", "user_connections", "default_user_profile", "log_logon_failures", "lock_on_logon_failures", "user_idle_timeout", "single_user_session", "password_policy", "user_localizations", "user_icons_and_actions", "custom_service_attributes", "user_downtime_timeranges", "builtin_icon_visibility", "trusted_certificate_authorities", "mkeventd_enabled", "mkeventd_pprint_rules", "mkeventd_notify_contactgroup", "mkeventd_notify_facility", "mkeventd_notify_remotehost", "mkeventd_connect_timeout", "log_level", "log_rulehits", "rule_optimizer", "mkeventd_service_levels", "wato_host_tags", "wato_aux_tags", "wato_tags", "wato_enabled", "wato_hide_filenames", "wato_hide_hosttags", "wato_upload_insecure_snapshots", "wato_hide_varnames", "wato_hide_help_in_lists", "wato_activate_changes_concurrency", "wato_max_snapshots", "wato_num_hostspecs", "wato_num_itemspecs", "wato_activation_method", "wato_write_nagvis_auth", "wato_use_git", "wato_hidden_users", "wato_user_attrs", "wato_host_attrs", "wato_read_only", "wato_hide_folders_without_read_permissions", "wato_pprint_config", "wato_icon_categories", "wato_activate_changes_comment_mode", "rest_api_etag_locking", "aggregation_rules", "aggregations", "host_aggregations", "bi_packs", "default_bi_layout", "bi_layouts", "bi_compile_log", "bi_precompile_on_demand", "bi_use_legacy_compilation", "sites", "config_storage_format", "tags", ] if is_enterprise_repo(): expected += [ "agent_deployment_enabled", "agent_deployment_host_selection", "agent_deployment_central", "agent_deployment_remote", "agent_signature_keys", "have_combined_graphs", "reporting_use", "reporting_rangespec", "reporting_filename", "reporting_view_limit", "reporting_font_size", "reporting_lineheight", "reporting_font_family", "reporting_pagesize", "reporting_margins", "reporting_mirror_margins", "reporting_date_format", "reporting_time_format", "reporting_table_layout", "reporting_graph_layout", "reporting_email_options", "subscription_settings", "ntop_connection", ] if is_managed_repo(): expected += [ "customers", "current_customer", ] default_config = cmk.gui.config.get_default_config() assert sorted(list(default_config.keys())) == sorted(expected) default_config2 = asdict(cmk.gui.config.make_config_object(default_config)) assert sorted(default_config2.keys()) == sorted(expected)
def _expected_replication_paths(): expected = [ ReplicationPath("dir", "check_mk", "etc/check_mk/conf.d/wato/", []), ReplicationPath("dir", "multisite", "etc/check_mk/multisite.d/wato/", []), ReplicationPath("file", "htpasswd", "etc/htpasswd", []), ReplicationPath("file", "auth.secret", "etc/auth.secret", []), ReplicationPath("file", "password_store.secret", "etc/password_store.secret", []), ReplicationPath("file", "auth.serials", "etc/auth.serials", []), ReplicationPath("file", "stored_passwords", "var/check_mk/stored_passwords", []), ReplicationPath("dir", "usersettings", "var/check_mk/web", ["report-thumbnails", "session_info.mk"]), ReplicationPath("dir", "mkps", "var/check_mk/packages", []), ReplicationPath("dir", "local", "local", []), ] if not cmk_version.is_raw_edition(): expected += [ ReplicationPath("dir", "liveproxyd", "etc/check_mk/liveproxyd.d/wato/", []), ] if testlib.is_enterprise_repo(): expected += [ ReplicationPath("dir", "dcd", "etc/check_mk/dcd.d/wato/", []), ReplicationPath("dir", "mknotify", "etc/check_mk/mknotifyd.d/wato", []), ] expected += [ ReplicationPath("dir", "mkeventd", "etc/check_mk/mkeventd.d/wato", []), ReplicationPath("dir", "mkeventd_mkp", "etc/check_mk/mkeventd.d/mkp/rule_packs", []), ReplicationPath("file", "diskspace", "etc/diskspace.conf", []), ] if cmk_version.is_managed_edition(): expected += [ ReplicationPath( ty="file", ident="customer_check_mk", site_path="etc/check_mk/conf.d/customer.mk", excludes=[], ), ReplicationPath( ty="file", ident="customer_gui_design", site_path="etc/check_mk/multisite.d/zzz_customer_gui_design.mk", excludes=[], ), ReplicationPath( ty="file", ident="customer_multisite", site_path="etc/check_mk/multisite.d/customer.mk", excludes=[], ), ReplicationPath( ty="file", ident="gui_logo", site_path= "local/share/check_mk/web/htdocs/themes/classic/images/sidebar_top.png", excludes=[], ), ReplicationPath( ty="file", ident="gui_logo_dark", site_path= "local/share/check_mk/web/htdocs/themes/modern-dark/images/mk-logo.png", excludes=[], ), ReplicationPath( ty="file", ident="gui_logo_facelift", site_path= "local/share/check_mk/web/htdocs/themes/facelift/images/mk-logo.png", excludes=[], ), ] return expected
from cmk.utils.plugin_loader import load_plugins_with_exceptions from cmk.utils.plugin_registry import Registry from cmk.utils.site import omd_site import cmk.gui.dashboard # The openapi import below pulls a huge part of our GUI code indirectly into the process. We need # to have the default permissions loaded before that to fix some implicit dependencies. # TODO: Extract the livestatus mock to some other place to reduce the dependencies here. import cmk.gui.default_permissions import cmk.gui.permissions import cmk.gui.views from cmk.gui.livestatus_utils.testing import mock_livestatus from cmk.gui.utils.script_helpers import application_and_request_context if is_enterprise_repo(): import cmk.cee.dcd.plugins.connectors.connectors_api.v1 # pylint: disable=import-error,no-name-in-module logger = logging.getLogger(__name__) @pytest.fixture(autouse=True) def enable_debug_fixture(): debug_mode = cmk.utils.debug.debug_mode cmk.utils.debug.enable() yield cmk.utils.debug.debug_mode = debug_mode @pytest.fixture(autouse=True) def fixture_umask():