def test_config_loading(vm): """Test if usual config parameters are loaded via get_cloud_config_value()""" with patch("salt.cloud.clouds.hetzner._connect_client", return_value=MagicMock()) as client: with patch("salt.config.get_cloud_config_value", return_value=MagicMock()) as cloud_config: hetzner.create(vm) config_values = { "automount", "datacenter", "image", "labels", "location", "name", "networks", "private_key", "size", "ssh_keys", "user_data", "volumes", } calls = set( map(lambda call: call[0][0], cloud_config.call_args_list)) assert config_values.issubset(calls)
def test_create_networks(vm): """ Test the networks during the creation """ vm["networks"] = ["a", "b"] with patch("salt.cloud.clouds.hetzner._connect_client", return_value=MagicMock()) as connect: connect.return_value.networks.get_all.return_value = ["a", "c"] hetzner.create(vm) args = connect.return_value.servers.create.call_args assert args.kwargs["networks"] == ["a"] vm["networks"] = ["a", "b", "c"] hetzner.create(vm) args = connect.return_value.servers.create.call_args assert args.kwargs["networks"] == ["a", "c"]
def test_create(images, sizes, vm): """ Test the overall creation and the required parameters """ with patch("salt.cloud.clouds.hetzner._connect_client", return_value=MagicMock()) as connect: with patch("salt.cloud.clouds.hetzner.wait_until", return_value=True) as wait: with pytest.raises(SaltCloudException): hetzner.create({}) connect.return_value.server_types.get_by_name.return_value = None connect.return_value.images.get_by_name.return_value = None with pytest.raises(SaltCloudException): hetzner.create(vm) connect.return_value.server_types.get_by_name.return_value = ModelMock( sizes["cpx21"]) with pytest.raises(SaltCloudException): hetzner.create(vm) connect.return_value.images.get_by_name.return_value = ModelMock( images["ubuntu-20.04"]) assert hetzner.create(vm)["created"] connect.return_value.servers.create.assert_called_once() args = connect.return_value.servers.create.call_args assert args.kwargs["name"] == vm["name"] assert args.kwargs["server_type"] == sizes["cpx21"] assert args.kwargs["image"] == images["ubuntu-20.04"]
def test_ssh_keys(vm): """ Test the locations during the creation """ vm["ssh_keys"] = ["me"] with patch("salt.cloud.clouds.hetzner._connect_client", return_value=MagicMock()) as connect: hetzner.create(vm) connect.return_value.ssh_keys.get_by_name.assert_called_once_with("me") # The ssh_keys should be passed to the create connect.return_value.ssh_keys.get_by_name.return_value = "me" hetzner.create(vm) args = connect.return_value.servers.create.call_args assert args.kwargs["ssh_keys"] == ["me"] # Invalid keys should be sorted out connect.return_value.ssh_keys.get_by_name.return_value = None hetzner.create(vm) args = connect.return_value.servers.create.call_args assert args.kwargs["ssh_keys"] == []
def test_create_datacenter(vm): """ Test the datacenters during the creation """ vm["datacenter"] = "abc" with patch("salt.cloud.clouds.hetzner._connect_client", return_value=MagicMock()) as connect: hetzner.create(vm) connect.return_value.servers.create.assert_called_once() connect.return_value.datacenters.get_by_name.assert_called_once_with( "abc") # The datacenter should be passed to the create connect.return_value.datacenters.get_by_name.return_value = "abc" hetzner.create(vm) args = connect.return_value.servers.create.call_args assert args.kwargs["datacenter"] == "abc" # Stop if the datacenter is invalid connect.return_value.datacenters.get_by_name.return_value = None with pytest.raises(SaltCloudException): hetzner.create(vm)