Reject duplicates in WS command backup/config/update (#133650)

* Reject duplicates in WS command backup/config/update

* Add tests
This commit is contained in:
Erik Montnemery 2024-12-20 15:06:55 +01:00 committed by GitHub
parent 870dc4dbea
commit 7d04eef5c5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 199 additions and 3 deletions

View File

@ -291,11 +291,15 @@ async def handle_config_info(
vol.Required("type"): "backup/config/update",
vol.Optional("create_backup"): vol.Schema(
{
vol.Optional("agent_ids"): vol.All(list[str]),
vol.Optional("include_addons"): vol.Any(list[str], None),
vol.Optional("agent_ids"): vol.All([str], vol.Unique()),
vol.Optional("include_addons"): vol.Any(
vol.All([str], vol.Unique()), None
),
vol.Optional("include_all_addons"): bool,
vol.Optional("include_database"): bool,
vol.Optional("include_folders"): vol.Any([vol.Coerce(Folder)], None),
vol.Optional("include_folders"): vol.Any(
vol.All([vol.Coerce(Folder)], vol.Unique()), None
),
vol.Optional("name"): vol.Any(str, None),
vol.Optional("password"): vol.Any(str, None),
},

View File

@ -1466,6 +1466,186 @@
'type': 'result',
})
# ---
# name: test_config_update_errors[command1]
dict({
'id': 1,
'result': dict({
'config': dict({
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'state': 'never',
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update_errors[command1].1
dict({
'id': 3,
'result': dict({
'config': dict({
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'state': 'never',
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update_errors[command2]
dict({
'id': 1,
'result': dict({
'config': dict({
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'state': 'never',
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update_errors[command2].1
dict({
'id': 3,
'result': dict({
'config': dict({
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'state': 'never',
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update_errors[command3]
dict({
'id': 1,
'result': dict({
'config': dict({
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'state': 'never',
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update_errors[command3].1
dict({
'id': 3,
'result': dict({
'config': dict({
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'state': 'never',
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_delete[remote_agents0-backups0]
dict({
'id': 1,

View File

@ -992,6 +992,18 @@ async def test_config_update(
"create_backup": {"agent_ids": ["test-agent"]},
"schedule": "someday",
},
{
"type": "backup/config/update",
"create_backup": {"agent_ids": ["test-agent", "test-agent"]},
},
{
"type": "backup/config/update",
"create_backup": {"include_addons": ["my-addon", "my-addon"]},
},
{
"type": "backup/config/update",
"create_backup": {"include_folders": ["media", "media"]},
},
],
)
async def test_config_update_errors(