def test_one_nonsnmp_source(self, hostname, ipaddress, config_cache, host_config, source): source = source(hostname, ipaddress) assert source.source_type is SourceType.HOST host_sections = _collect_host_sections( nodes=make_nodes( config_cache, host_config, ipaddress, sources=[source], ), file_cache_max_age=file_cache.MaxAge.none(), fetcher_messages=[ FetcherMessage.from_raw_data( result.OK(source.default_raw_data), Snapshot.null(), source.fetcher_type, ), ], selected_sections=NO_SELECTION, )[0] assert len(host_sections) == 1 key = HostKey(hostname, ipaddress, source.source_type) assert key in host_sections section = host_sections[key] assert len(section.sections) == 1 assert section.sections[SectionName("section_name_%s" % hostname)] == [["section_content"]]
def test_no_sources(self, cluster, nodes, config_cache, host_config): sources = make_cluster_sources(config_cache, host_config) host_sections = _collect_host_sections( sources=sources, file_cache_max_age=file_cache.MaxAge.none(), fetcher_messages=[ # We do not pass sources explicitly but still append Piggyback. FetcherMessage.from_raw_data( result.OK(AgentRawData(b"")), Snapshot.null(), FetcherType.PIGGYBACK, ) for _s in sources ], selected_sections=NO_SELECTION, )[0] assert len(host_sections) == len(nodes) key_clu = HostKey(cluster, None, SourceType.HOST) assert key_clu not in host_sections for hostname, addr in nodes.items(): key = HostKey(hostname, addr, SourceType.HOST) assert key in host_sections section = host_sections[key] assert section.sections[SectionName("section_name_%s" % hostname)] == [ ["section_content_%s" % hostname] ] assert not section.cache_info assert not section.piggybacked_raw_data
def test_multiple_sources_from_different_hosts( self, hostname, ipaddress, config_cache, host_config ): sources = [ ProgramSource.ds(HostName(f"{hostname}0"), ipaddress, template=""), TCPSource(HostName(f"{hostname}1"), ipaddress), TCPSource(HostName(f"{hostname}2"), ipaddress), ] host_sections = _collect_host_sections( sources=sources, file_cache_max_age=file_cache.MaxAge.none(), fetcher_messages=[ FetcherMessage.from_raw_data( result.OK(source.default_raw_data), Snapshot.null(), source.fetcher_type, ) for source in sources ], selected_sections=NO_SELECTION, )[0] assert set(host_sections) == { HostKey(HostName(f"{hostname}0"), ipaddress, SourceType.HOST), HostKey(HostName(f"{hostname}1"), ipaddress, SourceType.HOST), HostKey(HostName(f"{hostname}2"), ipaddress, SourceType.HOST), } for source in sources: assert host_sections[ HostKey(source.hostname, source.ipaddress, SourceType.HOST) ].sections[SectionName(f"section_name_{source.hostname}")] == [["section_content"]]
def test_one_snmp_source(self, hostname, ipaddress, config_cache, host_config): raw_data: SNMPRawData = {} host_sections = _collect_host_sections( sources=[ SNMPSource.snmp( hostname, ipaddress, selected_sections=NO_SELECTION, force_cache_refresh=False, on_scan_error=OnError.RAISE, ), ], file_cache_max_age=file_cache.MaxAge.none(), fetcher_messages=[ FetcherMessage.from_raw_data( result.OK(raw_data), Snapshot.null(), FetcherType.SNMP, ), ], selected_sections=NO_SELECTION, )[0] assert len(host_sections) == 1 key = HostKey(hostname, ipaddress, SourceType.HOST) assert key in host_sections section = host_sections[key] assert len(section.sections) == 1 assert section.sections[SectionName("section_name_%s" % hostname)] == [["section_content"]]
def test_multiple_sources_from_the_same_host( self, hostname, ipaddress, config_cache, host_config, ): sources = [ ProgramSource.ds(hostname, ipaddress, template=""), TCPSource(hostname, ipaddress), ] host_sections = _collect_host_sections( sources=sources, file_cache_max_age=file_cache.MaxAge.none(), fetcher_messages=[ FetcherMessage.from_raw_data( result.OK(source.default_raw_data), Snapshot.null(), source.fetcher_type, ) for source in sources ], selected_sections=NO_SELECTION, )[0] assert len(host_sections) == 1 key = HostKey(hostname, ipaddress, SourceType.HOST) assert key in host_sections section = host_sections[key] assert len(section.sections) == 1 assert section.sections[SectionName( "section_name_%s" % hostname)] == len(sources) * [["section_content"]]
def test_no_sources(self, hostname, ipaddress, config_cache, host_config): host_sections = _collect_host_sections( sources=(), file_cache_max_age=file_cache.MaxAge.none(), fetcher_messages=(), selected_sections=NO_SELECTION, )[0] assert not host_sections
def test_multiple_sources_from_the_same_host( self, hostname, ipaddress, mode, config_cache, host_config, ): sources = [ ProgramSource.ds( hostname, ipaddress, mode=mode, template="", ), TCPSource( hostname, ipaddress, mode=mode, ), ] broker = ParsedSectionsBroker( _collect_host_sections( nodes=make_nodes( config_cache, host_config, ipaddress, mode=mode, sources=sources, ), file_cache_max_age=0, fetcher_messages=[ FetcherMessage.from_raw_data( result.OK(source.default_raw_data), Snapshot.null(), source.fetcher_type, ) for source in sources ], selected_sections=NO_SELECTION, )[0]) assert len(broker) == 1 key = HostKey(hostname, ipaddress, SourceType.HOST) assert key in broker section = broker[key] assert len(section.sections) == 1 # yapf: disable assert (section.sections[SectionName("section_name_%s" % hostname)] == len(sources) * [["section_content"]])
def test_multiple_sources_from_different_hosts(self, hostname, ipaddress, mode, config_cache, host_config): sources = [ ProgramSource.ds(hostname + "0", ipaddress, mode=mode, template=""), TCPSource(hostname + "1", ipaddress, mode=mode), TCPSource(hostname + "2", ipaddress, mode=mode), ] nodes = make_nodes( config_cache, host_config, ipaddress, mode=mode, sources=sources, ) host_sections = _collect_host_sections( nodes=nodes, file_cache_max_age=0, fetcher_messages=[ FetcherMessage.from_raw_data( result.OK(source.default_raw_data), Snapshot.null(), source.fetcher_type, ) for _h, _i, sources in nodes for source in sources ], selected_sections=NO_SELECTION, )[0] assert len(host_sections) == 1 key = HostKey(hostname, ipaddress, SourceType.HOST) assert key in host_sections section = host_sections[key] assert len(section.sections) == len(sources) for source in sources: # yapf: disable assert ( section.sections[SectionName("section_name_%s" % source.hostname)] == [["section_content"]])
def test_one_snmp_source(self, hostname, ipaddress, mode, config_cache, host_config): broker = ParsedSectionsBroker( _collect_host_sections( nodes=make_nodes( config_cache, host_config, ipaddress, mode=mode, sources=[ SNMPSource.snmp( hostname, ipaddress, mode=mode, selected_sections=NO_SELECTION, force_cache_refresh=False, on_scan_error="raise", ), ], ), file_cache_max_age=0, fetcher_messages=[ FetcherMessage.from_raw_data( result.OK({}), Snapshot.null(), FetcherType.SNMP, ), ], selected_sections=NO_SELECTION, )[0]) assert len(broker) == 1 key = HostKey(hostname, ipaddress, SourceType.HOST) assert key in broker section = broker[key] assert len(section.sections) == 1 assert section.sections[SectionName("section_name_%s" % hostname)] == [["section_content"]]
def test_no_sources(self, hostname, ipaddress, config_cache, host_config): host_sections = _collect_host_sections( nodes=make_nodes( config_cache, host_config, ipaddress, sources=(), ), file_cache_max_age=file_cache.MaxAge.none(), fetcher_messages=(), selected_sections=NO_SELECTION, )[0] # The length is not zero because the function always sets, # at least, a piggy back section. assert len(host_sections) == 1 key = HostKey(hostname, ipaddress, SourceType.HOST) assert key in host_sections section = host_sections[key] # Public attributes from HostSections: assert not section.sections
def test_no_sources(self, cluster, nodes, config_cache, host_config, mode): made_nodes = make_nodes( config_cache, host_config, None, mode=mode, sources=(), ) broker = ParsedSectionsBroker(_collect_host_sections( nodes=made_nodes, file_cache_max_age=0, fetcher_messages=[ # We do not pass sources explicitly but still append Piggyback. FetcherMessage.from_raw_data( result.OK(AgentRawData(b"")), Snapshot.null(), FetcherType.PIGGYBACK, ) for _n in made_nodes ], selected_sections=NO_SELECTION, )[0]) assert len(broker) == len(nodes) key_clu = HostKey(cluster, None, SourceType.HOST) assert key_clu not in broker for hostname, addr in nodes.items(): key = HostKey(hostname, addr, SourceType.HOST) assert key in broker section = broker[key] # yapf: disable assert (section.sections[SectionName("section_name_%s" % hostname)] == [["section_content_%s" % hostname]]) assert not section.cache_info assert not section.piggybacked_raw_data
def test_get_host_sections_cluster(monkeypatch, mocker): hostname = "testhost" hosts = { "host0": "10.0.0.0", "host1": "10.0.0.1", "host2": "10.0.0.2", } address = "1.2.3.4" tags = {"agent": "no-agent"} section_name = SectionName("test_section") config_cache = make_scenario(hostname, tags).apply(monkeypatch) host_config = config.HostConfig.make_host_config(hostname) def fake_lookup_ip_address(host_config, family=None): return hosts[host_config.hostname] def check(_, *args, **kwargs): return result.OK(AgentHostSections(sections={section_name: [[str(section_name)]]})) monkeypatch.setattr( config, "lookup_ip_address", fake_lookup_ip_address, ) monkeypatch.setattr( Source, "parse", check, ) mocker.patch.object( cmk.utils.piggyback, "remove_source_status_file", autospec=True, ) mocker.patch.object( cmk.utils.piggyback, "_store_status_file_of", autospec=True, ) # Create a cluster host_config.nodes = list(hosts.keys()) nodes = make_nodes( config_cache, host_config, address, sources=make_sources(host_config, address), ) host_sections = _collect_host_sections( nodes=nodes, file_cache_max_age=host_config.max_cachefile_age, fetcher_messages=[ FetcherMessage.from_raw_data( result.OK(source.default_raw_data), Snapshot.null(), source.fetcher_type, ) for _h, _i, sources in nodes for source in sources ], selected_sections=NO_SELECTION, )[0] assert len(host_sections) == len(hosts) == 3 cmk.utils.piggyback._store_status_file_of.assert_not_called() # type: ignore[attr-defined] assert cmk.utils.piggyback.remove_source_status_file.call_count == 3 # type: ignore[attr-defined] for host, addr in hosts.items(): remove_source_status_file = cmk.utils.piggyback.remove_source_status_file remove_source_status_file.assert_any_call(host) # type: ignore[attr-defined] key = HostKey(host, addr, SourceType.HOST) assert key in host_sections section = host_sections[key] assert len(section.sections) == 1 assert next(iter(section.sections)) == section_name assert not section.cache_info assert not section.piggybacked_raw_data