121 lines
3.7 KiB
Python
121 lines
3.7 KiB
Python
from twisted.trial import unittest
|
|
from twisted.python.failure import Failure
|
|
|
|
import common
|
|
import os
|
|
|
|
from deluge.config import Config
|
|
|
|
DEFAULTS = {"string": "foobar", "int": 1, "float": 0.435, "bool": True}
|
|
|
|
class ConfigTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.config_dir = common.set_tmp_config_dir()
|
|
|
|
def test_init(self):
|
|
config = Config("test.conf", defaults=DEFAULTS, config_dir=self.config_dir)
|
|
self.assertEquals(DEFAULTS, config.config)
|
|
|
|
config = Config("test.conf", config_dir=self.config_dir)
|
|
self.assertEquals({}, config.config)
|
|
|
|
def test_set_get_item(self):
|
|
config = Config("test.conf", config_dir=self.config_dir)
|
|
config["foo"] = 1
|
|
self.assertEquals(config["foo"], 1)
|
|
self.assertRaises(ValueError, config.set_item, "foo", "bar")
|
|
config["foo"] = 2
|
|
self.assertEquals(config.get_item("foo"), 2)
|
|
|
|
config._save_timer.cancel()
|
|
|
|
def test_load(self):
|
|
def check_config():
|
|
config = Config("test.conf", config_dir=self.config_dir)
|
|
|
|
self.assertEquals(config["string"], "foobar")
|
|
self.assertEquals(config["float"], 0.435)
|
|
|
|
# Test loading an old config from 1.1.x
|
|
import pickle
|
|
pickle.dump(DEFAULTS, open(os.path.join(self.config_dir, "test.conf"), "wb"))
|
|
|
|
check_config()
|
|
|
|
# Test opening a previous 1.2 config file of just a json object
|
|
import json
|
|
json.dump(DEFAULTS, open(os.path.join(self.config_dir, "test.conf"), "wb"), indent=2)
|
|
|
|
check_config()
|
|
|
|
# Test opening a previous 1.2 config file of having the format versions
|
|
# as ints
|
|
f = open(os.path.join(self.config_dir, "test.conf"), "wb")
|
|
f.write(str(1) + "\n")
|
|
f.write(str(1) + "\n")
|
|
json.dump(DEFAULTS, f, indent=2)
|
|
f.close()
|
|
|
|
check_config()
|
|
|
|
# Test the 1.2 config format
|
|
v = {"format": 1, "file": 1}
|
|
f = open(os.path.join(self.config_dir, "test.conf"), "wb")
|
|
json.dump(v, f, indent=2)
|
|
json.dump(DEFAULTS, f, indent=2)
|
|
f.close()
|
|
|
|
check_config()
|
|
|
|
def test_save(self):
|
|
config = Config("test.conf", defaults=DEFAULTS, config_dir=self.config_dir)
|
|
# We do this twice because the first time we need to save the file to disk
|
|
# and the second time we do a compare and we should not write
|
|
ret = config.save()
|
|
self.assertTrue(ret)
|
|
ret = config.save()
|
|
self.assertTrue(ret)
|
|
|
|
config["string"] = "baz"
|
|
config["int"] = 2
|
|
ret = config.save()
|
|
self.assertTrue(ret)
|
|
del config
|
|
|
|
config = Config("test.conf", defaults=DEFAULTS, config_dir=self.config_dir)
|
|
self.assertEquals(config["string"], "baz")
|
|
self.assertEquals(config["int"], 2)
|
|
|
|
def test_save_timer(self):
|
|
config = Config("test.conf", defaults=DEFAULTS, config_dir=self.config_dir)
|
|
config["string"] = "baz"
|
|
config["int"] = 2
|
|
self.assertTrue(config._save_timer.active())
|
|
|
|
def check_config(config):
|
|
self.assertTrue(not config._save_timer.active())
|
|
del config
|
|
config = Config("test.conf", defaults=DEFAULTS, config_dir=self.config_dir)
|
|
self.assertEquals(config["string"], "baz")
|
|
self.assertEquals(config["int"], 2)
|
|
|
|
from twisted.internet.task import deferLater
|
|
from twisted.internet import reactor
|
|
d = deferLater(reactor, 7, check_config, config)
|
|
return d
|
|
|
|
def test_find_json_objects(self):
|
|
s = """{
|
|
"file": 1,
|
|
"format": 1
|
|
}{
|
|
"ssl": true,
|
|
"enabled": false,
|
|
"port": 8115
|
|
}\n"""
|
|
|
|
from deluge.config import find_json_objects
|
|
|
|
objects = find_json_objects(s)
|
|
self.assertEquals(len(objects), 2)
|