Browse Source

Add test

pull/385/head
Bowen Ding 6 years ago
parent
commit
28f187f12f
  1. 2
      setup.cfg
  2. 1
      sigal/plugins/encrypt/encrypt.py
  3. BIN
      tests/sample/pictures/encryptTest/21.jpg
  4. BIN
      tests/sample/pictures/encryptTest/22.jpg
  5. 9
      tests/sample/sigal.conf.py
  6. 91
      tests/test_encrypt.py
  7. 1
      tox.ini

2
setup.cfg

@ -37,7 +37,7 @@ install_requires =
pilkit
[options.extras_require]
all = boto; brotli; feedgenerator; zopfli; cryptography; beautifulsoup4
all = boto; brotli; feedgenerator; zopfli; cryptography
tests = pytest; pytest-cov
docs = Sphinx; alabaster

1
sigal/plugins/encrypt/encrypt.py

@ -58,7 +58,6 @@ from sigal import signals
from sigal.utils import url_from_path, copy
from sigal.settings import get_thumb
from click import progressbar
from bs4 import BeautifulSoup
from .endec import encrypt, kdf_gen_key

BIN
tests/sample/pictures/encryptTest/21.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
tests/sample/pictures/encryptTest/22.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

9
tests/sample/sigal.conf.py

@ -17,16 +17,7 @@ plugins = [
'sigal.plugins.nomedia',
'sigal.plugins.watermark',
'sigal.plugins.zip_gallery',
'sigal.plugins.encrypt'
]
encrypt_options = {
'password': 'password',
'ask_password': True,
'gcm_tag': 'AuTheNTiCatIoNtAG',
'kdf_salt': 'saltysaltsweetysweet',
'kdf_iters': 10000,
'encrypt_symlinked_originals': False
}
copyright = '© An example copyright message'
adjust_options = {'color': 0.9, 'brightness': 1.0,
'contrast': 1.0, 'sharpness': 0.0}

91
tests/test_encrypt.py

@ -0,0 +1,91 @@
import os
import pickle
from io import BytesIO
import pytest
from sigal import init_plugins
from sigal.gallery import Gallery
from sigal.plugins.encrypt import endec
from sigal.plugins.encrypt.encrypt import cache_key
CURRENT_DIR = os.path.dirname(__file__)
@pytest.fixture()
def remove_cache(settings):
yield
cachepath = os.path.join(settings['destination'], ".encryptCache")
os.remove(cachepath)
def get_key_tag(settings):
options = settings["encrypt_options"]
key = endec.kdf_gen_key(
options["password"].encode("utf-8"),
options["kdf_salt"].encode("utf-8"),
options["kdf_iters"]
)
tag = options["gcm_tag"].encode("utf-8")
return (key, tag)
def test_encrypt(settings, tmpdir, disconnect_signals, remove_cache):
settings['destination'] = str(tmpdir)
if "sigal.plugins.encrypt" not in settings["plugins"]:
settings['plugins'] += ["sigal.plugins.encrypt"]
settings['encrypt_options'] = {
'password': 'password',
'ask_password': True,
'gcm_tag': 'AuTheNTiCatIoNtAG',
'kdf_salt': 'saltysaltsweetysweet',
'kdf_iters': 10000,
'encrypt_symlinked_originals': False
}
init_plugins(settings)
gal = Gallery(settings)
gal.build()
# check the encrypt cache exists
cachePath = os.path.join(settings["destination"], ".encryptCache")
assert os.path.isfile(cachePath)
encryptCache = None
with open(cachePath, "rb") as cacheFile:
encryptCache = pickle.load(cacheFile)
assert isinstance(encryptCache, dict)
testAlbum = gal.albums["encryptTest"]
key, tag = get_key_tag(settings)
for media in testAlbum:
# check if sizes are stored in cache
assert cache_key(media) in encryptCache
assert "size" in encryptCache[cache_key(media)]
assert "thumb_size" in encryptCache[cache_key(media)]
assert "encrypted" in encryptCache[cache_key(media)]
encryptedImages = [
media.dst_path,
media.thumb_path
]
if settings["keep_orig"]:
encryptedImages.append(os.path.join(settings["destination"],
media.path, media.big))
# check if images are encrypted by trying to decrypt
for image in encryptedImages:
with open(image, "rb") as infile:
with BytesIO() as outfile:
endec.decrypt(key, infile, outfile, tag)
# check static files have been copied
static = os.path.join(settings["destination"], 'static')
assert os.path.isfile(os.path.join(static, "decrypt.js"))
assert os.path.isfile(os.path.join(static, "keycheck.txt"))
assert os.path.isfile(os.path.join(settings["destination"], "sw.js"))
# check keycheck file
with open(os.path.join(settings["destination"],
'static', "keycheck.txt"), "rb") as infile:
with BytesIO() as outfile:
endec.decrypt(key, infile, outfile, tag)

1
tox.ini

@ -39,7 +39,6 @@ usedevelop = true
deps =
feedgenerator
cryptography
beautifulsoup4
commands =
sigal build -c tests/sample/sigal.conf.py
sigal serve tests/sample/_build

Loading…
Cancel
Save