/usr.bin/cpio/test/test_passthrough_reverse.c

https://bitbucket.org/freebsd/freebsd-head/ · C · 85 lines · 25 code · 15 blank · 45 comment · 0 complexity · 22cb29e7085bea10a6ef1d21fd5571f5 MD5 · raw file

  1. /*-
  2. * Copyright (c) 2003-2007 Tim Kientzle
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in the
  12. * documentation and/or other materials provided with the distribution.
  13. *
  14. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
  15. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  16. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  17. * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
  18. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  19. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  20. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  21. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  23. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #include "test.h"
  26. __FBSDID("$FreeBSD$");
  27. /*
  28. * As reported by Bernd Walter: Some people are in the habit of
  29. * using "find -d" to generate a list for cpio -p because that
  30. * copies the top-level dir last, which preserves owner and mode
  31. * information. That's not necessary for bsdcpio (libarchive defers
  32. * restoring directory information), but bsdcpio should still generate
  33. * the correct results with this usage.
  34. */
  35. DEFINE_TEST(test_passthrough_reverse)
  36. {
  37. int r;
  38. FILE *filelist;
  39. assertUmask(0);
  40. /*
  41. * Create an assortment of files on disk.
  42. */
  43. filelist = fopen("filelist", "w");
  44. /* Directory. */
  45. assertMakeDir("dir", 0743);
  46. /* File with 10 bytes content. */
  47. assertMakeFile("dir/file", 0644, "1234567890");
  48. fprintf(filelist, "dir/file\n");
  49. /* Write dir last. */
  50. fprintf(filelist, "dir\n");
  51. /* All done. */
  52. fclose(filelist);
  53. /*
  54. * Use cpio passthrough mode to copy files to another directory.
  55. */
  56. r = systemf("%s -pdvm out <filelist >stdout 2>stderr", testprog);
  57. failure("Error invoking %s -pd out", testprog);
  58. assertEqualInt(r, 0);
  59. assertChdir("out");
  60. /* Verify stderr and stdout. */
  61. assertTextFileContents("out/dir/file\nout/dir\n1 block\n",
  62. "../stderr");
  63. assertEmptyFile("../stdout");
  64. /* dir */
  65. assertIsDir("dir", 0743);
  66. /* Regular file. */
  67. assertIsReg("dir/file", 0644);
  68. assertFileSize("dir/file", 10);
  69. assertFileNLinks("dir/file", 1);
  70. }