addon-sdk/source/python-lib/cuddlefish/tests/test_preflight.py

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:48e56d25b9b3
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5
6 import os, shutil
7 import simplejson as json
8 import unittest
9 import hashlib
10 import base64
11 from cuddlefish import preflight
12 from StringIO import StringIO
13
14 class Util(unittest.TestCase):
15 def get_basedir(self):
16 return os.path.join(".test_tmp", self.id())
17 def make_basedir(self):
18 basedir = self.get_basedir()
19 if os.path.isdir(basedir):
20 here = os.path.abspath(os.getcwd())
21 assert os.path.abspath(basedir).startswith(here) # safety
22 shutil.rmtree(basedir)
23 os.makedirs(basedir)
24 return basedir
25
26 def test_base62(self):
27 for i in range(1000):
28 h = hashlib.sha1(str(i)).digest()
29 s1 = base64.b64encode(h, "AB").strip("=")
30 s2 = base64.b64encode(h).strip("=").replace("+","A").replace("/","B")
31 self.failUnlessEqual(s1, s2)
32
33 def write(self, config):
34 basedir = self.get_basedir()
35 fn = os.path.join(basedir, "package.json")
36 open(fn,"w").write(config)
37 def read(self):
38 basedir = self.get_basedir()
39 fn = os.path.join(basedir, "package.json")
40 return open(fn,"r").read()
41
42 def get_cfg(self):
43 cfg = json.loads(self.read())
44 if "name" not in cfg:
45 # the cfx parser always provides a name, even if package.json
46 # doesn't contain one
47 cfg["name"] = "pretend name"
48 return cfg
49
50 def parse(self, keydata):
51 fields = {}
52 fieldnames = []
53 for line in keydata.split("\n"):
54 if line.strip():
55 k,v = line.split(":", 1)
56 k = k.strip() ; v = v.strip()
57 fields[k] = v
58 fieldnames.append(k)
59 return fields, fieldnames
60
61 def test_preflight(self):
62 basedir = self.make_basedir()
63 fn = os.path.join(basedir, "package.json")
64
65 # empty config is not ok: need id (name is automatically supplied)
66 config_orig = "{}"
67 self.write(config_orig)
68 out = StringIO()
69 cfg = self.get_cfg()
70 config_was_ok, modified = preflight.preflight_config(cfg, fn,
71 stderr=out)
72 self.failUnlessEqual(config_was_ok, False)
73 self.failUnlessEqual(modified, True)
74 backup_fn = os.path.join(basedir, "package.json.backup")
75 config_backup = open(backup_fn,"r").read()
76 self.failUnlessEqual(config_backup, config_orig)
77 config = json.loads(self.read())
78 self.failIf("name" in config)
79 self.failUnless("id" in config)
80 self.failUnless(config["id"].startswith("jid1-"), config["id"])
81 self.failUnlessEqual(out.getvalue().strip(),
82 "No 'id' in package.json: creating a new ID for you.")
83 os.unlink(backup_fn)
84
85 # just a name? we add the id
86 config_orig = '{"name": "my-awesome-package"}'
87 self.write(config_orig)
88 out = StringIO()
89 cfg = self.get_cfg()
90 config_was_ok, modified = preflight.preflight_config(cfg, fn,
91 stderr=out)
92 self.failUnlessEqual(config_was_ok, False)
93 self.failUnlessEqual(modified, True)
94 backup_fn = os.path.join(basedir, "package.json.backup")
95 config_backup = open(backup_fn,"r").read()
96 self.failUnlessEqual(config_backup, config_orig)
97 config = json.loads(self.read())
98 self.failUnlessEqual(config["name"], "my-awesome-package")
99 self.failUnless("id" in config)
100 self.failUnless(config["id"].startswith("jid1-"), config["id"])
101 jid = str(config["id"])
102 self.failUnlessEqual(out.getvalue().strip(),
103 "No 'id' in package.json: creating a new ID for you.")
104 os.unlink(backup_fn)
105
106 # name and valid id? great! ship it!
107 config2 = '{"name": "my-awesome-package", "id": "%s"}' % jid
108 self.write(config2)
109 out = StringIO()
110 cfg = self.get_cfg()
111 config_was_ok, modified = preflight.preflight_config(cfg, fn,
112 stderr=out)
113 self.failUnlessEqual(config_was_ok, True)
114 self.failUnlessEqual(modified, False)
115 config2a = self.read()
116 self.failUnlessEqual(config2a, config2)
117 self.failUnlessEqual(out.getvalue().strip(), "")
118
119 # name and anonymous ID? without asking to see its papers, ship it
120 config3 = '{"name": "my-old-skool-package", "id": "anonid0-deadbeef"}'
121 self.write(config3)
122 out = StringIO()
123 cfg = self.get_cfg()
124 config_was_ok, modified = preflight.preflight_config(cfg, fn,
125 stderr=out)
126 self.failUnlessEqual(config_was_ok, True)
127 self.failUnlessEqual(modified, False)
128 config3a = self.read()
129 self.failUnlessEqual(config3a, config3)
130 self.failUnlessEqual(out.getvalue().strip(), "")
131
132 # name and old-style ID? with nostalgic trepidation, ship it
133 config4 = '{"name": "my-old-skool-package", "id": "foo@bar.baz"}'
134 self.write(config4)
135 out = StringIO()
136 cfg = self.get_cfg()
137 config_was_ok, modified = preflight.preflight_config(cfg, fn,
138 stderr=out)
139 self.failUnlessEqual(config_was_ok, True)
140 self.failUnlessEqual(modified, False)
141 config4a = self.read()
142 self.failUnlessEqual(config4a, config4)
143 self.failUnlessEqual(out.getvalue().strip(), "")
144
145
146 if __name__ == '__main__':
147 unittest.main()

mercurial