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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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/.
     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
    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
    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)
    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()
    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
    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
    61     def test_preflight(self):
    62         basedir = self.make_basedir()
    63         fn = os.path.join(basedir, "package.json")
    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)
    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)
   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(), "")
   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(), "")
   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(), "")
   146 if __name__ == '__main__':
   147     unittest.main()

mercurial