mirror of
https://github.com/Mesteriis/hassio-addons-avm.git
synced 2026-01-09 23:11:02 +01:00
308 lines
12 KiB
Python
308 lines
12 KiB
Python
import os
|
|
from pytest import raises
|
|
|
|
from backup.model import GenConfig
|
|
from backup.config import Config, Setting
|
|
from backup.exceptions import InvalidConfigurationValue
|
|
|
|
|
|
def test_validate_empty():
|
|
config = Config()
|
|
assert config.validate({}) == defaultAnd()
|
|
|
|
|
|
def test_validate_int():
|
|
assert Config().validate({'max_backups_in_ha': 5}) == defaultAnd(
|
|
{Setting.MAX_BACKUPS_IN_HA: 5})
|
|
assert Config().validate({'max_backups_in_ha': 5.0}) == defaultAnd(
|
|
{Setting.MAX_BACKUPS_IN_HA: 5})
|
|
assert Config().validate({'max_backups_in_ha': "5"}) == defaultAnd(
|
|
{Setting.MAX_BACKUPS_IN_HA: 5})
|
|
|
|
with raises(InvalidConfigurationValue):
|
|
Config().validate({'max_backups_in_ha': -2})
|
|
|
|
|
|
def test_validate_float():
|
|
setting = Setting.DAYS_BETWEEN_BACKUPS
|
|
assert Config().validate({setting: 5}) == defaultAnd({setting: 5})
|
|
assert Config().validate({setting.key(): 5}) == defaultAnd({setting: 5})
|
|
assert Config().validate({setting: 5.0}) == defaultAnd({setting: 5})
|
|
assert Config().validate({setting: "5"}) == defaultAnd({setting: 5})
|
|
|
|
with raises(InvalidConfigurationValue):
|
|
Config().validate({'days_between_backups': -1})
|
|
|
|
|
|
def test_validate_bool():
|
|
setting = Setting.SEND_ERROR_REPORTS
|
|
assert Config().validate({setting: True}) == defaultAnd({setting: True})
|
|
assert Config().validate({setting: False}) == defaultAnd({setting: False})
|
|
assert Config().validate({setting: "true"}) == defaultAnd({setting: True})
|
|
assert Config().validate({setting: "false"}) == defaultAnd({setting: False})
|
|
assert Config().validate({setting: "1"}) == defaultAnd({setting: True})
|
|
assert Config().validate({setting: "0"}) == defaultAnd({setting: False})
|
|
assert Config().validate({setting: "yes"}) == defaultAnd({setting: True})
|
|
assert Config().validate({setting: "no"}) == defaultAnd({setting: False})
|
|
assert Config().validate({setting: "on"}) == defaultAnd({setting: True})
|
|
assert Config().validate({setting: "off"}) == defaultAnd({setting: False})
|
|
|
|
|
|
def test_validate_string():
|
|
assert Config().validate({Setting.BACKUP_NAME: True}) == defaultAnd({Setting.BACKUP_NAME: "True"})
|
|
assert Config().validate({Setting.BACKUP_NAME: False}) == defaultAnd({Setting.BACKUP_NAME: "False"})
|
|
assert Config().validate({Setting.BACKUP_NAME: "true"}) == defaultAnd({Setting.BACKUP_NAME: "true"})
|
|
assert Config().validate({Setting.BACKUP_NAME: "false"}) == defaultAnd({Setting.BACKUP_NAME: "false"})
|
|
assert Config().validate({Setting.BACKUP_NAME: "1"}) == defaultAnd({Setting.BACKUP_NAME: "1"})
|
|
assert Config().validate({Setting.BACKUP_NAME: "0"}) == defaultAnd({Setting.BACKUP_NAME: "0"})
|
|
assert Config().validate({Setting.BACKUP_NAME: "yes"}) == defaultAnd({Setting.BACKUP_NAME: "yes"})
|
|
assert Config().validate({Setting.BACKUP_NAME: "no"}) == defaultAnd({Setting.BACKUP_NAME: "no"})
|
|
|
|
|
|
def test_validate_url():
|
|
assert Config().validate({Setting.SUPERVISOR_URL: True}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "True"})
|
|
assert Config().validate({Setting.SUPERVISOR_URL: False}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "False"})
|
|
assert Config().validate({Setting.SUPERVISOR_URL: "true"}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "true"})
|
|
assert Config().validate({Setting.SUPERVISOR_URL: "false"}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "false"})
|
|
assert Config().validate({Setting.SUPERVISOR_URL: "1"}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "1"})
|
|
assert Config().validate({Setting.SUPERVISOR_URL: "0"}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "0"})
|
|
assert Config().validate({Setting.SUPERVISOR_URL: "yes"}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "yes"})
|
|
assert Config().validate({Setting.SUPERVISOR_URL: "no"}) == defaultAnd(
|
|
{Setting.SUPERVISOR_URL: "no"})
|
|
|
|
|
|
def test_validate_regex():
|
|
assert Config().validate({Setting.DRIVE_IPV4: "192.168.1.1"}) == defaultAnd(
|
|
{Setting.DRIVE_IPV4: "192.168.1.1"})
|
|
with raises(InvalidConfigurationValue):
|
|
Config().validate({Setting.DRIVE_IPV4: -1})
|
|
with raises(InvalidConfigurationValue):
|
|
Config().validate({Setting.DRIVE_IPV4: "192.168.1"})
|
|
|
|
|
|
def test_remove_ssl():
|
|
assert Config().validate({Setting.USE_SSL: True}) == defaultAnd({Setting.USE_SSL: True})
|
|
assert Config().validate({Setting.USE_SSL: False}) == defaultAnd()
|
|
assert Config().validate({
|
|
Setting.USE_SSL: False,
|
|
Setting.CERTFILE: "removed",
|
|
Setting.KEYFILE: 'removed'
|
|
}) == defaultAnd()
|
|
assert Config().validate({
|
|
Setting.USE_SSL: True,
|
|
Setting.CERTFILE: "kept",
|
|
Setting.KEYFILE: 'kept'
|
|
}) == defaultAnd({
|
|
Setting.USE_SSL: True,
|
|
Setting.CERTFILE: "kept",
|
|
Setting.KEYFILE: 'kept'
|
|
})
|
|
|
|
|
|
def test_send_error_reports():
|
|
assert Config().validate({Setting.SEND_ERROR_REPORTS: False}) == defaultAnd(
|
|
{Setting.SEND_ERROR_REPORTS: False})
|
|
assert Config().validate({Setting.SEND_ERROR_REPORTS: True}) == defaultAnd(
|
|
{Setting.SEND_ERROR_REPORTS: True})
|
|
assert Config().validate(
|
|
{Setting.SEND_ERROR_REPORTS: None}) == defaultAnd()
|
|
|
|
|
|
def test_unrecognized_values_filter():
|
|
assert Config().validate({'blah': "bloo"}) == defaultAnd()
|
|
|
|
|
|
def test_removes_defaults():
|
|
assert Config().validate(
|
|
{Setting.BACKUP_TIME_OF_DAY: ""}) == defaultAnd()
|
|
|
|
|
|
def defaultAnd(config={}):
|
|
ret = {
|
|
Setting.DAYS_BETWEEN_BACKUPS: 3,
|
|
Setting.MAX_BACKUPS_IN_HA: 4,
|
|
Setting.MAX_BACKUPS_IN_GOOGLE_DRIVE: 4
|
|
}
|
|
ret.update(config)
|
|
return (ret, False)
|
|
|
|
|
|
def test_GenerationalConfig() -> None:
|
|
assert Config().getGenerationalConfig() is None
|
|
|
|
assert Config().override(Setting.GENERATIONAL_DAYS, 5).getGenerationalConfig() == GenConfig(days=5)
|
|
assert Config().override(Setting.GENERATIONAL_WEEKS, 3).getGenerationalConfig() == GenConfig(days=1, weeks=3)
|
|
assert Config().override(Setting.GENERATIONAL_MONTHS, 3).getGenerationalConfig() == GenConfig(days=1, months=3)
|
|
assert Config().override(Setting.GENERATIONAL_YEARS, 3).getGenerationalConfig() == GenConfig(days=1, years=3)
|
|
assert Config().override(Setting.GENERATIONAL_DELETE_EARLY, True).override(
|
|
Setting.GENERATIONAL_DAYS, 2).getGenerationalConfig() == GenConfig(days=2, aggressive=True)
|
|
assert Config().override(Setting.GENERATIONAL_DAYS, 1).override(
|
|
Setting.GENERATIONAL_DAY_OF_YEAR, 3).getGenerationalConfig() == GenConfig(days=1, day_of_year=3)
|
|
assert Config().override(Setting.GENERATIONAL_DAYS, 1).override(
|
|
Setting.GENERATIONAL_DAY_OF_MONTH, 3).getGenerationalConfig() == GenConfig(days=1, day_of_month=3)
|
|
assert Config().override(Setting.GENERATIONAL_DAYS, 1).override(
|
|
Setting.GENERATIONAL_DAY_OF_WEEK, "tue").getGenerationalConfig() == GenConfig(days=1, day_of_week="tue")
|
|
|
|
assert Config().override(Setting.GENERATIONAL_DAY_OF_MONTH, 3).override(Setting.GENERATIONAL_DAY_OF_WEEK, "tue").override(Setting.GENERATIONAL_DAY_OF_YEAR, "4").getGenerationalConfig() is None
|
|
|
|
|
|
def test_from_environment():
|
|
assert Config.fromEnvironment().get(Setting.PORT) != 1000
|
|
|
|
os.environ["PORT"] = str(1000)
|
|
assert Config.fromEnvironment().get(Setting.PORT) == 1000
|
|
|
|
del os.environ["PORT"]
|
|
assert Config.fromEnvironment().get(Setting.PORT) != 1000
|
|
|
|
os.environ["port"] = str(1000)
|
|
assert Config.fromEnvironment().get(Setting.PORT) == 1000
|
|
|
|
|
|
def test_config_upgrade():
|
|
# Test specifying one value
|
|
config = Config()
|
|
config.update({Setting.DEPRECTAED_BACKUP_TIME_OF_DAY: "00:01"})
|
|
assert (config.getAllConfig(), False) == defaultAnd({
|
|
Setting.BACKUP_TIME_OF_DAY: "00:01",
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
# Test specifying multiple values
|
|
config = Config()
|
|
config.update({
|
|
Setting.DEPRECTAED_MAX_BACKUPS_IN_GOOGLE_DRIVE: 21,
|
|
Setting.DEPRECTAED_MAX_BACKUPS_IN_HA: 20,
|
|
Setting.DEPRECATED_BACKUP_PASSWORD: "boop"
|
|
})
|
|
assert config.getAllConfig() == defaultAnd({
|
|
Setting.MAX_BACKUPS_IN_HA: 20,
|
|
Setting.MAX_BACKUPS_IN_GOOGLE_DRIVE: 21,
|
|
Setting.BACKUP_PASSWORD: "boop",
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})[0]
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
# test specifying value that don't get upgraded
|
|
config = Config()
|
|
config.update({Setting.EXCLUDE_ADDONS: "test"})
|
|
assert config.getAllConfig() == defaultAnd({
|
|
Setting.EXCLUDE_ADDONS: "test"
|
|
})[0]
|
|
assert not config.mustSaveUpgradeChanges()
|
|
|
|
# Test specifying both
|
|
config = Config()
|
|
config.update({
|
|
Setting.DEPRECTAED_BACKUP_TIME_OF_DAY: "00:01",
|
|
Setting.EXCLUDE_ADDONS: "test"
|
|
})
|
|
assert config.getAllConfig() == defaultAnd({
|
|
Setting.BACKUP_TIME_OF_DAY: "00:01",
|
|
Setting.EXCLUDE_ADDONS: "test",
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})[0]
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
|
|
def test_overwrite_on_upgrade():
|
|
config = Config()
|
|
config.update({
|
|
Setting.DEPRECTAED_MAX_BACKUPS_IN_HA: 5,
|
|
Setting.MAX_BACKUPS_IN_HA: 6
|
|
})
|
|
assert (config.getAllConfig(), False) == defaultAnd({
|
|
Setting.MAX_BACKUPS_IN_HA: 6,
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
config = Config()
|
|
config.update({
|
|
Setting.MAX_BACKUPS_IN_HA: 6,
|
|
Setting.DEPRECTAED_MAX_BACKUPS_IN_HA: 5
|
|
})
|
|
assert (config.getAllConfig(), False) == defaultAnd({
|
|
Setting.MAX_BACKUPS_IN_HA: 6,
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
config = Config()
|
|
config.update({
|
|
Setting.MAX_BACKUPS_IN_HA: 6,
|
|
Setting.DEPRECTAED_MAX_BACKUPS_IN_HA: 4
|
|
})
|
|
assert (config.getAllConfig(), False) == defaultAnd({
|
|
Setting.MAX_BACKUPS_IN_HA: 6,
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
|
|
def test_overwrite_on_upgrade_default_value():
|
|
# Test specifying one value
|
|
config = Config()
|
|
config.update({
|
|
Setting.DEPRECTAED_MAX_BACKUPS_IN_HA: Setting.MAX_BACKUPS_IN_HA.default() + 1,
|
|
Setting.MAX_BACKUPS_IN_HA: Setting.MAX_BACKUPS_IN_HA.default()
|
|
})
|
|
assert (config.getAllConfig(), False) == defaultAnd({
|
|
Setting.MAX_BACKUPS_IN_HA: Setting.MAX_BACKUPS_IN_HA.default() + 1,
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
config = Config()
|
|
config.update({
|
|
Setting.MAX_BACKUPS_IN_HA: Setting.MAX_BACKUPS_IN_HA.default(),
|
|
Setting.DEPRECTAED_MAX_BACKUPS_IN_HA: Setting.MAX_BACKUPS_IN_HA.default() + 1
|
|
})
|
|
assert (config.getAllConfig(), False) == defaultAnd({
|
|
Setting.MAX_BACKUPS_IN_HA: Setting.MAX_BACKUPS_IN_HA.default() + 1,
|
|
Setting.CALL_BACKUP_SNAPSHOT: True
|
|
})
|
|
assert config.mustSaveUpgradeChanges()
|
|
|
|
|
|
def test_empty_colors():
|
|
# Test specifying one value
|
|
config = Config()
|
|
config.update({Setting.BACKGROUND_COLOR: "", Setting.ACCENT_COLOR: ""})
|
|
assert config.get(Setting.BACKGROUND_COLOR) == Setting.BACKGROUND_COLOR.default()
|
|
assert config.get(Setting.ACCENT_COLOR) == Setting.ACCENT_COLOR.default()
|
|
|
|
|
|
def test_ignore_upgrades_default():
|
|
# Test specifying one value
|
|
config = Config()
|
|
assert config.get(Setting.IGNORE_UPGRADE_BACKUPS)
|
|
|
|
config.useLegacyIgnoredBehavior(True)
|
|
assert not config.get(Setting.IGNORE_UPGRADE_BACKUPS)
|
|
|
|
config.useLegacyIgnoredBehavior(False)
|
|
assert config.get(Setting.IGNORE_UPGRADE_BACKUPS)
|
|
|
|
|
|
def getGenConfig(update):
|
|
base = {
|
|
"days": 1,
|
|
"weeks": 0,
|
|
"months": 0,
|
|
"years": 0,
|
|
"day_of_week": "mon",
|
|
"day_of_year": 1,
|
|
"day_of_month": 1
|
|
}
|
|
base.update(update)
|
|
return base
|