3 require_once
'lib/bagit_manifest.php';
4 require_once
'lib/bagit_utils.php';
14 $this->tmpdir = tmpdir();
17 $this->prefix = __DIR__ .
'/TestBag';
18 $src =
"{$this->prefix}/manifest-sha1.txt";
19 $dest =
"{$this->tmpdir}/manifest-sha1.txt";
22 $this->manifest =
new BagItManifest($dest, $this->prefix .
'/');
27 rrmdir($this->tmpdir);
32 $this->assertEquals($this->prefix .
'/', $this->manifest->pathPrefix);
37 $this->assertEquals(
'UTF-8', $this->manifest->fileEncoding);
40 "{$this->tmpdir}/manifest-sha1.txt",
44 $this->assertEquals(
'ISO-8859-1',
$manifest->fileEncoding);
50 "{$this->tmpdir}/manifest-sha1.txt",
51 $this->manifest->fileName
57 $this->assertInternalType(
'array', $this->manifest->data);
58 $this->assertEquals(7, count($this->manifest->data));
61 '547b21e9c710f562d448a6cd7d32f8257b04e561',
62 $this->manifest->data[
'data/imgs/109x109xcoins1-150x150.jpg']
65 'fba552acae866d24fb143fef0ddb24efc49b097a',
66 $this->manifest->data[
'data/imgs/109x109xprosody.png']
69 '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
70 $this->manifest->data[
'data/imgs/110x108xmetaphor1.png']
73 '4372383348c55775966bb1deeeb2b758b197e2a1',
74 $this->manifest->data[
'data/imgs/fellows1-150x150.png']
77 'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
78 $this->manifest->data[
'data/imgs/fibtriangle-110x110.jpg']
81 'aec60202453733a976433833c9d408a449f136b3',
82 $this->manifest->data[
'data/imgs/uvalib.png']
85 '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
86 $this->manifest->data[
'data/README.txt']
92 $this->assertEquals(
'sha1', $this->manifest->hashEncoding);
94 $md5 =
"{$this->tmpdir}/manifest-md5.txt";
97 $this->assertEquals(
'md5', $md5Manifest->hashEncoding);
103 "{$this->tmpdir}/manifest-sha1.txt",
104 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file1.txt\n" .
105 "abababababababababababababababababababab file2.txt\n" .
106 "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd file3.txt\n"
109 $data = $this->manifest->read();
111 $this->assertTrue($this->manifest->data === $data);
113 $this->assertEquals(3, count($data));
115 $keys = array_keys($data);
117 $this->assertEquals(
'file1.txt', $keys[0]);
118 $this->assertEquals(
'file2.txt', $keys[1]);
119 $this->assertEquals(
'file3.txt', $keys[2]);
124 $filename =
"{$this->tmpdir}/manifest-md5.txt";
127 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file-a.txt\n" .
128 "abababababababababababababababab file-b.txt\n" .
129 "abcdabcdabcdabcdabcdabcdabcdabcd file-c.txt\n"
132 $data = $this->manifest->read($filename);
134 $this->assertTrue($this->manifest->data === $data);
136 $this->assertEquals(3, count($data));
138 $keys = array_keys($data);
140 $this->assertEquals(
'file-a.txt', $keys[0]);
141 $this->assertEquals(
'file-b.txt', $keys[1]);
142 $this->assertEquals(
'file-c.txt', $keys[2]);
144 $this->assertEquals($filename, $this->manifest->fileName);
145 $this->assertEquals(
'md5', $this->manifest->getHashEncoding());
150 $this->manifest->clear();
152 $this->assertEquals(0, count($this->manifest->data));
153 $this->assertEquals(0, filesize($this->manifest->fileName));
159 $this->manifest->clear();
160 $this->assertEquals(0, count($this->manifest->data));
161 $this->assertEquals(0, filesize($this->manifest->fileName));
164 $this->manifest->update(rls(
"{$this->prefix}/data"));
165 $this->assertEquals(7, count($this->manifest->data));
168 '547b21e9c710f562d448a6cd7d32f8257b04e561',
169 $this->manifest->data[
'data/imgs/109x109xcoins1-150x150.jpg']
172 'fba552acae866d24fb143fef0ddb24efc49b097a',
173 $this->manifest->data[
'data/imgs/109x109xprosody.png']
176 '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
177 $this->manifest->data[
'data/imgs/110x108xmetaphor1.png']
180 '4372383348c55775966bb1deeeb2b758b197e2a1',
181 $this->manifest->data[
'data/imgs/fellows1-150x150.png']
184 'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
185 $this->manifest->data[
'data/imgs/fibtriangle-110x110.jpg']
188 'aec60202453733a976433833c9d408a449f136b3',
189 $this->manifest->data[
'data/imgs/uvalib.png']
192 '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
193 $this->manifest->data[
'data/README.txt']
199 $fileName =
"{$this->tmpdir}/testCalculateHash";
200 $data =
"This space intentionally left blank.\n";
201 file_put_contents($fileName, $data);
203 $hash = $this->manifest->calculateHash($fileName);
205 $this->assertEquals(
'a5c44171ca6618c6ee24c3f3f3019df8df09a2e0', $hash);
210 $this->manifest->data = array(
211 'file-1.txt' =>
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
212 'file-2.txt' =>
'abababababababababababababababababababab',
213 'file-3.txt' =>
'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
216 $this->manifest->write();
219 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file-1.txt\n" .
220 "abababababababababababababababababababab file-2.txt\n" .
221 "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd file-3.txt\n",
222 file_get_contents($this->manifest->fileName)
228 $this->manifest->data = array(
229 'file-1.txt' =>
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
230 'file-2.txt' =>
'abababababababababababababababababababab',
231 'file-3.txt' =>
'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
234 $fileName =
"{$this->tmpdir}/writetest-sha1.txt";
235 $this->manifest->write($fileName);
238 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file-1.txt\n" .
239 "abababababababababababababababababababab file-2.txt\n" .
240 "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd file-3.txt\n",
241 file_get_contents($fileName)
243 $this->assertEquals($fileName, $this->manifest->fileName);
249 '547b21e9c710f562d448a6cd7d32f8257b04e561',
250 $this->manifest->getHash(
'data/imgs/109x109xcoins1-150x150.jpg')
253 'fba552acae866d24fb143fef0ddb24efc49b097a',
254 $this->manifest->getHash(
'data/imgs/109x109xprosody.png')
257 '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
258 $this->manifest->getHash(
'data/imgs/110x108xmetaphor1.png')
261 '4372383348c55775966bb1deeeb2b758b197e2a1',
262 $this->manifest->getHash(
'data/imgs/fellows1-150x150.png')
265 'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
266 $this->manifest->getHash(
'data/imgs/fibtriangle-110x110.jpg')
269 'aec60202453733a976433833c9d408a449f136b3',
270 $this->manifest->getHash(
'data/imgs/uvalib.png')
273 '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
274 $this->manifest->getHash(
'data/README.txt')
280 $this->assertNull($this->manifest->getHash(
'data/missing'));
288 '547b21e9c710f562d448a6cd7d32f8257b04e561',
289 $this->manifest->getHash(
"$pre/data/imgs/109x109xcoins1-150x150.jpg")
292 'fba552acae866d24fb143fef0ddb24efc49b097a',
293 $this->manifest->getHash(
"$pre/data/imgs/109x109xprosody.png")
296 '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
297 $this->manifest->getHash(
"$pre/data/imgs/110x108xmetaphor1.png")
300 '4372383348c55775966bb1deeeb2b758b197e2a1',
301 $this->manifest->getHash(
"$pre/data/imgs/fellows1-150x150.png")
304 'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
305 $this->manifest->getHash(
"$pre/data/imgs/fibtriangle-110x110.jpg")
308 'aec60202453733a976433833c9d408a449f136b3',
309 $this->manifest->getHash(
"$pre/data/imgs/uvalib.png")
312 '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
313 $this->manifest->getHash(
"$pre/data/README.txt")
319 $data = $this->manifest->getData();
321 $this->assertInternalType(
'array', $data);
322 $this->assertEquals(7, count($data));
325 '547b21e9c710f562d448a6cd7d32f8257b04e561',
326 $data[
'data/imgs/109x109xcoins1-150x150.jpg']
329 'fba552acae866d24fb143fef0ddb24efc49b097a',
330 $data[
'data/imgs/109x109xprosody.png']
333 '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
334 $data[
'data/imgs/110x108xmetaphor1.png']
337 '4372383348c55775966bb1deeeb2b758b197e2a1',
338 $data[
'data/imgs/fellows1-150x150.png']
341 'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
342 $data[
'data/imgs/fibtriangle-110x110.jpg']
345 'aec60202453733a976433833c9d408a449f136b3',
346 $data[
'data/imgs/uvalib.png']
349 '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
350 $data[
'data/README.txt']
357 "{$this->tmpdir}/manifest-sha1.txt",
358 $this->manifest->getFileName()
364 $this->assertEquals(
'UTF-8', $this->manifest->getFileEncoding());
367 "{$this->tmpdir}/manifest-sha1.txt",
371 $this->assertEquals(
'ISO-8859-1',
$manifest->getFileEncoding());
376 $this->manifest->setFileEncoding(
'ISO-8859-1');
377 $this->assertEquals(
'ISO-8859-1', $this->manifest->fileEncoding);
382 $this->assertEquals(
'sha1', $this->manifest->getHashEncoding());
384 $md5 =
"{$this->tmpdir}/manifest-md5.txt";
387 $this->assertEquals(
'md5', $md5Manifest->getHashEncoding());
390 private function _testSetHashEncoding($hashEncoding) {
391 $fileName = $this->manifest->fileName;
393 $this->manifest->setHashEncoding($hashEncoding);
395 $this->assertEquals($hashEncoding, $this->manifest->getHashEncoding());
397 "{$this->tmpdir}/manifest-{$hashEncoding}.txt",
398 $this->manifest->fileName
401 if ($fileName != $this->manifest->fileName) {
402 $this->assertFalse(file_exists($fileName));
404 $this->assertFileExists($this->manifest->fileName);
409 $this->_testSetHashEncoding(
'md5');
414 $this->_testSetHashEncoding(
'sha1');
419 $this->_testSetHashEncoding(
'err');
425 $this->assertTrue($this->manifest->validate($errors));
426 $this->assertEquals(0, count($errors));
432 '/tmp/probably/does/not/exist/missing.txt'
436 $this->assertFalse(
$manifest->validate($errors));
437 $this->assertTrue(seenAtKey($errors, 0,
'missing.txt'));
438 $this->assertTrue(seenAtKey($errors, 1,
'missing.txt does not exist.'));
443 $this->manifest->data[
'data/missing.txt']
444 =
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
447 $this->assertFalse($this->manifest->validate($errors));
449 $this->assertTrue(seenAtKey($errors, 0,
'data/missing.txt'));
450 $this->assertTrue(seenAtKey($errors, 1,
'Missing data file.'));
459 mkdir($tmp .
'/data');
461 "$tmp/manifest-sha1.txt",
462 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa data/missing.txt\n"
465 touch(
"$tmp/data/missing.txt");
469 $this->assertFalse(
$manifest->validate($errors));
471 $this->assertTrue(seenAtKey($errors, 0,
'data/missing.txt'));
472 $this->assertTrue(seenAtKey($errors, 1,
'Checksum mismatch.'));