update testing tools to wrangle MD5s

add some logic for generating, reading and comparing MD5s since the proper
code base is no longer using statinfo, but rather content checksums to
determine whether a rebuild is necessary
This commit is contained in:
Martin A. Brown 2016-04-02 10:52:39 -07:00
parent 45a0d2120c
commit 4bfcda8602
1 changed files with 29 additions and 12 deletions

View File

@ -13,6 +13,7 @@ from tempfile import NamedTemporaryFile as ntf
import tldp.config
from tldp.outputs import OutputNamingConvention
from tldp.utils import writemd5sums, md5file
# -- short names
#
@ -111,18 +112,14 @@ class TestOutputDirSkeleton(OutputNamingConvention):
if not os.path.isdir(self.dirname):
os.mkdir(self.dirname)
def create_expected_docs(self, func=None):
def create_md5sum_file(self, md5s):
writemd5sums(self.MD5SUMS, md5s)
def create_expected_docs(self):
for name in self.expected:
fname = getattr(self, name)
with open(fname, 'w'):
pass
if func:
func(fname)
def create_stale_expected_docs(self):
def thirtysecondsago(fname):
os.utime(fname, (time.time() - 30, time.time() - 30))
self.create_expected_docs(func=thirtysecondsago)
class TestSourceDocSkeleton(object):
@ -135,6 +132,18 @@ class TestSourceDocSkeleton(object):
self.dirname = dirname
if not os.path.isdir(self.dirname):
os.mkdir(self.dirname)
self.md5s = dict()
def create_stale(self, fname):
l = list(self.md5s[fname])
random.shuffle(l)
if l == self.md5s[fname]:
self.invalidate_checksum(fname)
self.md5s[fname] = ''.join(l)
@property
def md5sums(self):
return self.md5s
def addsourcefile(self, filename, content):
fname = os.path.join(self.dirname, filename)
@ -143,6 +152,8 @@ class TestSourceDocSkeleton(object):
else:
with codecs.open(fname, 'w', encoding='utf-8') as f:
f.write(content)
relpath = os.path.relpath(fname, start=self.dirname)
self.md5s[relpath] = md5file(fname)
class TestInventoryBase(unittest.TestCase):
@ -177,19 +188,24 @@ class TestInventoryBase(unittest.TestCase):
def add_stale(self, stem, ex):
c = self.config
mysource = TestSourceDocSkeleton(c.sourcedir)
fname = stem + ex.ext
mysource.addsourcefile(fname, ex.filename)
mysource.create_stale(fname)
myoutput = TestOutputDirSkeleton(os.path.join(c.pubdir, stem), stem)
myoutput.mkdir()
myoutput.create_stale_expected_docs()
mysource = TestSourceDocSkeleton(c.sourcedir)
mysource.addsourcefile(stem + ex.ext, ex.filename)
myoutput.create_expected_docs()
myoutput.create_md5sum_file(mysource.md5sums)
def add_broken(self, stem, ex):
c = self.config
mysource = TestSourceDocSkeleton(c.sourcedir)
mysource.addsourcefile(stem + ex.ext, ex.filename)
fname = stem + ex.ext
mysource.addsourcefile(fname, ex.filename)
myoutput = TestOutputDirSkeleton(os.path.join(c.pubdir, stem), stem)
myoutput.mkdir()
myoutput.create_expected_docs()
myoutput.create_md5sum_file(mysource.md5sums)
prop = random.choice(myoutput.expected)
fname = getattr(myoutput, prop, None)
assert fname is not None
@ -224,6 +240,7 @@ class TestInventoryBase(unittest.TestCase):
myoutput = TestOutputDirSkeleton(os.path.join(c.pubdir, stem), stem)
myoutput.mkdir()
myoutput.create_expected_docs()
myoutput.create_md5sum_file(mysource.md5sums)
def add_docbooksgml_support_to_config(self):
c = self.config