Esempio n. 1
0
class TestFileHelper(test_utils.TestCase):

    def setUp(self):
        dictionary = 'apps/files/fixtures/files/dictionary-test.xpi'
        src = os.path.join(settings.ROOT, dictionary)

        file_obj = Mock()
        file_obj.id = file_obj.pk = 1
        file_obj.file_path = src

        self.viewer = FileViewer(file_obj)

        self.old_tmp = settings.TMP_PATH
        settings.TMP_PATH = tempfile.mkdtemp()

    def tearDown(self):
        self.viewer.cleanup()
        settings.TMP_PATH = self.old_tmp

    def test_files_not_extracted(self):
        eq_(self.viewer.is_extracted, False)

    def test_files_extracted(self):
        self.viewer.extract()
        eq_(self.viewer.is_extracted, True)

    def test_cleanup(self):
        self.viewer.extract()
        self.viewer.cleanup()
        eq_(self.viewer.is_extracted, False)

    def test_isbinary(self):
        binary = self.viewer.is_binary
        for f in ['foo.rdf', 'foo.xml', 'foo.js', 'foo.py'
                  'foo.html', 'foo.txt', 'foo.dtd', 'foo.xul',
                  'foo.properties']:
            m, encoding = mimetypes.guess_type(f)
            assert not binary(m, f), '%s should not be binary' % f

        for f in ['foo.dtd', 'foo.xul', 'foo.properties']:
            m, encoding = mimetypes.guess_type(f)
            assert not binary(None, f), '%s should not be binary' % f

        for f in ['foo.png', 'foo.gif', 'foo.xls', 'foo.dic']:
            m, encoding = mimetypes.guess_type(f)
            assert binary(m, f), '%s should be binary' % f

    def test_get_files_not_extracted(self):
        assert not self.viewer.get_files()

    def test_get_files_size(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(len(files), 14)

    def test_get_files_directory(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(files['install.js']['directory'], False)
        eq_(files['install.js']['binary'], False)
        eq_(files['__MACOSX']['directory'], True)
        eq_(files['__MACOSX']['binary'], True)

    def test_url_file(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        url = reverse('files.list', args=[self.viewer.file.id,
                                           'install.js'])
        assert files['install.js']['url'].endswith(url)

    def test_get_files_depth(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(files['dictionaries/license.txt']['depth'], 1)
        eq_(files['dictionaries/license.txt']['parent'], 'dictionaries')
Esempio n. 2
0
class TestFileHelper(amo.tests.TestCase):

    def setUp(self):
        self.viewer = FileViewer(make_file(1, get_file('dictionary-test.xpi')))

    def tearDown(self):
        self.viewer.cleanup()

    def test_files_not_extracted(self):
        eq_(self.viewer.is_extracted(), False)

    def test_files_extracted(self):
        self.viewer.extract()
        eq_(self.viewer.is_extracted(), True)

    def test_recurse_extract(self):
        self.viewer.src = get_file('recurse.xpi')
        self.viewer.extract()
        eq_(self.viewer.is_extracted(), True)

    def test_recurse_contents(self):
        self.viewer.src = get_file('recurse.xpi')
        self.viewer.extract()
        files = self.viewer.get_files()
        nm = ['recurse/recurse.xpi/chrome/test-root.txt',
              'recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar',
              'recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar/test']
        for name in nm:
            eq_(name in files, True, 'File %r not extracted' % name)

    def test_cleanup(self):
        self.viewer.extract()
        self.viewer.cleanup()
        eq_(self.viewer.is_extracted(), False)

    def test_isbinary(self):
        binary = self.viewer._is_binary
        for f in ['foo.rdf', 'foo.xml', 'foo.js', 'foo.py'
                  'foo.html', 'foo.txt', 'foo.dtd', 'foo.xul', 'foo.sh',
                  'foo.properties', 'foo.json', 'foo.src', 'CHANGELOG']:
            m, encoding = mimetypes.guess_type(f)
            assert not binary(m, f), '%s should not be binary' % f

        for f in ['foo.png', 'foo.gif', 'foo.exe', 'foo.swf']:
            m, encoding = mimetypes.guess_type(f)
            assert binary(m, f), '%s should be binary' % f

        filename = os.path.join(settings.TMP_PATH, 'test_isbinary')
        for txt in ['#!/usr/bin/python', '#python', u'\0x2']:
            open(filename, 'w').write(txt)
            m, encoding = mimetypes.guess_type(filename)
            assert not binary(m, filename), '%s should not be binary' % txt

        for txt in ['MZ']:
            open(filename, 'w').write(txt)
            m, encoding = mimetypes.guess_type(filename)
            assert binary(m, filename), '%s should be binary' % txt
        os.remove(filename)

    def test_truncate(self):
        truncate = self.viewer.truncate
        for x, y in (['foo.rdf', 'foo.rdf'],
                     ['somelongfilename.rdf', 'somelongfilenam...rdf'],
                     [u'unicode삮.txt', u'unicode\uc0ae.txt'],
                     [u'unicodesomelong삮.txt', u'unicodesomelong...txt'],
                     ['somelongfilename.somelongextension',
                      'somelongfilenam...somelonge..'],):
            eq_(truncate(x), y)

    def test_get_files_not_extracted(self):
        assert not self.viewer.get_files()

    def test_get_files_size(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(len(files), 14)

    def test_get_files_directory(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(files['install.js']['directory'], False)
        eq_(files['install.js']['binary'], False)
        eq_(files['__MACOSX']['directory'], True)
        eq_(files['__MACOSX']['binary'], False)

    def test_url_file(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        url = reverse('files.list', args=[self.viewer.file.id,
                                          'file', 'install.js'])
        assert files['install.js']['url'].endswith(url)

    def test_get_files_depth(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(files['dictionaries/license.txt']['depth'], 1)

    def test_bom(self):
        dest = os.path.join(settings.TMP_PATH, 'test_bom')
        open(dest, 'w').write('foo'.encode('utf-16'))
        self.viewer.select('foo')
        self.viewer.selected = {'full': dest, 'size': 1}
        eq_(self.viewer.read_file(), u'foo')
        os.remove(dest)

    def test_syntax(self):
        for filename, syntax in [('foo.rdf', 'xml'),
                                 ('foo.xul', 'xml'),
                                 ('foo.json', 'js'),
                                 ('foo.jsm', 'js'),
                                 ('foo.bar', 'plain')]:
            eq_(self.viewer.get_syntax(filename), syntax)

    def test_file_order(self):
        self.viewer.extract()
        dest = self.viewer.dest
        open(os.path.join(dest, 'chrome.manifest'), 'w')
        subdir = os.path.join(dest, 'chrome')
        os.mkdir(subdir)
        open(os.path.join(subdir, 'foo'), 'w')
        cache.clear()
        files = self.viewer.get_files().keys()
        rt = files.index(u'chrome')
        eq_(files[rt:rt + 3], [u'chrome', u'chrome/foo', u'dictionaries'])

    @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5)
    def test_file_size(self):
        self.viewer.extract()
        self.viewer.get_files()
        self.viewer.select('install.js')
        res = self.viewer.read_file()
        eq_(res, '')
        assert self.viewer.selected['msg'].startswith('File size is')

    @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5)
    def test_file_size_unicode(self):
        with self.activate(locale='he'):
            self.viewer.extract()
            self.viewer.get_files()
            self.viewer.select('install.js')
            res = self.viewer.read_file()
            eq_(res, '')
            assert self.viewer.selected['msg'].startswith('File size is')

    @patch.object(settings, 'FILE_UNZIP_SIZE_LIMIT', 5)
    def test_contents_size(self):
        self.assertRaises(forms.ValidationError, self.viewer.extract)

    def test_default(self):
        eq_(self.viewer.get_default(None), 'install.rdf')

    def test_delete_mid_read(self):
        self.viewer.extract()
        self.viewer.select('install.js')
        os.remove(os.path.join(self.viewer.dest, 'install.js'))
        res = self.viewer.read_file()
        eq_(res, '')
        assert self.viewer.selected['msg'].startswith('That file no')

    @patch('files.helpers.get_md5')
    def test_delete_mid_tree(self, get_md5):
        get_md5.side_effect = IOError('ow')
        self.viewer.extract()
        eq_({}, self.viewer.get_files())
Esempio n. 3
0
class TestFileHelper(amo.tests.TestCase):
    def setUp(self):
        self.viewer = FileViewer(make_file(1, get_file("dictionary-test.xpi")))

    def tearDown(self):
        self.viewer.cleanup()

    def test_files_not_extracted(self):
        eq_(self.viewer.is_extracted(), False)

    def test_files_extracted(self):
        self.viewer.extract()
        eq_(self.viewer.is_extracted(), True)

    def test_recurse_extract(self):
        self.viewer.src = get_file("recurse.xpi")
        self.viewer.extract()
        eq_(self.viewer.is_extracted(), True)

    def test_recurse_contents(self):
        self.viewer.src = get_file("recurse.xpi")
        self.viewer.extract()
        files = self.viewer.get_files()
        nm = [
            "recurse/recurse.xpi/chrome/test-root.txt",
            "recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar",
            "recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar/test",
        ]
        for name in nm:
            eq_(name in files, True, "File %r not extracted" % name)

    def test_cleanup(self):
        self.viewer.extract()
        self.viewer.cleanup()
        eq_(self.viewer.is_extracted(), False)

    def test_isbinary(self):
        binary = self.viewer._is_binary
        for f in [
            "foo.rdf",
            "foo.xml",
            "foo.js",
            "foo.py" "foo.html",
            "foo.txt",
            "foo.dtd",
            "foo.xul",
            "foo.sh",
            "foo.properties",
            "foo.json",
            "foo.src",
            "CHANGELOG",
        ]:
            m, encoding = mimetypes.guess_type(f)
            assert not binary(m, f), "%s should not be binary" % f

        for f in ["foo.png", "foo.gif", "foo.exe", "foo.swf"]:
            m, encoding = mimetypes.guess_type(f)
            assert binary(m, f), "%s should be binary" % f

        filename = os.path.join(settings.TMP_PATH, "test_isbinary")
        for txt in ["#!/usr/bin/python", "#python", u"\0x2"]:
            open(filename, "w").write(txt)
            m, encoding = mimetypes.guess_type(filename)
            assert not binary(m, filename), "%s should not be binary" % txt

        for txt in ["MZ"]:
            open(filename, "w").write(txt)
            m, encoding = mimetypes.guess_type(filename)
            assert binary(m, filename), "%s should be binary" % txt
        os.remove(filename)

    def test_truncate(self):
        truncate = self.viewer.truncate
        for x, y in (
            ["foo.rdf", "foo.rdf"],
            ["somelongfilename.rdf", "somelongfilenam...rdf"],
            [u"unicode삮.txt", u"unicode\uc0ae.txt"],
            [u"unicodesomelong삮.txt", u"unicodesomelong...txt"],
            ["somelongfilename.somelongextension", "somelongfilenam...somelonge.."],
        ):
            eq_(truncate(x), y)

    def test_get_files_not_extracted(self):
        assert not self.viewer.get_files()

    def test_get_files_size(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(len(files), 14)

    def test_get_files_directory(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(files["install.js"]["directory"], False)
        eq_(files["install.js"]["binary"], False)
        eq_(files["__MACOSX"]["directory"], True)
        eq_(files["__MACOSX"]["binary"], False)

    def test_url_file(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        url = reverse("files.list", args=[self.viewer.file.id, "file", "install.js"])
        assert files["install.js"]["url"].endswith(url)

    def test_get_files_depth(self):
        self.viewer.extract()
        files = self.viewer.get_files()
        eq_(files["dictionaries/license.txt"]["depth"], 1)

    def test_bom(self):
        dest = os.path.join(settings.TMP_PATH, "test_bom")
        open(dest, "w").write("foo".encode("utf-16"))
        self.viewer.select("foo")
        self.viewer.selected = {"full": dest, "size": 1}
        eq_(self.viewer.read_file(), u"foo")
        os.remove(dest)

    def test_syntax(self):
        for filename, syntax in [("foo.rdf", "xml"), ("foo.xul", "xml"), ("foo.bar", "plain")]:
            eq_(self.viewer.get_syntax(filename), syntax)

    def test_file_order(self):
        self.viewer.extract()
        dest = self.viewer.dest
        open(os.path.join(dest, "chrome.manifest"), "w")
        subdir = os.path.join(dest, "chrome")
        os.mkdir(subdir)
        open(os.path.join(subdir, "foo"), "w")
        cache.clear()
        files = self.viewer.get_files().keys()
        rt = files.index(u"chrome")
        eq_(files[rt : rt + 3], [u"chrome", u"chrome/foo", u"chrome.manifest"])

    @patch.object(settings, "FILE_VIEWER_SIZE_LIMIT", 5)
    def test_file_size(self):
        self.viewer.extract()
        self.viewer.get_files()
        self.viewer.select("install.js")
        res = self.viewer.read_file()
        eq_(res, "")
        assert self.viewer.selected["msg"].startswith("File size is")

    @patch.object(settings, "FILE_UNZIP_SIZE_LIMIT", 5)
    def test_contents_size(self):
        self.assertRaises(forms.ValidationError, self.viewer.extract)

    def test_default(self):
        eq_(self.viewer.get_default(None), "install.rdf")

    def test_delete_mid_read(self):
        self.viewer.extract()
        self.viewer.select("install.js")
        os.remove(os.path.join(self.viewer.dest, "install.js"))
        res = self.viewer.read_file()
        eq_(res, "")
        assert self.viewer.selected["msg"].startswith("That file no")

    @patch("files.helpers.get_md5")
    def test_delete_mid_tree(self, get_md5):
        get_md5.side_effect = IOError("ow")
        self.viewer.extract()
        eq_({}, self.viewer.get_files())