Open Journal Systems  3.3.0
testmanifest.php
1 <?php
2 
3 require_once 'lib/bagit_manifest.php';
4 require_once 'lib/bagit_utils.php';
5 
6 class BagItManifestTest extends PHPUnit_Framework_TestCase
7 {
8  var $tmpdir;
9  var $prefix;
10  var $manifest;
11 
12  public function setUp()
13  {
14  $this->tmpdir = tmpdir();
15  mkdir($this->tmpdir);
16 
17  $this->prefix = __DIR__ . '/TestBag';
18  $src = "{$this->prefix}/manifest-sha1.txt";
19  $dest = "{$this->tmpdir}/manifest-sha1.txt";
20 
21  copy($src, $dest);
22  $this->manifest = new BagItManifest($dest, $this->prefix . '/');
23  }
24 
25  public function tearDown()
26  {
27  rrmdir($this->tmpdir);
28  }
29 
30  public function testPathPrefix()
31  {
32  $this->assertEquals($this->prefix . '/', $this->manifest->pathPrefix);
33  }
34 
35  public function testFileEncoding()
36  {
37  $this->assertEquals('UTF-8', $this->manifest->fileEncoding);
38 
40  "{$this->tmpdir}/manifest-sha1.txt",
41  $this->prefix,
42  'ISO-8859-1'
43  );
44  $this->assertEquals('ISO-8859-1', $manifest->fileEncoding);
45  }
46 
47  public function testFileName()
48  {
49  $this->assertEquals(
50  "{$this->tmpdir}/manifest-sha1.txt",
51  $this->manifest->fileName
52  );
53  }
54 
55  public function testData()
56  {
57  $this->assertInternalType('array', $this->manifest->data);
58  $this->assertEquals(7, count($this->manifest->data));
59 
60  $this->assertEquals(
61  '547b21e9c710f562d448a6cd7d32f8257b04e561',
62  $this->manifest->data['data/imgs/109x109xcoins1-150x150.jpg']
63  );
64  $this->assertEquals(
65  'fba552acae866d24fb143fef0ddb24efc49b097a',
66  $this->manifest->data['data/imgs/109x109xprosody.png']
67  );
68  $this->assertEquals(
69  '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
70  $this->manifest->data['data/imgs/110x108xmetaphor1.png']
71  );
72  $this->assertEquals(
73  '4372383348c55775966bb1deeeb2b758b197e2a1',
74  $this->manifest->data['data/imgs/fellows1-150x150.png']
75  );
76  $this->assertEquals(
77  'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
78  $this->manifest->data['data/imgs/fibtriangle-110x110.jpg']
79  );
80  $this->assertEquals(
81  'aec60202453733a976433833c9d408a449f136b3',
82  $this->manifest->data['data/imgs/uvalib.png']
83  );
84  $this->assertEquals(
85  '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
86  $this->manifest->data['data/README.txt']
87  );
88  }
89 
90  public function testHashEncoding()
91  {
92  $this->assertEquals('sha1', $this->manifest->hashEncoding);
93 
94  $md5 = "{$this->tmpdir}/manifest-md5.txt";
95  touch($md5);
96  $md5Manifest = new BagItManifest($md5, $this->prefix);
97  $this->assertEquals('md5', $md5Manifest->hashEncoding);
98  }
99 
100  public function testRead()
101  {
102  file_put_contents(
103  "{$this->tmpdir}/manifest-sha1.txt",
104  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file1.txt\n" .
105  "abababababababababababababababababababab file2.txt\n" .
106  "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd file3.txt\n"
107  );
108 
109  $data = $this->manifest->read();
110 
111  $this->assertTrue($this->manifest->data === $data);
112 
113  $this->assertEquals(3, count($data));
114 
115  $keys = array_keys($data);
116  sort($keys);
117  $this->assertEquals('file1.txt', $keys[0]);
118  $this->assertEquals('file2.txt', $keys[1]);
119  $this->assertEquals('file3.txt', $keys[2]);
120  }
121 
122  public function testReadFileName()
123  {
124  $filename = "{$this->tmpdir}/manifest-md5.txt";
125  file_put_contents(
126  $filename,
127  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file-a.txt\n" .
128  "abababababababababababababababab file-b.txt\n" .
129  "abcdabcdabcdabcdabcdabcdabcdabcd file-c.txt\n"
130  );
131 
132  $data = $this->manifest->read($filename);
133 
134  $this->assertTrue($this->manifest->data === $data);
135 
136  $this->assertEquals(3, count($data));
137 
138  $keys = array_keys($data);
139  sort($keys);
140  $this->assertEquals('file-a.txt', $keys[0]);
141  $this->assertEquals('file-b.txt', $keys[1]);
142  $this->assertEquals('file-c.txt', $keys[2]);
143 
144  $this->assertEquals($filename, $this->manifest->fileName);
145  $this->assertEquals('md5', $this->manifest->getHashEncoding());
146  }
147 
148  public function testClear()
149  {
150  $this->manifest->clear();
151 
152  $this->assertEquals(0, count($this->manifest->data));
153  $this->assertEquals(0, filesize($this->manifest->fileName));
154  }
155 
156  public function testUpdate()
157  {
158  // First, clear it out and verify it.
159  $this->manifest->clear();
160  $this->assertEquals(0, count($this->manifest->data));
161  $this->assertEquals(0, filesize($this->manifest->fileName));
162 
163  // Now, regenerate it and test.
164  $this->manifest->update(rls("{$this->prefix}/data"));
165  $this->assertEquals(7, count($this->manifest->data));
166 
167  $this->assertEquals(
168  '547b21e9c710f562d448a6cd7d32f8257b04e561',
169  $this->manifest->data['data/imgs/109x109xcoins1-150x150.jpg']
170  );
171  $this->assertEquals(
172  'fba552acae866d24fb143fef0ddb24efc49b097a',
173  $this->manifest->data['data/imgs/109x109xprosody.png']
174  );
175  $this->assertEquals(
176  '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
177  $this->manifest->data['data/imgs/110x108xmetaphor1.png']
178  );
179  $this->assertEquals(
180  '4372383348c55775966bb1deeeb2b758b197e2a1',
181  $this->manifest->data['data/imgs/fellows1-150x150.png']
182  );
183  $this->assertEquals(
184  'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
185  $this->manifest->data['data/imgs/fibtriangle-110x110.jpg']
186  );
187  $this->assertEquals(
188  'aec60202453733a976433833c9d408a449f136b3',
189  $this->manifest->data['data/imgs/uvalib.png']
190  );
191  $this->assertEquals(
192  '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
193  $this->manifest->data['data/README.txt']
194  );
195  }
196 
197  public function testCalculateHash()
198  {
199  $fileName = "{$this->tmpdir}/testCalculateHash";
200  $data = "This space intentionally left blank.\n";
201  file_put_contents($fileName, $data);
202 
203  $hash = $this->manifest->calculateHash($fileName);
204 
205  $this->assertEquals('a5c44171ca6618c6ee24c3f3f3019df8df09a2e0', $hash);
206  }
207 
208  public function testWrite()
209  {
210  $this->manifest->data = array(
211  'file-1.txt' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
212  'file-2.txt' => 'abababababababababababababababababababab',
213  'file-3.txt' => 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
214  );
215 
216  $this->manifest->write();
217 
218  $this->assertEquals(
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)
223  );
224  }
225 
226  public function testWriteFileName()
227  {
228  $this->manifest->data = array(
229  'file-1.txt' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
230  'file-2.txt' => 'abababababababababababababababababababab',
231  'file-3.txt' => 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
232  );
233 
234  $fileName = "{$this->tmpdir}/writetest-sha1.txt";
235  $this->manifest->write($fileName);
236 
237  $this->assertEquals(
238  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file-1.txt\n" .
239  "abababababababababababababababababababab file-2.txt\n" .
240  "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd file-3.txt\n",
241  file_get_contents($fileName)
242  );
243  $this->assertEquals($fileName, $this->manifest->fileName);
244  }
245 
246  public function testGetHash()
247  {
248  $this->assertEquals(
249  '547b21e9c710f562d448a6cd7d32f8257b04e561',
250  $this->manifest->getHash('data/imgs/109x109xcoins1-150x150.jpg')
251  );
252  $this->assertEquals(
253  'fba552acae866d24fb143fef0ddb24efc49b097a',
254  $this->manifest->getHash('data/imgs/109x109xprosody.png')
255  );
256  $this->assertEquals(
257  '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
258  $this->manifest->getHash('data/imgs/110x108xmetaphor1.png')
259  );
260  $this->assertEquals(
261  '4372383348c55775966bb1deeeb2b758b197e2a1',
262  $this->manifest->getHash('data/imgs/fellows1-150x150.png')
263  );
264  $this->assertEquals(
265  'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
266  $this->manifest->getHash('data/imgs/fibtriangle-110x110.jpg')
267  );
268  $this->assertEquals(
269  'aec60202453733a976433833c9d408a449f136b3',
270  $this->manifest->getHash('data/imgs/uvalib.png')
271  );
272  $this->assertEquals(
273  '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
274  $this->manifest->getHash('data/README.txt')
275  );
276  }
277 
278  public function testGetHashMissing()
279  {
280  $this->assertNull($this->manifest->getHash('data/missing'));
281  }
282 
283  public function testGetHashAbsolute()
284  {
285  $pre = $this->prefix;
286 
287  $this->assertEquals(
288  '547b21e9c710f562d448a6cd7d32f8257b04e561',
289  $this->manifest->getHash("$pre/data/imgs/109x109xcoins1-150x150.jpg")
290  );
291  $this->assertEquals(
292  'fba552acae866d24fb143fef0ddb24efc49b097a',
293  $this->manifest->getHash("$pre/data/imgs/109x109xprosody.png")
294  );
295  $this->assertEquals(
296  '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
297  $this->manifest->getHash("$pre/data/imgs/110x108xmetaphor1.png")
298  );
299  $this->assertEquals(
300  '4372383348c55775966bb1deeeb2b758b197e2a1',
301  $this->manifest->getHash("$pre/data/imgs/fellows1-150x150.png")
302  );
303  $this->assertEquals(
304  'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
305  $this->manifest->getHash("$pre/data/imgs/fibtriangle-110x110.jpg")
306  );
307  $this->assertEquals(
308  'aec60202453733a976433833c9d408a449f136b3',
309  $this->manifest->getHash("$pre/data/imgs/uvalib.png")
310  );
311  $this->assertEquals(
312  '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
313  $this->manifest->getHash("$pre/data/README.txt")
314  );
315  }
316 
317  public function testGetData()
318  {
319  $data = $this->manifest->getData();
320 
321  $this->assertInternalType('array', $data);
322  $this->assertEquals(7, count($data));
323 
324  $this->assertEquals(
325  '547b21e9c710f562d448a6cd7d32f8257b04e561',
326  $data['data/imgs/109x109xcoins1-150x150.jpg']
327  );
328  $this->assertEquals(
329  'fba552acae866d24fb143fef0ddb24efc49b097a',
330  $data['data/imgs/109x109xprosody.png']
331  );
332  $this->assertEquals(
333  '4beed314513ad81e1f5fad42672a3b1bd3a018ea',
334  $data['data/imgs/110x108xmetaphor1.png']
335  );
336  $this->assertEquals(
337  '4372383348c55775966bb1deeeb2b758b197e2a1',
338  $data['data/imgs/fellows1-150x150.png']
339  );
340  $this->assertEquals(
341  'b8593e2b3c2fa3756d2b206a90c7259967ff6650',
342  $data['data/imgs/fibtriangle-110x110.jpg']
343  );
344  $this->assertEquals(
345  'aec60202453733a976433833c9d408a449f136b3',
346  $data['data/imgs/uvalib.png']
347  );
348  $this->assertEquals(
349  '0de174b95ebacc2d91b0839cb2874b2e8f604b98',
350  $data['data/README.txt']
351  );
352  }
353 
354  public function testGetFileName()
355  {
356  $this->assertEquals(
357  "{$this->tmpdir}/manifest-sha1.txt",
358  $this->manifest->getFileName()
359  );
360  }
361 
362  public function testGetFileEncoding()
363  {
364  $this->assertEquals('UTF-8', $this->manifest->getFileEncoding());
365 
366  $manifest = new BagItManifest(
367  "{$this->tmpdir}/manifest-sha1.txt",
368  $this->prefix,
369  'ISO-8859-1'
370  );
371  $this->assertEquals('ISO-8859-1', $manifest->getFileEncoding());
372  }
373 
374  public function testSetFileEncoding()
375  {
376  $this->manifest->setFileEncoding('ISO-8859-1');
377  $this->assertEquals('ISO-8859-1', $this->manifest->fileEncoding);
378  }
379 
380  public function testGetHashEncoding()
381  {
382  $this->assertEquals('sha1', $this->manifest->getHashEncoding());
383 
384  $md5 = "{$this->tmpdir}/manifest-md5.txt";
385  touch($md5);
386  $md5Manifest = new BagItManifest($md5, $this->prefix);
387  $this->assertEquals('md5', $md5Manifest->getHashEncoding());
388  }
389 
390  private function _testSetHashEncoding($hashEncoding) {
391  $fileName = $this->manifest->fileName;
392 
393  $this->manifest->setHashEncoding($hashEncoding);
394 
395  $this->assertEquals($hashEncoding, $this->manifest->getHashEncoding());
396  $this->assertEquals(
397  "{$this->tmpdir}/manifest-{$hashEncoding}.txt",
398  $this->manifest->fileName
399  );
400 
401  if ($fileName != $this->manifest->fileName) {
402  $this->assertFalse(file_exists($fileName));
403  }
404  $this->assertFileExists($this->manifest->fileName);
405  }
406 
407  public function testSetHashEncodingMD5()
408  {
409  $this->_testSetHashEncoding('md5');
410  }
411 
412  public function testSetHashEncodingSHA1()
413  {
414  $this->_testSetHashEncoding('sha1');
415  }
416 
417  public function testSetHashEncodingERR()
418  {
419  $this->_testSetHashEncoding('err');
420  }
421 
422  public function testValidateOK()
423  {
424  $errors = array();
425  $this->assertTrue($this->manifest->validate($errors));
426  $this->assertEquals(0, count($errors));
427  }
428 
429  public function testValidateMissingManifest()
430  {
431  $manifest = new BagItManifest(
432  '/tmp/probably/does/not/exist/missing.txt'
433  );
434 
435  $errors = array();
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.'));
439  }
440 
441  public function testValidateMissingData()
442  {
443  $this->manifest->data['data/missing.txt']
444  = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
445 
446  $errors = array();
447  $this->assertFalse($this->manifest->validate($errors));
448 
449  $this->assertTrue(seenAtKey($errors, 0, 'data/missing.txt'));
450  $this->assertTrue(seenAtKey($errors, 1, 'Missing data file.'));
451  }
452 
453  public function testValidateChecksum()
454  {
455  $tmp = tmpdir();
456  try
457  {
458  mkdir($tmp);
459  mkdir($tmp . '/data');
460  file_put_contents(
461  "$tmp/manifest-sha1.txt",
462  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa data/missing.txt\n"
463  );
464 
465  touch("$tmp/data/missing.txt");
466 
467  $manifest = new BagItManifest("$tmp/manifest-sha1.txt", "$tmp/");
468  $errors = array();
469  $this->assertFalse($manifest->validate($errors));
470 
471  $this->assertTrue(seenAtKey($errors, 0, 'data/missing.txt'));
472  $this->assertTrue(seenAtKey($errors, 1, 'Checksum mismatch.'));
473  }
474  catch (Exception $e)
475  {
476  rrmdir($tmp);
477  throw $e;
478  }
479  rrmdir($tmp);
480  }
481 
482 }
483 
484 ?>
BagItManifestTest\testRead
testRead()
Definition: testmanifest.php:100
BagItManifestTest\testSetHashEncodingSHA1
testSetHashEncodingSHA1()
Definition: testmanifest.php:412
BagItManifestTest\testData
testData()
Definition: testmanifest.php:55
BagItManifestTest\testValidateMissingManifest
testValidateMissingManifest()
Definition: testmanifest.php:429
BagItManifestTest\testFileName
testFileName()
Definition: testmanifest.php:47
BagItManifestTest\tearDown
tearDown()
Definition: testmanifest.php:25
BagItManifestTest\testGetHashEncoding
testGetHashEncoding()
Definition: testmanifest.php:380
BagItManifestTest\testValidateChecksum
testValidateChecksum()
Definition: testmanifest.php:453
BagItManifestTest\testUpdate
testUpdate()
Definition: testmanifest.php:156
BagItManifest
Definition: bagit_manifest.php:45
BagItManifestTest\testGetFileName
testGetFileName()
Definition: testmanifest.php:354
BagItManifestTest\testValidateMissingData
testValidateMissingData()
Definition: testmanifest.php:441
BagItManifestTest\testGetHashAbsolute
testGetHashAbsolute()
Definition: testmanifest.php:283
BagItManifestTest\testSetHashEncodingERR
testSetHashEncodingERR()
Definition: testmanifest.php:417
BagItManifestTest\testGetHash
testGetHash()
Definition: testmanifest.php:246
BagItManifestTest\testValidateOK
testValidateOK()
Definition: testmanifest.php:422
BagItManifestTest\testHashEncoding
testHashEncoding()
Definition: testmanifest.php:90
BagItManifestTest\testWrite
testWrite()
Definition: testmanifest.php:208
BagItManifestTest\testCalculateHash
testCalculateHash()
Definition: testmanifest.php:197
BagItManifestTest\testGetFileEncoding
testGetFileEncoding()
Definition: testmanifest.php:362
BagItManifestTest\setUp
setUp()
Definition: testmanifest.php:12
BagItManifestTest\testGetData
testGetData()
Definition: testmanifest.php:317
BagItManifestTest\$tmpdir
$tmpdir
Definition: testmanifest.php:8
BagItManifestTest\$manifest
$manifest
Definition: testmanifest.php:10
BagItManifestTest\testSetHashEncodingMD5
testSetHashEncodingMD5()
Definition: testmanifest.php:407
BagItManifestTest\testGetHashMissing
testGetHashMissing()
Definition: testmanifest.php:278
BagItManifestTest
Definition: testmanifest.php:6
BagItManifestTest\testPathPrefix
testPathPrefix()
Definition: testmanifest.php:30
BagItManifestTest\testReadFileName
testReadFileName()
Definition: testmanifest.php:122
BagItManifestTest\testSetFileEncoding
testSetFileEncoding()
Definition: testmanifest.php:374
BagItManifestTest\$prefix
$prefix
Definition: testmanifest.php:9
BagItManifestTest\testClear
testClear()
Definition: testmanifest.php:148
BagItManifestTest\testWriteFileName
testWriteFileName()
Definition: testmanifest.php:226
BagItManifestTest\testFileEncoding
testFileEncoding()
Definition: testmanifest.php:35