~ubuntu-branches/ubuntu/lucid/dpkg/lucid

« back to all changes in this revision

Viewing changes to lib/dpkg/test/t-version.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2009-09-18 13:39:36 UTC
  • mfrom: (1.1.9 sid)
  • Revision ID: james.westby@ubuntu.com-20090918133936-dj8kjtc2qz3yqj7i
Tags: 1.15.4ubuntu1
* Resynchronise with Debian (LP: #427854). Remaining changes:
  Ubuntu-specific adjustments (probably):
  - Use i686 for lpia in cputable and triplettable.
  - Hack Dpkg::Arch to return i686 for lpia.
  - Move various Conflicts to Breaks, since upgrades from stable Ubuntu
    releases support Breaks.

  Miscellaneous bug fixes:
  - Avoid duplicate attempts to [f]close in obscure error situations which
    might conceiveably close wrong fds.
  - Revert change to stop outputting a newline after a postinst is run
    (Debian #392317).
  - Use the two-arg form of open in Dpkg::Control so that "-" can be
    passed to parse stdin as a control file (Debian #465340).

  Launchpad integration:
  - Add Launchpad-Bugs-Fixed handling in a few more places.

  Build options:
  - Point to https://wiki.ubuntu.com/DistCompilerFlags from
    dpkg-buildpackage(1).
  - Set default LDFLAGS to -Wl,-Bsymbolic-functions. (We've already taken
    this hit in Ubuntu.)
  - Implement handling of hardening-wrapper options via DEB_BUILD_OPTIONS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * libdpkg - Debian packaging suite library routines
 
3
 * t-version.c - test version handling
 
4
 *
 
5
 * Copyright © 2009 Guillem Jover <guillem@debian.org>
 
6
 *
 
7
 * This is free software; you can redistribute it and/or modify
 
8
 * it under the terms of the GNU General Public License as
 
9
 * published by the Free Software Foundation; either version 2,
 
10
 * or (at your option) any later version.
 
11
 *
 
12
 * This is distributed in the hope that it will be useful, but
 
13
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
 * GNU General Public License for more details.
 
16
 *
 
17
 * You should have received a copy of the GNU General Public
 
18
 * License along with dpkg; if not, write to the Free Software
 
19
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
20
 */
 
21
 
 
22
#include <dpkg/test.h>
 
23
#include <dpkg/dpkg-db.h>
 
24
 
 
25
#define version(epoch, version, revision) \
 
26
        (struct versionrevision) { (epoch), (version), (revision) }
 
27
 
 
28
static void
 
29
test_version_compare(void)
 
30
{
 
31
        struct versionrevision a, b;
 
32
 
 
33
        blankversion(&a);
 
34
        blankversion(&b);
 
35
        test_fail(epochsdiffer(&a, &b));
 
36
 
 
37
        a.epoch = 1;
 
38
        b.epoch = 2;
 
39
        test_pass(epochsdiffer(&a, &b));
 
40
 
 
41
        /* Test for version equality. */
 
42
        a = b = version(0, "0", "0");
 
43
        test_pass(versioncompare(&a, &b) == 0);
 
44
 
 
45
        a = version(0, "0", "00");
 
46
        b = version(0, "00", "0");
 
47
        test_pass(versioncompare(&a, &b) == 0);
 
48
 
 
49
        a = b = version(1, "2", "3");
 
50
        test_pass(versioncompare(&a, &b) == 0);
 
51
 
 
52
        /* Test for epoch difference. */
 
53
        a = version(0, "0", "0");
 
54
        b = version(1, "0", "0");
 
55
        test_pass(versioncompare(&a, &b) < 0);
 
56
        test_pass(versioncompare(&b, &a) > 0);
 
57
 
 
58
        /* FIXME: Complete. */
 
59
}
 
60
 
 
61
static void
 
62
test_version_parse(void)
 
63
{
 
64
        struct versionrevision a, b;
 
65
 
 
66
        /* Test 0 versions. */
 
67
        blankversion(&a);
 
68
        b = version(0, "0", "");
 
69
 
 
70
        test_pass(parseversion(&a, "0") == NULL);
 
71
        test_pass(versioncompare(&a, &b) == 0);
 
72
 
 
73
        test_pass(parseversion(&a, "0:0") == NULL);
 
74
        test_pass(versioncompare(&a, &b) == 0);
 
75
 
 
76
        test_pass(parseversion(&a, "0:0-") == NULL);
 
77
        test_pass(versioncompare(&a, &b) == 0);
 
78
 
 
79
        b = version(0, "0", "0");
 
80
        test_pass(parseversion(&a, "0:0-0") == NULL);
 
81
        test_pass(versioncompare(&a, &b) == 0);
 
82
 
 
83
        b = version(0, "0.0", "0.0");
 
84
        test_pass(parseversion(&a, "0:0.0-0.0") == NULL);
 
85
        test_pass(versioncompare(&a, &b) == 0);
 
86
 
 
87
        /* Test epoched versions. */
 
88
        b = version(1, "0", "");
 
89
        test_pass(parseversion(&a, "1:0") == NULL);
 
90
        test_pass(versioncompare(&a, &b) == 0);
 
91
 
 
92
        b = version(5, "1", "");
 
93
        test_pass(parseversion(&a, "5:1") == NULL);
 
94
        test_pass(versioncompare(&a, &b) == 0);
 
95
 
 
96
        /* Test multiple dashes. */
 
97
        b = version(0, "0-0", "0");
 
98
        test_pass(parseversion(&a, "0:0-0-0") == NULL);
 
99
        test_pass(versioncompare(&a, &b) == 0);
 
100
 
 
101
        b = version(0, "0-0-0", "0");
 
102
        test_pass(parseversion(&a, "0:0-0-0-0") == NULL);
 
103
        test_pass(versioncompare(&a, &b) == 0);
 
104
 
 
105
        /* Test multiple colons. */
 
106
        b = version(0, "0:0", "0");
 
107
        test_pass(parseversion(&a, "0:0:0-0") == NULL);
 
108
        test_pass(versioncompare(&a, &b) == 0);
 
109
 
 
110
        b = version(0, "0:0:0", "0");
 
111
        test_pass(parseversion(&a, "0:0:0:0-0") == NULL);
 
112
        test_pass(versioncompare(&a, &b) == 0);
 
113
 
 
114
        /* Test multiple dashes and colons. */
 
115
        b = version(0, "0:0-0", "0");
 
116
        test_pass(parseversion(&a, "0:0:0-0-0") == NULL);
 
117
        test_pass(versioncompare(&a, &b) == 0);
 
118
 
 
119
        b = version(0, "0-0:0", "0");
 
120
        test_pass(parseversion(&a, "0:0-0:0-0") == NULL);
 
121
        test_pass(versioncompare(&a, &b) == 0);
 
122
 
 
123
        /* Test valid characters in upstream version. */
 
124
        b = version(0, "azAZ09.-+~:", "0");
 
125
        test_pass(parseversion(&a, "0:azAZ09.-+~:-0") == NULL);
 
126
        test_pass(versioncompare(&a, &b) == 0);
 
127
 
 
128
        /* Test valid characters in revision. */
 
129
        b = version(0, "0", "azAZ09.+~");
 
130
        test_pass(parseversion(&a, "0:0-azAZ09.+~") == NULL);
 
131
        test_pass(versioncompare(&a, &b) == 0);
 
132
 
 
133
        /* Test invalid characters in epoch. */
 
134
        test_fail(parseversion(&a, "a:0-0") == NULL);
 
135
        test_fail(parseversion(&a, "A:0-0") == NULL);
 
136
 
 
137
        /* FIXME: parseversion() should validate input! */
 
138
#if 0
 
139
        /* Test invalid characters in upstream version. */
 
140
        test_fail(parseversion(&a, "0:!#@$%&/|\\<>()[]{};,=*^'-0") == NULL);
 
141
 
 
142
        /* Test invalid characters in revision. */
 
143
        test_fail(parseversion(&a, "0:0-!#@$%&/|\\<>()[]{};,=*^'") == NULL);
 
144
#endif
 
145
 
 
146
        /* FIXME: Complete. */
 
147
}
 
148
 
 
149
static void
 
150
test(void)
 
151
{
 
152
        test_version_compare();
 
153
        test_version_parse();
 
154
}
 
155