annotate test/test_status.py @ 171:c0ea6cbb0fd2

Add "--debbuildopts -b" to "pbuilder build" command line to stop pbuilder from creating a source package. The .changes would otherwise contain references to that new source package instead of the one we passed to pbuilder. The checksums for the two source packages would be different so the .changes file would not match the source package that treepkg produces.
author Bernhard Herzog <bh@intevation.de>
date Mon, 23 Jun 2008 16:12:01 +0000
parents 39b2deea8481
children b19bf5895a55
rev   line source
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
1 # Copyright (C) 2007 by Intevation GmbH
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
2 # Authors:
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
3 # Bernhard Herzog <bh@intevation.de>
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
4 #
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
5 # This program is free software under the GPL (>=v2)
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
6 # Read the file COPYING coming with the software for details.
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
7
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
8 """Tests for the Status classes"""
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
9
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
10 import os
58
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
11 import stat
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
12 import unittest
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
13 from datetime import datetime
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
14
40
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
15 from treepkg.status import RevisionStatus, Status, EnumFieldDesc
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
16 from treepkg.util import ensure_directory, writefile
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
17
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
18
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
19
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
20 class TestStatus(unittest.TestCase):
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
21
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
22 def tempfilename(self):
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
23 tempdir = os.path.join(os.path.dirname(__file__), "temp")
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
24 ensure_directory(tempdir)
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
25 return os.path.join(tempdir, self.id())
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
26
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
27 def setUp(self):
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
28 self.filename = self.tempfilename()
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
29 if os.path.exists(self.filename):
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
30 os.remove(self.filename)
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
31
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
32 def test_status(self):
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
33 status = RevisionStatus(self.filename)
43
3c5ab7a65384 adapt status test cases to the enum fields
Bernhard Herzog <bh@intevation.de>
parents: 40
diff changeset
34 status.error()
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
35
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
36 otherstatus = RevisionStatus(self.filename)
43
3c5ab7a65384 adapt status test cases to the enum fields
Bernhard Herzog <bh@intevation.de>
parents: 40
diff changeset
37 self.assertEquals(otherstatus.status.name, "error")
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
38
58
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
39 def test_status_file_permissions(self):
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
40 status = RevisionStatus(self.filename)
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
41 status.error()
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
42
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
43 mode = os.stat(self.filename).st_mode
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
44 self.assertEquals(stat.S_IMODE(mode) & 0444, 0444)
39b2deea8481 make the status files are world readable
Bernhard Herzog <bh@intevation.de>
parents: 43
diff changeset
45
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
46 def test_getting_unknown_fields(self):
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
47 status = RevisionStatus(self.filename)
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
48 self.assertRaises(AttributeError, getattr, status, "unknown_field")
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
49
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
50 def test_setting_unknown_fields(self):
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
51 status = RevisionStatus(self.filename)
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
52 self.assertRaises(AttributeError,
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
53 setattr, status, "unknown_field", "some value")
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
54
32
b1235080e694 add more tests for status defaults
Bernhard Herzog <bh@intevation.de>
parents: 12
diff changeset
55 def test_default_values(self):
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
56 status = RevisionStatus(self.filename)
43
3c5ab7a65384 adapt status test cases to the enum fields
Bernhard Herzog <bh@intevation.de>
parents: 40
diff changeset
57 self.assertEquals(status.status.name, "unknown")
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
58 self.assertEquals(status.start, None)
32
b1235080e694 add more tests for status defaults
Bernhard Herzog <bh@intevation.de>
parents: 12
diff changeset
59 self.assertEquals(status.stop, None)
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
60
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
61 def test_date(self):
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
62 timestamp = datetime(2007, 3, 9, 17, 32, 55)
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
63 status = RevisionStatus(self.filename)
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
64 status.start = timestamp
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
65
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
66 otherstatus = RevisionStatus(self.filename)
12
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
67 self.assertEquals(otherstatus.start, timestamp)
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
68
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
69 def test_magic(self):
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
70 writefile(self.filename,
f9f15ee39ed7 New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
71 "Some other magic\nstart: 2007-03-09 17:32:55\n")
36
086c68ca51d2 rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents: 32
diff changeset
72 self.assertRaises(ValueError, RevisionStatus, self.filename)
40
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
73
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
74 def test_status_enum(self):
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
75
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
76 class TestStatus(Status):
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
77 status = EnumFieldDesc()
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
78 status.add("not_running", "Process is not running",
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
79 default=True)
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
80 status.add("running", "Process is running")
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
81 status.add("error", "An error occurred")
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
82
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
83 status = TestStatus(self.filename)
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
84 status.running()
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
85
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
86 otherstatus = TestStatus(self.filename)
c544903eeced Add real enums for status information
Bernhard Herzog <bh@intevation.de>
parents: 36
diff changeset
87 self.assertEquals(otherstatus.status.name, "running")
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)