##// END OF EJS Templates
More simplifications due to promises
More simplifications due to promises

File last commit:

r18612:418df74d
r18888:96cc9663
Show More
test_sign.py
150 lines | 5.2 KiB | text/x-python | PythonLexer
MinRK
test notebook signing
r14863 """Test Notebook signing"""
MinRK
update nbformat.current to v4
r18579 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
MinRK
test notebook signing
r14863
from .base import TestsBase
MinRK
Add top-level IPython.nbformat API...
r18603 from IPython.nbformat import read, sign
MinRK
test notebook signing
r14863 from IPython.core.getipython import get_ipython
class TestNotary(TestsBase):
def setUp(self):
self.notary = sign.NotebookNotary(
secret=b'secret',
profile_dir=get_ipython().profile_dir
)
with self.fopen(u'test3.ipynb', u'r') as f:
MinRK
Add top-level IPython.nbformat API...
r18603 self.nb = read(f, as_version=4)
MinRK
restore ability to sign v3 notebooks
r18612 with self.fopen(u'test3.ipynb', u'r') as f:
self.nb3 = read(f, as_version=3)
MinRK
test notebook signing
r14863
def test_algorithms(self):
last_sig = ''
MinRK
Python 3 renamed hashlib.algorithms to algorithms_guaranteed
r14908 for algo in sign.algorithms:
MinRK
test notebook signing
r14863 self.notary.algorithm = algo
self.notary.sign(self.nb)
sig = self.nb.metadata.signature
print(sig)
self.assertEqual(sig[:len(self.notary.algorithm)+1], '%s:' % self.notary.algorithm)
self.assertNotEqual(last_sig, sig)
last_sig = sig
def test_sign_same(self):
"""Multiple signatures of the same notebook are the same"""
sig1 = self.notary.compute_signature(self.nb)
sig2 = self.notary.compute_signature(self.nb)
self.assertEqual(sig1, sig2)
def test_change_secret(self):
"""Changing the secret changes the signature"""
sig1 = self.notary.compute_signature(self.nb)
self.notary.secret = b'different'
sig2 = self.notary.compute_signature(self.nb)
self.assertNotEqual(sig1, sig2)
def test_sign(self):
self.notary.sign(self.nb)
sig = self.nb.metadata.signature
self.assertEqual(sig[:len(self.notary.algorithm)+1], '%s:' % self.notary.algorithm)
def test_check_signature(self):
nb = self.nb
md = nb.metadata
notary = self.notary
check_signature = notary.check_signature
# no signature:
md.pop('signature', None)
self.assertFalse(check_signature(nb))
# hash only, no algo
md.signature = notary.compute_signature(nb)
self.assertFalse(check_signature(nb))
# proper signature, algo mismatch
notary.algorithm = 'sha224'
notary.sign(nb)
notary.algorithm = 'sha256'
self.assertFalse(check_signature(nb))
# check correctly signed notebook
notary.sign(nb)
self.assertTrue(check_signature(nb))
def test_mark_cells_untrusted(self):
MinRK
update nbformat.current to v4
r18579 cells = self.nb.cells
MinRK
test notebook signing
r14863 self.notary.mark_cells(self.nb, False)
for cell in cells:
MinRK
trust is stored in code_cell.metadata...
r18255 self.assertNotIn('trusted', cell)
MinRK
test notebook signing
r14863 if cell.cell_type == 'code':
MinRK
trust is stored in code_cell.metadata...
r18255 self.assertIn('trusted', cell.metadata)
self.assertFalse(cell.metadata.trusted)
MinRK
test notebook signing
r14863 else:
MinRK
trust is stored in code_cell.metadata...
r18255 self.assertNotIn('trusted', cell.metadata)
MinRK
test notebook signing
r14863
def test_mark_cells_trusted(self):
MinRK
update nbformat.current to v4
r18579 cells = self.nb.cells
MinRK
test notebook signing
r14863 self.notary.mark_cells(self.nb, True)
for cell in cells:
MinRK
trust is stored in code_cell.metadata...
r18255 self.assertNotIn('trusted', cell)
MinRK
test notebook signing
r14863 if cell.cell_type == 'code':
MinRK
trust is stored in code_cell.metadata...
r18255 self.assertIn('trusted', cell.metadata)
self.assertTrue(cell.metadata.trusted)
MinRK
test notebook signing
r14863 else:
MinRK
trust is stored in code_cell.metadata...
r18255 self.assertNotIn('trusted', cell.metadata)
MinRK
test notebook signing
r14863
def test_check_cells(self):
nb = self.nb
self.notary.mark_cells(nb, True)
self.assertTrue(self.notary.check_cells(nb))
MinRK
update nbformat.current to v4
r18579 for cell in nb.cells:
MinRK
don't write cell.trusted to disk...
r15023 self.assertNotIn('trusted', cell)
MinRK
test notebook signing
r14863 self.notary.mark_cells(nb, False)
self.assertFalse(self.notary.check_cells(nb))
MinRK
update nbformat.current to v4
r18579 for cell in nb.cells:
MinRK
don't write cell.trusted to disk...
r15023 self.assertNotIn('trusted', cell)
MinRK
trust cells with no output...
r15269
def test_trust_no_output(self):
nb = self.nb
self.notary.mark_cells(nb, False)
MinRK
update nbformat.current to v4
r18579 for cell in nb.cells:
MinRK
trust cells with no output...
r15269 if cell.cell_type == 'code':
cell.outputs = []
self.assertTrue(self.notary.check_cells(nb))
MinRK
restore ability to sign v3 notebooks
r18612
def test_mark_cells_untrusted_v3(self):
nb = self.nb3
cells = nb.worksheets[0].cells
self.notary.mark_cells(nb, False)
for cell in cells:
self.assertNotIn('trusted', cell)
if cell.cell_type == 'code':
self.assertIn('trusted', cell.metadata)
self.assertFalse(cell.metadata.trusted)
else:
self.assertNotIn('trusted', cell.metadata)
def test_mark_cells_trusted_v3(self):
nb = self.nb3
cells = nb.worksheets[0].cells
self.notary.mark_cells(nb, True)
for cell in cells:
self.assertNotIn('trusted', cell)
if cell.cell_type == 'code':
self.assertIn('trusted', cell.metadata)
self.assertTrue(cell.metadata.trusted)
else:
self.assertNotIn('trusted', cell.metadata)
def test_check_cells_v3(self):
nb = self.nb3
cells = nb.worksheets[0].cells
self.notary.mark_cells(nb, True)
self.assertTrue(self.notary.check_cells(nb))
for cell in cells:
self.assertNotIn('trusted', cell)
self.notary.mark_cells(nb, False)
self.assertFalse(self.notary.check_cells(nb))
for cell in cells:
self.assertNotIn('trusted', cell)
MinRK
test notebook signing
r14863