summaryrefslogtreecommitdiffstats
path: root/test/integration/test-apt-ftparchive-src-cachedb
blob: 8bab1fd5eab5e9790222c46d6f5105af6b6ec0ad (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
#!/bin/sh
set -e

assert_correct_sources_file() {
    testsuccessequal "Package: bar
Format: 3.0 (native)
Binary: bar
Architecture: all
Version: 1.0
Directory: pool/main
Package-List:
 bar deb admin extra
Files:
 7b57dd065e51de5905288a5104d4bef5 406 bar_1.0.dsc
 d41d8cd98f00b204e9800998ecf8427e 0 bar_1.0.tar.gz
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
Format: 3.0 (native)
Binary: foo
Architecture: all
Version: 1.0
Directory: pool/main
Package-List: 
 foo deb admin extra
Files:
 d144826e6f02831c1933e910c92cd7e0 171 foo_1.0.dsc
 d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz
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 -o APT::SortPkgs::Source=true
}

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"
confighashes 'MD5' 'SHA1' 'SHA256' 'SHA512'

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

msgtest '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 && msgpass || msgfail
testsuccess grep Misses stats-out.txt
testfileequal '../rootdir/tmp/testsuccess.output' ' Misses in Cache: 2'
cd ..
assert_correct_sources_file

msgtest '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 && msgpass || msgfail
testsuccess grep Misses stats-out.txt
testfileequal '../rootdir/tmp/testsuccess.output' ' Misses in Cache: 0'
cd ..
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

msgtest 'generate (empty cachedb)'
testsuccess aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
cp rootdir/tmp/testsuccess.output stats-out.txt
testsuccess grep Misses stats-out.txt
testfileequal rootdir/tmp/testsuccess.output ' Misses in Cache: 2'
assert_correct_sources_file

msgtest 'generate again out of the cache'
rm -f ./aptarchive/dists/test/main/source/Sources
testsuccess aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
cp rootdir/tmp/testsuccess.output stats-out.txt
testsuccess grep Misses stats-out.txt
testfileequal rootdir/tmp/testsuccess.output ' Misses in Cache: 0'
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 record in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid
rm -f aptarchive/pool/invalid/invalid_1.0.dsc

printf "meep: yes" > 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

# ensure clean works
rm -f aptarchive/pool/main/*
testsuccess aptftparchive clean apt-ftparchive.conf -o Debug::APT::FTPArchive::Clean=1
cp rootdir/tmp/testsuccess.output clean-out.txt
testsuccess grep unique clean-out.txt
testfileequal 'rootdir/tmp/testsuccess.output' "0	Number of unique keys in the tree"
testsuccess grep sources-main.db clean-out.txt
testfileequal 'rootdir/tmp/testsuccess.output' "sources-main.db"