def verify_user(user, token_info): if user and token_info and user == token_info.get('sub'): login(user) set_auth_type("automation") yield html.finalize() clear_user_login() else: raise MKAuthException("Unauthorized")
def with_admin_login(with_admin): user_id = with_admin[0] login.login(user_id) yield user_id config.clear_user_login()
def with_user_login(with_user): user_id = with_user[0] login.login(user_id) yield user_id config.clear_user_login()
def test_apply_sync_snapshot(edition_short, snapshot_manager_class, monkeypatch, tmp_path, with_user): user_id = with_user[0] monkeypatch.setattr(cmk_version, "edition_short", lambda: edition_short) environ = dict(create_environ(), REQUEST_URI='') with AppContext(DummyApplication(environ, None)), \ RequestContext(htmllib.html(Request(environ))): login.login(user_id) _create_test_sync_config(monkeypatch) snapshot_settings = _create_sync_snapshot(snapshot_manager_class, monkeypatch, tmp_path) # Change unpack target directory from "unit test site" paths to a test specific path unpack_dir = tmp_path / "snapshot_unpack" components = [ activate_changes._replace_omd_root(str(unpack_dir), p) for p in activate_changes.get_replication_paths() ] with open(snapshot_settings.snapshot_path, "rb") as f: activate_changes.apply_sync_snapshot("unit_remote_1", f.read(), components) expected_paths = [ 'etc', 'var', 'etc/check_mk', 'etc/check_mk/conf.d', 'etc/check_mk/mkeventd.d', 'etc/check_mk/multisite.d', 'etc/check_mk/conf.d/wato', 'etc/check_mk/conf.d/wato/hosts.mk', 'etc/check_mk/conf.d/wato/contacts.mk', 'etc/check_mk/mkeventd.d/mkp', 'etc/check_mk/mkeventd.d/wato', 'etc/check_mk/mkeventd.d/mkp/rule_packs', 'etc/check_mk/multisite.d/wato', 'etc/check_mk/multisite.d/wato/global.mk', 'var/check_mk', 'var/check_mk/web', "etc/htpasswd", "etc/auth.serials", "etc/check_mk/multisite.d/wato/users.mk", six.ensure_str('var/check_mk/web/%s' % user_id), six.ensure_str('var/check_mk/web/%s/cached_profile.mk' % user_id), six.ensure_str('var/check_mk/web/%s/enforce_pw_change.mk' % user_id), six.ensure_str('var/check_mk/web/%s/last_pw_change.mk' % user_id), six.ensure_str('var/check_mk/web/%s/num_failed_logins.mk' % user_id), six.ensure_str('var/check_mk/web/%s/serial.mk' % user_id), ] # The paths are registered once the enterprise plugins are available, independent of the # cmk_version.edition_short() value. if is_enterprise_repo(): expected_paths += [ 'etc/check_mk/dcd.d', 'etc/check_mk/mknotifyd.d', 'etc/check_mk/mknotifyd.d/wato', 'etc/check_mk/dcd.d/wato', ] # TODO: Shouldn't we clean up these subtle differences? if cmk_version.is_managed_edition(): expected_paths += [ "etc/check_mk/conf.d/wato/groups.mk", "etc/check_mk/mkeventd.d/wato/rules.mk", "etc/check_mk/multisite.d/wato/bi.mk", "etc/check_mk/multisite.d/wato/customers.mk", "etc/check_mk/multisite.d/wato/groups.mk", "etc/check_mk/multisite.d/wato/user_connections.mk", #"etc/check_mk/conf.d/wato/sitespecific.mk", #"etc/check_mk/dcd.d/wato/distributed.mk", #"etc/check_mk/dcd.d/wato/sitespecific.mk", #"etc/check_mk/mkeventd.d/wato/sitespecific.mk", #"etc/check_mk/mknotifyd.d/wato/sitespecific.mk", #"etc/check_mk/multisite.d/wato/sitespecific.mk", ] expected_paths.remove("etc/check_mk/conf.d/wato/hosts.mk") if not cmk_version.is_raw_edition(): expected_paths += [ 'etc/check_mk/liveproxyd.d', 'etc/check_mk/liveproxyd.d/wato', #'etc/check_mk/multisite.d/wato/ca-certificates_sitespecific.mk', ] paths = [str(p.relative_to(unpack_dir)) for p in unpack_dir.glob("**/*")] assert sorted(paths) == sorted(expected_paths)
def test_generate_snapshot(edition_short, snapshot_manager_class, monkeypatch, tmp_path, with_user): user_id = with_user[0] monkeypatch.setattr(cmk_version, "edition_short", lambda: edition_short) environ = dict(create_environ(), REQUEST_URI='') with AppContext(DummyApplication(environ, None)), \ RequestContext(htmllib.html(Request(environ))): login.login(user_id) _create_test_sync_config(monkeypatch) snapshot_settings = _create_sync_snapshot(snapshot_manager_class, monkeypatch, tmp_path) # And now check the resulting snapshot contents unpack_dir = tmp_path / "snapshot_unpack" with tarfile.open(snapshot_settings.snapshot_path, "r") as t: t.extractall(str(unpack_dir)) expected_subtars = [ "auth.secret.tar", "auth.serials.tar", "check_mk.tar", "diskspace.tar", "htpasswd.tar", "mkeventd_mkp.tar", "mkeventd.tar", "multisite.tar", "sitespecific.tar", "usersettings.tar", ] if is_enterprise_repo(): expected_subtars += [ "dcd.tar", "mknotify.tar", ] if not cmk_version.is_raw_edition(): expected_subtars.append("liveproxyd.tar") assert sorted(f.name for f in unpack_dir.iterdir()) == sorted(expected_subtars) expected_files = { 'mkeventd_mkp.tar': [], 'multisite.tar': ["global.mk", "users.mk"], 'usersettings.tar': [user_id], 'mkeventd.tar': [], 'check_mk.tar': ["hosts.mk", "contacts.mk"], 'htpasswd.tar': ["htpasswd"], 'liveproxyd.tar': [], 'sitespecific.tar': ['sitespecific.mk'], 'auth.secret.tar': [], 'dcd.tar': [], 'auth.serials.tar': ["auth.serials"], 'mknotify.tar': [], 'diskspace.tar': [], } # TODO: Shouldn't we clean up these subtle differences? if cmk_version.is_managed_edition(): expected_files.update({ "mkeventd.tar": ["rules.mk"], 'check_mk.tar': ["groups.mk", "contacts.mk"], 'multisite.tar': [ "bi.mk", "customers.mk", "global.mk", "groups.mk", "user_connections.mk", "users.mk", ], }) if not cmk_version.is_raw_edition(): expected_files['liveproxyd.tar'] = [] # And now check the subtar contents for subtar in unpack_dir.iterdir(): subtar_unpack_dir = unpack_dir / subtar.stem subtar_unpack_dir.mkdir(parents=True, exist_ok=True) with tarfile.open(str(subtar), "r") as s: s.extractall(str(subtar_unpack_dir)) files = sorted(str(f.relative_to(subtar_unpack_dir)) for f in subtar_unpack_dir.iterdir()) assert sorted(expected_files[subtar.name]) == files, \ "Subtar %s has wrong files" % subtar.name