aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-12-05 07:18:53 +1300
committerAldo Cortesi <aldo@nullcube.com>2016-12-08 10:21:06 +1300
commitd74cac265a9d1d8ce176a7ef96be2d91c4f40819 (patch)
tree47187e9cb00b4eea5060006ce0c7382fc41ac2d0 /test
parentc94cd512d108fd9a12c87015791ce977b895fa2d (diff)
downloadmitmproxy-d74cac265a9d1d8ce176a7ef96be2d91c4f40819.tar.gz
mitmproxy-d74cac265a9d1d8ce176a7ef96be2d91c4f40819.tar.bz2
mitmproxy-d74cac265a9d1d8ce176a7ef96be2d91c4f40819.zip
Add YAML serialization of options
This uses ruamel.yaml. The library seems well-supported, and can do in-place modification of config files that retains user comments and file structure.
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/test_optmanager.py55
1 files changed, 54 insertions, 1 deletions
diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py
index 385cf621..0c98daea 100644
--- a/test/mitmproxy/test_optmanager.py
+++ b/test/mitmproxy/test_optmanager.py
@@ -1,5 +1,7 @@
import copy
+import os
+from mitmproxy import options
from mitmproxy import optmanager
from mitmproxy import exceptions
from mitmproxy.test import tutils
@@ -24,7 +26,7 @@ class TD2(TD):
def __init__(self, *, three="dthree", four="dfour", **kwargs):
self.three = three
self.four = four
- super().__init__(**kwargs)
+ super().__init__(three=three, **kwargs)
def test_defaults():
@@ -167,3 +169,54 @@ def test_repr():
'one': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'two': None
})"""
+
+
+def test_serialize():
+ o = TD2()
+ o.three = "set"
+ assert "dfour" in o.serialize(None, defaults=True)
+
+ data = o.serialize(None)
+ assert "dfour" not in data
+
+ o2 = TD2()
+ o2.load(data)
+ assert o2 == o
+
+ t = """
+ unknown: foo
+ """
+ data = o.serialize(t)
+ o2 = TD2()
+ o2.load(data)
+ assert o2 == o
+
+ t = "invalid: foo\ninvalid"
+ tutils.raises("config error", o2.load, t)
+
+ t = "invalid"
+ tutils.raises("config error", o2.load, t)
+
+ t = ""
+ o2.load(t)
+
+
+def test_serialize_defaults():
+ o = options.Options()
+ assert o.serialize(None, defaults=True)
+
+
+def test_saving():
+ o = TD2()
+ o.three = "set"
+ with tutils.tmpdir() as tdir:
+ dst = os.path.join(tdir, "conf")
+ o.save(dst, defaults=True)
+
+ o2 = TD2()
+ o2.load_paths(dst)
+ o2.three = "foo"
+ o2.save(dst, defaults=True)
+
+ o.load_paths(dst)
+ assert o.three == "foo"