diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2012-06-14 13:03:04 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2012-06-14 13:03:04 +0000 |
commit | f7790e2ec52b3cc3f8b58f3e447da37361ff9580 (patch) | |
tree | 91da03d0a6c70a7ccccc80c9d990b95dd1d9f54e | |
parent | 9101b1839abe305545f487b10939b498e1c09280 (diff) | |
download | morph-f7790e2ec52b3cc3f8b58f3e447da37361ff9580.tar.gz |
tests: verify overlaps are written to the cache
This adds a new script called list-overlaps, which when given a json
dump of the overlap can be used to query what is overlapping
The tests use this script to check that the overlaps are detected
-rwxr-xr-x | scripts/list-overlaps | 44 | ||||
-rwxr-xr-x | tests/stratum-overlap-writes-overlap.script | 34 | ||||
l--------- | tests/stratum-overlap-writes-overlap.setup | 1 | ||||
-rw-r--r-- | tests/stratum-overlap-writes-overlap.stdout | 4 |
4 files changed, 83 insertions, 0 deletions
diff --git a/scripts/list-overlaps b/scripts/list-overlaps new file mode 100755 index 00000000..5bd96832 --- /dev/null +++ b/scripts/list-overlaps @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# +# Copyright (C) 2011-2012 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# This is a program to convert the json dump of the overlaps between artifacts +# in a format more suited to shell programs, or human reading + +import json + +import cliapp + +class ListOverlaps(cliapp.Application): + + @staticmethod + def _load_overlap(filename): + data = json.load(open(filename)) + overlaps = dict((frozenset(pair[0]), set(pair[1])) for pair in data) + return overlaps + + def cmd_groups(self, args): + overlaps = ListOverlaps._load_overlap(args[0]) + for group in overlaps: + print(' '.join(sorted(group))) + + def cmd_list_files(self, args): + overlaps = self._load_overlap(args[0]) + group = frozenset(args[1:]) + for filename in overlaps[group]: + print filename + +ListOverlaps().run() diff --git a/tests/stratum-overlap-writes-overlap.script b/tests/stratum-overlap-writes-overlap.script new file mode 100755 index 00000000..28d3d044 --- /dev/null +++ b/tests/stratum-overlap-writes-overlap.script @@ -0,0 +1,34 @@ +#!/bin/sh +# +# If a stratum has multiple chunks that have the same files in them, +# then the overlaps must be written to the cache +# +# Copyright (C) 2011, 2012 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +set -eu + +cache="$DATADIR/cache/artifacts" + + +"$SRCDIR/scripts/test-morph" \ + build test:morphs-repo overlap overlap-stratum.morph +"$SRCDIR/scripts/list-overlaps" groups \ + "$cache"/*.stratum.overlap-stratum.overlaps | +while IFS='\n' read overlaps; do + echo $overlaps + "$SRCDIR/scripts/list-overlaps" list-files \ + "$cache"/*.stratum.overlap-stratum.overlaps $overlaps +done diff --git a/tests/stratum-overlap-writes-overlap.setup b/tests/stratum-overlap-writes-overlap.setup new file mode 120000 index 00000000..255e9a74 --- /dev/null +++ b/tests/stratum-overlap-writes-overlap.setup @@ -0,0 +1 @@ +stratum-overlap-warns.setup
\ No newline at end of file diff --git a/tests/stratum-overlap-writes-overlap.stdout b/tests/stratum-overlap-writes-overlap.stdout new file mode 100644 index 00000000..40485659 --- /dev/null +++ b/tests/stratum-overlap-writes-overlap.stdout @@ -0,0 +1,4 @@ +overlap-foo-baz overlap-foobar overlap-fooqux +bin/foo +overlap-foo-baz overlap-foobar +bin/bar |