summaryrefslogtreecommitdiff
path: root/test/integration/test-apt-ftparchive-src-cachedb
blob: adcca6217bc358e73ccab535f22f417169c40855 (plain)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#!/bin/sh
set -e

assert_correct_sources_file() {
    testequal "Package: bar
Architecture: all
Version: 1.0
Binary: bar
Format: 3.0 (native)
Directory: pool/main
Files:
 7b57dd065e51de5905288a5104d4bef5 406 bar_1.0.dsc
 d41d8cd98f00b204e9800998ecf8427e 0 bar_1.0.tar.gz
Package-List:
 bar deb admin extra
Checksums-Sha1:
 17a40b76715f393ab7fd6485c9392a02f1adf903 406 bar_1.0.dsc
 da39a3ee5e6b4b0d3255bfef95601890afd80709 0 bar_1.0.tar.gz
Checksums-Sha256:
 d9d7507f66a89258b6920aca47747d7a30e0e64b09ecabbf02b2efbdabf840a9 406 bar_1.0.dsc
 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 bar_1.0.tar.gz
Checksums-Sha512:
 ee0a9bfb6614159b45203fc29487d4f37387993ca0e6d6f27b80010498f3731d75753188ece307508ae9af0259bd11a6af15a1a38f0b87dbd5ea1273b7a7d53e 406 bar_1.0.dsc
 cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 bar_1.0.tar.gz

Package: foo
Architecture: all
Version: 1.0
Binary: foo
Format: 3.0 (native)
Directory: pool/main
Files:
 d144826e6f02831c1933e910c92cd7e0 171 foo_1.0.dsc
 d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz
Package-List: 
 foo deb admin extra
Checksums-Sha1:
 979306aa3ccff3d61bba062bb6977e2493c6f907 171 foo_1.0.dsc
 da39a3ee5e6b4b0d3255bfef95601890afd80709 0 foo_1.0.tar.gz
Checksums-Sha256:
 8c780af8b5a6d5b3c2e2f9518940beebea52ac6d6ad7b52c082dc925cfe5b532 171 foo_1.0.dsc
 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 foo_1.0.tar.gz
Checksums-Sha512:
 3da0240fd764657c2f3661b4d750578a9a99b0580591b133756379d48117ebda87a5ed2467f513200d6e7eaf51422cbe91c15720eef7fb4bba2cc8ff81ebc547 171 foo_1.0.dsc
 cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 foo_1.0.tar.gz
" aptsortpkgs ./aptarchive/dists/test/main/source/Sources
}

create_source_files() {
    NAME="$1"
    REQUEST_CLEARSIGN="$2"
    
    TARFILE="aptarchive/pool/main/${NAME}_1.0.tar.gz"
    DSC_FILE="aptarchive/pool/main/${NAME}_1.0.dsc"
    touch $TARFILE
    if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then
        printf -- "-----BEGIN PGP SIGNED MESSAGE-----\n\n" > $DSC_FILE
    fi
    cat >> $DSC_FILE << EOF
Format: 3.0 (native)
Source: $NAME
Binary: $NAME
Architecture: all
Version: 1.0
Package-List: 
 $NAME deb admin extra
Files: 
 $(md5sum $TARFILE|cut -f1 -d' ') $(stat --print="%s" $TARFILE) ${NAME}_1.0.tar.gz
EOF
    if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then
        cat >> $DSC_FILE <<EOF

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iEYEARECAAYFAk3k/VoACgkQliSD4VZixzQxlgCgpav7j68z48qNTDFuT9fLqwT5
DFwAoIXatJFENEC371bMKTkUKlwZxQEk
=iI9V
-----END PGP SIGNATURE-----
EOF
    fi
}

create_clearsigned_source_files() {
    NAME="$1"
    create_source_files "$NAME" "CLEARSIGN"
}

#
# main()
#
TESTDIR=$(readlink -f $(dirname $0))
. $TESTDIR/framework
setupenvironment
configarchitecture "i386"

msgtest 'Test apt-ftparchive source with missing hashes in .dsc'

mkdir -p aptarchive/pool/main
create_source_files foo
create_clearsigned_source_files bar

mkdir -p aptarchive/dists/test/main/i18n/
mkdir -p aptarchive/dists/test/main/source/

mkdir aptarchive-overrides
mkdir aptarchive-cache



# generate with --db option
(cd aptarchive && aptftparchive --db ./test.db sources pool/main/ \
    -o APT::FTPArchive::ShowCacheMisses=1  \
    > dists/test/main/source/Sources \
    2> stats-out.txt
    testequal " Misses in Cache: 2" grep Misses stats-out.txt
)
assert_correct_sources_file

# generate with --db option (again to ensure its in the cache)
(cd aptarchive && aptftparchive --db ./test.db sources pool/main/ \
    -o APT::FTPArchive::ShowCacheMisses=1  \
    > dists/test/main/source/Sources \
    2> stats-out.txt  
    testequal " Misses in Cache: 0" grep Misses stats-out.txt
)
assert_correct_sources_file



# get ready for the "apt-ftparchive generate" command
cat > apt-ftparchive.conf <<"EOF"
Dir {
  ArchiveDir "./aptarchive";
  OverrideDir "./aptarchive-overrides";
  CacheDir "./aptarchive-cache";
};

Default {
 Packages::Compress ". gzip bzip2";
 Contents::Compress ". gzip bzip2";
 LongDescription "false";
};

TreeDefault {
 BinCacheDB "packages-$(SECTION)-$(ARCH).db";
 SrcCacheDB "sources-$(SECTION).db";

 Directory  "pool/$(SECTION)";
 SrcDirectory "pool/$(SECTION)";

 Sources    "$(DIST)/$(SECTION)/source/Sources";
};

Tree "dists/test" {
  Sections "main";
  Architectures "source";

};
EOF

# generate (empty cachedb)
aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1 2> stats-out.txt
testequal " Misses in Cache: 2" grep Misses stats-out.txt
assert_correct_sources_file


# generate again out of the cache
rm -f ./aptarchive/dists/test/main/source/Sources
aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1  2> stats-out.txt
testequal " Misses in Cache: 0" grep Misses stats-out.txt
assert_correct_sources_file



# generate invalid files
mkdir aptarchive/pool/invalid
printf "meep" > aptarchive/pool/invalid/invalid_1.0.dsc
testequal "
E: Could not find a Source entry in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid
rm -f aptarchive/pool/invalid/invalid_1.0.dsc

dd if=/dev/zero of="aptarchive/pool/invalid/toobig_1.0.dsc" bs=1k count=129 2>/dev/null
testequal "
E: DSC file 'aptarchive/pool/invalid/toobig_1.0.dsc' is too large!" aptftparchive sources aptarchive/pool/invalid

# ensure clean works
rm -f aptarchive/pool/main/*
aptftparchive clean apt-ftparchive.conf -o Debug::APT::FTPArchive::Clean=1 > clean-out.txt 2>&1 
testequal "0	Number of unique keys in the tree" grep unique clean-out.txt
testequal "sources-main.db" grep sources-main.db clean-out.txt