def test_master_type_failover(self): """ Tests master_type "failover" to not fall back to 127.0.0.1 address when master does not resolve in DNS """ mock_opts = salt.config.DEFAULT_MINION_OPTS.copy() mock_opts.update({ "master_type": "failover", "master": ["master1", "master2"], "__role": "", "retry_dns": 0, }) class MockPubChannel: def connect(self): raise SaltClientError("MockedChannel") def close(self): return def mock_resolve_dns(opts, fallback=False): self.assertFalse(fallback) if opts["master"] == "master1": raise SaltClientError("Cannot resolve {}".format( opts["master"])) return { "master_ip": "192.168.2.1", "master_uri": "tcp://192.168.2.1:4505", } def mock_transport_factory(opts, **kwargs): self.assertEqual(opts["master"], "master2") return MockPubChannel() with patch("salt.minion.resolve_dns", mock_resolve_dns), patch( "salt.transport.client.AsyncPubChannel.factory", mock_transport_factory), patch("salt.loader.grains", MagicMock(return_value=[])): with self.assertRaises(SaltClientError, msg="MockedChannel"): minion = salt.minion.Minion(mock_opts) yield minion.connect_master()
def test_master_type_failover_no_masters(): """ Tests master_type "failover" to not fall back to 127.0.0.1 address when no master can be resolved """ mock_opts = salt.config.DEFAULT_MINION_OPTS.copy() mock_opts.update({ "master_type": "failover", "master": ["master1", "master2"], "__role": "", "retry_dns": 0, }) def mock_resolve_dns(opts, fallback=False): assert not fallback raise SaltClientError("Cannot resolve {}".format(opts["master"])) with patch("salt.minion.resolve_dns", mock_resolve_dns), patch("salt.loader.grains", MagicMock(return_value=[])): with pytest.raises(SaltClientError): minion = salt.minion.Minion(mock_opts) yield minion.connect_master()