# Part of the A-A-P recipe executive: Testing of :child # Copyright (C) 2002-2003 Stichting NLnet Labs # Permission to copy and use this file is specified in the file COPYING. # If this file is missing you can find it here: http://www.a-a-p.org/COPYING import sys, os, stat, shutil, string def runaap(args): return os.system("%s ..%sMain.py %s" % (sys.argv[1], os.sep, args)) os.chdir("rectest") # Create two recipes, where the first one uses the other one with ":child". # Check that the right files are created. # Then run it again and check that the signatures were remembered. testdir = "rectest" rec1 = "rectest.aap" rec2 = testdir + "/rectest.aap" aapout = "rectest.aap.out" inp = "rectest.in" out = "rectest.out" inp2 = testdir + "/rectest.in" out2 = testdir + "/rectest.out" inp_contents = "input file one\n" inp_contents_a = "alternate input file one\n" inp2_contents = "input file two\n" inp2_contents_a = "alternate input file two\n" def cleanup(): for n in [ rec1, aapout, inp, out ]: try: os.remove(n) except: pass try: shutil.rmtree(testdir) except: pass cleanup() os.mkdir(testdir) f = open(rec1, "w") f.write(""" all: %s %s %s: %s :copy {force} $source $target :child %s """ % (out, out2, out, inp, rec2)) f.close() f = open(rec2, "w") f.write(""" %s: %s :copy {force} $source $target """ % (out, inp)) f.close() f = open(inp, "w") f.write(inp_contents) f.close() f = open(inp2, "w") f.write(inp2_contents) f.close() def check_contents(fname, expected): f = open(fname) actual = f.read() f.close() if actual != expected: print ('File contents wrong for "%s": "%s" instead of "%s"' % (fname, actual, expected)) def check_result(msg, copies, out_contents, out2_contents): """Check the messages for the two copy commands.""" failed = 0 # Count the number of copy commands executed. n = 0 i = 0 while 1: i = string.find(msg, " Copied ", i) if i < 0: break n = n + 1 i = i + 5 if n != copies: if copies == 0: print "Aap did copy a file unexpectedly" elif n == 0: print "Aap did not copy any file" else: print "Aap copied %d file(s), expected %d" % (n, copies) print msg return 1 # Check the output files being correctly created or changed execpectedly. check_contents(out, out_contents) check_contents(out2, out2_contents) return failed # The first time running should result in two files being copied. res = runaap("-f %s > %s" % (rec1, aapout)) failed = res + check_result(open(aapout).read(), 2, inp_contents, inp2_contents) if not failed: # The second time running should result in no file copy at all. res = runaap("-f %s > %s" % (rec1, aapout)) failed = res + check_result(open(aapout).read(), 0, inp_contents, inp2_contents) if not failed: # Change one input file, only one file should be copied. f = open(inp, "w") f.write(inp_contents_a) f.close() res = runaap("-f %s > %s" % (rec1, aapout)) failed = res + check_result(open(aapout).read(), 1, inp_contents_a, inp2_contents) if not failed: # Change another input file, only one file should be copied. f = open(inp2, "w") f.write(inp2_contents_a) f.close() res = runaap("-f %s > %s" % (rec1, aapout)) failed = res + check_result(open(aapout).read(), 1, inp_contents_a, inp2_contents_a) cleanup() sys.exit(failed) # vim: set sw=4 et sts=4 tw=79 fo+=l: