aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_remote.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_remote.py')
-rw-r--r--tests/test_remote.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/test_remote.py b/tests/test_remote.py
index 7288828..3ac584a 100644
--- a/tests/test_remote.py
+++ b/tests/test_remote.py
@@ -570,6 +570,57 @@ class PhantomTest(Base):
sbb.KINDS["fix-current"](self.cfg, ["x"])
+class ConfigCommandsTest(Base):
+ def setUp(self):
+ super().setUp()
+ self.path = os.environ["SBB_CONFIG"]
+ with open(self.path) as f:
+ self.old = f.read()
+
+ def set(self, text):
+ stdin = io.TextIOWrapper(io.BytesIO(text.encode()))
+ with mock.patch.object(sbb.sys, "stdin", stdin):
+ return self.run_main("config-set")
+
+ def text(self):
+ with open(self.path) as f:
+ return f.read()
+
+ def test_set_accepted(self):
+ new = self.old + 'overlays = ["a"]\n'
+ self.assertEqual(self.set(new), (0, {"ok": True}))
+ self.assertEqual(self.text(), new)
+ with open(self.path + ".bak") as f:
+ self.assertEqual(f.read(), self.old)
+ self.assertEqual(sbb.load_config()["overlays"], ["a"])
+
+ def test_set_refused(self):
+ for text, why in (("state_dir = \n", "config"), ("bogus = 1\n", "bogus: unknown key"),
+ ("state_dir = 1\n", "state_dir: expected str"),
+ ("[manifests]\nx = 1\n", "manifests: expected strings")):
+ rc, data = self.set(text)
+ self.assertEqual(rc, 1, text)
+ self.assertIn(why, data["error"])
+ self.assertEqual(self.text(), self.old)
+ self.assertFalse(os.path.exists(self.path + ".bak"))
+
+ def test_get(self):
+ self.assertEqual(self.run_main("config-get"),
+ (0, {"text": self.old, "defaults": sbb.DEFAULTS, "path": self.path}))
+
+ def test_get_missing(self):
+ os.remove(self.path)
+ self.assertEqual(self.run_main("config-get")[1]["text"], "")
+
+ def test_broken_config_can_be_read_and_fixed(self):
+ with open(self.path, "w") as f:
+ f.write("bogus = 1\n")
+ self.assertEqual(self.run_main("version")[0], 1)
+ self.assertEqual(self.run_main("config-get")[1]["text"], "bogus = 1\n")
+ self.assertEqual(self.set(self.old), (0, {"ok": True}))
+ self.assertEqual(self.run_main("version")[0], 0)
+
+
class MainTest(Base):
def test_unknown_command(self):
rc, data = self.run_main("nope")