mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 12:51:09 +02:00
147 lines
5.7 KiB
Python
147 lines
5.7 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
import os, shutil
|
|
import simplejson as json
|
|
import unittest
|
|
import hashlib
|
|
import base64
|
|
from cuddlefish import preflight
|
|
from StringIO import StringIO
|
|
|
|
class Util(unittest.TestCase):
|
|
def get_basedir(self):
|
|
return os.path.join(".test_tmp", self.id())
|
|
def make_basedir(self):
|
|
basedir = self.get_basedir()
|
|
if os.path.isdir(basedir):
|
|
here = os.path.abspath(os.getcwd())
|
|
assert os.path.abspath(basedir).startswith(here) # safety
|
|
shutil.rmtree(basedir)
|
|
os.makedirs(basedir)
|
|
return basedir
|
|
|
|
def test_base62(self):
|
|
for i in range(1000):
|
|
h = hashlib.sha1(str(i)).digest()
|
|
s1 = base64.b64encode(h, "AB").strip("=")
|
|
s2 = base64.b64encode(h).strip("=").replace("+","A").replace("/","B")
|
|
self.failUnlessEqual(s1, s2)
|
|
|
|
def write(self, config):
|
|
basedir = self.get_basedir()
|
|
fn = os.path.join(basedir, "package.json")
|
|
open(fn,"w").write(config)
|
|
def read(self):
|
|
basedir = self.get_basedir()
|
|
fn = os.path.join(basedir, "package.json")
|
|
return open(fn,"r").read()
|
|
|
|
def get_cfg(self):
|
|
cfg = json.loads(self.read())
|
|
if "name" not in cfg:
|
|
# the cfx parser always provides a name, even if package.json
|
|
# doesn't contain one
|
|
cfg["name"] = "pretend name"
|
|
return cfg
|
|
|
|
def parse(self, keydata):
|
|
fields = {}
|
|
fieldnames = []
|
|
for line in keydata.split("\n"):
|
|
if line.strip():
|
|
k,v = line.split(":", 1)
|
|
k = k.strip() ; v = v.strip()
|
|
fields[k] = v
|
|
fieldnames.append(k)
|
|
return fields, fieldnames
|
|
|
|
def test_preflight(self):
|
|
basedir = self.make_basedir()
|
|
fn = os.path.join(basedir, "package.json")
|
|
|
|
# empty config is not ok: need id (name is automatically supplied)
|
|
config_orig = "{}"
|
|
self.write(config_orig)
|
|
out = StringIO()
|
|
cfg = self.get_cfg()
|
|
config_was_ok, modified = preflight.preflight_config(cfg, fn,
|
|
stderr=out)
|
|
self.failUnlessEqual(config_was_ok, False)
|
|
self.failUnlessEqual(modified, True)
|
|
backup_fn = os.path.join(basedir, "package.json.backup")
|
|
config_backup = open(backup_fn,"r").read()
|
|
self.failUnlessEqual(config_backup, config_orig)
|
|
config = json.loads(self.read())
|
|
self.failIf("name" in config)
|
|
self.failUnless("id" in config)
|
|
self.failUnless(config["id"].startswith("jid1-"), config["id"])
|
|
self.failUnlessEqual(out.getvalue().strip(),
|
|
"No 'id' in package.json: creating a new ID for you.")
|
|
os.unlink(backup_fn)
|
|
|
|
# just a name? we add the id
|
|
config_orig = '{"name": "my-awesome-package"}'
|
|
self.write(config_orig)
|
|
out = StringIO()
|
|
cfg = self.get_cfg()
|
|
config_was_ok, modified = preflight.preflight_config(cfg, fn,
|
|
stderr=out)
|
|
self.failUnlessEqual(config_was_ok, False)
|
|
self.failUnlessEqual(modified, True)
|
|
backup_fn = os.path.join(basedir, "package.json.backup")
|
|
config_backup = open(backup_fn,"r").read()
|
|
self.failUnlessEqual(config_backup, config_orig)
|
|
config = json.loads(self.read())
|
|
self.failUnlessEqual(config["name"], "my-awesome-package")
|
|
self.failUnless("id" in config)
|
|
self.failUnless(config["id"].startswith("jid1-"), config["id"])
|
|
jid = str(config["id"])
|
|
self.failUnlessEqual(out.getvalue().strip(),
|
|
"No 'id' in package.json: creating a new ID for you.")
|
|
os.unlink(backup_fn)
|
|
|
|
# name and valid id? great! ship it!
|
|
config2 = '{"name": "my-awesome-package", "id": "%s"}' % jid
|
|
self.write(config2)
|
|
out = StringIO()
|
|
cfg = self.get_cfg()
|
|
config_was_ok, modified = preflight.preflight_config(cfg, fn,
|
|
stderr=out)
|
|
self.failUnlessEqual(config_was_ok, True)
|
|
self.failUnlessEqual(modified, False)
|
|
config2a = self.read()
|
|
self.failUnlessEqual(config2a, config2)
|
|
self.failUnlessEqual(out.getvalue().strip(), "")
|
|
|
|
# name and anonymous ID? without asking to see its papers, ship it
|
|
config3 = '{"name": "my-old-skool-package", "id": "anonid0-deadbeef"}'
|
|
self.write(config3)
|
|
out = StringIO()
|
|
cfg = self.get_cfg()
|
|
config_was_ok, modified = preflight.preflight_config(cfg, fn,
|
|
stderr=out)
|
|
self.failUnlessEqual(config_was_ok, True)
|
|
self.failUnlessEqual(modified, False)
|
|
config3a = self.read()
|
|
self.failUnlessEqual(config3a, config3)
|
|
self.failUnlessEqual(out.getvalue().strip(), "")
|
|
|
|
# name and old-style ID? with nostalgic trepidation, ship it
|
|
config4 = '{"name": "my-old-skool-package", "id": "foo@bar.baz"}'
|
|
self.write(config4)
|
|
out = StringIO()
|
|
cfg = self.get_cfg()
|
|
config_was_ok, modified = preflight.preflight_config(cfg, fn,
|
|
stderr=out)
|
|
self.failUnlessEqual(config_was_ok, True)
|
|
self.failUnlessEqual(modified, False)
|
|
config4a = self.read()
|
|
self.failUnlessEqual(config4a, config4)
|
|
self.failUnlessEqual(out.getvalue().strip(), "")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|