##// END OF EJS Templates
Better way of saving through CodeMirror...
Better way of saving through CodeMirror This should support whatever keyboard shortcuts are configured for the 'save' command.

File last commit:

r18612:418df74d
r19020:0e93c51c
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