File: test004.py

package info (click to toggle)
aap 1.072-1.1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 4,976 kB
  • ctags: 2,160
  • sloc: python: 15,113; makefile: 62; sh: 13
file content (140 lines) | stat: -rw-r--r-- 3,507 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# 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: