Updated binary flag to include `contains_binary_content`.

This commit is contained in:
Rob Hudson 2012-01-17 16:00:05 -08:00
Родитель 0eb70810da
Коммит 42d3dec04c
5 изменённых файлов: 84 добавлений и 10 удалений

Просмотреть файл

@ -165,9 +165,10 @@ def flag_binary(ids, **kw):
try:
log.info('Validating addon with id: %s' % addon.pk)
file = File.objects.filter(version__addon=addon).latest('created')
result = run_validator(file.file_path)
binary = (json.loads(result)['metadata']
.get('contains_binary_extension', False))
result = json.loads(run_validator(file.file_path))
metadata = result['metadata']
binary = (metadata.get('contains_binary_extension', False) or
metadata.get('contains_binary_content', False))
log.info('Setting binary for addon with id: %s to %s'
% (addon.pk, binary))
file.update(binary=binary)

Просмотреть файл

@ -131,13 +131,19 @@ class TestFlagBinary(amo.tests.TestCase):
@mock.patch('devhub.tasks.run_validator')
def test_flag_binary(self, _mock):
_mock.return_value = '{"metadata":{"contains_binary_extension": 1}}'
_mock.return_value = ('{"metadata":{"contains_binary_extension": 1, '
'"contains_binary_content": 0}}')
tasks.flag_binary([self.addon.pk])
eq_(Addon.objects.get(pk=self.addon.pk).binary, True)
_mock.return_value = ('{"metadata":{"contains_binary_extension": 0, '
'"contains_binary_content": 1}}')
tasks.flag_binary([self.addon.pk])
eq_(Addon.objects.get(pk=self.addon.pk).binary, True)
@mock.patch('devhub.tasks.run_validator')
def test_flag_not_binary(self, _mock):
_mock.return_value = '{"metadata":{"contains_binary_extension": 0}}'
_mock.return_value = ('{"metadata":{"contains_binary_extension": 0, '
'"contains_binary_content": 0}}')
tasks.flag_binary([self.addon.pk])
eq_(Addon.objects.get(pk=self.addon.pk).binary, False)

Просмотреть файл

@ -251,7 +251,7 @@ class TestValidateFile(BaseUploadTest):
'ValueError: catastrophic failure in amo-validator')
@mock.patch('devhub.tasks.run_validator')
def test_validator_sets_binary_flag(self, v):
def test_validator_sets_binary_flag_for_extensions(self, v):
v.return_value = json.dumps({
"errors": 0,
"success": True,
@ -276,6 +276,32 @@ class TestValidateFile(BaseUploadTest):
addon = Addon.objects.get(pk=self.addon.id)
eq_(addon.binary, True)
@mock.patch('devhub.tasks.run_validator')
def test_validator_sets_binary_flag_for_content(self, v):
v.return_value = json.dumps({
"errors": 0,
"success": True,
"warnings": 0,
"notices": 0,
"message_tree": {},
"messages": [],
"metadata": {
"contains_binary_content": True,
"version": "1.0",
"name": "gK0Bes Bot",
"id": "gkobes@gkobes"
}
})
eq_(self.addon.binary, False)
r = self.client.post(reverse('devhub.json_file_validation',
args=[self.addon.slug, self.file.id]),
follow=True)
eq_(r.status_code, 200)
data = json.loads(r.content)
assert_no_validation_errors(data)
addon = Addon.objects.get(pk=self.addon.id)
eq_(addon.binary, True)
@mock.patch('devhub.tasks.run_validator')
def test_linkify_validation_messages(self, v):
v.return_value = json.dumps({

Просмотреть файл

@ -633,8 +633,9 @@ class FileValidation(amo.models.ModelBase):
new = cls(file=file, validation=validation, errors=js['errors'],
warnings=js['warnings'], notices=js['notices'])
new.valid = new.errors == 0
if ('metadata' in js and
js['metadata'].get('contains_binary_extension', False)):
if ('metadata' in js and (
js['metadata'].get('contains_binary_extension', False) or
js['metadata'].get('contains_binary_content', False))):
file.update(binary=True)
new.save()
return new

Просмотреть файл

@ -520,7 +520,7 @@ class TestFileUpload(UploadTest):
fu = FileUpload.from_post('', u'\u05d0\u05d5\u05e1\u05e3.xpi', 0)
assert 'xpi' in fu.name
def test_validator_sets_require_chrome(self):
def test_validator_sets_binary_via_extensions(self):
validation = json.dumps({
"errors": 0,
"success": True,
@ -533,6 +533,47 @@ class TestFileUpload(UploadTest):
"version": "1.0",
"name": "gK0Bes Bot",
"id": "gkobes@gkobes",
}
})
upload = self.get_upload(filename='extension.xpi', validation=validation)
version = Version.objects.filter(addon__pk=3615)[0]
plat = Platform.objects.get(pk=amo.PLATFORM_LINUX.id)
file_ = File.from_upload(upload, version, plat)
eq_(file_.binary, True)
def test_validator_sets_binary_via_content(self):
validation = json.dumps({
"errors": 0,
"success": True,
"warnings": 0,
"notices": 0,
"message_tree": {},
"messages": [],
"metadata": {
"contains_binary_content": True,
"version": "1.0",
"name": "gK0Bes Bot",
"id": "gkobes@gkobes",
}
})
upload = self.get_upload(filename='extension.xpi', validation=validation)
version = Version.objects.filter(addon__pk=3615)[0]
plat = Platform.objects.get(pk=amo.PLATFORM_LINUX.id)
file_ = File.from_upload(upload, version, plat)
eq_(file_.binary, True)
def test_validator_sets_require_chrome(self):
validation = json.dumps({
"errors": 0,
"success": True,
"warnings": 0,
"notices": 0,
"message_tree": {},
"messages": [],
"metadata": {
"version": "1.0",
"name": "gK0Bes Bot",
"id": "gkobes@gkobes",
"requires_chrome": True
}
})
@ -541,7 +582,6 @@ class TestFileUpload(UploadTest):
plat = Platform.objects.get(pk=amo.PLATFORM_LINUX.id)
file_ = File.from_upload(upload, version, plat)
eq_(file_.requires_chrome, True)
eq_(file_.binary, True)
class TestFileFromUpload(UploadTest):