pax_global_header00006660000000000000000000000064125103606630014514gustar00rootroot0000000000000052 comment=62a1c0226fd92810010903b87b3b5edd01dd8c2f backupchecker-1.7/000077500000000000000000000000001251036066300141555ustar00rootroot00000000000000backupchecker-1.7/.gitignore000066400000000000000000000307551251036066300161570ustar00rootroot00000000000000syntax: glob *.log *.pyc *.log newname.conf newname.list a.out docs/build/ functional-tests/expected-generated-list-for-bzip2-archive/expected-generated-list-for-bzip2-archive.list functional-tests/expected-generated-list-for-gzip-archive/expected-generated-list-for-gzip-archive.list functional-tests/expected-generated-list-for-tar-archive/expected-generated-list-for-tar-archive.list functional-tests/expected-generated-list-for-tree/expected-generated-list-for-tree.list functional-tests/expected-generated-list-for-zip-archive/expected-generated-list-for-zip-archive.list functional-tests/generate-list-and-parse-bzip2-archive/generate-list-and-parse-bzip2-archive.list functional-tests/generate-list-and-parse-gzip-archive/generate-list-and-parse-gzip-archive.list functional-tests/generate-list-and-parse-tar-archive/generate-list-and-parse-tar-archive.list functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree.list functional-tests/generate-list-and-parse-zip-archive/generate-list-and-parse-zip-archive.list functional-tests/generate-list-from-bzip2-archive/generate-list-from-bzip2-archive.list functional-tests/generate-list-from-gzip-archive/generate-list-from-gzip-archive.list functional-tests/generate-list-from-tar-archive/generate-list-from-tar-archive.list functional-tests/generate-list-from-tree/generate-list-from-tree.list functional-tests/generate-list-from-zip-archive/generate-list-from-zip-archive.list functional-tests/generate-list-from-xz-archive/generate-list-from-xz-archive.list functional-tests/generate-list-and-parse-xz-archive/generate-list-and-parse-xz-archive.list tests/generatelistforgzip_private_methods/mygzip.list tests/generatelistfortar_private_methods/mytar.list tests/generatelistfortree_private_methods/mydir.list tests/generatelistforzip_private_methods/myzip.list tests/generatelistfortree_private_methods/mydir/bar.list tests/generatelistfortree_private_methods/mydir/foo.list tests/generatelistfortree_private_methods/mydir/oof.list functional-tests/generate-list-changing-default-separator/bzip2/generate-list-changing-default-separator-for-bzip2.list functional-tests/generate-list-changing-default-separator/gzip/generate-list-changing-default-separator-for-gzip.list functional-tests/generate-list-changing-default-separator/tar.bz2/generate-list-changing-default-separator-for-tar-bz2.list functional-tests/generate-list-changing-default-separator/tar.gz/generate-list-changing-default-separator-for-tar-gz.list functional-tests/generate-list-changing-default-separator/tar.xz/generate-list-changing-default-separator-for-tar-xz.list functional-tests/generate-list-changing-default-separator/tree/generate-list-changing-default-separator-for-tree.list functional-tests/generate-list-changing-default-separator/zip/generate-list-changing-default-separator-for-zip.list functional-tests/generate-list-and-parse-tbz-archive/generate-list-and-parse-tbz-archive.list functional-tests/wrong-file-type-l-in-tree/wrong-file-type-l-in-tree/bar functional-tests/wrong-file-type-l-in-tree/wrong-file-type-l-in-tree/foo functional-tests/generate-list-and-parse-tbz2-archive/generate-list-and-parse-tbz2-archive.list functional-tests/generate-list-and-parse-tgz-archive/generate-list-and-parse-tgz-archive.list functional-tests/generate-conf-and-file-list-tar-gz/conf.conf functional-tests/generate-conf-and-file-list-tar-gz/generate-conf-and-file-list-tar-gz.conf functional-tests/generate-conf-and-file-list-tar-gz/generate-conf-and-file-list-tar-gz.list functional-tests/generate-conf-and-file-list-tar-bz2/conf.conf functional-tests/generate-conf-and-file-list-tar-bz2/generate-conf-and-file-list-tar-bz2.conf functional-tests/generate-conf-and-file-list-tar-bz2/generate-conf-and-file-list-tar-bz2.list functional-tests/generate-conf-and-file-list-tar-xz/conf.conf functional-tests/generate-conf-and-file-list-tar-xz/generate-conf-and-file-list-tar-xz.conf functional-tests/generate-conf-and-file-list-tar-xz/generate-conf-and-file-list-tar-xz.list functional-tests/generate-conf-and-file-list-tar/generate-conf-and-file-list-tar.conf functional-tests/generate-conf-and-file-list-tar/generate-conf-and-file-list-tar.list functional-tests/generate-conf-and-file-list-tar/conf.conf functional-tests/generate-conf-and-file-list-zip/conf.conf functional-tests/generate-conf-and-file-list-zip/generate-conf-and-file-list-zip.conf functional-tests/generate-conf-and-file-list-zip/generate-conf-and-file-list-zip.list functional-tests/generate-conf-and-file-list-bz2/conf.conf functional-tests/generate-conf-and-file-list-bz2/generate-conf-and-file-list-bz2.conf functional-tests/generate-conf-and-file-list-bz2/generate-conf-and-file-list-bz2.list functional-tests/generate-conf-and-file-list-gz/conf.conf functional-tests/generate-conf-and-file-list-gz/generate-conf-and-file-list-gz.conf functional-tests/generate-conf-and-file-list-gz/generate-conf-and-file-list-gz.list functional-tests/generate-conf-and-file-list-xz/conf.conf functional-tests/generate-conf-and-file-list-xz/generate-conf-and-file-list-xz.conf functional-tests/generate-conf-and-file-list-xz/generate-conf-and-file-list-xz.list functional-tests/generate-conf-and-file-list-tree/conf.conf functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-tree.conf functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-tree.list functional-tests/check-mtime-tar/check-mtime-tar.list functional-tests/check-mtime-tree/check-mtime-tree.conf functional-tests/check-mtime-tree/check-mtime-tree.list functional-tests/check-mtime-zip/check-mtime-zip.list .coverage tests/listtype/mybz2.conf tests/listtype/mybz2.list tests/listtype/mygzip.conf tests/listtype/mygzip.list tests/listtype/mylzma.conf tests/listtype/mylzma.list tests/listtype/mytargz.conf tests/listtype/mytargz.list tests/listtype/mytree.conf tests/listtype/mytree.list tests/listtype/myzip.conf tests/listtype/myzip.list functional-tests/generate-apk-conf-files/generate-apk-conf-files.list functional-tests/custom-conf-filelist-bzip2/both/custom-conf-filelist-bzip2.conf functional-tests/custom-conf-filelist-bzip2/both/custom-conf-filelist-bzip2.list functional-tests/custom-conf-filelist-bzip2/conf/custom-conf-filelist-bzip2.conf functional-tests/custom-conf-filelist-bzip2/custom-conf-filelist-bzip2.conf functional-tests/custom-conf-filelist-bzip2/custom-conf-filelist-bzip2.list functional-tests/custom-conf-filelist-bzip2/list/custom-conf-filelist-bzip2.list functional-tests/custom-conf-filelist-gzip/both/custom-conf-filelist-gzip.conf functional-tests/custom-conf-filelist-gzip/both/custom-conf-filelist-gzip.list functional-tests/custom-conf-filelist-gzip/conf/custom-conf-filelist-gzip.conf functional-tests/custom-conf-filelist-gzip/custom-conf-filelist-gzip.conf functional-tests/custom-conf-filelist-gzip/custom-conf-filelist-gzip.list functional-tests/custom-conf-filelist-gzip/list/custom-conf-filelist-gzip.list functional-tests/custom-conf-filelist-lzma/both/custom-conf-filelist-lzma.conf functional-tests/custom-conf-filelist-lzma/both/custom-conf-filelist-lzma.list functional-tests/custom-conf-filelist-lzma/conf/custom-conf-filelist-lzma.conf functional-tests/custom-conf-filelist-lzma/custom-conf-filelist-lzma.conf functional-tests/custom-conf-filelist-lzma/custom-conf-filelist-lzma.list functional-tests/custom-conf-filelist-lzma/list/custom-conf-filelist-lzma.list functional-tests/custom-conf-filelist-tar/both/custom-conf-filelist-tar.conf functional-tests/custom-conf-filelist-tar/both/custom-conf-filelist-tar.list functional-tests/custom-conf-filelist-tar/conf/custom-conf-filelist-tar.conf functional-tests/custom-conf-filelist-tar/custom-conf-filelist-tar.conf functional-tests/custom-conf-filelist-tar/custom-conf-filelist-tar.list functional-tests/custom-conf-filelist-tar/list/custom-conf-filelist-tar.list functional-tests/custom-conf-filelist-tree/both/custom-conf-filelist-tree.conf functional-tests/custom-conf-filelist-tree/both/custom-conf-filelist-tree.list functional-tests/custom-conf-filelist-tree/conf/custom-conf-filelist-tree.conf functional-tests/custom-conf-filelist-tree/custom-conf-filelist-tree.conf functional-tests/custom-conf-filelist-tree/custom-conf-filelist-tree.list functional-tests/custom-conf-filelist-tree/list/custom-conf-filelist-tree.list functional-tests/custom-conf-filelist-zip/both/custom-conf-filelist-zip.conf functional-tests/custom-conf-filelist-zip/both/custom-conf-filelist-zip.list functional-tests/custom-conf-filelist-zip/conf/custom-conf-filelist-zip.conf functional-tests/custom-conf-filelist-zip/custom-conf-filelist-zip.conf functional-tests/custom-conf-filelist-zip/custom-conf-filelist-zip.list functional-tests/custom-conf-filelist-zip/list/custom-conf-filelist-zip.list functional-tests/hashtype-option/bzip2/hashtype-option.conf functional-tests/hashtype-option/bzip2/hashtype-option.list functional-tests/hashtype-option/gzip/hashtype-option.conf functional-tests/hashtype-option/gzip/hashtype-option.list functional-tests/hashtype-option/lzma/hashtype-option.conf functional-tests/hashtype-option/lzma/hashtype-option.list functional-tests/hashtype-option/tar-gz/hashtype-option.conf functional-tests/hashtype-option/tar-gz/hashtype-option.list functional-tests/hashtype-option/tree/hashtype-option.conf functional-tests/hashtype-option/tree/hashtype-option.list functional-tests/hashtype-option/zip/hashtype-option.conf functional-tests/hashtype-option/zip/hashtype-option.list functional-tests/exceptions-file-option/tar-gz/exceptions-file-option.conf functional-tests/exceptions-file-option/tar-gz/exceptions-file-option.list functional-tests/exceptions-file-option/zip/exceptions-file-option.conf functional-tests/exceptions-file-option/zip/exceptions-file-option.list functional-tests/exceptions-file-option/bzip2/exceptions-file-option.conf functional-tests/exceptions-file-option/bzip2/exceptions-file-option.list functional-tests/exceptions-file-option/gzip/exceptions-file-option.conf functional-tests/exceptions-file-option/gzip/exceptions-file-option.list functional-tests/exceptions-file-option/lzma/exceptions-file-option.conf functional-tests/exceptions-file-option/lzma/exceptions-file-option.list functional-tests/exceptions-file-option/tree/exceptions-file-option.conf functional-tests/exceptions-file-option/tree/exceptions-file-option.list functional-tests/check-gname-tree/check-gname-tree.conf functional-tests/check-gname-tree/check-gname-tree.list functional-tests/check-uname-tree/check-uname-tree.conf functional-tests/check-uname-tree/check-uname-tree.list functional-tests/conf-files-from-tar-gz/conf-files-from-tar-gz.conf functional-tests/conf-files-from-tar-gz/conf-files-from-tar-gz.list functional-tests/generate-and-check-tar-stream-from-tar-gz/generate-and-check-tar-stream-from-tar-gz.conf functional-tests/generate-and-check-tar-stream-from-tar-gz/generate-and-check-tar-stream-from-tar-gz.list functional-tests/configuration-name-option-with-tree/configuration-name-option-with-tree.list functional-tests/configuration-name-option-with-zip/configuration-name-option-with-zip.conf functional-tests/configuration-name-option-with-zip/configuration-name-option-with-zip.list functional-tests/configuration-name-option-with-gzip/configuration-name-option-with-gzip.conf functional-tests/configuration-name-option-with-gzip/configuration-name-option-with-gzip.list functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tar-gz/conf/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tar-gz/list/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tree/conf/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tree/list/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-zip/conf/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-zip/list/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-gzip/conf/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-gzip/list/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-bzip2/conf/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-bzip2/list/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-lzma/conf/ functional-tests/configuration-name-option-and-conf-list-ouput-option-with-lzma/list/ functional-tests/generate-full-conf-output-option-with-stream-tar-gz/fullconf/ functional-tests/check-gname-tar-gz/check-gname-tar-gz.conf functional-tests/check-gname-tar-gz/check-gname-tar-gz.list functional-tests/check-uname-tar-gz/check-uname-tar-gz.conf functional-tests/check-uname-tar-gz/check-uname-tar-gz.list backupchecker-1.7/.travis.yml000066400000000000000000000002121251036066300162610ustar00rootroot00000000000000language: python python: - "3.4" # command to run tests script: - "./tests.py" notifications: email: - chaica@backupchecker.com backupchecker-1.7/AUTHORS000066400000000000000000000000471251036066300152260ustar00rootroot00000000000000Carl Chenet backupchecker-1.7/LICENSE000066400000000000000000001045131251036066300151660ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . backupchecker-1.7/README.md000066400000000000000000000025231251036066300154360ustar00rootroot00000000000000### BackupChecker [![Build Status](https://travis-ci.org/backupchecker/backupchecker.svg?branch=master)](https://travis-ci.org/backupchecker/backupchecker) BackupChecker is an automated backup checker. Read the documentation in docs/ or [read it online](https://backupchecker.readthedocs.org/en/latest/). ### Quick Install * Install Backup Checker from PyPI # pip install backupchecker * Install Backup Checker from sources # tar zxvf backupchecker-1.7.tar.gz # cd backupchecker # python3.4 setup.py install # # or # python3.4 setup.py install --install-scripts=/usr/bin ### Use Backup Checker locally * Generate the configuration files for a given archive: $ backupchecker -G /path/to/backup.tar.gz * Verify the archive and its content: $ backupchecker -c /path/to/confs/ ### Use Backup Checker with remote backups * Generate the configuration files for a remote archive through FTP $ wget --quiet -O - ftp://user:pass@server/backup.tar.gz | ./backupchecker.py -G - * Verify an archive on a remote server through SSH $ ssh -q server "cat /tmp/backup.tar.gz" | ./backupchecker.py -c . - ### Authors Carl Chenet ### License This software comes under the terms of the GPLv3+. See the LICENSE file for the complete text of the license. backupchecker-1.7/backupchecker.py000077500000000000000000000014441251036066300173270ustar00rootroot00000000000000#!/usr/bin/python3.4 # -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from backupchecker.main import Main if __name__ == '__main__': Main() backupchecker-1.7/backupchecker/000077500000000000000000000000001251036066300167475ustar00rootroot00000000000000backupchecker-1.7/backupchecker/__init__.py000066400000000000000000000000001251036066300210460ustar00rootroot00000000000000backupchecker-1.7/backupchecker/applogger.py000066400000000000000000000023721251036066300213050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Application logger '''Application logger''' import logging import sys class AppLogger(object): '''The application logger''' def __init__(self, __logfile): '''The constructor for the AppLogger class. Keyword arguments: __logfile -- the path of the log ''' try: logging.basicConfig(filename=__logfile, level=logging.WARNING, filemode='w') except (IOError,OSError) as __msg: print('Brebis output file could not be created: {}'.format(__msg)) sys.exit(1) backupchecker-1.7/backupchecker/archiveinfomsg.py000066400000000000000000000256511251036066300223360ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Generate the information message about an archive '''Generate the information message about an archive''' import logging import os.path class ArchiveInfoMsg(object): '''Generate the information message about an archive''' def __init__(self, __bck, __cfgvalues, __isastream, __confname): '''The constructor for the ArchiveInfoMsg class. __bck -- the retrieved value for the archive __cfgvalues -- the expected values for the archive __isastream -- is the archive coming from a stream or not ''' self.__main(__bck, __cfgvalues, __isastream, __confname) def __main(self, __bck, __cfgvalues, __isastream, __confname): '''The main for the ArchiveInfoMsg class''' if __cfgvalues['type'] == 'archive' or __cfgvalues['type'] == 'tree': if __isastream: if __confname: __cfgvalues['path'] = __confname else: __cfgvalues['path'] = __cfgvalues['name'] self.__missing_files(__bck.missing_files, __cfgvalues['path']) self.__unexpected_files(__bck.unexpected_files, __cfgvalues['path']) self.__classify_differences(__bck, __cfgvalues['path']) self.__uid_gid_mismatches(__bck, __cfgvalues['path']) self.__uname_gname_mismatches(__bck, __cfgvalues['path']) self.__mode_mismatches(__bck, __cfgvalues['path']) self.__type_mismatches(__bck, __cfgvalues['path']) self.__mtime_mismatches(__bck, __cfgvalues['path']) self.__hash_mismatches(__bck, __cfgvalues['path']) self.__target_mismatches(__bck, __cfgvalues['path']) def __missing_files(self, __missing, __archivepath): '''Warn about the missing files in an archive''' if __missing: __msg= 'file' if len(__missing) > 1: __msg = 'files' logging.warning('{} {} missing in {}: '.format( len(__missing), __msg, __archivepath)) for __path in __missing: logging.warning('{}'.format(__path)) def __unexpected_files(self, __unexpected, __archivepath): '''Warn about the unexpected files in the archive''' if __unexpected: __msg= 'file' if len(__unexpected) > 1: __msg = 'files' logging.warning('{} unexpected {} checking {}: '.format( len(__unexpected), __msg, __archivepath)) for __path in __unexpected: logging.warning('{}'.format(__path)) def __classify_differences(self, __bck, __archivepath): '''Report differences between expected files and files in the archive ''' if __bck.missing_equality: __topic = '{} {} with unexpected size while checking {}: ' self.__log_differences( __bck.missing_equality, __archivepath, __topic) if __bck.missing_smaller_than: __topic = '{} {} bigger than expected while checking {}: ' self.__log_differences( __bck.missing_smaller_than, __archivepath, __topic, 'smaller than') if __bck.missing_bigger_than: __topic = '{} {} smaller than expected while checking {}: ' self.__log_differences( __bck.missing_bigger_than, __archivepath, __topic, 'bigger than') def __log_differences(self, __files, __archivepath, __topic, __qty=''): '''Log the differences between the expected files and the files in the archive ''' __fileword = 'file' if len(__files) > 1: __fileword = 'files' logging.warning(__topic.format(len(__files), __fileword, __archivepath)) if __qty: for __file in __files: logging.warning('{} size is {}. Should have been {} {}.'.format( __file['path'], __file['size'], __qty, __file['expected'])) else: for __file in __files: logging.warning('{} size is {}. Should have been {}.'.format( __file['path'], __file['size'], __file['expected'])) def __uid_gid_mismatches(self, __bck, __archivepath): '''Log the uids and gids mismatches''' # Uid if __bck.mismatched_uids: __errnb = len(__bck.mismatched_uids) __fileword = 'file' __uidword = 'uid' if __errnb > 1: __fileword = 'files' __uidword = 'uids' logging.warning('{} {} with unexpected {} while checking {}:'.format(__errnb, __fileword, __uidword, __archivepath)) for __file in __bck.mismatched_uids: logging.warning('{} uid is {!s}. Should have been {!s}.'.format(__file['path'], __file['uid'], __file['expecteduid'])) # Gid if __bck.mismatched_gids: __errnb = len(__bck.mismatched_gids) __fileword = 'file' __gidword = 'gid' if __errnb > 1: __fileword = 'files' __gidword = 'gids' logging.warning('{} {} with unexpected {} while checking {}:'.format(__errnb, __fileword, __gidword, __archivepath)) for __file in __bck.mismatched_gids: logging.warning('{} gid is {!s}. Should have been {!s}.'.format(__file['path'], __file['gid'], __file['expectedgid'])) def __uname_gname_mismatches(self, __bck, __archivepath): '''Log the unames and gnames mismatches''' # uname if __bck.mismatched_unames: __errnb = len(__bck.mismatched_unames) __fileword = 'file' __unameword = 'owner' if __errnb > 1: __fileword = 'files' __unameword = 'owners' logging.warning('{} {} with unexpected {} while checking {}:'.format(__errnb, __fileword, __unameword, __archivepath)) for __file in __bck.mismatched_unames: logging.warning('{} owner is {!s}. Should have been {!s}.'.format(__file['path'], __file['uname'], __file['expecteduname'])) # gname if __bck.mismatched_gnames: __errnb = len(__bck.mismatched_gnames) __fileword = 'file' __gnameword = 'group owner' if __errnb > 1: __fileword = 'files' __gnameword = 'group owners' logging.warning('{} {} with unexpected {} while checking {}:'.format(__errnb, __fileword, __gnameword, __archivepath)) for __file in __bck.mismatched_gnames: logging.warning('{} group owner is {!s}. Should have been {!s}.'.format(__file['path'], __file['gname'], __file['expectedgname'])) def __mode_mismatches(self, __bck, __archivepath): '''Log the file mode mismatches''' if __bck.mismatched_modes: __errnb = len(__bck.mismatched_modes) __fileword = 'file' __modeword = 'mode' if __errnb > 1: __fileword = 'files' __modeword = 'modes' logging.warning('{} {} with unexpected {} while checking {}:'.format( __errnb, __fileword, __modeword, __archivepath, )) for __file in __bck.mismatched_modes: logging.warning('{} mode is {}. Should have been {}.'.format(__file['path'], __file['mode'], __file['expectedmode'])) def __target_mismatches(self, __bck, __archivepath): '''Log the targe mismatches''' if __bck.mismatched_targets: __errnb = len(__bck.mismatched_targets) __fileword = 'link' __modeword = 'target' if __errnb > 1: __fileword = 'links' __modeword = 'targets' logging.warning('{} {} with unexpected {} while checking {}:'.format( __errnb, __fileword, __modeword, __archivepath, )) for __file in __bck.mismatched_targets: logging.warning('{} target is {}. Should have been {}.'.format(__file['path'], __file['target'], __file['expectedtarget'])) def __type_mismatches(self, __bck, __archivepath): '''Log the file type mismatches''' __types = {'f': 'regular file', 'c': 'character', 'd': 'directory', 's': 'symbolic link', 'l': 'hard link', 'b': 'block', 'o': 'fifo', 'k': 'socket'} if __bck.mismatched_types: __errnb = len(__bck.mismatched_types) __fileword = 'file' __typeword = 'type' if __errnb > 1: __fileword = 'files' __typeword = 'types' logging.warning('{} contains {} {} with unexpected {}:'.format(__archivepath, __errnb, __fileword, __typeword)) for __file in __bck.mismatched_types: logging.warning('{} is a {}. Should have been a {}.'.format(__file['path'], __types[__file['type']], __types[__file['expectedtype']])) def __mtime_mismatches(self, __bck, __archivepath): '''Log the file mtime mismatches''' if __bck.mismatched_mtimes: __errnb = len(__bck.mismatched_mtimes) __fileword = 'file' __mtimeword = 'mtime' if __errnb > 1: __fileword = 'files' __mtimeword = 'types' logging.warning('{} contains {} {} with unexpected {}:'.format(__archivepath, __errnb, __fileword, __mtimeword)) for __file in __bck.mismatched_mtimes: logging.warning('{} mtime is {}. Should have been {}.'.format(__file['path'], __file['mtime'], __file['expectedmtime'])) def __hash_mismatches(self, __bck, __archivepath): '''Log the file hash mismatches''' if __bck.mismatched_hashes: __errnb = len(__bck.mismatched_hashes) __fileword = 'file' __hashword = 'hash' if __errnb > 1: __fileword = 'files' __hashword = 'hashes' logging.warning('{} {} with unexpected {} while checking {}:'.format(__errnb, __fileword, __hashword, __archivepath)) for __file in __bck.mismatched_hashes: logging.warning('{} hash is {}. Should have been {}.'.format(__file['path'], __file['hash'], __file['expectedhash'])) backupchecker-1.7/backupchecker/checkbackups/000077500000000000000000000000001251036066300213755ustar00rootroot00000000000000backupchecker-1.7/backupchecker/checkbackups/__init__.py000066400000000000000000000000001251036066300234740ustar00rootroot00000000000000backupchecker-1.7/backupchecker/checkbackups/checkarchive.py000066400000000000000000000345431251036066300243770ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check an archive '''Check an archive''' import os import stat from logging import warn import backupchecker.checkhashes class CheckArchive(object): '''Check an archive''' def __init__(self, _cfgvalues, _options): '''The constructor of the CheckArchive class. _cfgvalues -- the expected values for the archive ''' self._missing_files = [] self._missing_equality = [] self._missing_bigger_than = [] self._missing_smaller_than = [] self._unexpected_files = [] self._mismatched_uids = [] self._mismatched_gids = [] self._mismatched_unames = [] self._mismatched_gnames = [] self._mismatched_modes = [] self._mismatched_types = [] self._mismatched_mtimes = [] self._mismatched_targets = [] self._mismatched_hashes = [] self.__fileinfo = False self._main(_cfgvalues, _options) def _check_path(self, __arcinfo, _data): '''Check if the expected path exists in the archive''' for _ind, _file in enumerate(_data): if __arcinfo['path'] == _file['path']: # Tests of files in the archive and expected ones ### Compare the sizes of the file in the archive and the ### expected file self._compare_sizes(__arcinfo['size'], __arcinfo['path'], _file) ### Check if an unexpected file is in the archive self._check_unexpected_files(__arcinfo['path'], _file) ### Compare the uid of the file in the archive and the ### expected one if 'uid' in __arcinfo and 'uid' in _file: self.__check_uid(__arcinfo['uid'], _file) ### Compare the gid of the file in the archive and the ### expected one if 'gid' in __arcinfo and 'gid' in _file: self.__check_gid(__arcinfo['gid'], _file) ### Compare the uname of the file in the archive and the ### expected one if 'uname' in __arcinfo and 'uname' in _file: self.__check_uname(__arcinfo['uname'], _file) ### Compare the gname of the file in the archive and the ### expected one if 'gname' in __arcinfo and 'gname' in _file: self.__check_gname(__arcinfo['gname'], _file) ### Compare the filemode and the mode of the expected file if 'mode' in __arcinfo and 'mode' in _file: self._check_mode(__arcinfo['mode'], _file) ### Compare the file type and the type of the expected file if 'type' in __arcinfo and 'type' in _file: self._check_type(__arcinfo['type'], _file) if 'target' in __arcinfo and 'target' in _file: self._check_target(__arcinfo['target'], _file) ### Compare the file mtime and the mtime of the expected file if 'mtime' in __arcinfo and 'mtime' in _file: self._check_mtime(__arcinfo['mtime'], _file) ### Compare the hash of the file and the one of the expected file if 'hash' in _file: self._check_hash(__arcinfo['path'], _file) # We reduce the number of files to work with del(_data[_ind]) return _data def __extract_archive_info(self, __arcpath): '''Extract the archive file system information''' if not self.__fileinfo: try: self.__fileinfo = os.stat(__arcpath) except (OSError, IOError) as __msg: logging.warning(__msg) return self.__fileinfo def __find_archive_size(self, __arcpath): '''Find the size of the archive''' __fileinfo = self.__extract_archive_info(__arcpath) return __fileinfo.st_size def __find_archive_mode(self, __arcpath): '''Find the mode of the archive''' __fileinfo = self.__extract_archive_info(__arcpath) __mode= stat.S_IMODE(__fileinfo.st_mode) return __mode def __find_archive_uid_gid(self, __arcpath): '''Find the uid of the archive''' __fileinfo = self.__extract_archive_info(__arcpath) return __fileinfo.st_uid, __fileinfo.st_gid def __find_archive_mtime(self, __arcpath): '''Find the mtime of the archive''' __arcstat = os.stat(__arcpath) return __arcstat.st_mtime def _compare_sizes(self, _arcsize, _arcname, _file): '''Compare the sizes of the files in the archive and the expected files ''' if 'equals' in _file and _arcsize != _file['equals']: self.missing_equality.append({'path': _arcname, 'size': _arcsize, 'expected': _file['equals']}) elif 'biggerthan' in _file and _arcsize < _file['biggerthan']: self.missing_bigger_than.append({'path': _arcname, 'size': _arcsize, 'expected': _file['biggerthan']}) elif 'smallerthan' in _file and _arcsize > _file['smallerthan']: self.missing_smaller_than.append({'path': _arcname, 'size': _arcsize, 'expected': _file['smallerthan']}) def _normalize_path(self, __path): '''Remove last slash of a directory path if present''' if __path.endswith('/'): return __path[:-1] else: return __path def _check_unexpected_files(self, __arcname, __file): '''Check if an unexpected file exists in the archive''' if 'unexpected' in __file: self.unexpected_files.append(__arcname) def __check_uid(self, __arcuid, __file): '''Check if the file uid in the archive matches the expected one ''' if __file['uid'] != __arcuid: self.mismatched_uids.append({'path':__file['path'], 'expecteduid':__file['uid'], 'uid':__arcuid}) def __check_gid(self, __arcgid, __file): '''Check if the file gid in the archive matches the expected one ''' if __file['gid'] != __arcgid: self.mismatched_gids.append({'path':__file['path'], 'expectedgid':__file['gid'], 'gid':__arcgid}) def __check_uname(self, __arcuname, __file): '''Check if the file uname in the archive matches the expected one ''' if __file['uname'] != __arcuname: self.mismatched_unames.append({'path':__file['path'], 'expecteduname':__file['uname'], 'uname':__arcuname}) def __check_gname(self, __arcgname, __file): '''Check if the file gname in the archive matches the expected one ''' if __file['gname'] != __arcgname: self.mismatched_gnames.append({'path':__file['path'], 'expectedgname':__file['gname'], 'gname':__arcgname}) def _check_mode(self, __arcmode, __file): '''Check if the file mode in the archive matches the expected one ''' __arcmode = oct(__arcmode).split('o')[-1] # if the file has no right, need to manipulate the output - solving #15 if __arcmode == '0': __arcmode = '000' if __file['mode'] != __arcmode: self.mismatched_modes.append({'path': __file['path'], 'expectedmode': __file['mode'], 'mode': __arcmode}) def _check_type(self, __arctype, __file): '''Check if the file type in the archive matches the expected one ''' if __file['type'] != __arctype: self.mismatched_types.append({'path': __file['path'], 'expectedtype': __file['type'], 'type': __arctype}) def _check_mtime(self, __arcmtime, __file): '''Check if the file mtime in the archive matches the expected one ''' if __file['mtime'] != __arcmtime: self.mismatched_mtimes.append({'path': __file['path'], 'expectedmtime': __file['mtime'], 'mtime': __arcmtime}) def _check_hash(self, __arcpath, __file): '''Check if the file hash in the archive matches the expected one ''' __arcfile = self._extract_stored_file(__arcpath) __arcfilehash = backupchecker.checkhashes.get_hash(__arcfile, __file['hash']['hashtype']) self._report_hash(__file['path'], __file['hash']['hashvalue'], __arcfilehash) def _report_hash(self, __arcpath, __expectedhash, __archash): '''Check if the hashes are different and report the fact''' if __expectedhash != __archash: self._mismatched_hashes.append({'path': __arcpath, 'expectedhash': __expectedhash, 'hash': __archash}) def _check_target(self, __arctarget, __file): '''Check if the target field in the archive matches the expected one ''' if __file['target'] != __arctarget: self._mismatched_targets.append({'path': __file['path'], 'expectedtarget' : __file['target'], 'target': __arctarget}) def _archive_checks(self, __arcdata, __arcpath): '''Launch the checks for the archive itself''' if __arcdata: # Store the path into archive data __arcdata['path'] = __arcpath # archive size if 'equals' in __arcdata or 'biggerthan' in __arcdata or 'smallerthan' in __arcdata: __arcsize = self.__find_archive_size(__arcdata['path']) self._compare_sizes(__arcsize, __arcdata['path'], __arcdata) # archive hash if 'hash' in __arcdata: with open(__arcdata['path'], 'rb') as __archive: __archash = backupchecker.checkhashes.get_hash(__archive, __arcdata['hash']['hashtype']) self._report_hash(__arcdata['path'], __arcdata['hash']['hashvalue'], __archash) # archive mode if 'mode' in __arcdata: __arcmode = self.__find_archive_mode(__arcdata['path']) self._check_mode(__arcmode, __arcdata) # archive uid and gid if 'uid' in __arcdata: __arcuid, _ = self.__find_archive_uid_gid(__arcdata['path']) self.__check_uid(__arcuid, __arcdata) if 'gid' in __arcdata: _, __arcgid = self.__find_archive_uid_gid(__arcdata['path']) self.__check_gid(__arcgid, __arcdata) # archive uname if 'uname' in __arcdata: __arcuname, _ = self.__find_archive_uname_gname(__arcdata['path']) self.__check_uname(__arcuname, __arcdata) # archive gname if 'gname' in __arcdata: _, __arcgname = self.__find_archive_uname_gname(__arcdata['path']) self.__check_gname(__arcgname, __arcdata) # mtime of the archive if 'mtime' in __arcdata: __arcmtime = self.__find_archive_mtime(__arcdata['path']) self._check_mtime(__arcmtime, __arcdata) @property def missing_equality(self): '''A list containing the paths of the files missing the equality parameters in the archive ''' return self._missing_equality @property def missing_files(self): '''A list containing the paths of the missing files in the archive ''' return self._missing_files @property def missing_bigger_than(self): '''A list containing the path and the size of the files missing the bigger than parameter in the archive ''' return self._missing_bigger_than @property def missing_smaller_than(self): '''A list containing the path and the size of the files missing the smaller than parameter in the archive ''' return self._missing_smaller_than @property def unexpected_files(self): ''' A list containing the unexpected files in the archive''' return self._unexpected_files @property def mismatched_uids(self): '''A list containing a {path,uid,expecteduid} of the files in the archive with an unexpected uid ''' return self._mismatched_uids @property def mismatched_gids(self): '''A list containing a {path,gid,expectedgid} of the files in the archive with an unexpected gid ''' return self._mismatched_gids @property def mismatched_unames(self): '''A list containing a {path,uname,expecteduname} of the files in the archive with an unexpected uname ''' return self._mismatched_unames @property def mismatched_gnames(self): '''A list containing a {path,gname,expectedgname} of the files in the archive with an unexpected gname ''' return self._mismatched_gnames @property def mismatched_modes(self): '''A list containing {path,mode,expectedmode} of the files in the archive with an unexpected mode ''' return self._mismatched_modes @property def mismatched_types(self): '''A list containing {path,type,expectedtype} of the files in the archive with an unexpected type ''' return self._mismatched_types @property def mismatched_mtimes(self): '''A list containing {path,mtime,expectedmtime} of the files in the archive with an unexpected mtime ''' return self._mismatched_mtimes @property def mismatched_hashes(self): '''A list containing {path,hash,expectedhash} of the files in the archive with an unexpected hash ''' return self._mismatched_hashes @property def mismatched_targets(self): '''A list containing {target,expectedtarget} of the targets of the links in the archive with an unexpected target ''' return self._mismatched_targets backupchecker-1.7/backupchecker/checkbackups/checkbackups.py000066400000000000000000000072761251036066300244110ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check the given backups '''Check the given backups''' import logging import sys from tarfile import is_tarfile from zipfile import is_zipfile from backupchecker.archiveinfomsg import ArchiveInfoMsg from backupchecker.checkbackups.checktar import CheckTar from backupchecker.checkbackups.checkgzip import CheckGzip from backupchecker.checkbackups.checkbzip2 import CheckBzip2 from backupchecker.checkbackups.checklzma import CheckLzma from backupchecker.checkbackups.checkzip import CheckZip from backupchecker.checkbackups.checktree import CheckTree class CheckBackups(object): '''The backup checker class''' def __init__(self, __confs, __options): '''The constructor for the Checkbackups class. __confs -- the different configurations of the backups __options -- global options from the command line ''' self.__main(__confs, __options) def __main(self, __confs, __options): '''Main for CheckBackups''' __cfgsets = __confs.values() for __cfgvalues in __cfgsets: # check a file tree if __cfgvalues['type'] == 'tree': __bck = CheckTree(__cfgvalues, __options) # check a tar file, by name elif not __options.isastream and __cfgvalues['type'] == 'archive' and (__cfgvalues['path'].lower().endswith('.tar') \ or __cfgvalues['path'].lower().endswith('.tar.gz') \ or __cfgvalues['path'].lower().endswith('.tar.bz2') \ or __cfgvalues['path'].lower().endswith('.tar.xz') \ or __cfgvalues['path'].lower().endswith('.tgz') \ or __cfgvalues['path'].lower().endswith('.tbz') \ or __cfgvalues['path'].lower().endswith('.tbz2')): __bck = CheckTar(__cfgvalues, __options) elif __options.isastream: __bck = CheckTar(__cfgvalues, __options) # check a gzip file, by name elif __cfgvalues['type'] == 'archive' and __cfgvalues['path'].lower().endswith('.gz'): __bck = CheckGzip(__cfgvalues, __options) # check a bzip2 file, by name elif __cfgvalues['type'] == 'archive' and __cfgvalues['path'].lower().endswith('.bz2'): __bck = CheckBzip2(__cfgvalues, __options) # check a xz file, by name elif __cfgvalues['type'] == 'archive' and __cfgvalues['path'].lower().endswith('.xz'): __bck = CheckLzma(__cfgvalues, __options) # check a zip file, by name elif __cfgvalues['type'] == 'archive' and __cfgvalues['path'].lower().endswith('.zip'): __bck = CheckZip(__cfgvalues, __options) elif __cfgvalues['type'] == 'archive' and __cfgvalues['path'].lower().endswith('.apk'): __bck = CheckZip(__cfgvalues, __options) else: __errmsg = 'The type of the archive is not supported.' sys.exit(1) ArchiveInfoMsg(__bck, __cfgvalues, __options.isastream, __options.confname) backupchecker-1.7/backupchecker/checkbackups/checkbzip2.py000066400000000000000000000057001251036066300237750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check a bzip2 archive '''Check a bzip2 archive''' import sys import logging import os.path import bz2 from backupchecker.checkbackups.checkarchive import CheckArchive from backupchecker.expectedvalues import ExpectedValues from backupchecker.identifylimitations import IdentifyLimitations class CheckBzip2(CheckArchive): '''Check a bzip2 archive''' def _main(self, _cfgvalues, _options): '''Main for CheckBzip2''' _data = [] _data, __arcdata = ExpectedValues(_cfgvalues, _options).data self.__arcpath = _cfgvalues['path'] ######################### # Test the archive itself ######################### self._archive_checks(__arcdata, _cfgvalues['path']) ############################### # Test the file in the archive ############################### if _data: # Identify limitations given the features asked by the user # retrieve every keys of every files in _data configkeys = set() for i in _data: configkeys = configkeys | set(i.keys()) IdentifyLimitations(_cfgvalues['path'], 'bz2', configkeys) ############################################## # Looking for data corruption # Have to read the whole archive to check CRC ############################################## try: with bz2.BZ2File(_cfgvalues['path'], 'r') as __bz2: __bz2.read() except IOError as __msg: __warn = '. You should investigate for a data corruption.' logging.warning('{}: {}{}'.format(_cfgvalues['path'], str(__msg), __warn)) else: __name = os.path.split(_cfgvalues['path'])[-1].split('.')[0] # Bzip2 does not allow to know the compressed file size, default to 0 __arcinfo = {'path': __name, 'type': 'f', 'size': 0} _data = self._check_path(__arcinfo, _data) self._missing_files = [_file['path'] for _file in _data] def _extract_stored_file(self, __nouse): '''Extract a file from the archive and return a file object''' __fileobj = bz2.BZ2File(self.__arcpath, 'r') return __fileobj backupchecker-1.7/backupchecker/checkbackups/checkgzip.py000066400000000000000000000111631251036066300237200ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check a gzip archive '''Check a gzip archive''' import sys import logging import os.path import gzip from backupchecker.checkbackups.checkarchive import CheckArchive from backupchecker.expectedvalues import ExpectedValues from backupchecker.identifylimitations import IdentifyLimitations class CheckGzip(CheckArchive): '''Check a gzip archive''' def _main(self, _cfgvalues, _options): '''Main for CheckGzip''' _data = [] _data, __arcdata = ExpectedValues(_cfgvalues, _options).data self.__arcpath = _cfgvalues['path'] ######################### # Test the archive itself ######################### self._archive_checks(__arcdata, _cfgvalues['path']) ############################### # Test the file in the archive ############################### if _data: # Identify limitations given the features asked by the user # retrieve every keys of every files in _data configkeys = set() for i in _data: configkeys = configkeys | set(i.keys()) IdentifyLimitations(_cfgvalues['path'], 'gz', configkeys) ############################################## # Looking for data corruption # Have to read the whole archive to check CRC ############################################## try: with gzip.open(_cfgvalues['path'], 'rb') as __gzip: __gzip.read() except IOError as __msg: __warn = '. You should investigate for a data corruption.' logging.warning('{}: {}{}'.format(_cfgvalues['path'], str(__msg), __warn)) else: ######################################## # No corruption, extracting information ######################################## with open(_cfgvalues['path'], 'rb') as __gzip: __filesize = self.__extract_size(__gzip) __name = self.__extract_initial_filename(__gzip, os.path.split(_cfgvalues['path'])[-1].rstrip('.gz')) __arcinfo = {'path': __name, 'size': __filesize, 'type': 'f'} _data = self._check_path(__arcinfo, _data) self._missing_files = [_file['path'] for _file in _data] def __extract_size(self, __binary): '''Extract the size of the uncompressed file inside the archive - 4 last bytes of the archive ''' __binary.seek(-4, 2) return int.from_bytes(__binary.read(), 'little') def __extract_initial_filename(self, __binary, __arcname): '''Extract initial filename of the uncompressed file''' # We move the cursor on the 4th byte __binary.seek(3,0) # Read a byte __flag = __binary.read(1) # Store flag byte __intflag = int.from_bytes(__flag,'little') # If the extra field flag is on, extract the size of its data field __extralen = 0 if __intflag & 4 != 0: __binary.seek(9,0) __extralenbyte = __binary.read(2) __extralen = int.from_byte(__extralenbyte,'little') + 2 # If the flag "name" is on, skip to it and read the associated content __binaryname = b'' if __intflag & 8 != 0: __binary.seek(10 + __extralen) # until zero byte is found, read the initial filename in bytes while True: __newbyte = __binary.read(1) if __newbyte != b'\x00': __binaryname += __newbyte else: break return __binaryname.decode('latin1') else: return __arcname def _extract_stored_file(self, __arcfilepath): '''Extract a file from the archive and return a file object''' __fileobj = gzip.open(self.__arcpath, 'rb') return __fileobj backupchecker-1.7/backupchecker/checkbackups/checklzma.py000066400000000000000000000057241251036066300237200ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check a lzma archive '''Check a lzma archive''' import sys import logging import os.path import lzma from backupchecker.checkbackups.checkarchive import CheckArchive from backupchecker.expectedvalues import ExpectedValues from backupchecker.identifylimitations import IdentifyLimitations class CheckLzma(CheckArchive): '''Check a lzma archive''' def _main(self, _cfgvalues, _options): '''Main for CheckLzma''' _data = [] _data, __arcdata = ExpectedValues(_cfgvalues, _options).data self.__arcpath = _cfgvalues['path'] ######################### # Test the archive itself ######################### self._archive_checks(__arcdata, _cfgvalues['path']) ############################### # Test the file in the archive ############################### if _data: # Identify limitations given the features asked by the user # retrieve every keys of every files in _data configkeys = set() for i in _data: configkeys = configkeys | set(i.keys()) IdentifyLimitations(_cfgvalues['path'], 'lzma', configkeys) ############################################## # Looking for data corruption # Have to read the whole archive to check CRC ############################################## try: with lzma.LZMAFile(_cfgvalues['path'], 'r') as __lzma: __lzma.read() except (lzma.LZMAError, IOError) as __msg: __warn = '. You should investigate for a data corruption.' logging.warning('{}: {}{}'.format(_cfgvalues['path'], str(__msg), __warn)) else: __name = os.path.split(_cfgvalues['path'])[-1].split('.')[0] # lzma does not allow to know the compressed file size, default to 0 __arcinfo = {'path': __name, 'type': 'f', 'size': 0} _data = self._check_path(__arcinfo, _data) self._missing_files = [_file['path'] for _file in _data] def _extract_stored_file(self, __nouse): '''Extract a file from the archive and return a file object''' __fileobj = lzma.LZMAFile(self.__arcpath, 'r') return __fileobj backupchecker-1.7/backupchecker/checkbackups/checktar.py000066400000000000000000000066251251036066300235440ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check a tar archive '''Check a tar archive''' import logging import sys import tarfile from backupchecker.expectedvalues import ExpectedValues from backupchecker.checkbackups.checkarchive import CheckArchive class CheckTar(CheckArchive): '''Check a tar archive''' def _main(self, _cfgvalues, _options): '''Main for CheckTar''' _data = [] _data, __arcdata = ExpectedValues(_cfgvalues, _options).data if _options.isastream: __isastream = True else: __isastream = False ######################### # Test the archive itself ######################### if not __isastream: self._archive_checks(__arcdata, _cfgvalues['path']) ############################### # Test the files in the archive ############################### if _data: try: if __isastream: self._tar = tarfile.open(mode='r|*',fileobj=sys.stdin.buffer) else: self._tar = tarfile.open(_cfgvalues['path'], 'r') for _tarinfo in self._tar: _tarinfo.name = self._normalize_path(_tarinfo.name) __type = self.__translate_type(_tarinfo.type) __arcinfo = {'path':_tarinfo.name, 'size':_tarinfo.size, 'uid':_tarinfo.uid, 'gid':_tarinfo.gid, 'uname':_tarinfo.uname, 'gname':_tarinfo.gname, 'mode':_tarinfo.mode, 'type': __type, 'target':_tarinfo.linkname, 'mtime':_tarinfo.mtime} _data = self._check_path(__arcinfo, _data) self._missing_files = [_file['path'] for _file in _data] except (tarfile.TarError, EOFError) as _msg: __warn = '. You should investigate for a data corruption.' logging.warning('{}: {}{}'.format(_cfgvalues['path'], str(_msg), __warn)) def __translate_type(self, __arctype): '''Translate the type of the file inside the tar by a generic name ''' __types = {tarfile.REGTYPE: 'f', tarfile.AREGTYPE: 'a', tarfile.CHRTYPE: 'c', tarfile.DIRTYPE: 'd', tarfile.LNKTYPE: 'l', tarfile.SYMTYPE: 's', tarfile.CONTTYPE: 'n', tarfile.BLKTYPE: 'b', tarfile.GNUTYPE_SPARSE: 'g', tarfile.FIFOTYPE: 'o'} return __types[__arctype] def _extract_stored_file(self, __arcfilepath): '''Extract a file from the archive and return a file object''' __file = self._tar.extractfile(__arcfilepath) return __file backupchecker-1.7/backupchecker/checkbackups/checktree.py000066400000000000000000000110551251036066300237060ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check a file tree '''Check a file tree''' import grp import os import pwd import stat from backupchecker.expectedvalues import ExpectedValues from backupchecker.checkbackups.checkarchive import CheckArchive class CheckTree(CheckArchive): '''Check a file tree''' def _main(self, _cfgvalues, _options): '''Main for CheckTree''' _data = [] self.__treepath = _cfgvalues['path'] _data, __arcdata = ExpectedValues(_cfgvalues, _options).data # Save the tree root to determine the relative path in the file tree self.__treepath = self.__treepath for __dirpath, __dirnames, __filenames, in os.walk(_cfgvalues['path']): __dirinfo = os.lstat(__dirpath) __dirmode = stat.S_IMODE(__dirinfo.st_mode) # Translate file type in backupchecker intern file type __type = self.__translate_type(__dirinfo.st_mode) # Extract file data __arcinfo = {'path': os.path.relpath(__dirpath, self.__treepath), 'size': __dirinfo.st_size, 'uid': __dirinfo.st_uid, 'gid': __dirinfo.st_gid, 'mode': __dirmode, 'uname': pwd.getpwuid(__dirinfo.st_uid).pw_name, 'gname': grp.getgrgid(__dirinfo.st_gid).gr_name, 'type': __type} _data = self._check_path(__arcinfo, _data) for __filename in __filenames: __filepath = os.path.join(__dirpath, __filename) __filepath = self._normalize_path(__filepath) self.__fileinfo = os.lstat(__filepath) __filemode = stat.S_IMODE(self.__fileinfo.st_mode) __type = self.__translate_type(self.__fileinfo.st_mode) if __type == 's': __arcinfo = {'path': os.path.relpath(__filepath, self.__treepath), 'size': self.__fileinfo.st_size, 'uid': self.__fileinfo.st_uid, 'gid': self.__fileinfo.st_gid, 'mode': __filemode, 'uname': pwd.getpwuid(self.__fileinfo.st_uid).pw_name, 'gname': grp.getgrgid(self.__fileinfo.st_gid).gr_name, 'type': __type, 'target': os.readlink(__filepath)} else: __arcinfo = {'path': os.path.relpath(__filepath, self.__treepath), 'size': self.__fileinfo.st_size, 'uid': self.__fileinfo.st_uid, 'gid': self.__fileinfo.st_gid, 'mode': __filemode, 'uname': pwd.getpwuid(self.__fileinfo.st_uid).pw_name, 'gname': grp.getgrgid(self.__fileinfo.st_gid).gr_name, 'type': __type} _data = self._check_path(__arcinfo, _data) self._missing_files = [_file['path'] for _file in _data] def __translate_type(self, __mode): '''Translate the type of the file to a generic name''' if stat.S_ISREG(__mode): if self.__fileinfo[stat.ST_NLINK] > 1: return 'l' else: return 'f' elif stat.S_ISDIR(__mode): return 'd' elif stat.S_ISCHR(__mode): return 'c' elif stat.S_ISLNK(__mode): return 's' elif stat.S_BLK(__mode): return 'b' elif stat.S_ISSOCK(__mode): return 'k' elif stat.S_ISFIFO(__mode): return 'o' def _extract_stored_file(self, __arcfilepath): '''extract a file from the tree and return a file object''' if os.path.isabs(__arcfilepath): __file = open(__arcfilepath, 'rb') else: __fullpath = os.path.normpath(os.path.join(self.__treepath, __arcfilepath)) __file = open(__fullpath, 'rb') return __file backupchecker-1.7/backupchecker/checkbackups/checkzip.py000066400000000000000000000110041251036066300235430ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check a zip archive '''Check a zip archive''' import datetime import logging import stat import sys import zipfile from backupchecker.checkbackups.checkarchive import CheckArchive from backupchecker.expectedvalues import ExpectedValues from backupchecker.identifylimitations import IdentifyLimitations class CheckZip(CheckArchive): '''Check a zip archive''' def _main(self, _cfgvalues, _options): '''Main for CheckZip''' _crcerror = '' _data = [] _data, __arcdata = ExpectedValues(_cfgvalues, _options).data ######################### # Test the archive itself ######################### self._archive_checks(__arcdata, _cfgvalues['path']) try: self._zip = zipfile.ZipFile(_cfgvalues['path'], 'r', allowZip64=True) ############################### # Test the files in the archive ############################### if _data: # Identify limitations given the features asked by the user # retrieve every keys of every files in _data configkeys = set() for i in _data: configkeys = configkeys | set(i.keys()) IdentifyLimitations(_cfgvalues['path'], 'zip', configkeys) _crcerror = self._zip.testzip() if _crcerror: # corrupted archive logging.warning('{} has at least one file corrupted:{}'.format(_cfgvalues['path'], _crcerror)) else: _zipinfo = self._zip.infolist() # iterate through the files in the archive for _fileinfo in _zipinfo: _fileinfo.filename = self._normalize_path(_fileinfo.filename) # Prepare a timestamp for the ctime object __dt = _fileinfo.date_time try: __mtime = float(datetime.datetime(__dt[0],__dt[1],__dt[2],__dt[3],__dt[4],__dt[5]).timestamp()) except ValueError as __msg: __warn = 'Issue with timestamp while controlling {} in {}'.format(_fileinfo.filename,_cfgvalues['path']) logging.warning(__warn) __uid, __gid = self.__extract_uid_gid(_fileinfo) __type = self.__translate_type(_fileinfo.external_attr >> 16) __arcinfo = {'path': _fileinfo.filename, 'size': _fileinfo.file_size, 'mode': stat.S_IMODE((_fileinfo.external_attr >> 16)), 'uid': __uid, 'gid': __gid, 'type': __type, 'mtime': __mtime} _data = self._check_path(__arcinfo, _data) self._missing_files = [_file['path'] for _file in _data] except zipfile.BadZipfile as _msg: # corrupted archive __warn = '. You should investigate for a data corruption.' logging.warning('{}: {}{}'.format(_cfgvalues['path'], str(_msg), __warn)) def _extract_stored_file(self, __arcfilepath): '''Extract a file from the archive and return a file object''' __file = self._zip.open(__arcfilepath, 'r') return __file def __extract_uid_gid(self, __binary): '''Extract uid and gid from a zipinfo.extra object (platform dependant)''' __uid, __gid = int.from_bytes(__binary.extra[15:17], 'little'), \ int.from_bytes(__binary.extra[20:22], 'little') return (__uid, __gid) def __translate_type(self, __mode): '''Translate the type of the file to a generic name''' if stat.S_ISREG(__mode): return 'f' elif stat.S_ISDIR(__mode): return 'd' backupchecker-1.7/backupchecker/checkfilelist.py000066400000000000000000000032721251036066300221360ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Check the hash of the list of files by comparing it to the expected value '''Check the hash of the list of files by comparing it to the expected value''' import sys from backupchecker.checkhashes import get_hash class CheckFileList(object): '''Check the hash of the list of files by comparing it to the expected value''' def __init__(self, __bckconf): '''The constructor of the CheckFileList class.''' self.__main(__bckconf) def __main(self, __bckconf): '''The main for the CheckFileList class''' if 'sha512' in __bckconf and __bckconf['sha512'] != None: __hashtype = 'sha512' with open(__bckconf['files_list'], 'rb') as __conf: __realhash = get_hash(__conf, __hashtype) if __realhash != __bckconf['sha512']: print('The list of files {} should have a {} hash sum of {}. Current value: {}'.format(__bckconf['files_list'], __hashtype, __bckconf['sha512'], __realhash)) sys.exit(1) backupchecker-1.7/backupchecker/checkhashes.py000066400000000000000000000017101251036066300215710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Get the hash of a file '''Get the hash of a file''' import hashlib def get_hash(__arcfile, __hashtype): '''return the hash of a file.''' __res = getattr(hashlib, __hashtype)(__arcfile.read()).hexdigest() __arcfile.close() return __res backupchecker-1.7/backupchecker/cliparse.py000066400000000000000000000216661251036066300211360ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Retrieve the command line options '''Retrieve the command line options''' import logging from argparse import ArgumentParser import os import sys from hashlib import algorithms_guaranteed from backupchecker.applogger import AppLogger class CliParse: '''Retrieve the command line options''' def __init__(self): '''The constructor for the CliParse class.''' self._options = () backupcheckerdescription = 'Fully automated backup checker' backupcheckerepilog = 'For more information: http://www.backupcheckerproject.org' __parser = ArgumentParser(prog='backupchecker', description=backupcheckerdescription, epilog=backupcheckerepilog) self.__define_options(__parser) def __define_options(self, __parser): '''Define the options''' # define mutually exclusive arguments __group = __parser.add_mutually_exclusive_group(required=True) __group.add_argument('-c', '--configpath', dest='confpath', action='store', default=os.getcwd(), help='the path to the configurations', metavar='DIR') __parser.add_argument('-C', '--output-conf-dir', dest='confoutput', action='store', default='', help='the directory to store the configuration file', metavar='DIR') __parser.add_argument('-d', '--delimiter', dest='delimiter', action='store', default='|', help='delimiter of the fields for the list of files', metavar='DELIMITER') __parser.add_argument('-E', '--exceptions-file', dest='parsingexceptions', action='store', default='', help='the file with exceptions to normal Brebis behaviour while generating configuration files', metavar='FILE') __group.add_argument('-g', '--gen-list', dest='genlist', action='store_true', help='generate a list of files inside a backup') __group.add_argument('-G', '--gen-full', dest='genfull', action='store_true', help='generate the configuration file and the list of files for the backup') __parser.add_argument('-H', '--hashes', dest='getallhashes', action='store_true', help='generate the hash sum of each encountered file in the backup') __parser.add_argument('--hashtype', dest='hashtype', action='store', default='', help='the type of the hash sum to use while generating configurations for the archive', metavar='HASHTYPE') __parser.add_argument('-l', '--log', dest='logfile', action='store', default=os.path.join(os.getcwd(), 'a.out'), help='the log file', metavar='FILE') __parser.add_argument('-L', '--output-list-dir', dest='listoutput', action='store', default='', help='the directory to store the list of files inside an archive or tree', metavar='DIR') __parser.add_argument('-O', '--output-list-and-conf-dir', dest='fulloutput', action='store', default='', help='the directory to store the configuration file and the list of files inside an archive or tree', metavar='DIR') __parser.add_argument('-n', '--configuration-name', dest='confname', action='store', help='the name of the configuration files') __parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.7', help='print the version of this program and exit') __parser.add_argument('archives', nargs='*', help='archives to check') __args = __parser.parse_args() self.__verify_options(__args) def __verify_options(self, __options): '''Verify the options given on the command line''' __options.isastream = False # check if the archives exist for __i, __path in enumerate(__options.archives): # the input is a stream if __i == 0 and __path == '-': __options.isastream = True __options.archives[__i] = os.path.abspath(os.getcwd()) break if not os.path.exists(__path): print('{} : no file or directory at this path. Exiting.'.format(__path)) sys.exit(1) # using absolute path in order to be consistent __path = os.path.abspath(__path) # if the path exists, check if it is a regular file, a link or # a directory otherwise exits if not os.path.isfile(__path) and not os.path.isdir(__path): print('{}: not a file or a directory. Exiting.'.format(__path)) sys.exit(1) else: __options.archives[__i] = __path # verify option compatibilites if __options.isastream and __options.getallhashes: print('Options are not compatible, not possible to compute the hash of files within an archive from a stream') sys.exit(1) # Check the logfile __options.logfile = __options.logfile.strip() __logdir = os.path.split(__options.logfile)[0] if __logdir and not os.path.exists(__logdir): print('The directory where to write the log file {} does not exist'.format(__logdir)) sys.exit(1) # Check the exceptions parsing file __parsingexceptions = os.path.split(__options.parsingexceptions)[0] if __parsingexceptions and not os.path.exists(__parsingexceptions): print('The file with exceptions to comply while generating configurations file {} does not exist'.format(__parsingexceptions)) sys.exit(1) # Check the configuration output directory __confoutput = __options.confoutput if __confoutput and not os.path.exists(__confoutput): print('The directory where to write the configuration file {} does not exist'.format(__confoutput)) sys.exit(1) # Check the directory where the list of files is written __listoutput= __options.listoutput if __listoutput and not os.path.exists(__listoutput): print('The directory where to write the list of files inside the archive {} does not exist'.format(__listoutput)) sys.exit(1) # Check the directory where the list of files and the configuration are written __fulloutput= __options.fulloutput if __fulloutput and not os.path.exists(__fulloutput): print('The directory where to write the list of files inside the archive and the configuration file {} does not exist'.format(__fulloutput)) sys.exit(1) # using absolute path in order to be consistent __options.logfile = os.path.abspath(__options.logfile) # Configure the logger AppLogger(__options.logfile) # Verify if --gen-list option is not invoked before calling configuration path control if not __options.genlist: # Check the configuration directory or file if not os.path.exists(__options.confpath): print('The configuration directory or file does not exist: {}'.format(__options.confpath)) sys.exit(1) __options.confpath = os.path.abspath(__options.confpath) # Check that the hash type for the option --hashtype is available if __options.hashtype and (__options.hashtype not in algorithms_guaranteed): print('The hash type {} you specified is not available'.format(__options.hashtype)) sys.exit(1) # strip blank space leading some fields from the command line using python subprocess if __options.confname: __options.confname = __options.confname.strip() if __options.listoutput: __options.listoutput = __options.listoutput.strip() if __options.confoutput: __options.confoutput = __options.confoutput.strip() if __options.fulloutput: __options.fulloutput = __options.fulloutput.strip() self.__options = __options @property def options(self): '''Return the command line options''' return self.__options backupchecker-1.7/backupchecker/configurations.py000066400000000000000000000162151251036066300223600ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #Parse the configurations '''Parse the configurations''' import sys from configparser import RawConfigParser from configparser import ParsingError, NoSectionError, NoOptionError import os from backupchecker.placeholder import PlaceHolder class Configurations: '''Retrieve the different configurations''' def __init__(self, __confpath, __isastream): '''The constructor of the Configurations class. __confpath -- the path to the directory with the configuration files ''' self.__configs = {} self.__parse_configurations(__confpath, __isastream) def __parse_configurations(self, __confpath, __isastream): '''Parse the different configurations''' try: # check if the path to the confs is a directory or a file if os.path.isdir(__confpath): __confs = [__file for __file in os.listdir(__confpath) if __file.endswith('.conf')] else: __confpath, __conft = os.path.split(__confpath) __confs = [__conft] # check if at least one configuration file is availabe if not __confs: __errmsg = 'Could not find any .conf file in {}' print(__errmsg.format(__confpath)) sys.exit(1) # parse the configuration files for __conf in __confs: __currentconf = {} __config = RawConfigParser() __fullconfpath = os.path.join('/'.join([__confpath, __conf])) try: with open(__fullconfpath, 'r') as __file: # strip GPG/PGP header and footer if it is a signed file __stripres = self.strip_gpg_header(__file, __fullconfpath) __config.read_string(__stripres) except UnicodeDecodeError as __err: __msg = 'Error while parsing the configuration file {}:'.format(__fullconfpath) print(__msg) print(__err) sys.exit(1) # Common information for the backups # The name of the backup __currentconf['name'] = __config.get('main', 'name') ### The type of the backups __currentconf['type'] = __config.get('main', 'type') # Common information for the archives ### The archive path __confsettings = [{'main': 'path'}, ### The list of the expected files in the archive {'main': 'files_list'}, ### The delimiter to use in the list of files {'main': 'delimiter'}, ### The hash sum to identify the list of files {'main': 'sha512'} ] for __element in __confsettings: __key, __value = __element.popitem() if __config.has_option(__key, __value): __currentconf[__value] = __config.get( __key, __value) else: __currentconf[__value] = __config.set( __key, __value, '') # Checking the information ### Check the paths in the configuration __confkeys= ('path', 'files_list') for __confkey in __confkeys: if __confkey == 'path' and __isastream: break else: __path = __currentconf[__confkey] if not __path: print('A path is missing in {}.'.format(__config.get('main', 'name'))) sys.exit(1) if not os.path.isabs(__path): __path = os.path.normpath(os.path.join(os.path.abspath(__confpath), __path)) __currentconf[__confkey] = __path # placeholder should be here plh = PlaceHolder(__currentconf[__confkey]) __currentconf[__confkey] = plh.realpath # test if the path exists if not os.path.exists(__currentconf[__confkey]): print('{} does not exist.'.format(__path)) sys.exit(1) # If the backup type is archive, path must not be a directory if not __isastream and __currentconf['type'] == 'archive' and os.path.isdir(__currentconf['path']): __errmsg = '{} is a directory but appears as an archive in configuration {}.' print(__errmsg.format(__currentconf['path'], __config.get('main', 'name'))) sys.exit(1) # check if the name of the conf does not exist yet if __config.get('main', 'name') in self.__configs: __errmsg = 'The configuration name in {} already exists. Please rename it.' print(__errmsg.format(__fullconfpath)) sys.exit(1) else: self.__configs[__config.get('main', 'name')] = __currentconf except (ParsingError, NoSectionError, NoOptionError, OSError, IOError) as __err: print(__err) sys.exit(1) def strip_gpg_header(self, __file, __confpath): '''strip the GPG/PGP header and footer if it is a signed file''' __pgpheader = '-----BEGIN PGP SIGNED MESSAGE-----\n' __pgpfooter = '-----BEGIN PGP SIGNATURE-----\n' __pgpfootermissing = 'Found PGP header but could not find PGP footer for {}' __pgpheadermissing = 'Found PGP footer but could not find PGP header for {}' __content = __file.read() if __pgpheader in __content and __pgpfooter not in __content: print(__pgpfootermissing.format(__confpath)) sys.exit(1) if __pgpheader not in __content and __pgpfooter in __content: print(__pgpheadermissing.format(__confpath)) sys.exit(1) if __pgpheader in __content and __pgpfooter: __content = __content[__content.index('[main]'):] __content = __content[0:__content.index(__pgpfooter)] return __content @property def configs(self): '''Return the different configurations parameters''' return self.__configs backupchecker-1.7/backupchecker/exceptionsparsing.py000066400000000000000000000053211251036066300230670ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Extract from the parsing exceptions file the exceptions to comply with '''Extract from the parsing exceptions file the exceptions to comply with''' import configparser from hashlib import algorithms_guaranteed import os.path import sys class ExceptionsParsing: '''The ExceptionsParsing class''' def __init__(self, __filepath, __delimiter): '''The constructor for the ExceptionsParsing class ''' self.__parsingexceptions = {} self.__delimiter = __delimiter self.__main(__filepath) def __main(self, __filepath): '''Main for ExceptionsFile class''' try: with open(__filepath, 'r') as __exceptfile: self.__retrieve_data(__exceptfile) except (configparser.Error, IOError, OSError) as __err: print(__err) sys.exit(1) def __retrieve_data(self, __file): '''Retrieve data from the expected files''' # Using default delimiter __config = configparser.ConfigParser(delimiters=(self.__delimiter,)) __config.optionxform = str __config.read_file(__file) if __config.has_section('files'): __files = __config.items('files') for __fileitems in __files: if __fileitems[0].endswith('/'): self.__parsingexceptions[__fileitems[0][:-1]] = '' __key = __fileitems[0][:-1] else: self.__parsingexceptions[__fileitems[0]] = '' __key = __fileitems[0] if len(__fileitems) == 2: for __item in __fileitems[1].split(' '): # Test if a hash is provided for this file for __hash in algorithms_guaranteed: if __item.startswith('{}'.format(__hash)): self.__parsingexceptions[__key] = __item @property def exceptions(self): '''Return the parsing exceptions''' return self.__parsingexceptions backupchecker-1.7/backupchecker/expectedvalues.py000066400000000000000000000252361251036066300223520ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Extract information about the archive (if it is one) and expected saved files '''Extract information about the archive (if it is one) and expected saved files''' import logging import os import sys import configparser from configparser import ConfigParser from hashlib import algorithms_guaranteed from backupchecker.checkfilelist import CheckFileList class ExpectedValues(object): '''Extract information about the archive (if it is one) and expected saved files. ''' def __init__(self, __bckconf, __options): '''The constructor of the ExpectedValues class. ''' self.__bckfiles= [] self.__arcdata = {} __path = __bckconf['files_list'] # Define delimiter value if not __bckconf['delimiter']: __delimiter = __options.delimiter else: __delimiter = __bckconf['delimiter'] # test if the expected value of the hash of the list of file is correct CheckFileList(__bckconf) # launch the main of the class self.__main(__path, __delimiter) def __main(self, __path, __delimiter): '''Main of the ExpectedValues class''' try: with open(__path, 'r') as __file: self.__retrieve_data(__file, __path, __delimiter) except (configparser.Error, IOError, OSError) as __err: print(__err) sys.exit(1) def __retrieve_data(self, __file, __path, __delimiter): '''Retrieve data from the expected files''' # Using default delimiter __config = ConfigParser(delimiters=(__delimiter)) __config.optionxform = str __config.read_file(__file) ######################### # Test the archive itself ######################### if __config.has_section('archive'): __archive = __config.items('archive') # Testing the mtime of the archive if 'mtime' in __config['archive']: self.__arcdata['mtime'] = float(__config['archive']['mtime']) # Testing the size of the archive if 'size' in __config['archive']: ### Test if the equality is required if __config['archive']['size'].startswith('='): self.__arcdata['equals'] = self.__convert_arg(__config['archive']['size']) ### Test if bigger than is required elif __config['archive']['size'].startswith('>'): self.__arcdata['biggerthan'] = self.__convert_arg(__config['archive']['size']) ### Test if smaller than is required elif __config['archive']['size'].startswith('<'): self.__arcdata['smallerthan'] = self.__convert_arg(__config['archive']['size']) # Test the mode of the archive if 'mode' in __config['archive']: if len(__config['archive']['mode']) < 3 or len(__config['archive']['mode']) > 4: logging.warning('{}: Wrong format for the mode.'.format(__path)) else: self.__arcdata['mode'] = __config['archive']['mode'] try: # Testing the uid of the archive if 'uid' in __config['archive']: self.__arcdata['uid'] = int(__config['archive']['uid']) # Testing the gid of the archive if 'gid' in __config['archive']: self.__arcdata['gid'] = int(__config['archive']['gid']) # Testing the owner of the archive if 'uname' in __config['archive']: self.__arcdata['uname'] = __config['archive']['uname'] # Testing the group owner of the archive if 'gname' in __config['archive']: self.__arcdata['gname'] = __config['archive']['gname'] except ValueError as __msg: logging.warning(__msg) # Testing the hash of the archive for __hash in algorithms_guaranteed: if __hash in __config['archive']: self.__arcdata['hash'] = {'hashtype':__hash, 'hashvalue':__config['archive'][__hash]} ###################### # Test expected files ###################### if __config.has_section('files'): __files = __config.items('files') for __fileitems in __files: __data = {} __data['path'] = __fileitems[0] if __data['path'].endswith('/'): __data['path'] = __data['path'][:-1] if len(__fileitems) == 2: for __item in __fileitems[1].split(' '): try: # Testing the items for an expected file if __item == 'unexpected': __data['unexpected'] = True # The uid of the expected file elif __item.startswith('uid{}'.format(__delimiter)): __data['uid'] = int(__item.split(__delimiter)[-1]) # The gid of the expected file elif __item.startswith('gid{}'.format(__delimiter)): __data['gid'] = int(__item.split(__delimiter)[-1]) # The owner name of the expected file elif __item.startswith('owner{}'.format(__delimiter)): __data['uname'] = __item.split(__delimiter)[-1] # The gname of the expected file elif __item.startswith('group{}'.format(__delimiter)): __data['gname'] = __item.split(__delimiter)[-1] # The mode of the expected file elif __item.startswith('mode{}'.format(__delimiter)): __mode =__item.split(__delimiter)[-1] if len(__mode) < 3 or len(__mode) > 4: logging.warning('{}: Wrong format for the mode.'.format(__data['path'])) else: __data['mode'] = __mode # Testing the type of the file elif __item.startswith('type{}'.format(__delimiter)): __type =__item.split(__delimiter)[-1] ### f for file, c for character, d for directory ### s for symbolink link, b for block, o for fifo, ### k for socket, l for hard link __types = ('f','c','d','s','b','o','k', 'l') if __type not in __types: logging.warning('{}: Unknown type {} for file parameter'.format(__data['path'], __type)) else: __data['type'] = __type # Testing the mtime of the file elif __item.startswith('mtime{}'.format(__delimiter)): try: __data['mtime'] = float(__item.split(__delimiter)[-1]) except ValueError as __msg: logging.warning(__msg) __data['mtime'] = 0.0 # Testing the size of the file ### Test if the equality is required elif __item.startswith('='): __data['equals'] = self.__convert_arg(__item) ### Test if bigger than is required elif __item.startswith('>'): __data['biggerthan'] = self.__convert_arg(__item) ### Test if smaller than is required elif __item.startswith('<'): __data['smallerthan'] = self.__convert_arg(__item) # Testing if there is a target for this file elif __item.startswith('target{}'.format(__delimiter)): if __data['type'] and (__data['type'] == 'l' or __data['type'] == 's'): __data['target'] = __item.split(__delimiter)[-1] else: __errmsg = 'The list of your file contains a target field although the file is not a symlink or a hard link' print(__errmsg) sys.exit(1) # Test if a hash is provided for this file for __hash in algorithms_guaranteed: if __item.startswith('{}{}'.format(__hash, __delimiter)): __hashtype, __hashvalue = __item.split(__delimiter) __data['hash'] = {'hashtype':__hashtype, 'hashvalue':__hashvalue} except ValueError as __msg: logging.warning(__msg) self.__bckfiles.append(__data) def __convert_arg(self, __arg): '''Convert the given file length to bytes''' __res = 0 __arg = ''.join([__arg[:-1], __arg[-1].lower()]) try: for __value, __power in [('k', 1),('m', 2),('g', 3),('p', 4), ('e', 5),('z', 6),('y', 7)]: if __arg.endswith(__value): __res = int(__arg[1:-1]) * 1024**__power if __res == 0: __res = int(__arg[1:]) except ValueError as __msg: logging.warning(__msg) __res = 0 finally: return __res @property def data(self): '''Return the paths of the expected files in the archive''' return self.__bckfiles, self.__arcdata backupchecker-1.7/backupchecker/generatelist/000077500000000000000000000000001251036066300214355ustar00rootroot00000000000000backupchecker-1.7/backupchecker/generatelist/__init__.py000066400000000000000000000000001251036066300235340ustar00rootroot00000000000000backupchecker-1.7/backupchecker/generatelist/generatelist.py000066400000000000000000000056261251036066300245060ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Generate a list of files in a backup '''Generate a list of files in a backup''' import logging import os.path import sys from backupchecker.checkhashes import get_hash class GenerateList: '''The GenerateList class''' def _generate_list(self, __listconfinfo): '''Write the list of file information inside the archive in a file''' try: with open(__listconfinfo['arclistpath'], 'w') as __file: __file.writelines(__listconfinfo['listoffiles']) except (OSError, IOError) as __msg: print(__msg) sys.exit(1) except UnicodeEncodeError as __msg: print(__msg) print('The encoding of the archive and the one of this system differs.\nThe result will not be reliable. Aborting.') sys.exit(1) def _generate_conf(self, __confinfo, __isastream=False): '''Write the configuration file for the archive''' if __isastream: __confcontent = '[main]\nname={name}\ntype={type}\nfiles_list={listoffiles}\nsha512={sha512}\n'.format(name=__confinfo['arcname'],type=__confinfo['arctype'],listoffiles=__confinfo['arclistpath'], sha512=__confinfo['sha512']) else: __confcontent = '[main]\nname={name}\ntype={type}\npath={path}\nfiles_list={listoffiles}\nsha512={sha512}\n'.format(name=__confinfo['arcname'],type=__confinfo['arctype'],path=__confinfo['arcpath'],listoffiles=__confinfo['arclistpath'], sha512=__confinfo['sha512']) try: with open(__confinfo['arcconfpath'], 'w') as __file: __file.write(__confcontent) except (OSError, IOError) as __msg: print(__msg) sys.exit(1) def _normalize_path(self, __path): '''Remove last slash of a directory path if present''' if __path.endswith('/'): return __path[:-1] else: return __path def _get_list_hash(self, __listpath): '''Get the hash sum of the list of files''' try: with open(__listpath, 'rb') as __file: __listhash = get_hash(__file, 'sha512') except (OSError, IOError) as __msg: print(__msg) sys.exit(1) return __listhash backupchecker-1.7/backupchecker/generatelist/generatelistforbzip2.py000066400000000000000000000167231251036066300261640ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import bz2 import fnmatch import os import os.path import stat from backupchecker.checkhashes import get_hash from backupchecker.generatelist.generatelist import GenerateList # Generate a list of files from a bzip2 archive '''Generate a list of files from a bzip2 archive''' class GenerateListForBzip2(GenerateList): '''Generate a list of files from a bzip2 archive''' def __init__(self, __genparams): '''The constructor for the GenerateListForBzip2 class''' __arcpath = __genparams['arcpath'] __delimiter = __genparams['delimiter'] self._genfull = __genparams['genfull'] self.__listoutput = __genparams['listoutput'] self.__confoutput = __genparams['confoutput'] self.__fulloutput = __genparams['fulloutput'] self.__getallhashes = __genparams['getallhashes'] self.__hashtype = __genparams['hashtype'] self.__parsingexceptions = __genparams['parsingexceptions'] self.__confname = __genparams['confname'] __listoffiles = ['[files]\n'] __filetype = 'f' __filehash = get_hash(bz2.BZ2File(__arcpath, 'r'), 'md5') if self.__getallhashes: if not self.__hashtype: __onelinewithhash = '{value}{delimiter} type{delimiter}{value} md5{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) else: __onelinewithhash = '{value}{delimiter} type{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__hashtype, delimiter=__delimiter) __listoffiles.append(__onelinewithhash.format( os.path.split(__arcpath)[-1][:-4], __filetype, __filehash)) else: if self.__parsingexceptions : for __file in self.__parsingexceptions: if fnmatch.fnmatch(os.path.split(__arcpath)[-1][:-4], __file): __filehash = get_hash(bz2.BZ2File(__arcpath, 'r'), self.__parsingexceptions[__file]) __onelinewithhash = '{value}{delimiter} type{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__parsingexceptions[__file], delimiter=__delimiter) __listoffiles.append(__onelinewithhash.format( os.path.split(__arcpath)[-1][:-4], __filetype, __filehash)) else: __onelinewithouthash = '{value}{delimiter} type{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) __listoffiles.append(__onelinewithouthash.format( os.path.split(__arcpath)[-1][:-4], __filetype)) else: __onelinewithouthash = '{value}{delimiter} type{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) __listoffiles.append(__onelinewithouthash.format( os.path.split(__arcpath)[-1][:-4], __filetype)) # define the flexible file list path __arcwithext = os.path.split(''.join([__arcpath[:-3], 'list']))[1] if self.__listoutput: if self.__confname: # --gen-list and --output-list-dir and --configuration-name __arclistpath = os.path.join(self.__listoutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --output-list-dir __arclistpath = os.path.join(self.__listoutput, __arcwithext) elif self.__fulloutput: if self.__confname: # --gen-list and --output-conf-and-list-dir and --configuration-name __arclistpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --output-conf-and-list-dir __arclistpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-list only if self.__confname: __arc = os.path.dirname(__arcpath) __arclistpath = os.path.join(__arc, '.'.join([self.__confname, 'list'])) else: __arclistpath = ''.join([__arcpath[:-3], 'list']) # call the method to write information in a file __listconfinfo = {'arclistpath': __arclistpath, 'listoffiles': __listoffiles} self.__lci = __listconfinfo self._generate_list(__listconfinfo) # call the method to write the configuration file if --gen-full was required if self._genfull: # generate the hash sum of the list of files __listhashsum = self._get_list_hash(__listconfinfo['arclistpath']) # define the flexible configuration file path __arcwithext = os.path.split(''.join([__arcpath[:-3], 'conf']))[1] if self.__confoutput: if self.__confname: # --gen-full and --output-conf-dir and --configuration-name __arcconfpath = os.path.join(self.__confoutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-conf-dir __arcconfpath = os.path.join(self.__confoutput, __arcwithext) elif self.__fulloutput: if self.__confname: # --gen-full and --output-conf-and-list-dir and --configuration-name __arcconfpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-conf-and-list-dir __arcconfpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-full only if self.__confname: __arc = os.path.dirname(__arcpath) __arcconfpath = os.path.join(__arc, '.'.join([self.__confname, 'conf'])) else: __arcconfpath = ''.join([__arcpath[:-3], 'conf']) # user-define name of the archive if self.__confname: __arcname = self.__confname else: __arcname = os.path.basename(__arcpath[:-4]) __confinfo = {'arcname': __arcname, 'arcpath': __arcpath, 'arcconfpath': __arcconfpath, 'arclistpath': __listconfinfo['arclistpath'], 'arctype': 'archive', 'sha512': __listhashsum} self.__ci = __confinfo self._generate_conf(__confinfo) backupchecker-1.7/backupchecker/generatelist/generatelistforgzip.py000066400000000000000000000226401251036066300261020ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import fnmatch import gzip import os import os.path from backupchecker.checkhashes import get_hash from backupchecker.generatelist.generatelist import GenerateList # Generate a list of files from a gzip archive '''Generate a list of files from a gzip archive''' class GenerateListForGzip(GenerateList): '''Generate a list of files from a gzip archive''' def __init__(self, __genparams): '''The constructor for the GenerateListForGzip class''' __arcpath = __genparams['arcpath'] __delimiter = __genparams['delimiter'] self._genfull = __genparams['genfull'] self.__confoutput = __genparams['confoutput'] self.__listoutput = __genparams['listoutput'] self.__fulloutput = __genparams['fulloutput'] self.__getallhashes = __genparams['getallhashes'] self.__hashtype = __genparams['hashtype'] self.__parsingexceptions = __genparams['parsingexceptions'] self.__confname = __genparams['confname'] __arcstat = os.stat(__arcpath) __listoffiles = ['[archive]\nmtime{} {}\n\n[files]\n'.format(__delimiter,__arcstat.st_mtime)] __fileinfo = os.lstat(__arcpath) __filetype = 'f' if not self.__hashtype: __filehash = get_hash(gzip.open(__arcpath, 'rb'), 'md5') else: __filehash = get_hash(gzip.open(__arcpath, 'rb'), self.__hashtype) with open(__arcpath, 'rb') as __gzip: __filesize = self.__extract_size(__gzip) __filename = self.__extract_initial_filename(__gzip, os.path.split(__arcpath)[-1][:-2]) if self.__getallhashes: if not self.__hashtype: __onelinewithhash = '{value}{delimiter} ={value} type{delimiter}{value} md5{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) else: __onelinewithhash = '{value}{delimiter} ={value} type{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__hashtype, delimiter=__delimiter) __listoffiles.append(__onelinewithhash.format( __filename, str(__filesize), __filetype, __filehash)) else: if self.__parsingexceptions : for __file in self.__parsingexceptions: if fnmatch.fnmatch(__filename, __file): __filehash = get_hash(gzip.open(__arcpath, 'rb'), self.__parsingexceptions[__file]) __onelinewithhash = '{value}{delimiter} ={value} type{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__parsingexceptions[__file], delimiter=__delimiter) __listoffiles.append(__onelinewithhash.format( __filename, str(__filesize), __filetype, __filehash)) else: __onelinewithouthash = '{value}{delimiter} ={value} type{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) __listoffiles.append(__onelinewithouthash.format( __filename, str(__filesize), __filetype)) else: __onelinewithouthash = '{value}{delimiter} ={value} type{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) __listoffiles.append(__onelinewithouthash.format( __filename, str(__filesize), __filetype)) # define the flexible file list path __arcwithext = os.path.split(''.join([__arcpath[:-2], 'list']))[1] if self.__listoutput: if self.__confname: # --gen-list and --list-output-dir and --configuration-name __arclistpath = os.path.join(self.__listoutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --list-output-dir __arclistpath = os.path.join(self.__listoutput, __arcwithext) elif self.__fulloutput: if self.__confname: # --gen-list and --output-list-and-conf-dir and --configuration-name __arclistpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --output-list-and-conf-dir __arclistpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-list only if self.__confname: __arc = os.path.dirname(__arcpath) __arclistpath = os.path.join(__arc, '.'.join([self.__confname, 'list'])) else: __arclistpath = ''.join([__arcpath[:-2], 'list']) # call the method to write information in a file __listconfinfo = {'arclistpath': __arclistpath, 'listoffiles': __listoffiles} self._generate_list(__listconfinfo) # call the method to write the configuration file if --gen-full was required if self._genfull: # generate the hash sum of the list of files __listhashsum = self._get_list_hash(__listconfinfo['arclistpath']) # define the flexible configuration file path __arcwithext = os.path.split(''.join([__arcpath[:-2], 'conf']))[1] if self.__confoutput: if self.__confname: # --gen-full and --output-conf-dir and --configuration-name __arcconfpath = os.path.join(self.__confoutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-conf-dir __arcconfpath = os.path.join(self.__confoutput, __arcwithext) elif self.__fulloutput: if self.__confname: # --gen-full and --output-list-and-conf-dir and --configuration-name __arcconfpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-list-and-conf-dir __arcconfpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-full only if self.__confname: __arc = os.path.dirname(__arcpath) __arcconfpath = os.path.join(__arc, '.'.join([self.__confname, 'conf'])) else: __arcconfpath = ''.join([__arcpath[:-2], 'conf']) # the name of the backup inside the configuration file if self.__confname: __arcname = self.__confname else: __arcname = os.path.basename(__arcpath[:-3]) __confinfo = {'arcname': __arcname, 'arcpath': __arcpath, 'arcconfpath': __arcconfpath, 'arclistpath': __listconfinfo['arclistpath'], 'arctype': 'archive', 'sha512': __listhashsum} self._generate_conf(__confinfo) def __extract_size(self, __binary): '''Extract the size of the uncompressed file inside the archive - 4 last bytes of the archive ''' __binary.seek(-4, 2) return int.from_bytes(__binary.read(), 'little') def __extract_initial_filename(self, __binary, __arcname): '''Extract initial filename of the uncompressed file''' # We move the cursor on the 4th byte __binary.seek(3,0) # Read a byte __flag = __binary.read(1) # Store flag byte __intflag = int.from_bytes(__flag,'little') # If the extra field flag is on, extract the size of its data field __extralen = 0 if __intflag & 4 != 0: __binary.seek(9,0) __extralenbyte = __binary.read(2) __extralen = int.from_byte(__extralenbyte,'little') + 2 # If the flag "name" is on, skip to it and read the associated content __binaryname = b'' if __intflag & 8 != 0: __binary.seek(10 + __extralen) # until zero byte is found, read the initial filename in bytes while True: __newbyte = __binary.read(1) if __newbyte != b'\x00': __binaryname += __newbyte else: break return __binaryname.decode('latin1') else: return __arcname backupchecker-1.7/backupchecker/generatelist/generatelistforlzma.py000066400000000000000000000155401251036066300260750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import fnmatch import lzma import os import os.path import stat from backupchecker.checkhashes import get_hash from backupchecker.generatelist.generatelist import GenerateList # Generate a list of files from a lzma archive '''Generate a list of files from a lzma archive''' class GenerateListForLzma(GenerateList): '''Generate a list of files from a lzma archive''' def __init__(self, __genparams): '''The constructor for the GenerateListForlzma class''' __arcpath = __genparams['arcpath'] __delimiter = __genparams['delimiter'] self._genfull = __genparams['genfull'] self.__confoutput = __genparams['confoutput'] self.__listoutput = __genparams['listoutput'] self.__fulloutput = __genparams['fulloutput'] self.__getallhashes = __genparams['getallhashes'] self.__hashtype = __genparams['hashtype'] self.__parsingexceptions = __genparams['parsingexceptions'] self.__confname = __genparams['confname'] __listoffiles = ['[files]\n'] __filetype = 'f' __filehash = get_hash(lzma.LZMAFile(__arcpath, 'r'), 'md5') if self.__getallhashes: if not self.__hashtype: __onelinewithhash = '{value}{delimiter} type{delimiter}{value} md5{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) else: __onelinewithhash = '{value}{delimiter} type{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__hashtype, delimiter=__delimiter) __listoffiles.append(__onelinewithhash.format( os.path.split(__arcpath)[-1][:-3], __filetype, __filehash)) else: if self.__parsingexceptions: for __file in self.__parsingexceptions: if fnmatch.fnmatch(os.path.split(__arcpath)[-1][:-3], __file): __filehash = get_hash(lzma.LZMAFile(__arcpath, 'r'), self.__parsingexceptions[__file]) __onelinewithhash = '{value}{delimiter} type{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__parsingexceptions[__file], delimiter=__delimiter) __listoffiles.append(__onelinewithhash.format( os.path.split(__arcpath)[-1][:-3], __filetype, __filehash)) else: __onelinewithouthash = '{value}{delimiter} type{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) __listoffiles.append(__onelinewithouthash.format( os.path.split(__arcpath)[-1][:-3], __filetype)) else: __onelinewithouthash = '{value}{delimiter} type{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) __listoffiles.append(__onelinewithouthash.format( os.path.split(__arcpath)[-1][:-3], __filetype)) # define the flexible file list path __arcwithext = os.path.split(''.join([__arcpath[:-2], 'list']))[1] if self.__listoutput: if self.__confname: __arclistpath = os.path.join(self.__listoutput, '.'.join([self.__confname, 'list'])) else: __arclistpath = os.path.join(self.__listoutput, __arcwithext) elif self.__fulloutput: if self.__confname: __arclistpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'list']) ) else: __arclistpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-list only if self.__confname: __arc = os.path.dirname(__arcpath) __arclistpath = os.path.join(__arc, '.'.join([self.__confname, 'list']) ) else: __arclistpath = ''.join([__arcpath[:-2], 'list']) # call the method to write information in a file __listconfinfo = {'arclistpath': __arclistpath, 'listoffiles': __listoffiles} self._generate_list(__listconfinfo) # call the method to write the configuration file if --gen-full was required if self._genfull: # generate the hash sum of the list of files __listhashsum = self._get_list_hash(__listconfinfo['arclistpath']) # define the flexible configuration file path __arcwithext = os.path.split(''.join([__arcpath[:-2], 'conf']))[1] if self.__confoutput: if self.__confname: __arcconfpath = os.path.join(self.__confoutput, '.'.join([self.__confname, 'conf'])) else: __arcconfpath = os.path.join(self.__confoutput, __arcwithext) elif self.__fulloutput: if self.__confname: __arcconfpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'conf'])) else: __arcconfpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-full only if self.__confname: __arc = os.path.dirname(__arcpath) __arcconfpath = os.path.join(__arc, '.'.join([self.__confname, 'conf']) ) else: __arcconfpath = ''.join([__arcpath[:-2], 'conf']) # user-define change of the name of the archive if self.__confname: __arcname = self.__confname else: __arcname = os.path.basename(__arcpath[:-3]) __confinfo = {'arcname': __arcname, 'arcpath': __arcpath, 'arcconfpath': __arcconfpath, 'arclistpath': __listconfinfo['arclistpath'], 'arctype': 'archive', 'sha512': __listhashsum} self._generate_conf(__confinfo) backupchecker-1.7/backupchecker/generatelist/generatelistfortar.py000066400000000000000000000464231251036066300257240ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Generate a list of files from a tar archive '''Generate a list of files from a tar archive''' import fnmatch import logging import os import os.path import sys import tarfile from backupchecker.generatelist.generatelist import GenerateList from backupchecker.checkhashes import get_hash class GenerateListForTar(GenerateList): '''Generate a list of files from a tar archive''' def __init__(self, __genparams): '''The constructor for the GenerateListForTar class''' self.__arcpath = __genparams['arcpath'] self.__delimiter = __genparams['delimiter'] self._genlist = __genparams['genlist'] self._genfull = __genparams['genfull'] self.__listoutput = __genparams['listoutput'] self.__confoutput = __genparams['confoutput'] self.__fulloutput = __genparams['fulloutput'] self.__getallhashes = __genparams['getallhashes'] self.__hashtype = __genparams['hashtype'] self.__parsingexceptions = __genparams['parsingexceptions'] self.__isastream = __genparams['isastream'] self.__confname = __genparams['confname'] try: if self.__isastream: self.__tarstreamname = 'tarstream' self.__streampath = os.path.join(self.__arcpath, self.__tarstreamname) __tar = tarfile.open(mode='r|*', fileobj=sys.stdin.buffer) else: __tar = tarfile.open(self.__arcpath, 'r') self.__main(__tar) except (tarfile.TarError, EOFError) as _msg: __warn = '. You should investigate for a data corruption.' logging.warning('{}: {}{}'.format(self.__arcpath, str(_msg), __warn)) def __main(self, __tar): '''Main for the GenerateListForTar class''' # extract mtime of the archive if not self.__isastream: __arcstat = os.stat(self.__arcpath) __listoffiles = ['[archive]\nmtime{} {}\n\n[files]\n'.format(self.__delimiter,__arcstat.st_mtime)] else: __listoffiles = ['[files]\n'] __oneline = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) if self.__getallhashes: # we get all the hash sums of files inside the backup if not self.__hashtype: __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} md5{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) else: # we switch the default hash sum __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__hashtype, delimiter=self.__delimiter) else: __onelinewithouthash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) __onelinewithtarget = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} target{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) for __tarinfo in __tar: # Pick up tar information __tarinfo.name = self._normalize_path(__tarinfo.name) __type = self.__translate_type(__tarinfo.type) __mode = oct(__tarinfo.mode).split('o')[-1] # if the file has no right, need to manipulate the output - solving #15 if __mode == '0': __mode = '000' if __type == 'f': if self.__getallhashes: # extract all hash sums from the archive if not self.__hashtype: # extract hash sum of the file inside the archive __hash = get_hash(__tar.extractfile(__tarinfo.name), 'md5') else: # switch the default hash sum type __hash = get_hash(__tar.extractfile(__tarinfo.name), self.__hashtype) # format the retrieved information __listoffiles.append(__onelinewithhash.format(__tarinfo.name, str(__tarinfo.size), str(__tarinfo.uid), str(__tarinfo.gid), str(__tarinfo.uname), str(__tarinfo.gname), __mode, __type, float(__tarinfo.mtime), __hash, __tarinfo.linkname)) else: # check if there are exceptions while parsing if self.__parsingexceptions: for __file in self.__parsingexceptions: if fnmatch.fnmatch(__tarinfo.name, __file): __hash = get_hash(__tar.extractfile(__tarinfo.name), self.__parsingexceptions[__file]) __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__parsingexceptions[__file], delimiter=self.__delimiter) __listoffiles.append(__onelinewithhash.format(__tarinfo.name, str(__tarinfo.size), str(__tarinfo.uid), str(__tarinfo.gid), str(__tarinfo.uname), str(__tarinfo.gname), __mode, __type, float(__tarinfo.mtime), __hash, __tarinfo.linkname)) else: # we use exceptions-file option but the file is not concerned by an exception __listoffiles.append(__onelinewithouthash.format(__tarinfo.name, str(__tarinfo.size), str(__tarinfo.uid), str(__tarinfo.gid), str(__tarinfo.uname), str(__tarinfo.gname), __mode, __type, float(__tarinfo.mtime), __tarinfo.linkname)) else: # we don't use the --exceptions-file option __listoffiles.append(__onelinewithouthash.format(__tarinfo.name, str(__tarinfo.size), str(__tarinfo.uid), str(__tarinfo.gid), str(__tarinfo.uname), str(__tarinfo.gname), __mode, __type, float(__tarinfo.mtime), __tarinfo.linkname)) elif __type == 'l' or __type == 's': # format the retrieved information __listoffiles.append(__onelinewithtarget.format(__tarinfo.name, str(__tarinfo.size), str(__tarinfo.uid), str(__tarinfo.gid), str(__tarinfo.uname), str(__tarinfo.gname), __mode, __type, float(__tarinfo.mtime), __tarinfo.linkname)) else: # if file is not regular file, ignoring its hash sum __listoffiles.append(__oneline.format(__tarinfo.name, str(__tarinfo.size), str(__tarinfo.uid), str(__tarinfo.gid), str(__tarinfo.uname), str(__tarinfo.gname), __mode, __type, float(__tarinfo.mtime))) # Compose the name of the generated list ### for tar archive if self.__arcpath.lower().endswith('.tar'): self.__make_conf_and_list_paths('.tar') ### for tar.gz archive elif self.__arcpath.lower().endswith('.tar.gz'): self.__make_conf_and_list_paths('.tar.gz') ### for tar.bz2 archive elif self.__arcpath.lower().endswith('.tar.bz2'): self.__make_conf_and_list_paths('.tar.bz2') ### for tar.xz archive elif self.__arcpath.lower().endswith('.tar.xz'): self.__make_conf_and_list_paths('.tar.xz') ### for tgz archive elif self.__arcpath.lower().endswith('.tgz'): self.__make_conf_and_list_paths('.tgz') ### for tbz archive elif self.__arcpath.lower().endswith('.tbz'): self.__make_conf_and_list_paths('.tbz') ### for tbz2 archive elif self.__arcpath.lower().endswith('.tbz2'): self.__make_conf_and_list_paths('.tbz2') ### for tar stream elif self.__isastream: #if self._genfull: # self.__arcname = self.__tarstreamname #if self.__confname: # self.__arcname = self.__confname # self.__arcconfpath = ''.join([self.__confname, '.conf']) # self.__arclistpath = ''.join([self.__confname, '.list']) #else: # self.__arcconfpath = ''.join([self.__streampath, '.conf']) # self.__arclistpath = ''.join([self.__streampath, '.list']) self.__make_conf_and_list_paths('') # call the method to write information in a file __listconfinfo = {'arclistpath': self.__arclistpath, 'listoffiles':__listoffiles} self._generate_list(__listconfinfo) # call the method to write the configuration file if --gen-full was required if self._genfull: # generate the hash sum of the list of files __listhashsum = self._get_list_hash(__listconfinfo['arclistpath']) if self.__isastream: __confinfo = {'arcname':self.__arcname, 'arcconfpath': self.__arcconfpath, 'arclistpath': self.__arclistpath, 'arctype': 'archive', 'sha512': __listhashsum} else: __confinfo = {'arcname':self.__arcname, 'arcpath':self.__arcpath, 'arcconfpath': self.__arcconfpath, 'arclistpath': self.__arclistpath, 'arctype': 'archive', 'sha512': __listhashsum} self._generate_conf(__confinfo,self.__isastream) def __translate_type(self, __arctype): '''Translate the type of the file inside the tar by a generic name ''' __types = {tarfile.REGTYPE: 'f', tarfile.AREGTYPE: 'a', tarfile.CHRTYPE: 'c', tarfile.DIRTYPE: 'd', tarfile.LNKTYPE: 'l', tarfile.SYMTYPE: 's', tarfile.CONTTYPE: 'n', tarfile.BLKTYPE: 'b', tarfile.GNUTYPE_SPARSE: 'g', tarfile.FIFOTYPE: 'o'} return __types[__arctype] def __make_conf_and_list_paths(self, __tartype): '''Make conf file path and list file paths''' if not self.__isastream: __arcwithext = os.path.split(self.__arcpath[:-(len(__tartype)-1)])[1] # behaviour for --gen-list option # define custom path for the filelist or use the default one if self.__listoutput: # --gen-list and --output-list-dir and --configuration-name if self.__confname: self.__arclistpath = os.path.join(self.__listoutput, ''.join([self.__confname, '.', 'list'])) # --gen-list and --output-list-dir else: if self.__isastream: self.__arclistpath = os.path.join(self.__listoutput, '.'.join([self.__tarstreamname, 'list'])) else: self.__arclistpath = os.path.join(self.__listoutput, ''.join([__arcwithext, 'list'])) # define custom path for both filelist and conflist elif self.__fulloutput: # --gen-list and --output-list-and-conf-dir and --configuration-name if self.__confname: self.__arclistpath = os.path.join(self.__fulloutput, ''.join([self.__confname, '.', 'list'])) else: # --gen-list and --ouput-list-and-conf-dir if self.__isastream: self.__arclistpath = os.path.join(self.__fulloutput, '.'.join([self.__tarstreamname, 'list'])) else: self.__arclistpath = os.path.join(self.__fulloutput, ''.join([__arcwithext, 'list'])) else: # only --configuration-name if self.__confname: __arcpath = os.path.dirname(self.__arcpath) __arcpath = os.path.join(__arcpath, self.__confname) self.__arclistpath = ''.join([__arcpath, '.', 'list']) # default behaviour else: if self.__isastream: __arcdir = os.path.dirname(self.__arcpath) self.__arclistpath = os.path.join(__arcdir, '.'.join([self.__tarstreamname, 'list'])) else: self.__arclistpath = ''.join([self.__arcpath[:-(len(__tartype)-1)], 'list']) # behaviour for --gen-full option if self._genfull: # define custom path for the conf file if self.__confoutput: if self.__confname: # --gen-full and --output-conf-dir and --configuration-name self.__arcconfpath = os.path.join(self.__confoutput, ''.join([self.__confname, '.', 'conf'])) else: # --gen-full and --output-conf-dir if self.__isastream: self.__arcconfpath = os.path.join(self.__confoutput, '.'.join([self.__tarstreamname, 'conf'])) else: self.__arcconfpath = os.path.join(self.__confoutput, ''.join([__arcwithext, 'conf'])) elif self.__fulloutput: # --gen-full and --output-list-and-conf-dir and --configuration-name if self.__confname: self.__arcconfpath = os.path.join(self.__fulloutput, ''.join([self.__confname, '.', 'conf'])) else: # --gen-full and --output-list-and-conf-dir if self.__isastream: self.__arcconfpath = os.path.join(self.__fulloutput, '.'.join([self.__tarstreamname, 'conf'])) else: self.__arcconfpath = os.path.join(self.__fulloutput, ''.join([__arcwithext, 'conf'])) else: # --gen-full and --configuration-name if self.__confname: __arcpath = os.path.dirname(self.__arcpath) __arcpath = os.path.join(__arcpath, self.__confname) self.__arcconfpath = ''.join([__arcpath, '.', 'conf']) else: # only --gen-full if self.__isastream: __arcdir = os.path.dirname(self.__arcpath) self.__arcconfpath = os.path.join(__arcdir, '.'.join([self.__tarstreamname, 'conf'])) else: self.__arcconfpath = ''.join([self.__arcpath[:-(len(__tartype)-1)], 'conf']) # user-defined name of the archive/stream if self.__confname: self.__arcname = self.__confname else: if self.__isastream: self.__arcname = self.__tarstreamname else: self.__arcname = os.path.basename(self.__arcpath[:-len(__tartype)]) backupchecker-1.7/backupchecker/generatelist/generatelistfortree.py000066400000000000000000000376431251036066300261010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import fnmatch import grp import os import os.path import pwd import stat from backupchecker.generatelist.generatelist import GenerateList from backupchecker.checkhashes import get_hash # Generate a list of files from a tree '''Generate a list of files from a tree''' class GenerateListForTree(GenerateList): '''Generate a list of files from a tree''' def __init__(self, __genparams): '''The constructor for the GenerateListForTree class''' __arcpath = __genparams['arcpath'] __delimiter = __genparams['delimiter'] self._genfull = __genparams['genfull'] self.__listoutput = __genparams['listoutput'] self.__confoutput = __genparams['confoutput'] self.__fulloutput = __genparams['fulloutput'] self.__getallhashes = __genparams['getallhashes'] self.__hashtype = __genparams['hashtype'] self.__parsingexceptions = __genparams['parsingexceptions'] self.__confname = __genparams['confname'] __listoffiles = ['[files]\n'] __oneline = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) if self.__getallhashes: if not self.__hashtype: __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} md5{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) else: __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__hashtype, delimiter=__delimiter) else: __onelinewithouthash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) # we also need parameters for symbolic links __onelinewithtarget = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} target{delimiter}{value}\n'.format(value='{}', delimiter=__delimiter) for __dirpath, __dirnames, __filenames, in os.walk(__arcpath): # ignoring the uppest directory if os.path.relpath(__dirpath, __arcpath) != '.': # studying directories __dirinfo = os.lstat(__dirpath) __dirmode = oct(stat.S_IMODE(__dirinfo.st_mode)).split('o')[-1] # translate file type in backupchecker intern file type __type = self.__translate_type(__dirinfo.st_mode) # extract file data __listoffiles.append(__oneline.format( os.path.relpath(__dirpath, __arcpath), str(__dirinfo.st_size), str(__dirinfo.st_uid), str(__dirinfo.st_gid), pwd.getpwuid(__dirinfo.st_uid).pw_name, grp.getgrgid(__dirinfo.st_gid).gr_name, __dirmode, __type, str(__dirinfo.st_mtime))) # studying files for __filename in __filenames: __filepath = os.path.join(__dirpath, __filename) __filepath = self._normalize_path(__filepath) self.__fileinfo = os.lstat(__filepath) __filemode = oct(stat.S_IMODE(self.__fileinfo.st_mode)).split('o')[-1] __type = self.__translate_type(self.__fileinfo.st_mode) if __type == 'f': if self.__getallhashes: if not self.__hashtype: # extract hash sum of the file inside the archive __hash = get_hash(open(__filepath, 'rb'), 'md5') else: # extract hash sum of the file inside the archive __hash = get_hash(open(__filepath, 'rb'), self.__hashtype) # extract file data and prepare data __listoffiles.append(__onelinewithhash.format( os.path.relpath(__filepath, __arcpath), str(self.__fileinfo.st_size), str(self.__fileinfo.st_uid), str(self.__fileinfo.st_gid), pwd.getpwuid(self.__fileinfo.st_uid).pw_name, grp.getgrgid(self.__fileinfo.st_gid).gr_name, __filemode, __type, str(self.__fileinfo.st_mtime), __hash)) else: # check if there are exceptions while parsing if self.__parsingexceptions: for __file in self.__parsingexceptions: if fnmatch.fnmatch(os.path.relpath(__filepath, __arcpath), __file): __hash = get_hash(open(__filepath, 'rb'), self.__parsingexceptions[__file]) __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} owner{delimiter}{value} group{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__parsingexceptions[__file], delimiter=__delimiter) __listoffiles.append(__onelinewithhash.format( os.path.relpath(__filepath, __arcpath), str(self.__fileinfo.st_size), str(self.__fileinfo.st_uid), str(self.__fileinfo.st_gid), pwd.getpwuid(self.__fileinfo.st_uid).pw_name, grp.getgrgid(self.__fileinfo.st_gid).gr_name, __filemode, __type, str(self.__fileinfo.st_mtime), __hash)) else: # we use exceptions-file option but the file is not concerned by an exception __listoffiles.append(__onelinewithouthash.format( os.path.relpath(__filepath, __arcpath), str(self.__fileinfo.st_size), str(self.__fileinfo.st_uid), str(self.__fileinfo.st_gid), pwd.getpwuid(self.__fileinfo.st_uid).pw_name, grp.getgrgid(self.__fileinfo.st_gid).gr_name, __filemode, __type, str(self.__fileinfo.st_mtime))) else: # we don't use the --exceptions-file option __listoffiles.append(__onelinewithouthash.format( os.path.relpath(__filepath, __arcpath), str(self.__fileinfo.st_size), str(self.__fileinfo.st_uid), str(self.__fileinfo.st_gid), pwd.getpwuid(self.__fileinfo.st_uid).pw_name, grp.getgrgid(self.__fileinfo.st_gid).gr_name, __filemode, __type, str(self.__fileinfo.st_mtime))) elif __type == 's': # extract hash sum of the file inside the archive # extract file data and prepare data __listoffiles.append(__onelinewithtarget.format( os.path.relpath(__filepath, __arcpath), str(self.__fileinfo.st_size), str(self.__fileinfo.st_uid), str(self.__fileinfo.st_gid), pwd.getpwuid(self.__fileinfo.st_uid).pw_name, grp.getgrgid(self.__fileinfo.st_gid).gr_name, __filemode, __type, str(self.__fileinfo.st_mtime), os.readlink(__filepath))) else: # if file is not regular file, ignoring its hash sum __listoffiles.append(__oneline.format( os.path.relpath(__filepath, __arcpath), str(self.__fileinfo.st_size), str(self.__fileinfo.st_uid), str(self.__fileinfo.st_gid), pwd.getpwuid(self.__fileinfo.st_uid).pw_name, grp.getgrgid(self.__fileinfo.st_gid).gr_name, __filemode, __type, str(__fileinfo.st_mtime))) # include custom paths for output conf files __reparc = os.path.split(__arcpath)[-1] if self.__listoutput: # --gen-list and --output-list-dir and --configuration-name if self.__confname: __arclistpath = os.path.join(self.__listoutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --output-list-dir __arclistpath = os.path.join(self.__listoutput, '.'.join([__reparc, 'list'])) elif self.__fulloutput: if self.__confname: # --gen-list and --output-list-and-conf-dir and --configuration-name __arclistpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --output-list-and-conf-dir __arclistpath = os.path.join(self.__fulloutput, '.'.join([__reparc, 'list'])) else: # --gen-list only if self.__confname: __arc = os.path.dirname(__arcpath) __arclistpath = os.path.join(__arc, '.'.join([self.__confname, 'list'])) else: __arclistpath = ''.join([__arcpath, '.list']) __listconfinfo = {'arclistpath': __arclistpath, 'listoffiles': __listoffiles} # call the method to write information in a file self._generate_list(__listconfinfo) # call the method to write the configuration file if --gen-full was required if self._genfull: if self.__confoutput: if self.__confname: # --gen-full and --output-conf-dir and --configuration-name __arcconfpath = os.path.join(self.__confoutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-conf-dir __arcconfpath = os.path.join(self.__confoutput, '.'.join([__reparc, 'conf'])) elif self.__fulloutput: if self.__confname: # --gen-full and --output-list-and-conf-dir and --configuration-name __arcconfpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-list-and-conf-dir __arcconfpath = os.path.join(self.__fulloutput, '.'.join([__reparc, 'conf'])) else: if self.__confname: # --gen-full and --configuration-name __arc = os.path.dirname(__arcpath) __arc = os.path.join(__arc, self.__confname) __arcconfpath = '.'.join([__arc, 'conf']) else: # --gen-full only if self.__confname: __arc = os.path.dirname(__arcpath) __arcconfpath = os.path.join(__arc, '.'.join([self.__confname, 'conf'])) else: __arcconfpath = '.'.join([__arcpath, 'conf']) # generate the hash sum of the list of files __listhashsum = self._get_list_hash(__listconfinfo['arclistpath']) __arcname = os.path.basename(__arcpath) if self.__confname: __arcname = self.__confname else: __arcname = os.path.basename(__arcpath) # include custom paths for output conf files __confinfo = {'arcname': __arcname, 'arcpath': __arcpath, 'arcconfpath': __arcconfpath, 'arclistpath': __arclistpath, 'arctype': 'tree', 'sha512': __listhashsum} self._generate_conf(__confinfo) def __translate_type(self, __mode): '''Translate the type of the file to a generic name''' if stat.S_ISREG(__mode): if self.__fileinfo[stat.ST_NLINK] > 1: return 'l' else: return 'f' elif stat.S_ISDIR(__mode): return 'd' elif stat.S_ISCHR(__mode): return 'c' elif stat.S_ISLNK(__mode): return 's' elif stat.S_ISBLK(__mode): return 'b' elif stat.S_ISSOCK(__mode): return 'k' elif stat.S_ISFIFO(__mode): return 'o' pass backupchecker-1.7/backupchecker/generatelist/generatelistforzip.py000066400000000000000000000334521251036066300257360ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Generate a list of files from a zip archive '''Generate a list of files from a zip archive''' import datetime import fnmatch import logging import os import os.path import stat import sys import zipfile from backupchecker.checkhashes import get_hash from backupchecker.generatelist.generatelist import GenerateList class GenerateListForZip(GenerateList): '''Generate a list of files from a zip archive''' def __init__(self, __genparams): '''The constructor for the GenerateListForZip class''' self.__arcpath = __genparams['arcpath'] self.__delimiter = __genparams['delimiter'] self._genfull = __genparams['genfull'] self.__listoutput = __genparams['listoutput'] self.__confoutput = __genparams['confoutput'] self.__fulloutput = __genparams['fulloutput'] self.__getallhashes = __genparams['getallhashes'] self.__hashtype = __genparams['hashtype'] self.__parsingexceptions = __genparams['parsingexceptions'] self.__confname = __genparams['confname'] try: __zip = zipfile.ZipFile(self.__arcpath, 'r', allowZip64=True) self.__main(__zip) except zipfile.BadZipfile as _msg: __warn = '. You should investigate for a data corruption.' logging.warning('{}: {}{}'.format(__self.arcpath, str(__msg), __warn)) def __main(self, __zip): '''Main of the GenerateListForZip class''' __arcstat = os.stat(self.__arcpath) __listoffiles = ['[archive]\nmtime{} {}\n\n[files]\n'.format(self.__delimiter,__arcstat.st_mtime)] __oneline = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) if self.__getallhashes: if not self.__hashtype: __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} md5{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) else: __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__hashtype, delimiter=self.__delimiter) else: __onelinewithouthash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) __onelinenoexternalattr = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} mtime{delimiter}{value}\n'.format(value='{}', delimiter=self.__delimiter) __crcerror = __zip.testzip() if __crcerror: logging.warning('{} has at least one file corrupted:{}'.format(self.__arcpath, __crcerror)) else: __zipinfo = __zip.infolist() for __fileinfo in __zipinfo: __fileinfo.filename = self._normalize_path(__fileinfo.filename) __uid, __gid = self.__extract_uid_gid(__fileinfo) # check if external_attr is available if __fileinfo.external_attr != 0: __type = self.__translate_type(__fileinfo.external_attr >> 16) __mode = oct(stat.S_IMODE((__fileinfo.external_attr >> 16))).split('o')[-1] # Prepare a timestamp for the ctime object __dt = __fileinfo.date_time try: __mtime = float(datetime.datetime(__dt[0], __dt[1], __dt[2], __dt[3], __dt[4], __dt[5]).timestamp()) except ValueError as __msg: __warn = 'Issue with timestamp while controlling {} in {}'.format(_fileinfo.filename,_cfgvalues['path']) logging.warning(__warn) if __fileinfo.external_attr != 0 and __type == 'f': if self.__getallhashes: if not self.__hashtype: __hash = get_hash(__zip.open(__fileinfo.filename, 'r'), 'md5') else: __hash = get_hash(__zip.open(__fileinfo.filename, 'r'), self.__hashtype) __listoffiles.append(__onelinewithhash.format(__fileinfo.filename, str(__fileinfo.file_size), str(__uid), str(__gid), __mode, __type, __mtime, __hash)) else: # check if there are exceptions while parsing if self.__parsingexceptions: for __file in self.__parsingexceptions: if fnmatch.fnmatch(__fileinfo.filename, __file): __hash = get_hash(__zip.open(__fileinfo.filename, 'r'), self.__parsingexceptions[__file]) __onelinewithhash = '{value}{delimiter} ={value} uid{delimiter}{value} gid{delimiter}{value} mode{delimiter}{value} type{delimiter}{value} mtime{delimiter}{value} {hashtype}{delimiter}{value}\n'.format(value='{}', hashtype=self.__parsingexceptions[__file], delimiter=self.__delimiter) __listoffiles.append(__onelinewithhash.format(__fileinfo.filename, str(__fileinfo.file_size), str(__uid), str(__gid), __mode, __type, __mtime, __hash)) else: # we use exceptions-file option but the file is not concerned by an exception __listoffiles.append(__onelinewithouthash.format(__fileinfo.filename, str(__fileinfo.file_size), str(__uid), str(__gid), __mode, __type, __mtime)) else: # we don't use the --exceptions-file option __listoffiles.append(__onelinewithouthash.format(__fileinfo.filename, str(__fileinfo.file_size), str(__uid), str(__gid), __mode, __type, __mtime)) elif __fileinfo.external_attr != 0 and __type == 'd': __listoffiles.append(__oneline.format(__fileinfo.filename, str(__fileinfo.file_size), str(__uid), str(__gid), __mode, __type, __mtime)) else: __listoffiles.append(__onelinenoexternalattr.format(__fileinfo.filename, str(__fileinfo.file_size), str(__uid), str(__gid), __mtime)) # define the flexible file list path __arcwithext = os.path.split(''.join([self.__arcpath[:-3], 'list']))[1] if self.__listoutput: if self.__confname: # --gen-list and --output-list-dir and --configuration-name __arclistpath = os.path.join(self.__listoutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --output-list-dir __arclistpath = os.path.join(self.__listoutput, __arcwithext) elif self.__fulloutput: if self.__confname: # --gen-list and --output-conf-and-list-dir and --configuration-name __arclistpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'list'])) else: # --gen-list and --output-conf-and-list-dir __arclistpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-list if self.__confname: __arc = os.path.dirname(self.__arcpath) __arclistpath = os.path.join(__arc, '.'.join([self.__confname, 'list'])) else: __arclistpath = ''.join([self.__arcpath[:-3], 'list']) __listconfinfo = {'arclistpath': __arclistpath, 'listoffiles': __listoffiles} # call the method to write the list of files inside the archive self._generate_list(__listconfinfo) # call the method to write the configuration file if --gen-full was required if self._genfull: # generate the hash sum of the list of files __listhashsum = self._get_list_hash(__listconfinfo['arclistpath']) # define the flexible configuration file path __arcwithext = os.path.split(''.join([self.__arcpath[:-3], 'conf']))[1] if self.__confoutput: if self.__confname: # --gen-full and --output-conf-dir and --configuration-name __arcconfpath = os.path.join(self.__confoutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-conf-dir __arcconfpath = os.path.join(self.__confoutput, __arcwithext) elif self.__fulloutput: if self.__confname: # --gen-full and --output-conf-and-list-dir and --configuration-name __arcconfpath = os.path.join(self.__fulloutput, '.'.join([self.__confname, 'conf'])) else: # --gen-full and --output-conf-and-list-dir __arcconfpath = os.path.join(self.__fulloutput, __arcwithext) else: # --gen-full only if self.__confname: __arc = os.path.dirname(self.__arcpath) __arcconfpath = os.path.join(__arc, '.'.join([self.__confname, 'conf'])) else: __arcconfpath = ''.join([self.__arcpath[:-3], 'conf']) # name of the archive in the configuration file if self.__confname: __arcname = self.__confname else: __arcname = os.path.basename(self.__arcpath[:-4]) __confinfo = {'arcname': __arcname, 'arcpath': self.__arcpath, 'arcconfpath': __arcconfpath, 'arclistpath': __listconfinfo['arclistpath'], 'arctype': 'archive', 'sha512': __listhashsum} self._generate_conf(__confinfo) def __extract_uid_gid(self, __binary): '''Extract uid and gid from a zipinfo.extra object (platform dependant)''' __uid, __gid = int.from_bytes(__binary.extra[15:17], sys.byteorder), \ int.from_bytes(__binary.extra[20:22], sys.byteorder) return (__uid, __gid) def __translate_type(self, __mode): '''Translate the type of the file to a generic name''' if stat.S_ISREG(__mode): return 'f' elif stat.S_ISDIR(__mode): return 'd' backupchecker-1.7/backupchecker/identifylimitations.py000066400000000000000000000055261251036066300234210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Identify limitations for this archive type given the checks asked by the user '''Identify limitations for this archive type given the checks asked by the user''' import logging class IdentifyLimitations: '''Identify limitations for this archive type given the checks asked by the user''' def __init__(self, __arcpath, __arctype, __data): self.__data = __data self.__arcpath = __arcpath self.__main(__arctype) def __main(self, __arctype): '''Main for IdentifyLimitations''' getattr(self, ''.join(['_IdentifyLimitations__study_', __arctype]))() def __study_gz(self): '''Study the required checks for the gzip archive type''' __unsupported_gz = {'uid', 'gid', 'uname', 'gname', 'mode', 'target', 'mtime'} for __param in self.__data: if __param in __unsupported_gz: self.__warn(__param) def __study_bz2(self): '''Study the required checks for the gzip archive type''' __unsupported_bz2 = {'uid', 'gid', 'uname', 'gname', 'mode', 'equals', 'biggerthan', 'smallerthan', 'target' 'mtime'} for __param in self.__data: if __param in __unsupported_bz2: self.__warn(__param) def __study_zip(self): '''Study the required checks for the zip archive type''' __unsupported_zip = {'uname', 'gname', 'target'} for __param in self.__data: if __param in __unsupported_zip: self.__warn(__param) def __study_lzma(self): '''Study the required checks for the lzma archive type''' # seems pretty hard to get xz/lzma archive size - maybe in another release __unsupported_lzma = {'uid', 'gid', 'uname', 'gname', 'mode', 'equals', 'biggerthan', 'smallerthan', 'target', 'mtime'} for __param in self.__data: if __param in __unsupported_lzma: self.__warn(__param) def __warn(self, __param): '''Warn the user that parameter is not supported by message in logging''' logging.warning('{}: The required parameter {} is not supported by this type of archive. Ignoring it.'.format(self.__arcpath, __param)) backupchecker-1.7/backupchecker/listtype.py000066400000000000000000000105431251036066300212010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Analyze the type of the backup to produce the list '''Analyze the type of the backup to produce the list''' import logging import os.path from backupchecker.generatelist.generatelistforbzip2 import GenerateListForBzip2 from backupchecker.generatelist.generatelistforlzma import GenerateListForLzma from backupchecker.generatelist.generatelistforgzip import GenerateListForGzip from backupchecker.generatelist.generatelistfortar import GenerateListForTar from backupchecker.generatelist.generatelistfortree import GenerateListForTree from backupchecker.generatelist.generatelistforzip import GenerateListForZip class ListType(object): '''The ListType class''' def __init__(self, __options, __parsingexceptions={}): '''The constructor for the ListType class. ''' self.__parsingexceptions = __parsingexceptions self.__main(__options) def __main(self, __options): '''Main for ListType class''' __arcpaths = __options.archives __delimiter = __options.delimiter __genfull = __options.genfull __genlist = __options.genlist __fulloutput = __options.fulloutput __confoutput = __options.confoutput __listoutput = __options.listoutput __getallhashes = __options.getallhashes __hashtype = __options.hashtype __isastream = __options.isastream __confname = __options.confname for __arcpath in __arcpaths: # create a tuple with the different parameters # for the generation of the archives's files __genparams = {'arcpath': __arcpath, 'delimiter': __delimiter, 'genfull': __genfull, 'genlist': __genlist, 'confoutput': __confoutput, 'listoutput': __listoutput, 'fulloutput': __fulloutput, 'getallhashes': __getallhashes, 'hashtype': __hashtype, 'parsingexceptions': self.__parsingexceptions, 'isastream': __isastream, 'confname': __confname} # generate a list of files for a tree if not __isastream and os.path.isdir(__arcpath): self.__bck = GenerateListForTree(__genparams) # generate a list of files for a tar.gz/bz2 archive elif __arcpath.lower().endswith('.tar') or __isastream or\ __arcpath.lower().endswith('.tar.gz') or\ __arcpath.lower().endswith('.tar.bz2') or\ __arcpath.lower().endswith('.tar.xz') or\ __arcpath.lower().endswith('.tgz') or\ __arcpath.lower().endswith('.tbz') or\ __arcpath.lower().endswith('.tbz2'): self.__bck = GenerateListForTar(__genparams) # generate a list of files for a gzip archive elif __arcpath.lower().endswith('.gz'): self.__bck = GenerateListForGzip(__genparams) # generate a list of files for a bzip2 archive elif __arcpath.lower().endswith('.bz2'): self.__bck = GenerateListForBzip2(__genparams) # generate a list of files for a lzma archive elif __arcpath.lower().endswith('.xz'): self.__bck = GenerateListForLzma(__genparams) # generate a list of files for a zip archive elif __arcpath.lower().endswith('.zip'): self.__bck = GenerateListForZip(__genparams) # generate a list of files for a apk archive elif __arcpath.lower().endswith('.apk'): self.__bck = GenerateListForZip(__genparams) # A MESSAGE RESUMING OPERATION FOR GENERATING THE LIST OF FILES IS MISSING HERE backupchecker-1.7/backupchecker/main.py000066400000000000000000000034571251036066300202560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The application main '''The application main''' import sys from backupchecker.checkbackups.checkbackups import CheckBackups from backupchecker.cliparse import CliParse from backupchecker.configurations import Configurations from backupchecker.exceptionsparsing import ExceptionsParsing from backupchecker.listtype import ListType class Main(object): '''The main class''' def __init__(self): '''The constructor of the Main class.''' self.__main() def __main(self): '''The main for the Main class''' __options = CliParse().options # no list generation mode, check backups if not __options.genlist and not __options.genfull: __confs = Configurations(__options.confpath, __options.isastream) CheckBackups(__confs.configs, __options) else: # Analyze the type of the list to produce if __options.parsingexceptions: __exps = ExceptionsParsing(__options.parsingexceptions, __options.delimiter) ListType(__options, __exps.exceptions) else: ListType(__options) backupchecker-1.7/backupchecker/placeholder.py000066400000000000000000000075101251036066300216060ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Identify and replace placeholder in a path '''Identify and replace placeholder in a path''' from datetime import datetime import os import os.path import re class PlaceHolder(object): '''Identify and replace placeholder in a path''' def __init__(self, __path): '''The constructor for the PlaceHolder class. Keyword arguments: __path -- the path of the backup ''' self.__path = __path self.__main() def __main(self): '''Main of the PlaceHolder class''' __year, __shortyear, __month, __weeknumber, __monthday, __weekday, __hour, __minute, __second = datetime.now().strftime('%Y %y %m %W %d %w %H %M %S').split() # year if '%Y' in self.__path: self.__path = self.__path.replace('%Y', __year) # year in two-digit format if '%y' in self.__path: self.__path = self.__path.replace('%y', __shortyear) # month (1..12) if '%m' in self.__path: self.__path = self.__path.replace('%m', __month) # week number in year (1..52) if '%W' in self.__path: self.__path = self.__path.replace('%W', __weeknumber) # monthday (1..31) if '%d' in self.__path: self.__path = self.__path.replace('%d', __monthday) # weekday first monday (1..7) if '%w' in self.__path: self.__path = self.__path.replace('%w', __weekday) # hour (00..24) if '%H' in self.__path: self.__path = self.__path.replace('%H', __hour) # minute (00..59) if '%M' in self.__path: self.__path = self.__path.replace('%M', __minute) # second (00..59) if '%S' in self.__path: self.__path = self.__path.replace('%S', __second) # biggest integer for the same path in the same directory if '%i' in self.__path: self.__path = self.__biggestinteger() def __biggestinteger(self): '''return the path with the biggest integer in the same directory for the placeholder''' __result = {} __newpath = [] __missingpath = [] __found = False for __chunk in self.__path.split('/'): if not __found: __newpath.append(__chunk) else: __missingpath.append(__chunk) if '%i' in __chunk: __found = True self.__path = '/'.join(__newpath) __head, __tail = os.path.split(self.__path) __tail = __tail.replace('%i', "([\d]+)") for __file in os.listdir(__head): if re.search(__tail, __file): __res = re.search(__tail, __file) __result[__res.group(1)] = os.path.join(__head, __res.group(0)) # get the max value __maxvalue = max(__result) # join the modified path and the original left apart part if '/'.join(__missingpath): return os.path.join(__result[__maxvalue], '/'.join(__missingpath)) else: return __result[__maxvalue] @property def realpath(self): '''Return the real path afther placeholder replacement''' return self.__path backupchecker-1.7/changelog000066400000000000000000002757011251036066300160430ustar00rootroot00000000000000commit 962f3f34d2114003db686554e3f5ff41377a63cc Author: Carl Chenet bump version commit 2cb54e3897529e8c9d79558bc7207fbece990d30 Author: Carl Chenet fix bug in biggest int placeholder and consolidate unit tests commit d830428f9133b7c602fe63d427e57cbc17221f76 Author: Carl Chenet update changelog commit 2710f233b2d6b341fe00ef0422a6b8ecc18d63e7 Author: Carl Chenet update version commit 0f184caeb054deeb76b4cf39c1a81d79d9aa863c Author: Carl Chenet update doc for %i placeholder commit c5a4e7e5572d98b2a281126fbb9570d00e00e94c Author: Carl Chenet add test files for biggest placeholder unit test commit 97f41f31c8fa061a4532e04d4c1c6c8c28ee889d Author: Carl Chenet unit test for biggest int placeholder commit bbe13ee243c5c667135dd08c4017bc595c2950b5 Author: Carl Chenet placeholder %i to get the max int in a configuration path commit 652486ea38dd4b994ac95220f7dd6bb03577307e Author: Carl Chenet update changelog commit 782f1e944ed98fbf5121040506d5adcf6d6a4703 Author: Carl Chenet bump version commit 126dda138ed309d5a5f259d0bd95ab194abe52cd Author: Carl Chenet fix functional tests for placeholders. fix #10 commit ae6e67fcd36e637c69bb7a27df9c1075b73c1771 Author: Carl Chenet simplify tests commit 18911fe2b9c8e127188ef11f4f4317362ba56536 Author: Carl Chenet simplify test commit 9aec0f75322c139d5fa5fc1284f429486c1f584e Author: Carl Chenet simplify test commit 3281e3f567b92b70cae3bcbdc20a8af439f93a30 Author: Carl Chenet explain placeholders commit 79c466ad0c523922fb04d6ce91f6ffea8e545cf1 Author: Carl Chenet unittest for placeholder commit 813fe8174e5a6410966c7bea2477dd01b629cc01 Author: Carl Chenet manage placeholder in configuration file commit 3e2b7b43f913958e38841a7ee7f4b02ddabb7210 Author: Carl Chenet add placeholder.py commit e3418df8217855daa7e77cd1cd631bc036fee33f Author: Carl Chenet wip commit ff65df3bdc4412cb3ecf94a0dd9510489549b3fc Author: Carl Chenet fix missing mtim in the doc commit 42a028188d3e5d6bd6e7422d56bba85bfcda5367 Author: Carl Chenet update changelog commit 6de9fc734af116f1d8cf2f18c75180849bff9899 Author: Carl Chenet update version number in README.md commit 957742d25019250b8b08a7cd742a7ddbfe15f792 Author: Carl Chenet update version && update doc commit dfb439418f2690cf2ec32521ee23763992385359 Author: Carl Chenet activate mtime for gzip and dedicated functionaltests commit b1c6aeb92fc37ed0f6f90b77ca29916b9d5a8c81 Author: Carl Chenet mtime for zip archive commit cea8e88ba848f04a1e4a97cbebfab49ac59207a8 Author: Carl Chenet update functionaltests for mtime archive commit b93a43a1553db2693ea2734e1a359393d1a1cd13 Merge: 04fe435 345c1a5 Author: Carl Chenet Merge branch 'master' of https://github.com/backupchecker/backupchecker into outdated-archive commit 04fe4352ed49d3b4f24744979844c757e65aa441 Author: Carl Chenet wip commit 45f30a96b1da8f7e943b4a486390e19421acf97b Author: Carl Chenet add/check mtime for the archive itself commit 345c1a50a15b3822d299499b4c7fc0f5385edf44 Author: Carl Chenet switch to python 3.4 for scripts/backupchecker commit 145d2c192757aee436230aa5f8979015d96836b8 Author: Carl Chenet ready for 1.3 bugfix. fixes #7 commit fb6e432cd677040318603789c944a4a2860002dd Author: Carl Chenet add missing files commit 805810f1d2de8cd1fdc8c1fd5b6359a5f305e663 Author: Carl Chenet add unit tests for expected uid/gid commit 4cc8581ba34b1859d4a154435d42583425272a71 Merge: 5c0cf46 2035250 Author: Carl Chenet :Merge branch 'master' of https://github.com/backupchecker/backupchecker commit 5c0cf46334774377ab0cf7df74ac4fd47ae277c8 Author: Carl Chenet add unit tests related to expected uid/gid commit 5473aa9b757bdb3bc9d67bc12a021bf939837ea4 Author: Carl Chenet fix uid used for group commit 20352500d276cac84de4e57494d3cefca62b8aa4 Author: Carl Chenet add travis-ci status bar commit ec86f9ec8cb42efe5f8ddc84049d40d3c52abf96 Author: Carl Chenet fix test for CI commit 69adb692d7e299d00ef7a5e72956231bedd81143 Author: Carl Chenet update shebang of tests.py commit 8ad9724c6f718bee64ad1d7424e6710935890523 Author: Carl Chenet add .travis.yml commit cbcc848c35627c2ff082f563f276024b785a1703 Author: Carl Chenet update changelog commit ff160c4bd293dedbec0c32f1bbc8855c3e1cae9b Author: Carl Chenet fix syntax of the restructuredtext documentation commit 1804690e5fa549f574f2065e00ab7e0460f4b017 Author: Carl Chenet fix restructuredtext documentation commit 695bc9a61276621d9b80571bd1971cbf7edd4d3b Author: Carl Chenet update the documentation (online doc, manpage, setup.py fields) commit ef0eed1cd70499cb0d0686499939d282e2b4b4c2 Author: Carl Chenet bump version commit f017c6a90a0ba9f9a708ca26973ec781f3021f28 Merge: be9e988 94d1c6c Author: Carl Chenet Tar stream now works with backup checker. fixes #3 fixes#6 commit 94d1c6c901a91c19742e8284c72407f77aed891c Author: Carl Chenet specify not possible to compute hash sums inside an archive with a stream commit 1387535322502c35b5b8a8c5ff520bf49b28dafa Author: Carl Chenet fix issue with name of the archive while scanning a stream. add unit test for it. secure the user-defined logfile from the cli. commit 4c5f7d2116a4d126733410d0ea29dba7a639337b Author: Carl Chenet --output-list-and-conf-dir option now works with tar stream. commit 4477cfe948791e1e63c905c18ae41ad4301c9eb1 Author: Carl Chenet fix for README.md commit a43ac45a2959c3e47b6669f4dfce98a699ee4409 Author: Carl Chenet reorganize call to stdin from both generate and check mode commit d74e5ec7e0573ec6af8ddaf10d9a22ae94335361 Author: Carl Chenet add universal compression for tar files commit bd6f0509e0d476291c8df5566bd40431075b8980 Author: Carl Chenet add Test_configuration_name_option_and_conf_list_output_with_lzma test and Test_configuration_name_option_and_conf_list_output_with_bzip2 test commit 1b66fc577e607fea2c64f8569eb932e3d029966c Author: Carl Chenet Test_configuration_name_option_and_conf_list_output_with_gzip test commit 6a68afbcb630d24782a165cdb366fce408c224fe Author: Carl Chenet added Test_configuration_name_option_and_conf_list_output_with_tar_gz test and Test_configuration_name_option_and_conf_list_output_with_zip test commit d344fe842664a2f91a15618574e619de984fcaae Author: Carl Chenet write Test_configuration_name_option_and_conf_list_output_with_tar_gz unit tests commit 27512f04875a491c0c43b6e3ac8a427ca5e89cf1 Author: Carl Chenet fix --configuration-name for lzma archive. write unit test Test_configuration_name_option_with_lzma commit 8f5571993b983aebafd25ef5e01eaee90bc0d0f4 Author: Carl Chenet fix --gen-full option with --configuration-name option with bzip2 archive commit 107f5de8aca2d7458a392804275d4b7d9c1c1b60 Author: Carl Chenet fix --gen-full with --configuration-name with gzip, tree, zip archives commit 4eb36edbb4349ee2a063137d82ff39a3c779dc6d Author: Carl Chenet add configuration-name-option-with-zip test commit 5425df2cded416848b23726110c09cba3f71f2d3 Author: Carl Chenet update .gitignore with new files to ignore commit 3b7de4db4b5fecf521237d3cd115e0c9811cc10e Author: Carl Chenet add configuration-name-option-with-tar-gz test commit a9539854138e0de4841db63b343eadc6803752a5 Author: Carl Chenet fix check-mtime-tar/zip and add Test_generate_and_check_for_stream_from_tar_gz test commit a8a5ea3a4af68d9a1c72ff8d2dff2889d88cd102 Author: Carl Chenet add functional test to check stream from a tar.gz file commit 4ac6fa5b7d6ae23a033fcaaa721321ebea59181e Author: Carl Chenet --configuration-name option for lzma archive commit 17df1b07f2cff9739535f1e96126731b29292bee Author: Carl Chenet --configuration-name option for bzip2 archive commit b57b0a392390e912d0459ce749384c996c5cf631 Author: Carl Chenet --configuration-name option for gzip archive commit 3f8c7a1ad91862fe03917d900523620f9480157d Author: Carl Chenet --configuration-name for zip archive commit 6c235a3d651f2f4b64453e49e4b41efcee78081e Author: Carl Chenet --configuration-name option for tree backup commit ba09349383ab329e1eb1c74dba22762057d24545 Author: Carl Chenet switch from -s to -n for short option name --configuration-name commit 7c0df2a4391f695a56780e6a5edf15824e6ebf7e Merge: e1731f9 f3d4f18 Author: Carl Chenet fix conflict for unit tests commit e1731f92cc3aa3ee8d567ac69769547871abc421 Author: Carl Chenet fix unit tests for --conf-name option commit fdd718e7755dadc5843018a48300fa22eedea5c8 Author: Carl Chenet --conf-name now defines a user-defined name used in configuration files commit f3d4f1826392f69ecb1b5d0b1e734ba5767988ec Author: Carl Chenet fix unit tests commit be9e98878c15ebe936f54cac753563afee56bb8c Author: Carl Chenet remove syntax errors in man page. fixes #4 commit e3f54892306a739f59c93036735014fa705a9971 Author: Carl Chenet improve output while checking tar streams commit 263ccd42203f79922a64bb3bb679d4cff9991a2a Author: Carl Chenet improve accepted stream types commit d9e86191f754ecf387241460a7efde3b600a6473 Author: Carl Chenet remove unused print commit ae7c68949a34683c984438aa1ab21e2238b9bc90 Author: Carl Chenet remove unused print commit 796f5f337f5bdb9f356a7946b4fc6e22e716ba5b Author: Carl Chenet verifying stream works commit 8827d353a288bcfe49383451da32cfadcd00f333 Author: Carl Chenet verify data from a stream almost work commit 4d8ea3b4649635d093dc0b3444ecd72ae8c12eef Author: Carl Chenet name of the conf files of a tar stream commit fdd588a0732b72ac38fd1975a95c9075bd2793cb Author: Carl Chenet generation of full conf files almost works for streams commit 8639d246cae79f0b3b433f0b4bf9c9481769e6f3 Author: Carl Chenet bump to 1.1 commit 174da989ea5dbb75be9824f69b717218c9545ac2 Author: Carl Chenet remove old unused generate-archive.sh script commit 71c9eedcc87def45f76935a9fb25abf1e2e0d2b0 Author: Carl Chenet add pip install way in README.md commit 6f7ca7d8441237c853ddd1477a13fbbca7040bf4 Author: Carl Chenet update to 1.1 version commit 6c624a6ea644ea556084fc923a16d5cc4bf4378d Author: Carl Chenet rename brebis to backupchecker. fixes #2 commit e498c7ac7414a7c5f80582c2cfef3b7a1fc2b4bd Author: Carl Chenet update changelog commit e3eda8f86cbd5d4b6c169b4e0cf17a645e69f08f Author: Carl Chenet update the documentation commit 9c3ddc8df4b3a00044aa26755bde7d292b30528a Author: Carl Chenet activate uname/gname for the archive itself commit 44b3c1600f8932f9c6143845f590d8da7afdf3a7 Author: Carl Chenet files should be ignored commit 68b7a01812c6cf714e14c275f1d5a91e90beaa44 Author: Carl Chenet update version commit 6bf54ef09e547dac9fcf21dcb25a876bcc2875bf Author: Carl Chenet files should not be versioned commit 3bf73aa8bb5a24f26eeeeeb465917b724df23cfe Merge: f2a1984 5095c3d Author: Carl Chenet Merge branch 'uname-gname' integrate support for uname/gname while generating/controling archives commit 5095c3d39a10cd212e1221d0508e8ef974ac525c Author: Carl Chenet unit tests for uname/gname features commit 95110de07de17f66aa673075dc61fa9a6135be3a Author: Carl Chenet functional tests for uname/gname for tar.gz archives commit b7870ab7bbe8bce47d2e4da6b88610d7ba792a3f Author: Carl Chenet fix unit tests for uname/gname commit ef167319ff7eb40bb64c02fd1e6c8c16b16f0f4a Author: Carl Chenet uname/gname for tree backups commit 34f5ab79b850e21e9e1be80f7546cb96fc2c7c2c Author: Carl Chenet add limitations for owner/group owner commit f2a1984038a2bd9e44ea41f0f946402affc28efb Author: Carl Chenet clean directory before creating the archive commit a81439a314c228add58c05ee88b24c4bd003df00 Author: Carl Chenet ignore log files commit 1284ab9a2c219b8bedbcbf54f13240ab850424e9 Author: Carl Chenet owner name and group owner now work with tar archives commit 736a7f293f869b5458a55c2cbd1a564c4764c5d8 Author: Carl Chenet add license in README.md file commit b30e05f1ed305efd1b3557e28a26a0e96785bd37 Author: Carl Chenet remove .hgsigs file commit d5d878f6bbc9bf44e260296d1b092f9f8283466e Author: Carl Chenet remove following files a.out commit dcfdb70e4f546229bb9dccf6e01f099bfbe7dc8b Author: Carl Chenet remove a.out files commit 377d9047d961f34bc063d964bbc12b8b1cd5a91f Author: Carl Chenet remove a.out files commit a4b386228a964d769f80aea6bfb9eccd8d7618c4 Author: Carl Chenet update documentation commit 8f69804145ec21c72ea3842884fcab72a2e89387 Author: Carl Chenet switch README to a README.md file commit 48029a3fed314abded9485867ac2dfe3838faafe Author: Carl Chenet switch to a markdown README commit 8c92e88dfe33b55ab450284881377fa180b830a8 Author: Carl Chenet convert brebis to backupchecker commit 6fefbc79acd47b0ea83d2f84c052a546991eddc4 Author: Carl Chenet Added signature for changeset 099d1115bb69 commit ccd3032b4fd319658782b6c5c9dc9a503bea5d37 Author: Carl Chenet Added tag 0.10 for changeset 0f621bea2374 commit c70f1e453dc8d3b8bddcee3bea5931412f5e86d8 Author: Carl Chenet update the changelog commit b24fefc0d7b4e04964f4cc0981d51c6750891f23 Author: Carl Chenet update the doc for new --exceptions-file option commit 0381778556f0135beb4c4314aad2482db729ef47 Author: Carl Chenet update brebis manpage commit 5c90688c20a7aa905289d5f574751010e46bc339 Author: Carl Chenet update copyright email addresses and year commit 497baf4cd9435e0e302207714bc2cb5c271fb66a Author: Carl Chenet decomment all test commit 3e9915e4e5f9201adda726d38efcaa18be0a50d6 Author: Carl Chenet removing excpected failure/success tests commit 4141d7c3f700fbdd45364c742cd3c17279c82d34 Author: Carl Chenet minimal README indicating readthedocs commit d5b8464797d4c9616331c5c590cba6df583a87f1 Merge: abad836 5d4f76c Author: Carl Chenet --exceptions-file option allowing to select to generate hash sum only for selected files commit 5d4f76c9f148c0136bef43b1370d1b3372c26f25 Author: Carl Chenet unit tests work with --exceptions-file option commit fb045497198e34bbde02a2efe6731a46f8eaa84b Author: Carl Chenet new files related to functional tests to ignore commit 2e55a99b8d7d4bd3cdfab3fc48912343213bba58 Author: Carl Chenet --exceptions-file works for gzip,bzip2,lzma,tree archive, with functional tests commit 74bc83c31b61a1ae263ce787aa1599359f75e929 Author: Carl Chenet --exceptions-file works for zip archive, with functional test commit d033c16a7d72a1e5e9c0d0310a51506ea9e57140 Author: Carl Chenet ignoring files for --exceptions-file option for both tar.gz and zip archives commit 028b0db8de7ef41245f73dc5f5a8681d9f231113 Author: Carl Chenet --exceptions-file works for tar.gz archive, with functional test commit af51bbf5997fb6a586375067a0112b0fcacfa01f Author: Carl Chenet add -E/--exceptions-file option commit abad836ca458d0a6cab630d232f1972b6ad92fb3 Merge: 331ffbe 9ed2465 Author: Carl Chenet --hashtype option to switch the default hash sum while generating configuration files for an archive. fixes #59 commit 9ed2465d9cef651c7ec5fbe141a46e4c1265ddc5 Author: Carl Chenet add files to ignore related to functional tests of the hashtype option commit 172553decf1955f58ec6f050e57ccdfe2abf2fdc Author: Carl Chenet --hashtype option to change the default hash sum to generate configuration files commit 8fb7d8239ded5008e0563899b89601ab758ce676 Author: Carl Chenet --hashtype option works with tar.gz archive commit 331ffbec5b8f2ef9fd63f83a95d8407b4d6eb317 Merge: 379780d 55b79ea Author: Carl Chenet option -H or --hashes to explicitly required all hash sums for files in the archive. fixes #64 commit 379780d74916b730daf618cb61760433f7e85fdb Author: Carl Chenet update version number of doc commit 1cde752773339b40d43124358b00e82bccf3de89 Merge: 7b434e7 85e0343 Author: Carl Chenet use sphinx format docs to publish on readthedocs. fixes #45 commit 85e0343725d2517d58d76db9997985e2774c975f Author: Carl Chenet add sphinx format docs to publish on readthedocs commit 9717464154a22f5f63148f7ee5bebcae4dad5415 Author: Carl Chenet add sphinx format docs to publish on readthedocs commit 7b434e7a565363f60a96dd52baf86bde3101720a Author: Carl Chenet catches unicode exception and exits gracefully. fixes #65 commit 55b79ea0ae64ae06f1c2c9dff6cf12bad2e16043 Author: Carl Chenet option -H or --hashes to explicitly required all hash sums for files in the archive commit d1ce39258b92e838accf53003e2ce430bce51011 Merge: 3f9309b 0071bd0 Author: Carl Chenet create the correct directories for tests using {list,both} directories. fixes #63 commit 0071bd00cb7d1edcac014556206222f2cda48295 Author: Carl Chenet create the correct directories for tests using {list,both} directories commit 3f9309beb3cc86fa50813959d2897ed996afc670 Author: Carl Chenet fixing issues while switching laptops commit b716973f313751ccaf26192e5fd29090eb46d45a Author: Carl Chenet update changelog commit fb2ddfe7adb6945c20aee38171bed1bbeff0e4d8 Author: Carl Chenet bump to 0.10 commit 855cc831a33e9d8fa8ca5bf9cfff818d664a3af0 Author: Carl Chenet bump to python3.4 and update brebis version commit 89e786726764394582abd7701071b9483fc9b561 Author: Carl Chenet bump python3.3 to python 3.4 and bump brebis version commit 1d01d968c50c025a03ce50dd63adfa909540fcfb Author: Carl Chenet bump shebang to python3.4 commit dc0b419947d20a7e38b1e4b66fa52fd671e23d00 Merge: 3834b4f 79221f8 Author: Carl Chenet remove hash generation for symlinks. closes #61 commit 79221f85df99169d6afcbfcc373001b4426ad35f Author: Carl Chenet remove md5 generation for symlink in a tar file commit 659e136b5b5b2ee26ca2c2d94eaa80d95cc23e8e Author: Carl Chenet remove hash for links while parsing a tree of files commit 36adc9bd8871f1e79b5d73689476a6cd824571ff Author: Carl Chenet remove hash for links commit 3834b4f0dc6298bbaaf750e05ecb933955e3ecb4 Author: Carl Chenet Added tag 0.9 for changeset dc231b2f8d78 commit b37162dc7a521952019fa4505e4b5d2747e01205 Author: Carl Chenet Added tag 0.8 for changeset 008c44e19317 commit 9f9d28ab84c14ed20c81d1f86658a4d6be3118d2 Author: Carl Chenet update man page commit 7e7641e1260f4acfbcf80132448e043587a55544 Author: Carl Chenet update changelog commit 1dfdd6836c443b43e6c2bcce928c5c066a491615 Author: Carl Chenet update README for 0.9 commit 6b6551287112d3b5aeda8bc9dcd4152501803794 Author: Carl Chenet add doc for -C -L -O options commit 1b610ce2836b713c86515cae47b6c62a83288d7f Author: Carl Chenet update version number to 0.9 commit 45593d99654e91303f1ede7f7d46f70b156a4c39 Merge: fc2002d 74d557d Author: Carl Chenet offer new -C -L -O options to define the directory where to write conf file, filelist or both files. fixes #49 commit 74d557dc1431b0b340f5022bf48d29b21b8a3403 Author: Carl Chenet put back all tests in functionaltests.py commit c98f793e96502693818f7d290d9abd19673fe6c3 Author: Carl Chenet unit test support for new generatelisttree parameters commit c348600e4bf55989bb2bd142aeda5b583ae1ff25 Author: Carl Chenet functional tests for -C -L -O options commit 261e11f0236085a4920d92ebb41e4141e3bde73f Author: Carl Chenet update unit tests to support new optional conf/list/full output directory for lzma archives commit 138a29881771e7c657e99f90d681e2a3b0edfe12 Author: Carl Chenet update unit tests to support new optional conf/list/full output directory for bzip2 archives commit 60f39c006b09f9d73dbbe72945c6d642d6db0f46 Author: Carl Chenet support to print configuration file and file list to different directories or to swith default output directory for bzip2 archives commit 623a286de22fde895745ee35e0b47ad391db29e7 Author: Carl Chenet update unit tests to support new optional conf/list/full output directory for gzip archives commit c4400999bbc6ffc5d02d4e11e9f5c7464e441923 Author: Carl Chenet support to print configuration file and file list to different directories or to swith default output directory for gzip archives commit 5494f607f4bdc6ece0598af32cf4427335d9327d Author: Carl Chenet update unit tests to support new optional conf/list/full output directory commit 2978376970e4be9d4c50f891f0191fd680ab7adb Author: Carl Chenet support to print configuration file and file list to different directories or to swith default output directory for zip archives commit 44fb7a82f06b214602bbcf6e21840c175d40195c Author: Carl Chenet support to print configuration file and file list to different directories or to swith default output directory for tar archives commit 260dddb173b0d0c42e0140cbb98fffe7e943871c Author: Carl Chenet update unit tests to support new optional conf/list/full output directory commit 8a662ad4702fdb74f82d5dd718eee720a69a7f55 Author: Carl Chenet support to print configuration file and file list to different directories or to swith default output directory commit fc2002d28a38ecf9d8de5c23c1af7753d5aba213 Merge: ab2aa89 2d4d24d Author: Carl Chenet support apk files. fixes #51 commit 2d4d24de339baccf3a42168ef865bdbe52880fe5 Author: Carl Chenet add support for apk archive, functional test for generating apk archive. correct a bug with functional tests embedding timestamp commit ab2aa898a75681a649181de6f23dd86306bbc0e3 Author: Carl Chenet add new unit tests commit 9274e958fa49fd2933ce11c62ae14f40a767912b Author: Carl Chenet adding new files to ignore for unit testing commit f7356ce783cac9ab6beaedff261ccaa6b2c08b3e Author: Carl Chenet add private variables to self to authorize unit tests commit b98ad28625c27692d8c334f1c92be2b751be8435 Author: Carl Chenet add a private variable to self to authorize unit testing commit 3a19106608f76f43ec2b46320493937946d91c4c Author: Carl Chenet fix uncorrect variable name commit 9592221dc0a3962d46b5ae2da7686f6d2e62a1a3 Author: Carl Chenet fixing timestamp int/float related errors commit 7ec227c6242aa247a1c5410927391a7be9c399c8 Merge: 8a36f14 1672e57 Author: Carl Chenet merge mtime branch with default branch. fixes #46 commit 8a36f14bf790b5f7c1bdb144aba17aa965718f28 Author: Carl Chenet add unit tests for checklzma module commit 4c829577eda3a9646100425d16cb473c8e21c998 Author: Carl Chenet add unit tests for the module archiveinfomsg commit 74f4d763aa4cf415f1588161cc453ea537483e1d Author: Carl Chenet add unit test for archiveinfomsg.ArchiveInfoMsg__missing_files method commit 1672e572b9a875ffa62f6eb6b9328a42cf828d75 Author: Carl Chenet add limitation mtime for gz,bz2 and lzma commit ee57a5e24c6ab5afe550799827b6f43a5cba80b1 Author: Carl Chenet add new files to ignore commit 199f9c10da751af987322a6b1a93db1d052469bf Author: Carl Chenet add support for mtime on tar,zip and tree - associated functional tests commit ccb611306e79d970857e1cfa11473673ca3202c1 Author: Carl Chenet update the changelog commit 85577693d1f393e9109fe392fd25827e82b44dcb Author: Carl Chenet update README with new information and parameters commit 0afae1eb4dc5825ebe8b399e9728db5986cca764 Author: Carl Chenet bump version number to 0.8 commit e6b6ef10d43ff14f33feb03995dfbcd0260af8d2 Author: Carl Chenet fix Test_generate_conf_and_file_list_tree test by adding sha512 sum of the list of files commit e4352c1c97f4cb9ded8a4796b1213095852e52dc Author: Carl Chenet generate the hash sum of the list of files for zip archive and add it in the conf file when -G is invoked commit ce0f5afa022393137f28b9ccf1cb92f455d482b2 Author: Carl Chenet fix Test_generate_conf_and_file_list_zip test by adding sha512 sum of the list of files commit 62fab6fc103ad92d7859073af2a9e9b1bffe8375 Author: Carl Chenet generate the hash sum of the list of files for zip archive and add it in the conf file when -G is invoked commit fa65cde7a94ccc3b35898acfb0337d54e2d2b429 Author: Carl Chenet generate the hash sum of the list of files for xz archive and add it in the conf file when -G is invoked commit 520e180dbdc61bb1d1a1061c565046eed3173e58 Author: Carl Chenet fix Test_generate_conf_and_file_list_xz test by adding sha512 sum of the list of files commit 49b73ce7f67f3c33ff99065fea17f18f0535017a Author: Carl Chenet fix Test_generate_conf_and_file_list_bz2 test by adding sha512 sum of the list of files commit fca115b9dfd7214cba05e5a7eb097ce8fdd6394d Author: Carl Chenet generate the hash sum of the list of files for gzip archive and add it in the conf file when -G is invoked commit e8d51d2c9cc5688420c388800095443a16a7e2af Author: Carl Chenet fix Test_generate_conf_and_file_list_gz test by adding sha512 sum of the list of files commit edd322efc32448a7c45077574ea33dda42e47223 Author: Carl Chenet generate the hash sum of the list of files for gzip archive and add it in the conf file when -G is invoked commit 918d2c728ea0891a50405c89552fd1d0ba490cab Author: Carl Chenet fix Test_generate_conf_and_file_list_tar test by adding sha512 sum of the list of files commit 7552003a7b28c39d8e1bf419da23d6e33c344a49 Author: Carl Chenet fix Test_generate_conf_and_file_list_tar_xz test by adding sha512 sum of the list of files commit 446205fc3f63db77976089c9de881a9b2dbf0b9b Author: Carl Chenet fix Test_generate_conf_and_file_list_tar_bz2 test by adding sha512 sum of the list of files commit 37b19ba5555ab981ce796602bd16f9478174d2e4 Author: Carl Chenet fix Test_generate_conf_and_file_list_tar_gz test by adding sha512 sum of the list of files commit 46aea6c4a3b48ae65e46d0990efb352da239272b Author: Carl Chenet generate the hash sum of the list of files for tar archive and add it in the conf file when -G is invoked commit 0d4549c95ff4e3770e5fc8db052c2db37d6c567a Merge: 6b2418a 45eed2c Author: Carl Chenet sha512 parameter must be explicitly managed (None value when not defined in the conf file) and strip gpg header and footer of the configuration file. fixes #44 commit 6b2418a7c7a47c8607c55a40233a412df698f6ca Merge: 2eefed6 628e61a Author: Carl Chenet merge to support hashum in the configuration file. fixes #43 commit 628e61ac4acf73ae2eb7b4919cc4ded4506fe14e Author: Carl Chenet modify the configuration parameter called hash by sha512 commit 45eed2c3fcc901aee7ff401f309dd01f96df7a5b Author: Carl Chenet add missing gpg footer test, missing gpg header test and strip gpg header for tar gz archive test commit bfb17fd0fb01fb2e103afbd104e6ecbb207d30bb Author: Carl Chenet add sha sum in configuration file test commit 05bbccaf2b961a1b11fcf0ad4f86cbb22be27080 Author: Carl Chenet support for hash sum of the list of files in the configuration file commit 2eefed69d52209ae1e4ae950a36b60978daf3bfa Author: Carl Chenet Added tag 0.7 for changeset abdba4451b0a commit 2a498b5e7328f49ca3cbc09934382aaf773a144f Author: Carl Chenet uncomment all the test suite commit 00778d5fcc06d1f25256a4baba87062e405d5898 Author: Carl Chenet remove list of files from the scop of the generate conf and file list of a tree of files test commit fa4e869a8f31f3f184529ad892d525795fbb76c4 Author: Carl Chenet exclude mode from generate conf and file list tree test commit 1e9f686f9cb673100d6f63004fa15715da4cd2c3 Author: Carl Chenet recompose list file to exclude uid/gid commit 2e41a3cea79dff53766eaa60c1547b79c540e810 Author: Carl Chenet remove uid/gid because triggers errors for functional tests while executed on a computer not having the sames users commit 556dbb94db7bfd6fedd79ff3b342f7b2bf3b5e58 Author: Carl Chenet update README for 0.7 commit a882ec02471a2fb3e287ca3545fff7c95b9341a4 Author: Carl Chenet update README for 0.7 commit 00da8d426f94df4c1666d525daf5c0188651be37 Author: Carl Chenet update the changelog for 0.7 commit aa7fdd17cf6b88ae55e2397d599ea6555e9bf4b6 Author: Carl Chenet add generate conf and file list for tree of files test temporary files in .hgignore commit 8558b370b3a364359760c0b70c5f593872db1e10 Author: Carl Chenet add generate conf and file list for tree of files test commit 45984abe93d4c3d8425e35b3703c23565b7b966f Author: Carl Chenet add generate conf and file list in xz test temporary files in .hgignore commit d4dbb146e676984c2cf3bbe2f6682549a7dd61b3 Author: Carl Chenet add generate conf and file list for xz archive test commit 3e1d9977679707fdfd67408fb478311ede091967 Author: Carl Chenet add generate conf and file list in gz and bz2 tests temporary files in .hgignore commit dc56cfaad07e07ba833080d836fa65af5e59049c Author: Carl Chenet add generate conf and file liste for gzip and bzip archives test commit f68ccf1c6888494cacc0c592fb1a2e8fab5c49ec Author: Carl Chenet ignore temporary files of generate conf and file list for zip archive test commit 5656957b56b09ddbe9b6b71b0ef323aabc046c4e Author: Carl Chenet add generate conf an file list for zip archive test commit 9316db554c427e4f6ba65b9e31b832ff33d924a8 Author: Carl Chenet ignore temporary files for the generate conf and file list for tar archive test commit 58aff0af69f24e42af920e009d0fa0ad6b49fd59 Author: Carl Chenet add generate conf and file list for tar archive test commit e50beb84a7c6de2c86c5fe0fcfd1c9ba59b9dc96 Author: Carl Chenet add generate conf and file list in tar xz test temporary files in .hgignore commit 7488656317dddf4d2b5c78843a2036adbe4b83c3 Author: Carl Chenet add generate conf and file list tar xz test commit c257add3c5f0225ccea544d92bc14928b079f074 Author: Carl Chenet add generate conf and file list in tar bz2 test temporary files in .hgignore commit abdb05ee9774b87a1fba96a9cd285d08f7b03c21 Author: Carl Chenet add generate conf and file list tar bz2 test commit 86d208e7edd1c9a0dad5ffc890e17859b521e8a7 Author: Carl Chenet improve generate conf and file list tar gz test - support list file commit 983897fe5ff285b57049cc02e714eaed445f98fa Author: Carl Chenet add generate conf and file list for tar gz archive test commit d2ac28f208af973541c70897b4c128a10e46ac52 Author: Carl Chenet add new files to ignore for genereate conf and file list for tar gz archive test commit 49ef75d180948f5b01a0c4330ad2f8e07889ee35 Author: Carl Chenet bump 0.6 to 0.7 commit 52073f3ce0b79e69da3dfc30acbbe14138f3acb2 Author: Carl Chenet add unsupported parameters for zip archive test commit 5aac0ee04e824822f52c5099953e29bdc413e182 Author: Carl Chenet check every files from the .list files to find unsupported actions for a given kind of archive. fixes #42 commit 81dfd07664f7c652db0d06082dc1f9eba7d13fce Author: Carl Chenet correct typo in error message commit c78d764db212064046507dacd3a8986a5351b49c Author: Carl Chenet bump brebis version to 0.7 commit d414e444280c245148b0b6664ad1ee805da8b854 Merge: 784412b b5d9695 Author: Carl Chenet merge check-target-link branch into default branch commit b5d9695a068998387ea288c0f0f00831468da917 Author: Carl Chenet rename wrong-target* tests and add wrong target in tree test commit 8d44037e7d321e1238fd2cc4c474b0724f8f913a Author: Carl Chenet add wrong targe in tar {bz2,xz} archive tests commit a2ec7b17ca1cb52d6349ca9c163f337d070cd252 Author: Carl Chenet update the code to use targe in generatelistfortree and checktree commit 53c2165e7d93fd5a062fd73e82b94987e1599d5c Author: Carl Chenet update test_listfortree_translate_type_file test commit 2fe35d8a0bec19d77563a6578ea40ba4e83d6af6 Author: Carl Chenet add target as unsupported feature for gz bz2 zip and lzma archive. rename lists for unsupported features to correct old bug commit 7610151f4b906879531e156c25013654b6e7606f Author: Carl Chenet add wrong target in tar gz archive test commit f7ce0e8ac501fc1d1943dc46c6b173095ad92cfb Author: Carl Chenet add target test on tar gz archive commit 784412bc1d10c2eace7eb2ada7b01adccf75b54e Author: Carl Chenet control the behaviour when wrong data are in input. fixes #39 commit dbb753a542761b1b449bd4dc2cd204f2bc493b1f Merge: 83f2086 2c7ffef Author: Carl Chenet define option -G to generate the .conf file. fixes #38 commit 2c7ffefd0df9f8184f51541b015554cba5989d18 Author: Carl Chenet modify existing tests for generatelist commit c7a9679042d09c536a6a3c70d6bd205630b330ee Author: Carl Chenet add option -G to generate configuration file commit 83f2086b346d5acc6d1cbc53aad50f17e2a61869 Author: Carl Chenet Added tag 0.6 for changeset 3b7e8e691fd0 commit 8f96de40908688e9ac48f386e44e137af390d3dd Author: Carl Chenet update the changelog for version 0.6 commit 2783040ceda2911c5198e8ec7d8787097a746991 Author: Carl Chenet update the README for the version 0.6 commit ae2b3740da4037b9685708a27ab7a5d174d4c442 Author: Carl Chenet bump version to 0.6 commit 115db58ff0b5f2e9e9c825b103ba22aa09ede4a5 Author: Carl Chenet give the good name to a (rather unused) stat module function S_ISBLK. fixes #28 commit 521f4a106faa61e271d3473db8f99f2b6ae0cb7f Merge: 0f0a4a3 d0eb8ab Author: Carl Chenet catch EOFError exception triggered while generating/checking a (big) tar archive. fixes #36 commit d0eb8ab10f70c2c13ff16dee3c8d9a37f907c8fc Author: Carl Chenet catch EOFError while checking tar file because it is a sign of corruption of the file commit ed4c8b7d3614b5e5bbb9b2e69dae3c3025f9ad2c Author: Carl Chenet catch EOFError while manipulating tar file because it is a sign of corruption of the file commit 0f0a4a3a9c1e646afd076e002fb4c8d570827c32 Author: Carl Chenet update shebang with debian python3.3 commit ecf3d56a43582c2b599e1e7de7dd87feb3f57275 Author: Carl Chenet add generate list and parse tgz and tbz2 archive tests. fixes #31 commit 12d9bdd979ee0385ce894cd42924e17927102840 Author: Carl Chenet fix code error about support for tbz2 commit 971e61ed46480cc5ca337cef793def728db8839b Author: Carl Chenet check if configuration paths exist. fixes #34 commit db468d6e2c901b6856fef66e279033e2bd1a40d8 Merge: fd87da5 7f7cbad Author: Carl Chenet provide only one configuration file on the cli. fixes #21 commit 7f7cbad82cf255e9573866cd9db5739f5460ede3 Merge: f7607c7 fd87da5 Author: Carl Chenet merge to check if only one conf file feature works with latest version in head commit fd87da579c70f8033eb60e8fea345dc275ae92a4 Author: Carl Chenet create the need directory for wrong file type (hard link) in tree test commit b3e95c697b284e024e16924d1dd44b781365922f Author: Carl Chenet update to wrong file type (hard link) to generate the needed hard link itself commit a1fba115ae4de2b3cc0fd9e1c0d87e861db15ad0 Merge: 8fd3397 fa646fe Author: Carl Chenet detect hard link with stat. fixes #33 commit fa646feb661bd3c863c59295d12bbe05ca1d81a8 Author: Carl Chenet activate wrong file type hard link in tree test commit 41fe3686ad885b6f1802e4f0f7cb338aa9652d03 Author: Carl Chenet detect hard link for uncompressed tree of files commit 8fd33973e2c2215f8911f4f93c7fe4df40bf3662 Author: Carl Chenet add wrong file type hard link in tree - test is useless for now, need #33 to be solved commit 5fbd86891bfdcc7fad87690a4e725f152db36cd0 Author: Carl Chenet add wrong file type (hard link and symbolic link) detection tests in tar.gz, tar.bz2, tar.xe and tree of files commit b7ca15baca6df3867822e21f418adc2c328b6082 Author: Carl Chenet add expecting hard link for tar gz archive functional test commit 35535d4d456176e0aa03f1ee6a2499e91e552c12 Author: Carl Chenet add hard link type support for the error message. fixes #32 commit 93803613b56b627eea9d092de49392275a6f8c87 Author: Carl Chenet add type l for hard link. fixes #29 commit 43054b62cb94eccb140c12953795adaa1d86a55b Merge: 62b2b1e 4f7f571 Author: Carl Chenet merge support for tbz archive. fixes #25 commit 4f7f5715505e18b921cc54bd7a18b782f3656ea4 Author: Carl Chenet add generate list and parse tbz archive functional test commit 1ba2cec4d02d2cbe54d8505bbbe6f8bbe1457c00 Author: Carl Chenet add support for tbz archive commit 62b2b1eec2dc84855d16720c7170123433b5a56f Author: Carl Chenet bump to good current version in cli help message commit 2d687a08c0bf9f0be4bed16955ab2784615379cb Author: Carl Chenet add a test for version consistency in setup.py and cliparse.py. fixes #26 commit 88188657f6e9cbb61282efcaff38c940946a9710 Merge: e5cbe1b b57effd Author: Carl Chenet merge alert-message-for-no-conf-files branch to check if configuration files exist at the user-specified path. fixes #27 commit b57effd88abb30a4733d2e0c115eb7011a8d8edf Author: Carl Chenet check if configuration files exist at the user-specified path. fixes #27 commit e5cbe1b235b44100b03c63ed43362c2ffefd5159 Merge: abc1727 97a617e Author: Carl Chenet add new option to globally switch the default delimiter to a user-defined delimiter to generate the list of files of an archive/path and to check an archive/patch. fixes #22 commit 97a617ec16332b10f817682382e0985e62671a8d Author: Carl Chenet update the manual page commit 9f06844e5022299e18fb1ddf6ae6b7d8d4396219 Author: Carl Chenet add generate list changing default separator for {tar.gz,tar.bz2,tar.xz,gzip,bz2,zip,tree} tests commit fcc746e231123e86b36a65be349559f45933e840 Author: Carl Chenet fix broken tests by the changes for adding the option to swith the delimiter commit 3ebee399b6928af739fae5b20caaca4014eb586b Author: Carl Chenet add delimiter option to replace default delimiter in the list of files, both working to generate lists and check backups commit abc1727ee695a931f612f765ffd01ae26ba623d0 Merge: 476555b 6838428 Author: Carl Chenet check if supported archives in listtype.py and checkbackups.py are consistent.fixes #24 commit 6838428e0aa915c437e198e8796f25a5513f6ab3 Author: Carl Chenet add a test to detect missing archive types between listtype.py and checkbackups.py commit 65b463ed843c853174d19d5c86e049458afcf7fd Author: Carl Chenet add missing support for tbz2 commit f7607c711c488153bf334be40da0e73ad59dda40 Author: Carl Chenet -c option now manages a single configuration file commit 476555b8f47bd90e06213cde1a5fbd44fcf837e4 Author: Carl Chenet Added tag 0.5 for changeset 1616effdc58d commit f90760577f8d0739975d6dde9d40697c67523b31 Author: Carl Chenet add the brebis changelog commit 326eb631c6ff8a0f468a6e4155e92800834f237c Author: Carl Chenet add a small script to generate archive given the current version in setup.py commit 0461db94e8edba20910480900ce768d953f7f1e2 Author: Carl Chenet switch the shebang to system path for python3.3 on debian linux commit 746b53d7a27a58f9773f02d75ade06927df50204 Author: Carl Chenet replace logging.warn (deprecated) by logging.warning commit bce51296f148798be59152ae2d41d5069d84e883 Author: Carl Chenet switch the shebang to system path for python3.3 on debian linux commit 113d8d52d830bc4c26a69011b3ee1b99c5c87d88 Author: Carl Chenet bump the date of the copyright to 2013 commit 0d617089db5f2ea2d59c59d796bb5c87b061eec1 Author: Carl Chenet add a manual page for brebis. fixes #23 commit a6d1a3ba45891ddcf7feba0cdfa0cb5afe8de5d0 Author: Carl Chenet add in the README that using .conf for the configuration file is mandatory. fixes #19 commit d8c801a9051eec8f2419b684a584ae411ff627dc Author: Carl Chenet update the README for python 3.3 and brebis 0.5 commit 89e63989174bba33e90aa989feffbe6a4e3147f7 Author: Carl Chenet update to python 3.3 and brebis 0.5 commit d21b99f1266b17a843a25b0c0f5e4fa64df107de Merge: 54e7037 e3267f4 Author: Carl Chenet merge support for lzma in the default branch commit e3267f4015dfd203b1f7c164a8f3b7a965e300aa Author: Carl Chenet add expected generated list for xz archive test commit 9a91ee21e3495293c9f28637a58c3ad7efea22eb Author: Carl Chenet fix bug with the filename in the .list of a xz generated archive & add generate liste and parse parameters xz archive test commit 73e72f050a1e937269bf8e42d694b012853317c5 Author: Carl Chenet add unsupported parameters xz archive test commit 684ae13c2e14b98423bf612de0820a1d593736fb Author: Carl Chenet add file missing in xz test commit 9f779953dcb2f1cab07765171040f1b2fcdb3dd0 Author: Carl Chenet not easily possible to get lzma/xz uncompressed file size - maybe later commit e039382848c266ef9ac61d4a76df1411850d9aa6 Author: Carl Chenet add corrupted xz archive test commit 64e1e5f33ee01cb8f09ffff96f85bea673a99a09 Author: Carl Chenet add expected file smaller than file in tar xz archive test commit ad0c27c61937641570b2171cabb5078222956735 Author: Carl Chenet add expected file not equals file in tar xz archive test commit c4c10ef0aef5075ee4b4f91f02825ae46623c42a Author: Carl Chenet add expected file greater than file in tar xz archive test commit cddde8df44e84676c4783c2e90878b0dc91d9075 Author: Carl Chenet add corrupted tar xz archive test commit 756ea60fa5eb45b7e3493cb5c6b73b6521ecc1dd Author: Carl Chenet add unexpected file in tar xz archive test commit d153e6c477f7e02be0f0608899893c54f2bb2707 Author: Carl Chenet add wrong file sha512 in xz archive test commit 67be34bcef4bdffcc052daf09765065b7845491f Author: Carl Chenet add wrong file sha384 hash in xz archive test commit 86b5ec691f08809df0ebc2218301e3fc08c1bcc9 Author: Carl Chenet add wrong file sha256 hash in xz archive test commit c6d0cd0e87eaa4a05552b0ebeb1d00553c76f3dc Author: Carl Chenet add wrong file sha224 in xz archive test commit ba906f5c5e9cb68d24c9c24fab6e9a4b71a4c1f6 Author: Carl Chenet add wrong file sha1 in xz archive test commit 78048a5b2b4b6f3155dfd738531f616a9095ea3a Author: Carl Chenet add wrong file md5 hash in xz archive test commit 4664eedea2c02603d43ec8a9771c8439bdc93473 Author: Carl Chenet add wrong file sha512 hash in tar xz archive test commit 1c1104ed0687735462b24fe0edc7faf4c5af2a3c Author: Carl Chenet add wrong file sha384 hash in tar xz archive test commit 9b7ce7d3409c99f53ba88f1d282983561116a3ca Author: Carl Chenet add wrong file sha256 hash in tar xz archive test commit 6cc21a420e4f9238e458d8a9ded30456ce8b57d4 Author: Carl Chenet add wrong file sha224 hash in tar xz archive test commit 685aa731e8cffcb1caf1b247a92fdfc078678a1f Author: Carl Chenet add wrong file sha1 hash in tar xz archive test commit a9f9fb0d2a6155054326f771e7e2fb0440f56a24 Author: Carl Chenet add wrong file md5 hash in tar xz archive test commit 7586b2fdc8a9c8ff63f26d8862be6dfb3b48bd33 Author: Carl Chenet add wrong file type f in tar xz archive test commit ed3b14b6f442c971ed8ea3610b8e7df746277356 Author: Carl Chenet add wrong file type d in tar xz archive test commit 2408fc545ae18864eeda5c4543b6f1ecf06e4638 Author: Carl Chenet add wrong file gid in tar xz archive test commit 2c02d490a3a41ed556232d368e55a1e3c5a6992f Author: Carl Chenet add wrong file uid in tar xz archive test commit d7e9d83797b859683b239a908fcdf362a22d62e1 Author: Carl Chenet add wrong file mode in tar xz archive test commit a2ad59835c84afa9398c7e89b8eecf737702fcba Author: Carl Chenet add wrong bzip2 archive gid test commit bb7988233f935fe4de0e4028e76fb3d88c67326d Author: Carl Chenet add wrong bz2 archive uid test commit c6b4d4f8ba95e6b2fd690deeac6ad8310cacc2df Author: Carl Chenet add wrong xz archive sha512 hash test commit f8c642d12aeb413067373c0dbe5412ba3f35df13 Author: Carl Chenet add wrong xz archive sha384 hash test commit 0a3462f80c26f94d7f8f4d16a2dbef4ae0fcacaa Author: Carl Chenet add wrong xz archive sha256 hash test commit 0476f5fd54a686c961830fec5ddc3b936ea6ac8c Author: Carl Chenet add wrong xz archive sha224 hash test commit 2291bff870e17d15457ee470b6fa68c2816af638 Author: Carl Chenet add wrong xz archive sha1 hash test commit 6921cc10797c1968c4856f3a13dd27d3df194926 Author: Carl Chenet add wrong xz archive md5 hash test commit a36fb0017ec222ed540c5edb27a3d8f65e9273ce Author: Carl Chenet add wrong xz archive mode test commit c73a1b098bc50c245a3f46154380cc7c60a318f5 Author: Carl Chenet add wrong xz archive gid test commit 61c3783b45f23e217ac1f434660aaadda68ff18d Author: Carl Chenet add wrong xz archive uid test commit fd34302503d7bccc5fc7998a37bd8c5348eb8393 Author: Carl Chenet add wrong tar xz archive sha512 hash test commit f54d47a47867f1b3f2a5939716af3d268591dabd Author: Carl Chenet add wrong tar xz archive sha384 hash test commit 831e61dce4c044353f8ea88ee24b916c75c75cea Author: Carl Chenet add wrong tar xz archive sha256 hash test commit 43b7845ba168c699b335eb57e9f8540c4b04476e Author: Carl Chenet add wrong tar xz archive sha224 hash test commit e156d8083da648b232048c400ec463891bdddab5 Author: Carl Chenet add wrong tar xz archive sha1 hash test commit a9aa52074278f0c8db91d5c447729aa0e1d24bc8 Author: Carl Chenet add wrong tar xz archive sha1 hash test commit c3190b853886380fdbb725bdf7344be976979d6a Author: Carl Chenet add wrong tar xz archive md5 hash test commit b60d02d159d00d1045cc8ae6a2bcba95deed0944 Author: Carl Chenet add wrong tar xz archive mode test commit 51526e5d9ff557aacde8be0dbd9f7c5d42e19ad4 Author: Carl Chenet add wrong tar xz archive uid and gid tests commit ad512854cb6b87688b34f1a61ae47f83e5792af5 Author: Carl Chenet add tar xz archive size smaller than expected size test commit 12e0f953c8f27696705cab3b3670abc4d8d679f5 Author: Carl Chenet add tar.xz archive size not equals expected size test commit 5293912d6a7adfc4779f829976d282f40e011a98 Author: Carl Chenet add a test for tar zx archive size bigger than an expected size and removing unexpected a.out file commit 6e1acb22028ac77f9dc16f0e20d73d461966918b Author: Carl Chenet add test tar-xz archive size bigger than an expected size commit 1d4f753c001c003be3fa5e9fc08603ba73fa2873 Author: Carl Chenet add support for tar.xz files and add two functional tests for xm format commit 5b3814683eaf7fa347a28ee53b0bbd715cc978d1 Author: Carl Chenet support for lzma and first functional test commit 54e703767f6e9c321063f08aa849b89b15d1be00 Author: Carl Chenet Added signature for changeset 955e902e51c8 commit 495a72baee17bf2dddefdacd423ba99c7a6640fe Author: Carl Chenet Added tag v0.4 for changeset 955e902e51c8 commit 0bcf32dffe6a57a0ea09f7c1e0939a4f9d0a4b66 Author: Carl Chenet add comment about delimiter optional field commit 5a3cfae47e7d540eb9f1469f9966fd228c2e3b36 Author: Carl Chenet modify setup.py in order to manage new packages brebis.checkbackups and brebis.generatelist while installing commit c7cf1ecb4e1bbd036feb5520d6683e7d082d29c2 Author: Carl Chenet update for version 0.4 commit f01876c52e14841cb9adde5b9a55e4d2dc4bc8e3 Author: Carl Chenet fixing issue with no perm, in generatelist part commit d2fb241cd3d1cda55a6f65239f00e3affcfc109c Author: Carl Chenet fixes #14, size unit can now be lower or upper case commit fcf49db55f81bda3e258de338365a427af31ecc0 Author: Carl Chenet fixes #15 managing special cas when mode == '0' -> transforming into '000' commit 5b2f7de772964d60dfcefef773ac3660a78c5337 Author: Carl Chenet fixed #16 correcting a bad format using non-existing keyword size (should have been =) commit a5794664d74a91aff485bf713d6b11ab04f68e34 Merge: 60f1957 5711a7b Author: Carl Chenet merging branch for archive size functional tests commit 5711a7bce2a9f404d730577a25a5c7447720cab7 Author: Carl Chenet adding functional tests for testing smaller than parameter of the size of an archive commit 20028ca3184271bf2646eacc3ca696d3c5dbb938 Author: Carl Chenet adding functional tests for testing bigger than parameter of the size of an archive commit 3685aaf3c42f91f5c276a3798f45434972807f60 Author: Carl Chenet adding functional tests for testing equality of the size of an archive commit 60f19570bf88793316fa20b2ca909fa4807b5dee Merge: b9b6ea5 bb7b6a0 Author: Carl Chenet merging -g option branch and updating version number commit bb7b6a0d798babec03b440c0b3a326bef807e6c7 Author: Carl Chenet achieved to write functional tests for the tar-only archive commit cd4a793945d9adea10783188c881b1fbb75f46bd Author: Carl Chenet added unit tests for tar-only archive type commit beedce2bbef19e8e62a2fbcd84a2a545f4792d03 Author: Carl Chenet support for user-specified delimiter, unit tests and functional tests, removed number for each functional test commit 4cb7dcaeb3d9f1172531f0b22e10a37f5c078514 Author: Carl Chenet intermediate commit for -g option and new delimiter and custom delimiter commit b9b6ea5ce93ed668eb701e56b4037970e7a2293d Author: Carl Chenet adding directory for unit tests commit e285701e75f3d426eff0c411b57424240081a737 Author: Carl Chenet adding unit tests for private/protected methods commit 7bb988455e3fa2c05238bb03f1264604774cf228 Author: Carl Chenet upgrading version number in setup.py commit a22d39d402a850b88eae3f5b02ec32d2efa620cc Author: Carl Chenet upgrading version number in README commit 7fe63b27a24f194f4744138704162f9391edfefc Author: Carl Chenet upgrading version number commit c9dccae4825fedc93fe1313c6e471add9d1f4fab Author: Carl Chenet correctiong unit tests to manage new check modules organization commit 323b61dfc85114aa0e739b81bfc0f0bb41e89bd7 Author: Carl Chenet fixed #9 - support for tar-only file commit 524fafb31b06abcf8c10d5fbef0a5a1b4ce1f76e Merge: 0fb7337 525959c Author: Carl Chenet fixed #11 commit 525959c366cab81ea0dd5ecad81a1227ab7d9dbe Author: Carl Chenet fixed #11 - new package checkbackups commit 0fb73371177abd0779779c0a70ebb57b29a11da9 Merge: 93ce6ba 75041ac Author: Carl Chenet merging generate-list-files branch and default branch commit 75041ac4c793f146683d5c0acc8b749ebd084712 Author: Carl Chenet final tests generate and parse for --gen-list option commit 59c5ff5156458e258f81d6479876ce6c6bef4aee Author: Carl Chenet removing expected-generated-list-for-tree because of lack of portability commit dcd1583a9917226ecb1966f7f40cd097e39ba57a Author: Carl Chenet functional tests for expected generated list files commit 4da23acbde4ab36414f2423fa739f1f5e99592e1 Author: Carl Chenet added the support of generation of list of files for gzip archives commit 6f02a0f02f45b174e94603bea44ed8ebee51baff Author: Carl Chenet complete generated list for tar,zip,tree commit ebe30e99a673deb202b21a2fb0923af84751b074 Author: Carl Chenet added the support of generation of list of files for tree of files commit 028139303627c34bf81e43f4177ec77e425a4232 Author: Carl Chenet removing unwanted file list from hg watched files commit 01a803c07717277403e41eaed1920a1bc64bca29 Author: Carl Chenet generate list of files for tar and zip archives - tree incoming commit c6163c01ec1b5c160f87eee84b9c42214fb464bd Author: Carl Chenet seems to begin to work - issue with name of output file and headers of generated list solved commit 5a94ba7718544010cf56c288fe8d86b199c5f075 Author: Carl Chenet seems to begin to work - a problem remains with the output file named tlist commit e4cc245e805a6b6a896d8bea65978ccf6975def4 Author: Carl Chenet added generate list modules for archives and tree commit 9aa5be9895d90d57732bb92b06515185430619f4 Author: Carl Chenet first commit with beginning of support to generate list of files in the archives commit 93ce6ba543eb7e0281019e0e2d1b65dc4f10da36 Author: Carl Chenet Added signature for changeset 5a1340cb05cf commit a9ecff88f5be55929e42830c1e9db01db2ac5ee2 Author: Carl Chenet Added tag v0.3 for changeset 986f90788294 commit 3d9a66149f542ba916a14c29be9887510f100b6a Author: Carl Chenet updating version field commit b7e3e6cf4fbb0851ac4fbe0a09b1bd25ace1d87c Author: Carl Chenet updated README commit 7dffc0a91041190630e0a1638a168fd60d21f3fd Author: Carl Chenet setting version to 0.3 commit 8cf238ef552049445df699abc630d0e100717a3a Author: Carl Chenet replacing parameters tuples by sets commit 4621fc33b61adadbbb119f444e8a21f5c63c2940 Author: Carl Chenet adding support for warning about archive limitation for bzip2 archive commit eae5ac0263e735b5dcfb08e246dadd461eeba0b1 Merge: 74b386b fa065fb Author: Carl Chenet merging the branch for test limitations for archive and default commit 74b386bc712521658f3e40ac209c6644f5b619dc Merge: a430b52 2632166 Author: Carl Chenet merged support for bzip2 only archive in default branch commit 2632166adbe395508ab488202c8b289286430503 Author: Carl Chenet added default parameter type for file inside a bzip2 archive commit fa065fb610ade4e6d5053256c71c0c6023fff502 Author: Carl Chenet added support for warning user about current archive limitation commit 543e30411c7befc87b536dcc2609dc2851501e1e Author: Carl Chenet added functional tests for file hash in bzip2 files - added unit tests for hash in gzip and bzip2 files commit 5bb71daea4030dd0393f0ffb12c725e5793cc5ef Author: Carl Chenet functional tests for hash of the bzip2 archive commit 56b8c877dd75ce8e6d3d2ac01d79d05bd3938810 Author: Carl Chenet Support for missing file and default size - associated unittests commit 996e143ee306877ed3264e16d6e3f8b259c98428 Author: Carl Chenet support for corrupted bz2 archive detection and associated test commit 81a245cfeab36c21f610d282d261482bf2f938f5 Author: Carl Chenet corrected mistakes in docstring commit d34822549f0727e9c9426d4cc70b05d863c8910b Author: Carl Chenet corrected docstrings commit a430b5221665c96386403d6bda41b08b07ec6f71 Merge: 37ee442 6d02301 Author: Carl Chenet merging support-for-gzip branch with default branch commit 6d0230199d5ea37959bcfc7c32f5d4dd9557defc Author: Carl Chenet acceptable detection for gzip archive corruption commit e824dcda21b4053b83d5a5dd4064c5f47e8eb0d3 Merge: 3edb894 37ee442 Author: Carl Chenet synchronzed with default branch commit 37ee4423fb112ed4185af199c637c61e9faee9aa Author: Carl Chenet reverting last fix -not the good way to do it commit 4c2f669dfb3ee33e650b93e933bb112ff7f52499 Merge: 3d08e49 74f302a Author: Carl Chenet fixed #8 support for error detection in gzip archive commit 74f302aed83744dab96f67e05a7e51a217ecaa4e Author: Carl Chenet added support for error detection on gzip archive commit 3d08e49a3f01f7f58974d0661158e46d716098aa Author: Carl Chenet Added signature for changeset b746a25ea5dc commit 107ada589f0901be511fa21af303aae81ad28012 Author: Carl Chenet Added tag 0.2 for changeset b746a25ea5dc commit 518d3fd1fe7049b25e849ca2ef9233195b35314b Author: Carl Chenet fixed version id commit 850697cc986994445db28315794e4038e52161c2 Author: Carl Chenet Removed tag 0.2 commit 5444a2c10247a8b302278389d35026f537158ba5 Author: Carl Chenet Added signature for changeset 333cde7ecab7 commit 542713ed8642dd0909cd2406066afec2938209d9 Author: Carl Chenet Added tag 0.2 for changeset 333cde7ecab7 commit 6ea81bafa4462be9ad9fe9478c147c3ed1e0ce33 Merge: 1f3b04f 3edb894 Author: Carl Chenet merging support-for-gzip in default - fixes #3 #5 commit 3edb894c5e94ff187aca9b864506e6a7bd34a120 Author: Carl Chenet added unit tests for the new CheckGzip class private and protected methods commit 87fa08d2a0788026c887dd2c5b6a00665101cc83 Author: Carl Chenet solved an issue with unclosed file object commit 88d83284f03b2736744412aa8e3987fc26521c9a Author: Carl Chenet added gzip archive to full criteria multiple backups functional tests commit 4369578345154a3109a34cd825d46c10e6044e8b Author: Carl Chenet added functional test for unexpected file in gzip archive commit 79d82c49e94b57e97a30462943d173ba3522bdf4 Author: Carl Chenet added functional test to check a missing file in a gzip archive commit a4dac2d552903f864c8376974fcdd3977072db8a Merge: ae6eab8 7d12ee5 Author: Carl Chenet merging current branch and add-missing-types branch commit 7d12ee5ab3fe4fedbf4bf77c8d5d62465fa8667e Author: Carl Chenet support for hash checking for file in gzip and associated tests commit 97ea9b1f36e78e1d8422d43d453ef7507aef6d19 Author: Carl Chenet tarfile.CONTYPE -> tarfile.CONTTYPE commit ae6eab8077d8401cfd650f1b6a8edb51ac8fb730 Author: Carl Chenet added support for initial filename in gzip and associated test with corrections on existing gzip tests commit e6930f9ef462c462cc307b93e3d1286c396e3d46 Author: Carl Chenet added tests bigger than and smaller than for file inside gzip archive commit 4bda1595c8f9e43a260402cdb508be9ba39a7788 Author: Carl Chenet adding files for equality functional test commit b2e19f08f217c9e6e0bf125fbdb688caa60acc03 Author: Carl Chenet added support for size test on a file inside the gzip archive + equality functional test commit b7018793e59f55857bb3c47b78d28fc2411e60c5 Author: Carl Chenet added support for gzip file and associated functional tests commit 1f3b04f1c3f4092fbdeef5af8bfe223123b88b7f Author: Carl Chenet Added signature for changeset ec91cf3e3652 commit 76c133b3ffc6eb247c62d02ad934eb43223e29ef Author: Carl Chenet Added tag 0.1 for changeset 95d79ac84890 commit 78d0344d70075bd79aaec01fad4b6390d9ba76d9 Merge: 9951ea9 8505eaa Author: Carl Chenet updating README commit 8505eaa3edf478244c05593b9bac76a52b3a6fce Author: Carl Chenet fixed issues with multiple backups/criterias test commit e7aac4ebfcf936ff0ac747d6ee34e3378bbd9f2f Author: Carl Chenet written test for multiple backups with several criterias commit 0dced8f3495658c4f2057a1adbad88a76e69e5ab Author: Carl Chenet fixed a bug with double entries in list file - configparser error not catched commit d71bdc2d682ef5c9bc0e8abbadbdfcc5eaff0da1 Author: Carl Chenet writing a functional test with all the criterias for several backups in one launch commit 7a78f39597bbecfc4d222ef8048767357e4e13b3 Author: Carl Chenet empty directory made mercurial skips the repertory and fails the test93 commit 5ccffbb90945270a45188f6f9d857d7a1a52ec2e Author: Carl Chenet fixed a bug when in configuration type is archive and a path to a directory is given - also wrote functional tests commit a2dd80ca29d24823f2d18f3278ead39d2e527b32 Author: Carl Chenet added functional tests on the size of the files inside the archive commit 24c35c2bbdee6bb8ec0399a44885f187a2ac6565 Author: Carl Chenet added test2 docstring in functionaltests.py commit f20d3bf6e82dcc319d5df81bf7508b882d67c2c5 Merge: 2a9387c 4cb8b94 Author: Carl Chenet added changes from shell-variable-in-functionaltests-py branch commit 4cb8b9470a1104ae5999e592ba2b3fde6912e71d Author: Carl Chenet functionaltests.py is now supported by buildbot commit 2a9387c0390cfa72d7a9a3ecf2d89de9a716a6f4 Author: Carl Chenet added AUTHORS, LICENSE and README files commit 27a35830db2438207f468e2314b31cd26cfa9e07 Author: Carl Chenet corrected a permission denied bug while creating the logging brebis file in unauthorized directories commit 38261a61bc878b60a8d06a9ad0b2d2f337e1e696 Author: Carl Chenet modified root directory structure in order to ease developement process commit bef5ba6ccd2f215e15b44d14808496162d213a73 Author: Carl Chenet functionaltests.py provides error output and error status commit 26cd32d12ca02f50fa1496c5b56d6bb531cb4263 Author: Carl Chenet added a test to check if two config files with the same names are rejected commit 313c06f75842006514c347746f62c795e2b88679 Author: Carl Chenet fixed unit tests in order to be portable commit 99be963629c19193dd831b37ed46c09153252d54 Author: Carl Chenet added comment on functional test1 commit e8e034eda54e8b1288a057a4d607de19f4547a0f Merge: 1e0481c f3da1fb Author: Carl Chenet merged with removed-checkhashes-class in order to removed no more used part of the code commit f3da1fbaf3c4f5cd7c623e530b63f080470b7eac Author: Carl Chenet removing unused CheckHashes classes and associated tests commit 3254fe187391206284a4db8e5bdf0f0d885acd1c Author: Carl Chenet created remove-checkhashes branch commit 1e0481c5f4762d5603c1886c8182e95bfbb367fe Author: Carl Chenet added functional tests to identify corrupted zip archive commit b422523f6db8b471f633d8c68b66368ba3d34611 Author: Carl Chenet added cleare warning message about zip archive corruption commit 835a66127e88a24bfe1dc2418f4493960a969030 Author: Carl Chenet added functional test to identify corrupted tar.bz2 archive commit f1e7a2ee14e7027073805a999c849c4f97b66edf Author: Carl Chenet added functional test for tar.gz corrupted archive commit a0483bdfcea3044f89c3de36238ac459d8cf820b Author: Carl Chenet discriminating archives by their extensions commit 7abaccb4a3f8f0fe0f33766a3b248db096aeb1a0 Author: Carl Chenet added unit tests for private/protected methods in checktree.CheckTree commit 5803c090db9b5c3193d97e1e09f86542488c78ac Author: Carl Chenet switched from os.stat() to os.lstat() to identify symbolic link commit c44761b0c7b6f69a863892171feda2425d8d9517 Author: Carl Chenet added unit tests for private/protected methods in checktar.CheckTar commit b1d8e622c1274560c2ef8088dc4a9792e67d0661 Author: Carl Chenet added unit test for checkzip.CheckZip__extract_uid_gid private method commit 4b24065f7e5cc6965197fbbf05df84ed37fdd019 Author: Carl Chenet added unit test for checkzip.CheckZip__extract_uid_gid private method commit 020b8a391035600722103e772dd1bd4dde7aa572 Author: Carl Chenet added unit tests to check checkzip.CheckZip.__translate_type method commit b97320171ad94d860b7a3ab9ad488efd87096f11 Author: Carl Chenet simplify functional tests by cutting in half the number of lines of code commit 342e4230d9c8f30f6321759a938e63975da237a1 Author: Carl Chenet corrected bug on directory, normalizing in striping the trailing slash because of possible wrong user input commit 1d2c649c361bdf97fbdbe21df3191aa7de4074a7 Author: Carl Chenet added tests for wrong file mode in zip, wrong file type directory and file for zip archives and wrong uid and gid for files in zip archive commit 6cb00105241729ded0275260a301e2b405710c14 Author: Carl Chenet added support for mode checking in zip archive and associated functional tests commit 5d5b16b9d3aeff84f81ed83a2d1d0bec38a3592d Author: Carl Chenet added tests for file mode and type (f,d) in the archives and trees commit d103d5776fc8e46fc79b6f99d903784751bb1675 Author: Carl Chenet functional tests to check hash in tar.gz,tar.bz2,zip and tree commit 1eec1c8525c247be27666ef22dffb24d62a90a00 Author: Carl Chenet added functional tests for wrong hashes for files inside tar.gz and tar.bz2 commit b4dd930cba386972ca5ca459facd385ea4d5f0c8 Author: Carl Chenet added tests for unexpected files and for wrong uid/gid for files inside archives and tree commit e95672f48b2c8589865d1a57a47506e3b65dee68 Merge: 8e0460e 0503522 Author: Carl Chenet merge queue use for multiprocessing communication in functionaltests.py commit 0503522e85554153de4c8c4b5c8fc7e3d3d152ae Author: Carl Chenet added queue for multiprocessing communication in functionaltests.py commit 8e0460e5b57590e7057cc279eb1568da9eada0b5 Author: Carl Chenet added locks for functional tests access to print and wrote uid/gid tests for file inside the archive commit e6c9f131dbbb95930c7b0073a354df1b626e310c Author: Carl Chenet moving functional tests to functionaltests.py with introspection to simplify the code commit 2548cd8b7b0dd99e3e178a48bd5439c183a6afad Merge: bab9e54 29b7f6f Author: Carl Chenet using multiprocessing for functional tests commit 29b7f6fe87fc62c59d5ce57360dda33d0292a48e Author: Carl Chenet added multiprocessing to execute functional tests commit bab9e54382cbf14adde093f96fae31f3c81bd5f4 Author: Carl Chenet added functional tests to check the hashes of zip archives commit c92779ca25d0e90bce514b023c5a081484ecdd91 Author: Carl Chenet added functional tests to check the hashes of tar.gz and tar.bz2 archives commit 4785b64e3c0604ee0bc19de13ca19c82bf019491 Author: Carl Chenet added functional test to check the gid of an archive commit 760ab2132d6496c04823c8051b7b88ea1bfe535f Author: Carl Chenet added functional test to check the uid of an archive commit eb68547ed33a38e54bfbc9456c4dbcf8a50c9d35 Author: Carl Chenet added functional test to check the mode of an archive commit a3f24c2b08297d62cb8472116b64c95eb772aea0 Author: Carl Chenet added functional test to check file missing in tree commit b0f7552c552fd1548240b83383ccc1be695112fa Author: Carl Chenet adding functional tests to complete unittests commit 4bbe19c31d7259e955cddbf7c228f9f1afdb0f0e Author: Carl Chenet improved the syntax of the list of files for tree commit 7431b2926bf1827902d02f92688ffa592e8cb77a Author: Carl Chenet catch correctly ConfigParser errors from the expected values file commit 563325bbb637b23ab6f726b1c04ddb172fffcbb9 Author: Carl Chenet fixed corrupted zip detection commit bb725b5d2bf9b6114d678b0589f1870064540622 Author: Carl Chenet fixed unpleasant syntax for the hash of the expected archive commit 9951ea92469410b6cf8c83c3b63a95cc2aaacd4b Merge: cb479cd 01ccfd8 Author: Carl Chenet merge with most recent branch commit 01ccfd82392e35837e321dcce80c66ec56d01d36 Author: Carl Chenet issues with relative links fixed thanks to absolute links use commit 4b24e89aa8df4627b14fc341de23d6a9a2a4b72e Author: Carl Chenet relative paths issues commit d034a5b5f048f074a70d5ac5ea0d84edb66bfa74 Author: Carl Chenet correct error in the call of the main module commit eed953339a712399c5d618ab0aaf6e4db3e010ae Author: Carl Chenet stop execution when two configurations have the same name commit ccc17b0ead2ddf93d2099f4762e495b702ffa2c3 Author: Carl Chenet added expectFailure for tests with sticky bits and special files (user should fix it by himself after checking out the repository) commit 0386c39f628a2d70e50c73b534048e9de9f2c497 Author: Carl Chenet added missing file bar with 755 rights commit cb479cd603d4a34c031d684cb11d8e0cd0a6d597 Author: Carl Chenet added absolute path to main module commit 6c593556bf6d58c7738d835fb3ef395502b7e24e Author: Carl Chenet again again a test for buildbot commit 7e8aa36eb03bbfd5e88fb9ef7b6378de78454fdd Author: Carl Chenet again a simple test commit 9f85543a7f1d4149b1616984cd16556ac6716c70 Author: Carl Chenet simple test for buildbot commit 82fbdf0cce1394dc356d28c33c8d716fe9cfb316 Merge: 5f3a28f 6c59355 Author: Carl Chenet hopefully last test for buildbot commit 5f3a28f5c254181acb862058fa9a0bc5495e8ec4 Author: Carl Chenet added restrictions on python versions able to install Brebis commit 5bda9e81e2201bc98e538c41b531c57504217e75 Author: Carl Chenet updated copyright mentions commit 2521e402a8644358c756b9fed8be8291575ac154 Author: Carl Chenet good path to brebis script commit 7b5e32d80457a721846c16128e7348d55b22d5f6 Author: Carl Chenet modified package structure commit 88d53e42d3bfe0bbd9303fca4c9d4d17ab874416 Author: Carl Chenet using distutils with setup.py commit eb5a018f9d4560a437616dfea390bebe96afc029 Author: Carl Chenet corrected an error in setup.py commit 75a0952a4715c781bbd71073be3399244daeb1f5 Author: Carl Chenet added setup.py commit c6273064873be881d25e554d8701ddd2090afc26 Author: Carl Chenet added unit tests for private methods of CheckArchive and uid-gid of the archive itself commit cf0e6a2462ab0b821c9f3b0dd58ff914af5c5cc4 Author: Carl Chenet added support for checking uid gid of the archive itself commit 482eecd93c13c93f10be5a7bb550be470ede3d2d Author: Carl Chenet added support for checking the mode of the archive itself commit 9b590341a3e49effcb665d656aa30240d56a9607 Author: Carl Chenet moved archive checks to checkarchive.py commit 4f948e6720d56f7ece3563de1fe92a212dcaee87 Author: Carl Chenet added support for hash checking for the archive itself commit 9b511c311518859d4b60a85304f728e9e38cce77 Author: Carl Chenet modified messages to cope with the check results for the archive itself commit cc9192295b32a0154b39b9e56eea75b60443d8bc Author: Carl Chenet using : instead of = with configparser in attribute lists commit a2380bacf2e0e98b45ddfa425bc5954ca1574847 Author: Carl Chenet checking the size (equal/biggerthan/smallerthan) of the archive itself is now available - tests and uniitests also ready commit 88bfce07f0b926e355061e4ea560f5fb93d9e288 Author: Carl Chenet bump shebang to python3.2 commit d595a947851fa4f1b3b5b7724bf3314e37958231 Author: Carl Chenet modified equal/bigger/smaller messages to cope with the archives themselves commit f72a783187ba6034eb677af3cf90516cf151591f Author: Carl Chenet resized the test archive and fixed the associated value commit f3ce089f3c96ea646993f2246e2117137b6a15f9 Author: Carl Chenet replaced expectedfiles class and module by expectedvalues commit 1170e66142f5a68f5647d30a8ea9c161ce83a700 Author: Carl Chenet fixed a ResourceWarning warning commit 485a92afca629271662ff19c314444330ca4add8 Author: Carl Chenet using hashlib.algorithms_guaranteed starting with python3.2 commit 01388b7d11637ba8b1d0255f6b92e0090f749e92 Author: Carl Chenet changed expectedfiles class and module by expectedvalues commit ff6582bfd793e675e4fc47da30d41e8a62bf8798 Author: Carl Chenet fixed descriptor issue triggering a ResourceWarning with python 3.2 commit 70003d407b241568b37ab401007cccbe3ddebf2a Author: Carl Chenet added information in the docstrings commit 07afee16429aa40d75292cfc8f16983fd50439e5 Author: Carl Chenet got rid of database controls - see database support branch from now on commit dd032825f241e9581fcec7ee3df486845db7748e Author: Carl Chenet added tests for existing table in mysql and postgresql databases commit 214454fc084a42b1e201c2e24fd51c062977fe5f Merge: 0d9d842 73b119c Author: Carl Chenet added support for hash control of a file inside an archive commit 73b119cfe3a0ac99fdabc68bfc49cda3b0472084 Author: Carl Chenet added support for hash control in archives (zip,tar and filetree) commit 0d9d842523da9dbbfbc13ac5cf58a9850a342ab3 Author: Carl Chenet changed the string required to identify the mode parameter commit 9bf018e3de5aea5e3c41029599eaa769048950ef Author: Carl Chenet support for expected types for both tarfiles and filetree commit 84c053bb31bf67f8008b097e641671126d0f978b Merge: 4c44a3e 50f526e Author: Carl Chenet merge branch dedicated to support for expected modes in filetree commit 50f526e4794bd1e723b0ab1be0f3ac04eee1f556 Author: Carl Chenet added support for expected modes for filetree commit 5af2ba717b0e8f6a186ca170a159207618e2894c Author: Carl Chenet adde support for expected file mode for archives commit 4c44a3ef34e233c0a7482765007adb0c03e734fe Author: Carl Chenet added support for uid/gid parameter for filetree commit e74c04932995a45b945829a712a66a670e36f345 Author: Carl Chenet added support for zip64 (zip files > 4G) commit 03461c6e64d9264888742ee9ef2c95c9327118c8 Author: Carl Chenet catch uid/gid wrong parameters with ValueError exception commit ab67ab273abcf92249c3c8618f982f5842fabd4e Author: Carl Chenet added support for uid/gid checks commit 9cf9dc70a6ee85a54e55cf292aea699b12a38aae Author: Carl Chenet added support for unexpected files commit 176d03880bbbff1e3be1a1b549c0a896a3d36c81 Author: Carl Chenet added support for multiple items for a file commit 25f7eb59153ab6c01f70fdca6cb7afb96176069c Author: Carl Chenet added good test for ExpectedFiles class commit 1da162e8a1d127d1100fabc26ad75825ebeb3d1f Author: Carl Chenet corrected a runtime error commit d20d6b942359b017ecc452d6e709527500daf650 Author: Carl Chenet conforming to pep008 commit 77d859d7e1125a81d48ddd4c6cf2c53bc9c667d1 Author: Carl Chenet added unittests for md5,sha1,sha224,sha256,sha384 and sha512 sums commit f3e5841f83221ef9f180413590d9d59b00477844 Merge: 0ac670a 0d4996c Author: Carl Chenet merging default and with-expectedfiles-configparser branches commit 0d4996cda292779990136cde431e0b9d3ff8f6bf Author: Carl Chenet lists of files now use configparser. tests.py modified accordingly commit f671b774c7a3accdd81ffc230ebb809046069782 Author: Carl Chenet new branch : with expectedfiles.py using configparser commit 0ac670a3337c193b42d610e478181f218bf995e9 Author: Carl Chenet added files for postgresql support commit 7ef0a32bde90b96fb573664ca4092fd5c06e8070 Author: Carl Chenet correcting a regression commit 7a1a42bb558a0fc34f59147ccbcbe2949e3ba9cb Author: Carl Chenet personalizing the error message depending if you use sqlite or other databases commit 074f205ceaf1d43e509330a0bc754170242e56cc Author: Carl Chenet using a table which does not exist commit 5c52f26dd85def1d150369992458e9dcc58bab96 Author: Carl Chenet updated the path to mysql-list commit 911921d8917d184024dcfbcd4df31e748166e27c Author: Carl Chenet splitting db_test/ in db_mysql_test/ and db_sqlite_test/ commit 51e303777a851f008c037c88894e8fa59701a50b Author: Carl Chenet using 127.0.0.1 as default for dbhost commit cd9adf6da1461da22da04fcd1f94d7a333e28851 Author: Carl Chenet restricting database types allowed to be specified by users commit ae16b6a711cab9192af26c5b09478eccf007e57a Author: Carl Chenet added support for mysql database and postgresql database commit 2d468f0172714ad67add8c5cbe89fc6d80acbc22 Author: Carl Chenet switch from double quotes to single quotes for comments commit 97123f6b63bdeddb69941f29a37c0eb002552b9b Author: Carl Chenet fixed a mispelled word commit 9723e3e1c6d2b7aed528556e48184f7bc1a27edc Author: Carl Chenet removed the brebis name commit b4db6080b66d8bfe023374808bddd8ae2fa6a0b8 Author: Carl Chenet removed absolute paths in zip test commit 65fb155d82e419a2f233e561f7c55cebe96fd0c0 Author: Carl Chenet added a new zip_content directory in the test directory commit 1a0ddc3b83befb66f88af0370c770aeb9c7aa39e Author: Carl Chenet modifying zip test to follow the new test directory structure commit 8e202d9f4ded59467f48ee05de25ca72e6195fad Author: Carl Chenet removed mysql broken support for 1.0 commit ed25b7365c03100edb63181603575139faadb6eb Author: Carl Chenet ugly moves to reorganize the test directory commit d5c5b522e9cbaec15765d2a4820e6e08925ec08d Author: Carl Chenet loop for kilo, mega, giga, whatever commit a5f9f2f3cac33dc8c1be14b5f2584c01c8eba4d9 Author: Carl Chenet Removing tests on mysql until it's supported by mysql driver from sqlalchemy commit 41805d3812b94f4cb68d6549519814a4083058de Author: Carl Chenet Added test on dbname value in the database test commit db422c4dcf80e5f7aaa9f63584d076ad8b2efd19 Author: Carl Chenet Removed useless comments commit df8012b1e34718ef4087ecab44991310ac143f2f Author: Carl Chenet Removed a false comment commit fa9eef1d19134dda8b69b40ddf46f3b3884d1faf Author: Carl Chenet Modifying the checks for db to be more flexible commit 69a50db3160c9264ac55035399fda5592c5125c3 Author: Carl Chenet Remove useless files commit 5ad22f8344b3124891410f3e8ea9e837dfe9c315 Author: Carl Chenet Configuration for mysql commit 36ef8cefe26b627c5abb0152136f23c9b668df75 Author: Carl Chenet Added support for dbname commit bbfb74a4378ca7c5dbb5e49c76df97de9f376dfb Author: Carl Chenet files to test mysql commit d80569e111e42f565b87bf22c9449330007ff8c4 Author: Carl Chenet Suppressed data relative to sqlite3 commit ca4e360fe9b062f902a0766ae7cd8ee633bef0a2 Author: Carl Chenet Removed useless comments commit 7809305be4e413561bdaf70ef6add365565e730d Author: Carl Chenet Modifying according to the new keyword sqlite to identify a sqlite database commit cfdc070b2ce954d6b799900cc4abdaf628f334ed Author: Carl Chenet Splitting checkbackups.py commit 28457dd4c4aea822a496559ebf7b4a560686d2ab Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote. commit 60b19e3531d8bca112d119847361f1c1b26c468e Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote. commit 8a6b890ad84b9a5471ef1bd011c07f8ed2c213b9 Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote. commit f2aaa8b767e2acc44a1c2b1312f1632a256306cd Author: Carl Chenet Simplifying the process to check a database commit e0473345542310b3ff8b08a39d589060b0a3ef4b Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote. commit 4e1108eceddc1889532bcd3053626d79cd494f1d Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote. Old comments also removed. commit eb82f665a893927421c93314b5c1b86dff85f620 Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote commit 9b53d8ec8c96dc9b95e01b76a2b24ebc53dc861b Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote commit b9d753e1c0986c1e0a64fcfb255dbbca6efc4960 Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote commit 37c4329616ac52781158bc187e1916ab7f1ddd53 Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote commit bde28dcc3406b00211dde5e3b74a9d4eab2a81d2 Author: Carl Chenet Style improvement: switched from docstrings with double quotes to single quote commit 5ff85a3a86071841f44ea641efd1940f56969c52 Author: Carl Chenet Support for sqlite databases commit 99d01d749eedad343f0bb19d159d27cd6e8c5b03 Author: Carl Chenet expectedobjects.py provides useful methods regarding the expected objects (files, database objects) we need commit 5428ac48360493a7c2b57edc27a0b4ccbf0f4f96 Author: Carl Chenet A file to test what database object exists commit a647504c02d22eeea2346b8fede1dcf591acec98 Author: Carl Chenet checkbackups.py now supports databases. Also some style improvements commit 7c5d42002cdb9bea6c5e5355d2e9af5416832596 Author: Carl Chenet The Configuration class now manages sqlite databases commit d2c01b312e3fab218bf2315d0f6fd4c6720dabf1 Author: Carl Chenet Modified the configuration class test commit 28ed6f29c94ba30d0bdac9581c8bde79dfe10dce Author: Carl Chenet Added files to test sqlite3 db integrity commit ecc1188ccb9740915f27ee8aab102a713549ba8f Author: Carl Chenet Added complete series of tests for archive backups commit 781c83770eddd72fd14cf0ae1b60e391318d1e32 Author: Carl Chenet Added unit tests for checktree module commit f8f09c589e79f2721d21774f41193979a0720a95 Author: Carl Chenet Modified the tests/filetree/filelist for checking equality commit 5ad9b7305ed112de9798cd4acc0e844d8c1d105b Author: Carl Chenet Removed a useless print commit be0afc388c88db87a2b1e6ab2a9fdaad2176e37d Author: Carl Chenet Added some files to test the tree file backups commit 54d4972223d005dcc55a346bc052ffcb643699b4 Author: Carl Chenet Added support for file trees as a backup commit 621ffc7638642e72431a5ee18fa3b07499f0c5fe Author: Carl Chenet Switched level logging from INFO to WARNING commit 2434436718eb792c91168a63c51ed4a76809f2b2 Author: Carl Chenet Added some files for tests commit 9a454a3c2126c2afda11e0d70a72e39ce1f7b6f0 Author: Carl Chenet Check if the backup path from the configuration exists commit 530a0b7cd7d4e597f286ce084a66a16c356628e2 Author: Carl Chenet Removed a useless print commit d74181db72e765010760af740cea1541d826667f Author: Carl Chenet Removed useless error messages commit 25bf1638b3da7bb82669ffdb75aefe6c6dfbf951 Author: Carl Chenet Switched logging level from info to warn commit 572bdfb8fe7ff2273a87c47b6bec4554cbcdac16 Author: Carl Chenet Addes a docstring for __main commit de367ab7b46043886f48d7e255970d14c9be4c9c Author: Carl Chenet Fixed a typo commit 9c47485b15c4c97f4fdf06db14593c06e4ff3c00 Author: Carl Chenet Fixed an issue with managing exceptions commit 719d1163d864f60a815b9ffa760f116e10756ceb Author: Carl Chenet Added a default for logfile and confpath commit ed1dc3d65807bbcd1798e9e9967f8275a569261d Author: Carl Chenet Fixed a small typo. Improved the hashtype option help message. commit 533de88ffb41a463ae3164964e828dd600c95033 Author: Carl Chenet Fixed variables visibility issues. Paths from cliparse are now absolute paths commit 9f9ee8fab419464dbb9f4ba17c8a51d301919cd5 Author: Carl Chenet Both zip and tar archive types are supported. The code has been efficiently reduced. commit ead528b3ced53150470d2cb6918ab3cebb8854dc Author: Carl Chenet Reducing redundant code commit 1273863622e38f41bd484287d505d6257b94d8ca Author: Carl Chenet Ignoring files named a.out commit 346719ee48a2586f31e34b1f86af10fd1e2a21eb Author: Carl Chenet These files help to test the new code for conditions on file sizes commit b02b74489331984050294447bd281ce0498bb669 Author: Carl Chenet checkarchive.py will factorize checktar.py and checkzip.py commit af0f5fc78e92808c6e0c95c7fa2f9a6504879f5e Author: Carl Chenet new unit tests commit 4c5e2a36eca88926f0cd6012d9d7c82568dda81e Author: Carl Chenet .hgignore to get rid of *.pyc commit 597a27c38c3c68f2b8ce67c4a49f5cc5c43fe458 Author: Carl Chenet Some files to test Brebis commit 3837d096ff79be8e80176a0cafca74e67b1f1b14 Author: Carl Chenet checkzip.py provides checks for zip files, checkhashes.py provides md5 sums checks for backups before proceeding commit 2df74f80785a3ff2b442edce6661f77a91b2c1a7 Author: Carl Chenet some files for the unit tests commit 395ff2707c08ec7e50fc99b7b42d879efe1982df Author: Carl Chenet tests.py provides unit tests for Belier - 89% of code coverage for now commit 8c268a3acc130c40a3289467e0bb422589f36208 Author: Carl Chenet expectedfiles.py provides the paths for expected files inside the archive commit 10a8335bb94a1c1b5ef1736ab0605df8159efa71 Author: Carl Chenet brebislogger.py defines a logger for the Brebis events commit 2a84469efbb90bcceb6ae7e1edaad95c6ec29dbb Author: Carl Chenet Added the test directory and some test elements under it. commit c40881e61432319bc46a741b2cdd44f4007eea39 Author: Carl Chenet Added checktar.py which checks tar files. commit 8ea992231dd15689a715fe280c55d51322b251d4 Author: Carl Chenet Added checkbackups.py which knows what to do with each kind of backup we meet. commit 782c4a52fa572ffd0fda4da4deaa34fcce1fbe82 Author: Carl Chenet Added configurations.py which extracts the different information about archives and (in the future) dumps we have to check. commit 99f0aca983b4607d37b8a73f7f7c51e1541e9f9f Author: Carl Chenet Added cliparse.py which parses the command line options and args. commit 684709fa81da6f035cc992f6070cbd4ac99be6dd Author: Carl Chenet Added main.py which provides the Main class of Brebis. commit 57e3ab2c70a6e6af9132fe10cb82c3fb395068a7 Author: Carl Chenet Added brebis file to call the main. backupchecker-1.7/docs/000077500000000000000000000000001251036066300151055ustar00rootroot00000000000000backupchecker-1.7/docs/Makefile000066400000000000000000000152171251036066300165530ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/backupchecker.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/backupchecker.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/backupchecker" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/backupchecker" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." backupchecker-1.7/docs/source/000077500000000000000000000000001251036066300164055ustar00rootroot00000000000000backupchecker-1.7/docs/source/authors.rst000066400000000000000000000000701251036066300206210ustar00rootroot00000000000000Authors ======= Carl Chenet backupchecker-1.7/docs/source/conf.py000066400000000000000000000203061251036066300177050ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # backupchecker documentation build configuration file, created by # sphinx-quickstart on Wed Dec 17 18:25:26 2014. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.1' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = 'backupchecker' copyright = '2015, Carl Chenet ' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '1.7' # The full version, including alpha/beta/rc tags. release = '1.7' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = [] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'backupcheckerdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ('index', 'backupchecker.tex', 'backupchecker Documentation', 'Carl Chenet \\textless{}chaica@backupcheckerproject.org\\textgreater{}', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'backupchecker', 'backupchecker Documentation', ['Carl Chenet '], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'backupchecker', 'backupchecker Documentation', 'Carl Chenet ', 'backupchecker', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False backupchecker-1.7/docs/source/configure.rst000066400000000000000000000137041251036066300211250ustar00rootroot00000000000000Configure Backup Checker You need two files in order to use Backup Checker, a file offering the configuration of the archive and another file giving the detail of what's inside the archive, let's call it the list of files. But don't worry, the option -G allows to generate both files from a given archive. The next sections offer the details of what parameter these files contain. Configuration of the archive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The first one contains general information about the backup checking session. It is mandatory your configuration file uses the .conf extension. Here is an example with all the currently supported parameters:: [main] name=mybackup-checking-session type=archive path=tests/expected_mode/foos.tar.gz files_list=tests/expected_mode/files-list delimiter=| sha512=87d3325d3bb844734c1b011fb0f12a3ae47676153a8b05102a5e1b5347a86096d85b1b239752c3fdc10a8a2226928b64b5f31d8fd09f3e43a8eee3a4228f38b1 * **[main]** is mandatory. * **name** is the name of your backup checking session. If you have several backup checking sessions, they MUST use a different name. * **type** is the type of your backup. Currently you only have archive (tar, tar.gz, tar.bz2, zip files) and tree for a tree of directories and files. * **path** is the path to the archive or the top directory of your files tree. Relative or absolute paths are accepted. * **files_list** is the path to the file containing the information about the archive, the tree or the files inside your backups. Relative or absolute paths are accepted. * **delimiter** (optional field) is the string to use in the list of files to mark the end of the key and the beginning of the value. Default is | (pipe). * **sha512** (optional field) provides the sha512 hash sum of the list of files, in order to check if this file is the expected one. Placeholders ------------ The **path** and **files_list** values both support some placeholders. Using a value like **/backups/backup-%d-%m-%Y.tar.gz** will see **%m** being replaced by the current monthday, **%m** by the current month number and **%Y** being replace by the current year. The available placeholders are: * **%Y** for current year * **%y** for current two-digit year (2015->15) * **%m** for current month number (1..12) * **%d** for current monthday (1..31) * **%w** for current weekday, monday first (1..7) * **%H** for current hour (00..23) * **%M** for current minute (00..59) * **%S** for current second (00..59) * **%i** for the highest integer found in a filename (/backups/backup.%i.tar.gz will return /backups/backup.2.tar.gz if you have backup.1.tar.gz and backup.2.tar.gz in the /backups directory. Understanding the parameters of the list of files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The second file you need is the list containing the information about the archive, the tree or the files inside your backups. Here is an example with the full list of the parameters available for now:: [archive] size| <5m mode| 755 uid| 5000 gid| 5001 owner| chaica group| sysadmin sha1| e0f58dcc57caad2182f701eb63f0c81f347d3fe5 mtime| 1425890843.0 outdated| 2 months [files] foos/foo| foos/foo1| >105k type|f mode|755 uid|5022 gid|5023 owner|chaica group|sysadmin unexpected md5|3718422a0bf93f7fc46cff6b5e660ff8 * **[archive]** section hosts the parameter for the archive itself. This section is not mandatory if you do not need it. * **size** defines what the archive size should be. You can specify <,> or =. Default value is expressed in bytes, also available are (k)ilo, (m)ega, (g)iga, (p)eta,(e)xa, (z)etta and (y)ottabyte. * **mode** is for the expected mode of the archive. * **uid** is for the expected uid of the archive. * **gid** is for the expected gid of the archive. * **owner** is the name of the owner of this file in the archive. * **group** is the name of the owner group of this file in the archive. * **sha1** is for the expected md5 hash sum of the archive. Also available is sha1, sha224, sha256, sha384, sha512. * **mtime** it is the posix timestamp of the last modification of the archive. It is usually automatically generated. * **outdated** takes a duration starting from the mtime of the archive. Afther this duration, a warning is triggered to warn that the archive is outdated. * **[files]** section stands for the files inside the archive or the tree of directories and files. This section is not mandatory if you do not need it. * **foos/foo|** means this file has to exist in the backup, whatever it is. * **foos/foo1| >105k** defines that the file size of foos/foo1 in the archive should be strictly bigger than 105 kilobytes. You can specify <,> or =. Default value is expressed in bytes, also available are (k)ilo, (m)ega, (g)iga, (p)eta,(e)xa, (z)etta and (y)ottabyte. * **foos/foo1| type|f** means the file foos/foo1 is expected to be of type f. Several types are allowed : f for files, d for directory, s for symbolic link, k for socket, b for block, c for character. * **foos/foo1| mode|755** means the file foos/foo1 is expected to have the mode 755 (meaning read, write and execute for the owner, read and execute for the group owner, read and execute for the others). All values respecting this octal representation (including values with setuid bit on four digits) is allowed. * **foos/foo1| uid|5022** means the file foos/foo1 is expected to have a uid of 5022. * **foos/foo1| gid|5023** means the file foos/foo1 is expected to have a gid of 5023. * **foos/foo1| owner|chaica** means the file foos/foo1 is expected to be owned by the user with the name chaica. * **foos/foo1| group|sysadmin** means the file foos/foo1 is expected to be owned by the owner group with the name sysadmin. * **foo/bar| unexpected** means that foo/bar is unexpected in this archive of tree of directories and files and that an alert should be launched about it. * **foos/foo1| md5|hashsum** means the file foos/foo1 is expected to have a md5 hash sum of "hashsum". Also available is sha1, sha224, sha256, sha384, sha512. backupchecker-1.7/docs/source/index.rst000066400000000000000000000005721251036066300202520ustar00rootroot00000000000000Documentation for the Backup Checker project ============================================ You'll find below anything you need to install, configure or run Backup Checker. Guide ===== .. toctree:: :maxdepth: 2 install configure use unsupported license authors Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` backupchecker-1.7/docs/source/install.rst000066400000000000000000000010131251036066300206000ustar00rootroot00000000000000How to install Backup Checker ============================= From PyPI ^^^^^^^^^ $ pip install backupchecker From sources ^^^^^^^^^^^^ * You need at least Python 3.4. * Untar the tarball and go to the source directory with the following commands:: $ tar zxvf backupchecker-1.7.tar.gz $ cd backupchecker * Next, to install Backup Checker on your computer, type the following command with the root user:: $ python3.4 setup.py install $ # or $ python3.4 setup.py install --install-scripts=/usr/bin backupchecker-1.7/docs/source/license.rst000066400000000000000000000002031251036066300205540ustar00rootroot00000000000000License ======= This software comes under the terms of the **GPLv3+**. See the LICENSE file for the complete text of the license. backupchecker-1.7/docs/source/unsupported.rst000066400000000000000000000014421251036066300215300ustar00rootroot00000000000000Unsupported parameters for a given kind of archive ================================================== Given the very nature of the different kind of archive formats, some parameters are not supported for a given archive type (e.g for a bzip2 file, original rights and mode of the file inside the archive are not saved). An explicit warning will appear in the backup checker log file if you are using an unsupported feature for a given type of archive. Unsupported parameters for the remote archive ============================================= By the nature of Unix streams, some options commonly available while using Backup Checker from a local host are not available from a remote host. The most annoying one is that computing the hash sums of files inside an archive is not possible for a stream. backupchecker-1.7/docs/source/use.rst000066400000000000000000000135371251036066300177440ustar00rootroot00000000000000Use Backup Checker ================== Two uses of Backup Checker are available: * generate a description of what's inside the archive * scan the content of an archive to compare with the associated description Generate a list of files within a backup ---------------------------------------- Generate the configuration files and the list of files inside for a given archive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Starting from 0.4, Backup Checker is able to generate the configuration of a backup and the associated list of files within this backup. Use the following command to generate the list of files:: $ backupchecker -G mybackup.tar.gz $ ls mybackup.tar.gz mybackup.list mybackup.conf * **mybackup.conf** is the configuration file associated to your archive. See *Configure Backup Checker* section for more details. * **mybackup.list** is the list of files inside your archive. See *Configure Backup Checker* section for more details. Generate the configuration files through SSH for a remote archive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Generate the configuration files for an archive located on a remote server through SSH:: $ ssh -q server "cat /tmp/backup.tar.gz" | ./backupchecker -G - Again, don't forget the last - character in order to trigger the stream mode. By the very nature of the Unix stream, some options are not available using the stream mode. The most annoying one is the feature allowing to compute the hash sums of files inside an archive. While generating, compute the hash sums of all files in the archive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Backup Checker is able to compute the hash sums of all files inside an archive. That was the default from the start of the project to the version 0.9. Given the fact this behaviour heavily loads the computer backupchecker runs on and that the final list of files is protected by a sha512 hash sum written in the associated configuration file (e.g yourbackup.conf), it is safe to make this behaviour optional starting from the version 0.10. The associated options is ``--hashes`` or ``-H``:: $ backupchecker --hashes -G mybackup.tar.gz $ # or $ backupchecker -H -G mybackup.tar.gz Specify that backupchecker need to compute the hash sums of some files inside the archive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Backup Checker starting from the version 0.10 by default does not compute any more the hash sum of every files inside an archive except if you use the ``--hashes`` option (heavy compute time for big archives). But you can specify to compute the hash sums of some files - either using the path or a glob syntax - in a list of files you provide thanks to the ``--exceptions-file`` option:: $ cat archive-exceptions.list [files] archive/foo| sha1 archive/bar/*.txt| sha256 $ backupchecker --exceptions-file archive-exceptions.list -G archive.tar.gz The result of this command will be two files : the usual configuration file and the list of files inside the archive where only archive/foo and archive/bar/\*.txt will have a hash sum. Switch the delimiter of fields in the list of files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can also modifiy the default delimiter ('|') that backupchecker uses and specify your own with the ``-d`` or ``--delimiter`` option:: $ backupchecker -d @ -G myarchive.tar.bz $ # or $ backupchecker --delimiter @ -c myconfs/myconf.conf We use @ as the default delimiter for the two commands just above. Specify the names of configuration files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ By default, while generating the configuration files of an archive, the names of the generated files are given from the name of the archive. If you need to change these name, use the ``--configuration-name`` option:: $ backupchecker --configuration-name backup -G archive.tar.gz $ ls *.conf *.list $ backup.conf backup.list Scan the content of an archive to compare with the associated description ------------------------------------------------------------------------- Common use case ^^^^^^^^^^^^^^^ You launch the scan mode of Backup Checker from the command line with the following command:: $ backupchecker -c myconfs/ The option ``-c`` or ``--configpath`` specifies a path to a directory where your Backup Checker configurations are stored. If any alert is triggered, it will appear in the your current working directory in a file named a.out. Relative or absolute paths are accepted. You can also specify your own output file:: $ backupchecker -c myconfs/ -l output/backupchecker.log The option ``-l`` or ``--log`` specifies your own output file. Verify a remote archive ^^^^^^^^^^^^^^^^^^^^^^^ Verify an archive located on a remote server from a FTP server:: $ wget --quiet -O - ftp://user:pass@server/backup.tar.gz | ./backupchecker -c /path/to/conf/dir - Don't forget the last - character, triggering the stream mode of Backup Checker. Change the path to the configuration file and the list of files for a given archive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ By default, the files containing the different parameters of the content of the archive and the configuration file are created in the same directory as the archive itself. From Backup Checker 0.9, you can specifiy a custom directory for the configuration file (the ``-C`` option), for the list of files (the ``-L`` option) or both with the ``-O`` option:: $ backupchecker -c /etc/backupchecker/ -l /var/log/backupchecker.log -C /etc/backupchecker/confs/ -L /etc/backupchecker/lists/ The example above indicates a /etc/backupchecker/confs directory to store the configuration files of Backup Checker and a /etc/backupchecker/lists/ directory to store the list of files of Backup Checker. backupchecker-1.7/functional-tests/000077500000000000000000000000001251036066300174575ustar00rootroot00000000000000backupchecker-1.7/functional-tests/a.out000066400000000000000000000004421251036066300204300ustar00rootroot00000000000000WARNING:root:1 file with unexpected hash while checking /home/chaica/progra/python/brebis/functional-tests/wrong-file-md5-hash-in-gz-archive/wrong-file-md5-hash-in-gz-archive.gz: WARNING:root:wrong-file-md5-hash-in-gz-archive hash is f1e60db75b2ca8581e5165d54dbfed88. Should have been f1e. backupchecker-1.7/functional-tests/bzip2-archive-size-bigger-than-expected-size/000077500000000000000000000000001251036066300300305ustar00rootroot00000000000000bzip2-archive-size-bigger-than-expected-size-list000066400000000000000000000000231251036066300412110ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-bigger-than-expected-size[archive] size| <1 bzip2-archive-size-bigger-than-expected-size.bz2000066400000000000000000000000551251036066300407410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-bigger-than-expected-sizeBZh91AY&SY+ `@ 0@]B@$0bzip2-archive-size-bigger-than-expected-size.conf000066400000000000000000000002731251036066300411730ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-bigger-than-expected-size[main] name=bzip2-archive-size-bigger-than-expected-size type=archive path=bzip2-archive-size-bigger-than-expected-size.bz2 files_list=bzip2-archive-size-bigger-than-expected-size-list backupchecker-1.7/functional-tests/bzip2-archive-size-not-equals-expected-size/000077500000000000000000000000001251036066300277315ustar00rootroot00000000000000bzip2-archive-size-not-equals-expected-size-list000066400000000000000000000000231251036066300410130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-not-equals-expected-size[archive] size| =4 bzip2-archive-size-not-equals-expected-size.bz2000066400000000000000000000000551251036066300405430ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-not-equals-expected-sizeBZh91AY&SY+ `@ 0@]B@$0bzip2-archive-size-not-equals-expected-size.conf000066400000000000000000000002701251036066300407720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-not-equals-expected-size[main] name=bzip2-archive-size-not-equals-expected-size type=archive path=bzip2-archive-size-not-equals-expected-size.bz2 files_list=bzip2-archive-size-not-equals-expected-size-list backupchecker-1.7/functional-tests/bzip2-archive-size-smaller-than-expected-size/000077500000000000000000000000001251036066300302305ustar00rootroot00000000000000bzip2-archive-size-smaller-than-expected-size-list000066400000000000000000000000251251036066300416130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-smaller-than-expected-size[archive] size| >10M bzip2-archive-size-smaller-than-expected-size.bz2000066400000000000000000000000551251036066300413410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-smaller-than-expected-sizeBZh91AY&SY+ `@ 0@]B@$0bzip2-archive-size-smaller-than-expected-size.conf000066400000000000000000000002761251036066300415760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/bzip2-archive-size-smaller-than-expected-size[main] name=bzip2-archive-size-smaller-than-expected-size type=archive path=bzip2-archive-size-smaller-than-expected-size.bz2 files_list=bzip2-archive-size-smaller-than-expected-size-list backupchecker-1.7/functional-tests/check-gname-tar-gz/000077500000000000000000000000001251036066300230235ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-gname-tar-gz/check-gname-tar-gz.tar.gz000066400000000000000000000003451251036066300275200ustar00rootroot00000000000000T] a wP8q=ޜ@b_ SN>$xØ.WDi~0Cxq"juNcNfߥ>=o?^*1܆Gz_>Ac+ϛw/o3. 5π/ku,U arXp/RkqItp(backupchecker-1.7/functional-tests/check-gname-tree/000077500000000000000000000000001251036066300225565ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-gname-tree/check-gname-tree/000077500000000000000000000000001251036066300256555ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-gname-tree/check-gname-tree/bar/000077500000000000000000000000001251036066300264215ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-gname-tree/check-gname-tree/bar/bar1000066400000000000000000000000151251036066300271650ustar00rootroot00000000000000another test backupchecker-1.7/functional-tests/check-gname-tree/check-gname-tree/foo1000066400000000000000000000000051251036066300264370ustar00rootroot00000000000000test backupchecker-1.7/functional-tests/check-gname-tree/check-gname-tree/foo2000066400000000000000000000000171251036066300264430ustar00rootroot00000000000000this is a test backupchecker-1.7/functional-tests/check-mtime-tar/000077500000000000000000000000001251036066300224315ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-tar/check-mtime-tar.conf000066400000000000000000000003711251036066300262530ustar00rootroot00000000000000[main] name=check-mtime-tar type=archive path=/home/chaica/progra/python/backupchecker/functional-tests/check-mtime-tar/check-mtime-tar.tar.gz files_list=/home/chaica/progra/python/backupchecker/functional-tests/check-mtime-tar/check-mtime-tar.list backupchecker-1.7/functional-tests/check-mtime-tar/check-mtime-tar.tar.gz000066400000000000000000000003031251036066300265260ustar00rootroot00000000000000PR 0=/l=20{(pB798_:Qe'޹yrSb⌳Vi1U\Z^0mbx?PeV)鿇)5ϘrM/Zz@G* YfoߊqòR/iIc(backupchecker-1.7/functional-tests/check-mtime-tree/000077500000000000000000000000001251036066300226025ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-tree/check-mtime-tree/000077500000000000000000000000001251036066300257255ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-tree/check-mtime-tree/bar000066400000000000000000000000001251036066300264020ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-tree/check-mtime-tree/foo000066400000000000000000000000001251036066300264210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-tree/check-mtime-tree/rab/000077500000000000000000000000001251036066300264715ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-tree/check-mtime-tree/rab/oof000066400000000000000000000000001251036066300271650ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-zip/000077500000000000000000000000001251036066300224455ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-mtime-zip/check-mtime-zip.conf000066400000000000000000000003661251036066300263070ustar00rootroot00000000000000[main] name=check-mtime-zip type=archive path=/home/chaica/progra/python/backupchecker/functional-tests/check-mtime-zip/check-mtime-zip.zip files_list=/home/chaica/progra/python/backupchecker/functional-tests/check-mtime-zip/check-mtime-zip.list backupchecker-1.7/functional-tests/check-mtime-zip/check-mtime-zip.zip000066400000000000000000000015301251036066300261560ustar00rootroot00000000000000PK ihCcheck-mtime-zip/UT [|R$Rux PK ihCcheck-mtime-zip/rab/UT h|R%Rux PK ihCcheck-mtime-zip/rab/oofUT h|Rt|Rux PK ihCcheck-mtime-zip/barUT S|Rt|Rux PK ihCcheck-mtime-zip/fooUT S|Rt|Rux PK ihCAcheck-mtime-zip/UT[|Rux PK ihCAJcheck-mtime-zip/rab/UTh|Rux PK ihCcheck-mtime-zip/rab/oofUTh|Rux PK ihCcheck-mtime-zip/barUTS|Rux PK ihC6check-mtime-zip/fooUTS|Rux PKbackupchecker-1.7/functional-tests/check-uname-tar-gz/000077500000000000000000000000001251036066300230415ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-uname-tar-gz/check-uname-tar-gz.tar.gz000066400000000000000000000003451251036066300275540ustar00rootroot00000000000000T] a wP8q=ޜ@b_ SN>$xØ.WDi~0Cxq"juNcNfߥ>=o?^*1܆Gz_>Ac+ϛw/o3. 5π/ku,U arXp/RkqItp(backupchecker-1.7/functional-tests/check-uname-tree/000077500000000000000000000000001251036066300225745ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-uname-tree/check-uname-tree/000077500000000000000000000000001251036066300257115ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-uname-tree/check-uname-tree/bar/000077500000000000000000000000001251036066300264555ustar00rootroot00000000000000backupchecker-1.7/functional-tests/check-uname-tree/check-uname-tree/bar/bar1000066400000000000000000000000151251036066300272210ustar00rootroot00000000000000another test backupchecker-1.7/functional-tests/check-uname-tree/check-uname-tree/foo1000066400000000000000000000000051251036066300264730ustar00rootroot00000000000000test backupchecker-1.7/functional-tests/check-uname-tree/check-uname-tree/foo2000066400000000000000000000000171251036066300264770ustar00rootroot00000000000000this is a test backupchecker-1.7/functional-tests/conf-files-from-tar-gz/000077500000000000000000000000001251036066300236475ustar00rootroot00000000000000backupchecker-1.7/functional-tests/conf-files-from-tar-gz/conf-files-from-tar-gz.tar.gz000066400000000000000000000002631251036066300311670ustar00rootroot00000000000000AuTK 0@ь]Ev`^[O,:*:"3 $<ݔyzq!Z{"}ݱSN֪ӮM|!hBٗ'\oX9ppn8Myyrߍշg (backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-bzip2/000077500000000000000000000000001251036066300336635ustar00rootroot00000000000000configuration-name-option-and-conf-list-ouput-option-with-bzip2.bz2000066400000000000000000000001171251036066300504260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-bzip2BZh91AY&SY- Q@"鞠 1M2111SOFT5m[Rm' ;bVt9rE8P-backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-gzip/000077500000000000000000000000001251036066300336065ustar00rootroot00000000000000configuration-name-option-and-conf-list-ouput-option-with-gzip.gz000066400000000000000000000001151251036066300502150ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-gzipOTconfiguration-name-option-with-gzipT(,VD̜T.ubackupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-lzma/000077500000000000000000000000001251036066300336005ustar00rootroot00000000000000configuration-name-option-and-conf-list-ouput-option-with-lzma.xz000066400000000000000000000002101251036066300502160ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-lzma7zXZִF!t/OK]4@FqPji՘sѣ Q/gL-AhhmX8WW8fIOu(}ogPQa}YZbackupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tar-gz/000077500000000000000000000000001251036066300340415ustar00rootroot00000000000000configuration-name-option-and-conf-list-ouput-option-with-tar-gz.tar.gz000066400000000000000000000002631251036066300514740ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tar-gzAuTK 0@ь]Ev`^[O,:*:"3 $<ݔyzq!Z{"}ݱSN֪ӮM|!hBٗ'\oX9ppn8Myyrߍշg (backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tree/000077500000000000000000000000001251036066300335745ustar00rootroot00000000000000configuration-name-option-and-conf-list-ouput-option-with-tree/000077500000000000000000000000001251036066300476325ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-treeconfiguration-name-option-and-conf-list-ouput-option-with-tree/bar/000077500000000000000000000000001251036066300503765ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-treeconfiguration-name-option-and-conf-list-ouput-option-with-tree/bar/bar1000066400000000000000000000000331251036066300511420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-treehi this is a testizerlzaer configuration-name-option-and-conf-list-ouput-option-with-tree/zozo000066400000000000000000000000171251036066300505540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-treehihizeknkeznez backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-zip/000077500000000000000000000000001251036066300334375ustar00rootroot00000000000000configuration-name-option-and-conf-list-ouput-option-with-zip.zip000066400000000000000000000012201251036066300500570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-and-conf-list-ouput-option-with-zipPK {WFtests/UT 9T 9Tux PK {WF tests/bar/UT 9T9Tux PK {WFRtests/bar/bar1UT 9T9Tux hi this is a testizerlzaer PK {WFBk tests/zozoUT 9T9Tux hihizeknkeznez PK {WFAtests/UT9Tux PK {WF A@tests/bar/UT9Tux PK {WFRtests/bar/bar1UT9Tux PK {WFBk tests/zozoUT9Tux PK@:backupchecker-1.7/functional-tests/configuration-name-option-with-bzip2/000077500000000000000000000000001251036066300265475ustar00rootroot00000000000000configuration-name-option-with-bzip2.bz2000066400000000000000000000001171251036066300361760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-bzip2BZh91AY&SY- Q@"鞠 1M2111SOFT5m[Rm' ;bVt9rE8P-backupchecker-1.7/functional-tests/configuration-name-option-with-gzip/000077500000000000000000000000001251036066300264725ustar00rootroot00000000000000configuration-name-option-with-gzip.gz000066400000000000000000000001151251036066300357650ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-gzipOTconfiguration-name-option-with-gzipT(,VD̜T.ubackupchecker-1.7/functional-tests/configuration-name-option-with-lzma/000077500000000000000000000000001251036066300264645ustar00rootroot00000000000000configuration-name-option-with-lzma.xz000066400000000000000000000002101251036066300357660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-lzma7zXZִF!t/OK]4@FqPji՘sѣ Q/gL-AhhmX8WW8fIOu(}ogPQa}YZbackupchecker-1.7/functional-tests/configuration-name-option-with-tar-gz/000077500000000000000000000000001251036066300267255ustar00rootroot00000000000000configuration-name-option-with-tar-gz.tar.gz000066400000000000000000000002631251036066300372440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-tar-gzAuTK 0@ь]Ev`^[O,:*:"3 $<ݔyzq!Z{"}ݱSN֪ӮM|!hBٗ'\oX9ppn8Myyrߍշg (backupchecker-1.7/functional-tests/configuration-name-option-with-tree/000077500000000000000000000000001251036066300264605ustar00rootroot00000000000000000077500000000000000000000000001251036066300354025ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-tree/configuration-name-option-with-tree000077500000000000000000000000001251036066300361465ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-tree/configuration-name-option-with-tree/barbar1000066400000000000000000000000331251036066300367120ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-tree/configuration-name-option-with-tree/barhi this is a testizerlzaer zozo000066400000000000000000000000171251036066300363240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-tree/configuration-name-option-with-treehihizeknkeznez backupchecker-1.7/functional-tests/configuration-name-option-with-zip/000077500000000000000000000000001251036066300263235ustar00rootroot00000000000000configuration-name-option-with-zip.zip000066400000000000000000000012201251036066300356270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/configuration-name-option-with-zipPK {WFtests/UT 9T 9Tux PK {WF tests/bar/UT 9T9Tux PK {WFRtests/bar/bar1UT 9T9Tux hi this is a testizerlzaer PK {WFBk tests/zozoUT 9T9Tux hihizeknkeznez PK {WFAtests/UT9Tux PK {WF A@tests/bar/UT9Tux PK {WFRtests/bar/bar1UT9Tux PK {WFBk tests/zozoUT9Tux PK@:backupchecker-1.7/functional-tests/corrupted-bz2-archive/000077500000000000000000000000001251036066300236005ustar00rootroot00000000000000backupchecker-1.7/functional-tests/corrupted-bz2-archive/corrupted-bz2-archive-list000066400000000000000000000000151251036066300306110ustar00rootroot00000000000000[files] oof| backupchecker-1.7/functional-tests/corrupted-bz2-archive/corrupted-bz2-archive.bz2000066400000000000000000000001131251036066300303330ustar00rootroot00000000000000BZh91AY&SY{~߀`B"g "224Nl"6`rE8P{~ backupchecker-1.7/functional-tests/corrupted-bz2-archive/corrupted-bz2-archive.conf000066400000000000000000000001661251036066300305730ustar00rootroot00000000000000[main] name=corrupted-bz2-archive type=archive path=corrupted-bz2-archive.bz2 files_list=corrupted-bz2-archive-list backupchecker-1.7/functional-tests/corrupted-gz-archive/000077500000000000000000000000001251036066300235235ustar00rootroot00000000000000backupchecker-1.7/functional-tests/corrupted-gz-archive/corrupted-gz-archive-list000066400000000000000000000000151251036066300304570ustar00rootroot00000000000000[files] oof| backupchecker-1.7/functional-tests/corrupted-gz-archive/corrupted-gz-archive.conf000066400000000000000000000001621251036066300304350ustar00rootroot00000000000000[main] name=corrupted-gz-archive type=archive path=corrupted-gz-archive.gz files_list=corrupted-gz-archive-list backupchecker-1.7/functional-tests/corrupted-gz-archive/corrupted-gz-archive.gz000066400000000000000000000000741251036066300301320ustar00rootroot00000000000000TNfile-missing-in-gzipT(H,Q/V(-PSz backupchecker-1.7/functional-tests/corrupted-tar-bz2-archive/000077500000000000000000000000001251036066300243645ustar00rootroot00000000000000backupchecker-1.7/functional-tests/corrupted-tar-bz2-archive/corrupted-tar-bz2-archive-list000066400000000000000000000000471251036066300321660ustar00rootroot00000000000000[files] corrupted-tar-bz2-archive/foo| backupchecker-1.7/functional-tests/corrupted-tar-bz2-archive/corrupted-tar-bz2-archive.conf000066400000000000000000000002061251036066300321360ustar00rootroot00000000000000[main] name=corrupted-tar-bz2-archive type=archive path=corrupted-tar-bz2-archive.tar.bz2 files_list=corrupted-tar-bz2-archive-list backupchecker-1.7/functional-tests/corrupted-tar-bz2-archive/corrupted-tar-bz2-archive.tar.bz2000066400000000000000000000002731251036066300324770ustar00rootroot00000000000000BZh91AY&SY3z@ d0%$ئ1?P4bd@5@ hokǤBHljg" M<..-#,)̦ q]\Zs[4eETυG61AJB4 훶DG!VrE8P3z backupchecker-1.7/functional-tests/corrupted-tar-gz-archive/000077500000000000000000000000001251036066300243075ustar00rootroot00000000000000backupchecker-1.7/functional-tests/corrupted-tar-gz-archive/corrupted-tar-gz-archive-list000066400000000000000000000000461251036066300320330ustar00rootroot00000000000000[files] corrupted-tar-gz-archive/foo| backupchecker-1.7/functional-tests/corrupted-tar-gz-archive/corrupted-tar-gz-archive.conf000066400000000000000000000002021251036066300320000ustar00rootroot00000000000000[main] name=corrupted-tar-gz-archive type=archive path=corrupted-tar-gz-archive.tar.gz files_list=corrupted-tar-gz-archive-list backupchecker-1.7/functional-tests/corrupted-tar-gz-archive/corrupted-tar-gz-archive.tar.gz000066400000000000000000000002541251036066300322670ustar00rootroot00000000000000~tNA 0=E.P&=OH-"um o3 /Ĕ6Sq>{O9]Զ|JN=b6cUe*t~} kcuc)UFg*\y]; q>q`( backupchecker-1.7/functional-tests/corrupted-tar-xz-archive/000077500000000000000000000000001251036066300243305ustar00rootroot00000000000000backupchecker-1.7/functional-tests/corrupted-tar-xz-archive/corrupted-tar-xz-archive-list000066400000000000000000000000461251036066300320750ustar00rootroot00000000000000[files] corrupted-tar-xz-archive/foo| backupchecker-1.7/functional-tests/corrupted-tar-xz-archive/corrupted-tar-xz-archive.conf000066400000000000000000000002021251036066300320420ustar00rootroot00000000000000[main] name=corrupted-tar-xz-archive type=archive path=corrupted-tar-xz-archive.tar.xz files_list=corrupted-tar-xz-archive-list backupchecker-1.7/functional-tests/corrupted-tar-xz-archive/corrupted-tar-xz-archive.tar.xz000066400000000000000000000005141251036066300323510ustar00rootroot000000000000007zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZ backupchecker-1.7/functional-tests/corrupted-xz-archive/000077500000000000000000000000001251036066300235445ustar00rootroot00000000000000backupchecker-1.7/functional-tests/corrupted-xz-archive/corrupted-xz-archive-list000066400000000000000000000000361251036066300305240ustar00rootroot00000000000000[files] corrupted-xz-archive| backupchecker-1.7/functional-tests/corrupted-xz-archive/corrupted-xz-archive.conf000066400000000000000000000001621251036066300304770ustar00rootroot00000000000000[main] name=corrupted-xz-archive type=archive path=corrupted-xz-archive.xz files_list=corrupted-xz-archive-list backupchecker-1.7/functional-tests/corrupted-xz-archive/corrupted-xz-archive.xz000066400000000000000000000001341251036066300302120ustar00rootroot000000000000007zXZִF!t/#this is a corrupted-xz-archive file +D0K<$(vo}YZ backupchecker-1.7/functional-tests/corrupted-zip-archive/000077500000000000000000000000001251036066300237055ustar00rootroot00000000000000backupchecker-1.7/functional-tests/corrupted-zip-archive/corrupted-zip-archive-list000066400000000000000000000000431251036066300310240ustar00rootroot00000000000000[files] corrupted-zip-archive/foo| backupchecker-1.7/functional-tests/corrupted-zip-archive/corrupted-zip-archive.conf000066400000000000000000000001661251036066300310050ustar00rootroot00000000000000[main] name=corrupted-zip-archive type=archive path=corrupted-zip-archive.zip files_list=corrupted-zip-archive-list backupchecker-1.7/functional-tests/corrupted-zip-archive/corrupted-zip-archive.zip000066400000000000000000000005721251036066300306630ustar00rootroot00000000000000PK 1?corrupted-zip-archive/UT mtNbtNux PK 1? 0:6corrupted-zip-archive/fooUT mtNmtNux hello PK 1?Acorrupted-zip-archive/UTmtNux PK 1? 0:6Pcorrupted-zip-archive/fooUTmtNux PK backupchecker-1.7/functional-tests/custom-conf-filelist-bzip2/000077500000000000000000000000001251036066300245515ustar00rootroot00000000000000backupchecker-1.7/functional-tests/custom-conf-filelist-bzip2/custom-conf-filelist-bzip2.bz2000066400000000000000000000000761251036066300322650ustar00rootroot00000000000000BZh91AY&SYـ@3dL !4! &<egR_ܑN$?backupchecker-1.7/functional-tests/custom-conf-filelist-gzip/000077500000000000000000000000001251036066300244745ustar00rootroot00000000000000backupchecker-1.7/functional-tests/custom-conf-filelist-gzip/custom-conf-filelist-gzip.gz000066400000000000000000000001011251036066300320430ustar00rootroot00000000000000-6Rcustom-conf-filelist-gzip+,VD̜T.ݏbackupchecker-1.7/functional-tests/custom-conf-filelist-lzma/000077500000000000000000000000001251036066300244665ustar00rootroot00000000000000backupchecker-1.7/functional-tests/custom-conf-filelist-lzma/custom-conf-filelist-lzma.xz000066400000000000000000000001201251036066300320510ustar00rootroot000000000000007zXZִF!t/hi this is a lzma file (ZCd/I}YZbackupchecker-1.7/functional-tests/custom-conf-filelist-tar/000077500000000000000000000000001251036066300243115ustar00rootroot00000000000000backupchecker-1.7/functional-tests/custom-conf-filelist-tar/custom-conf-filelist-tar.tar.gz000066400000000000000000000002421251036066300322700ustar00rootroot00000000000000RA a=\@РyD5tS(@)mWۢkMPԉL7:W;y^_WvsvŜđ>("*c8}{S)KKJ?Aϗe+/%S~̗_7 iT(backupchecker-1.7/functional-tests/custom-conf-filelist-tree/000077500000000000000000000000001251036066300244625ustar00rootroot00000000000000backupchecker-1.7/functional-tests/custom-conf-filelist-tree/custom-conf-filelist-tree/000077500000000000000000000000001251036066300314655ustar00rootroot00000000000000backupchecker-1.7/functional-tests/custom-conf-filelist-tree/custom-conf-filelist-tree/bar000066400000000000000000000000231251036066300321470ustar00rootroot00000000000000this is a bar file backupchecker-1.7/functional-tests/custom-conf-filelist-tree/custom-conf-filelist-tree/foo000066400000000000000000000000231251036066300321660ustar00rootroot00000000000000this is a foo file backupchecker-1.7/functional-tests/custom-conf-filelist-zip/000077500000000000000000000000001251036066300243255ustar00rootroot00000000000000backupchecker-1.7/functional-tests/custom-conf-filelist-zip/custom-conf-filelist-zip.zip000066400000000000000000000003341251036066300317170ustar00rootroot00000000000000PK Ccustom-conf-filelist-zipUT  8R 8Rux hi this is a zip file PK Ccustom-conf-filelist-zipUT 8Rux PK^hbackupchecker-1.7/functional-tests/exceptions-file-option/000077500000000000000000000000001251036066300240635ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/bzip2/000077500000000000000000000000001251036066300251115ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/bzip2/bzip2exceptionsfile000066400000000000000000000000471251036066300310250ustar00rootroot00000000000000[files] exceptions-file-option| sha384 backupchecker-1.7/functional-tests/exceptions-file-option/bzip2/exceptions-file-option.bz2000066400000000000000000000001261251036066300321330ustar00rootroot00000000000000BZh91AY&SYޡB р@7흠 @=GM k #Lҝ‚(]BCz backupchecker-1.7/functional-tests/exceptions-file-option/gzip/000077500000000000000000000000001251036066300250345ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/gzip/exceptions-file-option.gz000066400000000000000000000001411251036066300317760ustar00rootroot00000000000000Texceptions-file-optionT(,VD̜T<JԲԢJt̜Tl.09backupchecker-1.7/functional-tests/exceptions-file-option/gzip/gzipexceptionsfile000066400000000000000000000000471251036066300306730ustar00rootroot00000000000000[files] exceptions-file-option| sha224 backupchecker-1.7/functional-tests/exceptions-file-option/lzma/000077500000000000000000000000001251036066300250265ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/lzma/exceptions-file-option.xz000066400000000000000000000001641251036066300320160ustar00rootroot000000000000007zXZִF!t/8hi this is a test file don't worry everything will be ok >b&9Q96Q#}YZbackupchecker-1.7/functional-tests/exceptions-file-option/lzma/lzmaexceptionsfile000066400000000000000000000000471251036066300306570ustar00rootroot00000000000000[files] exceptions-file-option| sha512 backupchecker-1.7/functional-tests/exceptions-file-option/tar-gz/000077500000000000000000000000001251036066300252675ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/tar-gz/exceptions-file-option.tar.gz000066400000000000000000000004351251036066300330240ustar00rootroot00000000000000s:T[j0P}wZף1wոMcT܃cC"`t'jꊞYn2օѳue-`+k~ә$ tjs=u6-|׿|\91^ϑ uֳBJNx1/.hc_i1"-l??4M&-?\sx˿z"߀ tke,:z (hr(backupchecker-1.7/functional-tests/exceptions-file-option/tar-gz/targzexceptionsfile000066400000000000000000000000341251036066300313000ustar00rootroot00000000000000[files] toto/bar/bar3| sha1 backupchecker-1.7/functional-tests/exceptions-file-option/tree/000077500000000000000000000000001251036066300250225ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/tree/exceptions-file-option/000077500000000000000000000000001251036066300314265ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/tree/exceptions-file-option/bar/000077500000000000000000000000001251036066300321725ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/tree/exceptions-file-option/bar/bar2000066400000000000000000000000241251036066300327370ustar00rootroot00000000000000this is a bar2 file backupchecker-1.7/functional-tests/exceptions-file-option/tree/exceptions-file-option/foo000066400000000000000000000000231251036066300321270ustar00rootroot00000000000000this is a foo file backupchecker-1.7/functional-tests/exceptions-file-option/tree/treeexceptionsfile000066400000000000000000000000271251036066300306450ustar00rootroot00000000000000[files] bar/bar2| sha1 backupchecker-1.7/functional-tests/exceptions-file-option/zip/000077500000000000000000000000001251036066300246655ustar00rootroot00000000000000backupchecker-1.7/functional-tests/exceptions-file-option/zip/exceptions-file-option.zip000066400000000000000000000017541251036066300320240ustar00rootroot00000000000000PK Etoto/UT U:TW:Tux PK E toto/bar/UT h:Ts:Tux PK E toto/bar/bar2UT _:Ts:Tux this is a bar2 file lol PK E$ toto/bar/bar3UT h:Ts:Tux this is a bar3 file mhhhmmmh PK 첕E,Htoto/fooUT K:Ts:Tux hi this is a foo file PK E toto/foo2UT S:Ts:Tux this is a foo2 file hehe PK EAtoto/UTU:Tux PK E A?toto/bar/UTh:Tux PK E toto/bar/bar2UT_:Tux PK E$ toto/bar/bar3UTh:Tux PK 첕E,HEtoto/fooUTK:Tux PK E toto/foo2UTS:Tux PKbackupchecker-1.7/functional-tests/exceptions-file-option/zip/zipexceptionsfile000066400000000000000000000000311251036066300303460ustar00rootroot00000000000000[files] toto/foo| sha224 backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-gz-archive/000077500000000000000000000000001251036066300301325ustar00rootroot00000000000000expected-file-greater-than-file-in-gz-archive-list000066400000000000000000000000721251036066300414210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-gz-archive[files] expected-file-not-equals-file-in-gz-archive| >17K expected-file-greater-than-file-in-gz-archive.conf000066400000000000000000000002751251036066300414010ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-gz-archive[main] name=expected-file-greater-than-file-in-gz-archive type=archive path=expected-file-greater-than-file-in-gz-archive.gz files_list=expected-file-greater-than-file-in-gz-archive-list expected-file-greater-than-file-in-gz-archive.gz000066400000000000000000000001161251036066300410660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-gz-archiveZNexpected-file-not-equals-file-in-gz-archiveT(H,Q/V(-JF5backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-archive/000077500000000000000000000000001251036066300303005ustar00rootroot00000000000000expected-file-greater-than-file-in-tar-archive-list000066400000000000000000000000221251036066300417300ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-archive[files] foo| >17K expected-file-greater-than-file-in-tar-archive.conf000066400000000000000000000003011251036066300417030ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-archive[main] name=expected-file-greater-than-file-in-tar-archive type=archive path=expected-file-greater-than-file-in-tar-archive.tar files_list=expected-file-greater-than-file-in-tar-archive-list expected-file-greater-than-file-in-tar-archive.tar000066400000000000000000000740001251036066300415530ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-bz2-archive/000077500000000000000000000000001251036066300307735ustar00rootroot00000000000000expected-file-greater-than-file-in-tar-bz2-archive-list000066400000000000000000000001061251036066300431210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-bz2-archive[files] expected-file-greater-than-file-in-tar-bz2-archive/toto| >17K expected-file-greater-than-file-in-tar-bz2-archive.conf000066400000000000000000000003211251036066300430730ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-bz2-archive[main] name=expected-file-greater-than-file-in-tar-bz2-archive type=archive path=expected-file-greater-than-file-in-tar-bz2-archive.tar.bz2 files_list=expected-file-greater-than-file-in-tar-bz2-archive-list expected-file-greater-than-file-in-tar-bz2-archive.tar.bz2000066400000000000000000000004141251036066300434330ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-bz2-archiveBZh91AY&SYhtՐ`2P(06(AM&D4dhHzDmCG4ѡSngZ4,fHВ4JDTlLPQ878"eɝPlHL7ОұiIHQWW(͖8 W 5/7z(@F,@ȉwAn+m 㑙}GBL0mLh-d+CG顡^VL^FQBw$S 6Obackupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-gz-archive/000077500000000000000000000000001251036066300307165ustar00rootroot00000000000000expected-file-greater-than-file-in-tar-gz-archive-list000066400000000000000000000001051251036066300427660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-gz-archive[files] expected-file-greater-than-file-in-tar-gz-archive/toto| >17K expected-file-greater-than-file-in-tar-gz-archive.conf000066400000000000000000000003151251036066300427440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-gz-archive[main] name=expected-file-greater-than-file-in-tar-gz-archive type=archive path=expected-file-greater-than-file-in-tar-gz-archive.tar.gz files_list=expected-file-greater-than-file-in-tar-gz-archive-list expected-file-greater-than-file-in-tar-gz-archive.tar.gz000066400000000000000000000004171251036066300432270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-gz-archiveJ@zNJ0{`>5[ J2zӹDȁI ٛ}LCIr5=$)e}f\ʘqzI˨WкsJho|Q힟N cxz߹_*5_2\=?o Ssy~ﻘ{vƘe͵^oۿ`CpvWu׍7#oPbackupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-xz-archive/000077500000000000000000000000001251036066300307375ustar00rootroot00000000000000expected-file-greater-than-file-in-tar-xz-archive-list000066400000000000000000000001041251036066300430270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-xz-archive[files] expected-file-greater-than-file-in-tar-xz-archive/foo| >17K expected-file-greater-than-file-in-tar-xz-archive.conf000066400000000000000000000003151251036066300430060ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-xz-archive[main] name=expected-file-greater-than-file-in-tar-xz-archive type=archive path=expected-file-greater-than-file-in-tar-xz-archive.tar.xz files_list=expected-file-greater-than-file-in-tar-xz-archive-list expected-file-greater-than-file-in-tar-xz-archive.tar.xz000066400000000000000000000005301251036066300433060ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tar-xz-archive7zXZִF!t/']2 D iv +ȶvHpv#;;y O9%Ԧ F:h?l (V= 17K expected-file-greater-than-file-in-tree.conf000066400000000000000000000002011251036066300371660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tree[main] name=expected-file-greater-than-file-in-tree type=tree path=tree files_list=expected-file-greater-than-file-in-tree-list backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tree/tree/000077500000000000000000000000001251036066300277715ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tree/tree/bar000066400000000000000000000000041251036066300304520ustar00rootroot00000000000000bar backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tree/tree/foo000066400000000000000000000003441251036066300305000ustar00rootroot00000000000000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahi backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-tree/tree/toto000066400000000000000000000360001251036066300307000ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-zip-archive/000077500000000000000000000000001251036066300303145ustar00rootroot00000000000000expected-file-greater-than-file-in-zip-archive-list000066400000000000000000000001021251036066300417570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-zip-archive[files] expected-file-greater-than-file-in-zip-archive/toto| >17K expected-file-greater-than-file-in-zip-archive.conf000066400000000000000000000003011251036066300417330ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-zip-archive[main] name=expected-file-greater-than-file-in-zip-archive type=archive path=expected-file-greater-than-file-in-zip-archive.zip files_list=expected-file-greater-than-file-in-zip-archive-list expected-file-greater-than-file-in-zip-archive.zip000066400000000000000000000017171251036066300416240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-greater-than-file-in-zip-archivePK W5?/expected-file-greater-than-file-in-zip-archive/UT @zN?zNux PKW5? <3expected-file-greater-than-file-in-zip-archive/totoUT @zN@zNux 1 Om PK (?鳢2expected-file-greater-than-file-in-zip-archive/barUT ,iN?zNux bar PK<5?L7; 2expected-file-greater-than-file-in-zip-archive/fooUT ?zN?zNux KL # PK W5?/Aexpected-file-greater-than-file-in-zip-archive/UT@zNux PKW5? <3iexpected-file-greater-than-file-in-zip-archive/totoUT@zNux PK (?鳢2expected-file-greater-than-file-in-zip-archive/barUT,iNux PK<5?L7; 2fexpected-file-greater-than-file-in-zip-archive/fooUT?zNux PKbackupchecker-1.7/functional-tests/expected-file-not-equals-file-in-gz-archive/000077500000000000000000000000001251036066300276415ustar00rootroot00000000000000expected-file-not-equals-file-in-gz-archive-list000066400000000000000000000000711251036066300406360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-gz-archive[files] expected-file-not-equals-file-in-gz-archive| =10 expected-file-not-equals-file-in-gz-archive.conf000066400000000000000000000002671251036066300406200ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-gz-archive[main] name=expected-file-not-equals-file-in-gz-archive type=archive path=expected-file-not-equals-file-in-gz-archive.gz files_list=expected-file-not-equals-file-in-gz-archive-list expected-file-not-equals-file-in-gz-archive.gz000066400000000000000000000001161251036066300403040ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-gz-archiveZNexpected-file-not-equals-file-in-gz-archiveT(H,Q/V(-JF5backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-archive/000077500000000000000000000000001251036066300300075ustar00rootroot00000000000000expected-file-not-equals-file-in-tar-archive-list000066400000000000000000000000221251036066300411460ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-archive[files] foo| =10K expected-file-not-equals-file-in-tar-archive.conf000066400000000000000000000002731251036066300411310ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-archive[main] name=expected-file-not-equals-file-in-tar-archive type=archive path=expected-file-not-equals-file-in-tar-archive.tar files_list=expected-file-not-equals-file-in-tar-archive-list expected-file-not-equals-file-in-tar-archive.tar000066400000000000000000000740001251036066300407710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-bz2-archive/000077500000000000000000000000001251036066300305025ustar00rootroot00000000000000expected-file-not-equals-file-in-tar-bz2-archive-list000066400000000000000000000001061251036066300423370ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-bz2-archive[files] expected-file-greater-than-file-in-tar-bz2-archive/toto| =10K expected-file-not-equals-file-in-tar-bz2-archive.conf000066400000000000000000000003131251036066300423120ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-bz2-archive[main] name=expected-file-not-equals-file-in-tar-bz2-archive type=archive path=expected-file-not-equals-file-in-tar-bz2-archive.tar.bz2 files_list=expected-file-not-equals-file-in-tar-bz2-archive-list expected-file-not-equals-file-in-tar-bz2-archive.tar.bz2000066400000000000000000000004141251036066300426510ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-bz2-archiveBZh91AY&SYhtՐ`2P(06(AM&D4dhHzDmCG4ѡSngZ4,fHВ4JDTlLPQ878"eɝPlHL7ОұiIHQWW(͖8 W 5/7z(@F,@ȉwAn+m 㑙}GBL0mLh-d+CG顡^VL^FQBw$S 6Obackupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-gz-archive/000077500000000000000000000000001251036066300304255ustar00rootroot00000000000000expected-file-not-equals-file-in-tar-gz-archive-list000066400000000000000000000001051251036066300422040ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-gz-archive[files] expected-file-greater-than-file-in-tar-gz-archive/toto| =10K expected-file-not-equals-file-in-tar-gz-archive.conf000066400000000000000000000003071251036066300421630ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-gz-archive[main] name=expected-file-not-equals-file-in-tar-gz-archive type=archive path=expected-file-not-equals-file-in-tar-gz-archive.tar.gz files_list=expected-file-not-equals-file-in-tar-gz-archive-list expected-file-not-equals-file-in-tar-gz-archive.tar.gz000066400000000000000000000004171251036066300424450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-gz-archiveJ@zNJ0{`>5[ J2zӹDȁI ٛ}LCIr5=$)e}f\ʘqzI˨WкsJho|Q힟N cxz߹_*5_2\=?o Ssy~ﻘ{vƘe͵^oۿ`CpvWu׍7#oPbackupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-xz-archive/000077500000000000000000000000001251036066300304465ustar00rootroot00000000000000expected-file-not-equals-file-in-tar-xz-archive-list000066400000000000000000000001041251036066300422450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-xz-archive[files] expected-file-greater-than-file-in-tar-xz-archive/foo| =10K expected-file-not-equals-file-in-tar-xz-archive.conf000066400000000000000000000003071251036066300422250ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-xz-archive[main] name=expected-file-not-equals-file-in-tar-xz-archive type=archive path=expected-file-not-equals-file-in-tar-xz-archive.tar.xz files_list=expected-file-not-equals-file-in-tar-xz-archive-list expected-file-not-equals-file-in-tar-xz-archive.tar.xz000066400000000000000000000005301251036066300425240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-not-equals-file-in-tar-xz-archive7zXZִF!t/']2 D iv +ȶvHpv#;;y O9%Ԧ F:h?l (V= 5[ J2zӹDȁI ٛ}LCIr5=$)e}f\ʘqzI˨WкsJho|Q힟N cxz߹_*5_2\=?o Ssy~ﻘ{vƘe͵^oۿ`CpvWu׍7#oPbackupchecker-1.7/functional-tests/expected-file-smaller-than-file-in-tar-xz-archive/000077500000000000000000000000001251036066300307455ustar00rootroot00000000000000expected-file-smaller-than-file-in-tar-xz-archive-list000066400000000000000000000001021251036066300430410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-smaller-than-file-in-tar-xz-archive[files] expected-file-greater-than-file-in-tar-xz-archive/foo| <1 expected-file-smaller-than-file-in-tar-xz-archive.conf000066400000000000000000000003151251036066300430220ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-smaller-than-file-in-tar-xz-archive[main] name=expected-file-smaller-than-file-in-tar-xz-archive type=archive path=expected-file-smaller-than-file-in-tar-xz-archive.tar.xz files_list=expected-file-smaller-than-file-in-tar-xz-archive-list expected-file-smaller-than-file-in-tar-xz-archive.tar.xz000066400000000000000000000005301251036066300433220ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-file-smaller-than-file-in-tar-xz-archive7zXZִF!t/']2 D iv +ȶvHpv#;;y O9%Ԧ F:h?l (V=  x@/ePvSϿ{i$!b>``jj|`Pga0or½n&=o%XJ-d,EX:fHσ=f;xLbUȲH)[49ʈ4 )E]XLiN|JWAt&'8?(ľm"J6'ѽLj? ?ZP6׋CVI(Q&>|x"ʠ \Q yOb9W,MWrqTWL.Wj^/*[)F |e/fj^.-gFh]@kz\򰶢DXJp/[oVWRJ]2U2Y˹R=_UaCC{'Kcư cmL*]cwԪƪy-3H0yԪӗD~J[QbE"35$)pgFD m'ľvVMd.7hm&ҋ陜=y5㬛|&1 獞ibbIaZ(?"%V"[ct6W "/wu׋ex=UIXIéEZ*B@UqGʜ:s *f=u"6V4`T [d3H }@('ױ(zKYn@1_8Se^n*1N)lâIO!ᷤ)X{t}Eq83ξjF\y'S)ϭ韤 nBYZ;&zSazDJK:-qG3nԺr$Fd9 7#IѧG 0=m4̤SEH}鑯M8Q6q 1*σVKV?5O3ma_l ||G'6;]On_|]nոg%eyj3F C(backupchecker-1.7/functional-tests/expected-generated-list-for-tar-archive/expectedlist.list000066400000000000000000000015521251036066300325510ustar00rootroot00000000000000[files] generate-list-from-tar-archive| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1319064974.0 generate-list-from-tar-archive/toto| =23 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1319064970.0 md5|b87852310afce39bb56ae8846a70fa9e generate-list-from-tar-archive/titi| =14 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1319064953.0 md5|9bdde260205f343bd4357c73ce5cfc90 generate-list-from-tar-archive/foo| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1319064993.0 generate-list-from-tar-archive/foo/oof| =11 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1319064993.0 md5|5c8ee4d9ea5b7d70ccff1d93cdf0ffb4 generate-list-from-tar-archive/foo/bar| =14 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1319064986.0 md5|edecdbc70eab4fd4df31791687346179 backupchecker-1.7/functional-tests/expected-generated-list-for-xz-archive/000077500000000000000000000000001251036066300270275ustar00rootroot00000000000000expected-generated-list-for-xz-archive.list000066400000000000000000000001341251036066300372130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-generated-list-for-xz-archive[files] expected-generated-list-for-xz-archive| type|f md5|6231c31c521b387ded89148d243785ce expected-generated-list-for-xz-archive.xz000066400000000000000000000002101251036066300366740ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expected-generated-list-for-xz-archive7zXZִF!t/QK]4K/]TYl¶W_}W;a.z _`I5 *"5-Bp_ɂۢP?;.s}Ֆ6}h|gRx_}YZbackupchecker-1.7/functional-tests/expected-generated-list-for-xz-archive/expectedlist.list000066400000000000000000000001341251036066300324170ustar00rootroot00000000000000[files] expected-generated-list-for-xz-archive| type|f md5|6231c31c521b387ded89148d243785ce backupchecker-1.7/functional-tests/expecting-hard-link-for-tar-gz/000077500000000000000000000000001251036066300253025ustar00rootroot00000000000000expecting-hard-link-for-tar-gz.conf000066400000000000000000000002231251036066300337120ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expecting-hard-link-for-tar-gz[main] name=expecting-hard-link-for-tar-gz type=archive path=expecting-hard-link-for-tar-gz.tar.gz files_list=expecting-hard-link-for-tar-gz.list expecting-hard-link-for-tar-gz.list000066400000000000000000000000501251036066300337360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expecting-hard-link-for-tar-gz[files] expecting-hard-link/foo| type|l expecting-hard-link-for-tar-gz.tar.gz000066400000000000000000000002361251036066300341760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/expecting-hard-link-for-tar-gz$RA 0%(NBҜ'hJ񵋂)-f`^~rJn8k/U4g.VXk]PbȚ}*umSy0T1:K3%N(backupchecker-1.7/functional-tests/file-missing-in-gzip/000077500000000000000000000000001251036066300234205ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-gzip/file-missing-in-gzip-list000066400000000000000000000000151251036066300302510ustar00rootroot00000000000000[files] oof| backupchecker-1.7/functional-tests/file-missing-in-gzip/file-missing-in-gzip.conf000066400000000000000000000001621251036066300302270ustar00rootroot00000000000000[main] name=file-missing-in-gzip type=archive path=file-missing-in-gzip.gz files_list=file-missing-in-gzip-list backupchecker-1.7/functional-tests/file-missing-in-gzip/file-missing-in-gzip.gz000066400000000000000000000000741251036066300277240ustar00rootroot00000000000000TNfile-missing-in-gzipT(H,Q/V(-PMSzbackupchecker-1.7/functional-tests/file-missing-in-tar-bz2/000077500000000000000000000000001251036066300237305ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-tar-bz2/file-missing-in-tar-bz2-list000066400000000000000000000000451251036066300310740ustar00rootroot00000000000000[files] file-missing-in-tar-bz2/off| backupchecker-1.7/functional-tests/file-missing-in-tar-bz2/file-missing-in-tar-bz2.conf000066400000000000000000000002001251036066300310400ustar00rootroot00000000000000[main] name=file-missing-in-tar-bz2 type=archive path=file-missing-in-tar-bz2.tar.bz2 files_list=file-missing-in-tar-bz2-list backupchecker-1.7/functional-tests/file-missing-in-tar-bz2/file-missing-in-tar-bz2.tar.bz2000066400000000000000000000003201251036066300314000ustar00rootroot00000000000000BZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/file-missing-in-tar-gz/000077500000000000000000000000001251036066300236535ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-tar-gz/file-missing-in-tar-gz-list000066400000000000000000000000441251036066300307410ustar00rootroot00000000000000[files] file-missing-in-tar-gz/oof| backupchecker-1.7/functional-tests/file-missing-in-tar-gz/file-missing-in-tar-gz.conf000066400000000000000000000001741251036066300307200ustar00rootroot00000000000000[main] name=file-missing-in-tar-gz type=archive path=file-missing-in-tar-gz.tar.gz files_list=file-missing-in-tar-gz-list backupchecker-1.7/functional-tests/file-missing-in-tar-gz/file-missing-in-tar-gz.tar.gz000066400000000000000000000003041251036066300311730ustar00rootroot000000000000000iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+gYZbackupchecker-1.7/functional-tests/file-missing-in-tar/000077500000000000000000000000001251036066300232355ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-tar/file-missing-in-tar-list000066400000000000000000000000411251036066300277020ustar00rootroot00000000000000[files] file-missing-in-tar/oof| backupchecker-1.7/functional-tests/file-missing-in-tar/file-missing-in-tar.conf000066400000000000000000000001601251036066300276570ustar00rootroot00000000000000[main] name=file-missing-in-tar type=archive path=file-missing-in-tar.tar files_list=file-missing-in-tar-list backupchecker-1.7/functional-tests/file-missing-in-tar/file-missing-in-tar.tar000066400000000000000000000240001251036066300275170ustar00rootroot00000000000000file-missing-in-tar/0000755000175000017500000000000011655057606014051 5ustar chaicachaicafile-missing-in-tar/hello0000644000175000017500000000001611655057606015074 0ustar chaicachaicaHello, World! backupchecker-1.7/functional-tests/file-missing-in-tree/000077500000000000000000000000001251036066300234065ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-tree/file-missing-in-tree-list000066400000000000000000000000211251036066300302220ustar00rootroot00000000000000[files] dir/bar| backupchecker-1.7/functional-tests/file-missing-in-tree/file-missing-in-tree.conf000066400000000000000000000001331251036066300302010ustar00rootroot00000000000000[main] name=file-missing-in-tree type=tree path=tree files_list=file-missing-in-tree-list backupchecker-1.7/functional-tests/file-missing-in-tree/tree/000077500000000000000000000000001251036066300243455ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-tree/tree/bar000066400000000000000000000000041251036066300250260ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/file-missing-in-tree/tree/dir/000077500000000000000000000000001251036066300251235ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300257070ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/file-missing-in-tree/tree/foo000066400000000000000000000000031251036066300250440ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/file-missing-in-xz/000077500000000000000000000000001251036066300231105ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-xz/file-missing-in-xz-list000066400000000000000000000000151251036066300274310ustar00rootroot00000000000000[files] oof| backupchecker-1.7/functional-tests/file-missing-in-xz/file-missing-in-xz.conf000066400000000000000000000001541251036066300274100ustar00rootroot00000000000000[main] name=file-missing-in-xz type=archive path=file-missing-in-xz.xz files_list=file-missing-in-xz-list backupchecker-1.7/functional-tests/file-missing-in-xz/file-missing-in-xz.xz000066400000000000000000000002201251036066300271160ustar00rootroot000000000000007zXZִF!t/UQ]: g~r|rࢅDcfo[*nTӦsU zJd%SPD&`k[_ךx DA~" =mدmVTr}YZbackupchecker-1.7/functional-tests/file-missing-in-zip/000077500000000000000000000000001251036066300232515ustar00rootroot00000000000000backupchecker-1.7/functional-tests/file-missing-in-zip/file-missing-in-zip-list000066400000000000000000000000411251036066300277320ustar00rootroot00000000000000[files] file-missing-in-zip/oof| backupchecker-1.7/functional-tests/file-missing-in-zip/file-missing-in-zip.conf000066400000000000000000000001601251036066300277070ustar00rootroot00000000000000[main] name=file-missing-in-zip type=archive path=file-missing-in-zip.zip files_list=file-missing-in-zip-list backupchecker-1.7/functional-tests/file-missing-in-zip/file-missing-in-zip.zip000066400000000000000000000016201251036066300275660ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/full-criteria-multiple-backups/000077500000000000000000000000001251036066300255005ustar00rootroot00000000000000full-criteria-multiple-backups-gz-list000066400000000000000000000002041251036066300347500ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[archive] mode| 777 uid| 1 gid| 1 md5| 1 [files] doesnotexist| full-criteria-multiple-backups-gz| type|d mode|777 uid|1 gid|1 >10K full-criteria-multiple-backups-gz.conf000066400000000000000000000002311251036066300347230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[main] name=full-criteria-multiple-backups-gz type=archive path=full-criteria-multiple-backups-gz.gz files_list=full-criteria-multiple-backups-gz-list full-criteria-multiple-backups-gz.gz000066400000000000000000000001061251036066300344170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backupsƷNfull-criteria-multiple-backups-gzT(,VD.J;7full-criteria-multiple-backups-tar-bz2-list000066400000000000000000000002211251036066300356100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[archive] mode| 777 uid| 1 gid| 1 md5| 1 [files] doesnotexist| full-criteria-multiple-backups-tar-bz2/bar/foo| type|d mode|777 uid|1 gid|1 <10K full-criteria-multiple-backups-tar-bz2.conf000066400000000000000000000002551251036066300355720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[main] name=full-criteria-multiple-backups-tar-bz2 type=archive path=full-criteria-multiple-backups-tar-bz2.tar.bz2 files_list=full-criteria-multiple-backups-tar-bz2-list full-criteria-multiple-backups-tar-bz2.tar.bz2000066400000000000000000000003261251036066300361260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backupsBZh91AY&SYq1yЀ@@{n0L сFd14`"d)=OH c\fc~??%!TEUV1,HҸo6u~c&KӷnSc3XWeҿu?6,[Pfull-criteria-multiple-backups-tree-list000066400000000000000000000001061251036066300352700ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[files] doesnotexist| bar/foo| type|d mode|777 uid|1 gid|1 md5|1 <10K full-criteria-multiple-backups-tree.conf000066400000000000000000000001711251036066300352450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[main] name=full-criteria-multiple-backups-tree type=tree path=tree files_list=full-criteria-multiple-backups-tree-list full-criteria-multiple-backups-zip-list000066400000000000000000000002151251036066300351340ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[archive] mode| 777 uid| 1 gid| 1 md5| 1 [files] doesnotexist| full-criteria-multiple-backups-zip/bar/foo| type|d mode|777 uid|1 gid|1 <10K full-criteria-multiple-backups-zip.conf000066400000000000000000000002351251036066300351110ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups[main] name=full-criteria-multiple-backups-zip type=archive path=full-criteria-multiple-backups-zip.zip files_list=full-criteria-multiple-backups-zip-list full-criteria-multiple-backups-zip.zip000066400000000000000000000012361251036066300347700ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backupsPK 6?#full-criteria-multiple-backups-zip/UT {N{Nux PK 6?'full-criteria-multiple-backups-zip/bar/UT {N{Nux PK 6? <*full-criteria-multiple-backups-zip/bar/fooUT {N{Nux 1 Om PK 6?#Afull-criteria-multiple-backups-zip/UT{Nux PK 6?'A]full-criteria-multiple-backups-zip/bar/UT{Nux PK 6? <*full-criteria-multiple-backups-zip/bar/fooUT{Nux PKFBbackupchecker-1.7/functional-tests/full-criteria-multiple-backups/tree/000077500000000000000000000000001251036066300264375ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups/tree/bar/000077500000000000000000000000001251036066300272035ustar00rootroot00000000000000backupchecker-1.7/functional-tests/full-criteria-multiple-backups/tree/bar/foo000066400000000000000000000360001251036066300277100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-and-check-tar-stream-from-tar-gz/000077500000000000000000000000001251036066300273045ustar00rootroot00000000000000generate-and-check-tar-stream-from-tar-gz.tar.gz000066400000000000000000000002631251036066300402020ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-and-check-tar-stream-from-tar-gzAuTK 0@ь]Ev`^[O,:*:"3 $<ݔyzq!Z{"}ݱSN֪ӮM|!hBٗ'\oX9ppn8Myyrߍշg (backupchecker-1.7/functional-tests/generate-apk-conf-files/000077500000000000000000000000001251036066300240455ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-apk-conf-files/generate-apk-conf-files.apk000066400000000000000000002212101251036066300311260ustar00rootroot00000000000000PK[T@9mres/layout/main.xml]NPEتM btg 4 ҨmCk;3 \y/%<;/7wޙy)$ӝF 7Qr=P (NOo_TOYo|!cÒӨD)ϼYkx)zWxCo{Rtd8.[K4dv@6]>tWC^DXY9='-j췎~PK9mPK[T@3_\res/layout/menu.xml=N1Y;[) B\;P ؀K@8W@cx޼8j 0y"y~" «& we ,xV^L윕1 E;8DUBFʖiƺt3eˮm.qF%L] /V?|`Vfُos?Jpʸv'As-MkvM\;Kj}l\WgY}v}eVl'PK3_\PK[T@"{#` res/layout/preferences.xmlUMOQ=C)PJ.:"ѕ&L\!Bb¶3 tsi\p;51pJ=xNM{@ Ӏ<y> =O\!nDhψ7⻲#xM#.'UD)&8.WtLMOŔipԤC*&|[qŧBľ&Xy3.]qՓ{ zX,%_һ2CU|H͗8L`as*-~u#66+4mmʖ6*ƅ?H[W!W(9Q\.w=Zp㬎bEj)#YE<WrDfmhW!sG:v$~`frXpߑ*T_/{2 3HRc !9I<7lMRۤh'佧RzVK9 k#kNɄ^C:RGX߰gz7iNK w'5gKrc}F}Ha}3oJ2i.ӿW4&Mhn¨o*?R_^jnߜ挚g47c2#ъPK"{#` PK[T@ŕO6 AndroidManifest.xmlTKOSA=@yIyR޸1j1ƅ<I@LA -XV҅?⊅1W3ߝMmϽw|ߙobxHgzO4xKTMb biB|$o~xA/7/щS좈r8F y uF`* n"do!ml="{s|2˸ He13fOfdNX y"{LF/\0@u(s 豸d)d͸%<"^qָJl-N&5̜*qV3#5U>%޼PơniR9BezTEXe˜/w~쳺VkVz xBzdb}KdוT|S.j֫u''&=O$0݄μ0VVNPYVZgZsgqO{dk唽bt=/EtxOxP89?^_[:>_qoHo=rZ7Z߳}K_#^7[:z9a=g:ЋkQGoEb^[z-W06b_q>sci5f쳴V`/兛g-~^B%,=7C ?dK\?oD4b3c 8F-=7[|ޘwlb}ǵUg130M9PKŕO6 PK [T@kf}ٴresources.arsc 0>|:z@x<t6j.@`dz*F`|res/drawable-ldpi/balloon.pngres/drawable-mdpi/balloon.pngres/drawable-hdpi/balloon.pngres/drawable-ldpi/balloons.pngres/drawable-mdpi/balloons.pngres/drawable-hdpi/balloons.pngres/drawable-ldpi/balloons2.pngres/drawable-mdpi/balloons2.pngres/drawable-hdpi/balloons2.pngres/drawable-ldpi/icon.pngres/drawable-mdpi/icon.pngres/drawable-hdpi/icon.pngres/layout/main.xmlres/layout/menu.xmlres/layout/preferences.xmlBirthday ReminderBirthday Reminder Preferences%sNext birthdaysBevorstehende GeburtstageBirthdays in %1$s (%2$s)Geburtstage in %1$s (%2$s) Date of birth Geburtstagcreateanlegenedit bearbeitendeletelschenturns %d todaywird heute %d Jahre altturns %d tomorrowwird morgen %d Jahre altturns %2$d in %1$d days!wird in %1$d Tagen %2$d Jahre alt today: %s heute: %s tomorrow: %s morgen: %sin %1$d days: %2$sin %1$d Tagen: %2$sSettings Quit service %d Birthday %d Birthdays %d Geburtstag%d Geburtstage de.ubuntix.android.birthdayreminder4 0@Rattrdrawablelayoutstringpluralsid`&<HT`z(PtF|balloonballoons balloons2iconmainmenu preferencesapp_namepreferences_nametitleknownBirthdaysunknownBirthdayscontextMenuTitlecontextMenu_createcontextMenu_editcontextMenu_delete dialogTitle summary_todaysummary_tomorrow summary_othernotificationText_todaynotificationText_tomorrownotificationText_otherquitnotificationTitle 8H$x 0 8H$ 0 8H$ 0 8tD$   X8$ 0@P`p      "$&(*+8`$de 0@P`p     !#%')8d<$-,8d<$de/.8`@$PK [T@PFGGres/drawable-hdpi/balloon.pngPNG  IHDR'HuIDATh͚{gWUǿk=ktZa } H `KA)P j$!? `b|&Ф+ NBT(Z>3޹;bg%;}s>g=^ ~ sp\=Nr]{ ǻ?= .0F8Zeu0|'րxܷSw)W\=: ivkڹ3SEkծn5!B?R[}}9({F;}\iWאF ӸE! oxYgf}Nym}ySr31ӴNFc& ~p{%#KުF~ߡVxwlྴs-wLʲW>Z#,/ F"DA@(#G}~^ֻ=/2;ap֗&_>\Y[;V7M(I EEJ@A)lRQmSMC86][_oU/މ?߬yVr ۫ QFZ#8AH6!_ٱRwqp^৮N}g.|\ptnNY|]ٳ˓25;f9XԎVaejZ@TOe{/qGq}qiV7NFu48JvB0sXqm""ps;j!HSܸ# {ܖ_4]=xvTQ#o󁨙Qc~Xơ3fy@(Ƚf[\ݠ. < )}El鬳tڎ[=ȑ00st{on{Ͱy w!nx8eY´Đ ڐT-;oni, px%~FXD% B !oCw 󙡛WtP Φ8 ߞYw%UZ:5',Ep_UQzEL3VGΰa(NZJ|GT N_:vݿHVgޝTrrU &" a) 2Xv䑢m)" Bz|@p-@SR9pl>=rTUl gӰ 0" !J1Y$,Q+D%sŁ$C;XDY5<ج U#}0t" oHqvf}] UNf,MՉkrH 7AW}*y0C 4ҕh L|Z,$(@\W?> LbJӴ!pι}uuA#ZtId$VEjXxCjT8,DG6߀0N  Z8o?2]o(bRxĔBiO9Uds Z-x6qBIsH8ЊKPBDj%@2Q'f~d+0.vT,Mvרj$ED$檋Btnr8崴5܉Ç*^$xl3H2Aqh9t2*R6fUbf$EEdb۷z:jwlnDղk]Vﬔ)^Wh#h$<>eqqkR24xeEz 3 TET@\ @B*z5F moMw!!t_z;qNñ k$qޱBGh:5A"[PKnpX/:ґRZ&0 "Bl'wTbR݇HJ? ,Il[Ƶѣ  -QBQ r;NOlQp7R+J5Z!C(ZRS6BЀ+U}a>8868!@%s>d*ՋCC Q$$zj]{RIz" RNX%9[lXhRQ!tsك^gZ!5QtQqȘԛh!`)"!"P70$&/4H]t* ya[1+xY<5&(+4&UL AB. @EMm5 WNx1 wfG0&{"\3C4!{uBz(V*BLdPcD;P(;sVM x,T): F!uö闡"9aB .J B`j"6he4VF4ViF cB`4 Bjuj\e3 R[0sDpR  8'.'YZN.7/%'AR$ )@j VsFu>r MC=zPfaUU5ku7Bd8YN:FN IB;Fh 1!9$:j"G8GNF I"%TnړẐZɠ9/!|un5t50CkњԜ^) %ZLћSF7jj-G<}=Pv}C%8FO!RU"PNJԊZqH(@eȯ{B}iP>s7xAABCEi{LUԋOnW=!qâ~B.?i{>: /'#ɧ0 uP"!Z,؍tLX01L5G Kn9mךyE\g=UOȕW^Yu5g<\^rG~ MWs_춾ag<'[kx$O/[O0z5wgnxމyoۀIۻwǟ򔧼n߾}?mǧc||]w1w3:'"I_~I;я6$>.8p꭭c'dssEM\d'k^snꪫi9TĵSJIwzn8u4 N6!)-oy'IJDW\q'ɝ'U*kG9g۽{brh+3ˣG/ǻO#G<]' ٳ])6vRđ#G~tUn揜TA㤃ǻD^YJbPIENDB`PK [T@fQ@res/drawable-hdpi/balloons.pngPNG  IHDRHHUGIDATx|kmWYZksN:Uބ< D "(HDPҨݭ--;F1PD"20&҈ayqUu7ǮNb8L1NU}^{o~s}˃_̛m|G!^սZϠW҂@hzn4 W ըTb$R !Ka3Kk%{~q o>oL :Ρ_@g^P/ &R]BUh4lj"H]XvX+ͲvnQOs#bEʲ+$rѳAw۟ac3Tx4YoxjTB]ži8p6fRt;ۋGwZ쬬4P^~}\+V^cFj1bf" E;ŶQjVgʇY<Ƶ=}7񤩫*.I'oD;F؜0NkQݡ[thk2f^/_yқ\9q}=f;>W1ljGm>rCW]uy!R}e^w㏼1?CdFN=' Y޵TbiVji[tK_}#t?jա#Y*mG跗(#O׃fcژ[I)fӢGkli zuӋ-޶s=Z9ڕ?wOsǻ~OSQ<2cUÛ٘T5P+kY0QR;js|Gexu8O>m]臣 U hf`)ޒ??^0۰2[&ZKxgP9 hHF0 16CeBVD롎 p gp/g8^?`mԱv}Qn)W>7e h(2EOzy׻ڎv;s.?9$~{A}#e+}0P Y'?J ] rZt{4 GVTA0HƩ@wJyHa\yY~2S 5tipii(mܶ L 4 v!u=J7+yہ줜%EDvZx~^ `I@T`!ofߊTP*&aV+U:υK" 0F?bnv! JH ,!$@JqEmX4<;AJY޶Rp$Je]/@R8RWcA:2.  `S4y<ÃumGCE9g-Ǽ.8J_QȚT,ہOS40yD9UPe`rwB "!":x}<'~+Cf#7GBRHe Q.lc/,n*9)2.W'g/) t! KQ v]iE"\pw.J(t@q"9ǶV>5ek. Xx+v S.S$9Dgh K(1njq;GB!: ԣ43}wȠ">r Bw)N+NnEIiB/@)PB%zr֗$hacf0恷xe2K`Y! "Fs\dD 88TF+$A``!;d,gVn^`^"ǀN^ ߻S%sYdUE*™'gΔh)bF@"zsC LR,|J[X8 Ȁ$Z0H!yeYz4Ct*=)AtчaV;nC#mG)@-# 5@߸BR̡yHĔHFXg08 \CRx,|EMaI0CvZB{,S0S-U$0i=. V 4n65'4|z!"gɷc4)UUX״QPUdU5BU" 2q, TvO@ȀĨhuL%Q@z@sc໥ҮS@/h00sW 45BX-{ 1[9t7#b)Ѫ+ uMV*J`UѻJ>7&d@v ](uPzNe0FeV1  DAd2Bͥr< ~t#%`K N$XK -d͂&1ĀNTUe+CLCb  *` .t0)&"""f#EVF<^~YT@u@ardlrUjy  Fujn ZbrYؕizh͌=H,%c^4'I 4&`U`kDFIkT@>$IP<~º npqEa){h]B =2i'%@ :(2XUb4Dh]-1ɜ&wv]MvPqy$[ (3 a(3W p˲=H P P ˝ 8|_\@XaUVŭ)>011H0 x"j2$ ńe"Q99Cx`b)Β 1SK%gH  R$JT$%{tWخ<!{m^v+b*E)Ē= ސd]n :UL>C#!u(qItI3<;U209#Sɛ-W6ˆun2e |0?82|PӃgDw02՗3&^7_\b,&ZXqW$)*xSC6OM]Ձu#ug3>3wq9rK O#1XcEH(2w\-rYO+ǎn}֯P  ].=WE; PpW{ȺTT},s?aJd @\9bb?19 }ߡ R+`\^@!Ge6X!LjP, Eg)={.}̹ʔ0*6`C^%x?ռqB'  @"%WQf3)wyɦw혏5hT7hێ}ߣd#zJ"12PZUJۧXmaW6N!wk0 " Bb x'_\$lb$$H@dum+ٰ^sO67 9G@ZtȥwG_ܚا쓉4b]"%[AGMħ{Y[hm@;9B0:> w7n5Pn3`fUV1JffTRlƉ躍DU ;kY2*̜ zdСs;60FcҪY˕|P`Kemꇅr‚e58tw.Gmܠmbty1c! ֗4o ͊tڶmsFS2NrC}ػ#?$y̓phgY6rk=PkuXHP{-ٗmkDNY@|g &8\V238I;]@9J3o۴Z,~DX]ٮƶ[ح=EϽ+1}? 63j 9OEv~ U`.sy[o]!UL)<>9|,,:ۿF}4U3[Ey{Z+Q۵s'LF8v-Tl`X8WW_0}M,bB|/g5lhq =t/pFn\77'24|\U>NQǪ4֪Ysv;hv-L>so"а^gkCndFm`3)dډ~+,9ozKٖǻbse>0nU0,yUvYb9ږN` 1@Xt8@rq|:ֹ=&L t:U` PA!4P #_=廀'g)UUiTU^*T))ƨ^rj\R\=:?z[[o1x%Tndq0oE"U(U/xῊP^"g*3Cq^R%g'@4ns |Oz/}?/ ~vPXO)GP542V$>B/y4j}kzАk `2ADܪp^s/|:|hy̛>9qʯ駞I{uN6jzOpc?"A^co!w/ԅ^{q_3wAKѧ `գSկDzǿΰ>˿~vql~cv= _jaB_7~@5+@yΓ֦G97OtW\qxK/|Cz/G|1k_̛]>7\W}y//|iuL&;W^ye7O䒗o{s_'+\zpe,>˭4ۼ+zWe ֚;:e/{ٱB?L^gZ[[3̷޾io߿;:MozSk/w+ᗼ%{/ĵvw5<~p'}yBlƃ9;/| n.nxh4{ @ykrȑ#ػw777_~ȏ\W~1.u .w\RpUUzַ~ FcGF/}Ϳkv-??>oN=}VU{@UU]wǜ|ճl=O}gq{ q7;zֳ^w{>\q駿 Oxʯ-gqF'r-RJ؏_f[g~WO=3Sc04nysso~Go~_o|67M1H:Z~x{{5\3_VOL)}3O87}cU]_k곞^_'wOO1;vqz׻3׿M?Hz=92IENDB`PK [T@^ SWWres/drawable-hdpi/balloons2.pngPNG  IHDRHHUGIDATx{mW]Z{sN}ͽ7W7 *!*D / jѠCT r)GQb@5c(1 7{w8}VEIp jgu>oooo37@`I"iCyC<)){z Pck,9 hjM_KzO{ۿ}~_s.`(,@OoZ@羳oe (/ׅjcY0H)iynqU='|+zVBc 0%;uki"ڋcY]mPrU>Y@u&q2m5c=s׾G۟IX;zC" ,!CʈEOmxwsz'3 h;#XU[ʼ{9ٰb(#]rLǷ:9d2tSz|׼QIo>g(ye/s?I mQ sLY3tW济RiOZh+W?KoZM5*SҮ깳5}X]+®BD3MiY#|Ən֬'*&_7 GCNl}k*2ZP7x?TyqR=mf4ӵo{o~@~}hg8XD>*αrV.fCٚQ䄭r{E#>n2]8tq^Ջ{z m6Mќ1;S)omճoX%|duVp|ep^ڲ0 j(1AA^ZIT=)\ڞ޶O2WE{DYn{8[ZUA.}E!#)AMMƦɶm:9kƃƅ~HFc:Bw|Էv_;]푍ى!m1DeCjCim]Ǐڬ?Ӵso擷|՘zϩ_ԋgV{_pҞ=>ؽ[ݻ[[U9\^V?|+_-ᆪ>Wk; v\wY 4zО/WGe7\a}ԌWi13DˡzK kEɕX^TIoKٿlէ|luauneťh?/k8[[_Go}e%>DYF1(KG G6MLz0MZq5zr^~y^ĦY^\=j.k*WVP(FC$ 3!PhGN/}x]#o͙gyOZ騪ibc>(J+1 WcQGJry٫~^z=`bc6+ Ǐs*z +Ơ+%[\0iw}I˓]38kW[jSH@r1p{yW[zw2Ba2T!! 2F&kHI?0VwT^XZz/Alf?R,ˈ+C .ƆABVgRI;C@(;oug~Ӂ+O?}p_]jd8(i0LsFUVQ`)D-4" ayq[s8IHu  ~v@ X%jD \ .%`,e>}noa%B,KCRIYy]7T{ipX'Ca&fJ3jh+om{kO M<~8s?X"!V#3]jR9cG1"%ړ#Y 3ɛy6s750xNގ;~$ 0& $%aa XYf[NzLx`BHJvnq*%:[٪.ќπ xj+‹E\LN`%ݛy6C*KL 5s,oLS!tl{=/:}YhaB(NU墁R6lm[bn2 HY :sl$:S*zAeh{O}ܣC3v+`OD!@9,9EOD3u*D3Qol.rcKjS!P ,>D$^ '`p*uf 1_K]،qhպ$8(t`mۢ_4 Ѐ(Ì9@2@\@e,G7$Ǝy/ X N^z5v|$`SB.a r1$eVp N_,v"AD2(;HWA <{_C!sr\N-IwEdeF2#9dtMA(Ƃ2@8d}b`4R!Ҙ2W @6֭XAcpOS&Xxbe켗Ps=]t=;.sRrD-| vdrv5I(Ip1JV g2B@dh%,Bh%#KFvBD!clD $R䀻 w,,W| H` bvgѓSfL)OF94 l~" 3&p\VL:9 ㎥1{(XT2.jE $9:@N$|΢C۞ R>Z =$vNKnR2B6H 4,Lع,EjS$e ,;uif%*#]Q3 x aHHr(rg<7^ `+1ILgZRv)Fp $Ne)`(bܱ6GT*TJPl~L:e7BJ&WH,dwMWIdE*I*h! lw:S\9eYgn1eteL)[4Nh$);("-"ųE`>>O{qYR%_(KE퐼ej^[@Fo˝i+\,Ăs#`ܽ<>J8 :B eP攖&WbYeIB f4B\2;.D`pEri``Ic y9P3< S.$:C4y!+_rh~u3}sУbcX|0c\eY:V`M$plX Piҁ,j)(a(EwB CIR#0;#%LHHmCv{>w pmb\ f!21-GU΋`( XYbD\*r2Z6qށ9EvrKpP; Z"ٹ*F*90St\rZi+Jªrs{u/M5ZXqV ]E ֍$˒V++vU(GIP!(,K^uiiY`Q*ehHŽa::%9$)w<@^Jx ~A-6I^9CiEBiHE BVVdX,%Df!IoZX8Ж.tN OSPS@"(Avt'ˁEaG܃($|lA;n:Og@l&Z s042,aĂY,ciUIVYƲ$ʒ( KZ(`!аI)QYȾIV VYOXTESiNxT2xǀMi,%S)y9>dXZ"GzdUQ121OϢBxf2enw-[}@>@ `dD1Et@'hL9K]G |0kLNNv3&o6-SNhsf#FEr! @9Xvy&ϰjn61R͔:zFp- `8e^랄x_O|Pxe #[L0SEr!ʋ#*].FwɝٳUw : $u9XO? X2u2 ˉb#> 5fOԤ-y.̹v,GU ?{) |8HS s@,%yRJ]nddf2a3r>H;8rv,-ߓnC/xJ(yΕm0W)ڼ6)ZN2%* ofxՋ.~oJl0pǓtA󅔲c!9{3d)ɔ'v!h9F7pK󓧆X]݌{veLjE9[Х)4akfoQ [] _|a%v9:v]ض-ۺF3*Ϧ]=r6zl).3uw?7CO8rxȕW}phwхĄ)9SnAYX+0%Kx/s$qG߬]NA5*E!iTOgeӵr4cpJ|\ hi{kyY۵(63ŜvDjY[!-O_K0/b\e׏ѫUĨ"uM4줐c=j\vAz ?{RK>ubb[BYB- ՟ӽ|{MW!x//CPȀu,H%G<܎.}ǵgߣG=뇬tڛs/se(+s#~=/|7,?jZH|'{^sޥ-~ՉyW.p Kߋ.8,?YeAiX߼*|_ +?^&`;pZZZB>t|YWMx=Fώ#ox[n8}s=u7zqWg@ژ==}=~ _\]=/98Euo8\wuܽ{Y[yk = ۧY{ў|ǫO@ ݝ?,]p+:ionqWowm?/z*nmm#o<TUG۶}³w޽1~uUxu]7zĝ^!_Wo=\uUzl kt:ݟs~p8|Ȟ={Atuuy{΍1zk_[@Y>ym8~A,ˏM&ϹhI`Fe/{ࢋ.*E̓ lnnk>xw|ԩg_~K_ҕ313 /}gʲOOsϞ=_J)`p6<)O>|;'Oh6<{09g`0h4y2̷tzɓ-˲Ї>g=o~g|]nllwԩ۷]Z@{{@unч8pccZ@ ~WVUu8>r&bݳgUUux3Tכ/ywi5<>yW[@r~mU.>s&wƳN={\r饗| ;NJn;$Lۤ(IENDB`PK [T@kW<~~res/drawable-hdpi/icon.pngPNG  IHDRHHUGEIDATxy]}?m3x< FA4*i%@KPĒJJЦi*IiR@JՔ  1`cc{6{潙{l1cgz=Z˙v&@p3MgsG)ތDֈxhLj6mωl; DF2[p #Q 6 MZp< n}]eQWČQ}x) bӓ(FI2@->o(_ieK|7I9d2F2'a,I[/ލFkf(gFU88 ~[1 Kņ,Z51'GL!ۓ ^}cNO*!#[Fv rmR پ Մ#|\Î 1VU(:1ΰR#|pu_=FxIHǬmHp% vXc:G=|,9/T%Vqw2uHphNOV=n,z&wEA1QV*A%kaOY>2heѡP*$ +PaAr'/di `$* E 0°B(%h(Y2* KX#Yذی CF#b8y2qQfm52U]͹hHӘXJoq ,?ySy^w nѽ7~Pȕ|֝[{bo~ć?C ֠LH[z _.cd a})ņ)8ΐLCJ^J/g_E)~+]̥,|Lb l?2M\0kt\k*aϹf4&&f8O \^B]fOߛ21显&IxL` UKu?$F61ȆXɁu[C>~!$XEЕwͶߐx\mұ6^nE kHB]+B&N›L@q7,}Rn%sE %sffV̽Gx,jƕQ8aG4vD Z0A`V+kUh9&CkP0PZkuh 5uhmh\kѵ+J=ӂa0!~n:ʁ N[O#A9v8ͶCdDy3ȡ(hx:=7I)*fsփĄY$1gl)Agbժɰf tT쳳Ss( ӢbL$%}]ӓMKjD0AH=dqe)Gi8.g-w_y 7b 2.Lp./i^0K290nC_[ bx>!=H#|6v>A{մגiJП~[4WKQ*A'롔)#5g1qw֘SWǡ#Nn9s,Py$auy-(SPacŽ]{7;婆*OEE2b5}œI"Pʦz]9\֙Lԋ91؛{>)$1tf;au=E*fq$J'{m@[z--U_LFfj;%Fړq0P@ɦXzz;ƚq 4AM`{zBS}'k_g$NAL"}ݸ25]`r]Oqam& O(qfV?;JRl%.(1=tTd%Vapf qte9(]WZ,@6іř T}L'w3-1d4x˕ơ&J* %Gyq_\ccgoqer/&\| >p4 UQ@^}c֊h{ܾ`G_6\m`;ul@B45lXHl'UT BH HQ:3u!W"P ~`"Xkd4t,) ԝ#P\f<Ň17S\p!VG!MFUjކϑuf2'#0h[eƫb-$Oc# @i2]pԀuܥFL{|}IENDB`PK [T@Şres/drawable-ldpi/balloon.pngPNG  IHDR$k/IDATHǥKW};s$Rrۂ&VGAu Buhg X)QGT1L*&&}{Ĕޖ{k{ۂ/#|7Y\^=bg~sLp)cMxntї]]^={g|68zv.=2t ^y蹋߼ ^4yǻ˟d4ZE;3FGVw6d\&C *?Z>e5I]=h9I4|ްk OJ=ݚ;p ( BYTMIh BQD%}OO[_0,=p!u}xlo; 0 Tz0bP7bmk͋W@,+윕|*(f B;P2bk;jj"ᖟ2S4w QR }#ko0 j! Bhe\=jďvH^VpZG$#h&]B^z"ZaZf2Qi*F@ x8'eјY !0g_dfck; M#I.I+ShsSՓ 0Pg!id_jv$2i-Gcb")@w, G tcز ZsvCh^j½N>r.~Vo<ԡg_ıjv~{k;nAaǎ{?#>{8qϟSN'OÇ'Mvگ{#G:=N>cJkaw]psKKKgXUU<ϷR=-t3333[?1ؙIENDB`PK [T@ res/drawable-ldpi/balloons.pngPNG  IHDR$$ IDATXuΝ޼o 6%`RQH%46NpUBOCH%.R+"E)iRAQ5(10_ow߼7of*!AIm̹;s.p?xL!g}0>iߩlN)&tڱ_{w?)U%ϯ^:ym-f9ѮbiQҬK=Y(}~}*;ε2E&s'<}@1ݜxv}ON9rܖ_\^Qn|8@Xv'_酥Vv?>rЈ V|b(6YEy嵅^|?ڈ5^RjENm#ͮl|UYyzϟwL}hU;^m\,ƕR!QM .U^fxq弚{Z/|3櫭GK.ݴs޹#oE29Iv޵˜o/Z1s2lhHMmWtyuXvcc1\gJ6~|a orܪG GjمMo͛( bC'EYdەCWmвpad RPTx[[)F8_T"}~?G+ NnKd~2=M' nӾy ʥ >}"y;^9"gKT%Fi02:ʱ Kk8Ѕr V><:O6o,QMH 5æty٠W% 0yUUz1D)Q'ze!,,lb$1Dž"PX(lI}M|@`XOX^ae%H_[ } `8h@)}kM 济MGNgΤA<1dVo-a2 r`gbJz}]`s8 8pe;1 V2}YL"R !ZkŞWt:9($$HRf.0}"e`&Y B|Op0 1CXx1(!-m(("Xʬ |2* B 0C sͺP$cE09 +4C)Ҝ+0PdT1 T*TVĨh "pJ!x8pY_$S*!\0<.CЮБ.@"DRbIDQ-dm*H*V\w2хϋa VEl/i8ڻ)_|5]Wb*e{( D<.T`Hj$SHrG\ ,¹hH`t~z4^nძc,u/T"zLc.1X"$Z1iq dYb8>B`qXCG.pfUĬ{}[cՍ1z]zCztRWem@`  P䕪R]5uԔCI$+>s{d~9.T1-G֐U4uEIBJVia)"q)h*e%'Z ;s`o"0Ԁ /*0#V-CM&!/( ʋXSʆ$ց$%"P(s![f̬ED\"aС Pd ]  A.2R!f8UE,[a,Qʠ?Pv"]qѓ"GZx8{-Y Jq,lL[RH[AQ(οKQ6 Flbֱ09Ti _?l0opY`MuVj5WI#5܀" =3@ߛa UhuH'^ ;;?ɋɫ.ql{ߊ*ػw3g{o+vr=znnn98~mZo;lggg7s=sꮻOx_lNs؋/XV+xDo\*[Rڻw NZٳgOzI.466t:Ç?㗒ʹi֣IENDB`PK [T@E, , res/drawable-ldpi/balloons2.pngPNG  IHDR$$ IDATX͘{Qǿ3kwz]QԉqcL!F@H"5jC-!RūR6Eq[)PU!D4(q}93QQ #939stfLL6'=J~9LDr&^Y=Z>gZ3$eD|!i,}z@;#r,=fgls cU=owS^p0J 蕟rOqb1晾Zy}ɟ}9}G@,Ԫ6խdNu$G(S>|O^w^|ʹm.)7G/n [EQ~{=Y~2U r;'TvO/ɯ>{7v\Wozm .c,MkX 6Mkַrg7Eʼ7c{0BrsO[o)=Z%gѤo^q=Vl1 Hh_Xכ=P6+x-v;}cŝoT5h_/ƶ9LzgT~A7%SgbzAcM":nmfRu=Q V0%C!tojtjCܴ7G~y@zЗ#C*K-s aI\Rm z xKոϜh V2q)kG8Y-/7vz%ϵk,59๫TZoY"銩$ =Q5KLG>S@{J זI}V H3T+x<ΦI^ؑgesc\ m׋l7滯 ,5o k Of[JuBͺ<(tU@ϭw LgS0:O!bZh._ BRkYKG?DJl P`-*[6DT@FCU0 [LƦ9P",kQ)\̋B 'Ɨy5,lI(#e2+XUăԑ]V7|k@DEdJ!V@ʴcPP E&̉u3Q:J 6  SRT$J :P!A]-j^4FӪ 2S0=kzK7rH= ^lZZe >-02Q)@ @;E@!(CDhL4,'U"qh,C -W N akPwDls+Il6ȊS&΃S$FZq4U25@JXCRH.zH3kFgF]UfJQ"a!%D" * b$ H* @7}/@9p [ DkluF0 1Y63 &FH@RS!%5,!gqΨ/85߯k}8tƝ҅cmDqV)Z" 2e(PdA2w OօF.'q{<ַM7Q}M6ՄfLd{|2aIn/yvm3 "Ta愈"k:./n{?ZIENDB`PK [T@res/drawable-ldpi/icon.pngPNG  IHDR$$IDATX]l缯_N]'Mh_dRcLc$&@j+ФiҘ& &.m_TvBl4Vjc@a#m$TNj;_~"NdTHl?9C^]p PwC?~[}M.= b෇=0Pk o& ,SOst)IR?4~vGJ@%`iMl {)rcP6}8@΍_],gJKh$vu-l(RdSf߲9|Hk6@ZDdIOcXkƐ\4CJ϶~.V2Q*Ilk 3et`B5355E"nvh页Rx*KS:p%0\0 nՀ=ZS{*ƹQ%Togw<9CT"L.j9(\26IDw7FgdZKNj 2Z '&tOd 1[!C"$[s4S#l߅?2Z3Z9бGWpşרvwS G9S8RRaŐ;ٻ>QI~L̾SY&.b8ːeCǞ(s} bW%䖁G(GS}'<Q.K%םVdYʲfI|N@|t&9v &O%%o4hi 4\}7qB C׾+q/u=HY>ȿH|ekPh k\[ƅ0g]hߐl$ܣMIWj{zq|Y%4R.-g|E\ =d5fͺ vl\3UP&UxޗqAoVeyz ͬzKws>2TLOw웿]AL\Ykuskڕ]&[4z8OIJ.}ȡ3M\7*f/NrNMq{vvW;Q iq |y/>p7kOv ?_{9̮[|1yE`, CJZVv|0n1~˾ F_n, >^n$+WL*EF aЊfC6tJ8g ‚ n}|ffB/v7znԌq,E0F8EdA>q3Mg^9bL[4Zלɬ>kcԹduGPm ձAF5H/E4eKb_Ohҕ߷Del! Q׌Q_8|`C/_#U?c<*5f^;7'޻o6+){Fpզs A0 bA2s A BBH@@OZ3׻ wXd)[VV2GBA:<1ԊBlQFd f ɨ-sIrv`"#syM!1J#%tZ%ڼ@Y,9!!epOvƠ1 P1;2 B P`8bh KcM%22H2$i( ӓbi!ShbUQa5$X [a A^}%u([q]>[S# tc.0jbiBȂёVnBv*Ҹ&;P5E,PVb&!J0vg]P8Hճ1:+Jw AMҌ(.)-5D&$ IA+iyeRlU"2e;S  2-H HɬHsI#wq;nݺBN',..>?kY7$+/vϞ=?\֌Nz/4 TIENDB`PK [T@` KKres/drawable-mdpi/balloons.pngPNG  IHDR00WIDATh͚{_UuǿkWnr̓!`J(FBCрL[Ǝ2RK83NG;ch|T 8hjZ "!ɽ{{?nFL;9{笵{Ė^τKl5sɘ%D ( yBcѹ"wޛ,yM?2y4J0`PdUQ>!1ބ*욿'g%O؀Y&)W]tcg}1[ ɵ G_X2)Lke\GH{pp>={zln֝vN o޴&qa iJmv6s mˮo,.ڜ8.XX$\<ޑs.땿d*hj< uPzL{ Ebߎ=eSqn|)#4hr֊50]b! Sym#DzNKa;Gl,5ۇsf8UtyJBPvw;TF׼%=6=P>=C_q/X2nf¤i6X4XX )Pa3x!y}_q3|ﲆ[9J{[V]>zulZ!SHǗ ѬY4e͞`a&XLL0>l`mʍV=g\ANmI҆N'KVS%KbH:~oғێ^]1%t ?tj9e&4]:tz9aT@Nfcа}A~+fKCbL- XwXL;O[b*5 FM&\(NkEˆYa.ln5zO|RݹcǛns#-M֤xQdXڳsa8Q8QP F:va,ᜪ jcEP\ht$XLNG?<` oj|F5*r"eۅ_ `0x]SQEQI@A&jpG`ADEOLDZC @yRpQi,%*TA`15Re&պV.p|ZE F&AT ᠉3vJ̉oeY~@T`5+4F! JBjg"E%ʖ5ea1R-IҕOED brP g*1~Ex:> RU@T%^uZQ*gUQmT1Dy0HUUWXL $г$ ) jG4t@P/ʆFe5ʆP3$F@ <5P`a$SqTs98& [jICU NT'TPQEIRa քSfFTQ h(b"(u"j"v~xBy>E J6Mkj:-n7jkOֲmd0q QB]PY[A|i*!%#Fϔ4DSI R ĸ5Q`,0V؅ۮ[9γVVjD\OeP|=m uI1T !,ms7FHpJbc5Mc*/|rV"$%N$!qV5qbT >@lJ* اʀ]TN-'DjԈ `:_^Alk$90u k rbO/?vںΩ(bӘli2sCdPdF( uUR"i8XjHej1HQ])_PQƁ5IŴ;yƨF0!%"51|@Yϣ\> F*tL*TaJxA,СJRQk35ɯ/ p_U!ADcT >TejQPݦ^M<ץR"6a8l;`#R_G"хu(|賈0Xcp韮3?Ky;(KH1bBkAYNcSo~bdZxƏWKGgW0a ߆}Y 3Prk.4W.uOjJUUQ]U^uw汰`m*-Sg8_.ci#yټ`FFJԡGS%IFau 58?mmSt(f'yiXUbYUEF,=K&^1VرծbKøױY"2Cقف D/#= s'%+ֆ9Y(*FUIx`r-¹^˟ヷX{9NÒ)$[ eo7\\[0pB*(I {_N?}`usL7gVwa9{3G)V}駝Yd?Mkq-o/G}9 RNw+pe0+zۣ\dwW|x[[nׯ_ǎ͑M?Zyp>neNh+{מN߰oMuLgk|U=>1:2;9_fM9x%O|xg6lPxo'Nݓk"-[|{9+_ܶm"2'IVe㎫ojӦMO5M믿>{Z;99 h4ve;hǎg0ܹMMMM}#yn:p=n_{UW=رc|ݺunz]eL{'o>﮻zeӇ=SF7o߾_e-[<ƣGʲvΝ:ξ袋+_z,ݸq㮡GgffnK>tsll{nݼyc=ytt' \ʕ+6lׯ/&l[gHIENDB`PK [T@ 8;;res/drawable-mdpi/balloons2.pngPNG  IHDR00WIDATheUuǿkϏ1Gaa@,A[iZĦ1jZ돤bi"R,MJLLQk(޻{9@ehq''u~vk-J_iI߻,vdͩd<$Ql捓lU䍴nfK7a!?ޓpI/~d2g[ǧMk$w߾=$.{֙,V{46֌'36>FZx]\.xmS/?媼Moj2kQl`6h(7) ?mhO.|U􆆳Us|jjG Ni' Y)v?(,.umTo՛|}qz^4Fjq[׹]Tw<`U{tyFjdMv6gvLTTJYfqz[DZ誎z,iɝ΍m k&Hbvj1aZؔr "xjˇ́[kp^sϿ4}樻曉=z+vll"[dlӼ4OLhK3~|I<誖kjIq=;e[vJ\qfTI$֔[t!i`.ia!KcZVCBѠ*^ YLچmh9t^~a}ܸӜ|nFө)r64E%YF*52z`˹k+C +EO6V4Ҙ%87E4M:XMf% ?^ZzsOO<⹝Ii$x#Ąm4ŶZHf79$fM&sV[a}:Ta?Y[1ǯ:S"|Ćb21 r`%h;&KP#8k&u~© S1CKL5xiـQjq:4sQm{DVbۭxڷZ[yB+M@3 8)ʱ`CCA8ؿU4=8DfMDMTcyov i @ hWTW+ Cz+8/]:e'W>z9!m1kI5z& 8,DʞJ*D9ր f ؇]ԁbazĒB   /[n# X#TvZ]#S&*hH<a@Xb FyѺZuދJ#j!KvVd7/@($*!K>_^-+Sf(Zx2( 1C2馻Q#%B@ # 4FPPJuCQh4'Jt^'AmOZZmQ{WXl)N̺qcmF"R{nh*Ro=}š.BZ$FVQ#Fٻ`N']]/|iGnIBP[փcn$,Bi^aVQam)kȕJ],\m|N*u/m5E,8 R>t$GLD_f@.!2iQ٦0$!BQPoJ{(%0+'EZbِӄCm NOӰ*Wj%< I=ZM,{Vm<>IJV}i+Ib(BTHeP#PQ+װ>GjAh0k0DU3 %F&  ]'c4`'p^cBD!ߪ(LzTv{j`2y_x_8[Yu;4}i2X f.E3uM3|-c|u a.?5ŪѠ_vI] eICVy޼vLJ;ĪR_Tq9Xo;C?ͪOWyF$m 1x ~/ţ{sw DĨ*B2]'oaz㉫Ke%7/m>mۖnec^Â^r)pPC@{4=x}/ԽnNq¯|7{;Z7sm?č?O9N޽{wZV?ss!ܹ[oMǟo 'gffhnn$I.ڶm[6MNN.<];=x`:==f޽{4;;y.ٱcǽ{ ;w\w}3ϼGܲee ={|G?DT߿_$j̼SO?!f4MgJU_a^'[aIENDB`PK [T@ res/drawable-mdpi/icon.pngPNG  IHDR00W_IDAThYl~x3ر%6IX)KXЪT(U[T҆j j@QU(]"Ry %iB 'Ż3=}ώ/f={-Rso̖1hjr&a.0nb@[4h na[OZ z~,hqG}pa xPY ľˏ>Ь[/P>9` (NtbmkmcYU*{zvg ,OkK%G2 #>Zik@R`@HE>OkRq ?קZc `Xz.o," B VJe(i;߹}_`YÍ4DVbOXK6cc R.k `ٺ!D/e$@Ww|z^=sF=|fDC99˛%qi6Mf)/7"o"XO@_h/*in#"XcioSOVES.mYц5H;\gF`iw sh[t%N=ޅEMl]u<[ʎljcqt ~W?GHG~ŃAPOv!EgQU&V@;t>yuƘQq8t{\s՗``2꙳Bh#Ϯ8=St pkh#UofU->CCCh<@Ƙl^=8?\@(g=d.B (zEBƘ!Okt3 HW?:}7 @@HV)IAOqglZ~~G&5ho#ȴn@ptmIaD |ΒaH}v4aRc\ o|+DLj.JMU#X&#kl۰C4w؉]9:WLC1RdCvZb0b1\Rw#)'/LMC}rE9ˬJBC:CHG(λVx&˺%cC-:=ANui?XU+Ȋ.V:ıAcpTM_a;wq=%>ᝁljujU~IWJpx8NZ#6V34NעM+$m~=n`,Ԇ V0QWk~R./|t%tC}`/ۄ(kx o VL8@Kt#7'vwUΪ6Je+;{ǜVhE[ٝx jtlCpOjb5 _bS88Tt帒A|ok}!Φ^cY6̟( &tѠFs7#N>SaRoqBTc\a0>JJljseXd,\ٙLuVQ"bX߼-(N .W`LxY Iq7o`umP:'[vBRU: ?ppggg}]Q;bElsh 46a Stƀ+ ̪cyI  cJS,(M.j 0OiN9(6Szcdd0NV,P H$X=IENDB`PK[T@$A classes.dex} |Tյyd2I&@! !!HH 8dd$$3AAثUz*UjVj-kmjkm|ə$Xn~g^{I$艹y6Mm߰^m/WgGn$Q'O]o(CAo5v# Dl'J_F"*A`<0 ` 6ۀ^`4Y(p?8]߁sJiL`p.pp9p9(598K@jR`P4ˀ`Xl"v $.2`/p%p p8<| x6}G{@~ a, %-=ׁ׀DˁMkw7GT ,|xw>`'p/mM w=T~ 6?nl$w`&n>=vW|>k#h"P\\ p\Ht&P C'" {#sk߁y`nh#Jj#7(m܆k(/Nxx-0,B@ \ \\ ~7 &.gCbh/R`,0Lgs@HWn> << 80/:ʀ*` :>*Y~a q%5_7l &Ӏ`# UavN^aIy+o?'o'"pP `p5i8}g[Ih2P@7 x6c%[ʼn, T@ ڀ^`\ ( "sm$P km@\ |xxx fTjV"*0_O_ z1`66q`?) c>\ PLF l1  |p*6>`&H`40 V`-ہ^`p9I3]G'o?~[}LaQ@%P +M@p px6 Pʁ3i,`7;`<0Xq8> <<< xxpgӀZXlb0p/4##Vj`  _/bQ!0X\\ < < x xp g Ā`'ppp+i(p oKh V.7_ p]Uthp p9p5pp%In$Mf\BpK ׁ.K@ [9a&l핰P¶IIoM=)isH07Œ',Sr!;AM E;_vi&4..v{>`?p%pp8\ \\ vq8L 8 | 76́wwG 'E>~%A󁇁G/_ | x x/IS7oρW׀?987>`>oj:< aS0 Np->h FVohUg6,an"zPYU2Zy: yLanjf.ߧgB-c !V4zYˌ;Ѷr*4 P ppBlp͟bkMf 3ya]qj3wʻB]L*O1 zFP\۹\yH[6h:<~ʻA r6٤iae:\BËt9ta]&=pM>d _ÛuΥa[;|߮Ku8l]|yn+s.sHmZ&iIi?iat/:Bo:|+]]!?f ?I~q2J~~f}6utͩޕ2+ Upu- Ckl2Kl P m=w)[R[xնq8l+MV[oƿ&]:̶­T{N3f W🳅d ~굶Kuenvr嚞g XIMiSNt S0MXfI:j$m&MNt4=}ͤW)ׁU^jM[5]JMWi%M~)tgit&460NlMߓt}_(d}1P0D}_:^m~ jZ&`["m4NNK:C+]b.lnhWf ]w)V4O\L7|*Le4Fw#\t MoQDWi Pˤ^t }O4`@Z u_&iM(zP`")3 IJh>tl%-3$ SJh{w>K-tўzIM:,<^RAKjЧ%sZN忊^P7#0o%`z%OIiQ)7RFjZLgN_K_LϧՒ/( F4@&/SrLzHh:4Z0s . LKqt/D?)4ru&Fz^7P3䪵\[l( Nj4I> ˷Fxg%k$Uz7%{$KIZNKr6,#^KOl^C.CJz5yu 4-4N+%N59*Fj:OZM4M }t5ݨM/7؞T?H;w])Ig$HzLPs>5*Li}uRi7=Υۄ_>ʷ'oEsbo1nvM.%P}rݕt.vMoη+|-8}(63T|lx6ŴWzWf![Ih U9K)Dkkz3J?<_C$=Γtm|vPr˰[oy͑Y ~5OȑT٥&\%ݭRIEWiZh.z\c1 ..G94]%?Yko|)Bfݿf]n3]I''LRU˭qUz:s$oR ̧ӹ3mT)w.!x&k0?)=.H'] ˷_钮C?ϐ Rl:wX*~N3_`+&eI&,'W.2uR62I:Oc,Xe<|T-lWu!v͂ϗ I$X'aϙ&!*Vh2׆na8Ϩw6#i;Fv{I?HRKIknj~E|Pp;1Ҋ^!COy`GLg;[գ +IG >&J/4*./rI| *ʗt{hgY>3+(\Cռ _kz⚁B]|E?ä%LJHju68݇k^>ר{Hר;鋐^QwtW!}۵v–>HMHu_NiΉҵwT|EJoTo4whN=Դ7\nCw:Hݝ=Ljۯӗ J-OM:}gj9'σ75mͶ|~N޷t-/;m~[xAUaMMeMGVtntqMK*dKpo<5 f"Kս/0=(􈗊Z#/nul9-|.%y5S9}Bۼ^ߗp."=z8Pyd<8ADp<-z3x;B#ό,`xF]GI.) ë3WTVS}cfiXv{'BcYZsi٪*ӑ #;!4\+0n.ѳ|y./1yN!Xb9y x4rplyS"#"}gE^@sH=7 mpKn=GYg#wdF[=%sKF@Ii|y/B[%9w\C\Og1tfON>@ O DK-(/hgO}*)̍UO5/Yzz:zuA~D^;G;6!\$F"ԋ{+h{P8ЃRA)zP3\f)y{1"sֈUnm s`DM-j`_ZiZe7xލ2WGὪf*he6bnIҭNSܲ["%oJVZMٍ'8˝=r8<[2ro>EUNq9E`wxOrR 9G}C0>u.a4F}Ww;e M@\GhBy:]wDe|?Tf#jPs IO^QͷNz \2/Q::0jaq%^flJg+* \T7b{ϟ; 91`\Q7fs\5A?㒸%${97PC7\DިM?טT)|/{NŤ}Kvj ǓWaqf{֞z2W0<~J+FEnٳQF*_=;kْ89O8d-S[ShP化Ȼ0xϣ25g׏&[`VkNgZ[7{J Ki%s}J~{ǩV}x|প.ʝsHEqvU!\G]ߢXoGpΕL9wWHG;U=3ُQ/"/P]//9xD|ɞ/WzM^5xMeU3 _LC)i3>JZxd<$Ɋ3Mާ}> 6[J#r[}W{Djuf ~yĢqt}QQҋ)CɽӼhz'UwRw?=Փwˍ8vޣ~ *Y+EOpYBsǁ]uDh5bQ A,ı7fzSAz,QO֏b8[I9#rbxKաWcxeLKBCަ}@}lHl'{P{Y8_ZFl\xGUt8 d{N к^p@WO a)#wj eͤeӾd uw4cx~Ƽ zlBhrgȜe>}{[/׍v/1Xl_=lкtY&gJ_z { v?[S/̖O3zXYQOsQ-¥}(ol]#Yw?j\Z=Wsg*j6'ŋ)z}%e ̋ϧŰ?X`*R 8obmۣ 4#J#u,4zp"ӕ-UkHCBp7d K-UD;bۧ4mIpZ5v8Iovml #&QVɡDNdNO{U L쐜n|;y1NX\T}ґDxgx+޳N3G,RKSOS3/k{:W!=-ZsZ+mNʘs<]ݑhgڐR" tLeԵtiKF;bqNRi$ ~}rf;Z0s9oiSӐsD--9k‰]y9 Ok/ :a-U 0ak}JgOaS nr:P×v~wWO8*[쐷+Ć*{R< wڡ\=Rofg紆SqVtkXvFl ʭEyV2uEm9RDpmOQmKmۦ<)N?f+)}/8Ԗ4٣Z*PINMb?Iť݉.܀*H6ږ& \D"}gٰln 6;AUJɰAI8=, ';Z=-%3 :gOjŷG#O}AVR2<58uڹ*TyAf  \JQʖocc߈΂=ñ&Q6~y_W]c-ͨƨ j/-xE/ kS/ 5T q܎dPɡF&xKu94eڜN 'íñՀXۨ7tgAfTsfV=FeG >9`@8Պ L93JwZ/ L4XWK/Ty(w%|ŐXGƺy@yFgH,oa!uj\':ysN*6 mC dlhPΆ@SndeSh0S3[br`ޚܰt'vۓC>EdwE3Ю(yudK21̷iXI_H| dEK]\rzn٩P0[m3"W8ޝ@Z9y_;ӣDBdxR oQ7Irm wvvqr@rҡ'7}FέJzqI_ùUd; r)mCjȏxgM09NQ HqhT"G[g⋙DQ[$'vǣ$(sE_GAhSp_W\ꀳ+bQvnAUf: X<EmٯTf3_Mb(9oli<(x[0"F2[mBųmhd5őV0V⺸ѝ+R754R3]ɒ}F+a qAqk3ĔW૞ +uYk6E o#I^$eQfXjXj~V4*ܑ5]ܰp_Vvz^ OMX1J͍w0JUX3Kg3ҳ U{DQZxgTj"wX!޾p'6>ȑs[,Kv*ےh<ΐ/07É|*[QaW_3g!rNxU&SLOLS4OiP㙫vv';9PAsiLF{(uŬrMJ [kw|rUļxDݣ;3%Q>}qiWfDrXXbN9,㓧@)9cB.JO h4c|~OQLr,S6CWRonnr6\y;H_'N:7L%1~~Kt:/L$/#ZϠ=}=۪S!Uۂo w3F?k:x,\?X2<5tZSFjG(HܨTWeӶB5_vth 1vMա__|G''’kab9m)Gyv <'  KIȦ?Dv#ޚzX.OXoR:bl7[Q).f#s>l>/N:Fr9 Pŕ;=9:Sp96r8j]ԝ-5kTaQTgx;Bxi-$?7bant}Ӵ]11ʻ({-);UJѩRʏYt1.2;MGpW2^ٍgc"5ZG.Xp9=k'+1u\J.%]ȯd!)q.)F?g٤3bl͘[KCq&*0)ʥ''r؋+A?9Y=u1MǏ"~c4?ʥ N:N`G GrrұrBJɵU( 3@nQT|T4@v Gq!4FwxL ~,TqPG5L:Z,aR[-5Qqgd?e U; av`Z'k8[LS^aV3ۚM됣[w5PͦlU/@nYP'F;4?x0z@ #/8}P%|){͟Nju@8G>rP%!I2];:6-0Yr=mĞ+338il5Fe\4#ϱ]1@2~jn|[4;(Xk;H75lwV?M=.#:\1˱{\s:2pY]ꌂ 'SKQU+Tx&a+Seh#qa= X:v~VlMV\Jay7V~%^`9k&_uƈEF,wDB~/pL [Q T&0} MP@!56Ώ;(#B tr_Gu.>2jL a1Xm>rpr[Ktj0VV\/[}z=p{#4{M˺:?1 &=`l%BO5/-Q*bY2[=c Y{t8PӴ 0NS8l塓;dq%7gRn#7|u4>c6P@4V,eKyҚQa4Udx U9au P2yk5L F ,#̵y<¿L?0^/*Fg#>~~KKJMD5' lssvbN/=cTϱCM3MW'z!o≍B ^C9ӽL7Q}D\8CmBobOota8f`>)1~>; x2Eس][if^N؉@Fx8|Urb@B^>^Q8#<^aO9o;.XRw%,{%"1 "8p2āC#~9}C!G p_儗 y;c<585`<ÏGŚ78C:qHO`O"4?> 8~t2/pLaa/?A1b/_Ut.RaQxFlw$^ACnB7q-xGo/߄_Ͽ?USQ~+d:6BR0vgS r§WzOo]&ro6ߝ?ߡ1v? PK$APK[T@,atMETA-INF/MANIFEST.MFɎ@&Ǚ+X g=ԗ3]#r?{73hpޏYdv^sʴ\',8r-ng'Ά>=t9ZNJFXV"63/u\DAf0aCt+,_F &cU/hD?> AAvD,m4?^݂N$DP,] por.ߤT^gEye'0/wĸ~Ggf}t3}0'sWҋj|CO~>>Мa$SQ<'*C-7^RNr $:[%Qj_5NѪŪH92|8uVkɪ[pfM?j1khY7]F \BZ5 \ & %uD < ͷ[ q>+6K6<)?+_ uG{Lll RGbEz| gEvXq}Ib 2C0XŐ 'W~F0bpn,K;&pR:l4&ѨEQ@ .P')f<EIB2-%D niiM"foY[C_@~wKqU:pko5^wK˺yW xˮ5INU ,Xx=>'~eEŢ9kviscn7 NAl>|E7Q6S^^xw֭b*Wǝ+<{(F-0&L+E'j:U\oWgly[bNOՂ:M(SV^{jngU֙`IOW2/+%$vey6H^\r~g*2rSi\q}Ӝ 8e_l ά~gI&A2~<-jRviӆoe<3˳g uof7կV}40kAuߒYRK/_kC}:95$@T!kK`[dSwV._fa\`* ̄eNмQ0K#Cvm~s.hzkwymf*P'ρؾuS쌛>:>#\ ߃/$]5pD藌8?}ϼA|q+Vw__}.kX4rKnM 3;z>~9;\0[.X\^TY`GNG'4"SnYl2n3&Zq1I彻׊&Ξf˧6qS&yE"E{UE&mPK z7#5PK[T@9mres/layout/main.xmlPK[T@3_\)res/layout/menu.xmlPK[T@"{#` gres/layout/preferences.xmlPK[T@ŕO6 AndroidManifest.xmlPK [T@kf}ٴI resources.arscPK [T@PFGG,res/drawable-hdpi/balloon.pngPK [T@fQ@.res/drawable-hdpi/balloons.pngPK [T@^ SWWNres/drawable-hdpi/balloons2.pngPK [T@kW<~~Glres/drawable-hdpi/icon.pngPK [T@Ş{res/drawable-ldpi/balloon.pngPK [T@ 7res/drawable-ldpi/balloons.pngPK [T@E, , =res/drawable-ldpi/balloons2.pngPK [T@res/drawable-ldpi/icon.pngPK [T@Tres/drawable-mdpi/balloon.pngPK [T@` KKres/drawable-mdpi/balloons.pngPK [T@ 8;;res/drawable-mdpi/balloons2.pngPK [T@ res/drawable-mdpi/icon.pngPK[T@$A classes.dexPK[T@,atMETA-INF/MANIFEST.MFPK[T@D{META-INF/CERT.SFPK[T@ z7#5IMETA-INF/CERT.RSAPKbackupchecker-1.7/functional-tests/generate-apk-conf-files/generate-apk-conf-files.conf000066400000000000000000000006301251036066300313010ustar00rootroot00000000000000[main] name=generate-apk-conf-files type=archive path=/home/chaica/progra/python/brebis/functional-tests/generate-apk-conf-files/generate-apk-conf-files.apk files_list=/home/chaica/progra/python/brebis/functional-tests/generate-apk-conf-files/generate-apk-conf-files.list sha512=01b1c4629ada26fc37a0b7d597fc0fdade920b820f489b3773a3c0d5890c50f6ba2bdf89dd14182d19b859fd54632c1d26ac0bc1e9fec430b9da0b7be038bd80 backupchecker-1.7/functional-tests/generate-conf-and-file-list-bz2/000077500000000000000000000000001251036066300253155ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-bz2/conf.conf.bck000066400000000000000000000004441251036066300276510ustar00rootroot00000000000000[main] name=generate-conf-and-file-list-bz2 type=archive path=PATH/generate-conf-and-file-list-bz2.bz2 files_list=PATH/generate-conf-and-file-list-bz2.list sha512=1ea3b8b4fa9a898c5f97f59c9bbb52efb12e47d52860ffd351d7781d19715c9e8fbf1f12cbf90b6e256dda3ee3709b663f87f3b0e2d2f9b83cbde672c16cfd96 generate-conf-and-file-list-bz2.bz2000066400000000000000000000001241251036066300335100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-bz2BZh91AY&SYLр@/ Hj&cjSɡ$_4].z%gB>tܑN$=backupchecker-1.7/functional-tests/generate-conf-and-file-list-bz2/list.list000066400000000000000000000001251251036066300271630ustar00rootroot00000000000000[files] generate-conf-and-file-list-bz2| type|f md5|57548eb7bb0487af841ffd586e525080 backupchecker-1.7/functional-tests/generate-conf-and-file-list-gz/000077500000000000000000000000001251036066300252405ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-gz/conf.conf.bck000066400000000000000000000002301251036066300275650ustar00rootroot00000000000000[main] name=generate-conf-and-file-list-gz type=archive path=PATH/generate-conf-and-file-list-gz.gz files_list=PATH/generate-conf-and-file-list-gz.list backupchecker-1.7/functional-tests/generate-conf-and-file-list-gz/generate-conf-and-file-list-gz.gz000066400000000000000000000001461251036066300333640ustar00rootroot00000000000000mf\Rgenerate-conf-and-file-list-gz% NqjA*hNJWaa xjе-A ].\_@backupchecker-1.7/functional-tests/generate-conf-and-file-list-gz/list.list000066400000000000000000000001301251036066300271020ustar00rootroot00000000000000[files] generate-conf-and-file-list-gz| =64 type|f md5|57548eb7bb0487af841ffd586e525080 backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-bz2/000077500000000000000000000000001251036066300261015ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-bz2/conf.conf.bck000066400000000000000000000002541251036066300304340ustar00rootroot00000000000000[main] name=generate-conf-and-file-list-tar-bz2 type=archive path=PATH/generate-conf-and-file-list-tar-bz2.tar.bz2 files_list=PATH/generate-conf-and-file-list-tar-bz2.list generate-conf-and-file-list-tar-bz2.tar.bz2000066400000000000000000000004201251036066300356440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-bz2BZh91AY&SY}e}@oH0d F2i2hd`F !dh4d\U4rTsPc"8p K $wH{ A=WD{|rΜ\lr-KU\T # gJV5vGJAE"Ldwh Ǩ{ǸQhrϸ1v n:?h :X5cA?ܑN$fxkbackupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-bz2/list.list000066400000000000000000000014621251036066300277540ustar00rootroot00000000000000[files] generate-conf-and-file-list| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1377641822.0 generate-conf-and-file-list/toto| =5 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1377641403.0 md5|ebd7385edfbbb36cd3a7a5dffb134b98 generate-conf-and-file-list/foo| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1381589346.0 generate-conf-and-file-list/foo/tata| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1381589346.0 md5|d41d8cd98f00b204e9800998ecf8427e generate-conf-and-file-list/foo2| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1381589388.0 generate-conf-and-file-list/foo2/titi| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1381589388.0 md5|d41d8cd98f00b204e9800998ecf8427e backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-gz/000077500000000000000000000000001251036066300260245ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-gz/conf.conf.bck000066400000000000000000000002501251036066300303530ustar00rootroot00000000000000[main] name=generate-conf-and-file-list-tar-gz type=archive path=PATH/generate-conf-and-file-list-tar-gz.tar.gz files_list=PATH/generate-conf-and-file-list-tar-gz.list generate-conf-and-file-list-tar-gz.tar.gz000066400000000000000000000004011251036066300354340ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-gzaYRъ0 oBtz9Ay*e&z:-AFkw d\b :?G9pܓSCg6 剢Dx' =V͖(z(+9|_`BY?UprIsE_vsgQ$ `qTr$H61i+PgYZbackupchecker-1.7/functional-tests/generate-conf-and-file-list-tar-xz/list.list000066400000000000000000000014621251036066300277200ustar00rootroot00000000000000[files] generate-conf-and-file-list| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1377641822.0 generate-conf-and-file-list/toto| =5 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1377641403.0 md5|ebd7385edfbbb36cd3a7a5dffb134b98 generate-conf-and-file-list/foo| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1381589346.0 generate-conf-and-file-list/foo/tata| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1381589346.0 md5|d41d8cd98f00b204e9800998ecf8427e generate-conf-and-file-list/foo2| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1381589388.0 generate-conf-and-file-list/foo2/titi| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1381589388.0 md5|d41d8cd98f00b204e9800998ecf8427e backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar/000077500000000000000000000000001251036066300254065ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tar/conf.conf.bck000066400000000000000000000002341251036066300277370ustar00rootroot00000000000000[main] name=generate-conf-and-file-list-tar type=archive path=PATH/generate-conf-and-file-list-tar.tar files_list=PATH/generate-conf-and-file-list-tar.list generate-conf-and-file-list-tar.tar000066400000000000000000000240001251036066300337620ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-targenerate-conf-and-file-list/0000755000175000017500000000000012207222536015424 5ustar chaicachaicagenerate-conf-and-file-list/toto0000644000175000017500000000000512207221673016330 0ustar chaicachaicahihi generate-conf-and-file-list/foo/0000755000175000017500000000000012226260542016207 5ustar chaicachaicagenerate-conf-and-file-list/foo/tata0000644000175000017500000000000012226260542017051 0ustar chaicachaicagenerate-conf-and-file-list/foo2/0000755000175000017500000000000012226260614016271 5ustar chaicachaicagenerate-conf-and-file-list/foo2/titi0000644000175000017500000000000012226260614017153 0ustar chaicachaicabackupchecker-1.7/functional-tests/generate-conf-and-file-list-tar/list.list000066400000000000000000000014621251036066300272610ustar00rootroot00000000000000[files] generate-conf-and-file-list| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1377641822.0 generate-conf-and-file-list/toto| =5 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1377641403.0 md5|ebd7385edfbbb36cd3a7a5dffb134b98 generate-conf-and-file-list/foo| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1381589346.0 generate-conf-and-file-list/foo/tata| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1381589346.0 md5|d41d8cd98f00b204e9800998ecf8427e generate-conf-and-file-list/foo2| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|755 type|d mtime|1381589388.0 generate-conf-and-file-list/foo2/titi| =0 uid|1000 gid|1000 owner|chaica group|chaica mode|644 type|f mtime|1381589388.0 md5|d41d8cd98f00b204e9800998ecf8427e backupchecker-1.7/functional-tests/generate-conf-and-file-list-tree/000077500000000000000000000000001251036066300255575ustar00rootroot00000000000000000077500000000000000000000000001251036066300336005ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-tree000077500000000000000000000000001251036066300343635ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-tree/footata000066400000000000000000000000001251036066300352250ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-tree/foo000077500000000000000000000000001251036066300344455ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-tree/foo2titi000066400000000000000000000000001251036066300353270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-tree/foo2toto000066400000000000000000000000051251036066300345030ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-tree/generate-conf-and-file-list-treehihi backupchecker-1.7/functional-tests/generate-conf-and-file-list-xz/000077500000000000000000000000001251036066300252615ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-conf-and-file-list-xz/conf.conf.bck000066400000000000000000000004401251036066300276110ustar00rootroot00000000000000[main] name=generate-conf-and-file-list-xz type=archive path=PATH/generate-conf-and-file-list-xz.xz files_list=PATH/generate-conf-and-file-list-xz.list sha512=7955fe83a3f069c15f3704823eabb5f5c3bf0917702d871a9ca17952fdbd14522edbf1ae86f33b97c5623af212e23426102f0f2be3b8e8956a1ee57ff6f940e6 backupchecker-1.7/functional-tests/generate-conf-and-file-list-xz/generate-conf-and-file-list-xz.xz000066400000000000000000000001641251036066300334470ustar00rootroot000000000000007zXZִF!t/?8]4@FqPjk)#jVȆX3w+}8BX:¦uP!T@l}YZbackupchecker-1.7/functional-tests/generate-conf-and-file-list-xz/list.list000066400000000000000000000001241251036066300271260ustar00rootroot00000000000000[files] generate-conf-and-file-list-xz| type|f md5|57548eb7bb0487af841ffd586e525080 backupchecker-1.7/functional-tests/generate-full-conf-output-option-with-stream-tar-gz/000077500000000000000000000000001251036066300314445ustar00rootroot00000000000000generate-full-conf-output-option-with-stream-tar-gz.tar.gz000066400000000000000000000002631251036066300445020ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-full-conf-output-option-with-stream-tar-gzAuTK 0@ь]Ev`^[O,:*:"3 $<ݔyzq!Z{"}ݱSN֪ӮM|!hBٗ'\oX9ppn8Myyrߍշg (backupchecker-1.7/functional-tests/generate-list-and-parse-bzip2-archive/000077500000000000000000000000001251036066300265355ustar00rootroot00000000000000generate-list-and-parse-bzip2-archive.bz2000066400000000000000000000001711251036066300361520ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-bzip2-archiveBZh91AY&SYUn_`@?ܰ r)@j' F{Enk˄e[`H!6Բb1#yLePAѺP&gwO"(H*7generate-list-and-parse-bzip2-archive.conf000066400000000000000000000002531251036066300364030ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-bzip2-archive[main] name=generate-list-and-parse-bzip2-archive.conf type=archive path=generate-list-and-parse-bzip2-archive.bz2 files_list=generate-list-and-parse-bzip2-archive.list backupchecker-1.7/functional-tests/generate-list-and-parse-gzip-archive/000077500000000000000000000000001251036066300264605ustar00rootroot00000000000000generate-list-and-parse-gzip-archive.conf000066400000000000000000000002421251036066300362470ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-gzip-archive[main] name=generate-list-and-parse-gzip-archive type=archive path=generate-list-and-parse-gzip-archive.gz files_list=generate-list-and-parse-gzip-archive.list generate-list-and-parse-gzip-archive.gz000066400000000000000000000031001251036066300357360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-gzip-archiveNgenerate-list-from-gzip-archiveWmo6_q+4l/qMn0( J"%’(T(rtKˇX"Ow{a!;H,뾁 ;hWPhi-(Q{ |ipC%-A&T7 ~)pRەgyrc𵍣7hHMtZ ΠEE[hןQꩥ (]Jc3iӃpE?zeBB"m@Ztty0$е\Ҋ(c) e1=(jwjJ ; @ôVpmD^ZC?E5T]5lz[y#lZ[ōλsyuL&ϕ1.}}*Ei{Fۃ'x !]> x@/ePvSϿ{i$!b>``jj|`Pga0or½n&=o%XJ-d,EX:fHσ=f;xLbUȲH)[49ʈ4 )E]XLiN|JWAt&'8?(ľm"J6'ѽLj? ?ZP6׋CVI(Q&>|x"ʠ \Q yOb9W,MWrqTWL.Wj^/*[)F |e/fj^.-gFh]@kz\򰶢DXJp/[oVWRJ]2U2Y˹R=_UaCC{'Kcư cmL*]cwԪƪy-3H0yԪӗD~J[QbE"35$)pgFD m'ľvVMd.7hm&ҋ陜=y5㬛|&1 獞ibbIaZ(?"%V"[ct6W "/wu׋ex=UIXIéEZ*B@UqGʜ:s *f=u"6V4`T [d3H }@('ױ(zKYn@1_8Se^n*1N)lâIO!ᷤ)X{t}Eq83ξjF\y'S)ϭ韤 nBYZ;&zSazDJK:-qG3nԺr$Fd9 7#IѧG 0=m4̤SEH}鑯M8Q6q 1*σVKV?5O3ma_l ||G'6;]On_|]nոg%eyj3F C(backupchecker-1.7/functional-tests/generate-list-and-parse-tbz-archive/000077500000000000000000000000001251036066300263065ustar00rootroot00000000000000generate-list-and-parse-tbz-archive.conf000066400000000000000000000002401251036066300357210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tbz-archive[main] name=generate-list-and-parse-tbz-archive type=archive path=generate-list-and-parse-tbz-archive.tbz files_list=generate-list-and-parse-tbz-archive.list generate-list-and-parse-tbz-archive.tbz000066400000000000000000000004401251036066300355750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tbz-archiveBZh91AY&SY|S@ 008ƍ!4h 4 0D4OiFi6SڦtnFfP#8_8e؃xY!| NrN)ۮz (3.YW?X%nIJ  dQ(b,\zRL!& ȵH0.,2A1y'H#a6'^=ǽG~7fI5&P=,zA7!p7FTJ㞺aU.p >backupchecker-1.7/functional-tests/generate-list-and-parse-tbz2-archive/000077500000000000000000000000001251036066300263705ustar00rootroot00000000000000generate-list-and-parse-tbz2-archive.conf000066400000000000000000000002441251036066300360710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tbz2-archive[main] name=generate-list-and-parse-tbz2-archive type=archive path=generate-list-and-parse-tbz2-archive.tbz2 files_list=generate-list-and-parse-tbz2-archive.list generate-list-and-parse-tbz2-archive.tbz2000066400000000000000000000005101251036066300360210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tbz2-archiveBZh91AY&SY_s {@0@0s[eMb05 I = h S4jSFdѡ3lD7b+G6Y[`;R$ETLi,Ē N>ˇ5₻Д)ZtL2I!n" a T&DPSUmO%aKaSŰba`bUWU[)K4CM|Rl|£78Ip9^=軀],e;jJ';bBhjf^. (3dEf:7Ѭuz ?ܑN$backupchecker-1.7/functional-tests/generate-list-and-parse-tgz-archive/000077500000000000000000000000001251036066300263135ustar00rootroot00000000000000generate-list-and-parse-tgz-archive.conf000066400000000000000000000002401251036066300357330ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tgz-archive[main] name=generate-list-and-parse-tgz-archive type=archive path=generate-list-and-parse-tgz-archive.tgz files_list=generate-list-and-parse-tgz-archive.list generate-list-and-parse-tgz-archive.tgz000066400000000000000000000004631251036066300356210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tgz-archiveRj0U&1דTbG /)b1x Q_;?gCs{vq,uoŶ$j]Fa5>~"BʼSIc7xwuϛ;Ou?XmtɿUl˟\ M(ނkoqk_Ft>vBs,k{4'?lJo/-@S&GwJØ|S cGOa}k*u/?`w~Z^^(backupchecker-1.7/functional-tests/generate-list-and-parse-tree/000077500000000000000000000000001251036066300250275ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree.conf000066400000000000000000000002031251036066300332410ustar00rootroot00000000000000[main] name=generate-list-and-parse-tree type=tree path=generate-list-and-parse-tree files_list=generate-list-and-parse-tree.list backupchecker-1.7/functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree/000077500000000000000000000000001251036066300323775ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree/bar/000077500000000000000000000000001251036066300331435ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree/bar/oof000066400000000000000000000000261251036066300336470ustar00rootroot00000000000000c'est ouf quand même backupchecker-1.7/functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree/bar/rab000066400000000000000000000000361251036066300336310ustar00rootroot00000000000000"rab" means ... ok, whatever. backupchecker-1.7/functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree/foo000066400000000000000000000000561251036066300331060ustar00rootroot00000000000000ok this is also a file. Interesting isn't it? backupchecker-1.7/functional-tests/generate-list-and-parse-tree/generate-list-and-parse-tree/hello000066400000000000000000000000261251036066300334230ustar00rootroot00000000000000hi this is a ... file backupchecker-1.7/functional-tests/generate-list-and-parse-xz-archive/000077500000000000000000000000001251036066300261505ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-xz-archive/a.out000066400000000000000000000000001251036066300271070ustar00rootroot00000000000000generate-list-and-parse-xz-archive-list000066400000000000000000000001271251036066300354560ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-xz-archive[files] generate-list-from-xz-archive| =82 type|f md5|6231c31c521b387ded89148d243785ce generate-list-and-parse-xz-archive.conf000066400000000000000000000002341251036066300354300ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-xz-archive[main] name=generate-list-and-parse-xz-archive type=archive path=generate-list-and-parse-xz-archive.xz files_list=generate-list-and-parse-xz-archive.list generate-list-and-parse-xz-archive.xz000066400000000000000000000002101251036066300351360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-xz-archive7zXZִF!t/QK]4K/]TYl¶W_}W;a.z _`I5 *"5-Bp_ɂۢP?;.s}Ֆ6}h|gRx_}YZbackupchecker-1.7/functional-tests/generate-list-and-parse-zip-archive/000077500000000000000000000000001251036066300263115ustar00rootroot00000000000000generate-list-and-parse-zip-archive.conf000066400000000000000000000002401251036066300357270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-zip-archive[main] name=generate-list-and-parse-zip-archive type=archive path=generate-list-and-parse-zip-archive.zip files_list=generate-list-and-parse-zip-archive.list generate-list-and-parse-zip-archive.zip000066400000000000000000000025771251036066300356230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-and-parse-zip-archivePK lV?generate-list-from-zip-archive/UT 甆NϪNux PK lV?l%%$generate-list-from-zip-archive/helloUT ߪNߪNux hey what's up man? How is your wife? PK mV?#generate-list-from-zip-archive/bar/UT N甆Nux PKmV?JHQ&generate-list-from-zip-archive/bar/rabUT NNux  0xa`I&`4no/GwXGCA'D5w4%*8Va-?PK lV?M 22&generate-list-from-zip-archive/bar/oofUT NNux you sure it's a really interesting file? I'm not. PK lV?D4"""generate-list-from-zip-archive/fooUT NNux this is a really interesting file PK lV?Agenerate-list-from-zip-archive/UT甆Nux PK lV?l%%$Ygenerate-list-from-zip-archive/helloUTߪNux PK mV?#Agenerate-list-from-zip-archive/bar/UTNux PKmV?JHQ&9generate-list-from-zip-archive/bar/rabUTNux PK lV?M 22&generate-list-from-zip-archive/bar/oofUTNux PK lV?D4"""sgenerate-list-from-zip-archive/fooUTNux PKxbackupchecker-1.7/functional-tests/generate-list-changing-default-separator/000077500000000000000000000000001251036066300274165ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/bzip2/000077500000000000000000000000001251036066300304445ustar00rootroot00000000000000generate-list-changing-default-separator-for-bzip2.bz2000066400000000000000000000000641251036066300425530ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/bzip2BZh91AY&SY, ,Q@"` !jM"3ܑN$ #generate-list-changing-default-separator-for-bzip2.conf000066400000000000000000000003231251036066300430010ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/bzip2[main] name=generate-list-changing-default-separator-for-bzip2 type=archive path=generate-list-changing-default-separator-for-bzip2.bz2 files_list=generate-list-changing-default-separator-for-bzip2.list backupchecker-1.7/functional-tests/generate-list-changing-default-separator/gzip/000077500000000000000000000000001251036066300303675ustar00rootroot00000000000000generate-list-changing-default-separator-for-gzip.conf000066400000000000000000000003171251036066300426520ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/gzip[main] name=generate-list-changing-default-separator-for-gzip type=archive path=generate-list-changing-default-separator-for-gzip.gz files_list=generate-list-changing-default-separator-for-gzip.list generate-list-changing-default-separator-for-gzip.gz000066400000000000000000000000461251036066300423440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/gzip7Qtest+,VD.rbackupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.bz2/000077500000000000000000000000001251036066300307005ustar00rootroot00000000000000generate-list-changing-default-separator-for-tar-bz2.conf000066400000000000000000000003351251036066300434730ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.bz2[main] name=generate-list-changing-default-separator-for-tar-bz2 type=archive path=generate-list-changing-default-separator-for-tar-bz2.tar.bz2 files_list=generate-list-changing-default-separator-for-tar-bz2.list generate-list-changing-default-separator-for-tar-bz2.tar.bz2000066400000000000000000000002521251036066300440260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.bz2BZh91AY&SY٪h@{`0&`m"R 4 d4zа*24nXD$'fL|gzC< =7C7)Bl KXڃ!e ]q}sV뼃wmbHw$S backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.gz/000077500000000000000000000000001251036066300306235ustar00rootroot00000000000000generate-list-changing-default-separator-for-tar-gz.conf000066400000000000000000000003311251036066300433350ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.gz[main] name=generate-list-changing-default-separator-for-tar-gz type=archive path=generate-list-changing-default-separator-for-tar-gz.tar.gz files_list=generate-list-changing-default-separator-for-tar-gz.list generate-list-changing-default-separator-for-tar-gz.tar.gz000066400000000000000000000002471251036066300436230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.gzcQA !a OcCQ0&mBAr]Ɍ6INIΈ$F8X|湖Xk{~Lo|]%l/yyF Cuٺѿg,8IA(backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.xz/000077500000000000000000000000001251036066300306445ustar00rootroot00000000000000generate-list-changing-default-separator-for-tar-xz.conf000066400000000000000000000003311251036066300433770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.xz[main] name=generate-list-changing-default-separator-for-tar-xz type=archive path=generate-list-changing-default-separator-for-tar-xz.tar.xz files_list=generate-list-changing-default-separator-for-tar-xz.list generate-list-changing-default-separator-for-tar-xz.tar.xz000066400000000000000000000003201251036066300436760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tar.xz7zXZִF!t/']:J'xiN<%uWYXzAiq:7\)sGYSF7F@az6b7J]2+.w Լ']%lнږK( &jЅJB/gCQgq+PsgYZbackupchecker-1.7/functional-tests/generate-list-changing-default-separator/tree/000077500000000000000000000000001251036066300303555ustar00rootroot00000000000000generate-list-changing-default-separator-for-tree.conf000066400000000000000000000003051251036066300426230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tree[main] name=generate-list-changing-default-separator-for-tree type=tree path=generate-list-changing-default-separator-for-tree files_list=generate-list-changing-default-separator-for-tree.list 000077500000000000000000000000001251036066300417565ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tree/generate-list-changing-default-separator-for-treefoo000066400000000000000000000000001251036066300424520ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/tree/generate-list-changing-default-separator-for-treebackupchecker-1.7/functional-tests/generate-list-changing-default-separator/zip/000077500000000000000000000000001251036066300302205ustar00rootroot00000000000000generate-list-changing-default-separator-for-zip.conf000066400000000000000000000003151251036066300423320ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/zip[main] name=generate-list-changing-default-separator-for-zip type=archive path=generate-list-changing-default-separator-for-zip.zip files_list=generate-list-changing-default-separator-for-zip.list generate-list-changing-default-separator-for-zip.zip000066400000000000000000000007021251036066300422070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-changing-default-separator/zipPK (Ctest/UT .Q /Qux PK mC test/bar/UT LQcQux PK mCtest/fooUT VQVQux PK (CAtest/UT.Qux PK mC A?test/bar/UTLQux PK mCtest/fooUTVQux PKbackupchecker-1.7/functional-tests/generate-list-from-bzip2-archive/000077500000000000000000000000001251036066300256265ustar00rootroot00000000000000generate-list-from-bzip2-archive.bz2000066400000000000000000000001711251036066300343340ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-from-bzip2-archiveBZh91AY&SYUn_`@?ܰ r)@j' F{Enk˄e[`H!6Բb1#yLePAѺP&gwO"(H*7backupchecker-1.7/functional-tests/generate-list-from-gzip-archive/000077500000000000000000000000001251036066300255515ustar00rootroot00000000000000generate-list-from-gzip-archive.gz000066400000000000000000000031001251036066300341200ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-from-gzip-archiveNgenerate-list-from-gzip-archiveWmo6_q+4l/qMn0( J"%’(T(rtKˇX"Ow{a!;H,뾁 ;hWPhi-(Q{ |ipC%-A&T7 ~)pRەgyrc𵍣7hHMtZ ΠEE[hןQꩥ (]Jc3iӃpE?zeBB"m@Ztty0$е\Ҋ(c) e1=(jwjJ ; @ôVpmD^ZC?E5T]5lz[y#lZ[ōλsyuL&ϕ1.}}*Ei{Fۃ'x !]> x@/ePvSϿ{i$!b>``jj|`Pga0or½n&=o%XJ-d,EX:fHσ=f;xLbUȲH)[49ʈ4 )E]XLiN|JWAt&'8?(ľm"J6'ѽLj? ?ZP6׋CVI(Q&>|x"ʠ \Q yOb9W,MWrqTWL.Wj^/*[)F |e/fj^.-gFh]@kz\򰶢DXJp/[oVWRJ]2U2Y˹R=_UaCC{'Kcư cmL*]cwԪƪy-3H0yԪӗD~J[QbE"35$)pgFD m'ľvVMd.7hm&ҋ陜=y5㬛|&1 獞ibbIaZ(?"%V"[ct6W "/wu׋ex=UIXIéEZ*B@UqGʜ:s *f=u"6V4`T [d3H }@('ױ(zKYn@1_8Se^n*1N)lâIO!ᷤ)X{t}Eq83ξjF\y'S)ϭ韤 nBYZ;&zSazDJK:-qG3nԺr$Fd9 7#IѧG 0=m4̤SEH}鑯M8Q6q 1*σVKV?5O3ma_l ||G'6;]On_|]nոg%eyj3F C(backupchecker-1.7/functional-tests/generate-list-from-tree/000077500000000000000000000000001251036066300241205ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-from-tree/generate-list-from-tree/000077500000000000000000000000001251036066300305615ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-from-tree/generate-list-from-tree/bar/000077500000000000000000000000001251036066300313255ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-from-tree/generate-list-from-tree/bar/oof000066400000000000000000000000261251036066300320310ustar00rootroot00000000000000c'est ouf quand même backupchecker-1.7/functional-tests/generate-list-from-tree/generate-list-from-tree/bar/rab000066400000000000000000000000361251036066300320130ustar00rootroot00000000000000"rab" means ... ok, whatever. backupchecker-1.7/functional-tests/generate-list-from-tree/generate-list-from-tree/foo000066400000000000000000000000561251036066300312700ustar00rootroot00000000000000ok this is also a file. Interesting isn't it? backupchecker-1.7/functional-tests/generate-list-from-tree/generate-list-from-tree/hello000066400000000000000000000000261251036066300316050ustar00rootroot00000000000000hi this is a ... file backupchecker-1.7/functional-tests/generate-list-from-xz-archive/000077500000000000000000000000001251036066300252415ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-from-xz-archive/generate-list-from-xz-archive.xz000066400000000000000000000001341251036066300334040ustar00rootroot000000000000007zXZִF!t/ this is a test with a xz archive 0(ڪ{9!(kb}YZbackupchecker-1.7/functional-tests/generate-list-from-zip-archive/000077500000000000000000000000001251036066300254025ustar00rootroot00000000000000backupchecker-1.7/functional-tests/generate-list-from-zip-archive/generate-list-from-zip-archive.zip000066400000000000000000000025771251036066300340640ustar00rootroot00000000000000PK lV?generate-list-from-zip-archive/UT 甆NϪNux PK lV?l%%$generate-list-from-zip-archive/helloUT ߪNߪNux hey what's up man? How is your wife? PK mV?#generate-list-from-zip-archive/bar/UT N甆Nux PKmV?JHQ&generate-list-from-zip-archive/bar/rabUT NNux  0xa`I&`4no/GwXGCA'D5w4%*8Va-?PK lV?M 22&generate-list-from-zip-archive/bar/oofUT NNux you sure it's a really interesting file? I'm not. PK lV?D4"""generate-list-from-zip-archive/fooUT NNux this is a really interesting file PK lV?Agenerate-list-from-zip-archive/UT甆Nux PK lV?l%%$Ygenerate-list-from-zip-archive/helloUTߪNux PK mV?#Agenerate-list-from-zip-archive/bar/UTNux PKmV?JHQ&9generate-list-from-zip-archive/bar/rabUTNux PK lV?M 22&generate-list-from-zip-archive/bar/oofUTNux PK lV?D4"""sgenerate-list-from-zip-archive/fooUTNux PKxbackupchecker-1.7/functional-tests/gzip-archive-size-bigger-than-expected-size/000077500000000000000000000000001251036066300277535ustar00rootroot00000000000000gzip-archive-size-bigger-than-expected-size-list000066400000000000000000000000231251036066300410570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-bigger-than-expected-size[archive] size| <1 gzip-archive-size-bigger-than-expected-size.conf000066400000000000000000000002671251036066300410440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-bigger-than-expected-size[main] name=gzip-archive-size-bigger-than-expected-size type=archive path=gzip-archive-size-bigger-than-expected-size.gz files_list=gzip-archive-size-bigger-than-expected-size-list gzip-archive-size-bigger-than-expected-size.gz000066400000000000000000000001241251036066300405270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-bigger-than-expected-sizekNgzip-archive-size-not-equals-expected-size  Omb70backupchecker-1.7/functional-tests/gzip-archive-size-not-equals-expected-size/000077500000000000000000000000001251036066300276545ustar00rootroot00000000000000gzip-archive-size-not-equals-expected-size-list000066400000000000000000000000231251036066300406610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-not-equals-expected-size[archive] size| =8 gzip-archive-size-not-equals-expected-size.conf000066400000000000000000000002641251036066300406430ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-not-equals-expected-size[main] name=gzip-archive-size-not-equals-expected-size type=archive path=gzip-archive-size-not-equals-expected-size.gz files_list=gzip-archive-size-not-equals-expected-size-list gzip-archive-size-not-equals-expected-size.gz000066400000000000000000000001241251036066300403310ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-not-equals-expected-sizekNgzip-archive-size-not-equals-expected-size  Omb70backupchecker-1.7/functional-tests/gzip-archive-size-smaller-than-expected-size/000077500000000000000000000000001251036066300301535ustar00rootroot00000000000000gzip-archive-size-smaller-than-expected-size-list000066400000000000000000000000251251036066300414610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-smaller-than-expected-size[archive] size| >10M gzip-archive-size-smaller-than-expected-size.conf000066400000000000000000000002721251036066300414400ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-smaller-than-expected-size[main] name=gzip-archive-size-smaller-than-expected-size type=archive path=gzip-archive-size-smaller-than-expected-size.gz files_list=gzip-archive-size-smaller-than-expected-size-list gzip-archive-size-smaller-than-expected-size.gz000066400000000000000000000001241251036066300411270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/gzip-archive-size-smaller-than-expected-sizekNgzip-archive-size-not-equals-expected-size  Omb70backupchecker-1.7/functional-tests/hashtype-option/000077500000000000000000000000001251036066300226125ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/bzip2/000077500000000000000000000000001251036066300236405ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/bzip2/hashtype-option.bz2000066400000000000000000000000661251036066300274140ustar00rootroot00000000000000BZh91AY&SYеQ@+ 1@ :^>.p!?k<backupchecker-1.7/functional-tests/hashtype-option/gzip/000077500000000000000000000000001251036066300235635ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/gzip/hashtype-option.gz000066400000000000000000000000701251036066300272550ustar00rootroot00000000000000NThashtype-option-file+N)-QHVO-.QH[`backupchecker-1.7/functional-tests/hashtype-option/lzma/000077500000000000000000000000001251036066300235555ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/lzma/hashtype-option.xz000066400000000000000000000001101251036066300272630ustar00rootroot000000000000007zXZִF!t/salut c'est fo D\'j}YZbackupchecker-1.7/functional-tests/hashtype-option/tar-gz/000077500000000000000000000000001251036066300240165ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/tar-gz/hashtype-option.tar.gz000066400000000000000000000004141251036066300302770ustar00rootroot00000000000000MTA0=EvI?y2bH\{1SAf(2+hɢRO?f ߟDfVi0+bBV$Ìbr={s_WUΟ Ϸ,!_q"E!yɷ߄P|[zCGNU=f_%EΧ~m]^p qqx+(backupchecker-1.7/functional-tests/hashtype-option/tree/000077500000000000000000000000001251036066300235515ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/tree/hashtype-option/000077500000000000000000000000001251036066300267045ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/tree/hashtype-option/bar/000077500000000000000000000000001251036066300274505ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/tree/hashtype-option/bar/bar1000066400000000000000000000000161251036066300302150ustar00rootroot00000000000000this is a bar backupchecker-1.7/functional-tests/hashtype-option/tree/hashtype-option/foo000066400000000000000000000000171251036066300274100ustar00rootroot00000000000000salut c'est fo backupchecker-1.7/functional-tests/hashtype-option/tree/hashtype-option/foo2000066400000000000000000000000221251036066300274660ustar00rootroot00000000000000 ùmkzlzermlkazer backupchecker-1.7/functional-tests/hashtype-option/zip/000077500000000000000000000000001251036066300234145ustar00rootroot00000000000000backupchecker-1.7/functional-tests/hashtype-option/zip/hashtype-option.zip000066400000000000000000000016131251036066300272740ustar00rootroot00000000000000PK Ehashtype-option/UT  nTMTux PK Ehashtype-option/bar/UT nT%nTux PK E*hashtype-option/bar/bar1UT nT%nTux this is a bar PK E[`hashtype-option/fooUT mT%nTux salut c'est fo PK EEFhashtype-option/foo2UT nT%nTux  ùmkzlzermlkazer PK EAhashtype-option/UT nTux PK EAJhashtype-option/bar/UTnTux PK E*hashtype-option/bar/bar1UTnTux PK E[`hashtype-option/fooUTmTux PK EEFThashtype-option/foo2UTnTux PKbackupchecker-1.7/functional-tests/missing-gpg-footer/000077500000000000000000000000001251036066300231775ustar00rootroot00000000000000backupchecker-1.7/functional-tests/missing-gpg-footer/missing-gpg-footer.conf000066400000000000000000000017051251036066300275710ustar00rootroot00000000000000-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 [main] name=missing-gpg-footer type=archive path=missing-gpg-footer.tar.gz files_list=missing-gpg-footer.list Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBCAAGBQJSYw6BAAoJEAJwonWM1zbi1sEP/38PWWTYpBrUd33VN6Qr5o2h 0Xs6k23CiCORBHMFG6qrwRgJuWqAMJg3fqRFu8oXvFzduZuRP1sLVoM+TQ7CuCbH LOMLPljsa9U8SF5s6q2LcAPRHtn9+tY9PukL95kRrzq+dt5yDD5GOx538R384I4U h6DaHfCh0b6jE5Uv5kqdtKtZaiKXLdYX+R3ljmh0VauS8XZcbqybeL+YE8qBTD9R 0sh6wRDAnAd7W3blIVaoZPh/QJ89IX87ngmh7/qRf8Zcl7xek8VQ1CIOCOPAO0wc Pg+pVg2zP2q0SYwuFaf598c8AqxpgZV29qMty6P/8VLbm2scFD63SDrQlREZwQG6 WEumMGpr3O86ygpikjsag/DP9DEOwaJun1M3PcSK1ewWKkFIgjh+mKKGF+B6GhG0 USEJAikKstcQuzjUEenf2uYKfzOsIulYsr2f40SEeJ0S5r1iRn7SXCw/7ahwsKXd RbKMpJfSTgPZ2RBPS2YOUMnHo2gJQr32U/JBr6vHZl0byKnblqi/NAPuk8qKgsVY RYsmCfOZRXvqTqCT3MMyIAP3m1IvolGAHcv/MeC9yG8BM/r2X7N+x71+KuuWMHlQ 89Wz0CRr21uu4SFVzkQwAgr39iGasO8ICKu3N/qeQ2fWCoDLINfXHi2yohVZYPIW ennHbVX0g6KFh3G7k7XJ =c72L -----END PGP SIGNATURE----- backupchecker-1.7/functional-tests/missing-gpg-footer/missing-gpg-footer.list000066400000000000000000000010441251036066300276130ustar00rootroot00000000000000[files] generate-conf-and-file-list| =0 uid|1001 gid|1000 mode|755 type|d generate-conf-and-file-list/toto| =5 uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 generate-conf-and-file-list/foo| =0 uid|1000 gid|1000 mode|755 type|d generate-conf-and-file-list/foo/tata| =0 uid|1000 gid|1000 mode|644 type|f md5|d41d8cd98f00b204e9800998ecf8427e generate-conf-and-file-list/foo2| =0 uid|1000 gid|1000 mode|755 type|d generate-conf-and-file-list/foo2/titi| =0 uid|1000 gid|1000 mode|644 type|f md5|d41d8cd98f00b204e9800998ecf8427e backupchecker-1.7/functional-tests/missing-gpg-footer/missing-gpg-footer.tar.gz000066400000000000000000000004011251036066300300410ustar00rootroot00000000000000aYRъ0&r10M tar-archive-size-smaller-than-expected-size.conf000066400000000000000000000002701251036066300410700ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-archive-size-smaller-than-expected-size[main] name=tar-archive-size-smaller-than-expected-size type=archive path=tar-archive-size-smaller-than-expected-size.tar files_list=tar-archive-size-smaller-than-expected-size-list tar-archive-size-smaller-than-expected-size.tar000066400000000000000000000740001251036066300407330ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-archive-size-smaller-than-expected-sizefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/tar-bz2-archive-size-bigger-than-expected-size/000077500000000000000000000000001251036066300302635ustar00rootroot00000000000000tar-bz2-archive-size-bigger-than-expected-size-list000066400000000000000000000000231251036066300416770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-bigger-than-expected-size[archive] size| <1 tar-bz2-archive-size-bigger-than-expected-size.conf000066400000000000000000000003051251036066300416550ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-bigger-than-expected-size[main] name=tar-bz2-archive-size-bigger-than-expected-size type=archive path=tar-bz2-archive-size-bigger-than-expected-size.tar.bz2 files_list=tar-bz2-archive-size-bigger-than-expected-size-list tar-bz2-archive-size-bigger-than-expected-size.tar.bz2000066400000000000000000000002351251036066300422140ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-bigger-than-expected-sizeN10 GHH'TB0U*p :`d_%l-v{O{k/!ZcNqS)Nc Czu|l6ѾNtxbackupchecker-1.7/functional-tests/tar-bz2-archive-size-not-equals-expected-size/000077500000000000000000000000001251036066300301645ustar00rootroot00000000000000tar-bz2-archive-size-not-equals-expected-size-list000066400000000000000000000000231251036066300415010ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-not-equals-expected-size[archive] size| =1 tar-bz2-archive-size-not-equals-expected-size.conf000066400000000000000000000003021251036066300414540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-not-equals-expected-size[main] name=tar-bz2-archive-size-not-equals-expected-size type=archive path=tar-bz2-archive-size-not-equals-expected-size.tar.bz2 files_list=tar-bz2-archive-size-not-equals-expected-size-list tar-bz2-archive-size-not-equals-expected-size.tar.bz2000066400000000000000000000002351251036066300420160ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-not-equals-expected-sizeN10 GHH'TB0U*p :`d_%l-v{O{k/!ZcNqS)Nc Czu|l6ѾNtxbackupchecker-1.7/functional-tests/tar-bz2-archive-size-smaller-than-expected-size/000077500000000000000000000000001251036066300304635ustar00rootroot00000000000000tar-bz2-archive-size-smaller-than-expected-size-list000066400000000000000000000000251251036066300423010ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-smaller-than-expected-size[archive] size| >10M tar-bz2-archive-size-smaller-than-expected-size.conf000066400000000000000000000003101251036066300422510ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-smaller-than-expected-size[main] name=tar-bz2-archive-size-smaller-than-expected-size type=archive path=tar-bz2-archive-size-smaller-than-expected-size.tar.bz2 files_list=tar-bz2-archive-size-smaller-than-expected-size-list tar-bz2-archive-size-smaller-than-expected-size.tar.bz2000066400000000000000000000002351251036066300426140ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-bz2-archive-size-smaller-than-expected-sizeN10 GHH'TB0U*p :`d_%l-v{O{k/!ZcNqS)Nc Czu|l6ѾNtxbackupchecker-1.7/functional-tests/tar-gz-archive-size-bigger-than-expected-size/000077500000000000000000000000001251036066300302065ustar00rootroot00000000000000tar-gz-archive-size-bigger-than-expected-size-list000066400000000000000000000000231251036066300415450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-bigger-than-expected-size[archive] size| <1 tar-gz-archive-size-bigger-than-expected-size.conf000066400000000000000000000003011251036066300415170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-bigger-than-expected-size[main] name=tar-gz-archive-size-bigger-than-expected-size type=archive path=tar-gz-archive-size-bigger-than-expected-size.tar.gz files_list=tar-gz-archive-size-bigger-than-expected-size-list tar-gz-archive-size-bigger-than-expected-size.tar.gz000066400000000000000000000002351251036066300420050ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-bigger-than-expected-size2}NA 0GDWu uUDxo19m-ֵ~}}[cWK}-n0w]Oy}4ms[^ߒt@xbackupchecker-1.7/functional-tests/tar-gz-archive-size-not-equals-expected-size/000077500000000000000000000000001251036066300301075ustar00rootroot00000000000000tar-gz-archive-size-not-equals-expected-size-list000066400000000000000000000000231251036066300413470ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-not-equals-expected-size[archive] size| =2 tar-gz-archive-size-not-equals-expected-size.conf000066400000000000000000000002761251036066300413340ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-not-equals-expected-size[main] name=tar-gz-archive-size-not-equals-expected-size type=archive path=tar-gz-archive-size-not-equals-expected-size.tar.gz files_list=tar-gz-archive-size-not-equals-expected-size-list tar-gz-archive-size-not-equals-expected-size.tar.gz000066400000000000000000000002351251036066300416070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-not-equals-expected-size2}NA 0GDWu uUDxo19m-ֵ~}}[cWK}-n0w]Oy}4ms[^ߒt@xbackupchecker-1.7/functional-tests/tar-gz-archive-size-smaller-than-expected-size/000077500000000000000000000000001251036066300304065ustar00rootroot00000000000000tar-gz-archive-size-smaller-than-expected-size-list000066400000000000000000000000251251036066300421470ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-smaller-than-expected-size[archive] size| >10M tar-gz-archive-size-smaller-than-expected-size.conf000066400000000000000000000003041251036066300421220ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-smaller-than-expected-size[main] name=tar-gz-archive-size-smaller-than-expected-size type=archive path=tar-gz-archive-size-smaller-than-expected-size.tar.gz files_list=tar-gz-archive-size-smaller-than-expected-size-list tar-gz-archive-size-smaller-than-expected-size.tar.gz000066400000000000000000000002351251036066300424050ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-gz-archive-size-smaller-than-expected-size2}NA 0GDWu uUDxo19m-ֵ~}}[cWK}-n0w]Oy}4ms[^ߒt@xbackupchecker-1.7/functional-tests/tar-xz-archive-size-bigger-than-expected-size/000077500000000000000000000000001251036066300302275ustar00rootroot00000000000000tar-xz-archive-size-bigger-than-expected-size-list000066400000000000000000000000231251036066300416070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-bigger-than-expected-size[archive] size| <1 tar-xz-archive-size-bigger-than-expected-size.conf000066400000000000000000000003011251036066300415610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-bigger-than-expected-size[main] name=tar-xz-archive-size-bigger-than-expected-size type=archive path=tar-xz-archive-size-bigger-than-expected-size.tar.xz files_list=tar-xz-archive-size-bigger-than-expected-size-list tar-xz-archive-size-bigger-than-expected-size.tar.xz000066400000000000000000000005141251036066300420700ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-bigger-than-expected-size7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/tar-xz-archive-size-not-equals-expected-size/000077500000000000000000000000001251036066300301305ustar00rootroot00000000000000tar-xz-archive-size-not-equals-expected-size-list000066400000000000000000000000231251036066300414110ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-not-equals-expected-size[archive] size| =1 tar-xz-archive-size-not-equals-expected-size.conf000066400000000000000000000002761251036066300413760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-not-equals-expected-size[main] name=tar-xz-archive-size-not-equals-expected-size type=archive path=tar-xz-archive-size-not-equals-expected-size.tar.xz files_list=tar-xz-archive-size-not-equals-expected-size-list tar-xz-archive-size-not-equals-expected-size.tar.xz000066400000000000000000000005141251036066300416720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-not-equals-expected-size7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/tar-xz-archive-size-smaller-than-expected-size/000077500000000000000000000000001251036066300304275ustar00rootroot00000000000000tar-xz-archive-size-smaller-than-expected-size-list000066400000000000000000000000251251036066300422110ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-smaller-than-expected-size[archive] size| >10M tar-xz-archive-size-smaller-than-expected-size.conf000066400000000000000000000003041251036066300421640ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-smaller-than-expected-size[main] name=tar-xz-archive-size-smaller-than-expected-size type=archive path=tar-xz-archive-size-smaller-than-expected-size.tar.xz files_list=tar-xz-archive-size-smaller-than-expected-size-list tar-xz-archive-size-smaller-than-expected-size.tar.xz000066400000000000000000000005141251036066300424700ustar00rootroot00000000000000backupchecker-1.7/functional-tests/tar-xz-archive-size-smaller-than-expected-size7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/two_confs_with_the_same_name/000077500000000000000000000000001251036066300253605ustar00rootroot00000000000000backupchecker-1.7/functional-tests/two_confs_with_the_same_name/a.out000066400000000000000000000000001251036066300263170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/two_confs_with_the_same_name/first.conf000066400000000000000000000001311251036066300273510ustar00rootroot00000000000000[main] name=firstconf type=archive path=notrelevant.tar.gz files_list=notrelevant-list backupchecker-1.7/functional-tests/two_confs_with_the_same_name/notrelevant-list000066400000000000000000000000121251036066300306060ustar00rootroot00000000000000[archive] backupchecker-1.7/functional-tests/two_confs_with_the_same_name/notrelevant.tar.gz000066400000000000000000000003041251036066300310450ustar00rootroot000000000000000iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/unexpected-file-in-tar-gz-archive/000077500000000000000000000000001251036066300257655ustar00rootroot00000000000000unexpected-file-in-tar-gz-archive-list000066400000000000000000000000571251036066300351120ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| unexpected unexpected-file-in-tar-gz-archive.conf000066400000000000000000000002351251036066300350630ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-tar-gz-archive[main] name=unexpected-file-in-tar-gz-archive type=archive path=unexpected-file-in-tar-gz-archive.tar.gz files_list=unexpected-file-in-tar-gz-archive-list unexpected-file-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300353400ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/unexpected-file-in-tree/000077500000000000000000000000001251036066300241015ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-tree/tree/000077500000000000000000000000001251036066300250405ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-tree/tree/bar000066400000000000000000000000041251036066300255210ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/unexpected-file-in-tree/tree/dir/000077500000000000000000000000001251036066300256165ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300264020ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/unexpected-file-in-tree/tree/foo000066400000000000000000000000031251036066300255370ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/unexpected-file-in-tree/unexpected-file-in-tree-list000066400000000000000000000000351251036066300314150ustar00rootroot00000000000000[files] dir/foo2| unexpected backupchecker-1.7/functional-tests/unexpected-file-in-tree/unexpected-file-in-tree.conf000066400000000000000000000001411251036066300313660ustar00rootroot00000000000000[main] name=unexpected-file-in-tree type=tree path=tree files_list=unexpected-file-in-tree-list backupchecker-1.7/functional-tests/unexpected-file-in-zip-archive/000077500000000000000000000000001251036066300253635ustar00rootroot00000000000000unexpected-file-in-zip-archive-list000066400000000000000000000000621251036066300341020ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-zip-archive[files] file-missing-in-zip/foo2/bar2| unexpected unexpected-file-in-zip-archive.conf000066400000000000000000000002211251036066300340520ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unexpected-file-in-zip-archive[main] name=unexpected-file-in-zip-archive type=archive path=unexpected-file-in-zip-archive.zip files_list=unexpected-file-in-zip-archive-list backupchecker-1.7/functional-tests/unexpected-file-in-zip-archive/unexpected-file-in-zip-archive.zip000066400000000000000000000016201251036066300340120ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/unsupported-parameters-bz2-archive/000077500000000000000000000000001251036066300263225ustar00rootroot00000000000000unsupported-parameters-bz2-archive-list000066400000000000000000000001041251036066300357750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-bz2-archive[files] unsupported-parameters-bz2-archive| uid|1 gid|2 mode|777 <2 unsupported-parameters-bz2-archive.bz2000066400000000000000000000002541251036066300355260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-bz2-archiveBZh91AY&SYc)߀` > "#fCLSB)z@4Rid栒zBMY&.Ӏ{h[s΃27V֙ZRf8>;Eĭ"xZ0+I8'y9(_ܑN$/ounsupported-parameters-bz2-archive.conf000066400000000000000000000002351251036066300357550ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-bz2-archive[main] name=unsupported-parameters-bz2-archive type=archive path=unsupported-parameters-bz2-archive.bz2 files_list=unsupported-parameters-bz2-archive-list backupchecker-1.7/functional-tests/unsupported-parameters-gz-archive/000077500000000000000000000000001251036066300262455ustar00rootroot00000000000000unsupported-parameters-gz-archive-list000066400000000000000000000001001251036066300356370ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-gz-archive[files] unsupported-parameters-gz-archive| uid|1 gid|2 mode|777 unsupported-parameters-gz-archive.conf000066400000000000000000000002311251036066300356170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-gz-archive[main] name=unsupported-parameters-gz-archive type=archive path=unsupported-parameters-gz-archive.gz files_list=unsupported-parameters-gz-archive-list unsupported-parameters-gz-archive.gz000066400000000000000000000002641251036066300353200ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-gz-archive8ڑNunsupported-parameters-gz-archive=1 1E{O;%Whcea30IgKnoTw2lǡ 5BsQDBqxRi0ǐiUR偅 %q"pW/޹S|'ZnŨbackupchecker-1.7/functional-tests/unsupported-parameters-xz-archive/000077500000000000000000000000001251036066300262665ustar00rootroot00000000000000unsupported-parameters-xz-archive-list000066400000000000000000000001031251036066300357040ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-xz-archive[files] unsupported-parameters-xz-archive| uid|1 gid|2 mode|777 <2 unsupported-parameters-xz-archive.conf000066400000000000000000000002311251036066300356610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-xz-archive[main] name=unsupported-parameters-xz-archive type=archive path=unsupported-parameters-xz-archive.xz files_list=unsupported-parameters-xz-archive-list unsupported-parameters-xz-archive.xz000066400000000000000000000002201251036066300353730ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-xz-archive7zXZִF!t/UQ]: g~r|rࢅDcfo[*nTӦsU zJd%SPD&`k[_ךx DA~" =mدmVTr}YZbackupchecker-1.7/functional-tests/unsupported-parameters-zip-archive/000077500000000000000000000000001251036066300264275ustar00rootroot00000000000000unsupported-parameters-zip-archive.conf000066400000000000000000000002331251036066300361650ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-zip-archive[main] name=unsupported-parameters-zip-archive type=archive path=unsupported-parameters-zip-archive.zip files_list=unsupported-parameters-zip-archive.list unsupported-parameters-zip-archive.list000066400000000000000000000006541251036066300362220ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-zip-archive[files] test| =0 uid|1000 gid|1000 mode|755 type|d test/toto| =5 uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 test/foo| =0 uid|1000 gid|1000 mode|755 type|d test/foo/bar| =5 uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 test/foo2| =0 uid|1000 gid|1000 mode|755 type|d test/foo2/toto2| =5 uid|1000 gid|1000 mode|644 type|s md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|../../toto unsupported-parameters-zip-archive.zip000066400000000000000000000016351251036066300360510ustar00rootroot00000000000000backupchecker-1.7/functional-tests/unsupported-parameters-zip-archivePK !Ctest/UT ^%RURux PK BCp`; test/totoUT #RURux hihi PK C test/foo/UT 7$RURux PK BCp`; test/foo/barUT #RURux hihi PK +C test/foo2/UT r%RURux PK BCp`;test/foo2/toto2UT #RURux hihi PK !CAtest/UT^%Rux PK BCp`; ?test/totoUT#Rux PK C Atest/foo/UT7$Rux PK BCp`; test/foo/barUT#Rux PK +C Atest/foo2/UTr%Rux PK BCp`;Ytest/foo2/toto2UT#Rux PKbackupchecker-1.7/functional-tests/user-specified-delimiter/000077500000000000000000000000001251036066300243425ustar00rootroot00000000000000backupchecker-1.7/functional-tests/user-specified-delimiter/user-specified-delimiter.conf000066400000000000000000000002161251036066300320730ustar00rootroot00000000000000[main] name=user-specified-delimiter type=archive path=user-specified-delimiter.tar.gz files_list=user-specified-delimiter.list delimiter=# backupchecker-1.7/functional-tests/user-specified-delimiter/user-specified-delimiter.list000066400000000000000000000000461251036066300321220ustar00rootroot00000000000000[files] user-specified-delimiter/oof# backupchecker-1.7/functional-tests/user-specified-delimiter/user-specified-delimiter.tar.gz000066400000000000000000000002641251036066300323560ustar00rootroot00000000000000e%NM 0@{\@'G4bbEv(#02%r mc.0U>fWb睲֋由b)-wHږVĶI{wT~rqU_^*M^FupJ>tRrF(backupchecker-1.7/functional-tests/wrong-bz2-archive-gid/000077500000000000000000000000001251036066300234665ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-gid/wrong-bz2-archive-gid-list000066400000000000000000000000231251036066300303640ustar00rootroot00000000000000[archive] gid| 100 backupchecker-1.7/functional-tests/wrong-bz2-archive-gid/wrong-bz2-archive-gid.bz2000066400000000000000000000001141251036066300301100ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-gid/wrong-bz2-archive-gid.conf000066400000000000000000000001661251036066300303470ustar00rootroot00000000000000[main] name=wrong-bz2-archive-gid type=archive path=wrong-bz2-archive-gid.bz2 files_list=wrong-bz2-archive-gid-list backupchecker-1.7/functional-tests/wrong-bz2-archive-md5-hash/000077500000000000000000000000001251036066300243315ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-md5-hash/wrong-bz2-archive-md5-hash-list000066400000000000000000000000261251036066300320750ustar00rootroot00000000000000[archive] md5| 82b1f8 backupchecker-1.7/functional-tests/wrong-bz2-archive-md5-hash/wrong-bz2-archive-md5-hash.bz2000066400000000000000000000001141251036066300316160ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-md5-hash/wrong-bz2-archive-md5-hash.conf000066400000000000000000000002051251036066300320470ustar00rootroot00000000000000[main] name=wrong-bz2-archive-md5-hash type=archive path=wrong-bz2-archive-md5-hash.bz2 files_list=wrong-bz2-archive-md5-hash-list backupchecker-1.7/functional-tests/wrong-bz2-archive-sha1-hash/000077500000000000000000000000001251036066300245005ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-sha1-hash/wrong-bz2-archive-sha1-hash-list000066400000000000000000000000251251036066300324120ustar00rootroot00000000000000[archive] sha1| 2c6d backupchecker-1.7/functional-tests/wrong-bz2-archive-sha1-hash/wrong-bz2-archive-sha1-hash.bz2000066400000000000000000000001141251036066300321340ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-sha1-hash/wrong-bz2-archive-sha1-hash.conf000066400000000000000000000002101251036066300323610ustar00rootroot00000000000000[main] name=wrong-bz2-archive-sha1-hash type=archive path=wrong-bz2-archive-sha1-hash.bz2 files_list=wrong-bz2-archive-sha1-hash-list backupchecker-1.7/functional-tests/wrong-bz2-archive-sha224-hash/000077500000000000000000000000001251036066300246475ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-sha224-hash/wrong-bz2-archive-sha224-hash-list000066400000000000000000000000261251036066300327310ustar00rootroot00000000000000[archive] sha224| 5d4 backupchecker-1.7/functional-tests/wrong-bz2-archive-sha224-hash/wrong-bz2-archive-sha224-hash.bz2000066400000000000000000000001141251036066300324520ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-sha224-hash/wrong-bz2-archive-sha224-hash.conf000066400000000000000000000002161251036066300327050ustar00rootroot00000000000000[main] name=wrong-bz2-archive-sha224-hash type=archive path=wrong-bz2-archive-sha224-hash.bz2 files_list=wrong-bz2-archive-sha224-hash-list backupchecker-1.7/functional-tests/wrong-bz2-archive-sha256-hash/000077500000000000000000000000001251036066300246545ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-sha256-hash/wrong-bz2-archive-sha256-hash-list000066400000000000000000000000261251036066300327430ustar00rootroot00000000000000[archive] sha256| d71 backupchecker-1.7/functional-tests/wrong-bz2-archive-sha256-hash/wrong-bz2-archive-sha256-hash.bz2000066400000000000000000000001141251036066300324640ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-sha256-hash/wrong-bz2-archive-sha256-hash.conf000066400000000000000000000002161251036066300327170ustar00rootroot00000000000000[main] name=wrong-bz2-archive-sha256-hash type=archive path=wrong-bz2-archive-sha256-hash.bz2 files_list=wrong-bz2-archive-sha256-hash-list backupchecker-1.7/functional-tests/wrong-bz2-archive-sha384-hash/000077500000000000000000000000001251036066300246565ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-sha384-hash/wrong-bz2-archive-sha384-hash-list000066400000000000000000000000261251036066300327470ustar00rootroot00000000000000[archive] sha384| c1d backupchecker-1.7/functional-tests/wrong-bz2-archive-sha384-hash/wrong-bz2-archive-sha384-hash.bz2000066400000000000000000000001141251036066300324700ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-sha384-hash/wrong-bz2-archive-sha384-hash.conf000066400000000000000000000002161251036066300327230ustar00rootroot00000000000000[main] name=wrong-bz2-archive-sha384-hash type=archive path=wrong-bz2-archive-sha384-hash.bz2 files_list=wrong-bz2-archive-sha384-hash-list backupchecker-1.7/functional-tests/wrong-bz2-archive-sha512-hash/000077500000000000000000000000001251036066300246475ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-sha512-hash/wrong-bz2-archive-sha512-hash-list000066400000000000000000000000271251036066300327320ustar00rootroot00000000000000[archive] sha512| d8a0 backupchecker-1.7/functional-tests/wrong-bz2-archive-sha512-hash/wrong-bz2-archive-sha512-hash.bz2000066400000000000000000000001141251036066300324520ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-sha512-hash/wrong-bz2-archive-sha512-hash.conf000066400000000000000000000002161251036066300327050ustar00rootroot00000000000000[main] name=wrong-bz2-archive-sha512-hash type=archive path=wrong-bz2-archive-sha512-hash.bz2 files_list=wrong-bz2-archive-sha512-hash-list backupchecker-1.7/functional-tests/wrong-bz2-archive-uid/000077500000000000000000000000001251036066300235045ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-bz2-archive-uid/wrong-bz2-archive-uid-list000066400000000000000000000000231251036066300304200ustar00rootroot00000000000000[archive] uid| 123 backupchecker-1.7/functional-tests/wrong-bz2-archive-uid/wrong-bz2-archive-uid.bz2000066400000000000000000000001141251036066300301440ustar00rootroot00000000000000BZh91AY&SYM6 Q@?e ")1Oi'(i-H%a7Juvމ#);H?rE8PM6backupchecker-1.7/functional-tests/wrong-bz2-archive-uid/wrong-bz2-archive-uid.conf000066400000000000000000000001661251036066300304030ustar00rootroot00000000000000[main] name=wrong-bz2-archive-uid type=archive path=wrong-bz2-archive-uid.bz2 files_list=wrong-bz2-archive-uid-list backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-archive/000077500000000000000000000000001251036066300251005ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-archive/wrong-file-gid-in-tar-archive-list000066400000000000000000000000261251036066300334130ustar00rootroot00000000000000[files] foo| gid|1234 backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-archive/wrong-file-gid-in-tar-archive.conf000066400000000000000000000002161251036066300333670ustar00rootroot00000000000000[main] name=wrong-file-gid-in-tar-archive type=archive path=wrong-file-gid-in-tar-archive.tar files_list=wrong-file-gid-in-tar-archive-list backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-archive/wrong-file-gid-in-tar-archive.tar000066400000000000000000000240001251036066300332250ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-bz2-archive/000077500000000000000000000000001251036066300255735ustar00rootroot00000000000000wrong-file-gid-in-tar-bz2-archive-list000066400000000000000000000000561251036066300345250ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| gid|1234 wrong-file-gid-in-tar-bz2-archive.conf000066400000000000000000000002361251036066300345000ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-bz2-archive[main] name=wrong-file-gid-in-tar-bz2-archive type=archive path=wrong-file-gid-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-gid-in-tar-bz2-archive-list wrong-file-gid-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300350270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-gz-archive/000077500000000000000000000000001251036066300255165ustar00rootroot00000000000000wrong-file-gid-in-tar-gz-archive-list000066400000000000000000000000551251036066300343720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| gid|1234 wrong-file-gid-in-tar-gz-archive.conf000066400000000000000000000002321251036066300343420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-gz-archive[main] name=wrong-file-gid-in-tar-gz-archive type=archive path=wrong-file-gid-in-tar-gz-archive.tar.gz files_list=wrong-file-gid-in-tar-gz-archive-list wrong-file-gid-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300346220ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-gid-in-tree/000077500000000000000000000000001251036066300236325ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tree/tree/000077500000000000000000000000001251036066300245715ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tree/tree/bar000066400000000000000000000000041251036066300252520ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-gid-in-tree/tree/dir/000077500000000000000000000000001251036066300253475ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300261330ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-gid-in-tree/tree/foo000066400000000000000000000000031251036066300252700ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/wrong-file-gid-in-tree/wrong-file-gid-in-tree-list000066400000000000000000000000331251036066300306750ustar00rootroot00000000000000[files] dir/foo2| gid|1234 backupchecker-1.7/functional-tests/wrong-file-gid-in-tree/wrong-file-gid-in-tree.conf000066400000000000000000000001371251036066300306550ustar00rootroot00000000000000[main] name=wrong-file-gid-in-tree type=tree path=tree files_list=wrong-file-gid-in-tree-list backupchecker-1.7/functional-tests/wrong-file-gid-in-zip-archive/000077500000000000000000000000001251036066300251145ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-gid-in-zip-archive/wrong-file-gid-in-zip-archive-list000066400000000000000000000000561251036066300334460ustar00rootroot00000000000000[files] file-missing-in-zip/foo2/bar2| gid|10 backupchecker-1.7/functional-tests/wrong-file-gid-in-zip-archive/wrong-file-gid-in-zip-archive.conf000066400000000000000000000002161251036066300334170ustar00rootroot00000000000000[main] name=wrong-file-gid-in-zip-archive type=archive path=wrong-file-gid-in-zip-archive.zip files_list=wrong-file-gid-in-zip-archive-list backupchecker-1.7/functional-tests/wrong-file-gid-in-zip-archive/wrong-file-gid-in-zip-archive.zip000066400000000000000000000016201251036066300332740ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-md5-hash-in-bzip2-archive/000077500000000000000000000000001251036066300262035ustar00rootroot00000000000000wrong-file-md5-hash-in-bzip2-archive-list000066400000000000000000000000661251036066300355460ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-bzip2-archive[files] wrong-file-md5-hash-in-bzip2-archive| md5|ede wrong-file-md5-hash-in-bzip2-archive.bz2000066400000000000000000000001751251036066300352720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-bzip2-archiveBZh91AY&SY ]@ >ޠ hD4jcD=&TSS%_Oj2=vRLns ْ,/6/z4x]e50u\=]dE-)„OD0wrong-file-md5-hash-in-bzip2-archive.conf000066400000000000000000000002431251036066300355160ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-bzip2-archive[main] name=wrong-file-md5-hash-in-bzip2-archive type=archive path=wrong-file-md5-hash-in-bzip2-archive.bz2 files_list=wrong-file-md5-hash-in-bzip2-archive-list backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-gz-archive/000077500000000000000000000000001251036066300255755ustar00rootroot00000000000000wrong-file-md5-hash-in-gz-archive-list000066400000000000000000000000631251036066300345270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-gz-archive[files] wrong-file-md5-hash-in-gz-archive| md5|f1e wrong-file-md5-hash-in-gz-archive.conf000066400000000000000000000002311251036066300344770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-gz-archive[main] name=wrong-file-md5-hash-in-gz-archive type=archive path=wrong-file-md5-hash-in-gz-archive.gz files_list=wrong-file-md5-hash-in-gz-archive-list wrong-file-md5-hash-in-gz-archive.gz000066400000000000000000000001121251036066300341700ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-gz-archiveINwrong-file-md5-hash-in-gz-archiveTH/,V H,Q/V(-Lbackupchecker-1.7/functional-tests/wrong-file-md5-hash-in-lzma-archive/000077500000000000000000000000001251036066300261205ustar00rootroot00000000000000wrong-file-md5-hash-in-lzma-archive-list000066400000000000000000000000651251036066300353770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-lzma-archive[files] wrong-file-md5-hash-in-lzma-archive| md5|ede wrong-file-md5-hash-in-lzma-archive.conf000066400000000000000000000002371251036066300353530ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-lzma-archive[main] name=wrong-file-md5-hash-in-lzma-archive type=archive path=wrong-file-md5-hash-in-lzma-archive.xz files_list=wrong-file-md5-hash-in-lzma-archive-list wrong-file-md5-hash-in-lzma-archive.xz000066400000000000000000000001401251036066300350600ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-lzma-archive7zXZִF!t/($]: g~r|;~ f/U;ҎoGYw/@)BbM}YZbackupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-archive/000077500000000000000000000000001251036066300257435ustar00rootroot00000000000000wrong-file-md5-hash-in-tar-archive-list000066400000000000000000000000251251036066300350410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-archive[files] foo| md5|c91 wrong-file-md5-hash-in-tar-archive.conf000066400000000000000000000002351251036066300350170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-archive[main] name=wrong-file-md5-hash-in-tar-archive type=archive path=wrong-file-md5-hash-in-tar-archive.tar files_list=wrong-file-md5-hash-in-tar-archive-list wrong-file-md5-hash-in-tar-archive.tar000066400000000000000000000740001251036066300346610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-bz2-archive/000077500000000000000000000000001251036066300264365ustar00rootroot00000000000000wrong-file-md5-hash-in-tar-bz2-archive-list000066400000000000000000000000551251036066300362320ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| md5|c15 wrong-file-md5-hash-in-tar-bz2-archive.conf000066400000000000000000000002551251036066300362070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-bz2-archive[main] name=wrong-file-md5-hash-in-tar-bz2-archive type=archive path=wrong-file-md5-hash-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-md5-hash-in-tar-bz2-archive-list wrong-file-md5-hash-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300365350ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-gz-archive/000077500000000000000000000000001251036066300263615ustar00rootroot00000000000000wrong-file-md5-hash-in-tar-gz-archive-list000066400000000000000000000000531251036066300360760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| md5|c1 wrong-file-md5-hash-in-tar-gz-archive.conf000066400000000000000000000002511251036066300360510ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-gz-archive[main] name=wrong-file-md5-hash-in-tar-gz-archive type=archive path=wrong-file-md5-hash-in-tar-gz-archive.tar.gz files_list=wrong-file-md5-hash-in-tar-gz-archive-list wrong-file-md5-hash-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300363300ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/000077500000000000000000000000001251036066300244755ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/tree/000077500000000000000000000000001251036066300254345ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/tree/bar000066400000000000000000000000041251036066300261150ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/tree/dir/000077500000000000000000000000001251036066300262125ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300267760ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/tree/foo000066400000000000000000000000031251036066300261330ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/wrong-file-md5-hash-in-tree-list000066400000000000000000000000321251036066300324020ustar00rootroot00000000000000[files] dir/foo2| md5|b19 backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-tree/wrong-file-md5-hash-in-tree.conf000066400000000000000000000001511251036066300323570ustar00rootroot00000000000000[main] name=wrong-file-md5-hash-in-tree type=tree path=tree files_list=wrong-file-md5-hash-in-tree-list backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-xz-archive/000077500000000000000000000000001251036066300256165ustar00rootroot00000000000000wrong-file-md5-hash-in-xz-archive-list000066400000000000000000000000631251036066300345710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-xz-archive[files] wrong-file-md5-hash-in-xz-archive| md5|f1e wrong-file-md5-hash-in-xz-archive.conf000066400000000000000000000002311251036066300345410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-xz-archive[main] name=wrong-file-md5-hash-in-xz-archive type=archive path=wrong-file-md5-hash-in-xz-archive.xz files_list=wrong-file-md5-hash-in-xz-archive-list wrong-file-md5-hash-in-xz-archive.xz000066400000000000000000000001101251036066300342510ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-xz-archive7zXZִF!t/this is a file drl'j}YZbackupchecker-1.7/functional-tests/wrong-file-md5-hash-in-zip-archive/000077500000000000000000000000001251036066300257575ustar00rootroot00000000000000wrong-file-md5-hash-in-zip-archive-list000066400000000000000000000000571251036066300350760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-zip-archive[files] file-missing-in-zip/foo2/bar2| md5|764 wrong-file-md5-hash-in-zip-archive.conf000066400000000000000000000002351251036066300350470ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-zip-archive[main] name=wrong-file-md5-hash-in-zip-archive type=archive path=wrong-file-md5-hash-in-zip-archive.zip files_list=wrong-file-md5-hash-in-zip-archive-list wrong-file-md5-hash-in-zip-archive.zip000066400000000000000000000016201251036066300347230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-md5-hash-in-zip-archivePK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-mode-in-tar-bz2-archive/000077500000000000000000000000001251036066300257545ustar00rootroot00000000000000wrong-file-mode-in-tar-bz2-archive-list000066400000000000000000000000561251036066300350670ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| mode|755 wrong-file-mode-in-tar-bz2-archive.conf000066400000000000000000000002411251036066300350360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tar-bz2-archive[main] name=wrong-file-mode-in-tar-bz2-archive type=archive path=wrong-file-mode-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-mode-in-tar-bz2-archive-list wrong-file-mode-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300353710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-mode-in-tar-gz-archive/000077500000000000000000000000001251036066300256775ustar00rootroot00000000000000wrong-file-mode-in-tar-gz-archive-list000066400000000000000000000000551251036066300347340ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| mode|755 wrong-file-mode-in-tar-gz-archive.conf000066400000000000000000000002351251036066300347070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tar-gz-archive[main] name=wrong-file-mode-in-tar-gz-archive type=archive path=wrong-file-mode-in-tar-gz-archive.tar.gz files_list=wrong-file-mode-in-tar-gz-archive-list wrong-file-mode-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300351640ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-mode-in-tree/000077500000000000000000000000001251036066300240135ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tree/tree/000077500000000000000000000000001251036066300247525ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tree/tree/bar000066400000000000000000000000041251036066300254330ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-mode-in-tree/tree/dir/000077500000000000000000000000001251036066300255305ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300263140ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-mode-in-tree/tree/foo000066400000000000000000000000031251036066300254510ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/wrong-file-mode-in-tree/wrong-file-mode-in-tree-list000066400000000000000000000000331251036066300312370ustar00rootroot00000000000000[files] dir/foo2| mode|755 backupchecker-1.7/functional-tests/wrong-file-mode-in-tree/wrong-file-mode-in-tree.conf000066400000000000000000000001411251036066300312120ustar00rootroot00000000000000[main] name=wrong-file-mode-in-tree type=tree path=tree files_list=wrong-file-mode-in-tree-list backupchecker-1.7/functional-tests/wrong-file-mode-in-zip-archive/000077500000000000000000000000001251036066300252755ustar00rootroot00000000000000wrong-file-mode-in-zip-archive-list000066400000000000000000000000601251036066300337240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-zip-archive[files] file-missing-in-zip/foo2/bar2| mode|755 wrong-file-mode-in-zip-archive.conf000066400000000000000000000002211251036066300336760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-mode-in-zip-archive[main] name=wrong-file-mode-in-zip-archive type=archive path=wrong-file-mode-in-zip-archive.zip files_list=wrong-file-mode-in-zip-archive-list backupchecker-1.7/functional-tests/wrong-file-mode-in-zip-archive/wrong-file-mode-in-zip-archive.zip000066400000000000000000000016201251036066300336360ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-bzip2-archive/000077500000000000000000000000001251036066300263525ustar00rootroot00000000000000wrong-file-sha1-hash-in-bzip2-archive-list000066400000000000000000000000711251036066300360600ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-bzip2-archive[files] wrong-file-sha1-hash-in-bzip2-archive| sha1|81c3 wrong-file-sha1-hash-in-bzip2-archive.bz2000066400000000000000000000001751251036066300356100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-bzip2-archiveBZh91AY&SY ]@ >ޠ hD4jcD=&TSS%_Oj2=vRLns ْ,/6/z4x]e50u\=]dE-)„OD0wrong-file-sha1-hash-in-bzip2-archive.conf000066400000000000000000000002461251036066300360370ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-bzip2-archive[main] name=wrong-file-sha1-hash-in-bzip2-archive type=archive path=wrong-file-sha1-hash-in-bzip2-archive.bz2 files_list=wrong-file-sha1-hash-in-bzip2-archive-list backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-gz-archive/000077500000000000000000000000001251036066300257445ustar00rootroot00000000000000wrong-file-sha1-hash-in-gz-archive-list000066400000000000000000000000651251036066300350470ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-gz-archive[files] wrong-file-md5-hash-in-gz-archive| sha1|889c wrong-file-sha1-hash-in-gz-archive.conf000066400000000000000000000002341251036066300350200ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-gz-archive[main] name=wrong-file-sha1-hash-in-gz-archive type=archive path=wrong-file-sha1-hash-in-gz-archive.gz files_list=wrong-file-sha1-hash-in-gz-archive-list wrong-file-sha1-hash-in-gz-archive.gz000066400000000000000000000001121251036066300345060ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-gz-archiveINwrong-file-md5-hash-in-gz-archiveTH/,V H,Q/V(-Lbackupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-archive/000077500000000000000000000000001251036066300261125ustar00rootroot00000000000000wrong-file-sha1-hash-in-tar-archive-list000066400000000000000000000000251251036066300353570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-archive[files] foo| sha1|57 wrong-file-sha1-hash-in-tar-archive.conf000066400000000000000000000002371251036066300353370ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-archive[main] name=wrong-file-sha1-hash-in-tar-archive type=archive path=wrong-file-sha1-hash-in-tar-archive.tar files_list=wrong-file-sha1-hash-in-tar-archive-list wrong-file-sha1-hash-in-tar-archive.tar000066400000000000000000000740001251036066300351770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-bz2-archive/000077500000000000000000000000001251036066300266055ustar00rootroot00000000000000wrong-file-sha1-hash-in-tar-bz2-archive-list000066400000000000000000000000571251036066300365520ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| sha1|e242 wrong-file-sha1-hash-in-tar-bz2-archive.conf000066400000000000000000000002601251036066300365210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-bz2-archive[main] name=wrong-file-sha1-hash-in-tar-bz2-archive type=archive path=wrong-file-sha1-hash-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-sha1-hash-in-tar-bz2-archive-list wrong-file-sha1-hash-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300370530ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-gz-archive/000077500000000000000000000000001251036066300265305ustar00rootroot00000000000000wrong-file-sha1-hash-in-tar-gz-archive-list000066400000000000000000000000551251036066300364160ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| sha1|e24 wrong-file-sha1-hash-in-tar-gz-archive.conf000066400000000000000000000002531251036066300363710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-gz-archive[main] name=wrong-file-sha1-hash-in-tar-gz-archive type=archive path=wrong-file-sha1-hash-in-tar-gz-archive.tar.gz files_list=wrong-file-sha1-hash-in-tar-gz-archive-list wrong-file-sha1-hash-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300366460ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/000077500000000000000000000000001251036066300246445ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/tree/000077500000000000000000000000001251036066300256035ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/tree/bar000066400000000000000000000000041251036066300262640ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/tree/dir/000077500000000000000000000000001251036066300263615ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300271450ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/tree/foo000066400000000000000000000000031251036066300263020ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/wrong-file-sha1-hash-in-tree-list000066400000000000000000000000321251036066300327200ustar00rootroot00000000000000[files] dir/foo2| sha1|f5 backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-tree/wrong-file-sha1-hash-in-tree.conf000066400000000000000000000001531251036066300326770ustar00rootroot00000000000000[main] name=wrong-file-sha1-hash-in-tree type=tree path=tree files_list=wrong-file-sha1-hash-in-tree-list backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-xz-archive/000077500000000000000000000000001251036066300257655ustar00rootroot00000000000000wrong-file-sha1-hash-in-xz-archive-list000066400000000000000000000000721251036066300351070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-xz-archive[files] wrong-file-sha1-hash-in-xz-archive| sha1|1c8c6df5 wrong-file-sha1-hash-in-xz-archive.conf000066400000000000000000000002341251036066300350620ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-xz-archive[main] name=wrong-file-sha1-hash-in-xz-archive type=archive path=wrong-file-sha1-hash-in-xz-archive.xz files_list=wrong-file-sha1-hash-in-xz-archive-list wrong-file-sha1-hash-in-xz-archive.xz000066400000000000000000000001101251036066300345670ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-xz-archive7zXZִF!t/this is a file drl'j}YZbackupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-zip-archive/000077500000000000000000000000001251036066300261265ustar00rootroot00000000000000wrong-file-sha1-hash-in-zip-archive-list000066400000000000000000000000611251036066300354070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-zip-archive[files] file-missing-in-zip/foo2/bar2| sha1|55ca wrong-file-sha1-hash-in-zip-archive.conf000066400000000000000000000002401251036066300353610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-zip-archive[main] name=wrong-file-sha1-hash-in-zip-archive type=archive path=wrong-file-sha1-hash-in-zip-archive.zip files_list=wrong-file-sha1-hash-in-zip-archive-list wrong-file-sha1-hash-in-zip-archive.zip000066400000000000000000000016201251036066300352410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha1-hash-in-zip-archivePK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-bzip2-archive/000077500000000000000000000000001251036066300265215ustar00rootroot00000000000000wrong-file-sha224-hash-in-bzip2-archive-list000066400000000000000000000000751251036066300364020ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-bzip2-archive[files] wrong-file-sha224-hash-in-bzip2-archive| sha224|5345 wrong-file-sha224-hash-in-bzip2-archive.bz2000066400000000000000000000001751251036066300361260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-bzip2-archiveBZh91AY&SY ]@ >ޠ hD4jcD=&TSS%_Oj2=vRLns ْ,/6/z4x]e50u\=]dE-)„OD0wrong-file-sha224-hash-in-bzip2-archive.conf000066400000000000000000000002541251036066300363540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-bzip2-archive[main] name=wrong-file-sha224-hash-in-bzip2-archive type=archive path=wrong-file-sha224-hash-in-bzip2-archive.bz2 files_list=wrong-file-sha224-hash-in-bzip2-archive-list backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-gz-archive/000077500000000000000000000000001251036066300261135ustar00rootroot00000000000000wrong-file-sha224-hash-in-gz-archive-list000066400000000000000000000000731251036066300353640ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-gz-archive[files] wrong-file-md5-hash-in-gz-archive| sha224|37c1e3c4 wrong-file-sha224-hash-in-gz-archive.conf000066400000000000000000000002421251036066300353350ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-gz-archive[main] name=wrong-file-sha224-hash-in-gz-archive type=archive path=wrong-file-sha224-hash-in-gz-archive.gz files_list=wrong-file-sha224-hash-in-gz-archive-list wrong-file-sha224-hash-in-gz-archive.gz000066400000000000000000000001121251036066300350240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-gz-archiveINwrong-file-md5-hash-in-gz-archiveTH/,V H,Q/V(-Lbackupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-archive/000077500000000000000000000000001251036066300262615ustar00rootroot00000000000000wrong-file-sha224-hash-in-tar-archive-list000066400000000000000000000000271251036066300356770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-archive[files] foo| sha224|77 wrong-file-sha224-hash-in-tar-archive.conf000066400000000000000000000002451251036066300356540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-archive[main] name=wrong-file-sha224-hash-in-tar-archive type=archive path=wrong-file-sha224-hash-in-tar-archive.tar files_list=wrong-file-sha224-hash-in-tar-archive-list wrong-file-sha224-hash-in-tar-archive.tar000066400000000000000000000740001251036066300355150ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-bz2-archive/000077500000000000000000000000001251036066300267545ustar00rootroot00000000000000wrong-file-sha224-hash-in-tar-bz2-archive-list000066400000000000000000000000611251036066300370630ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| sha224|6ca3 wrong-file-sha224-hash-in-tar-bz2-archive.conf000066400000000000000000000002661251036066300370450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-bz2-archive[main] name=wrong-file-sha224-hash-in-tar-bz2-archive type=archive path=wrong-file-sha224-hash-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-sha224-hash-in-tar-bz2-archive-list wrong-file-sha224-hash-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300373710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-gz-archive/000077500000000000000000000000001251036066300266775ustar00rootroot00000000000000wrong-file-sha224-hash-in-tar-gz-archive-list000066400000000000000000000000571251036066300367360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| sha224|6ca wrong-file-sha224-hash-in-tar-gz-archive.conf000066400000000000000000000002611251036066300367060ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-gz-archive[main] name=wrong-file-sha224-hash-in-tar-gz-archive type=archive path=wrong-file-sha224-hash-in-tar-gz-archive.tar.gz files_list=wrong-file-sha224-hash-in-tar-gz-archive-list wrong-file-sha224-hash-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300371640ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree/000077500000000000000000000000001251036066300250135ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree/tree/000077500000000000000000000000001251036066300257525ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree/tree/bar000066400000000000000000000000041251036066300264330ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree/tree/dir/000077500000000000000000000000001251036066300265305ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300273140ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree/tree/foo000066400000000000000000000000031251036066300264510ustar00rootroot00000000000000hi wrong-file-sha224-hash-in-tree-list000066400000000000000000000000401251036066300331560ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree[files] dir/foo2| sha224|2d6d67 wrong-file-sha224-hash-in-tree.conf000066400000000000000000000001571251036066300331420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-tree[main] name=wrong-file-sha224-hash-in-tree type=tree path=tree files_list=wrong-file-sha224-hash-in-tree-list backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-xz-archive/000077500000000000000000000000001251036066300261345ustar00rootroot00000000000000wrong-file-sha224-hash-in-xz-archive-list000066400000000000000000000000761251036066300354310ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-xz-archive[files] wrong-file-sha224-hash-in-xz-archive| sha224|37c1e3c4 wrong-file-sha224-hash-in-xz-archive.conf000066400000000000000000000002421251036066300353770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-xz-archive[main] name=wrong-file-sha224-hash-in-xz-archive type=archive path=wrong-file-sha224-hash-in-xz-archive.xz files_list=wrong-file-sha224-hash-in-xz-archive-list wrong-file-sha224-hash-in-xz-archive.xz000066400000000000000000000001101251036066300351050ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-xz-archive7zXZִF!t/this is a file drl'j}YZbackupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-zip-archive/000077500000000000000000000000001251036066300262755ustar00rootroot00000000000000wrong-file-sha224-hash-in-zip-archive-list000066400000000000000000000000631251036066300357270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-zip-archive[files] file-missing-in-zip/foo2/bar2| sha224|0689 wrong-file-sha224-hash-in-zip-archive.conf000066400000000000000000000002461251036066300357050ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-zip-archive[main] name=wrong-file-sha224-hash-in-zip-archive type=archive path=wrong-file-sha224-hash-in-zip-archive.zip files_list=wrong-file-sha224-hash-in-zip-archive-list wrong-file-sha224-hash-in-zip-archive.zip000066400000000000000000000016201251036066300355570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha224-hash-in-zip-archivePK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-bzip2-archive/000077500000000000000000000000001251036066300265265ustar00rootroot00000000000000wrong-file-sha256-hash-in-bzip2-archive-list000066400000000000000000000000751251036066300364140ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-bzip2-archive[files] wrong-file-sha256-hash-in-bzip2-archive| sha256|a8d4 wrong-file-sha256-hash-in-bzip2-archive.bz2000066400000000000000000000001751251036066300361400ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-bzip2-archiveBZh91AY&SY ]@ >ޠ hD4jcD=&TSS%_Oj2=vRLns ْ,/6/z4x]e50u\=]dE-)„OD0wrong-file-sha256-hash-in-bzip2-archive.conf000066400000000000000000000002541251036066300363660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-bzip2-archive[main] name=wrong-file-sha256-hash-in-bzip2-archive type=archive path=wrong-file-sha256-hash-in-bzip2-archive.bz2 files_list=wrong-file-sha256-hash-in-bzip2-archive-list backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-gz-archive/000077500000000000000000000000001251036066300261205ustar00rootroot00000000000000wrong-file-sha256-hash-in-gz-archive-list000066400000000000000000000000721251036066300353750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-gz-archive[files] wrong-file-md5-hash-in-gz-archive| sha256|81021e6 wrong-file-sha256-hash-in-gz-archive.conf000066400000000000000000000002421251036066300353470ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-gz-archive[main] name=wrong-file-sha256-hash-in-gz-archive type=archive path=wrong-file-sha256-hash-in-gz-archive.gz files_list=wrong-file-sha256-hash-in-gz-archive-list wrong-file-sha256-hash-in-gz-archive.gz000066400000000000000000000001121251036066300350360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-gz-archiveINwrong-file-md5-hash-in-gz-archiveTH/,V H,Q/V(-Lbackupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-archive/000077500000000000000000000000001251036066300262665ustar00rootroot00000000000000wrong-file-sha256-hash-in-tar-archive-list000066400000000000000000000000261251036066300357100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-archive[files] foo| sha256|0 wrong-file-sha256-hash-in-tar-archive.conf000066400000000000000000000002451251036066300356660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-archive[main] name=wrong-file-sha256-hash-in-tar-archive type=archive path=wrong-file-sha256-hash-in-tar-archive.tar files_list=wrong-file-sha256-hash-in-tar-archive-list wrong-file-sha256-hash-in-tar-archive.tar000066400000000000000000000740001251036066300355270ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-bz2-archive/000077500000000000000000000000001251036066300267615ustar00rootroot00000000000000wrong-file-sha256-hash-in-tar-bz2-archive-list000066400000000000000000000000601251036066300370740ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| sha256|7d8 wrong-file-sha256-hash-in-tar-bz2-archive.conf000066400000000000000000000002661251036066300370570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-bz2-archive[main] name=wrong-file-sha256-hash-in-tar-bz2-archive type=archive path=wrong-file-sha256-hash-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-sha256-hash-in-tar-bz2-archive-list wrong-file-sha256-hash-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300374030ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-gz-archive/000077500000000000000000000000001251036066300267045ustar00rootroot00000000000000wrong-file-sha224-hash-in-tar-gz-archive-list000066400000000000000000000000621251036066300367370ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| sha224|6ca35c wrong-file-sha224-hash-in-tar-gz-archive.conf000066400000000000000000000002611251036066300367130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-gz-archive[main] name=wrong-file-sha224-hash-in-tar-gz-archive type=archive path=wrong-file-sha224-hash-in-tar-gz-archive.tar.gz files_list=wrong-file-sha224-hash-in-tar-gz-archive-list wrong-file-sha224-hash-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300371710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree/000077500000000000000000000000001251036066300250205ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree/tree/000077500000000000000000000000001251036066300257575ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree/tree/bar000066400000000000000000000000041251036066300264400ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree/tree/dir/000077500000000000000000000000001251036066300265355ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300273210ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree/tree/foo000066400000000000000000000000031251036066300264560ustar00rootroot00000000000000hi wrong-file-sha256-hash-in-tree-list000066400000000000000000000000371251036066300331760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree[files] dir/foo2| sha256|5891b wrong-file-sha256-hash-in-tree.conf000066400000000000000000000001571251036066300331540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-tree[main] name=wrong-file-sha256-hash-in-tree type=tree path=tree files_list=wrong-file-sha256-hash-in-tree-list backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-xz-archive/000077500000000000000000000000001251036066300261415ustar00rootroot00000000000000wrong-file-sha256-hash-in-xz-archive-list000066400000000000000000000000751251036066300354420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-xz-archive[files] wrong-file-sha256-hash-in-xz-archive| sha256|81021e6 wrong-file-sha256-hash-in-xz-archive.conf000066400000000000000000000002421251036066300354110ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-xz-archive[main] name=wrong-file-sha256-hash-in-xz-archive type=archive path=wrong-file-sha256-hash-in-xz-archive.xz files_list=wrong-file-sha256-hash-in-xz-archive-list wrong-file-sha256-hash-in-xz-archive.xz000066400000000000000000000001101251036066300351170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-xz-archive7zXZִF!t/this is a file drl'j}YZbackupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-zip-archive/000077500000000000000000000000001251036066300263025ustar00rootroot00000000000000wrong-file-sha256-hash-in-zip-archive-list000066400000000000000000000000631251036066300357410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-zip-archive[files] file-missing-in-zip/foo2/bar2| sha256|98ea wrong-file-sha256-hash-in-zip-archive.conf000066400000000000000000000002461251036066300357170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-zip-archive[main] name=wrong-file-sha256-hash-in-zip-archive type=archive path=wrong-file-sha256-hash-in-zip-archive.zip files_list=wrong-file-sha256-hash-in-zip-archive-list wrong-file-sha256-hash-in-zip-archive.zip000066400000000000000000000016201251036066300355710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha256-hash-in-zip-archivePK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-bzip2-archive/000077500000000000000000000000001251036066300265305ustar00rootroot00000000000000wrong-file-sha384-hash-in-bzip2-archive-list000066400000000000000000000001001251036066300364050ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-bzip2-archive[files] wrong-file-sha384-hash-in-bzip2-archive| sha384|9712627 wrong-file-sha384-hash-in-bzip2-archive.bz2000066400000000000000000000001751251036066300361440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-bzip2-archiveBZh91AY&SY ]@ >ޠ hD4jcD=&TSS%_Oj2=vRLns ْ,/6/z4x]e50u\=]dE-)„OD0wrong-file-sha384-hash-in-bzip2-archive.conf000066400000000000000000000002541251036066300363720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-bzip2-archive[main] name=wrong-file-sha384-hash-in-bzip2-archive type=archive path=wrong-file-sha384-hash-in-bzip2-archive.bz2 files_list=wrong-file-sha384-hash-in-bzip2-archive-list backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-gz-archive/000077500000000000000000000000001251036066300261225ustar00rootroot00000000000000wrong-file-sha384-hash-in-gz-archive-list000066400000000000000000000000751251036066300354040ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-gz-archive[files] wrong-file-md5-hash-in-gz-archive| sha384|e1cfc35a18 wrong-file-sha384-hash-in-gz-archive.conf000066400000000000000000000002421251036066300353530ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-gz-archive[main] name=wrong-file-sha384-hash-in-gz-archive type=archive path=wrong-file-sha384-hash-in-gz-archive.gz files_list=wrong-file-sha384-hash-in-gz-archive-list wrong-file-sha384-hash-in-gz-archive.gz000066400000000000000000000001121251036066300350420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-gz-archiveINwrong-file-md5-hash-in-gz-archiveTH/,V H,Q/V(-Lbackupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-archive/000077500000000000000000000000001251036066300262705ustar00rootroot00000000000000wrong-file-sha384-hash-in-tar-archive-list000066400000000000000000000000261251036066300357140ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-archive[files] foo| sha384|4 wrong-file-sha384-hash-in-tar-archive.conf000066400000000000000000000002451251036066300356720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-archive[main] name=wrong-file-sha384-hash-in-tar-archive type=archive path=wrong-file-sha384-hash-in-tar-archive.tar files_list=wrong-file-sha384-hash-in-tar-archive-list wrong-file-sha384-hash-in-tar-archive.tar000066400000000000000000000740001251036066300355330ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-bz2-archive/000077500000000000000000000000001251036066300267635ustar00rootroot00000000000000wrong-file-sha384-hash-in-tar-bz2-archive-list000066400000000000000000000000611251036066300371010ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| sha384|93ae wrong-file-sha384-hash-in-tar-bz2-archive.conf000066400000000000000000000002661251036066300370630ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-bz2-archive[main] name=wrong-file-sha384-hash-in-tar-bz2-archive type=archive path=wrong-file-sha384-hash-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-sha384-hash-in-tar-bz2-archive-list wrong-file-sha384-hash-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300374070ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-gz-archive/000077500000000000000000000000001251036066300267065ustar00rootroot00000000000000wrong-file-sha384-hash-in-tar-gz-archive-list000066400000000000000000000000601251036066300367460ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| sha384|93ae wrong-file-sha384-hash-in-tar-gz-archive.conf000066400000000000000000000002611251036066300367240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-gz-archive[main] name=wrong-file-sha384-hash-in-tar-gz-archive type=archive path=wrong-file-sha384-hash-in-tar-gz-archive.tar.gz files_list=wrong-file-sha384-hash-in-tar-gz-archive-list wrong-file-sha384-hash-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300372020ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree/000077500000000000000000000000001251036066300250225ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree/tree/000077500000000000000000000000001251036066300257615ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree/tree/bar000066400000000000000000000000041251036066300264420ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree/tree/dir/000077500000000000000000000000001251036066300265375ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300273230ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree/tree/foo000066400000000000000000000000031251036066300264600ustar00rootroot00000000000000hi wrong-file-sha384-hash-in-tree-list000066400000000000000000000000351251036066300332000ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree[files] dir/foo2| sha384|1d0 wrong-file-sha384-hash-in-tree.conf000066400000000000000000000001571251036066300331600ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-tree[main] name=wrong-file-sha384-hash-in-tree type=tree path=tree files_list=wrong-file-sha384-hash-in-tree-list backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-xz-archive/000077500000000000000000000000001251036066300261435ustar00rootroot00000000000000wrong-file-sha384-hash-in-xz-archive-list000066400000000000000000000001001251036066300354330ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-xz-archive[files] wrong-file-sha384-hash-in-xz-archive| sha384|e1cfc35a18 wrong-file-sha384-hash-in-xz-archive.conf000066400000000000000000000002421251036066300354150ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-xz-archive[main] name=wrong-file-sha384-hash-in-xz-archive type=archive path=wrong-file-sha384-hash-in-xz-archive.xz files_list=wrong-file-sha384-hash-in-xz-archive-list wrong-file-sha384-hash-in-xz-archive.xz000066400000000000000000000001101251036066300351230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-xz-archive7zXZִF!t/this is a file drl'j}YZbackupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-zip-archive/000077500000000000000000000000001251036066300263045ustar00rootroot00000000000000wrong-file-sha384-hash-in-zip-archive-list000066400000000000000000000000631251036066300357450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-zip-archive[files] file-missing-in-zip/foo2/bar2| sha384|4284 wrong-file-sha384-hash-in-zip-archive.conf000066400000000000000000000002461251036066300357230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-zip-archive[main] name=wrong-file-sha384-hash-in-zip-archive type=archive path=wrong-file-sha384-hash-in-zip-archive.zip files_list=wrong-file-sha384-hash-in-zip-archive-list wrong-file-sha384-hash-in-zip-archive.zip000066400000000000000000000016201251036066300355750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha384-hash-in-zip-archivePK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-bzip2-archive/000077500000000000000000000000001251036066300265215ustar00rootroot00000000000000wrong-file-sha512-hash-in-bzip2-archive-list000066400000000000000000000000761251036066300364030ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-bzip2-archive[files] wrong-file-sha512-hash-in-bzip2-archive| sha512|c2f64 wrong-file-sha512-hash-in-bzip2-archive.bz2000066400000000000000000000001751251036066300361260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-bzip2-archiveBZh91AY&SY ]@ >ޠ hD4jcD=&TSS%_Oj2=vRLns ْ,/6/z4x]e50u\=]dE-)„OD0wrong-file-sha512-hash-in-bzip2-archive.conf000066400000000000000000000002541251036066300363540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-bzip2-archive[main] name=wrong-file-sha512-hash-in-bzip2-archive type=archive path=wrong-file-sha512-hash-in-bzip2-archive.bz2 files_list=wrong-file-sha512-hash-in-bzip2-archive-list backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-gz-archive/000077500000000000000000000000001251036066300261135ustar00rootroot00000000000000wrong-file-sha512-hash-in-gz-archive-list000066400000000000000000000000761251036066300353670ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-gz-archive[files] wrong-file-md5-hash-in-gz-archive| sha512|0b5fead4f8f wrong-file-sha512-hash-in-gz-archive.conf000066400000000000000000000002421251036066300353350ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-gz-archive[main] name=wrong-file-sha512-hash-in-gz-archive type=archive path=wrong-file-sha512-hash-in-gz-archive.gz files_list=wrong-file-sha512-hash-in-gz-archive-list wrong-file-sha512-hash-in-gz-archive.gz000066400000000000000000000001121251036066300350240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-gz-archiveINwrong-file-md5-hash-in-gz-archiveTH/,V H,Q/V(-Lbackupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-archive/000077500000000000000000000000001251036066300262615ustar00rootroot00000000000000wrong-file-sha512-hash-in-tar-archive-list000066400000000000000000000000261251036066300356760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-archive[files] foo| sha512|8 wrong-file-sha512-hash-in-tar-archive.conf000066400000000000000000000002451251036066300356540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-archive[main] name=wrong-file-sha512-hash-in-tar-archive type=archive path=wrong-file-sha512-hash-in-tar-archive.tar files_list=wrong-file-sha512-hash-in-tar-archive-list wrong-file-sha512-hash-in-tar-archive.tar000066400000000000000000000740001251036066300355150ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-archivefoo0000644000175000017500000003600011660310231010756 0ustar chaicachaicabar0000644000175000017500000001600011660310243010740 0ustar chaicachaicabackupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-bz2-archive/000077500000000000000000000000001251036066300267545ustar00rootroot00000000000000wrong-file-sha512-hash-in-tar-bz2-archive-list000066400000000000000000000000571251036066300370700ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| sha512|cc wrong-file-sha512-hash-in-tar-bz2-archive.conf000066400000000000000000000002661251036066300370450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-bz2-archive[main] name=wrong-file-sha512-hash-in-tar-bz2-archive type=archive path=wrong-file-sha512-hash-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-sha512-hash-in-tar-bz2-archive-list wrong-file-sha512-hash-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300373710ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-gz-archive/000077500000000000000000000000001251036066300266775ustar00rootroot00000000000000wrong-file-sha512-hash-in-tar-gz-archive-list000066400000000000000000000000601251036066300367300ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| sha512|cc06 wrong-file-sha512-hash-in-tar-gz-archive.conf000066400000000000000000000002611251036066300367060ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-gz-archive[main] name=wrong-file-sha512-hash-in-tar-gz-archive type=archive path=wrong-file-sha512-hash-in-tar-gz-archive.tar.gz files_list=wrong-file-sha512-hash-in-tar-gz-archive-list wrong-file-sha512-hash-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300371640ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree/000077500000000000000000000000001251036066300250135ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree/tree/000077500000000000000000000000001251036066300257525ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree/tree/bar000066400000000000000000000000041251036066300264330ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree/tree/dir/000077500000000000000000000000001251036066300265305ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300273140ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree/tree/foo000066400000000000000000000000031251036066300264510ustar00rootroot00000000000000hi wrong-file-sha512-hash-in-tree-list000066400000000000000000000000421251036066300331600ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree[files] dir/foo2| sha512|e7c22b99 wrong-file-sha512-hash-in-tree.conf000066400000000000000000000001571251036066300331420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-tree[main] name=wrong-file-sha512-hash-in-tree type=tree path=tree files_list=wrong-file-sha512-hash-in-tree-list backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-xz-archive/000077500000000000000000000000001251036066300261345ustar00rootroot00000000000000wrong-file-sha512-hash-in-xz-archive-list000066400000000000000000000001011251036066300354160ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-xz-archive[files] wrong-file-sha512-hash-in-xz-archive| sha512|0b5fead4f8f wrong-file-sha512-hash-in-xz-archive.conf000066400000000000000000000002421251036066300353770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-xz-archive[main] name=wrong-file-sha512-hash-in-xz-archive type=archive path=wrong-file-sha512-hash-in-xz-archive.xz files_list=wrong-file-sha512-hash-in-xz-archive-list wrong-file-sha512-hash-in-xz-archive.xz000066400000000000000000000001101251036066300351050ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-xz-archive7zXZִF!t/this is a file drl'j}YZbackupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-zip-archive/000077500000000000000000000000001251036066300262755ustar00rootroot00000000000000wrong-file-sha512-hash-in-zip-archive-list000066400000000000000000000000621251036066300357260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-zip-archive[files] file-missing-in-zip/foo2/bar2| sha512|d78 wrong-file-sha512-hash-in-zip-archive.conf000066400000000000000000000002461251036066300357050ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-zip-archive[main] name=wrong-file-sha512-hash-in-zip-archive type=archive path=wrong-file-sha512-hash-in-zip-archive.zip files_list=wrong-file-sha512-hash-in-zip-archive-list wrong-file-sha512-hash-in-zip-archive.zip000066400000000000000000000016201251036066300355570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-sha512-hash-in-zip-archivePK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-bz2-archive/000077500000000000000000000000001251036066300262325ustar00rootroot00000000000000wrong-file-type-d-in-tar-bz2-archive-list000066400000000000000000000000541251036066300356210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| type|d wrong-file-type-d-in-tar-bz2-archive.conf000066400000000000000000000002471251036066300356000ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-bz2-archive[main] name=wrong-file-type-d-in-tar-bz2-archive type=archive path=wrong-file-type-d-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-type-d-in-tar-bz2-archive-list wrong-file-type-d-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300361250ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-gz-archive/000077500000000000000000000000001251036066300261555ustar00rootroot00000000000000wrong-file-type-d-in-tar-gz-archive-list000066400000000000000000000000531251036066300354660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| type|d wrong-file-type-d-in-tar-gz-archive.conf000066400000000000000000000002431251036066300354420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-gz-archive[main] name=wrong-file-type-d-in-tar-gz-archive type=archive path=wrong-file-type-d-in-tar-gz-archive.tar.gz files_list=wrong-file-type-d-in-tar-gz-archive-list wrong-file-type-d-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300357200ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/000077500000000000000000000000001251036066300242715ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/tree/000077500000000000000000000000001251036066300252305ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/tree/bar000066400000000000000000000000041251036066300257110ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/tree/dir/000077500000000000000000000000001251036066300260065ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300265720ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/tree/foo000066400000000000000000000000031251036066300257270ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/wrong-file-type-d-in-tree-list000066400000000000000000000000311251036066300317710ustar00rootroot00000000000000[files] dir/foo2| type|d backupchecker-1.7/functional-tests/wrong-file-type-d-in-tree/wrong-file-type-d-in-tree.conf000066400000000000000000000001451251036066300317520ustar00rootroot00000000000000[main] name=wrong-file-type-d-in-tree type=tree path=tree files_list=wrong-file-type-d-in-tree-list backupchecker-1.7/functional-tests/wrong-file-type-d-in-zip-archive/000077500000000000000000000000001251036066300255535ustar00rootroot00000000000000wrong-file-type-d-in-zip-archive-list000066400000000000000000000000561251036066300344650ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-zip-archive[files] file-missing-in-zip/foo2/bar2| type|d wrong-file-type-d-in-zip-archive.conf000066400000000000000000000002271251036066300344400ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-zip-archive[main] name=wrong-file-type-d-in-zip-archive type=archive path=wrong-file-type-d-in-zip-archive.zip files_list=wrong-file-type-d-in-zip-archive-list wrong-file-type-d-in-zip-archive.zip000066400000000000000000000016201251036066300343130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-d-in-zip-archivePK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-bz2-archive/000077500000000000000000000000001251036066300262345ustar00rootroot00000000000000wrong-file-type-f-in-tar-bz2-archive-list000066400000000000000000000000501251036066300356210ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-bz2-archive[files] file-missing-in-tar-bz2| type|f wrong-file-type-f-in-tar-bz2-archive.conf000066400000000000000000000002471251036066300356040ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-bz2-archive[main] name=wrong-file-type-f-in-tar-bz2-archive type=archive path=wrong-file-type-f-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-type-f-in-tar-bz2-archive-list wrong-file-type-f-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300361310ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-gz-archive/000077500000000000000000000000001251036066300261575ustar00rootroot00000000000000wrong-file-type-f-in-tar-gz-archive-list000066400000000000000000000000471251036066300354750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-gz-archive[files] file-missing-in-tar-gz| type|f wrong-file-type-f-in-tar-gz-archive.conf000066400000000000000000000002431251036066300354460ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-gz-archive[main] name=wrong-file-type-f-in-tar-gz-archive type=archive path=wrong-file-type-f-in-tar-gz-archive.tar.gz files_list=wrong-file-type-f-in-tar-gz-archive-list wrong-file-type-f-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300357240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-f-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-bz2-archive/000077500000000000000000000000001251036066300262425ustar00rootroot00000000000000wrong-file-type-l-in-tar-bz2-archive.conf000066400000000000000000000002471251036066300356200ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-bz2-archive[main] name=wrong-file-type-l-in-tar-bz2-archive type=archive path=wrong-file-type-l-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-type-l-in-tar-bz2-archive.list wrong-file-type-l-in-tar-bz2-archive.list000066400000000000000000000000711251036066300356410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-bz2-archive[files] wrong-file-type-l-in-tar-bz2-archive/foo| type|f wrong-file-type-l-in-tar-bz2-archive.tar.bz2000066400000000000000000000003251251036066300361520ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-bz2-archiveBZh91AY&SYy@{߰0֐#M4d`)CMdSPhh#'LꞦ,b@ f"IPԩظ_5f JZԺ%-fOmZ LzCqda; ] 옚RpıiiYYtX)„^Xbackupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-gz-archive/000077500000000000000000000000001251036066300261655ustar00rootroot00000000000000wrong-file-type-l-in-tar-gz-archive.conf000066400000000000000000000002431251036066300354620ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-gz-archive[main] name=wrong-file-type-l-in-tar-gz-archive type=archive path=wrong-file-type-l-in-tar-gz-archive.tar.gz files_list=wrong-file-type-l-in-tar-gz-archive.list wrong-file-type-l-in-tar-gz-archive.list000066400000000000000000000000701251036066300355060ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-gz-archive[files] wrong-file-type-l-in-tar-gz-archive/foo| type|f wrong-file-type-l-in-tar-gz-archive.tar.gz000066400000000000000000000003021251036066300357360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-gz-archiveiRK 0@,%|K[ CWNJEAps1uUfwT3movi4٤\jfW<%z{?ogE~Wjuj:Y;rte >ߓr7>E0v"P(-ʖ(backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-xz-archive/000077500000000000000000000000001251036066300262065ustar00rootroot00000000000000wrong-file-type-l-in-tar-xz-archive.conf000066400000000000000000000002431251036066300355240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-xz-archive[main] name=wrong-file-type-l-in-tar-xz-archive type=archive path=wrong-file-type-l-in-tar-xz-archive.tar.xz files_list=wrong-file-type-l-in-tar-xz-archive.list wrong-file-type-l-in-tar-xz-archive.list000066400000000000000000000000701251036066300355500ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-xz-archive[files] wrong-file-type-l-in-tar-xz-archive/foo| type|f wrong-file-type-l-in-tar-xz-archive.tar.xz000066400000000000000000000003541251036066300360300ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tar-xz-archive7zXZִF!t/'];"a@nԧrAU4SP gVRIȓR^nqnvͬ"`&l=Ž^üej-%Fmi;5 :Efieq#HGa8+cġsMrP>gYZbackupchecker-1.7/functional-tests/wrong-file-type-l-in-tree/000077500000000000000000000000001251036066300243015ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-l-in-tree/wrong-file-type-l-in-tree.conf000066400000000000000000000001721251036066300317720ustar00rootroot00000000000000[main] name=wrong-file-type-l-in-tree type=tree path=wrong-file-type-l-in-tree files_list=wrong-file-type-l-in-tree.list backupchecker-1.7/functional-tests/wrong-file-type-l-in-tree/wrong-file-type-l-in-tree.list000066400000000000000000000000241251036066300320140ustar00rootroot00000000000000[files] bar| type|f backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-bz2-archive/000077500000000000000000000000001251036066300262515ustar00rootroot00000000000000wrong-file-type-s-in-tar-bz2-archive.conf000066400000000000000000000002471251036066300356360ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-bz2-archive[main] name=wrong-file-type-s-in-tar-bz2-archive type=archive path=wrong-file-type-s-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-type-s-in-tar-bz2-archive.list wrong-file-type-s-in-tar-bz2-archive.list000066400000000000000000000000711251036066300356570ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-bz2-archive[files] wrong-file-type-s-in-tar-bz2-archive/bar| type|f wrong-file-type-s-in-tar-bz2-archive.tar.bz2000066400000000000000000000003331251036066300361670ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-bz2-archiveBZh91AY&SYF{@{߰0٠M2M #L4Bh5'zSe=53PSuǾgO+G/.\6Y"ɇt~ /^{$ PC"'Ab ɭQ6 b;MWOQhkLh%[WpsssD?ܑN$Cрbackupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-gz-archive/000077500000000000000000000000001251036066300261745ustar00rootroot00000000000000wrong-file-type-s-in-tar-gz-archive.conf000066400000000000000000000002431251036066300355000ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-gz-archive[main] name=wrong-file-type-s-in-tar-gz-archive type=archive path=wrong-file-type-s-in-tar-gz-archive.tar.gz files_list=wrong-file-type-s-in-tar-gz-archive.list wrong-file-type-s-in-tar-gz-archive.list000066400000000000000000000000701251036066300355240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-gz-archive[files] wrong-file-type-s-in-tar-gz-archive/bar| type|f wrong-file-type-s-in-tar-gz-archive.tar.gz000066400000000000000000000003031251036066300357550ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-gz-archivewR 0]n`4ms׳ğAhuitbDz 6/wmS2 5<.Uh;U=:܊XIӚ8N.ƉTk#]pk?N+kr?o|O[ƻsǭ˄L˶hy_683&qVHь?y g\(backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-xz-archive/000077500000000000000000000000001251036066300262155ustar00rootroot00000000000000wrong-file-type-s-in-tar-xz-archive.conf000066400000000000000000000002431251036066300355420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-xz-archive[main] name=wrong-file-type-s-in-tar-xz-archive type=archive path=wrong-file-type-s-in-tar-xz-archive.tar.xz files_list=wrong-file-type-s-in-tar-xz-archive.list wrong-file-type-s-in-tar-xz-archive.list000066400000000000000000000000701251036066300355660ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-xz-archive[files] wrong-file-type-s-in-tar-xz-archive/bar| type|f wrong-file-type-s-in-tar-xz-archive.tar.xz000066400000000000000000000003641251036066300360470ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tar-xz-archive7zXZִF!t/'];"a@n o,:䏿3Ƴ4GKʜMZA,&'p'D" X6ylUN[Oo'J֦çnNq,6 ?P| hV=h_Pipli}$,tE'`cɈZb.8̽މ@L,PymgYZbackupchecker-1.7/functional-tests/wrong-file-type-s-in-tree/000077500000000000000000000000001251036066300243105ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tree/wrong-file-type-s-in-tree.conf000066400000000000000000000001721251036066300320100ustar00rootroot00000000000000[main] name=wrong-file-type-s-in-tree type=tree path=wrong-file-type-s-in-tree files_list=wrong-file-type-s-in-tree.list backupchecker-1.7/functional-tests/wrong-file-type-s-in-tree/wrong-file-type-s-in-tree.list000066400000000000000000000000241251036066300320320ustar00rootroot00000000000000[files] bar| type|f backupchecker-1.7/functional-tests/wrong-file-type-s-in-tree/wrong-file-type-s-in-tree/000077500000000000000000000000001251036066300311415ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tree/wrong-file-type-s-in-tree/bar000077700000000000000000000000001251036066300323312fooustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-type-s-in-tree/wrong-file-type-s-in-tree/foo000066400000000000000000000000001251036066300316350ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-archive/000077500000000000000000000000001251036066300251165ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-archive/wrong-file-uid-in-tar-archive-list000066400000000000000000000000261251036066300334470ustar00rootroot00000000000000[files] foo| uid|1234 backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-archive/wrong-file-uid-in-tar-archive.conf000066400000000000000000000002161251036066300334230ustar00rootroot00000000000000[main] name=wrong-file-uid-in-tar-archive type=archive path=wrong-file-uid-in-tar-archive.tar files_list=wrong-file-uid-in-tar-archive-list backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-archive/wrong-file-uid-in-tar-archive.tar000066400000000000000000000240001251036066300332610ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-bz2-archive/000077500000000000000000000000001251036066300256115ustar00rootroot00000000000000wrong-file-uid-in-tar-bz2-archive-list000066400000000000000000000000561251036066300345610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-bz2-archive[files] file-missing-in-tar-bz2/bar| uid|1234 wrong-file-uid-in-tar-bz2-archive.conf000066400000000000000000000002361251036066300345340ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-bz2-archive[main] name=wrong-file-uid-in-tar-bz2-archive type=archive path=wrong-file-uid-in-tar-bz2-archive.tar.bz2 files_list=wrong-file-uid-in-tar-bz2-archive-list wrong-file-uid-in-tar-bz2-archive.tar.bz2000066400000000000000000000003201251036066300350630ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-bz2-archiveBZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-gz-archive/000077500000000000000000000000001251036066300255345ustar00rootroot00000000000000wrong-file-uid-in-tar-gz-archive-list000066400000000000000000000000551251036066300344260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-gz-archive[files] file-missing-in-tar-gz/bar| uid|1234 wrong-file-uid-in-tar-gz-archive.conf000066400000000000000000000002321251036066300343760ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-gz-archive[main] name=wrong-file-uid-in-tar-gz-archive type=archive path=wrong-file-uid-in-tar-gz-archive.tar.gz files_list=wrong-file-uid-in-tar-gz-archive-list wrong-file-uid-in-tar-gz-archive.tar.gz000066400000000000000000000003041251036066300346560ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tar-gz-archive0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+!7DP{2gYZbackupchecker-1.7/functional-tests/wrong-file-uid-in-tree/000077500000000000000000000000001251036066300236505ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tree/tree/000077500000000000000000000000001251036066300246075ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tree/tree/bar000066400000000000000000000000041251036066300252700ustar00rootroot00000000000000bye backupchecker-1.7/functional-tests/wrong-file-uid-in-tree/tree/dir/000077500000000000000000000000001251036066300253655ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-tree/tree/dir/foo2000066400000000000000000000000061251036066300261510ustar00rootroot00000000000000hello backupchecker-1.7/functional-tests/wrong-file-uid-in-tree/tree/foo000066400000000000000000000000031251036066300253060ustar00rootroot00000000000000hi backupchecker-1.7/functional-tests/wrong-file-uid-in-tree/wrong-file-uid-in-tree-list000066400000000000000000000000331251036066300307310ustar00rootroot00000000000000[files] dir/foo2| uid|1234 backupchecker-1.7/functional-tests/wrong-file-uid-in-tree/wrong-file-uid-in-tree.conf000066400000000000000000000001371251036066300307110ustar00rootroot00000000000000[main] name=wrong-file-uid-in-tree type=tree path=tree files_list=wrong-file-uid-in-tree-list backupchecker-1.7/functional-tests/wrong-file-uid-in-zip-archive/000077500000000000000000000000001251036066300251325ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-file-uid-in-zip-archive/wrong-file-uid-in-zip-archive-list000066400000000000000000000000561251036066300335020ustar00rootroot00000000000000[files] file-missing-in-zip/foo2/bar2| uid|10 backupchecker-1.7/functional-tests/wrong-file-uid-in-zip-archive/wrong-file-uid-in-zip-archive.conf000066400000000000000000000002161251036066300334530ustar00rootroot00000000000000[main] name=wrong-file-uid-in-zip-archive type=archive path=wrong-file-uid-in-zip-archive.zip files_list=wrong-file-uid-in-zip-archive-list backupchecker-1.7/functional-tests/wrong-file-uid-in-zip-archive/wrong-file-uid-in-zip-archive.zip000066400000000000000000000016201251036066300333300ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-gz-archive-gid/000077500000000000000000000000001251036066300234115ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-gid/wrong-gz-archive-gid-list000066400000000000000000000000231251036066300302320ustar00rootroot00000000000000[archive] gid| 234 backupchecker-1.7/functional-tests/wrong-gz-archive-gid/wrong-gz-archive-gid.conf000066400000000000000000000001621251036066300302110ustar00rootroot00000000000000[main] name=wrong-gz-archive-gid type=archive path=wrong-gz-archive-gid.gz files_list=wrong-gz-archive-gid-list backupchecker-1.7/functional-tests/wrong-gz-archive-gid/wrong-gz-archive-gid.gz000066400000000000000000000000671251036066300277100ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-md5-hash/000077500000000000000000000000001251036066300242545ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-md5-hash/wrong-gz-archive-md5-hash-list000066400000000000000000000000241251036066300317410ustar00rootroot00000000000000[archive] md5| 87e0 backupchecker-1.7/functional-tests/wrong-gz-archive-md5-hash/wrong-gz-archive-md5-hash.conf000066400000000000000000000002011251036066300317110ustar00rootroot00000000000000[main] name=wrong-gz-archive-md5-hash type=archive path=wrong-gz-archive-md5-hash.gz files_list=wrong-gz-archive-md5-hash-list backupchecker-1.7/functional-tests/wrong-gz-archive-md5-hash/wrong-gz-archive-md5-hash.gz000066400000000000000000000000671251036066300314160ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-mode/000077500000000000000000000000001251036066300235725ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-mode/wrong-gz-archive-mode-list000066400000000000000000000000241251036066300305750ustar00rootroot00000000000000[archive] mode| 234 backupchecker-1.7/functional-tests/wrong-gz-archive-mode/wrong-gz-archive-mode.conf000066400000000000000000000001651251036066300305560ustar00rootroot00000000000000[main] name=wrong-gz-archive-mode type=archive path=wrong-gz-archive-mode.gz files_list=wrong-gz-archive-mode-list backupchecker-1.7/functional-tests/wrong-gz-archive-mode/wrong-gz-archive-mode.gz000066400000000000000000000000671251036066300302520ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-sha1-hash/000077500000000000000000000000001251036066300244235ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-sha1-hash/wrong-gz-archive-sha1-hash-list000066400000000000000000000000261251036066300322610ustar00rootroot00000000000000[archive] sha1| 8ed94 backupchecker-1.7/functional-tests/wrong-gz-archive-sha1-hash/wrong-gz-archive-sha1-hash.conf000066400000000000000000000002041251036066300322320ustar00rootroot00000000000000[main] name=wrong-gz-archive-sha1-hash type=archive path=wrong-gz-archive-sha1-hash.gz files_list=wrong-gz-archive-sha1-hash-list backupchecker-1.7/functional-tests/wrong-gz-archive-sha1-hash/wrong-gz-archive-sha1-hash.gz000066400000000000000000000000671251036066300317340ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-sha224-hash/000077500000000000000000000000001251036066300245725ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-sha224-hash/wrong-gz-archive-sha224-hash-list000066400000000000000000000000271251036066300326000ustar00rootroot00000000000000[archive] sha224| 2af6 backupchecker-1.7/functional-tests/wrong-gz-archive-sha224-hash/wrong-gz-archive-sha224-hash.conf000066400000000000000000000002121251036066300325470ustar00rootroot00000000000000[main] name=wrong-gz-archive-sha224-hash type=archive path=wrong-gz-archive-sha224-hash.gz files_list=wrong-gz-archive-sha224-hash-list backupchecker-1.7/functional-tests/wrong-gz-archive-sha224-hash/wrong-gz-archive-sha224-hash.gz000066400000000000000000000000671251036066300322520ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-sha256-hash/000077500000000000000000000000001251036066300245775ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-sha256-hash/wrong-gz-archive-sha256-hash-list000066400000000000000000000000261251036066300326110ustar00rootroot00000000000000[archive] sha256| 8c9 backupchecker-1.7/functional-tests/wrong-gz-archive-sha256-hash/wrong-gz-archive-sha256-hash.conf000066400000000000000000000002121251036066300325610ustar00rootroot00000000000000[main] name=wrong-gz-archive-sha256-hash type=archive path=wrong-gz-archive-sha256-hash.gz files_list=wrong-gz-archive-sha256-hash-list backupchecker-1.7/functional-tests/wrong-gz-archive-sha256-hash/wrong-gz-archive-sha256-hash.gz000066400000000000000000000000671251036066300322640ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-sha384-hash/000077500000000000000000000000001251036066300246015ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-sha384-hash/wrong-gz-archive-sha384-hash-list000066400000000000000000000000301251036066300326100ustar00rootroot00000000000000[archive] sha384| 12d29 backupchecker-1.7/functional-tests/wrong-gz-archive-sha384-hash/wrong-gz-archive-sha384-hash.conf000066400000000000000000000002121251036066300325650ustar00rootroot00000000000000[main] name=wrong-gz-archive-sha384-hash type=archive path=wrong-gz-archive-sha384-hash.gz files_list=wrong-gz-archive-sha384-hash-list backupchecker-1.7/functional-tests/wrong-gz-archive-sha384-hash/wrong-gz-archive-sha384-hash.gz000066400000000000000000000000671251036066300322700ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-sha512-hash/000077500000000000000000000000001251036066300245725ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-sha512-hash/wrong-gz-archive-sha512-hash-list000066400000000000000000000000271251036066300326000ustar00rootroot00000000000000[archive] sha512| 8f18 backupchecker-1.7/functional-tests/wrong-gz-archive-sha512-hash/wrong-gz-archive-sha512-hash.conf000066400000000000000000000002121251036066300325470ustar00rootroot00000000000000[main] name=wrong-gz-archive-sha512-hash type=archive path=wrong-gz-archive-sha512-hash.gz files_list=wrong-gz-archive-sha512-hash-list backupchecker-1.7/functional-tests/wrong-gz-archive-sha512-hash/wrong-gz-archive-sha512-hash.gz000066400000000000000000000000671251036066300322520ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-gz-archive-uid/000077500000000000000000000000001251036066300234275ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-gz-archive-uid/wrong-gz-archive-uid-list000066400000000000000000000000231251036066300302660ustar00rootroot00000000000000[archive] uid| 234 backupchecker-1.7/functional-tests/wrong-gz-archive-uid/wrong-gz-archive-uid.conf000066400000000000000000000001621251036066300302450ustar00rootroot00000000000000[main] name=wrong-gz-archive-uid type=archive path=wrong-gz-archive-uid.gz files_list=wrong-gz-archive-uid-list backupchecker-1.7/functional-tests/wrong-gz-archive-uid/wrong-gz-archive-uid.gz000066400000000000000000000000671251036066300277440ustar00rootroot00000000000000`BNwrong-gz-archive-uidT(H,Q/V(-JF5backupchecker-1.7/functional-tests/wrong-tar-archive-gid/000077500000000000000000000000001251036066300235575ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-gid/wrong-tar-archive-gid-list000066400000000000000000000000241251036066300305470ustar00rootroot00000000000000[archive] gid| 1234 backupchecker-1.7/functional-tests/wrong-tar-archive-gid/wrong-tar-archive-gid.conf000066400000000000000000000001661251036066300305310ustar00rootroot00000000000000[main] name=wrong-tar-archive-gid type=archive path=wrong-tar-archive-gid.tar files_list=wrong-tar-archive-gid-list backupchecker-1.7/functional-tests/wrong-tar-archive-gid/wrong-tar-archive-gid.tar000066400000000000000000000240001251036066300303630ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-md5-hash/000077500000000000000000000000001251036066300244225ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-md5-hash/wrong-tar-archive-md5-hash-list000066400000000000000000000000211251036066300322520ustar00rootroot00000000000000[archive] md5| b backupchecker-1.7/functional-tests/wrong-tar-archive-md5-hash/wrong-tar-archive-md5-hash.conf000066400000000000000000000002051251036066300322310ustar00rootroot00000000000000[main] name=wrong-tar-archive-md5-hash type=archive path=wrong-tar-archive-md5-hash.tar files_list=wrong-tar-archive-md5-hash-list backupchecker-1.7/functional-tests/wrong-tar-archive-md5-hash/wrong-tar-archive-md5-hash.tar000066400000000000000000000240001251036066300320710ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-mode/000077500000000000000000000000001251036066300237405ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-mode/wrong-tar-archive-mode-list000066400000000000000000000000241251036066300311110ustar00rootroot00000000000000[archive] mode| 755 backupchecker-1.7/functional-tests/wrong-tar-archive-mode/wrong-tar-archive-mode.conf000066400000000000000000000001711251036066300310670ustar00rootroot00000000000000[main] name=wrong-tar-archive-mode type=archive path=wrong-tar-archive-mode.tar files_list=wrong-tar-archive-mode-list backupchecker-1.7/functional-tests/wrong-tar-archive-mode/wrong-tar-archive-mode.tar000066400000000000000000000240001251036066300307250ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-sha1-hash/000077500000000000000000000000001251036066300245715ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-sha1-hash/wrong-tar-archive-sha1-hash-list000066400000000000000000000000221251036066300325710ustar00rootroot00000000000000[archive] sha1| 4 backupchecker-1.7/functional-tests/wrong-tar-archive-sha1-hash/wrong-tar-archive-sha1-hash.conf000066400000000000000000000002101251036066300325430ustar00rootroot00000000000000[main] name=wrong-tar-archive-sha1-hash type=archive path=wrong-tar-archive-sha1-hash.tar files_list=wrong-tar-archive-sha1-hash-list backupchecker-1.7/functional-tests/wrong-tar-archive-sha1-hash/wrong-tar-archive-sha1-hash.tar000066400000000000000000000240001251036066300324070ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-sha224-hash/000077500000000000000000000000001251036066300247405ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-sha224-hash/wrong-tar-archive-sha224-hash-list000066400000000000000000000000241251036066300331110ustar00rootroot00000000000000[archive] sha224| d backupchecker-1.7/functional-tests/wrong-tar-archive-sha224-hash/wrong-tar-archive-sha224-hash.conf000066400000000000000000000002161251036066300330670ustar00rootroot00000000000000[main] name=wrong-tar-archive-sha224-hash type=archive path=wrong-tar-archive-sha224-hash.tar files_list=wrong-tar-archive-sha224-hash-list backupchecker-1.7/functional-tests/wrong-tar-archive-sha224-hash/wrong-tar-archive-sha224-hash.tar000066400000000000000000000240001251036066300327250ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-sha256-hash/000077500000000000000000000000001251036066300247455ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-sha256-hash/wrong-tar-archive-sha256-hash-list000066400000000000000000000000251251036066300331240ustar00rootroot00000000000000[archive] sha256| ac backupchecker-1.7/functional-tests/wrong-tar-archive-sha256-hash/wrong-tar-archive-sha256-hash.conf000066400000000000000000000002161251036066300331010ustar00rootroot00000000000000[main] name=wrong-tar-archive-sha256-hash type=archive path=wrong-tar-archive-sha256-hash.tar files_list=wrong-tar-archive-sha256-hash-list backupchecker-1.7/functional-tests/wrong-tar-archive-sha256-hash/wrong-tar-archive-sha256-hash.tar000066400000000000000000000240001251036066300327370ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-sha384-hash/000077500000000000000000000000001251036066300247475ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-sha384-hash/wrong-tar-archive-sha384-hash-list000066400000000000000000000000241251036066300331270ustar00rootroot00000000000000[archive] sha384| a backupchecker-1.7/functional-tests/wrong-tar-archive-sha384-hash/wrong-tar-archive-sha384-hash.conf000066400000000000000000000002161251036066300331050ustar00rootroot00000000000000[main] name=wrong-tar-archive-sha384-hash type=archive path=wrong-tar-archive-sha384-hash.tar files_list=wrong-tar-archive-sha384-hash-list backupchecker-1.7/functional-tests/wrong-tar-archive-sha384-hash/wrong-tar-archive-sha384-hash.tar000066400000000000000000000240001251036066300327430ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-sha512-hash/000077500000000000000000000000001251036066300247405ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-sha512-hash/wrong-tar-archive-sha512-hash-list000066400000000000000000000000241251036066300331110ustar00rootroot00000000000000[archive] sha512| 4 backupchecker-1.7/functional-tests/wrong-tar-archive-sha512-hash/wrong-tar-archive-sha512-hash.conf000066400000000000000000000002161251036066300330670ustar00rootroot00000000000000[main] name=wrong-tar-archive-sha512-hash type=archive path=wrong-tar-archive-sha512-hash.tar files_list=wrong-tar-archive-sha512-hash-list backupchecker-1.7/functional-tests/wrong-tar-archive-sha512-hash/wrong-tar-archive-sha512-hash.tar000066400000000000000000000240001251036066300327250ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-archive-uid/000077500000000000000000000000001251036066300235755ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-archive-uid/wrong-tar-archive-uid-list000066400000000000000000000000241251036066300306030ustar00rootroot00000000000000[archive] uid| 1234 backupchecker-1.7/functional-tests/wrong-tar-archive-uid/wrong-tar-archive-uid.conf000066400000000000000000000001661251036066300305650ustar00rootroot00000000000000[main] name=wrong-tar-archive-uid type=archive path=wrong-tar-archive-uid.tar files_list=wrong-tar-archive-uid-list backupchecker-1.7/functional-tests/wrong-tar-archive-uid/wrong-tar-archive-uid.tar000066400000000000000000000240001251036066300304170ustar00rootroot00000000000000foo0000644000175000017500000000002311660034023010754 0ustar chaicachaicathis is a foo file bar0000644000175000017500000000002311660034033010736 0ustar chaicachaicathis is a bar file backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-gid/000077500000000000000000000000001251036066300242525ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-gid/wrong-tar-bz2-archive-gid-list000066400000000000000000000000241251036066300317350ustar00rootroot00000000000000[archive] gid| 1234 backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-gid/wrong-tar-bz2-archive-gid.conf000066400000000000000000000002061251036066300317120ustar00rootroot00000000000000[main] name=wrong-tar-bz2-archive-gid type=archive path=wrong-tar-bz2-archive-gid.tar.bz2 files_list=wrong-tar-bz2-archive-gid-list backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-gid/wrong-tar-bz2-archive-gid.tar.bz2000066400000000000000000000003201251036066300322440ustar00rootroot00000000000000BZh91AY&SY6 @@{(0 24L&F 0ada20M M5i 3Q:v%V x^8oxD&ҁ y!j2fcᷳ(g6EŷV1/a%k{S=_Jl0{>_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-md5-hash/000077500000000000000000000000001251036066300251155ustar00rootroot00000000000000wrong-tar-bz2-archive-md5-hash-list000066400000000000000000000000211251036066300333610ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-md5-hash[archive] md5| 3 wrong-tar-bz2-archive-md5-hash.conf000066400000000000000000000002251251036066300333420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-md5-hash[main] name=wrong-tar-bz2-archive-md5-hash type=archive path=wrong-tar-bz2-archive-md5-hash.tar.bz2 files_list=wrong-tar-bz2-archive-md5-hash-list wrong-tar-bz2-archive-md5-hash.tar.bz2000066400000000000000000000003041251036066300336750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-md5-hash0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-sha1-hash/000077500000000000000000000000001251036066300252645ustar00rootroot00000000000000wrong-tar-bz2-archive-sha1-hash-list000066400000000000000000000000221251036066300337000ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-sha1-hash[archive] sha1| e wrong-tar-bz2-archive-sha1-hash.conf000066400000000000000000000002301251036066300336540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-sha1-hash[main] name=wrong-tar-bz2-archive-sha1-hash type=archive path=wrong-tar-bz2-archive-sha1-hash.tar.bz2 files_list=wrong-tar-bz2-archive-sha1-hash-list wrong-tar-bz2-archive-sha1-hash.tar.bz2000066400000000000000000000003041251036066300342130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-bz2-archive-sha1-hash0iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+_/FCVYurqD?ܑN$8 backupchecker-1.7/functional-tests/wrong-tar-gz-archive-gid/000077500000000000000000000000001251036066300241755ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-gz-archive-gid/wrong-tar-gz-archive-gid-list000066400000000000000000000000241251036066300316030ustar00rootroot00000000000000[archive] gid| 1234 backupchecker-1.7/functional-tests/wrong-tar-gz-archive-gid/wrong-tar-gz-archive-gid.conf000066400000000000000000000002021251036066300315540ustar00rootroot00000000000000[main] name=wrong-tar-gz-archive-gid type=archive path=wrong-tar-gz-archive-gid.tar.gz files_list=wrong-tar-gz-archive-gid-list backupchecker-1.7/functional-tests/wrong-tar-gz-archive-gid/wrong-tar-gz-archive-gid.tar.gz000066400000000000000000000003041251036066300320370ustar00rootroot000000000000000iNK 0]E6PL<mڂՉDk'R$}v}:mvnEJjV+K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-md5-hash/000077500000000000000000000000001251036066300250615ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-md5-hash/wrong-tar-xz-archive-md5-hash-list000066400000000000000000000000211251036066300333500ustar00rootroot00000000000000[archive] md5| 3 backupchecker-1.7/functional-tests/wrong-tar-xz-archive-md5-hash/wrong-tar-xz-archive-md5-hash.conf000066400000000000000000000002211251036066300333250ustar00rootroot00000000000000[main] name=wrong-tar-xz-archive-md5-hash type=archive path=wrong-tar-xz-archive-md5-hash.tar.xz files_list=wrong-tar-xz-archive-md5-hash-list wrong-tar-xz-archive-md5-hash.tar.xz000066400000000000000000000005141251036066300335540ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-md5-hash7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-mode/000077500000000000000000000000001251036066300243775ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-mode/wrong-tar-xz-archive-mode-list000066400000000000000000000000241251036066300322070ustar00rootroot00000000000000[archive] mode| 755 backupchecker-1.7/functional-tests/wrong-tar-xz-archive-mode/wrong-tar-xz-archive-mode.conf000066400000000000000000000002051251036066300321630ustar00rootroot00000000000000[main] name=wrong-tar-xz-archive-mode type=archive path=wrong-tar-xz-archive-mode.tar.xz files_list=wrong-tar-xz-archive-mode-list backupchecker-1.7/functional-tests/wrong-tar-xz-archive-mode/wrong-tar-xz-archive-mode.tar.xz000066400000000000000000000005141251036066300324670ustar00rootroot000000000000007zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha1-hash/000077500000000000000000000000001251036066300252305ustar00rootroot00000000000000wrong-tar-xz-archive-sha1-hash-list000066400000000000000000000000221251036066300336100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha1-hash[archive] sha1| b wrong-tar-xz-archive-sha1-hash.conf000066400000000000000000000002241251036066300335670ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha1-hash[main] name=wrong-tar-xz-archive-sha1-hash type=archive path=wrong-tar-xz-archive-sha1-hash.tar.xz files_list=wrong-tar-xz-archive-sha1-hash-list wrong-tar-xz-archive-sha1-hash.tar.xz000066400000000000000000000005141251036066300340720ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha1-hash7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha224-hash/000077500000000000000000000000001251036066300253775ustar00rootroot00000000000000wrong-tar-xz-archive-sha224-hash-list000066400000000000000000000000241251036066300341300ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha224-hash[archive] sha224| 2 wrong-tar-xz-archive-sha224-hash.conf000066400000000000000000000002321251036066300341040ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha224-hash[main] name=wrong-tar-xz-archive-sha224-hash type=archive path=wrong-tar-xz-archive-sha224-hash.tar.xz files_list=wrong-tar-xz-archive-sha224-hash-list wrong-tar-xz-archive-sha224-hash.tar.xz000066400000000000000000000005141251036066300344100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha224-hash7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha256-hash/000077500000000000000000000000001251036066300254045ustar00rootroot00000000000000wrong-tar-xz-archive-sha256-hash-list000066400000000000000000000000241251036066300341420ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha256-hash[archive] sha256| 6 wrong-tar-xz-archive-sha256-hash.conf000066400000000000000000000002321251036066300341160ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha256-hash[main] name=wrong-tar-xz-archive-sha256-hash type=archive path=wrong-tar-xz-archive-sha256-hash.tar.xz files_list=wrong-tar-xz-archive-sha256-hash-list wrong-tar-xz-archive-sha256-hash.tar.xz000066400000000000000000000005141251036066300344220ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha256-hash7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha384-hash/000077500000000000000000000000001251036066300254065ustar00rootroot00000000000000wrong-tar-xz-archive-sha384-hash-list000066400000000000000000000000241251036066300341460ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha384-hash[archive] sha384| 4 wrong-tar-xz-archive-sha384-hash.conf000066400000000000000000000002321251036066300341220ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha384-hash[main] name=wrong-tar-xz-archive-sha384-hash type=archive path=wrong-tar-xz-archive-sha384-hash.tar.xz files_list=wrong-tar-xz-archive-sha384-hash-list wrong-tar-xz-archive-sha384-hash.tar.xz000066400000000000000000000005141251036066300344260ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha384-hash7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha512-hash/000077500000000000000000000000001251036066300253775ustar00rootroot00000000000000wrong-tar-xz-archive-sha512-hash-list000066400000000000000000000000241251036066300341300ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha512-hash[archive] sha512| e wrong-tar-xz-archive-sha512-hash.conf000066400000000000000000000002321251036066300341040ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha512-hash[main] name=wrong-tar-xz-archive-sha512-hash type=archive path=wrong-tar-xz-archive-sha512-hash.tar.xz files_list=wrong-tar-xz-archive-sha512-hash-list wrong-tar-xz-archive-sha512-hash.tar.xz000066400000000000000000000005141251036066300344100ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-sha512-hash7zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-tar-xz-archive-uid/000077500000000000000000000000001251036066300242345ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-tar-xz-archive-uid/wrong-tar-xz-archive-uid-list000066400000000000000000000000241251036066300317010ustar00rootroot00000000000000[archive] uid| 1234 backupchecker-1.7/functional-tests/wrong-tar-xz-archive-uid/wrong-tar-xz-archive-uid.conf000066400000000000000000000002021251036066300316520ustar00rootroot00000000000000[main] name=wrong-tar-xz-archive-uid type=archive path=wrong-tar-xz-archive-uid.tar.xz files_list=wrong-tar-xz-archive-uid-list backupchecker-1.7/functional-tests/wrong-tar-xz-archive-uid/wrong-tar-xz-archive-uid.tar.xz000066400000000000000000000005141251036066300321610ustar00rootroot000000000000007zXZִF!t/' ]:Jc'yژ3[8S֐ص*5"NcF#Z&c Rm+$635*YZ$ W X3J\v33:NYO pX<=y *;Xe Z}0c7S_Y[HnC>K19{f+-PU`Z}PTD% N=h(x-$b5أ +_IPnԊe_0[b4_9 ke{вրPP?ͱgYZbackupchecker-1.7/functional-tests/wrong-target-in-tar-bz2-archive/000077500000000000000000000000001251036066300254015ustar00rootroot00000000000000wrong-target-in-tar-bz2-archive.conf000066400000000000000000000002261251036066300341130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-bz2-archive[main] name=wrong-target-in-tar-bz2-archive type=archive path=wrong-target-in-tar-bz2-archive.tar.bz2 files_list=wrong-target-in-tar-bz2-archive.list wrong-target-in-tar-bz2-archive.list000066400000000000000000000006711251036066300341450ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-bz2-archive[files] test| =0 uid|1000 gid|1000 mode|755 type|d test/toto| =5 uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 test/foo| =0 uid|1000 gid|1000 mode|755 type|d test/foo/bar| =0 uid|1000 gid|1000 mode|777 type|s md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|../toto test/foo2| =0 uid|1000 gid|1000 mode|755 type|d test/foo2/toto2| =0 uid|1000 gid|1000 mode|644 type|l md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|test/tot wrong-target-in-tar-bz2-archive.tar.bz2000066400000000000000000000003661251036066300344550ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-bz2-archiveBZh91AY&SYH]`g@%{`H0`Fa12` iT fbajaA#L2isY 嵲ji6LCJ_%v j øh87]oL|!``r. U)kGz 2#Tn`+y0l@fd`[{|GzOl?CUltYHw Wkiz.p Vbackupchecker-1.7/functional-tests/wrong-target-in-tar-gz-archive/000077500000000000000000000000001251036066300253245ustar00rootroot00000000000000wrong-target-in-tar-gz-archive.conf000066400000000000000000000002221251036066300337550ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-gz-archive[main] name=wrong-target-in-tar-gz-archive type=archive path=wrong-target-in-tar-gz-archive.tar.gz files_list=wrong-target-in-tar-gz-archive.list wrong-target-in-tar-gz-archive.list000066400000000000000000000006711251036066300340130ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-gz-archive[files] test| =0 uid|1000 gid|1000 mode|755 type|d test/toto| =5 uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 test/foo| =0 uid|1000 gid|1000 mode|755 type|d test/foo/bar| =0 uid|1000 gid|1000 mode|777 type|s md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|../toto test/foo2| =0 uid|1000 gid|1000 mode|755 type|d test/foo2/toto2| =0 uid|1000 gid|1000 mode|644 type|l md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|test/tot wrong-target-in-tar-gz-archive.tar.gz000066400000000000000000000003641251036066300342440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-gz-archivez%RM0=EOӡ?AUEc@mh6ysJ sy5 3fvWd [R ktSijr)(xG[%Pk|d7m~lfKO>'f5LN1_(E!5!{,, s6!pbW(backupchecker-1.7/functional-tests/wrong-target-in-tar-xz-archive/000077500000000000000000000000001251036066300253455ustar00rootroot00000000000000wrong-target-in-tar-xz-archive.conf000066400000000000000000000002221251036066300340170ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-xz-archive[main] name=wrong-target-in-tar-xz-archive type=archive path=wrong-target-in-tar-xz-archive.tar.xz files_list=wrong-target-in-tar-xz-archive.list wrong-target-in-tar-xz-archive.list000066400000000000000000000006711251036066300340550ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-xz-archive[files] test| =0 uid|1000 gid|1000 mode|755 type|d test/toto| =5 uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 test/foo| =0 uid|1000 gid|1000 mode|755 type|d test/foo/bar| =0 uid|1000 gid|1000 mode|777 type|s md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|../toto test/foo2| =0 uid|1000 gid|1000 mode|755 type|d test/foo2/toto2| =0 uid|1000 gid|1000 mode|644 type|l md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|test/tot wrong-target-in-tar-xz-archive.tar.xz000066400000000000000000000004241251036066300343240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tar-xz-archive7zXZִF!t/']:J'xiN<%uB}6r8j[,5J^mn!j']Ԝ*a6 7r~xX O V6J T(O^uV_8&+>)5d1 (A^Mtd 1lPw ! 8U]ja@d-eІ_Ȕ&jB_u}PSgYZbackupchecker-1.7/functional-tests/wrong-target-in-tree/000077500000000000000000000000001251036066300234405ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tree/test/000077500000000000000000000000001251036066300244175ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tree/test/foo/000077500000000000000000000000001251036066300252025ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tree/test/foo/bar000077700000000000000000000000001251036066300270072../totoustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tree/test/foo2/000077500000000000000000000000001251036066300252645ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-target-in-tree/test/foo2/toto2000066400000000000000000000000051251036066300262510ustar00rootroot00000000000000hihi backupchecker-1.7/functional-tests/wrong-target-in-tree/test/toto000066400000000000000000000000051251036066300253220ustar00rootroot00000000000000hihi backupchecker-1.7/functional-tests/wrong-target-in-tree/wrong-target-in-tree.conf000066400000000000000000000001321251036066300302640ustar00rootroot00000000000000[main] name=wrong-target-in-tree type=tree path=test files_list=wrong-target-in-tree.list backupchecker-1.7/functional-tests/wrong-target-in-tree/wrong-target-in-tree.list000066400000000000000000000005301251036066300303140ustar00rootroot00000000000000[files] toto| uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 foo| uid|1000 gid|1000 mode|755 type|d foo/bar| uid|1000 gid|1000 mode|777 type|s md5|ebd7385edfbbb36cd3a7a5dffb134b98 target|../zouzou foo2| uid|1000 gid|1000 mode|755 type|d foo2/toto2| uid|1000 gid|1000 mode|644 type|f md5|ebd7385edfbbb36cd3a7a5dffb134b98 backupchecker-1.7/functional-tests/wrong-xz-archive-gid/000077500000000000000000000000001251036066300234325ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-gid/wrong-xz-archive-gid-list000066400000000000000000000000231251036066300302740ustar00rootroot00000000000000[archive] gid| 234 backupchecker-1.7/functional-tests/wrong-xz-archive-gid/wrong-xz-archive-gid.conf000066400000000000000000000001621251036066300302530ustar00rootroot00000000000000[main] name=wrong-xz-archive-gid type=archive path=wrong-xz-archive-gid.xz files_list=wrong-xz-archive-gid-list backupchecker-1.7/functional-tests/wrong-xz-archive-gid/wrong-xz-archive-gid.xz000066400000000000000000000002001251036066300277600ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-md5-hash/000077500000000000000000000000001251036066300242755ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-md5-hash/wrong-xz-archive-md5-hash-list000066400000000000000000000000311251036066300320010ustar00rootroot00000000000000[archive] md5| bb06f1044 backupchecker-1.7/functional-tests/wrong-xz-archive-md5-hash/wrong-xz-archive-md5-hash.conf000066400000000000000000000002011251036066300317530ustar00rootroot00000000000000[main] name=wrong-xz-archive-md5-hash type=archive path=wrong-xz-archive-md5-hash.xz files_list=wrong-xz-archive-md5-hash-list backupchecker-1.7/functional-tests/wrong-xz-archive-md5-hash/wrong-xz-archive-md5-hash.xz000066400000000000000000000002001251036066300314660ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-mode/000077500000000000000000000000001251036066300236135ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-mode/wrong-xz-archive-mode-list000066400000000000000000000000241251036066300306370ustar00rootroot00000000000000[archive] mode| 234 backupchecker-1.7/functional-tests/wrong-xz-archive-mode/wrong-xz-archive-mode.conf000066400000000000000000000001651251036066300306200ustar00rootroot00000000000000[main] name=wrong-xz-archive-mode type=archive path=wrong-xz-archive-mode.xz files_list=wrong-xz-archive-mode-list backupchecker-1.7/functional-tests/wrong-xz-archive-mode/wrong-xz-archive-mode.xz000066400000000000000000000002001251036066300303220ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-sha1-hash/000077500000000000000000000000001251036066300244445ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-sha1-hash/wrong-xz-archive-sha1-hash-list000066400000000000000000000000271251036066300323240ustar00rootroot00000000000000[archive] sha1| 921f38 backupchecker-1.7/functional-tests/wrong-xz-archive-sha1-hash/wrong-xz-archive-sha1-hash.conf000066400000000000000000000002041251036066300322740ustar00rootroot00000000000000[main] name=wrong-xz-archive-sha1-hash type=archive path=wrong-xz-archive-sha1-hash.xz files_list=wrong-xz-archive-sha1-hash-list backupchecker-1.7/functional-tests/wrong-xz-archive-sha1-hash/wrong-xz-archive-sha1-hash.xz000066400000000000000000000002001251036066300320040ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-sha224-hash/000077500000000000000000000000001251036066300246135ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-sha224-hash/wrong-xz-archive-sha224-hash-list000066400000000000000000000000321251036066300326360ustar00rootroot00000000000000[archive] sha224| 4f737d6 backupchecker-1.7/functional-tests/wrong-xz-archive-sha224-hash/wrong-xz-archive-sha224-hash.conf000066400000000000000000000002121251036066300326110ustar00rootroot00000000000000[main] name=wrong-xz-archive-sha224-hash type=archive path=wrong-xz-archive-sha224-hash.xz files_list=wrong-xz-archive-sha224-hash-list backupchecker-1.7/functional-tests/wrong-xz-archive-sha224-hash/wrong-xz-archive-sha224-hash.xz000066400000000000000000000002001251036066300323220ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-sha256-hash/000077500000000000000000000000001251036066300246205ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-sha256-hash/wrong-xz-archive-sha256-hash-list000066400000000000000000000000331251036066300326510ustar00rootroot00000000000000[archive] sha256| 89703e58 backupchecker-1.7/functional-tests/wrong-xz-archive-sha256-hash/wrong-xz-archive-sha256-hash.conf000066400000000000000000000002121251036066300326230ustar00rootroot00000000000000[main] name=wrong-xz-archive-sha256-hash type=archive path=wrong-xz-archive-sha256-hash.xz files_list=wrong-xz-archive-sha256-hash-list backupchecker-1.7/functional-tests/wrong-xz-archive-sha256-hash/wrong-xz-archive-sha256-hash.xz000066400000000000000000000002001251036066300323340ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-sha384-hash/000077500000000000000000000000001251036066300246225ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-sha384-hash/wrong-xz-archive-sha384-hash-list000066400000000000000000000000351251036066300326570ustar00rootroot00000000000000[archive] sha384| c583b359a6 backupchecker-1.7/functional-tests/wrong-xz-archive-sha384-hash/wrong-xz-archive-sha384-hash.conf000066400000000000000000000002121251036066300326270ustar00rootroot00000000000000[main] name=wrong-xz-archive-sha384-hash type=archive path=wrong-xz-archive-sha384-hash.xz files_list=wrong-xz-archive-sha384-hash-list backupchecker-1.7/functional-tests/wrong-xz-archive-sha384-hash/wrong-xz-archive-sha384-hash.xz000066400000000000000000000002001251036066300323400ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-sha512-hash/000077500000000000000000000000001251036066300246135ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-sha512-hash/wrong-xz-archive-sha512-hash-list000066400000000000000000000000361251036066300326420ustar00rootroot00000000000000[archive] sha512| dffa5803a87 backupchecker-1.7/functional-tests/wrong-xz-archive-sha512-hash/wrong-xz-archive-sha512-hash.conf000066400000000000000000000002121251036066300326110ustar00rootroot00000000000000[main] name=wrong-xz-archive-sha512-hash type=archive path=wrong-xz-archive-sha512-hash.xz files_list=wrong-xz-archive-sha512-hash-list backupchecker-1.7/functional-tests/wrong-xz-archive-sha512-hash/wrong-xz-archive-sha512-hash.xz000066400000000000000000000002001251036066300323220ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-xz-archive-uid/000077500000000000000000000000001251036066300234505ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-xz-archive-uid/wrong-xz-archive-uid-list000066400000000000000000000000231251036066300303300ustar00rootroot00000000000000[archive] uid| 234 backupchecker-1.7/functional-tests/wrong-xz-archive-uid/wrong-xz-archive-uid.conf000066400000000000000000000001621251036066300303070ustar00rootroot00000000000000[main] name=wrong-xz-archive-uid type=archive path=wrong-xz-archive-uid.xz files_list=wrong-xz-archive-uid-list backupchecker-1.7/functional-tests/wrong-xz-archive-uid/wrong-xz-archive-uid.xz000066400000000000000000000002001251036066300300140ustar00rootroot000000000000007zXZִF!t/LD]4@FqPiKbyvïB!2?sM-Sg6?ZCD6\5#IoP,z .B9[(`MM}YZbackupchecker-1.7/functional-tests/wrong-zip-archive-gid/000077500000000000000000000000001251036066300235735ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-gid/wrong-zip-archive-gid-list000066400000000000000000000000241251036066300305770ustar00rootroot00000000000000[archive] gid| 1234 backupchecker-1.7/functional-tests/wrong-zip-archive-gid/wrong-zip-archive-gid.conf000066400000000000000000000001661251036066300305610ustar00rootroot00000000000000[main] name=wrong-zip-archive-gid type=archive path=wrong-zip-archive-gid.zip files_list=wrong-zip-archive-gid-list backupchecker-1.7/functional-tests/wrong-zip-archive-gid/wrong-zip-archive-gid.zip000066400000000000000000000016201251036066300304320ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-md5-hash/000077500000000000000000000000001251036066300244365ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-md5-hash/wrong-zip-archive-md5-hash-list000066400000000000000000000000211251036066300323020ustar00rootroot00000000000000[archive] md5| 7 backupchecker-1.7/functional-tests/wrong-zip-archive-md5-hash/wrong-zip-archive-md5-hash.conf000066400000000000000000000002051251036066300322610ustar00rootroot00000000000000[main] name=wrong-zip-archive-md5-hash type=archive path=wrong-zip-archive-md5-hash.zip files_list=wrong-zip-archive-md5-hash-list backupchecker-1.7/functional-tests/wrong-zip-archive-md5-hash/wrong-zip-archive-md5-hash.zip000066400000000000000000000016201251036066300321400ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-mode/000077500000000000000000000000001251036066300237545ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-mode/wrong-zip-archive-mode-list000066400000000000000000000000241251036066300311410ustar00rootroot00000000000000[archive] mode| 755 backupchecker-1.7/functional-tests/wrong-zip-archive-mode/wrong-zip-archive-mode.conf000066400000000000000000000001711251036066300311170ustar00rootroot00000000000000[main] name=wrong-zip-archive-mode type=archive path=wrong-zip-archive-mode.zip files_list=wrong-zip-archive-mode-list backupchecker-1.7/functional-tests/wrong-zip-archive-mode/wrong-zip-archive-mode.zip000066400000000000000000000016201251036066300307740ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-sha1-hash/000077500000000000000000000000001251036066300246055ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-sha1-hash/wrong-zip-archive-sha1-hash-list000066400000000000000000000000221251036066300326210ustar00rootroot00000000000000[archive] sha1| 5 backupchecker-1.7/functional-tests/wrong-zip-archive-sha1-hash/wrong-zip-archive-sha1-hash.conf000066400000000000000000000002101251036066300325730ustar00rootroot00000000000000[main] name=wrong-zip-archive-sha1-hash type=archive path=wrong-zip-archive-sha1-hash.zip files_list=wrong-zip-archive-sha1-hash-list backupchecker-1.7/functional-tests/wrong-zip-archive-sha1-hash/wrong-zip-archive-sha1-hash.zip000066400000000000000000000016201251036066300324560ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-sha224-hash/000077500000000000000000000000001251036066300247545ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-sha224-hash/wrong-zip-archive-sha224-hash-list000066400000000000000000000000251251036066300331420ustar00rootroot00000000000000[archive] sha224| 2 backupchecker-1.7/functional-tests/wrong-zip-archive-sha224-hash/wrong-zip-archive-sha224-hash.conf000066400000000000000000000002161251036066300331170ustar00rootroot00000000000000[main] name=wrong-zip-archive-sha224-hash type=archive path=wrong-zip-archive-sha224-hash.zip files_list=wrong-zip-archive-sha224-hash-list backupchecker-1.7/functional-tests/wrong-zip-archive-sha224-hash/wrong-zip-archive-sha224-hash.zip000066400000000000000000000016201251036066300327740ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-sha256-hash/000077500000000000000000000000001251036066300247615ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-sha256-hash/wrong-zip-archive-sha256-hash-list000066400000000000000000000000241251036066300331530ustar00rootroot00000000000000[archive] sha256| a backupchecker-1.7/functional-tests/wrong-zip-archive-sha256-hash/wrong-zip-archive-sha256-hash.conf000066400000000000000000000002161251036066300331310ustar00rootroot00000000000000[main] name=wrong-zip-archive-sha256-hash type=archive path=wrong-zip-archive-sha256-hash.zip files_list=wrong-zip-archive-sha256-hash-list backupchecker-1.7/functional-tests/wrong-zip-archive-sha256-hash/wrong-zip-archive-sha256-hash.zip000066400000000000000000000016201251036066300330060ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-sha384-hash/000077500000000000000000000000001251036066300247635ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-sha384-hash/wrong-zip-archive-sha384-hash-list000066400000000000000000000000251251036066300331600ustar00rootroot00000000000000[archive] sha384| ec backupchecker-1.7/functional-tests/wrong-zip-archive-sha384-hash/wrong-zip-archive-sha384-hash.conf000066400000000000000000000002161251036066300331350ustar00rootroot00000000000000[main] name=wrong-zip-archive-sha384-hash type=archive path=wrong-zip-archive-sha384-hash.zip files_list=wrong-zip-archive-sha384-hash-list backupchecker-1.7/functional-tests/wrong-zip-archive-sha384-hash/wrong-zip-archive-sha384-hash.zip000066400000000000000000000016201251036066300330120ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-sha512-hash/000077500000000000000000000000001251036066300247545ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-sha512-hash/wrong-zip-archive-sha512-hash-list000066400000000000000000000000261251036066300331430ustar00rootroot00000000000000[archive] sha512| 7f5 backupchecker-1.7/functional-tests/wrong-zip-archive-sha512-hash/wrong-zip-archive-sha512-hash.conf000066400000000000000000000002161251036066300331170ustar00rootroot00000000000000[main] name=wrong-zip-archive-sha512-hash type=archive path=wrong-zip-archive-sha512-hash.zip files_list=wrong-zip-archive-sha512-hash-list backupchecker-1.7/functional-tests/wrong-zip-archive-sha512-hash/wrong-zip-archive-sha512-hash.zip000066400000000000000000000016201251036066300327740ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/wrong-zip-archive-uid/000077500000000000000000000000001251036066300236115ustar00rootroot00000000000000backupchecker-1.7/functional-tests/wrong-zip-archive-uid/wrong-zip-archive-uid-list000066400000000000000000000000241251036066300306330ustar00rootroot00000000000000[archive] uid| 1234 backupchecker-1.7/functional-tests/wrong-zip-archive-uid/wrong-zip-archive-uid.conf000066400000000000000000000001661251036066300306150ustar00rootroot00000000000000[main] name=wrong-zip-archive-uid type=archive path=wrong-zip-archive-uid.zip files_list=wrong-zip-archive-uid-list backupchecker-1.7/functional-tests/wrong-zip-archive-uid/wrong-zip-archive-uid.zip000066400000000000000000000016201251036066300304660ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/functional-tests/zip-archive-size-bigger-than-expected-size/000077500000000000000000000000001251036066300276045ustar00rootroot00000000000000zip-archive-size-bigger-than-expected-size-list000066400000000000000000000000231251036066300405410ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-bigger-than-expected-size[archive] size| <1 zip-archive-size-bigger-than-expected-size.conf000066400000000000000000000002651251036066300405240ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-bigger-than-expected-size[main] name=zip-archive-size-bigger-than-expected-size type=archive path=zip-archive-size-bigger-than-expected-size.zip files_list=zip-archive-size-bigger-than-expected-size-list zip-archive-size-bigger-than-expected-size.zip000066400000000000000000000005311251036066300403750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-bigger-than-expected-sizePKn? <fooUT NNux 1 Om PKn?70barUT NNux   OmbPKn? <fooUTNux PKn?70]barUTNux PKbackupchecker-1.7/functional-tests/zip-archive-size-not-equals-expected-size/000077500000000000000000000000001251036066300275055ustar00rootroot00000000000000zip-archive-size-not-equals-expected-size-list000066400000000000000000000000241251036066300403440ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-not-equals-expected-size[archive] size| =45 zip-archive-size-not-equals-expected-size.conf000066400000000000000000000002621251036066300403230ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-not-equals-expected-size[main] name=zip-archive-size-not-equals-expected-size type=archive path=zip-archive-size-not-equals-expected-size.zip files_list=zip-archive-size-not-equals-expected-size-list zip-archive-size-not-equals-expected-size.zip000066400000000000000000000005311251036066300401770ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-not-equals-expected-sizePKn? <fooUT NNux 1 Om PKn?70barUT NNux   OmbPKn? <fooUTNux PKn?70]barUTNux PKbackupchecker-1.7/functional-tests/zip-archive-size-smaller-than-expected-size/000077500000000000000000000000001251036066300300045ustar00rootroot00000000000000zip-archive-size-smaller-than-expected-size-list000066400000000000000000000000251251036066300411430ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-smaller-than-expected-size[archive] size| >10M zip-archive-size-smaller-than-expected-size.conf000066400000000000000000000002701251036066300411200ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-smaller-than-expected-size[main] name=zip-archive-size-smaller-than-expected-size type=archive path=zip-archive-size-smaller-than-expected-size.zip files_list=zip-archive-size-smaller-than-expected-size-list zip-archive-size-smaller-than-expected-size.zip000066400000000000000000000005311251036066300407750ustar00rootroot00000000000000backupchecker-1.7/functional-tests/zip-archive-size-smaller-than-expected-sizePKn? <fooUT NNux 1 Om PKn?70barUT NNux   OmbPKn? <fooUTNux PKn?70]barUTNux PKbackupchecker-1.7/functionaltests.py000077500000000000000000007204011251036066300177630ustar00rootroot00000000000000#!/usr/bin/python3.4 # -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import hashlib from multiprocessing import Process, Queue from os import linesep, environ, link, remove import subprocess import os.path import shutil import sys import functionaltests EXE = './backupchecker.py' OPTCONFIG = '-c' OPTOUTPUTCONFDIR = '-C' OPTOUTPUTLISTDIR = '-L' OPTOUTPUTFULLDIR = '-O' OPTCONFNAME = '-n' OPTDEL = '-d' OPTEXCEPTIONSFILE = '-E' OPTGEN = '-g' OPTFULLGEN = '-G' OPTHASHTYPE = '--hashtype' OPTHASHES = '-H' OPTLOG = '-l' OKMSG = 'ok' KOMSG = 'ko - ' PYTHONEXE ='' ABSPATH = '' ALTERNATEDELIMITER = '(' # To correctly use the tests with buildbot if 'PYTHONEXE' in environ: PYTHONEXE = environ['PYTHONEXE'] ABSPATH = environ['PWD'] class Main: '''Main of all the Test* classes''' def _main(self, __condition): if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, self._testdir, OPTLOG, self._resultfile]) else: __retcode = subprocess.call([EXE, OPTCONFIG, self._testdir, OPTLOG, self._resultfile]) if __retcode != 0: self._queue.put('{} - {}return code:{}'.format(self._testname, KOMSG, str(__retcode))) else: with open(self._resultfile, 'r') as __file: if __condition in __file.read(): self._queue.put('{} - {}'.format(self._testname, OKMSG)) else: self._queue.put('{} - {}value in result file not expected'.format(self._testname, KOMSG)) class MainGenerateParse: '''Main of all the Test*GenerateParse classes''' def _main(self, __condition): if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, self._testdir, OPTLOG, self._resultfile]) else: __retcode = subprocess.call([EXE, OPTCONFIG, self._testdir, OPTLOG, self._resultfile]) if __retcode != 0: self._queue.put('{} - {}return code:{}'.format(self._testname, KOMSG, str(__retcode))) else: with open(self._resultfile, 'r') as __file: if '' == __file.read(): self._queue.put('{} - {}'.format(self._testname, OKMSG)) else: self._queue.put('{} - {}value in result file not expected'.format(self._testname, KOMSG)) class Test_file_missing_in_tar(Main): '''Test if a file is missing in a tar archive''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-tar') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_file_missing_in_tar_gz(Main): '''Test if a file is missing in a tar.gz archive''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-tar-gz') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_file_missing_in_tar_bz2(Main): '''Test if a file is missing in a tar.bz2 archive''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-tar-bz2') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_file_missing_in_tar_xz(Main): '''Test if a file is missing in a tar.xz archive''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-tar-xz') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_file_missing_in_gzip(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-gzip') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_file_missing_in_xz(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-xz') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_file_missing_in_zip(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-zip') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_file_missing_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/file-missing-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_wrong_tar_archive_mode(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-mode') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_tar_gz_archive_mode(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-mode') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_tar_bz2_archive_mode(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-mode') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_tar_xz_archive_mode(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-mode') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_gzip_archive_mode(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-mode') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_xz_archive_mode(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-mode') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_zip_archive_mode(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-mode') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_tar_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_tar_gz_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_tar_xz_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_tar_bz2_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_zip_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_gz_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_bzip2_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_xz_archive_uid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-uid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_tar_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_tar_gz_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_tar_bz2_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_tar_xz_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_gzip_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_bzip2_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_xz_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_zip_archive_gid(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-gid') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_tar_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_archive_sha1_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-sha1-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_gz_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_gz_archive_sha1_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-sha1-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_gz_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_xz_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_gz_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_xz_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_gz_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_xz_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_gz_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-gz-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_xz_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_bz2_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_xz_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_bz2_archive_sha1_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-sha1-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_xz_archive_sha1_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-xz-archive-sha1-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_bz2_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_bz2_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_bz2_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_bz2_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_gzip_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_xz_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_xz_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_gzip_archive_sha1_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-sha1-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_gzip_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_xz_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_gzip_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_xz_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_gzip_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_xz_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_gzip_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-gz-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_xz_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-xz-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_bzip2_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_bzip2_archive_sha1_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-sha1-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_bzip2_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_bzip2_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_bzip2_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_bzip2_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-bz2-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_tar_bz2_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-tar-bz2-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_zip_archive_md5_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-md5-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_zip_archive_sha1_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-sha1-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_zip_archive_sha224_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-sha224-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_zip_archive_sha256_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-sha256-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_zip_archive_sha384_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-sha384-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_zip_archive_sha512_hash(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-zip-archive-sha512-hash') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_uid_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-uid-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_file_uid_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-uid-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_file_uid_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-uid-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_file_uid_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-uid-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_file_uid_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-uid-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_file_uid_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-uid-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected uid') class Test_wrong_file_gid_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-gid-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_file_gid_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-gid-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_file_gid_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-gid-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_file_gid_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-gid-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_file_gid_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-gid-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_wrong_file_gid_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-gid-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected gid') class Test_unexpected_file_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/unexpected-file-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 unexpected file') class Test_unexpected_file_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/unexpected-file-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 unexpected file') class Test_unexpected_file_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/unexpected-file-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 unexpected file') class Test_unexpected_file_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/unexpected-file-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 unexpected file') class Test_unexpected_file_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/unexpected-file-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 unexpected file') class Test_unexpected_file_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/unexpected-file-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 unexpected file') class Test_unexpected_file_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/unexpected-file-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 unexpected file') class Test_wrong_file_md5_hash_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_bzip2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-bzip2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_bzip2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-bzip2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_bzip2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-bzip2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_bzip2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-bzip2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_bzip2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-bzip2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_bzip2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-bzip2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_md5_hash_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-md5-hash-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha1_hash_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha1-hash-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha224_hash_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha224-hash-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha256_hash_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha256-hash-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha384_hash_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha384-hash-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_sha512_hash_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-sha512-hash-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected hash') class Test_wrong_file_mode_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-mode-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_file_mode_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-mode-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_file_mode_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-mode-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_file_mode_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-mode-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_file_mode_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-mode-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected mode') class Test_wrong_file_type_f_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-f-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_f_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-f-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_f_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-f-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_f_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-f-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_f_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-f-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_d_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-d-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_d_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-d-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_d_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-d-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_d_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-d-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_d_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-d-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_s_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-s-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_s_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-s-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_s_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-s-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_s_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-s-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_l_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-l-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_l_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-l-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_l_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-l-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_wrong_file_type_l_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-l-in-tree') __testsubdir = os.path.join(ABSPATH, 'functional-tests/wrong-file-type-l-in-tree/wrong-file-type-l-in-tree') __mockfile = os.path.join(__testsubdir, 'foo') __mocklink = os.path.join(__testsubdir, 'bar') if os.path.exists(__testsubdir): shutil.rmtree(__testsubdir) os.mkdir(__testsubdir) else: os.mkdir(__testsubdir) open(__mockfile, 'w') link(__mockfile, __mocklink) self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected type') class Test_corrupted_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/corrupted-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('data corruption') class Test_corrupted_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/corrupted-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('data corruption') class Test_corrupted_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/corrupted-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('data corruption') class Test_corrupted_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/corrupted-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('data corruption') class Test_corrupted_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/corrupted-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('data corruption') class Test_corrupted_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/corrupted-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('data corruption') class Test_two_confs_with_the_same_name(Main): def __init__(self, q): self.__queue = q self.__testname = self.__class__.__name__ self.__testdir = os.path.join(ABSPATH, 'functional-tests/two_confs_with_the_same_name') self.__resultfile = os.path.join(self.__testdir, 'a.out') if 'PYTHONEXE' in environ: __command = ' '.join([PYTHONEXE, EXE, OPTCONFIG, self.__testdir, OPTLOG, self.__resultfile]) else: __command = ' '.join([EXE, OPTCONFIG, self.__testdir, OPTLOG, self.__resultfile]) __result = subprocess.getstatusoutput(__command) if __result[0] != 0 and 'Please rename it.' in __result[1]: self.__queue.put('{} - {}'.format(self.__testname, OKMSG)) else: self.__queue.put('{} - {}return code:{}'.format(self.__testname, KOMSG, str(__result[0]))) class Test_expected_file_greater_than_file_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-greater-than-file-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than expected') class Test_expected_file_greater_than_file_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-greater-than-file-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than expected') class Test_expected_file_greater_than_file_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-greater-than-file-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than expected') class Test_expected_file_greater_than_file_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-greater-than-file-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than expected') class Test_expected_file_greater_than_file_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-greater-than-file-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than expected') class Test_expected_file_greater_than_file_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-greater-than-file-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than expected') class Test_expected_file_greater_than_file_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-greater-than-file-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than expected') class Test_expected_file_smaller_than_file_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-smaller-than-file-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than expected') class Test_expected_file_smaller_than_file_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-smaller-than-file-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than expected') class Test_expected_file_smaller_than_file_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-smaller-than-file-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than expected') class Test_expected_file_smaller_than_file_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-smaller-than-file-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than expected') class Test_expected_file_smaller_than_file_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-smaller-than-file-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than expected') class Test_expected_file_smaller_than_file_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-smaller-than-file-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than expected') class Test_expected_file_smaller_than_file_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-smaller-than-file-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than expected') class Test_expected_file_not_equals_file_in_tar_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-not-equals-file-in-tar-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_expected_file_not_equals_file_in_tar_gz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-not-equals-file-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_expected_file_not_equals_file_in_tar_bz2_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-not-equals-file-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_expected_file_not_equals_file_in_tar_xz_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-not-equals-file-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_expected_file_not_equals_file_in_gzip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-not-equals-file-in-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_expected_file_not_equals_file_in_zip_archive(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-not-equals-file-in-zip-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_expected_file_not_equals_file_in_tree(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expected-file-not-equals-file-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_mixing_dir_path_and_archive_type_in_conf(Main): '''Check if the configuration path indicates a directory while the type of the backup is an archive ''' def __init__(self, q): self.__queue = q self.__testname = self.__class__.__name__ self.__testdir = os.path.join(ABSPATH, 'functional-tests/mixing-dir-path-and-archive-type-in-conf') self.__resultfile = os.path.join(self.__testdir, 'a.out') if 'PYTHONEXE' in environ: __command = ' '.join([PYTHONEXE, EXE, OPTCONFIG, self.__testdir, OPTLOG, self.__resultfile]) else: __command = ' '.join([EXE, OPTCONFIG, self.__testdir, OPTLOG, self.__resultfile]) __result = subprocess.getstatusoutput(__command) if __result[0] != 0 and 'is a directory but appears as an archive' in __result[1]: self.__queue.put('{} - {}'.format(self.__testname, OKMSG)) else: self.__queue.put('{} - {}return code:{}'.format(self.__testname, KOMSG, str(__result[0]))) class Test_full_criteria_multiple_backups: '''Check all the itemps for a tar.gz, tar.bz2, gzip, zip and tree''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/full-criteria-multiple-backups') __resultfile = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'file missing in': 0, 'with unexpected mode': 0, 'with unexpected uid': 0, 'with unexpected gid': 0, 'with unexpected hash while checking': 0, 'bigger than': 0, } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 5: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_name_in_gzip_and_gzip_archive_are_not_the_same(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/name-in-gzip-and-gzip-archive-are-not-the-same') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('unexpected file checking') class Test_unsupported_parameters_for_gz_archive: '''Check for unsupported parameters for a gz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/unsupported-parameters-gz-archive') __resultfile = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'Ignoring it': 0, } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 3: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_unsupported_parameters_for_bz2_archive: '''Check for unsupported parameters for a bzip2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/unsupported-parameters-bz2-archive') __resultfile = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'Ignoring it': 0, } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 4: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_unsupported_parameters_for_xz_archive: '''Check for unsupported parameters for a xz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/unsupported-parameters-xz-archive') __resultfile = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'Ignoring it': 0, } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 4: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_unsupported_parameters_for_zip_archive: '''Check for unsupported parameters for a zip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/unsupported-parameters-zip-archive') __resultfile = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __resultfile]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'Ignoring it': 0, } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 1: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_for_tar_archive: '''Check the expected result for list of files generated from a tar archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-from-tar-archive') __archive = os.path.join(__testdir, 'generate-list-from-tar-archive.tar.gz') __resultfile = os.path.join(__testdir, 'generate-list-from-tar-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'=': 0, 'uid': 0, 'gid': 0, 'type': 0, 'mode': 0, 'md5': 2 } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 6: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_for_zip_archive: '''Check the expected result for list of files generated from a zip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-from-zip-archive') __archive = os.path.join(__testdir, 'generate-list-from-zip-archive.zip') __resultfile = os.path.join(__testdir, 'generate-list-from-zip-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'=': 0, 'uid': 0, 'gid': 0, 'type': 0, 'mode': 0 } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 6: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_for_tree: '''Check the expected result for list of files generated from a tree of files''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-from-tree') __archive = os.path.join(__testdir, 'generate-list-from-tree') __resultfile = os.path.join(__testdir, 'generate-list-from-tree.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'=': 0, 'uid': 0, 'gid': 0, 'type': 0, 'mode': 0 } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 5: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_for_bzip2: '''Check the expected result for list of files generated from a bzip2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-from-bzip2-archive') __archive = os.path.join(__testdir, 'generate-list-from-bzip2-archive.bz2') __resultfile = os.path.join(__testdir, 'generate-list-from-bzip2-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'type': 0, 'md5':0 } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 1: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_for_xz: '''Check the expected result for list of files generated from a xz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-from-xz-archive') __archive = os.path.join(__testdir, 'generate-list-from-xz-archive.xz') __resultfile = os.path.join(__testdir, 'generate-list-from-xz-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'type': 0, 'md5':0 } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 1: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_for_gzip: '''Check the expected result for list of files generated from a gzip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-from-gzip-archive') __archive = os.path.join(__testdir, 'generate-list-from-gzip-archive.gz') __resultfile = os.path.join(__testdir, 'generate-list-from-gzip-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: __conditions = {'=': 0, 'type': 0, 'md5':0 } for __line in __file.readlines(): for __condition in __conditions: if __condition in __line: __conditions[__condition] += 1 for __condition in __conditions: if __conditions[__condition] != 1: __res = False if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_expected_generated_list_for_tar_archive: '''Compare the generated list and the expected list for a tar archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/expected-generated-list-for-tar-archive') __archive = os.path.join(__testdir, 'expected-generated-list-for-tar-archive.tar.gz') __resultfile = os.path.join(__testdir, 'expected-generated-list-for-tar-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if open(os.path.join(__testdir, 'expectedlist.list'), 'rb').read() not in open(__resultfile, 'rb').read(): __res = False else: __res = True if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_expected_generated_list_for_gzip_archive: '''Compare the generated list and the expected list for a gzip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/expected-generated-list-for-gzip-archive') __archive = os.path.join(__testdir, 'expected-generated-list-for-gzip-archive.gz') __resultfile = os.path.join(__testdir, 'expected-generated-list-for-gzip-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if open(os.path.join(__testdir, 'expectedlist.list'), 'r').read() not in open(__resultfile, 'r').read(): __res = False else: __res = True if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_expected_generated_list_for_xz_archive: '''Compare the generated list and the expected list for a xz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/expected-generated-list-for-xz-archive') __archive = os.path.join(__testdir, 'expected-generated-list-for-xz-archive.xz') __resultfile = os.path.join(__testdir, 'expected-generated-list-for-xz-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if hashlib.md5(open(__resultfile, 'rb').read()).hexdigest() != hashlib.md5(open(os.path.join(__testdir, 'expectedlist.list'), 'rb').read()).hexdigest(): __res = False else: __res = True if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_expected_generated_list_for_bzip2_archive: '''Compare the generated list and the expected list for a bzip2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/expected-generated-list-for-bzip2-archive') __archive = os.path.join(__testdir, 'expected-generated-list-for-bzip2-archive.bz2') __resultfile = os.path.join(__testdir, 'expected-generated-list-for-bzip2-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if hashlib.md5(open(__resultfile, 'rb').read()).hexdigest() != hashlib.md5(open(os.path.join(__testdir, 'expectedlist.list'), 'rb').read()).hexdigest(): __res = False else: __res = True if __res: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_and_parse_tar_archive(MainGenerateParse): '''Generate a list of files inside the tar archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-tar-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-tar-archive.tar.gz') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-tar-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_tgz_archive(MainGenerateParse): '''Generate a list of files inside the tgz (same as tar.gz) archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-tgz-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-tgz-archive.tgz') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-tgz-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_tbz_archive(MainGenerateParse): '''Generate a list of files inside the tbz (same as tar.bz2) archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-tbz-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-tbz-archive.tbz') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-tbz-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_tbz2_archive(MainGenerateParse): '''Generate a list of files inside the tbz2 (same as tar.bz2) archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-tbz2-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-tbz2-archive.tbz2') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-tbz2-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_zip_archive(MainGenerateParse): '''Generate a list of files inside the zip archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-zip-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-zip-archive.zip') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-zip-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_tree(MainGenerateParse): '''Generate a list of files inside a tree of files and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-tree') __archive = os.path.join(__testdir, 'generate-list-and-parse-tree') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-tree.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_gzip_archive(MainGenerateParse): '''Generate a list of files inside a gzip archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-gzip-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-gzip-archive.gz') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-gzip-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_bzip2_archive(MainGenerateParse): '''Generate a list of files inside a bzip2 archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-bzip2-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-bzip2-archive.bz2') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-bzip2-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_generate_list_and_parse_xz_archive(MainGenerateParse): '''Generate a list of files inside a xz archive and parse this one right after''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-and-parse-xz-archive') __archive = os.path.join(__testdir, 'generate-list-and-parse-xz-archive.xz') __resultfile = os.path.join(__testdir, 'generate-list-and-parse-xz-archive.list') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: self._queue = q self._testname = __testname self._testdir = __testdir self._resultfile = os.path.join(self._testdir, 'a.out') self._main('') class Test_user_specified_delimiter(Main): '''Test if a file is missing in a tar archive with a user-specified delimiter in the file of filenames''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/user-specified-delimiter') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file missing in') class Test_tar_archive_size_not_equals_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-archive-size-not-equals-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_tar_gz_archive_size_not_equals_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-gz-archive-size-not-equals-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_tar_bz2_archive_size_not_equals_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-bz2-archive-size-not-equals-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_tar_xz_archive_size_not_equals_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-xz-archive-size-not-equals-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_gzip_archive_size_not_equals_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/gzip-archive-size-not-equals-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_bzip2_archive_size_not_equals_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/bzip2-archive-size-not-equals-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_zip_archive_size_not_equals_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/zip-archive-size-not-equals-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file with unexpected size') class Test_tar_archive_size_bigger_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-archive-size-bigger-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than') class Test_tar_gz_archive_size_bigger_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-gz-archive-size-bigger-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than') class Test_tar_bz2_archive_size_bigger_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-bz2-archive-size-bigger-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than') class Test_tar_xz_archive_size_bigger_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-xz-archive-size-bigger-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than') class Test_gzip_archive_size_bigger_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/gzip-archive-size-bigger-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than') class Test_bzip2_archive_size_bigger_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/bzip2-archive-size-bigger-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than') class Test_zip_archive_size_bigger_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/zip-archive-size-bigger-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file bigger than') class Test_tar_archive_size_smaller_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-archive-size-smaller-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than') class Test_tar_gz_archive_size_smaller_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-gz-archive-size-smaller-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than') class Test_tar_bz2_archive_size_smaller_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-bz2-archive-size-smaller-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than') class Test_tar_xz_archive_size_smaller_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/tar-xz-archive-size-smaller-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than') class Test_zip_archive_size_smaller_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/zip-archive-size-smaller-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than') class Test_gzip_archive_size_smaller_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/gzip-archive-size-smaller-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than') class Test_bzip2_archive_size_smaller_than_expected_size(Main): def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/bzip2-archive-size-smaller-than-expected-size') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('1 file smaller than') class Test_checkarchive_supported_types_equals_listtype_supported_types: '''Test if the supported types in checkarchives.py equals the ones in listtype.py This is not exactly a functional test but it triggered bug #24 so it needs to be tested ''' def __init__(self, q): # extract supported extensions from the code # store them in sets and compare them __queue = q __testname = self.__class__.__name__ with open('backupchecker/checkbackups/checkbackups.py') as __f1: __checkarchivescode = __f1.readlines() with open('backupchecker/listtype.py') as __f2: __listtypecode = __f2.readlines() __checkarchivestypes = set() __listtypetypes = set() for __line in __checkarchivescode: if 'endswith' in __line: __checkarchivestypes.add(__line.split(".endswith('")[1].split("'")[0]) for __line in __listtypecode: if 'endswith' in __line: __listtypetypes.add(__line.split(".endswith('")[1].split("'")[0]) # symmetrical differences of the two sets __unsupportedtypes = __checkarchivestypes ^ __listtypetypes if not __unsupportedtypes: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_changing_default_separator_for_tar_gz: '''Generate a list of files changing the default separator for tar gz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-changing-default-separator/tar.gz') __archive = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tar-gz.tar.gz') __resultfile = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tar-gz.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_changing_default_separator_for_tar_bz2: '''Generate a list of files changing the default separator for tar bz2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-changing-default-separator/tar.bz2') __archive = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tar-bz2.tar.bz2') __resultfile = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tar-bz2.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_changing_default_separator_for_tar_xz: '''Generate a list of files changing the default separator for tar xz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-changing-default-separator/tar.xz') __archive = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tar-xz.tar.xz') __resultfile = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tar-xz.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_changing_default_separator_for_gzip: '''Generate a list of files changing the default separator for gzip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-changing-default-separator/gzip') __archive = os.path.join(__testdir, 'generate-list-changing-default-separator-for-gzip.gz') __resultfile = os.path.join(__testdir, 'generate-list-changing-default-separator-for-gzip.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_changing_default_separator_for_bzip2: '''Generate a list of files changing the default separator for bzip2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-changing-default-separator/bzip2') __archive = os.path.join(__testdir, 'generate-list-changing-default-separator-for-bzip2.bz2') __resultfile = os.path.join(__testdir, 'generate-list-changing-default-separator-for-bzip2.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_changing_default_separator_for_zip: '''Generate a list of files changing the default separator for zip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-changing-default-separator/zip') __archive = os.path.join(__testdir, 'generate-list-changing-default-separator-for-zip.zip') __resultfile = os.path.join(__testdir, 'generate-list-changing-default-separator-for-zip.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_changing_default_separator_for_tree: '''Generate a list of files changing the default separator for a tree of files''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-list-changing-default-separator/tree') __archive = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tree') __resultfile = os.path.join(__testdir, 'generate-list-changing-default-separator-for-tree.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTDEL, ALTERNATEDELIMITER, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_expecting_hard_link_for_tar_gz(Main): '''Test if an expecting hard link in a tar.gz archive fails on a regular file''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/expecting-hard-link-for-tar-gz') self._resultfile = os.path.join(self._testdir, 'a.out') self._main('is a regular file. Should have been a hard link') class Test_wrong_target_in_tar_gz_archive(Main): '''Test if the target of a symlink is wrong in a tar gz archive''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-target-in-tar-gz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main(' target is') class Test_wrong_target_in_tar_bz2_archive(Main): '''Test if the target of a symlink is wrong in a tar bz2 archive''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-target-in-tar-bz2-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main(' target is') class Test_wrong_target_in_tar_xz_archive(Main): '''Test if the target of a symlink is wrong in a tar xz archive''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-target-in-tar-xz-archive') self._resultfile = os.path.join(self._testdir, 'a.out') self._main(' target is') class Test_wrong_target_in_tree(Main): '''Test if the target of a symlink is wrong in a tree of files''' def __init__(self, q): self._queue = q self._testname = self.__class__.__name__ self._testdir = os.path.join(ABSPATH, 'functional-tests/wrong-target-in-tree') self._resultfile = os.path.join(self._testdir, 'a.out') self._main(' target is') class Test_generate_conf_and_file_list_tar: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a tar archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-tar') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-tar.tar') __conffile = os.path.join(__testdir, 'conf.conf') __listfile = os.path.join(__testdir, 'list.list') __origconffile = os.path.join(__testdir, 'conf.conf.bck') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-tar.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-tar.list') __newconffile = [] # prepare the environment shutil.copyfile(__origconffile, __conffile) # switch flags expected conf and list files to good environment variables with open(__conffile) as __objconf: for __line in __objconf.readlines(): if 'PATH' in __line: __line = __line.replace('PATH', os.path.abspath('functional-tests/generate-conf-and-file-list-tar')) __newconffile.append(__line) with open(__conffile, 'w') as __objconf: __objconf.writelines(__newconffile) if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if open(__conffile, 'rb').read() not in open(__resultconffile, 'rb').read(): __confres = False else: __confres = True if open(__listfile, 'rb').read() not in open(__resultlistfile, 'rb').read(): __listres = False else: __listres = True if __confres and __listres: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_conf_and_file_list_tar_gz: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a tar gz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-tar-gz') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-tar-gz.tar.gz') __conffile = os.path.join(__testdir, 'conf.conf') __listfile = os.path.join(__testdir, 'list.list') __origconffile = os.path.join(__testdir, 'conf.conf.bck') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-tar-gz.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-tar-gz.list') __newconffile = [] # prepare the environment shutil.copyfile(__origconffile, __conffile) # switch flags expected conf and list files to good environment variables with open(__conffile) as __objconf: for __line in __objconf.readlines(): if 'PATH' in __line: __line = __line.replace('PATH', os.path.abspath('functional-tests/generate-conf-and-file-list-tar-gz')) __newconffile.append(__line) with open(__conffile, 'w') as __objconf: __objconf.writelines(__newconffile) if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if open(__conffile, 'rb').read() not in open(__resultconffile, 'rb').read(): __confres = False else: __confres = True if open(__listfile, 'rb').read() not in open(__resultlistfile, 'rb').read(): __listres = False else: __listres = True if __confres and __listres: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_conf_and_file_list_tar_bz2: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a tar bz2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-tar-bz2') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-tar-bz2.tar.bz2') __conffile = os.path.join(__testdir, 'conf.conf') __listfile = os.path.join(__testdir, 'list.list') __origconffile = os.path.join(__testdir, 'conf.conf.bck') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-tar-bz2.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-tar-bz2.list') __newconffile = [] # prepare the environment shutil.copyfile(__origconffile, __conffile) # switch flags expected conf and list files to good environment variables with open(__conffile) as __objconf: for __line in __objconf.readlines(): if 'PATH' in __line: __line = __line.replace('PATH', os.path.abspath('functional-tests/generate-conf-and-file-list-tar-bz2')) __newconffile.append(__line) with open(__conffile, 'w') as __objconf: __objconf.writelines(__newconffile) if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if open(__conffile, 'rb').read() not in open(__resultconffile, 'rb').read(): __confres = False else: __confres = True if open(__listfile, 'rb').read() not in open(__resultlistfile, 'rb').read(): __listres = False else: __listres = True if __confres and __listres: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_conf_and_file_list_tar_xz: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a tar xz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-tar-xz') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-tar-xz.tar.xz') __conffile = os.path.join(__testdir, 'conf.conf') __listfile = os.path.join(__testdir, 'list.list') __origconffile = os.path.join(__testdir, 'conf.conf.bck') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-tar-xz.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-tar-xz.list') __newconffile = [] # prepare the environment shutil.copyfile(__origconffile, __conffile) # switch flags expected conf and list files to good environment variables with open(__conffile) as __objconf: for __line in __objconf.readlines(): if 'PATH' in __line: __line = __line.replace('PATH', os.path.abspath('functional-tests/generate-conf-and-file-list-tar-xz')) __newconffile.append(__line) with open(__conffile, 'w') as __objconf: __objconf.writelines(__newconffile) if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if open(__conffile, 'rb').read() not in open(__resultconffile, 'rb').read(): __confres = False else: __confres = True if open(__listfile, 'rb').read() not in open(__resultlistfile, 'rb').read(): __listres = False else: __listres = True if __confres and __listres: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_conf_and_file_list_gz: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a gz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-gz') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-gz.gz') __conffile = os.path.join(__testdir, 'conf.conf') __listfile = os.path.join(__testdir, 'list.list') __origconffile = os.path.join(__testdir, 'conf.conf.bck') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-gz.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-gz.list') __newconffile = [] # prepare the environment shutil.copyfile(__origconffile, __conffile) # switch flags expected conf and list files to good environment variables with open(__conffile) as __objconf: for __line in __objconf.readlines(): if 'PATH' in __line: __line = __line.replace('PATH', os.path.abspath('functional-tests/generate-conf-and-file-list-gz')) __newconffile.append(__line) with open(__conffile, 'w') as __objconf: __objconf.writelines(__newconffile) if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if open(__conffile, 'r').read() not in open(__resultconffile, 'r').read(): __confres = False else: __confres = True if open(__listfile, 'r').read() not in open(__resultlistfile, 'r').read(): __listres = False else: __listres = True if __confres and __listres: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_conf_and_file_list_bz2: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a bz2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-bz2') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-bz2.bz2') __conffile = os.path.join(__testdir, 'conf.conf') __listfile = os.path.join(__testdir, 'list.list') __origconffile = os.path.join(__testdir, 'conf.conf.bck') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-bz2.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-bz2.list') __newconffile = [] # prepare the environment shutil.copyfile(__origconffile, __conffile) # switch flags expected conf and list files to good environment variables with open(__conffile) as __objconf: for __line in __objconf.readlines(): if 'PATH' in __line: __line = __line.replace('PATH', os.path.abspath('functional-tests/generate-conf-and-file-list-bz2')) __newconffile.append(__line) with open(__conffile, 'w') as __objconf: __objconf.writelines(__newconffile) if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if hashlib.md5(open(__resultconffile, 'rb').read()).hexdigest() != hashlib.md5(open(__conffile, 'rb').read()).hexdigest(): __confres = False else: __confres = True if hashlib.md5(open(__resultlistfile, 'rb').read()).hexdigest() != hashlib.md5(open(__listfile, 'rb').read()).hexdigest(): __listres = False else: __listres = True if __confres and __listres: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_conf_and_file_list_xz: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a xz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-xz') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-xz.xz') __conffile = os.path.join(__testdir, 'conf.conf') __listfile = os.path.join(__testdir, 'list.list') __origconffile = os.path.join(__testdir, 'conf.conf.bck') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-xz.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-xz.list') __newconffile = [] # prepare the environment shutil.copyfile(__origconffile, __conffile) # switch flags expected conf and list files to good environment variables with open(__conffile) as __objconf: for __line in __objconf.readlines(): if 'PATH' in __line: __line = __line.replace('PATH', os.path.abspath('functional-tests/generate-conf-and-file-list-xz')) __newconffile.append(__line) with open(__conffile, 'w') as __objconf: __objconf.writelines(__newconffile) if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if hashlib.md5(open(__resultconffile, 'rb').read()).hexdigest() != hashlib.md5(open(__conffile, 'rb').read()).hexdigest(): __confres = False else: __confres = True if hashlib.md5(open(__resultlistfile, 'rb').read()).hexdigest() != hashlib.md5(open(__listfile, 'rb').read()).hexdigest(): __listres = False else: __listres = True if __confres and __listres: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_conf_and_file_list_tree: '''Compare the generated list and the expected list and the configuration file and the expected configuration file for a tree''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-conf-and-file-list-tree') __archive = os.path.join(__testdir, 'generate-conf-and-file-list-tree') __resultconffile = os.path.join(__testdir, 'generate-conf-and-file-list-tree.conf') __resultlistfile = os.path.join(__testdir, 'generate-conf-and-file-list-tree.list') __newconffile = [] if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check if the parameter sha512 is available in the configuration file if 'sha512' in open(__resultconffile).read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_sha_sum_in_conf(Main): '''Test if the parameter hash in the configuration file is recognized''' def __init__(self, q): self.__queue = q self.__testname = self.__class__.__name__ self.__testdir = os.path.join(ABSPATH, 'functional-tests/sha-sum-in-conf') self.__resultfile = os.path.join(self.__testdir, 'a.out') if 'PYTHONEXE' in environ: __command = ' '.join([PYTHONEXE, EXE, OPTCONFIG, self.__testdir, OPTLOG, self.__resultfile]) else: __command = ' '.join([EXE, OPTCONFIG, self.__testdir, OPTLOG, self.__resultfile]) __result = subprocess.getstatusoutput(__command) if __result[0] != 0: self.__queue.put('{} - {}'.format(self.__testname, OKMSG)) else: self.__queue.put('{} - {}return code:{}'.format(self.__testname, KOMSG, str(__result[0]))) class Test_missing_gpg_footer(Main): '''Test if the pgp/gpg footer is missing in the configuration file''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/missing-gpg-footer') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.getstatusoutput(' '.join([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output])) else: __retcode = subprocess.getstatusoutput(' '.join([EXE, OPTCONFIG, __testdir, OPTLOG, __output])) if __retcode[0] != 0: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode[0]))) class Test_missing_gpg_header(Main): '''Test if the gpg/pgp header is missing in the configuration file''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/missing-gpg-header') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.getstatusoutput(' '.join([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output])) else: __retcode = subprocess.getstatusoutput(' '.join([EXE, OPTCONFIG, __testdir, OPTLOG, __output])) if __retcode[0] != 0: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode[0]))) class Test_strip_gpg_header_tar_gz(Main): '''Test if the gpg/pgp header is removed effectively on tar gz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/strip-gpg-header-tar-gz') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.getstatusoutput(' '.join([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output])) else: __retcode = subprocess.getstatusoutput(' '.join([EXE, OPTCONFIG, __testdir, OPTLOG, __output])) if __retcode[0] == 0: __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode[1]))) class Test_generate_list_to_check_mtime_in_tar_archive: '''Generate a list of files to check that mtime in tar archive is written''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/check-mtime-tar') __archive = os.path.join(__testdir, 'check-mtime-tar.tar.gz') __resultfile = os.path.join(__testdir, 'check-mtime-tar.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: if ' mtime|' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_to_check_mtime_in_zip_archive: '''Generate a list of files to check that mtime in zip archive is written''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/check-mtime-zip') __archive = os.path.join(__testdir, 'check-mtime-zip.zip') __resultfile = os.path.join(__testdir, 'check-mtime-zip.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: if ' mtime|' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_to_check_mtime_in_tree: '''Generate a list of files to check that mtime in tree is written''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/check-mtime-tree') __archive = os.path.join(__testdir, 'check-mtime-tree') __resultfile = os.path.join(__testdir, 'check-mtime-tree.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: if ' mtime|' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_apk_conf_files: '''Generate a apk archive and verify the result''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-apk-conf-files') __archive = os.path.join(__testdir, 'generate-apk-conf-files.apk') __resultconffile = os.path.join(__testdir, 'generate-apk-conf-files.conf') __resultlistfile = os.path.join(__testdir, 'generate-apk-conf-files.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultconffile, 'r') as __file: if 'name=generate-apk-conf-files' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) with open(__resultlistfile, 'r') as __file: if 'res/drawable-hdpi/balloons2.png| =7511 uid|0 gid|0 mtime|1329733756.0' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_custom_conf_filelist_tar: '''Test to define a custom location to write conf and listfile files for tar archives''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/custom-conf-filelist-tar') __confdir = os.path.join(__testdir, 'conf') __listdir = os.path.join(__testdir, 'list') __bothdir = os.path.join(__testdir, 'both') __archive = os.path.join(__testdir, 'custom-conf-filelist-tar.tar.gz') __resultconffile = os.path.join(__testdir, 'conf', 'custom-conf-filelist-tar.conf') __resultlistfile = os.path.join(__testdir, 'list', 'custom-conf-filelist-tar.list') __resultbothconffile = os.path.join(__testdir, 'both', 'custom-conf-filelist-tar.conf') __resultbothlistfile = os.path.join(__testdir, 'both', 'custom-conf-filelist-tar.list') if not os.path.exists(__confdir): os.mkdir(__confdir) if not os.path.exists(__listdir): os.mkdir(__listdir) if not os.path.exists(__bothdir): os.mkdir(__bothdir) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-tar.conf')): remove(os.path.join(__testdir, 'custom-conf-filelist-tar.conf')) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-tar.list')): remove(os.path.join(__testdir, 'custom-conf-filelist-tar.list')) if os.path.exists(__resultconffile): remove(__resultconffile) if os.path.exists(__resultlistfile): remove(__resultlistfile) if os.path.exists(__resultbothconffile): remove(__resultbothconffile) if os.path.exists(__resultbothlistfile): remove(__resultbothlistfile) if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode1 = subprocess.call([EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode2 = subprocess.call([EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode3 = subprocess.call([EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0: __queue.put('{} - {}return code:{} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3))) else: if not os.path.exists(__resultconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultconffile)) elif not os.path.exists(__resultlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultlistfile)) elif not os.path.exists(__resultbothconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothconffile)) elif not os.path.exists(__resultbothlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothlistfile)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_custom_conf_filelist_gzip: '''Test to define a custom location to write conf and listfile files for gzip archives''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/custom-conf-filelist-gzip') __confdir = os.path.join(__testdir, 'conf') __listdir = os.path.join(__testdir, 'list') __bothdir = os.path.join(__testdir, 'both') __archive = os.path.join(__testdir, 'custom-conf-filelist-gzip.gz') __resultconffile = os.path.join(__testdir, 'conf', 'custom-conf-filelist-gzip.conf') __resultlistfile = os.path.join(__testdir, 'list', 'custom-conf-filelist-gzip.list') __resultbothconffile = os.path.join(__testdir, 'both', 'custom-conf-filelist-gzip.conf') __resultbothlistfile = os.path.join(__testdir, 'both', 'custom-conf-filelist-gzip.list') if not os.path.exists(__confdir): os.mkdir(__confdir) if not os.path.exists(__listdir): os.mkdir(__listdir) if not os.path.exists(__bothdir): os.mkdir(__bothdir) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-gzip.conf')): remove(os.path.join(__testdir, 'custom-conf-filelist-gzip.conf')) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-gzip.list')): remove(os.path.join(__testdir, 'custom-conf-filelist-gzip.list')) if os.path.exists(__resultconffile): remove(__resultconffile) if os.path.exists(__resultlistfile): remove(__resultlistfile) if os.path.exists(__resultbothconffile): remove(__resultbothconffile) if os.path.exists(__resultbothlistfile): remove(__resultbothlistfile) if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode1 = subprocess.call([EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode2 = subprocess.call([EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode3 = subprocess.call([EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0: __queue.put('{} - {}return code:{} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3))) else: if not os.path.exists(__resultconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultconffile)) elif not os.path.exists(__resultlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultlistfile)) elif not os.path.exists(__resultbothconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothconffile)) elif not os.path.exists(__resultbothlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothlistfile)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_custom_conf_filelist_bzip2: '''Test to define a custom location to write conf and listfile files for bzip2 archives''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/custom-conf-filelist-bzip2') __confdir = os.path.join(__testdir, 'conf') __listdir = os.path.join(__testdir, 'list') __bothdir = os.path.join(__testdir, 'both') __archive = os.path.join(__testdir, 'custom-conf-filelist-bzip2.bz2') __resultconffile = os.path.join(__testdir, 'conf', 'custom-conf-filelist-bzip2.conf') __resultlistfile = os.path.join(__testdir, 'list', 'custom-conf-filelist-bzip2.list') __resultbothconffile = os.path.join(__testdir, 'both', 'custom-conf-filelist-bzip2.conf') __resultbothlistfile = os.path.join(__testdir, 'both', 'custom-conf-filelist-bzip2.list') if not os.path.exists(__confdir): os.mkdir(__confdir) if not os.path.exists(__listdir): os.mkdir(__listdir) if not os.path.exists(__bothdir): os.mkdir(__bothdir) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-bzip2.conf')): remove(os.path.join(__testdir, 'custom-conf-filelist-bzip2.conf')) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-bzip2.list')): remove(os.path.join(__testdir, 'custom-conf-filelist-bzip2.list')) if os.path.exists(__resultconffile): remove(__resultconffile) if os.path.exists(__resultlistfile): remove(__resultlistfile) if os.path.exists(__resultbothconffile): remove(__resultbothconffile) if os.path.exists(__resultbothlistfile): remove(__resultbothlistfile) if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode1 = subprocess.call([EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode2 = subprocess.call([EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode3 = subprocess.call([EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0: __queue.put('{} - {}return code:{} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3))) else: if not os.path.exists(__resultconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultconffile)) elif not os.path.exists(__resultlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultlistfile)) elif not os.path.exists(__resultbothconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothconffile)) elif not os.path.exists(__resultbothlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothlistfile)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_custom_conf_filelist_lzma: '''Test to define a custom location to write conf and listfile files for lzma archives''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/custom-conf-filelist-lzma') __confdir = os.path.join(__testdir, 'conf') __listdir = os.path.join(__testdir, 'list') __bothdir = os.path.join(__testdir, 'both') __archive = os.path.join(__testdir, 'custom-conf-filelist-lzma.xz') __resultconffile = os.path.join(__testdir, 'conf', 'custom-conf-filelist-lzma.conf') __resultlistfile = os.path.join(__testdir, 'list', 'custom-conf-filelist-lzma.list') __resultbothconffile = os.path.join(__testdir, 'both', 'custom-conf-filelist-lzma.conf') __resultbothlistfile = os.path.join(__testdir, 'both', 'custom-conf-filelist-lzma.list') if not os.path.exists(__confdir): os.mkdir(__confdir) if not os.path.exists(__listdir): os.mkdir(__listdir) if not os.path.exists(__bothdir): os.mkdir(__bothdir) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-lzma.conf')): remove(os.path.join(__testdir, 'custom-conf-filelist-lzma.conf')) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-lzma.list')): remove(os.path.join(__testdir, 'custom-conf-filelist-lzma.list')) if os.path.exists(__resultconffile): remove(__resultconffile) if os.path.exists(__resultlistfile): remove(__resultlistfile) if os.path.exists(__resultbothconffile): remove(__resultbothconffile) if os.path.exists(__resultbothlistfile): remove(__resultbothlistfile) if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode1 = subprocess.call([EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode2 = subprocess.call([EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode3 = subprocess.call([EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0: __queue.put('{} - {}return code:{} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3))) else: if not os.path.exists(__resultconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultconffile)) elif not os.path.exists(__resultlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultlistfile)) elif not os.path.exists(__resultbothconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothconffile)) elif not os.path.exists(__resultbothlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothlistfile)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_custom_conf_filelist_zip: '''Test to define a custom location to write conf and listfile files for zip archives''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/custom-conf-filelist-zip') __confdir = os.path.join(__testdir, 'conf') __listdir = os.path.join(__testdir, 'list') __bothdir = os.path.join(__testdir, 'both') __archive = os.path.join(__testdir, 'custom-conf-filelist-zip.zip') __resultconffile = os.path.join(__testdir, 'conf', 'custom-conf-filelist-zip.conf') __resultlistfile = os.path.join(__testdir, 'list', 'custom-conf-filelist-zip.list') __resultbothconffile = os.path.join(__testdir, 'both', 'custom-conf-filelist-zip.conf') __resultbothlistfile = os.path.join(__testdir, 'both', 'custom-conf-filelist-zip.list') if not os.path.exists(__confdir): os.mkdir(__confdir) if not os.path.exists(__listdir): os.mkdir(__listdir) if not os.path.exists(__bothdir): os.mkdir(__bothdir) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-zip.conf')): remove(os.path.join(__testdir, 'custom-conf-filelist-zip.conf')) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-zip.list')): remove(os.path.join(__testdir, 'custom-conf-filelist-zip.list')) if os.path.exists(__resultconffile): remove(__resultconffile) if os.path.exists(__resultlistfile): remove(__resultlistfile) if os.path.exists(__resultbothconffile): remove(__resultbothconffile) if os.path.exists(__resultbothlistfile): remove(__resultbothlistfile) if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode1 = subprocess.call([EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode2 = subprocess.call([EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode3 = subprocess.call([EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0: __queue.put('{} - {}return code:{} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3))) else: if not os.path.exists(__resultconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultconffile)) elif not os.path.exists(__resultlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultlistfile)) elif not os.path.exists(__resultbothconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothconffile)) elif not os.path.exists(__resultbothlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothlistfile)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_custom_conf_filelist_tree: '''Test to define a custom location to write conf and listfile files for a tree of files''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/custom-conf-filelist-tree') __confdir = os.path.join(__testdir, 'conf') __listdir = os.path.join(__testdir, 'list') __bothdir = os.path.join(__testdir, 'both') __archive = os.path.join(__testdir, 'custom-conf-filelist-tree') __resultconffile = os.path.join(__testdir, 'conf', 'custom-conf-filelist-tree.conf') __resultlistfile = os.path.join(__testdir, 'list', 'custom-conf-filelist-tree.list') __resultbothconffile = os.path.join(__testdir, 'both', 'custom-conf-filelist-tree.conf') __resultbothlistfile = os.path.join(__testdir, 'both', 'custom-conf-filelist-tree.list') if not os.path.exists(__confdir): os.mkdir(__confdir) if not os.path.exists(__listdir): os.mkdir(__listdir) if not os.path.exists(__bothdir): os.mkdir(__bothdir) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-tree.conf')): remove(os.path.join(__testdir, 'custom-conf-filelist-tree.conf')) if os.path.exists(os.path.join(__testdir, 'custom-conf-filelist-tree.list')): remove(os.path.join(__testdir, 'custom-conf-filelist-tree.list')) if os.path.exists(__resultconffile): remove(__resultconffile) if os.path.exists(__resultlistfile): remove(__resultlistfile) if os.path.exists(__resultbothconffile): remove(__resultbothconffile) if os.path.exists(__resultbothlistfile): remove(__resultbothlistfile) if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode1 = subprocess.call([EXE, '-C', os.path.join(__testdir, 'conf/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode2 = subprocess.call([EXE, '-L', os.path.join(__testdir, 'list/'), OPTHASHES, OPTFULLGEN, __archive]) if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) else: __retcode3 = subprocess.call([EXE, '-O', os.path.join(__testdir, 'both/'), OPTHASHES, OPTFULLGEN, __archive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0: __queue.put('{} - {}return code:{} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3))) else: if not os.path.exists(__resultconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultconffile)) elif not os.path.exists(__resultlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultlistfile)) elif not os.path.exists(__resultbothconffile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothconffile)) elif not os.path.exists(__resultbothlistfile): __queue.put('{} - {}missing {}'.format(__testname, KOMSG, __resultbothlistfile)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_hashtype_option: '''Test the hashtype option''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/hashtype-option') __targzdir = os.path.join(__testdir, 'tar-gz') __gzipdir = os.path.join(__testdir, 'gzip') __bzip2dir = os.path.join(__testdir, 'bzip2') __lzmadir = os.path.join(__testdir, 'lzma') __treedir = os.path.join(__testdir, 'tree') __zipdir = os.path.join(__testdir, 'zip') __resulttargzfile = os.path.join(__targzdir, 'hashtype-option.list') __resultgzipfile = os.path.join(__gzipdir, 'hashtype-option.list') __resultbzip2file = os.path.join(__bzip2dir, 'hashtype-option.list') __resultlzmafile = os.path.join(__lzmadir, 'hashtype-option.list') __resultzipfile = os.path.join(__zipdir, 'hashtype-option.list') __resulttreefile = os.path.join(__treedir, 'hashtype-option.list') __targzarchive = os.path.join(__targzdir, 'hashtype-option.tar.gz') __gziparchive = os.path.join(__gzipdir, 'hashtype-option.gz') __bzip2archive = os.path.join(__bzip2dir, 'hashtype-option.bz2') __lzmaarchive = os.path.join(__lzmadir, 'hashtype-option.xz') __treearchive = os.path.join(__treedir, 'hashtype-option') __ziparchive = os.path.join(__zipdir, 'hashtype-option.zip') if os.path.exists(__resulttargzfile): remove(__resulttargzfile) if os.path.exists(__resultgzipfile): remove(__resultgzipfile) if os.path.exists(__resultbzip2file): remove(__resultbzip2file) if os.path.exists(__resultlzmafile): remove(__resultlzmafile) if os.path.exists(__resultzipfile): remove(__resultzipfile) if os.path.exists(__resulttreefile): remove(__resulttreefile) # sha1 if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-O', __targzdir, OPTHASHTYPE, 'sha1', OPTHASHES, OPTFULLGEN, __targzarchive]) else: __retcode1 = subprocess.call([EXE, '-O', __targzdir, OPTHASHTYPE, 'sha1', OPTHASHES, OPTFULLGEN, __targzarchive]) # sha224 if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-O', __gzipdir, OPTHASHTYPE, 'sha224', OPTHASHES, OPTFULLGEN, __gziparchive]) else: __retcode2 = subprocess.call([EXE, '-O', __gzipdir, OPTHASHTYPE, 'sha224', OPTHASHES, OPTFULLGEN, __gziparchive]) # sha256 if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', __bzip2dir, OPTHASHTYPE, 'sha256', OPTHASHES, OPTFULLGEN, __bzip2archive]) else: __retcode3 = subprocess.call([EXE, '-O', __bzip2dir, OPTHASHTYPE, 'sha256', OPTHASHES, OPTFULLGEN, __bzip2archive]) # sha384 if 'PYTHONEXE' in environ: __retcode4 = subprocess.call([PYTHONEXE, EXE, '-O', __lzmadir, OPTHASHTYPE, 'sha384', OPTHASHES, OPTFULLGEN, __lzmaarchive]) else: __retcode4 = subprocess.call([EXE, '-O', __lzmadir, OPTHASHTYPE, 'sha384', OPTHASHES, OPTFULLGEN, __lzmaarchive]) # sha512 if 'PYTHONEXE' in environ: __retcode5 = subprocess.call([PYTHONEXE, EXE, '-O', __zipdir, OPTHASHTYPE, 'sha512', OPTHASHES, OPTFULLGEN, __ziparchive]) else: __retcode5 = subprocess.call([EXE, '-O', __zipdir, OPTHASHTYPE, 'sha512', OPTHASHES, OPTFULLGEN, __ziparchive]) # sha1 again if 'PYTHONEXE' in environ: __retcode6 = subprocess.call([PYTHONEXE, EXE, '-O', __treedir, OPTHASHTYPE, 'sha1', OPTHASHES, OPTFULLGEN, __treearchive]) else: __retcode6 = subprocess.call([EXE, '-O', __treedir, OPTHASHTYPE, 'sha1', OPTHASHES, OPTFULLGEN, __treearchive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0 and __retcode4 != 0 and __retcode5 != 0: __queue.put('{} - {}return code:{} {} {} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3), str(__retcode4), str(__retcode5), str(__retcode6))) else: __returnok = True for __test in [(__resulttargzfile, 'sha1'), (__resultgzipfile, 'sha224'), (__resultbzip2file, 'sha256'), (__resultlzmafile, 'sha384'), (__resultzipfile, 'sha512'), (__resulttreefile, 'sha1')]: with open(__test[0], 'r') as __file: __content = __file.read() if __test[1] not in __content: __returnok = False __queue.put('{} - {} - {} not in {}'.format(__testname, KOMSG, __test[0], __test[1])) if __returnok: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_exceptions_file_option: '''Test the exceptions file option''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/exceptions-file-option') __targzdir = os.path.join(__testdir, 'tar-gz') __zipdir = os.path.join(__testdir, 'zip') __gzipdir = os.path.join(__testdir, 'gzip') __bzip2dir = os.path.join(__testdir, 'bzip2') __lzmadir = os.path.join(__testdir, 'lzma') __treedir = os.path.join(__testdir, 'tree') __resulttargzfile = os.path.join(__targzdir, 'exceptions-file-option.list') __resultzipfile = os.path.join(__zipdir, 'exceptions-file-option.list') __resultgzipfile = os.path.join(__gzipdir, 'exceptions-file-option.list') __resultbzip2file = os.path.join(__bzip2dir, 'exceptions-file-option.list') __resultlzmafile = os.path.join(__lzmadir, 'exceptions-file-option.list') __resulttreefile = os.path.join(__treedir, 'exceptions-file-option.list') __targzexceptionsfile = os.path.join(__targzdir, 'targzexceptionsfile') __zipexceptionsfile = os.path.join(__zipdir, 'zipexceptionsfile') __gzipexceptionsfile = os.path.join(__gzipdir, 'gzipexceptionsfile') __bzip2exceptionsfile = os.path.join(__bzip2dir, 'bzip2exceptionsfile') __lzmaexceptionsfile = os.path.join(__lzmadir, 'lzmaexceptionsfile') __treeexceptionsfile = os.path.join(__treedir, 'treeexceptionsfile') __targzarchive = os.path.join(__targzdir, 'exceptions-file-option.tar.gz') __ziparchive = os.path.join(__zipdir, 'exceptions-file-option.zip') __gziparchive = os.path.join(__gzipdir, 'exceptions-file-option.gz') __bzip2archive = os.path.join(__bzip2dir, 'exceptions-file-option.bz2') __lzmaarchive = os.path.join(__lzmadir, 'exceptions-file-option.xz') __treearchive = os.path.join(__treedir, 'exceptions-file-option') if os.path.exists(__resulttargzfile): remove(__resulttargzfile) if os.path.exists(__resultzipfile): remove(__resultzipfile) if os.path.exists(__resultgzipfile): remove(__resultgzipfile) if os.path.exists(__resultbzip2file): remove(__resultbzip2file) if os.path.exists(__resultlzmafile): remove(__resultlzmafile) if os.path.exists(__resulttreefile): remove(__resulttreefile) # tar.gz if 'PYTHONEXE' in environ: __retcode1 = subprocess.call([PYTHONEXE, EXE, '-O', __targzdir, OPTEXCEPTIONSFILE, __targzexceptionsfile, OPTFULLGEN, __targzarchive]) else: __retcode1 = subprocess.call([EXE, '-O', __targzdir, OPTEXCEPTIONSFILE, __targzexceptionsfile, OPTFULLGEN, __targzarchive]) # zip if 'PYTHONEXE' in environ: __retcode2 = subprocess.call([PYTHONEXE, EXE, '-O', __zipdir, OPTEXCEPTIONSFILE, __zipexceptionsfile, OPTFULLGEN, __ziparchive]) else: __retcode2 = subprocess.call([EXE, '-O', __zipdir, OPTEXCEPTIONSFILE, __zipexceptionsfile, OPTFULLGEN, __ziparchive]) # gzip if 'PYTHONEXE' in environ: __retcode3 = subprocess.call([PYTHONEXE, EXE, '-O', __gzipdir, OPTEXCEPTIONSFILE, __gzipexceptionsfile, OPTFULLGEN, __gziparchive]) else: __retcode3 = subprocess.call([EXE, '-O', __gzipdir, OPTEXCEPTIONSFILE, __gzipexceptionsfile, OPTFULLGEN, __gziparchive]) # bzip2 if 'PYTHONEXE' in environ: __retcode4 = subprocess.call([PYTHONEXE, EXE, '-O', __bzip2dir, OPTEXCEPTIONSFILE, __bzip2exceptionsfile, OPTFULLGEN, __bzip2archive]) else: __retcode4 = subprocess.call([EXE, '-O', __bzip2dir, OPTEXCEPTIONSFILE, __bzip2exceptionsfile, OPTFULLGEN, __bzip2archive]) # lzma if 'PYTHONEXE' in environ: __retcode5 = subprocess.call([PYTHONEXE, EXE, '-O', __lzmadir, OPTEXCEPTIONSFILE, __lzmaexceptionsfile, OPTFULLGEN, __lzmaarchive]) else: __retcode5 = subprocess.call([EXE, '-O', __lzmadir, OPTEXCEPTIONSFILE, __lzmaexceptionsfile, OPTFULLGEN, __lzmaarchive]) # tree if 'PYTHONEXE' in environ: __retcode6 = subprocess.call([PYTHONEXE, EXE, '-O', __treedir, OPTEXCEPTIONSFILE, __treeexceptionsfile, OPTFULLGEN, __treearchive]) else: __retcode6 = subprocess.call([EXE, '-O', __treedir, OPTEXCEPTIONSFILE, __treeexceptionsfile, OPTFULLGEN, __treearchive]) if __retcode1 != 0 and __retcode2 != 0 and __retcode3 != 0 and __retcode4 != 0 and __retcode5 != 0 and __retcode6 != 0 : __queue.put('{} - {}return code:{} {} {} {} {}'.format(__testname, KOMSG, str(__retcode1), str(__retcode2), str(__retcode3), str(__retcode4), str(__retcode5), str(__retcode6))) else: __returnok = True for __test in [(__resulttargzfile, 'sha1'), (__resultgzipfile, 'sha224'), (__resultbzip2file, 'sha384'), (__resultlzmafile, 'sha512'), (__resultzipfile, 'sha224'), (__resulttreefile, 'sha1')]: with open(__test[0], 'r') as __file: __content = __file.read() if __test[1] not in __content: __returnok = False __queue.put('{} - {} - {} not in {}'.format(__testname, KOMSG, __test[0], __test[1])) if __returnok: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_generate_list_to_check_uname_in_tar_gz_archive: '''Generate a list of files to check that uname in tar.gz archive is written''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/check-uname-tar-gz') __archive = os.path.join(__testdir, 'check-uname-tar-gz.tar.gz') __resultfile = os.path.join(__testdir, 'check-uname-tar-gz.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: if ' owner|' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_to_check_gname_in_tar_gz_archive: '''Generate a list of files to check that gname in tar.gz archive is written''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/check-gname-tar-gz') __archive = os.path.join(__testdir, 'check-gname-tar-gz.tar.gz') __resultfile = os.path.join(__testdir, 'check-gname-tar-gz.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: if ' group|' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_to_check_uname_in_tree: '''Generate a list of files to check that uname in tree is written''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/check-uname-tree') __archive = os.path.join(__testdir, 'check-uname-tree') __resultfile = os.path.join(__testdir, 'check-uname-tree.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: if ' owner|' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_list_to_check_gname_in_tree: '''Generate a list of files to check that gname in tree is written''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/check-gname-tree') __archive = os.path.join(__testdir, 'check-gname-tree') __resultfile = os.path.join(__testdir, 'check-gname-tree.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTHASHES, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTHASHES, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly modified list of files with the new delimiter if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output]) else: __retcode = subprocess.call([EXE, OPTCONFIG, __testdir, OPTLOG, __output]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultfile, 'r') as __file: if ' group|' in __file.read(): __queue.put('{} - {}'.format(__testname, OKMSG)) else: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) class Test_generate_confs_for_stream_from_tar_gz: '''Generate configuration files for a stream from a tar.gz file''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/conf-files-from-tar-gz') __archive = os.path.join(__testdir, 'conf-files-from-tar-gz.tar.gz') __resultconffile = os.path.join(__testdir, 'conf-files-from-tar-gz.conf') __resultlistfile = os.path.join(__testdir, 'conf-files-from-tar-gz.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('cat {} | {} {} {} {}'.format(__archive, PYTHONEXE, EXE, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('cat {} | {} {} {}'.format(__archive, EXE, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__resultconffile, 'r') as __file: if '[main]\nname=conf-files-from-tar-gz\ntype=archive' in __file.read(): test1 = True else: test1 = False with open(__resultlistfile, 'r') as __file: if '[files]' in __file.read(): test2 = True else: test2 = False if not test1 or not test2: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_generate_and_check_for_stream_from_tar_gz: '''Generate configuration files and after check the archive for a tar.gz stream''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-and-check-tar-stream-from-tar-gz') __archive = os.path.join(__testdir, 'generate-and-check-tar-stream-from-tar-gz.tar.gz') __resultconffile = os.path.join(__testdir, 'generate-and-check-tar-stream-from-tar-gz.conf') __resultlistfile = os.path.join(__testdir, 'generate-and-check-tar-stream-from-tar-gz.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('cat {} | {} {} {} {}'.format(__archive, PYTHONEXE, EXE, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('cat {} | {} {} {}'.format(__archive, EXE, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: # check now the newly created configuration files if 'PYTHONEXE' in environ: __retcode = subprocess.call('cat {} | {} {} {} {} {} {}'.format(__archive, PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output), shell=True) else: __retcode = subprocess.call('cat {} | {} {} {} {} {}'.format(__archive, EXE, OPTCONFIG, __testdir, OPTLOG, __output), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_with_tar_gz: '''Generate configuration files and check if switching configuration names was successful with tar.gz archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-with-tar-gz') __archive = os.path.join(__testdir, 'configuration-name-option-with-tar-gz.tar.gz') __newname = 'newname' __resultconffile = os.path.join(__testdir, 'newname.conf') __resultlistfile = os.path.join(__testdir, 'newname.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('{} {} {} {} {} {}'.format(PYTHONEXE, EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('{} {} {} {} {}'.format(EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_with_zip: '''Generate configuration files and check if switching configuration names was successful with zip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-with-zip') __archive = os.path.join(__testdir, 'configuration-name-option-with-zip.zip') __newname = 'newname' __resultconffile = os.path.join(__testdir, 'newname.conf') __resultlistfile = os.path.join(__testdir, 'newname.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('{} {} {} {} {} {}'.format(PYTHONEXE, EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('{} {} {} {} {}'.format(EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_with_tree: '''Generate configuration files and check if switching configuration names was successful with a tree of files''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-with-tree') __archive = os.path.join(__testdir, 'configuration-name-option-with-tree') __newname = 'newname' __resultconffile = os.path.join(__testdir, 'newname.conf') __resultlistfile = os.path.join(__testdir, 'newname.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('{} {} {} {} {} {}'.format(PYTHONEXE, EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('{} {} {} {} {}'.format(EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_with_gzip: '''Generate configuration files and check if switching configuration names was successful with gzip archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-with-gzip') __archive = os.path.join(__testdir, 'configuration-name-option-with-gzip.gz') __newname = 'newname' __resultconffile = os.path.join(__testdir, 'newname.conf') __resultlistfile = os.path.join(__testdir, 'newname.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('{} {} {} {} {} {}'.format(PYTHONEXE, EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('{} {} {} {} {}'.format(EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_with_bzip2: '''Generate configuration files and check if switching configuration names was successful with bzip2 archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-with-bzip2') __archive = os.path.join(__testdir, 'configuration-name-option-with-bzip2.bz2') __newname = 'newname' __resultconffile = os.path.join(__testdir, 'newname.conf') __resultlistfile = os.path.join(__testdir, 'newname.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('{} {} {} {} {} {}'.format(PYTHONEXE, EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('{} {} {} {} {}'.format(EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_with_lzma: '''Generate configuration files and check if switching configuration names was successful with lzma archive''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-with-lzma') __archive = os.path.join(__testdir, 'configuration-name-option-with-lzma.xz') __newname = 'newname' __resultconffile = os.path.join(__testdir, 'newname.conf') __resultlistfile = os.path.join(__testdir, 'newname.list') __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call('{} {} {} {} {} {}'.format(PYTHONEXE, EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) else: __retcode = subprocess.call('{} {} {} {} {}'.format(EXE, OPTCONFNAME, __newname, OPTFULLGEN, __archive), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_and_conf_list_output_with_tar_gz: '''Generate configuration files and check if switching configuration names was successful with tar.gz archive. This test also uses the output-conf-dir and -output-list-dir options.''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tar-gz') __archive = os.path.join(__testdir, 'configuration-name-option-and-conf-list-ouput-option-with-tar-gz.tar.gz') __newname = 'newname2' __resultconffile = os.path.join(__testdir, 'conf/newname2.conf') if os.path.exists(__resultconffile): remove(__resultconffile) __resultconfdir = os.path.dirname(__resultconffile) if not os.path.exists(__resultconfdir): os.mkdir(__resultconfdir) __resultlistfile = os.path.join(__testdir, 'list/newname2.list') if os.path.exists(__resultlistfile): remove(__resultlistfile) __resultlistdir = os.path.dirname(__resultlistfile) if not os.path.exists(__resultlistdir): os.mkdir(__resultlistdir) __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_and_conf_list_output_with_zip: '''Generate configuration files and check if switching configuration names was successful with zip archive. This test also uses the output-conf-dir and -output-list-dir options.''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-and-conf-list-ouput-option-with-zip') __archive = os.path.join(__testdir, 'configuration-name-option-and-conf-list-ouput-option-with-zip.zip') __newname = 'newname2' __resultconffile = os.path.join(__testdir, 'conf/newname2.conf') if os.path.exists(__resultconffile): remove(__resultconffile) __resultconfdir = os.path.dirname(__resultconffile) if not os.path.exists(__resultconfdir): os.mkdir(__resultconfdir) __resultlistfile = os.path.join(__testdir, 'list/newname2.list') if os.path.exists(__resultlistfile): remove(__resultlistfile) __resultlistdir = os.path.dirname(__resultlistfile) if not os.path.exists(__resultlistdir): os.mkdir(__resultlistdir) __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_and_conf_list_output_with_tree: '''Generate configuration files and check if switching configuration names was successful with tree of files. This test also uses the output-conf-dir and -output-list-dir options.''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-and-conf-list-ouput-option-with-tree') __archive = os.path.join(__testdir, 'configuration-name-option-and-conf-list-ouput-option-with-tree') __newname = 'newname2' __resultconffile = os.path.join(__testdir, 'conf/newname2.conf') if os.path.exists(__resultconffile): remove(__resultconffile) __resultconfdir = os.path.dirname(__resultconffile) if not os.path.exists(__resultconfdir): os.mkdir(__resultconfdir) __resultlistfile = os.path.join(__testdir, 'list/newname2.list') if os.path.exists(__resultlistfile): remove(__resultlistfile) __resultlistdir = os.path.dirname(__resultlistfile) if not os.path.exists(__resultlistdir): os.mkdir(__resultlistdir) __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_and_conf_list_output_with_gzip: '''Generate configuration files and check if switching configuration names was successful with gzip archive. This test also uses the output-conf-dir and -output-list-dir options.''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-and-conf-list-ouput-option-with-gzip') __archive = os.path.join(__testdir, 'configuration-name-option-and-conf-list-ouput-option-with-gzip.gz') __newname = 'newname2' __resultconffile = os.path.join(__testdir, 'conf/newname2.conf') if os.path.exists(__resultconffile): remove(__resultconffile) __resultconfdir = os.path.dirname(__resultconffile) if not os.path.exists(__resultconfdir): os.mkdir(__resultconfdir) __resultlistfile = os.path.join(__testdir, 'list/newname2.list') if os.path.exists(__resultlistfile): remove(__resultlistfile) __resultlistdir = os.path.dirname(__resultlistfile) if not os.path.exists(__resultlistdir): os.mkdir(__resultlistdir) __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_and_conf_list_output_with_bzip2: '''Generate configuration files and check if switching configuration names was successful with bzip2 archive. This test also uses the output-conf-dir and -output-list-dir options.''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-and-conf-list-ouput-option-with-bzip2') __archive = os.path.join(__testdir, 'configuration-name-option-and-conf-list-ouput-option-with-bzip2.bz2') __newname = 'newname2' __resultconffile = os.path.join(__testdir, 'conf/newname2.conf') if os.path.exists(__resultconffile): remove(__resultconffile) __resultconfdir = os.path.dirname(__resultconffile) if not os.path.exists(__resultconfdir): os.mkdir(__resultconfdir) __resultlistfile = os.path.join(__testdir, 'list/newname2.list') if os.path.exists(__resultlistfile): remove(__resultlistfile) __resultlistdir = os.path.dirname(__resultlistfile) if not os.path.exists(__resultlistdir): os.mkdir(__resultlistdir) __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_configuration_name_option_and_conf_list_output_with_lzma: '''Generate configuration files and check if switching configuration names was successful with lzma archive. This test also uses the output-conf-dir and -output-list-dir options.''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/configuration-name-option-and-conf-list-ouput-option-with-lzma') __archive = os.path.join(__testdir, 'configuration-name-option-and-conf-list-ouput-option-with-lzma.xz') __newname = 'newname2' __resultconffile = os.path.join(__testdir, 'conf/newname2.conf') if os.path.exists(__resultconffile): remove(__resultconffile) __resultconfdir = os.path.dirname(__resultconffile) if not os.path.exists(__resultconfdir): os.mkdir(__resultconfdir) __resultlistfile = os.path.join(__testdir, 'list/newname2.list') if os.path.exists(__resultlistfile): remove(__resultlistfile) __resultlistdir = os.path.dirname(__resultlistfile) if not os.path.exists(__resultlistdir): os.mkdir(__resultlistdir) __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTOUTPUTCONFDIR, __resultconfdir, OPTOUTPUTLISTDIR, __resultlistdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=newname' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_full_conf_output_with_stream_tar_gz: '''Generate configuration files with stream using --output-list-and-conf-dir option with stream of tar.gz''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/generate-full-conf-output-option-with-stream-tar-gz') __archive = os.path.join(__testdir, 'generate-full-conf-output-option-with-stream-tar-gz.tar.gz') __newname = 'tarstream' __resultconffile = os.path.join(__testdir, 'fullconf/tarstream.conf') if os.path.exists(__resultconffile): remove(__resultconffile) __resultconfdir = os.path.dirname(__resultconffile) if not os.path.exists(__resultconfdir): os.mkdir(__resultconfdir) __resultlistfile = os.path.join(__testdir, 'fullconf/tarstream.list') if os.path.exists(__resultlistfile): remove(__resultlistfile) __resultlistdir = os.path.dirname(__resultlistfile) if not os.path.exists(__resultlistdir): os.mkdir(__resultlistdir) __output = os.path.join(__testdir, 'a.out') if 'PYTHONEXE' in environ: __retcode = subprocess.call([PYTHONEXE, EXE, OPTOUTPUTFULLDIR, __resultconfdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) else: __retcode = subprocess.call([EXE, OPTOUTPUTFULLDIR, __resultconfdir, OPTCONFNAME, __newname, OPTFULLGEN, __archive]) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: if os.path.exists(__resultconffile): test1 = True else: test1 = False if os.path.exists(__resultlistfile): test2 = True else: test2 = False with open(__resultconffile, 'r') as __file: if '[main]\nname=tarstream' in __file.read(): test3 = True else: test3 = False if not test1 or not test2 or not test3: __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) class Test_scan_archive_for_stream_from_tar_gz: '''Scan archive for a stream from a tar.gz file''' def __init__(self, q): __queue = q __res = True __testname = self.__class__.__name__ __testdir = os.path.join(ABSPATH, 'functional-tests/scan-archive-for-stream-from-tar-gz') __archive = os.path.join(__testdir, 'scan-archive-for-stream-from-tar-gz.tar.gz') __output = os.path.join(__testdir, 'a.out') if os.path.exists(__output): remove(__output) if 'PYTHONEXE' in environ: __retcode = subprocess.call('cat {} | {} {} {} {} {} {} -'.format(__archive, PYTHONEXE, EXE, OPTCONFIG, __testdir, OPTLOG, __output), shell=True) else: __retcode = subprocess.call('cat {} | {} {} {} {} {} -'.format(__archive, EXE, OPTCONFIG, __testdir, OPTLOG, __output), shell=True) if __retcode != 0: __queue.put('{} - {}return code:{}'.format(__testname, KOMSG, str(__retcode))) else: with open(__output, 'r') as __file: if '1 file with unexpected uid' not in __file.read(): __queue.put('{} - {}value in result file not expected'.format(__testname, KOMSG)) else: __queue.put('{} - {}'.format(__testname, OKMSG)) if __name__ == '__main__': processes = [] results = [] koresults = [] q = Queue() for element in dir(functionaltests): if 'Test' in element: processes.append(Process(target=getattr(functionaltests, element), args=(q,))) processes[-1].start() for p in processes: results.append(q.get()) p.join() # Establishing list of KOs for result in results: if KOMSG in result: koresults.append(result) if len(koresults) != 0: print(linesep.join(koresults)) sys.exit(1) else: print(linesep.join(results)) backupchecker-1.7/man/000077500000000000000000000000001251036066300147305ustar00rootroot00000000000000backupchecker-1.7/man/backupchecker.1000066400000000000000000000105541251036066300176110ustar00rootroot00000000000000'\" t .\" Title: backupchecker .\" Author: Carl Chenet .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 02/27/2015 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" .TH "BACKUPCHECKER" "1" "02/27/2015" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" backupchecker \- fully automated backup checker .SH "SYNOPSIS" .sp backupchecker [\-c DIR] [\-l FILE] [\-G] ARG1 ARG2 .SH "DESCRIPTION" .sp Backup Checker parses backups (archives and file tree) to perform several different checks in order to verify your backup integrity and its associated content\&. .SH "OPTIONS" .PP \fB\-c \fR\fB\fIDIR\fR\fR\fB, \-\-configpath \fR\fB\fIDIR\fR\fR .RS 4 the path to the configurations .RE .PP \fB\-C \fR\fB\fIDIR\fR\fR\fB, \-\-output\-conf\-dir \fR\fB\fIDIR\fR\fR .RS 4 the directory to store the configuration file .RE .PP \fB\-d \fR\fB\fIDELIMITER\fR\fR\fB, \-\-delimiter \fR\fB\fIDELIMITER\fR\fR .RS 4 delimiter of the fields for the list of files .RE .PP \fB\-E \fR\fB\fIFILE\fR\fR\fB, \-\-exceptions\-file \fR\fB\fIFILE\fR\fR .RS 4 delimiter of the fields for the list of files .RE .PP \fB\-g, \-\-gen\-list\fR .RS 4 generate a list of files inside a backup .RE .PP \fB\-G, \-\-gen\-full\fR .RS 4 generate the configuration file and the list of files for the backup .RE .PP \fB\-H, \-\-hashes\fR .RS 4 generate the hash sum of each encountered file in the backup .RE .PP \fB\-\-hashtype \fR\fB\fIHASHTYPE\fR\fR .RS 4 the type of the hash sum to use while generating configurations for the archive .RE .PP \fB\-l \fR\fB\fIFILE\fR\fR\fB, \-\-log \fR\fB\fIFILE\fR\fR .RS 4 the log file .RE .PP \fB\-L \fR\fB\fIDIR\fR\fR\fB, \-\-output\-list\-dir \fR\fB\fIDIR\fR\fR .RS 4 the directory to store the list of files inside an archive or tree .RE .PP \fB\-n \fR\fB\fINAME\fR\fR\fB, \-\-configuration\-name \fR\fB\fINAME\fR\fR .RS 4 the name to use to name the \&.conf and \&.list generated by \-g or \-G options (default is the name of the archive) .RE .PP \fB\-O \fR\fB\fIDIR\fR\fR\fB, \-\-output\-list\-and\-conf\-dir \fR\fB\fIDIR\fR\fR .RS 4 the directory to store the configuration file and the list of files inside an archive or tree .RE .PP \fB\-v, \-\-version\fR .RS 4 the version of Backup Checker .RE .SH "EXAMPLES" .sp Generate the list of files (\&.conf and \&.list files) and their attributes inside a backup .sp $ backupchecker \-G /backups/monthly\-backup\&.tar\&.gz .sp Launch Backup Checker indicating your configuration directory and your log file .sp $ backupchecker \-c /etc/brebis/ \-l /var/log/brebis\&.log .sp Verify a remote backup by FTP .sp $ wget \-\-quiet \-O \- ftp://user:pass@server/backup\&.tar\&.gz | backupchecker \-c /etc/brebis/ \-l /var/log/brebis\&.log .SH "AUTHOR" .sp Carl Chenet .SH "RESSOURCES" .sp Backup Checkup project homepage : https://github\&.com/backupchecker/backupchecker .SH "LICENSE" .sp Copyright \(co 2015 Carl Chenet This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License\&. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\&. See the GNU General Public License for more details\&. You should have received a copy of the GNU General Public License along with this program\&. If not, see http://www\&.gnu\&.org/licenses/\&. .RE backupchecker-1.7/scripts/000077500000000000000000000000001251036066300156445ustar00rootroot00000000000000backupchecker-1.7/scripts/backupchecker000077500000000000000000000014351251036066300203670ustar00rootroot00000000000000#!/usr/bin/python3.4 # -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from backupchecker.main import Main if __name__ == '__main__': Main() backupchecker-1.7/setup.py000066400000000000000000000035761251036066300157020ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see from distutils.core import setup import os.path import platform import sys # Warn the user about the supported Python versions if float(platform.python_version()[0:3]) < 3.4: print('You need at least Python 3.4 to use BackupChecker') sys.exit(1) CLASSIFIERS = [ 'Intended Audience :: System Administrators', 'Development Status :: 5 - Production/Stable', 'Environment :: Console', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Operating System :: POSIX :: Linux', 'Programming Language :: Python :: 3.4' ] setup(name = 'backupchecker', version = '1.7', license = 'GNU GPL v3', description = 'automated backup checker', long_description = 'Backup Checker is a fully automated backup checker.', classifiers = CLASSIFIERS, author = 'Carl Chenet', author_email = 'chaica@backupchecker.com', url = 'https://github.com/backupchecker/backupchecker', download_url = 'https://github.com/backupchecker/backupchecker', packages = ['backupchecker', 'backupchecker.checkbackups', 'backupchecker.generatelist'], data_files=[(os.path.join('share','man','man1'), ['man/backupchecker.1'])], scripts = ['scripts/backupchecker'] ) backupchecker-1.7/tests.py000077500000000000000000003076741251036066300157150ustar00rootroot00000000000000#!/usr/bin/env python3.4 # -*- coding: utf-8 -*- # Copyright © 2015 Carl Chenet # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import argparse import bz2 from datetime import datetime import gzip import logging import os import os.path import stat import sys import tarfile import unittest import zipfile import backupchecker.applogger import backupchecker.archiveinfomsg import backupchecker.checkbackups.checkarchive import backupchecker.checkbackups.checkbackups import backupchecker.checkbackups.checkbzip2 import backupchecker.checkbackups.checkgzip import backupchecker.checkbackups.checklzma import backupchecker.checkhashes import backupchecker.checkbackups.checktar import backupchecker.checkbackups.checktree import backupchecker.checkbackups.checkzip import backupchecker.cliparse import backupchecker.configurations import backupchecker.generatelist.generatelistfortar import backupchecker.generatelist.generatelistforbzip2 import backupchecker.listtype import backupchecker.main from backupchecker.expectedvalues import ExpectedValues from backupchecker.placeholder import PlaceHolder # !! logging module uses a single logger for the whole file TESTLOG = 'tests/testlog' DEFAULTDELIMITER = '|' # mock the object produced by argparse, useful for lots of tests below class Options: '''Mock the object produced by argparse, useful for lots of unittests''' def __init__(self): self.delimiter = DEFAULTDELIMITER self.isastream = False self.confname = '' class MyDict(dict): '''mock object''' pass class TestApp(unittest.TestCase): def test_applogger(self): '''Test the AppLoggerclass''' backupchecker.applogger.AppLogger(TESTLOG) self.assertEqual(True, str(logging.getLogger('applogger')).startswith('> 16) self.assertEqual('f', __result) def test_zip_translate_type_directory(self): '''test the __translate_type private method from checkzip.CheckZip - expecting directory''' __myobj = backupchecker.checkbackups.checkzip.CheckZip({'path': 'tests/checkzip_private_methods/myzip.zip', 'files_list': 'tests/checkzip_private_methods/myzip-list', 'type': 'archive', 'delimiter': ''}, Options()) __file = 'tests/checkzip_private_methods/myzip.zip' __myz = zipfile.ZipFile(__file,'r') __myinfo = __myz.infolist() __result = __myobj._CheckZip__translate_type(__myinfo[0].external_attr >> 16) self.assertEqual('d', __result) ############################################################## # # Testing the private/protected methods from checktar.CheckTar # ############################################################## def test_tar_extract_stored_file(self): '''test the _extract_stored_file protected method from checktar.CheckTar''' __myobj = backupchecker.checkbackups.checktar.CheckTar({'path': 'tests/checktar_private_methods/mytargz/mytargz.tar.gz', 'files_list': 'tests/checktar_private_methods/mytargz/mytargz-list', 'type': 'archive', 'delimiter': ''}, Options()) __file = 'tests/checktar_private_methods/mytargz/mytargz.tar.gz' self._tar = tarfile.open(__file) __result = __myobj._extract_stored_file('mytargz/hello') self.assertEqual(type(__result), type(self._tar.extractfile('mytargz/hello'))) def test_tar_translate_type_file(self): '''test the __translate_type private method from checktar.CheckTar - expecting file''' __myobj = backupchecker.checkbackups.checktar.CheckTar({'path': 'tests/checktar_private_methods/mytargz/mytargz.tar.gz', 'files_list': 'tests/checktar_private_methods/mytargz/mytargz-list', 'type': 'archive', 'delimiter': ''}, Options()) __file = 'tests/checktar_private_methods/mytargz/mytargz.tar.gz' self._tar = tarfile.open(__file) __result = __myobj._CheckTar__translate_type(self._tar.getmembers()[2].type) self.assertEqual('f', __result) def test_tar_translate_type_directory(self): '''test the __translate_type private method from checktar.CheckTar - expecting directory''' __myobj = backupchecker.checkbackups.checktar.CheckTar({'path': 'tests/checktar_private_methods/mytargz/mytargz.tar.gz', 'files_list': 'tests/checktar_private_methods/mytargz/mytargz-list', 'type': 'archive', 'delimiter': ''}, Options()) __file = 'tests/checktar_private_methods/mytargz/mytargz.tar.gz' self._tar = tarfile.open(__file) __result = __myobj._CheckTar__translate_type(self._tar.getmembers()[0].type) self.assertEqual('d', __result) def test_tar_translate_type_symbolic_link(self): '''test the __translate_type private method from checktar.CheckTar - expecting symbolic link''' __myobj = backupchecker.checkbackups.checktar.CheckTar({'path': 'tests/checktar_private_methods/mytargz/mytargz.tar.gz', 'files_list': 'tests/checktar_private_methods/mytargz/mytargz-list', 'type': 'archive', 'delimiter': ''}, Options()) __file = 'tests/checktar_private_methods/mytargz/mytargz.tar.gz' self._tar = tarfile.open(__file) __result = __myobj._CheckTar__translate_type(self._tar.getmembers()[1].type) self.assertEqual('s', __result) ################################################################ # # Testing the private/protected methods from checktree.CheckTree # ################################################################ def test_tree_extract_stored_file(self): '''test the _extract_stored_file protected method from checktree.CheckTree''' __myobj = backupchecker.checkbackups.checktree.CheckTree({'path': 'tests/checktree_private_methods/mytree', 'files_list': 'tests/checktree_private_methods/mytree-list', 'type': 'tree', 'delimiter': ''}, Options()) __file = 'tests/checktree_private_methods/mytree' __result = __myobj._extract_stored_file('hello') with open(os.path.join(__file, 'hello'), 'rb') as self.__desc: self.assertEqual(type(__result), type(self.__desc)) __result.close() def test_tree_translate_type_file(self): '''test the __translate_type private method from checktree.CheckTree - expecting file''' __myobj = backupchecker.checkbackups.checktree.CheckTree({'path': 'tests/checktree_private_methods/mytree', 'files_list': 'tests/checktree_private_methods/mytree-list', 'type': 'tree', 'delimiter': ''}, Options()) __file = 'tests/checktree_private_methods/mytree/hello' __result = __myobj._CheckTree__translate_type(os.lstat(__file).st_mode) self.assertEqual('f', __result) def test_tree_translate_type_directory(self): '''test the __translate_type private method from checktree.CheckTree - expecting directory''' __myobj = backupchecker.checkbackups.checktree.CheckTree({'path': 'tests/checktree_private_methods/mytree', 'files_list': 'tests/checktree_private_methods/mytree-list', 'type': 'tree', 'delimiter': ''}, Options()) __file = 'tests/checktree_private_methods/mytree' __result = __myobj._CheckTree__translate_type(os.lstat(__file).st_mode) self.assertEqual('d', __result) def test_tree_translate_type_symbolic_link(self): '''test the __translate_type private method from checktree.CheckTree - expecting symbolic link''' __myobj = backupchecker.checkbackups.checktree.CheckTree({'path': 'tests/checktree_private_methods/mytree', 'files_list': 'tests/checktree_private_methods/mytree-list', 'type': 'tree', 'delimiter': ''}, Options()) __file = 'tests/checktree_private_methods/mytree/riri' __result = __myobj._CheckTree__translate_type(os.lstat(__file).st_mode) self.assertEqual('s', __result) ################################################################ # # Testing the private/protected methods from checkgzip.CheckGzip # ################################################################ def test_gzip_extract_stored_file(self): '''test the _extract_stored_file protected method from checkgzip.CheckGzip''' __myobj = backupchecker.checkbackups.checkgzip.CheckGzip({'path': 'tests/checkgzip_private_methods/mygzip.gz', 'files_list': 'tests/checkgzip_private_methods/mygzip-list', 'type': 'archive', 'delimiter': ''}, Options()) __file = 'tests/checkgzip_private_methods/mygzip.gz' __result = __myobj._extract_stored_file('mygzip') with gzip.open(__file, 'rb') as self.__desc: self.assertEqual(type(__result), type(self.__desc)) __result.close() def test_extract_size_from_gzip_archive(self): '''test the extraction of a gzip uncompressed file in the gzip archive''' __arcpath = 'tests/checkgzip_private_methods/mygzip.gz' __myobj = backupchecker.checkbackups.checkgzip.CheckGzip({'path': __arcpath, 'files_list': 'tests/checkgzip_private_methods/mygzip-list', 'type': 'archive', 'delimiter': ''}, Options()) with open(__arcpath, 'rb') as __myf: self.assertEqual(23, __myobj._CheckGzip__extract_size(__myf)) def test_extract_initial_filename_from_gzip_archive(self): '''test the extraction of the initial name of an uncompressed file''' __arcpath = 'tests/checkgzip_private_methods/mygzip.gz' __myobj = backupchecker.checkbackups.checkgzip.CheckGzip({'path': __arcpath, 'files_list': 'tests/checkgzip_private_methods/mygzip-list', 'type': 'archive', 'delimiter': ''}, Options()) with open(__arcpath, 'rb') as __myf: self.assertEqual('mygzip', __myobj._CheckGzip__extract_initial_filename(__myf, 'mygzip')) ################################################################## # # Testing the private/protected methods from checkbzip2.CheckBzip2 # ################################################################## def test_bzip2_extract_stored_file(self): '''test the _extract_stored_file protected method from checkbzip2.CheckBzip2''' __myobj = backupchecker.checkbackups.checkbzip2.CheckBzip2({'path': 'tests/checkbzip2_private_methods/mybz2.bz2', 'files_list': 'tests/checkbzip2_private_methods/mybzip2-list', 'type': 'archive', 'delimiter': ''}, Options()) __file = 'tests/checkbzip2_private_methods/mybz2.bz2' __result = __myobj._extract_stored_file('mygzip') with bz2.BZ2File(__file, 'r') as self.__desc: self.assertEqual(type(__result), type(self.__desc)) __result.close() ###################################################################################### # # Testing the private/protected methods from generatelistforbzip2.GenerateListForBzip2 # ###################################################################################### def test__listconfinfo(self): '''test the GenerateListForBzip2 class''' __myobj = backupchecker.generatelist.generatelistforbzip2.GenerateListForBzip2({ 'arcpath': 'tests/checkbzip2_private_methods/mybz2.bz2', 'delimiter': '|', 'hashtype': '', 'parsingexceptions' : '', 'getallhashes': True, 'genfull': True, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) self.assertEqual(__myobj._GenerateListForBzip2__lci, {'arclistpath': 'tests/checkbzip2_private_methods/mybz2.list', 'listoffiles': ['[files]\n', 'mybz2| type|f md5|f5488b7ce878d89b59ef2752f260354f\n']}) self.assertEqual(__myobj._GenerateListForBzip2__ci, {'arcconfpath': 'tests/checkbzip2_private_methods/mybz2.conf', 'arclistpath': 'tests/checkbzip2_private_methods/mybz2.list', 'arcname': 'mybz2', 'arcpath': 'tests/checkbzip2_private_methods/mybz2.bz2', 'arctype': 'archive', 'sha512': 'b45fa678a2208bfbf457f602b2d3de0c83e82ad9ba042b029b8d37f23bfe2774d1cd25576da880d20bb7f6ffcfc2ecb4bcc80112e880415de82fe63d81f81cb7'}) ############################################################################################### # # Testing the private/protected methods from generatelist.generatelist.GenerateList # ############################################################################################### def test_generatelist_generate_list(self): '''test the _generate_list protected method from GenerateList''' __file = 'tests/generatelist_private_methods/mytar.list' __myobj = backupchecker.generatelist.generatelist.GenerateList() __content = ['[files]\n', 'foo:\n'] __myobj._generate_list({'arclistpath': __file, 'listoffiles': __content}) with open(__file, 'r') as __f: self.assertEqual(__f.readlines(), __content) ############################################################################################### # # Testing the private/protected methods from generatelist.generatelistfortar.GenerateListForTar # ############################################################################################### def test_listfortar_translate_type_file(self): '''test the __translate_type private method from GenerateListForTar - expecting file''' __file = 'tests/generatelistfortar_private_methods/mytar.tar.gz' __myobj = backupchecker.generatelist.generatelistfortar.GenerateListForTar({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) self.__tar = tarfile.open(__file) __result = __myobj._GenerateListForTar__translate_type(self.__tar.getmembers()[3].type) self.assertEqual('f', __result) def test_listfortar_translate_type_directory(self): '''test the __translate_type private method from GenerateListForTar - expecting directory''' __file = 'tests/generatelistfortar_private_methods/mytar.tar.gz' __myobj = backupchecker.generatelist.generatelistfortar.GenerateListForTar({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) self.__tar = tarfile.open(__file) __result = __myobj._GenerateListForTar__translate_type(self.__tar.getmembers()[1].type) self.assertEqual('d', __result) def test_listfortar_translate_type_symbolic_link(self): '''test the __translate_type private method from GenerateListForTar - expecting symbolic link''' __file = 'tests/generatelistfortar_private_methods/mytar.tar.gz' __myobj = backupchecker.generatelist.generatelistfortar.GenerateListForTar({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) self.__tar = tarfile.open(__file) __result = __myobj._GenerateListForTar__translate_type(self.__tar.getmembers()[2].type) self.assertEqual('s', __result) ############################################################################################### # # Testing the private/protected methods from generatelist.generatelistforzip.GenerateListForZip # ############################################################################################### def test_listforzip_translate_type_file(self): '''test the __translate_type private method from GenerateListForZip - expecting file''' __file = 'tests/generatelistforzip_private_methods/myzip.zip' __myobj = backupchecker.generatelist.generatelistforzip.GenerateListForZip({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) __myz = zipfile.ZipFile(__file,'r') __myinfo = __myz.infolist() __result = __myobj._GenerateListForZip__translate_type(__myinfo[-1].external_attr >> 16) self.assertEqual('f', __result) def test_listforzip_translate_type_directory(self): '''test the __translate_type private method from GenerateListForZip - expecting directory''' __file = 'tests/generatelistforzip_private_methods/myzip.zip' __myobj = backupchecker.generatelist.generatelistforzip.GenerateListForZip({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) __myz = zipfile.ZipFile(__file,'r') __myinfo = __myz.infolist() __result = __myobj._GenerateListForZip__translate_type(__myinfo[0].external_attr >> 16) self.assertEqual('d', __result) def test_listforzip_extract_uid_gid(self): '''test the __extract_uid_gid private method from GenerateListForZip''' __file = 'tests/generatelistforzip_private_methods/myzip.zip' __myobj = backupchecker.generatelist.generatelistforzip.GenerateListForZip({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) __myz = zipfile.ZipFile(__file,'r') __myinfo = __myz.infolist() __result = __myobj._GenerateListForZip__extract_uid_gid(__myinfo[-1]) self.assertEqual((1000,1000), __result) ################################################################################################# # # Testing the private/protected methods from generatelist.generatelistfortree.GenerateListForTree # ################################################################################################# def test_listfortree_translate_type_file(self): '''test the __translate_type private method from GenerateListForTree - expecting file''' __dir = 'tests/generatelistfortree_private_methods/mydir' __file = os.path.join(__dir, 'foo') __myobj = backupchecker.generatelist.generatelistfortree.GenerateListForTree({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) __myobj._GenerateListForTree__fileinfo = os.lstat(__file) __result = __myobj._GenerateListForTree__translate_type(os.lstat(__file).st_mode) self.assertEqual('f', __result) def test_listfortree_translate_type_directory(self): '''test the __translate_type private method from GenerateListForTree - expecting directory''' __dir = 'tests/generatelistfortree_private_methods/mydir' __file = os.path.join(__dir, 'bar') __myobj = backupchecker.generatelist.generatelistfortree.GenerateListForTree({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) __result = __myobj._GenerateListForTree__translate_type(os.lstat(__file).st_mode) self.assertEqual('d', __result) def test_listfortree_translate_type_symbolic_link(self): '''test the __translate_type private method from GenerateListForTree - expecting symbolic link''' __dir = 'tests/generatelistfortree_private_methods/mydir' __file = os.path.join(__dir, 'oof') __myobj = backupchecker.generatelist.generatelistfortree.GenerateListForTree({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) __result = __myobj._GenerateListForTree__translate_type(os.lstat(__file).st_mode) self.assertEqual('s', __result) ################################################################################################# # # Testing the private/protected methods from generatelist.generatelistfortree.GenerateListForTree # ################################################################################################# def test_listforgzip_extract_size_from_gzip_archive(self): '''test the extraction of a gzip uncompressed file in the gzip archive''' __file = 'tests/generatelistforgzip_private_methods/mygzip.gz' __myobj = backupchecker.generatelist.generatelistforgzip.GenerateListForGzip({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) with open(__file, 'rb') as __myf: self.assertEqual(15, __myobj._GenerateListForGzip__extract_size(__myf)) def test_listforgzip_extract_initial_filename_from_gzip_archive(self): __file = 'tests/generatelistforgzip_private_methods/mygzip.gz' __myobj = backupchecker.generatelist.generatelistforgzip.GenerateListForGzip({'arcpath':__file, 'delimiter':DEFAULTDELIMITER, 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull':False, 'confoutput':'','listoutput':'','fulloutput':'', 'confname':'', 'genlist': False, 'isastream': False}) with open(__file, 'rb') as __myf: self.assertEqual('mygzip', __myobj._GenerateListForGzip__extract_initial_filename(__myf, 'mygzip')) ############################################################## # # Testing the private/protected methods from cliparse.CliParse # ############################################################## def test_cliparse_cliparse(self): '''Test the cliparse.CliParse class''' __archivepath = '/tmp/archive.conf' __logpath = '/tmp/a.out' with open(__archivepath, 'w') as __desc: __desc.write('') sys.argv.append('-c') sys.argv.append(__archivepath) sys.argv.append('-l') sys.argv.append(__logpath) __myobj = backupchecker.cliparse.CliParse() self.assertEqual(vars(__myobj.options), {'archives': [], 'confpath': __archivepath, 'confname': None, 'delimiter': '|', 'hashtype': '', 'parsingexceptions': '', 'getallhashes': False, 'genfull': False, 'genlist': False, 'logfile': __logpath, 'fulloutput':'', 'confoutput':'', 'isastream': False, 'listoutput':''}) os.remove(__archivepath) ####################################################################################### # # Testing the consistent given version of the software both in setup.py and cliparse.py # ####################################################################################### def test_version_consistency_in_setup_py_and_cliparse_py(self): '''test the consistency of the version of the software in both setup.py and cliparse.py ''' with open('setup.py') as __setuppy: __setuppycode = __setuppy.readlines() with open('backupchecker/cliparse.py') as __cliparsepy: __cliparsepycode = __cliparsepy.readlines() for line in __setuppycode: if 'version = ' in line: setuppyversion = line.split("'")[1] break for line in __cliparsepycode: if 'version=' in line: cliparsepyversion = line.split('s ')[1].split("'")[0] break self.assertEqual(setuppyversion, cliparsepyversion) ####################################################################################### # # Testing the backupchecker/archiveinfomsg.py # ####################################################################################### def test_archiveinfomsg_main(self): '''test the archivemsginfo.ArchiveMsgInfo__main method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = ['testarchiveinfomsgmain1'] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testarchiveinfomsgmain.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__main(__mydict, {'path': 'testarchiveinfomsgmain.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') with open(_logfile) as _res: self.assertIn('WARNING:root:1 file missing in testarchiveinfomsgmain.tar.gz: \nWARNING:root:testarchiveinfomsgmain1\n', _res.read()) def test_archiveinfomsg_missing_files(self): '''test the __missing_files method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testmissingfiles.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__missing_files(['titi'], 'testmissingfiles.tar.gz') with open(_logfile) as _res: self.assertIn('WARNING:root:1 file missing in testmissingfiles.tar.gz: \nWARNING:root:titi\n', _res.read()) def test_archiveinfomsg_unexpected_files(self): '''test the archiveinfomsg.ArchiveInfoMsg__unexpected_files method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testunexpectedfiles.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__unexpected_files(['titi'], 'testunexpectedfiles.tar.gz') with open(_logfile) as _res: self.assertIn('WARNING:root:1 unexpected file checking testunexpectedfiles.tar.gz: \nWARNING:root:titi\n', _res.read()) def test_archiveinfomsg_classify_differences(self): '''test the archiveinfomsg.ArchiveInfoMsg__classify_differences method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [{'path':'classifydifferences1', 'size':'12','expected':'3'}] __mydict.missing_smaller_than = [{'path':'classifydifferences2', 'size':'12','expected':'3'}] __mydict.missing_bigger_than = [{'path':'classifydifferences3', 'size':'12','expected':'3'}] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testclassifydifferences.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__classify_differences(__mydict, 'testclassifydifferences.tar.gz') with open(_logfile) as _res: __testresult = _res.read() self.assertIn('WARNING:root:classifydifferences1 size is 12. Should have been 3.', __testresult) self.assertIn('WARNING:root:classifydifferences2 size is 12. Should have been smaller than 3.', __testresult) self.assertIn('WARNING:root:classifydifferences3 size is 12. Should have been bigger than 3.', __testresult) def test_archiveinfomsg_log_differences(self): '''test the archiveinfomsg.ArchiveInfoMsg__log_differences method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [{'path':'classifydifferences4', 'size':'12','expected':'3'}] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testlogdifferences.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__log_differences(__mydict.missing_equality, 'testlogdifferences.tar.gz', '{} {} with unexpected size while checking {}: ') with open(_logfile) as _res: __testresult = _res.read() self.assertIn('WARNING:root:classifydifferences4 size is 12. Should have been 3.', __testresult) def test_archiveinfomsg_uid_gid_mismatches(self): '''test the archiveinfomsg.ArchiveInfoMsg__uid_gid_mismatches method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [{'path':'classifydifferences5', 'expecteduid':'1010','uid':'1000'}] __mydict.mismatched_gids = [{'path':'classifydifferences6', 'expectedgid':'1010','gid':'1000'}] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testuidgidmismatches.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__uid_gid_mismatches(__mydict, 'testuidgidmismatches.tar.gz') with open(_logfile) as _res: __testresult = _res.read() self.assertIn('WARNING:root:classifydifferences5 uid is 1000. Should have been 1010.', __testresult) self.assertIn('WARNING:root:classifydifferences6 gid is 1000. Should have been 1010.', __testresult) def test_archiveinfomsg_mode_mismatches(self): '''test the archiveinfomsg.ArchiveInfoMsg__mode_mismatches method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [{'path':'classifydifferences7', 'expectedmode':'644','mode':'777'}] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testmodemismatches.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__mode_mismatches(__mydict, 'testmodemismatches.tar.gz') with open(_logfile) as _res: __testresult = _res.read() self.assertIn('WARNING:root:classifydifferences7 mode is 777. Should have been 644.', __testresult) def test_archiveinfomsg_target_mismatches(self): '''test the archiveinfomsg.ArchiveInfoMsg__target_mismatches method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [{'path':'classifydifferences8', 'expectedtarget':'../target1','target':'../target2'}] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testtargetmismatches.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__target_mismatches(__mydict, 'testtargetmismatches.tar.gz') with open(_logfile) as _res: __testresult = _res.read() self.assertIn('WARNING:root:classifydifferences8 target is ../target2. Should have been ../target1.', __testresult) def test_archiveinfomsg_type_mismatches(self): '''test the archiveinfomsg.ArchiveInfoMsg__type_mismatches method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [{'path':'classifydifferences9', 'expectedtype':'s','type':'f'}] __mydict.mismatched_hashes = [] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testtypemismatches.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__target_mismatches(__mydict, 'testtypemismatches.tar.gz') with open(_logfile) as _res: __testresult = _res.read() self.assertIn('WARNING:root:classifydifferences9 is a regular file. Should have been a symbolic link.', __testresult) def test_archiveinfomsg_hash_mismatches(self): '''test the archiveinfomsg.ArchiveInfoMsg__hash_mismatches method''' _logfile = TESTLOG backupchecker.applogger.AppLogger(TESTLOG) __mydict = MyDict() __mydict.missing_files = [] __mydict.unexpected_files = [] __mydict.missing_equality = [] __mydict.missing_smaller_than = [] __mydict.missing_bigger_than = [] __mydict.mismatched_uids = [] __mydict.mismatched_gids = [] __mydict.mismatched_modes = [] __mydict.mismatched_types = [] __mydict.mismatched_hashes = [{'path':'classifydifferences10', 'expectedhash':'azeraezr','hash':'qdslfmjaze'}] __mydict.mismatched_targets = [] __mydict.mismatched_mtimes = [] __mydict.mismatched_unames = [] __mydict.mismatched_gnames = [] __myobj = backupchecker.archiveinfomsg.ArchiveInfoMsg(__mydict, {'path': 'testhashmismatches.tar.gz', 'sha512': None, 'files_list': '', 'type': 'archive', 'delimiter': None}, False, '') __myobj._ArchiveInfoMsg__hash_mismatches(__mydict, 'testhashmismatches.tar.gz') with open(_logfile) as _res: __testresult = _res.read() self.assertIn('WARNING:root:classifydifferences10 hash is qdslfmjaze. Should have been azeraezr.', __testresult) ####################################################################################### # # Testing the backupchecker.listtype.ListType # ####################################################################################### def test_listtype_tar(self): '''test the listtype class with a tar archive''' #__mydict = backupchecker.listtype.ListType({'arcpath': 'test.tar.gz', 'delimiter': None, 'genfull': True}) __mydict = MyDict() __mydict.archives = ['tests/listtype/mytargz.tar.gz'] __mydict.delimiter = None __mydict.hashtype = '' __mydict.genlist = False __mydict.genfull = True __mydict.getallhashes = True __mydict.fulloutput = '' __mydict.confoutput = '' __mydict.confname = '' __mydict.listoutput = '' __mydict.isastream = False __mydict = backupchecker.listtype.ListType(__mydict) self.assertEqual(str(type(__mydict._ListType__bck)), "") def test_listtype_tree(self): '''test the listtype class with a tree archive''' __mydict = MyDict() __mydict.archives = ['tests/listtype/mytree'] __mydict.delimiter = None __mydict.hashtype = '' __mydict.genlist = False __mydict.genfull = True __mydict.getallhashes = True __mydict.fulloutput = '' __mydict.confoutput = '' __mydict.confname = '' __mydict.listoutput = '' __mydict.isastream = False __mydict = backupchecker.listtype.ListType(__mydict) self.assertEqual(str(type(__mydict._ListType__bck)), "") def test_listtype_zip(self): '''test the listtype class with a zip archive''' __mydict = MyDict() __mydict.archives = ['tests/listtype/myzip.zip'] __mydict.delimiter = None __mydict.hashtype = '' __mydict.genlist = False __mydict.genfull = True __mydict.getallhashes = True __mydict.fulloutput = '' __mydict.confoutput = '' __mydict.confname = '' __mydict.listoutput = '' __mydict.isastream = False __mydict = backupchecker.listtype.ListType(__mydict) self.assertEqual(str(type(__mydict._ListType__bck)), "") def test_listtype_gz(self): '''test the listtype class with a gzip archive''' __mydict = MyDict() __mydict.archives = ['tests/listtype/mygzip.gz'] __mydict.delimiter = None __mydict.hashtype = '' __mydict.genlist = False __mydict.genfull = True __mydict.getallhashes = True __mydict.fulloutput = '' __mydict.confoutput = '' __mydict.confname = '' __mydict.listoutput = '' __mydict.isastream = False __mydict = backupchecker.listtype.ListType(__mydict) self.assertEqual(str(type(__mydict._ListType__bck)), "") def test_listtype_bz2(self): '''test the listtype class with a bzip2 archive''' __mydict = MyDict() __mydict.archives = ['tests/listtype/mybz2.bz2'] __mydict.delimiter = None __mydict.hashtype = '' __mydict.genlist = False __mydict.genfull = True __mydict.getallhashes = True __mydict.fulloutput = '' __mydict.confoutput = '' __mydict.confname = '' __mydict.listoutput = '' __mydict.isastream = False __mydict = backupchecker.listtype.ListType(__mydict) self.assertEqual(str(type(__mydict._ListType__bck)), "") def test_listtype_xz(self): '''test the listtype class with a lzma archive''' __mydict = MyDict() __mydict.archives = ['tests/listtype/mylzma.xz'] __mydict.delimiter = None __mydict.hashtype = '' __mydict.genlist = False __mydict.genfull = True __mydict.getallhashes = True __mydict.fulloutput = '' __mydict.confoutput = '' __mydict.confname = '' __mydict.listoutput = '' __mydict.isastream = False __mydict = backupchecker.listtype.ListType(__mydict) self.assertEqual(str(type(__mydict._ListType__bck)), "") ####################################################################################### # # Testing the backupchecker.placeholder.PlaceHolder # ####################################################################################### def test_placeholder_time_units(self): '''test the PlaceHolder class for time units''' plh = PlaceHolder('/backups/backup-%Y-%y-%m-%W-%d-%w-%H-%M-%S.tar.gz') expectedresult = '/backups/backup-{}-{}-{}-{}-{}-{}-{}-{}-{}.tar.gz'.format(*(datetime.now().strftime('%Y %y %m %W %d %w %H %M %S').split())) self.assertEqual(plh.realpath, expectedresult) def test_placeholder_max_int_position_right(self): '''test the PlaceHolder class for biggest int''' plh = PlaceHolder(os.path.abspath(os.path.join(os.path.dirname(__file__), 'tests/placeholders/hourly.%i'))) expectedresult = os.path.abspath(os.path.join(os.path.dirname(__file__), 'tests/placeholders/hourly.3')) self.assertEqual(plh.realpath, expectedresult) def test_placeholder_max_int_position_right(self): '''test the PlaceHolder class for biggest int''' plh = PlaceHolder(os.path.abspath(os.path.join(os.path.dirname(__file__), 'tests/placeholders/weekly.%i/foo'))) expectedresult = os.path.abspath(os.path.join(os.path.dirname(__file__), 'tests/placeholders/weekly.2/foo')) self.assertEqual(plh.realpath, expectedresult) ################################################################ # # End of the unit tests # ################################################################ @classmethod def tearDownClass(TestApp): '''clean after the tests''' _logfile = TESTLOG os.remove(_logfile) if __name__ == '__main__': unittest.main() backupchecker-1.7/tests/000077500000000000000000000000001251036066300153175ustar00rootroot00000000000000backupchecker-1.7/tests/checkarchive_private_methods/000077500000000000000000000000001251036066300232135ustar00rootroot00000000000000backupchecker-1.7/tests/checkarchive_private_methods/bzip2-list000066400000000000000000000000471251036066300251360ustar00rootroot00000000000000[archive] # initiate a CheckTar object backupchecker-1.7/tests/checkarchive_private_methods/gzip-list000066400000000000000000000000471251036066300250610ustar00rootroot00000000000000[archive] # initiate a CheckTar object backupchecker-1.7/tests/checkarchive_private_methods/lzma-list000066400000000000000000000000471251036066300250530ustar00rootroot00000000000000[archive] # initiate a CheckTar object backupchecker-1.7/tests/checkarchive_private_methods/mybzip2.bz2000066400000000000000000000000661251036066300252300ustar00rootroot00000000000000BZh91AY&SYр@#d " QG"(Hwۊ backupchecker-1.7/tests/checkarchive_private_methods/mygzip.gz000066400000000000000000000000551251036066300250740ustar00rootroot00000000000000NiTmygzip+,VD̜T.Jbackupchecker-1.7/tests/checkarchive_private_methods/mylzma.xz000066400000000000000000000001141251036066300251030ustar00rootroot000000000000007zXZִF!t/this is hi a test `-2*KT}YZbackupchecker-1.7/tests/checkarchive_private_methods/mytar.tar.gz000066400000000000000000000002701251036066300254750ustar00rootroot00000000000000pLM 0=E=3m~BM*} d1 ||4La`T҈UIʕ^,/q*qhwkեq.G[!_[K5j*)O8[OGKkOwR/3(backupchecker-1.7/tests/checkarchive_private_methods/myzip.zip000066400000000000000000000005071251036066300251110ustar00rootroot00000000000000PK x{eFmyzip/UT gTgTux PK x{eF] myzip/barUT gTgTux this is a bar file PK x{eFAmyzip/UTgTux PK x{eF] @myzip/barUTgTux PKbackupchecker-1.7/tests/checkarchive_private_methods/tar-list000066400000000000000000000000471251036066300246760ustar00rootroot00000000000000[archive] # initiate a CheckTar object backupchecker-1.7/tests/checkarchive_private_methods/zip-list000066400000000000000000000000471251036066300247120ustar00rootroot00000000000000[archive] # initiate a CheckZip object backupchecker-1.7/tests/checkbzip2_private_methods/000077500000000000000000000000001251036066300226205ustar00rootroot00000000000000backupchecker-1.7/tests/checkbzip2_private_methods/mybz2.bz2000066400000000000000000000001431251036066300243000ustar00rootroot00000000000000BZh91AY&SYMU߀@* ;l0 HjQi =CB ÐNcHnV-1˲:E{H )backupchecker-1.7/tests/checkbzip2_private_methods/mybz2.conf000066400000000000000000000004161251036066300245330ustar00rootroot00000000000000[main] name=mybz2 type=archive path=tests/checkbzip2_private_methods/mybz2.bz2 files_list=tests/checkbzip2_private_methods/mybz2.list sha512=b45fa678a2208bfbf457f602b2d3de0c83e82ad9ba042b029b8d37f23bfe2774d1cd25576da880d20bb7f6ffcfc2ecb4bcc80112e880415de82fe63d81f81cb7 backupchecker-1.7/tests/checkbzip2_private_methods/mybz2.list000066400000000000000000000000731251036066300245600ustar00rootroot00000000000000[files] mybz2| type|f md5|f5488b7ce878d89b59ef2752f260354f backupchecker-1.7/tests/checkbzip2_private_methods/mybzip2-list000066400000000000000000000000171251036066300251060ustar00rootroot00000000000000[files] mybz2| backupchecker-1.7/tests/checkbzip2_private_methods/mybzip2.conf000066400000000000000000000001101251036066300250530ustar00rootroot00000000000000[main] name=mybzip2 type=archive path=mybz2.bz2 files_list=mybzip2-list backupchecker-1.7/tests/checkgzip_private_methods/000077500000000000000000000000001251036066300225435ustar00rootroot00000000000000backupchecker-1.7/tests/checkgzip_private_methods/mygzip-list000066400000000000000000000000201251036066300247460ustar00rootroot00000000000000[files] mygzip| backupchecker-1.7/tests/checkgzip_private_methods/mygzip.conf000066400000000000000000000001061251036066300247260ustar00rootroot00000000000000[main] name=mygzip type=archive path=mygzip.gz files_list=mygzip-list backupchecker-1.7/tests/checkgzip_private_methods/mygzip.gz000066400000000000000000000000621251036066300244220ustar00rootroot00000000000000ЈNmygzipHWMS/WH,JU/|2backupchecker-1.7/tests/checktar_private_methods/000077500000000000000000000000001251036066300223605ustar00rootroot00000000000000backupchecker-1.7/tests/checktar_private_methods/mytargz/000077500000000000000000000000001251036066300240555ustar00rootroot00000000000000backupchecker-1.7/tests/checktar_private_methods/mytargz/mytargz-list000066400000000000000000000000771251036066300264520ustar00rootroot00000000000000[archive] # initiate a CheckTar object [files] mytargz/hello| backupchecker-1.7/tests/checktar_private_methods/mytargz/mytargz.tar.gz000066400000000000000000000002741251036066300267040ustar00rootroot00000000000000tNM 0@=En`&y-"zzҢ.tD|f dko2[E)ћ9S"bmH Ϲr?@kzW.tکS덱+!:muh.Vs~88_ܳCi7쮯]jo"sU(backupchecker-1.7/tests/checktree_private_methods/000077500000000000000000000000001251036066300225315ustar00rootroot00000000000000backupchecker-1.7/tests/checktree_private_methods/mytargz/000077500000000000000000000000001251036066300242265ustar00rootroot00000000000000backupchecker-1.7/tests/checktree_private_methods/mytargz/mytargz-list000066400000000000000000000000771251036066300266230ustar00rootroot00000000000000[archive] # initiate a CheckTar object [files] mytargz/hello| backupchecker-1.7/tests/checktree_private_methods/mytargz/mytargz.tar.gz000066400000000000000000000002741251036066300270550ustar00rootroot00000000000000tNM 0@=En`&y-"zzҢ.tD|f dko2[E)ћ9S"bmH Ϲr?@kzW.tکS덱+!:muh.Vs~88_ܳCi7쮯]jo"sU(backupchecker-1.7/tests/checktree_private_methods/mytree-list000066400000000000000000000000761251036066300247350ustar00rootroot00000000000000[archive] # initiate a CheckTar object [files] mytree/hello| backupchecker-1.7/tests/checktree_private_methods/mytree/000077500000000000000000000000001251036066300240365ustar00rootroot00000000000000backupchecker-1.7/tests/checktree_private_methods/mytree/hello000066400000000000000000000000061251036066300250600ustar00rootroot00000000000000hello backupchecker-1.7/tests/checktree_private_methods/mytree/riri000077700000000000000000000000001251036066300257472helloustar00rootroot00000000000000backupchecker-1.7/tests/checkzip_private_methods/000077500000000000000000000000001251036066300223745ustar00rootroot00000000000000backupchecker-1.7/tests/checkzip_private_methods/myzip-list000066400000000000000000000000471251036066300244410ustar00rootroot00000000000000[archive] # initiate a CheckTar object backupchecker-1.7/tests/checkzip_private_methods/myzip.zip000066400000000000000000000016201251036066300242670ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/tests/corrupted_archives/000077500000000000000000000000001251036066300212125ustar00rootroot00000000000000backupchecker-1.7/tests/corrupted_archives/MD5SUMS000066400000000000000000000000671251036066300222350ustar00rootroot000000000000008ea4379731bdfa5979ff854e0f3cb9cf md5-corrupted.tar.gz backupchecker-1.7/tests/corrupted_archives/SHA1SUMS000066400000000000000000000001001251036066300223300ustar00rootroot00000000000000e53b077e0a37317cdf0c652a3d62cbe1dfdd1b24 sha1-corrupted.tar.gz backupchecker-1.7/tests/corrupted_archives/SHA224SUMS000066400000000000000000000001231251036066300225040ustar00rootroot00000000000000b90e84a19555c2586084eb761b667c2e8d3eb9eeec9f4b166b868e98 sha224-corrupted.tar.bz2 backupchecker-1.7/tests/corrupted_archives/SHA256SUMS000066400000000000000000000001321251036066300225110ustar00rootroot0000000000000007903dbac57a7d94864ffe9123797f1fcc68aaff96c75948b2df9a03dc9b45e6 sha256-corrupted.tar.gz backupchecker-1.7/tests/corrupted_archives/SHA384SUMS000066400000000000000000000001731251036066300225200ustar00rootroot00000000000000276873e4cd59cbbc196f61e96a41aac783fa38fdc75646d9116e1cd93a2bf2480de63363b50129095e38a8665e8c43da sha384-corrupted.tar.bz2 backupchecker-1.7/tests/corrupted_archives/SHA512SUMS000066400000000000000000000002321251036066300225050ustar00rootroot0000000000000039fe2e5ec0da609b162db89bc8d985af85357fca37d8671af2c7eea62c0608cf543a4c69a117e899d59a095264e99595c57c0d0d006e39f9d5e88671afdd8615 sha512-corrupted.tar.gz backupchecker-1.7/tests/corrupted_archives/md5-corrupted.tar.gz000066400000000000000000000003271251036066300250350ustar00rootroot00000000000000Kcorrupted.tarM 0Eь wg= HиFI+Dig@>xtUT%ܼ$2RK,ʋquZMcCӈS%[*_M_+ck9T9`oK՜Z4Hr8v>uYoS<[O0ekλ(backupchecker-1.7/tests/corrupted_archives/sha1-corrupted.tar.gz000066400000000000000000000003141251036066300252000ustar00rootroot00000000000000JLsha1-corrupted.tarA 0{te3˞%+KUz*U(q d <^նW-{aD|P-4'4 ]֚MmT5?,)z3֥\j?_:;oWKws,?/4gzѽ(backupchecker-1.7/tests/corrupted_archives/sha224-corrupted.tar.bz2000066400000000000000000000003021251036066300254210ustar00rootroot00000000000000BZh91AY&SY?{Ð @Di`ހ0 20&! bhEMRzj~M4Ѧ:je!Yzxi!3&"0Zߊ2y ёD;WORe6*dDiCxGq͗A1yK x{]ǚ!.p!9p~backupchecker-1.7/tests/corrupted_archives/sha256-corrupted.tar.gz000066400000000000000000000003151251036066300253550ustar00rootroot00000000000000LLsha256-corrupted.tarA 0{LMe"R^ZJA\"?Y$0W%&<(z!]BBLbackupchecker-1.7/tests/corrupted_archives/sha512-corrupted.tar.gz000066400000000000000000000003161251036066300253510ustar00rootroot00000000000000OLsha512-corrupted.tar 0ueg 誥*}jQ(q d N}]Lf2OF/¨}AՈ`ϽdTMjo19gL;Xɹ6?wv_O{ל36/sNwKGi=GQ(backupchecker-1.7/tests/expected_hash/000077500000000000000000000000001251036066300201235ustar00rootroot00000000000000backupchecker-1.7/tests/expected_hash/archash/000077500000000000000000000000001251036066300215345ustar00rootroot00000000000000backupchecker-1.7/tests/expected_hash/archash/md5hashtararchive-list000066400000000000000000000002061251036066300260300ustar00rootroot00000000000000[archive] # md5 hash test for a tar.gz archive - good value is 47907de120577e6ba3b9dd8821374936 md5| 47907de120577e6ba3b9dd8821374937 backupchecker-1.7/tests/expected_hash/archash/md5hashtararchive.conf000066400000000000000000000002271251036066300260060ustar00rootroot00000000000000[main] name=md5hashtararchive type=archive path=tests/expected_hash/archash/mytar.tar.gz files_list=tests/expected_hash/archash/md5hashtararchive-list backupchecker-1.7/tests/expected_hash/archash/md5hashziparchive-list000066400000000000000000000002031251036066300260410ustar00rootroot00000000000000[archive] # md5 hash test for a zip archive - good value is e48e1ce2fbe0db616632ba8030ac2c9f md5| e48e1ce2fbe0db616632ba8030ac2c9e backupchecker-1.7/tests/expected_hash/archash/md5hashziparchive.conf000066400000000000000000000002241251036066300260170ustar00rootroot00000000000000[main] name=md5hashziparchive type=archive path=tests/expected_hash/archash/myzip.zip files_list=tests/expected_hash/archash/md5hashziparchive-list backupchecker-1.7/tests/expected_hash/archash/mytar.tar.gz000066400000000000000000000003521251036066300240170ustar00rootroot00000000000000MA 0Ь=HI,VԦUQ*UM dgpYNurN0kfRtزmDb]6Ðwޅ{8U}2{IL+/-m[TN5f. &rm7F_/_&@O`|KnCu}AՎl? mˇ-yGQa,| HH1(backupchecker-1.7/tests/expected_hash/archash/myzip.zip000066400000000000000000000007751251036066300234410ustar00rootroot00000000000000PK \>myzip/UT 84M!4Mux PK \>O myzip/totoUT 04M04Mux hi guys, what's up ? PK \>7/ myzip/titiUT 84M84Mux this is a really nice journey PK \>Amyzip/UT84Mux PK \>O @myzip/totoUT04Mux PK \>7/ myzip/titiUT84Mux PKbackupchecker-1.7/tests/expected_hash/archash/sha1hashtararchive-list000066400000000000000000000002231251036066300261760ustar00rootroot00000000000000[archive] # hash test for a tar.gz archive - good value is 84db203e2902fa5ea51e6d46ea365c7bfc5524b8 sha1| 84db203e2902fa5ea51e6d46ea365c7bfc5524b9 backupchecker-1.7/tests/expected_hash/archash/sha1hashtararchive.conf000066400000000000000000000002311251036066300261500ustar00rootroot00000000000000[main] name=sha1hashtararchive type=archive path=tests/expected_hash/archash/mytar.tar.gz files_list=tests/expected_hash/archash/sha1hashtararchive-list backupchecker-1.7/tests/expected_hash/archash/sha1hashziparchive-list000066400000000000000000000002201251036066300262070ustar00rootroot00000000000000[archive] # hash test for a zip archive - good value is 4cd5933d78603d8b4ba484ef8e45d2b6bc9fd5cf sha1| 4cd5933d78603d8b4ba484ef8e45d2b6bc9fd5ce backupchecker-1.7/tests/expected_hash/archash/sha1hashziparchive.conf000066400000000000000000000002261251036066300261700ustar00rootroot00000000000000[main] name=sha1hashziparchive type=archive path=tests/expected_hash/archash/myzip.zip files_list=tests/expected_hash/archash/sha1hashziparchive-list backupchecker-1.7/tests/expected_hash/archash/sha224hashtararchive-list000066400000000000000000000002651251036066300263530ustar00rootroot00000000000000[archive] # hash test for a tar.gz archive - good value is e25621dfdd2b2cfca451c735f4e676653e8628187e2b7ddc14402c1d sha224| e25621dfdd2b2cfca451c735f4e676653e8628187e2b7ddc14402c1e backupchecker-1.7/tests/expected_hash/archash/sha224hashtararchive.conf000066400000000000000000000002351251036066300263230ustar00rootroot00000000000000[main] name=sha224hashtararchive type=archive path=tests/expected_hash/archash/mytar.tar.gz files_list=tests/expected_hash/archash/sha224hashtararchive-list backupchecker-1.7/tests/expected_hash/archash/sha224hashziparchive-list000066400000000000000000000002621251036066300263640ustar00rootroot00000000000000[archive] # hash test for a zip archive - good value is 6e0838302f48cc7863a160f197a23492833b59862d89cabc46c2a1c3 sha224| 6e0838302f48cc7863a160f197a23492833b59862d89cabc46c2a1c4 backupchecker-1.7/tests/expected_hash/archash/sha224hashziparchive.conf000066400000000000000000000002321251036066300263340ustar00rootroot00000000000000[main] name=sha224hashziparchive type=archive path=tests/expected_hash/archash/myzip.zip files_list=tests/expected_hash/archash/sha224hashziparchive-list backupchecker-1.7/tests/expected_hash/archash/sha256hashtararchive-list000066400000000000000000000003051251036066300263530ustar00rootroot00000000000000[archive] # hash test for a tar.gz archive - good value is 7090d29295216e95ab4a190d489aa405d141cac978567c227f17ee78eb3f5fd4 sha256| 7090d29295216e95ab4a190d489aa405d141cac978567c227f17ee78eb3f5fd5 backupchecker-1.7/tests/expected_hash/archash/sha256hashtararchive.conf000066400000000000000000000002351251036066300263300ustar00rootroot00000000000000[main] name=sha256hashtararchive type=archive path=tests/expected_hash/archash/mytar.tar.gz files_list=tests/expected_hash/archash/sha256hashtararchive-list backupchecker-1.7/tests/expected_hash/archash/sha256hashziparchive-list000066400000000000000000000003021251036066300263640ustar00rootroot00000000000000[archive] # hash test for a zip archive - good value is 358bae9af3f9f510095b2e2a245a5e49ab27d7de862cd22f0dd4f212e25fb138 sha256| 358bae9af3f9f510095b2e2a245a5e49ab27d7de862cd22f0dd4f212e25fb139 backupchecker-1.7/tests/expected_hash/archash/sha256hashziparchive.conf000066400000000000000000000002321251036066300263410ustar00rootroot00000000000000[main] name=sha256hashziparchive type=archive path=tests/expected_hash/archash/myzip.zip files_list=tests/expected_hash/archash/sha256hashziparchive-list backupchecker-1.7/tests/expected_hash/archash/sha384hashtararchive-list000066400000000000000000000004051251036066300263560ustar00rootroot00000000000000[archive] # hash test for a tar.gz archive - good value is aa01a55142a04de52cebba3797ca25054e51c33a5fbfdc4dd0cc2f01f6252c6a62cb87f35405d9d8b07a506eefacfd10 sha384| aa01a55142a04de52cebba3797ca25054e51c33a5fbfdc4dd0cc2f01f6252c6a62cb87f35405d9d8b07a506eefacfd11 backupchecker-1.7/tests/expected_hash/archash/sha384hashtararchive.conf000066400000000000000000000002351251036066300263320ustar00rootroot00000000000000[main] name=sha384hashtararchive type=archive path=tests/expected_hash/archash/mytar.tar.gz files_list=tests/expected_hash/archash/sha384hashtararchive-list backupchecker-1.7/tests/expected_hash/archash/sha384hashziparchive-list000066400000000000000000000004021251036066300263670ustar00rootroot00000000000000[archive] # hash test for a zip archive - good value is 6a372e2867442826b64d1e3bca4b35e18d12d5df25e89decff214023d45f7f85d07ee79e6522f53961626e525ee29989 sha384| 6a372e2867442826b64d1e3bca4b35e18d12d5df25e89decff214023d45f7f85d07ee79e6522f53961626e525ee29988 backupchecker-1.7/tests/expected_hash/archash/sha384hashziparchive.conf000066400000000000000000000002321251036066300263430ustar00rootroot00000000000000[main] name=sha384hashziparchive type=archive path=tests/expected_hash/archash/myzip.zip files_list=tests/expected_hash/archash/sha384hashziparchive-list backupchecker-1.7/tests/expected_hash/archash/sha512hashtararchive-list000066400000000000000000000005051251036066300263500ustar00rootroot00000000000000[archive] # hash test for a tar.gz archive - good value is d72eef1d9c42615f6b2a92848e8fa65ffd4276d91d9976fa8c644b41c15d91441ae42f897b30a2403795a876b14ae6ed8addca4a74f24839f6506a29e662e587 sha512| d72eef1d9c42615f6b2a92848e8fa65ffd4276d91d9976fa8c644b41c15d91441ae42f897b30a2403795a876b14ae6ed8addca4a74f24839f6506a29e662e588 backupchecker-1.7/tests/expected_hash/archash/sha512hashtararchive.conf000066400000000000000000000002351251036066300263230ustar00rootroot00000000000000[main] name=sha512hashtararchive type=archive path=tests/expected_hash/archash/mytar.tar.gz files_list=tests/expected_hash/archash/sha512hashtararchive-list backupchecker-1.7/tests/expected_hash/archash/sha512hashziparchive-list000066400000000000000000000005021251036066300263610ustar00rootroot00000000000000[archive] # hash test for a zip archive - good value is c177ca5b618ca613f27c44991eabb922d589691000fa602a0d2767ba84b317c653e6ed541f5922d201d2e65158eee4cfb7d87665bbe1d31c07f636bb25dac7b3 sha512| c177ca5b618ca613f27c44991eabb922d589691000fa602a0d2767ba84b317c653e6ed541f5922d201d2e65158eee4cfb7d87665bbe1d31c07f636bb25dac7b2 backupchecker-1.7/tests/expected_hash/archash/sha512hashziparchive.conf000066400000000000000000000002321251036066300263340ustar00rootroot00000000000000[main] name=sha512hashziparchive type=archive path=tests/expected_hash/archash/myzip.zip files_list=tests/expected_hash/archash/sha512hashziparchive-list backupchecker-1.7/tests/expected_hash/bar.bz2000066400000000000000000000001261251036066300213050ustar00rootroot00000000000000BZh91AY&SYO"AQ@?g HjyI7F0ٲY#g^+b&-FϜvK\WH H backupchecker-1.7/tests/expected_hash/bar.gz000066400000000000000000000001621251036066300212300ustar00rootroot00000000000000:nNbar%10 {^ϠX8"=af͚>8X56$ Jkϐ,gbYQstvtEV'xK 8[vsbackupchecker-1.7/tests/expected_hash/bar.xz000066400000000000000000000001041251036066300212450ustar00rootroot000000000000007zXZִF!t/ lzma test X" g}YZbackupchecker-1.7/tests/expected_hash/bar.zip000066400000000000000000000021271251036066300214150ustar00rootroot00000000000000PK !u=bar/UT YLXLux PK ʔu=h{In bar/bar5UT  YL YLux chop suey PK Ɣu=yabar/bar4UT YLYLux My tailor is rich PK ؔu=bar/bar6UT 'YL'YLux Let's grab something to eat PK u=:{bar/bar3UT XLXLux Paris PK u=kIbar/bar1UT XLXLux doooh! PK u=22p bar/bar2UT XLXLux Stanford University PK !u=Abar/UTYLux PK ʔu=h{In >bar/bar5UT YLux PK Ɣu=yabar/bar4UTYLux PK ؔu=bar/bar6UT'YLux PK u=:{<bar/bar3UTXLux PK u=kIbar/bar1UTXLux PK u=22p bar/bar2UTXLux PK#backupchecker-1.7/tests/expected_hash/bar/000077500000000000000000000000001251036066300206675ustar00rootroot00000000000000backupchecker-1.7/tests/expected_hash/bar/bar1000066400000000000000000000000071251036066300214340ustar00rootroot00000000000000doooh! backupchecker-1.7/tests/expected_hash/bar/bar2000066400000000000000000000000241251036066300214340ustar00rootroot00000000000000Stanford University backupchecker-1.7/tests/expected_hash/bar/bar3000066400000000000000000000000061251036066300214350ustar00rootroot00000000000000Paris backupchecker-1.7/tests/expected_hash/bar/bar4000066400000000000000000000000221251036066300214340ustar00rootroot00000000000000My tailor is rich backupchecker-1.7/tests/expected_hash/bar/bar5000066400000000000000000000000121251036066300214340ustar00rootroot00000000000000chop suey backupchecker-1.7/tests/expected_hash/bar/bar6000066400000000000000000000000341251036066300214410ustar00rootroot00000000000000Let's grab something to eat backupchecker-1.7/tests/expected_hash/bzip2-list000066400000000000000000000000251251036066300220420ustar00rootroot00000000000000[files] bar| md5|768 backupchecker-1.7/tests/expected_hash/files-list000066400000000000000000000010251251036066300221170ustar00rootroot00000000000000[files] foos/foo1| md5|3718422a0bf93f7fc46cff6b5e660ff8 foos/foo2| sha1|e0f58dcc57caad2182f701eb63f0c81f347d3fe5 foos/foo3| sha224|g3c1d88024b6e2e333cbf8bed96182a62fbafaf2aea6dd8b17639552 foos/foo4| sha256|35a670af482f46a76f8033e05cca7a53a58456fa42ef47ea56ffd2b16e408863 foos/foo5| sha384|744e19f5c4258a573400b5059747d88797b150c08456e406e6473bd777332c5f66afe66c5bf77820906b97961c124810 foos/foo6| sha512|c46dcb0f5124bd681cb5b91c812d2982efce703806026b1f9ffdeadf45c4128cd3e61fa939a0bc89af317e70d0d6c74b666edff9bd7ad9052cb8e7f42c8f7644 backupchecker-1.7/tests/expected_hash/filetree-list000066400000000000000000000007671251036066300226300ustar00rootroot00000000000000[files] bar1| md5|9151b18e6dd21a734890b56b5a15d24b bar2| sha1|3676c9d706eb6f6b02eb5d67ba86a9b3e855c13d bar3| sha224|33975be818906ec2228074d2a4438ef8f78ec33792aac4d037ad8f95 bar4| sha256|d67f2596a1ef0893f176b0b68d6e1445a9acd5fda2f5a073f1318ff4b75e5b84 bar5| sha384|65305af91a511f6d091237f97e5dbccd1427c6f48bcd509acd0a71938bfe9d708cfb93c3d163f96b328f6cabb80b0860 bar6| sha512|g0fc5b14ab8b242e4c6462deee58a0a10fabdb4bc792174fdeec92cd12df8d5a7a8fed9545e2c109b3cecd345d970afaea0183ea0dd19371913cb55b23b9fc2e backupchecker-1.7/tests/expected_hash/foos.tar.gz000066400000000000000000000005331251036066300222210ustar00rootroot00000000000000JLLn0 @9+ӎG-(TZ N*NaZ R@r$٘},-*P3Xsd ҆"S1\Wz ۖmScm0Ƙ\ H Wgf2p MxS s1&GZIsPrU5w,/Nc{'N6~r;s]7H!Xfoo/foo1UTS/Lux PK n=Afoo/bar/UTLux PKbackupchecker-1.7/tests/expected_mode/arcmode/mode644.tar.gz000066400000000000000000000003001251036066300240400ustar00rootroot00000000000000LM 0%7L~ϓ ҮmhQ)E,0oa.-r92!]03669=hnޕ9p g;w5'*J;m\r꿗9{-ͨ$r CgX6?BT9(backupchecker-1.7/tests/expected_mode/arcmode/mode644.zip000066400000000000000000000006761251036066300234550ustar00rootroot00000000000000PK n=foo/UT S/LLux PK n=foo/foo1UT S/LS/Lux PK n=foo/bar/UT LLux PK n=Afoo/UTS/Lux PK n=>foo/foo1UTS/Lux PK n=Afoo/bar/UTLux PKbackupchecker-1.7/tests/expected_mode/arcmode/mode755.tar.gz000077500000000000000000000003001251036066300240460ustar00rootroot00000000000000LM 0%7L~ϓ ҮmhQ)E,0oa.-r92!]03669=hnޕ9p g;w5'*J;m\r꿗9{-ͨ$r CgX6?BT9(backupchecker-1.7/tests/expected_mode/arcmode/mode755.zip000077500000000000000000000006761251036066300234630ustar00rootroot00000000000000PK n=foo/UT S/LLux PK n=foo/foo1UT S/LS/Lux PK n=foo/bar/UT LLux PK n=Afoo/UTS/Lux PK n=>foo/foo1UTS/Lux PK n=Afoo/bar/UTLux PKbackupchecker-1.7/tests/expected_mode/arcmode/tarmode4644-list000066400000000000000000000000671251036066300244120ustar00rootroot00000000000000[archive] # testing mode, good mode is 4644 mode| 4600 backupchecker-1.7/tests/expected_mode/arcmode/tarmode4644.conf000066400000000000000000000002161251036066300243610ustar00rootroot00000000000000[main] name=tarmode4644 type=archive path=tests/expected_mode/arcmode/mode4644.tar.gz files_list=tests/expected_mode/arcmode/tarmode4644-list backupchecker-1.7/tests/expected_mode/arcmode/tarmode644-list000066400000000000000000000000651251036066300243240ustar00rootroot00000000000000[archive] # testing mode, good mode is 644 mode| 654 backupchecker-1.7/tests/expected_mode/arcmode/tarmode644.conf000066400000000000000000000002131251036066300242720ustar00rootroot00000000000000[main] name=tarmode644 type=archive path=tests/expected_mode/arcmode/mode644.tar.gz files_list=tests/expected_mode/arcmode/tarmode644-list backupchecker-1.7/tests/expected_mode/arcmode/tarmode755-list000066400000000000000000000000651251036066300243270ustar00rootroot00000000000000[archive] # testing mode, good mode is 755 mode| 750 backupchecker-1.7/tests/expected_mode/arcmode/tarmode755.conf000066400000000000000000000002131251036066300242750ustar00rootroot00000000000000[main] name=tarmode755 type=archive path=tests/expected_mode/arcmode/mode755.tar.gz files_list=tests/expected_mode/arcmode/tarmode755-list backupchecker-1.7/tests/expected_mode/arcmode/zipmode4644-list000066400000000000000000000000671251036066300244260ustar00rootroot00000000000000[archive] # testing mode, good mode is 4644 mode| 4600 backupchecker-1.7/tests/expected_mode/arcmode/zipmode4644.conf000066400000000000000000000002131251036066300243720ustar00rootroot00000000000000[main] name=zipmode4644 type=archive path=tests/expected_mode/arcmode/mode4644.zip files_list=tests/expected_mode/arcmode/zipmode4644-list backupchecker-1.7/tests/expected_mode/arcmode/zipmode644-list000066400000000000000000000000651251036066300243400ustar00rootroot00000000000000[archive] # testing mode, good mode is 644 mode| 654 backupchecker-1.7/tests/expected_mode/arcmode/zipmode644.conf000066400000000000000000000002101251036066300243030ustar00rootroot00000000000000[main] name=zipmode644 type=archive path=tests/expected_mode/arcmode/mode644.zip files_list=tests/expected_mode/arcmode/zipmode644-list backupchecker-1.7/tests/expected_mode/arcmode/zipmode755-list000066400000000000000000000000651251036066300243430ustar00rootroot00000000000000[archive] # testing mode, good mode is 755 mode| 750 backupchecker-1.7/tests/expected_mode/arcmode/zipmode755.conf000066400000000000000000000002101251036066300243060ustar00rootroot00000000000000[main] name=zipmode755 type=archive path=tests/expected_mode/arcmode/mode755.zip files_list=tests/expected_mode/arcmode/zipmode755-list backupchecker-1.7/tests/expected_mode/files-list000066400000000000000000000001341251036066300221200ustar00rootroot00000000000000[files] foos/foo1| mode|644 foos/foo2| mode|755 foos/bar/foo3| mode|4644 foos/bar| mode|754 backupchecker-1.7/tests/expected_mode/foo/000077500000000000000000000000001251036066300207075ustar00rootroot00000000000000backupchecker-1.7/tests/expected_mode/foo/bar000077500000000000000000000000001251036066300213670ustar00rootroot00000000000000backupchecker-1.7/tests/expected_mode/foo/foo1000066400000000000000000000000001251036066300214640ustar00rootroot00000000000000backupchecker-1.7/tests/expected_mode/foos.tar.gz000066400000000000000000000003001251036066300222120ustar00rootroot00000000000000LM 0%7L~ϓ ҮmhQ)E,0oa.-r92!]03669=hnޕ9p g;w5'*J;m\r꿗9{-ͨ$r CgX6?BT9(backupchecker-1.7/tests/expected_mode/tree.conf000066400000000000000000000001621251036066300217310ustar00rootroot00000000000000[main] name=expectedtreemode type=tree path=tests/expected_mode/foo files_list=tests/expected_mode/treefiles-list backupchecker-1.7/tests/expected_mode/treefiles-list000066400000000000000000000000451251036066300230010ustar00rootroot00000000000000[files] foo1| mode|664 bar| mode|754 backupchecker-1.7/tests/expected_type/000077500000000000000000000000001251036066300201615ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/archive.conf000066400000000000000000000001651251036066300224530ustar00rootroot00000000000000[main] name=expectedtype type=archive path=tests/expected_type/foos.tar.gz files_list=tests/expected_type/files-list backupchecker-1.7/tests/expected_type/files-list000066400000000000000000000002061251036066300221550ustar00rootroot00000000000000[files] foos/foo1| type|f foos/foo2| type|c foos/foo3| type|d foos/foo4| type|s foos/foo5| type|b foos/foo6| type|k foos/foo7| type|o backupchecker-1.7/tests/expected_type/filetree-list000066400000000000000000000001631251036066300226540ustar00rootroot00000000000000[files] foo1| type|d foo2| type|c foo3| type|d foo4| type|s foo5| type|b foo6| type|k bar| type|f bar/bar1| type|o backupchecker-1.7/tests/expected_type/foos.tar.gz000066400000000000000000000003171251036066300222570ustar00rootroot00000000000000B(LM 0@%7p&yJ`Q޷h L#yY֓%֒]9XTB\AO:xM2} gs_i΋ឞ33'PgM {/Hz-uϜjb8 Z<k$3(backupchecker-1.7/tests/expected_type/foos/000077500000000000000000000000001251036066300211275ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/bar/000077500000000000000000000000001251036066300216735ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/bar/bar1000066400000000000000000000000001251036066300224310ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/foo1000066400000000000000000000000001251036066300217040ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/foo2000066400000000000000000000000001251036066300217050ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/foo3000066400000000000000000000000001251036066300217060ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/foo4000066400000000000000000000000001251036066300217070ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/foo5000066400000000000000000000000001251036066300217100ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/foos/foo6000066400000000000000000000000001251036066300217110ustar00rootroot00000000000000backupchecker-1.7/tests/expected_type/tree.conf000066400000000000000000000001621251036066300217660ustar00rootroot00000000000000[main] name=expectedtreetype type=tree path=tests/expected_type/foos files_list=tests/expected_type/filetree-list backupchecker-1.7/tests/expected_uid_gid/000077500000000000000000000000001251036066300206045ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uid_gid/arc_uid_gid/000077500000000000000000000000001251036066300230355ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uid_gid/arc_uid_gid/tar-uid-gid-list000066400000000000000000000001311251036066300260320ustar00rootroot00000000000000[archive] # Test the uid and gid of the file | good value for both is 1000 uid| 5 gid| 6 backupchecker-1.7/tests/expected_uid_gid/arc_uid_gid/tar-uid-gid.conf000066400000000000000000000002321251036066300260070ustar00rootroot00000000000000[main] name=taruid-gid type=archive path=tests/expected_uid_gid/arc_uid_gid/uid-gid.tar.gz files_list=tests/expected_uid_gid/arc_uid_gid/tar-uid-gid-list backupchecker-1.7/tests/expected_uid_gid/arc_uid_gid/uid-gid.tar.gz000066400000000000000000000002701251036066300255050ustar00rootroot00000000000000pLM 0=E=3m~BM*} d1 ||4La`T҈UIʕ^,/q*qhwkեq.G[!_[K5j*)O8[OGKkOwR/3(backupchecker-1.7/tests/expected_uid_gid/arc_uid_gid/uid-gid.zip000066400000000000000000000006761251036066300251140ustar00rootroot00000000000000PK n=foo/UT S/LLux PK n=foo/foo1UT S/LS/Lux PK n=foo/bar/UT LLux PK n=Afoo/UTS/Lux PK n=>foo/foo1UTS/Lux PK n=Afoo/bar/UTLux PKbackupchecker-1.7/tests/expected_uid_gid/arc_uid_gid/zip-uid-gid-list000066400000000000000000000001311251036066300260460ustar00rootroot00000000000000[archive] # Test the uid and gid of the file | good value for both is 1000 uid| 5 gid| 6 backupchecker-1.7/tests/expected_uid_gid/arc_uid_gid/zip-uid-gid.conf000066400000000000000000000002271251036066300260270ustar00rootroot00000000000000[main] name=zipuid-gid type=archive path=tests/expected_uid_gid/arc_uid_gid/uid-gid.zip files_list=tests/expected_uid_gid/arc_uid_gid/zip-uid-gid-list backupchecker-1.7/tests/expected_uid_gid/archive.conf000066400000000000000000000001631251036066300230740ustar00rootroot00000000000000[main] name=essai type=archive path=tests/expected_uid_gid/foo.tar.gz files_list=tests/expected_uid_gid/files-list backupchecker-1.7/tests/expected_uid_gid/files-list000066400000000000000000000000441251036066300226000ustar00rootroot00000000000000[files] foo/foo1| uid|1001 gid|1001 backupchecker-1.7/tests/expected_uid_gid/foo.tar.gz000066400000000000000000000002701251036066300225150ustar00rootroot00000000000000pLM 0=E=3m~BM*} d1 ||4La`T҈UIʕ^,/q*qhwkեq.G[!_[K5j*)O8[OGKkOwR/3(backupchecker-1.7/tests/expected_uid_gid/foo.zip000066400000000000000000000004751251036066300221210ustar00rootroot00000000000000PK .eFfoo/UT xTTux PK .eFrfoo/foo1UT xTxTux this is a test PK .eFAfoo/UTxTux PK .eFr>foo/foo1UTxTux PKbackupchecker-1.7/tests/expected_uid_gid/foos.tar.gz000066400000000000000000000003221251036066300226760ustar00rootroot00000000000000NLM 0{yR(m}no,f`x:$ʢ[o`6k)Y#-6\C/Va?O*X#إ|_rBR^v>{{?dgIy( uxk\?i(backupchecker-1.7/tests/expected_uid_gid/multiplefiles-list000066400000000000000000000001021251036066300243470ustar00rootroot00000000000000[files] foos/foo1| uid|1001 gid|1001 foos/foo2| uid|1001 gid|1001 backupchecker-1.7/tests/expected_uid_gid/multiplefiles.conf000066400000000000000000000002041251036066300243250ustar00rootroot00000000000000[main] name=multiplefiles type=archive path=tests/expected_uid_gid/foos.tar.gz files_list=tests/expected_uid_gid/multiplefiles-list backupchecker-1.7/tests/expected_uid_gid/tree_expected_uid_gid-list000066400000000000000000000000661251036066300260060ustar00rootroot00000000000000[files] tree_expected_uid_gid/foo1| uid|1001 gid|1001 backupchecker-1.7/tests/expected_uid_gid/tree_expected_uid_gid/000077500000000000000000000000001251036066300251105ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uid_gid/tree_expected_uid_gid/foo1000066400000000000000000000000001251036066300256650ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uid_gid/tree_expected_uid_gid/tree_expected_uid_gid/000077500000000000000000000000001251036066300314145ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uid_gid/tree_expected_uid_gid/tree_expected_uid_gid/foo1000066400000000000000000000000001251036066300321710ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uid_gid/zip-files-list000066400000000000000000000000441251036066300234000ustar00rootroot00000000000000[files] foo/foo1| uid|1001 gid|1001 backupchecker-1.7/tests/expected_uname_gname/000077500000000000000000000000001251036066300214545ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uname_gname/archive.conf000066400000000000000000000001731251036066300237450ustar00rootroot00000000000000[main] name=essai type=archive path=tests/expected_uname_gname/foo.tar.gz files_list=tests/expected_uname_gname/files-list backupchecker-1.7/tests/expected_uname_gname/files-list000066400000000000000000000000501251036066300234450ustar00rootroot00000000000000[files] foo/foo1| owner|titi group|titi backupchecker-1.7/tests/expected_uname_gname/foo.tar.gz000066400000000000000000000002361251036066300233670ustar00rootroot00000000000000TM 0=biWo(PE}H7uM a>ϝ`~Hi8 m曈缌ݻZZ?[z?zu=C:/ERR(backupchecker-1.7/tests/expected_uname_gname/foo/000077500000000000000000000000001251036066300222375ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uname_gname/foo/foo/000077500000000000000000000000001251036066300230225ustar00rootroot00000000000000backupchecker-1.7/tests/expected_uname_gname/foo/foo/foo1000066400000000000000000000000171251036066300236070ustar00rootroot00000000000000this is a test backupchecker-1.7/tests/file_size/000077500000000000000000000000001251036066300172705ustar00rootroot00000000000000backupchecker-1.7/tests/file_size/archive.conf000066400000000000000000000001501251036066300215540ustar00rootroot00000000000000[main] name=essai type=archive path=tests/file_size/essai.tar.bz2 files_list=tests/file_size/essai-list backupchecker-1.7/tests/file_size/arcsize/000077500000000000000000000000001251036066300207305ustar00rootroot00000000000000backupchecker-1.7/tests/file_size/arcsize/biggerthantararchivesize.conf000066400000000000000000000002141251036066300266520ustar00rootroot00000000000000[main] name=biggerthantaressai type=archive path=tests/file_size/essai.tar.bz2 files_list=tests/file_size/arcsize/biggerthantararcsize-list backupchecker-1.7/tests/file_size/arcsize/biggerthantararcsize-list000066400000000000000000000000711251036066300260240ustar00rootroot00000000000000[archive] # equality test - good value 3161256 size| <12 backupchecker-1.7/tests/file_size/arcsize/biggerthanziparchivesize.conf000066400000000000000000000002101251036066300266620ustar00rootroot00000000000000[main] name=biggerthanzipessai type=archive path=tests/file_size/myzip.zip files_list=tests/file_size/arcsize/biggerthanziparcsize-list backupchecker-1.7/tests/file_size/arcsize/biggerthanziparcsize-list000066400000000000000000000000711251036066300260400ustar00rootroot00000000000000[archive] # equality test - good value 3161256 size| <12 backupchecker-1.7/tests/file_size/arcsize/equaltararchivesize.conf000066400000000000000000000002021251036066300256440ustar00rootroot00000000000000[main] name=equaltaressai type=archive path=tests/file_size/essai.tar.bz2 files_list=tests/file_size/arcsize/equaltararcsize-list backupchecker-1.7/tests/file_size/arcsize/equaltararcsize-list000066400000000000000000000000761251036066300250260ustar00rootroot00000000000000[archive] # equality test - good value 3161256 size| =3161257 backupchecker-1.7/tests/file_size/arcsize/equalziparchivesize.conf000066400000000000000000000001761251036066300256720ustar00rootroot00000000000000[main] name=equalzipessai type=archive path=tests/file_size/myzip.zip files_list=tests/file_size/arcsize/equalziparcsize-list backupchecker-1.7/tests/file_size/arcsize/equalziparcsize-list000066400000000000000000000000771251036066300250430ustar00rootroot00000000000000[archive] # equality test - good value 3161256 size| =31612570 backupchecker-1.7/tests/file_size/arcsize/smallerthantararchivesize.conf000066400000000000000000000002161251036066300270540ustar00rootroot00000000000000[main] name=smallerthantaressai type=archive path=tests/file_size/essai.tar.bz2 files_list=tests/file_size/arcsize/smallerthantararcsize-list backupchecker-1.7/tests/file_size/arcsize/smallerthantararcsize-list000066400000000000000000000000711251036066300262240ustar00rootroot00000000000000[archive] # equality test - good value 3161256 size| >4G backupchecker-1.7/tests/file_size/arcsize/smallerthanziparchivesize.conf000066400000000000000000000002121251036066300270640ustar00rootroot00000000000000[main] name=smallerthanzipessai type=archive path=tests/file_size/myzip.zip files_list=tests/file_size/arcsize/smallerthanziparcsize-list backupchecker-1.7/tests/file_size/arcsize/smallerthanziparcsize-list000066400000000000000000000000711251036066300262400ustar00rootroot00000000000000[archive] # equality test - good value 3161256 size| >4G backupchecker-1.7/tests/file_size/essai-list000066400000000000000000000004731251036066300212740ustar00rootroot00000000000000[files] # mandatory for test_checktar_missing_equality() in tests.py essai/dir/toto| =512M # mandatory for test_checktar_missing_bigger_than() in tests.py essai/titi| >512M # mandatory for test_checktar_missing_equality() in tests.py essai/dir/toutou| <19 # checking if missing files are identified essai/dir/zozo| backupchecker-1.7/tests/file_size/essai-list2000066400000000000000000000001021251036066300213430ustar00rootroot00000000000000[files] myzip/titi| =512M myzip/foo/toto| >512M myzip/toutou| <2K backupchecker-1.7/tests/file_size/essai.tar.bz2000066400000000000000000000004141251036066300215770ustar00rootroot00000000000000BZh91AY&SY#{@ޠ 0(2 i&CF1LOShj4ӂs[bu0abRdDO(mR1H$iDsI'ޘϕ?o. ݸM+Q! N䦐Bq'8m[Q Y]`X-ԂԂ+KlKRaH,+t$M!jQ@!5#2 bBWKBJPL'4oKrKeؔ)ĺӪiui]BBN backupchecker-1.7/tests/file_size/missing-bigger-than/000077500000000000000000000000001251036066300231265ustar00rootroot00000000000000backupchecker-1.7/tests/file_size/missing-bigger-than/mygzip-list000066400000000000000000000000241251036066300253350ustar00rootroot00000000000000[files] mygzip| >30 backupchecker-1.7/tests/file_size/missing-bigger-than/mygzip.conf000066400000000000000000000001061251036066300253110ustar00rootroot00000000000000[main] name=mygzip type=archive path=mygzip.gz files_list=mygzip-list backupchecker-1.7/tests/file_size/missing-bigger-than/mygzip.gz000066400000000000000000000000621251036066300250050ustar00rootroot00000000000000ĈNmygzipHWMS/WH,JU/|2backupchecker-1.7/tests/file_size/missing-smaller-than/000077500000000000000000000000001251036066300233265ustar00rootroot00000000000000backupchecker-1.7/tests/file_size/missing-smaller-than/mygzip-list000066400000000000000000000000231251036066300255340ustar00rootroot00000000000000[files] mygzip| <3 backupchecker-1.7/tests/file_size/missing-smaller-than/mygzip.conf000066400000000000000000000001061251036066300255110ustar00rootroot00000000000000[main] name=mygzip type=archive path=mygzip.gz files_list=mygzip-list backupchecker-1.7/tests/file_size/missing-smaller-than/mygzip.gz000066400000000000000000000000621251036066300252050ustar00rootroot00000000000000ĈNmygzipHWMS/WH,JU/|2backupchecker-1.7/tests/file_size/mygzip-list000066400000000000000000000000241251036066300214770ustar00rootroot00000000000000[files] mygzip| =30 backupchecker-1.7/tests/file_size/mygzip.conf000066400000000000000000000001061251036066300214530ustar00rootroot00000000000000[main] name=mygzip type=archive path=mygzip.gz files_list=mygzip-list backupchecker-1.7/tests/file_size/mygzip.gz000066400000000000000000000000621251036066300211470ustar00rootroot00000000000000ĈNmygzipHWMS/WH,JU/|2backupchecker-1.7/tests/file_size/myzip.zip000066400000000000000000000753761251036066300212060ustar00rootroot00000000000000PK B ;myzip/UT !KKux PK H ;6))_kFO+׺F IbOcIa wb]ۢ_ri½S q֢ FEָs3SdɯԚD*ƨpkL F..&2e%9%9; 8.b"b"tv6&@L6^ WdV_CHMm,^2VOin`1q\#_l~FDǔlfmTCJcJ1.p^&(N" ?f0m A%u`o=d'(r5^ @]Qcۃfw \~!yɰ,5+Q~s͐"<,/pXHA!?Ap sZKw4+x0<>p (62=oŷ_PRsQ>Ox5ʉ,`ڂd(Xxz} c~ZOP= 0?^3xDw~_rҨ?s­k:0NEH)G9Q k} 8m.Xj6' yrۨ(\maISD,{_E~(םBΞd7EZ]u.FPs1԰NR =j<6I [\qz@f``ʜB0;ZUbr`㟑%b|Rzv9F8 ,׹=?s)r6:q ~]FUQ:CcR|%g" v *Wߡ d9<(Pʗ< ̜x~#1R m-^@Ƕw^ KN~[O* : 19{PnLU1SH%Ǥ֊n`O聏(JyXi6jr@Fy!*O72T,'f.w @ѤM8"o,[EǙ7(%QX)5g9cG&I ,t˹ڞfU=3wr-fx9zɨ,!Zu1dBNs6ja]YhQ+TmI[yk9(5#, {ш{ stBQXcx,#SD)f \3B+(ͻenAPo`,Ea}g2veN3z-K.W/qa]eSaNX  n<Gn2ZNJ#a^5P <<xW't:b5rg?#cר/W3d%7=0J4<јoMjQMn̕\% %T {i=5įZ ]M <x˛7VyCe94T}3 %3 -Q{id~iVoں'!.8DX8LzلX~fRa0}p8V `C^L2Hg}_%CYr!޺;^Okqw>G9tp7$]2$|Q'|p(\pAK+98RI}7u>K K6nrwӆA/^I@퀡1g8N!ƒJ R":vFJV6cJX9J˂J~yRU7h^)A_I"eSf$qA hcsh))Jȼx;/Cb*;gZ5`5~k{HqX%BMZPYRE-b,~FA#՟:.eYv <*-p WwNs fsgL67 5]Ӈ$/zn[= Vh Ǣ|rI(W).%aK\bڟ>V Vmm8/7һ GQswH̪<ڛ>d<] HXR˙|k2إH Gs#T $6 A؉뗱I2imV"?׮[붡1ч8TnY GSZ\2e{ 琣,x,() oGđ{cбmg;Smfݮw<+L{%2&v*140~# avoǫV:O~ҿW7ʔɸd 9Fћ.,60{Jf\Bz$Sň "&4NgL(M}_롞_ [()˝26WYJ^Sv3ā|HϘ+O [nZ"Rp!ǹ"D$E1WΦM.(}gFzaHl4]tHq@dHnkʝ$Fizr'onk ܩˊN$|gOs&N"GE\:,ŁI!  뎪 2P}7 ? ;W)3?a#˱Mff$GGo/m_p)7" 0M\ "/(,T/T`H٠!{'K@ hX-Uh`ds};N٘= D K?nbKgCb䝻V*LdZR}F+*"읊CqvP vظpy'oqd6 *1? {yc+Zbd h]kR_lN/KdgIVYGxOaXU J qp#(&L֡5Q6Y&8r"IGV~Nb޿A_<-pDɄ2wV[POuرux@K)rOج*OrԱ): <¹"]';ÔRF #ЋL3T b6F4"3M!1C,A 7 ϛS[6N#3|b?KMɋRAdA-a9X]#b+7Jr8JȚ#/N6H[kSGwiPk}i8OY u_* I z䁩$hPoJb PVBRsE rݲ蔈Y2CiY}4t4Y#Wja֓a ~Wd<2|xR;3Lj'[?BPz%*s*쫲>q4(6}Pi<+ICa)`a_$ɾ-{yV88aW=ѶBA1K+n-vF[3E <.N* V2Ԭo0 ,%TGyiI UqNbŐq18 6Ĭ۴hI:Lx+3l7n%'c /*ueqj5Xa[nX,gOǖ2C[/E?ndFPs T"֨Ϛŝdc 3K䡎8jZ+h/qw2A/ 0Py]S"Bw.Bo3H ~nD^q[맂7֥zxY}]Xuɚo%g :z I)?r&P{35=cNd-2(Dr ~߷bG9|h>4ky X팃PǩHWmRXu‘2ؗeow(UK C@;, .9pNA+w!~|TM1 k Xw-3njQR1N3SmJPt3^t1aPpE! y6kma͋}3"5.oeH2ViP=QZmc(˜' mhp g a"hUލUq>syBM+D|\0gF =9wހ@6(46yъ/;8݊W7VRgJ5YRL@ LNA%ԏ5tTwq2[iI~R\Cxac݄eqt$x1j/{<}{.e~;^,'_=2$>\H rO9`qhO|`+kbF6cC 'P5tw(jdL.me~\Ec+"X#6 CRl^T8!G˔ʀN}ꏧ}_ɕ.ܳxU=yI г&L #wtk{ǛKoMb͎Ha%m1_) cmľg ([;>9jfVJx5)he:l;q_P-rFbU]j1rF( &aB5 fp9"6\UE ,>m& ͭYC^Ms P$Όxjp`Xwpψ7CDյ'5" }uE9$=w(AQ06c1̪@@r"|Va@)<̱شM^ź"s$AiTOg@_r,8R2& p`H53xu+*IBfJc6@ZCY_v\M+ByA`rx x\W_2\fӿs{f}cToiF?W7jN}e@k/DMcY*Cc&|&,0lWB%8TQpv-+ ABq$K *Dj/nRX(=쥳 9̛?'MQw];WxQZgՒK :ץK<<P|s=Ks{YV"Qh5f~0`En OZP_* 以g۝,#=57%9n0 r FCN!TjٔX8 D/S_Uy$ xI '*R>Fv&WfG1<c&7Ať;H47X] Ax'$85@pFϠOԤ&' O7652}ROU[iO$v{AH,`S];Q@/Wp}4̻'z{W&~(E8OmF dM"IX"lj&<=A!f؟G0)T#~,Ѝ ~<o񷀝s| 9"1iLi#ya2 ݦK咷sv+~aߧt0DKyf,"`5˔ !ӣ$7Ќ/- :]?v[4KKf]}o">T!!5à]"xe`}K/ ok=bՎX5T5jwtH87h OSa +a t@zsᲫ}c6/},UYn.F@!'bԕqjCj/bȍFI 5)s0?P:lDޛ_+ ,As|OJODȱcCS J5X!E5z )<}T_ix/=)Z F=, $9^ H+,wjEe;>1.SXN'^e)Xٗτ23奄 9WiBp42&n蚇[cWM͍MQc.md-qAG ɱ?[v=X6K\Zߪ Rý#U+<.VIbmk ,~ҝ-J&; .&j ܈ŋ);F|/_-5EW:\Yv9HAm$ ٗ$@1`.ڝ1{[ɸiai)a݇6h)"?)O '^BJl(M}s s(s'6K1@еw8tS&g6d( Ԗgܧ9&RI2V٢~۲ G8i8\X fGY^QC9?gTB^.DQk7 9¬],!ԥ.t>,QG1E.=}IiMcŗRv@%y)ʋ?9B2`@Cv-`#4{,3ů+z ~Nn=z~Vj:GA k~@ ((&~Pذ 1qЋʷGY+/(ƶCh'e`܏\H[a9LoB:G`DيT8+LnR =?efK ϏXʾ4HI6-^А'ÑRUԀ/[i{38u.&&k_7yˉ^k\e{}9"G6=BN E9}P8i0Û+(b`z>j9P+k&^.!=`2e|5>m#d_n7e>ij@t\l'kp7>*`Ny;'ONuRa܃p -9aAvZnx r(}Px`p7X{%olMk *T);" 9K xpaطc0u ,IÃΞuݪ Davf˽l~yX:85#yal+M+GzotD GyY` NFèx,zo(W:j(jKzTtU "7Usy<@1~S)ȔzOy—.Z0*r4gbwth*gg 븼ְ2Jn_~80&P%PmlzźO.vEd;o00LK7=@,ÔlG =o7=ݱ+0bZjui4=mP[}/E'; ]kcȏGqd\W0Ӑ[a< cV@*mŏ8aKC/{\Gbj3~sa!k$ ,,,FyM=SubzW>?:)vPylc%U LYH J3"Df jE9}~>JkQ*uē@I/R7E@"#s c|=oa*Kh>{)YsRX?X_Zq&x3Vk#JBS&t /AQaiӘW:-N0;xr5b3ZScb /Ա2-j3Y34f?raҞe\nl~)h@YFI@HtJ#"~zYeSnTM1.,BNTFn>a8J°"7%J^  XxGz ^b~eTfMg?yun,X e۴1VU_D)PHw<,VJszN*(܍ل߁`ˇb}Uk`˃uWntZ΄8 /6x: N{-rХ)rv0,^D\Vqāq_s#[9(3k8cCrMf^TD"}u>9g蘭?:G[ *}4ZdsnSȉדK)/ۮ|bQ!V-e_{u}0 MYR(_}(!: Vu즛b* "8hc5F"^iL`#%BHS-`0DTKJ2w~ygp#+amэK{yei؍>iQ|aѵloP)(Mix`En o&_·5Lg(l uQga>HN,S&BXH{9hevi=n34]KY.h,Wgh;*c~$Jtlq;Pk7}gKp?0rw IA۾jAugR pV7w&2#xPK B ;(( myzip/toutouUT !K!Kux vim/Z"mbrT;K6^6%pіaDve9u=1wՂ13ܨE$D+ \6Qm0q]rÁN0*:z# JHtK6>ɕQp3zFLRGa]@beABTHy|άdWM,"1ѥ[My p.Jq +n&[4eca`W:{:M8pR{R0&EmJϿK`%b%) =P ϫa{$#&{ MY Q8vsiNŸPVaߦRHY^P%P9i@.DP3SQت.jv"7<m19lzh 4HO\$dz齮Y#g=5ޭfM5gICdUC2n9&z\4a3AYF矠Ō%gڣ՟(LDK~06m1+jC#y:Pq6r3'p jt꥾>gddjRP:\FxnV ̚Bc\"wI ˟v8 l>3`#6%QWǾؗ[CxS@[rս+F4Y^ͺ7FGvU&ꥪ m"o&|pʒgkWsșJh,2S72孠h_*WNou ƚ)zH+DZ@ }Jk0 Y iW2 /wNp:2Sbqwvh=lau'~K;syAYkIy{,c:I9dȾ4 9%wb,} UZ!$:˷R[~dԓ;qUBdE Qx[ˌ(v9pޣ_S|֨ī,58j5{LPesIzC뙲ݔ%VST}+75E (=)L^P:5Ovx  P*S+O=_68P܄rSʯ,߅K~\ `*ͽ P(nZtjKMcJ8uIoӵ7r~mXe(辬UgFME.p5Ff?L[viv~hVϜv=sGpKČFo7H>jRrעQ>8.uo{{=oc#BFxtIv)l^Ū8]0SGX *MF}̂HwL0@BJ7ϫ8ژR_K]Ѣa^w7a ׉I\m>!6IfjB\4*n'o3MmRh0weT`¨v#+!KsS*RVN!ЀtiTao~pz5vO]k->]SĒxH3[D3/}$2Es$jZX+%N]X5Y.4"ӳp{+'T3k"bDATQ7SV180(UwK@zfg6ő׎:d ;tUZQIR写}P(gWr86~Z`DSg@P8*~DrrSV2 6 Y-o4w>W zx.V7e aT.3bt` d @z8_ƴWJVޠq-_4jO9\]Hgo̽;鲆D-)KHmf*ܘV\+V 68a!ޭ&~с-o`}4f%9kmՀ}<EV-W޻_ l|+F]aəWz˴!J!dK+(]2¬1C:] j;}É-ۛ~y2Pbzhy-Y+4Oܔ@l`#`;\;83MF?7? $EU:Kt.7Re(w0QT}׎ \i%'GPrZ>^tSPM'mޘtE;A$*hN)`^K[vDēA";2'\գJoG(GD-_[*%]S_t2oWe(fwj=1 2 <]+-bJqԠ !F̠`Vhv_v_R!{]f$3=>G&˥*AcCǪS>A^%7,4V% tKTfr>4J;1*oԮP!+ x}{'JrL5.N}i B"rx''@pyEq*(/'zuLJ, L2C`۞, =6SoEXͿlgsae8I-XtPjWԳ;QI;!S #p:Xy ooEΦ`hgjH`Tpc@b&|ҦDkwpSmIMJJ [.CN}cmg}(ӤˣF ;t'FJ$_y>甡5yC=g>]u!_6Z+ % nU >}Ry )ʖt%ְV#PoS"?CR~X&c.JGB;sll˙-Ju2*8P}heI6"؍154oHjnj>YutP( NS&P=Y]]G@H.ɘ fxhR.vҭ%>q ѥ⥅ɢ w&KwQ)xV^;G"T=5ŷxWIl:pd[E}VM* E4a1554+HܩZ wBeqiiBbZl-;K0RC~?PH.R:FsOB>%Dfuҡ_m75,">`J6pٿI(ΔH ُrQ\R"0o[ڼۛ'|YwS,`.6#iݱ)Psh̄&įG SmYϘKn <rF\?v_QTEKw/c)+!"ō2/uř 0oh})KVG}yӼe˹>2x1z3ƝǙ2I=ƪblsJvfg(z h =+J K&atv{q;j)hZwE QkXs82B5z.1Xh<Cp? %peVqo͈I[Wn&m խ_1wx*C&|cX2[$L ď`X<ԧ&6eG͈=L.;홸T%Vf,=7A<+ؔz;?,A:ƨ3wxa_<\-թ?͠|QAX%zԾ%= :1a_Ui*h.S_ba؊ "dn)PS7_H\4GC9GQM\JF?d"@KV̇% ǨCOm$~TF'EG_EeG_3uV@y, ,n-z6Бl2J/{7pWp@ST,nc)XcHb&exDBrZaJF2eҲSM;i E Yݼt$`'2]X'6ɟr:"b))[ٝk[[@ ZaqHʅ:bLY'rgZu(}k8k6}'1uv둿=_F4ԆPC}eXm^?bߐ:r4^"qXYn\~bOG/ӭ#ePbps4L<  bדQtUeZeL]˵k^,xו5IL^7`J!In^K.&aF|qtr!o4Um~D4~ӝbhf]ۇ$i0{XT)Otg?Y/  3B'MssA`(LEqƀˢHZ}8@B0˪s ؓ?`BO溈H}Nb~/[v5aty@7jS"+r@+1c͡Je=q 93e¨`vAjlb5p\1MdqߡzBTVq~]^F Ȉ}օJ]!oh4~Xp%) RPwoRF09EUbʣF2}gKo|4=ų .5&TVyCg3VJ_ P"zX&\VΉ & }Be{D*qQ QdNJZgM4 lǓxԠ}- Bl$֋cw]ZVjMcE"74z֚:^o9}nSx݉Hu xvh|Ԗ#D6sU"UPZNvߓWB_#;|0 ph92v% ZHbQ "W^ݮ6k z*,1I X&1Xeb`Vr45 I FX{HS7W7emdR q+P.<<$Î-վEUVf, /-JX%d*\2N`L #eSk0iSK](ԓYv%V¤Q4 &vR=nԻEnx9J4XFo0ײ1ӝ/z!|77P!_D9(qyXuvy WQyqPP2uLC&ޜ;n\$80%ul]3x,~S/iHoSi 54$P"UnEݹCk=10E1}MBOa ךok?`w=irqvRM# %/nHtŖ W|+!ej*4[eN@3DES57BJl qdCFkx)4&zO!='v7&ҥk#PuN8+ sixN5YHf^dyr$eCmS^whja3I|?Jh4up!.'3|NLI{1E( E{7xH!:!Y+v;{_ц([R"Ż|,grJJF&݂]3=6nCY0WyCR-n):aU?V^ej|pvW@ABNS:ViV\B4g)yΫ7HLygĖfԸ|8"xzI+]xɨ:8xlcE8AТȌ;ԏDhZ+3J1/Hh]DB<مm0 o]&.1}~FfGa)n nZ+E/ﭶ6[?k=K:mvOzp=t/CwrY3BҴkg>ܙmb~`մq֝us.A 4'?JΌvӇT!P-&ThL[:FE݁چho mdG1/_?_ t1imc5_sIj($yFG/&@:澻ޢD.{ ?PzfGkUAZ'dɺu=D_uqCyT]5 X7Gk+G^H.~DN2#u&LM`]*L3(+ٹ%"'V]!~买/V{꟒DIV-C|pC` iZJPĵ-!Kʠj{Yʯ) #Νu|Ldw/G Z>:%)ΛV=^]V~ÎCd#7Rî#XW^k0UVS"r(bl_]Aß%YjdG͐xdd? W>[:wye gP8oԋ:=!c.sWP8 WQDWio5h. ?tZqe|g vIo\D!2#|<9 eFs' #<hXGnG*y񈞿 #,-@| `6Vt@4>{n3F4ZTX# O9lq@=a'TsJe4g*=F'^Iq` k(t^Anez?> 9svG< i{-e_>8`Ȏ~t3NQ:nsF x]!2\ 0 z"9cƦDZEFqc䉲P'c/a 6=Ň}T>QPfM90'3ݥF.Q%G.Iy.ܢOj<4ϳI$UīHPzF/ %F3r4yv:LQe:m[jE̔O w?S 0.\ᏰxQxEFdbY zICd'R;0kK@A.).Xo/H߉W4# ridsfǍM@=hݙrSR4\s$&OWmJ8Z%km4 /Wg(T,XsoG6kpC >)EB/C81K.ɦ*dKMy&.Kxȿ-5rm1#8mjA j yOses PBĀh(sz篱hV ѼK_@; O ǹVe`t go+#_UeWꦕ'BRD  hF/%THE¡X{|$ |CwVzZU(\qZq}칋:6M< 8"D<*$qi7vS^0ӋO)k PdB3j:|=Ю'a7}*rCZN3Eg(`<?"WhĺԄA|@eC!ZN s\W,o{#TJdm %,C ̄'E$nY1y&܃RVNt 2X%O@OIxTdz”7"8%B5P71S 7[, 4;2EC.*>4{-/Б9xʊOd)(kT:2WLą9qoWO`5l]te2lZX\fĻBSԠݣӧr֮f,_i!J7lI඄߱ Y?A3~zD1vh`R$RrGc&8ѵ>sF븝e::P;%pr4k^w95`*2Xlu<@bO֞Y.v=ZN55ij4]U=kQ+` N8ЉrI'`Ɍ4_X茝=H~uǟs4} c>W2OhBq5YT&|݃ wG8KXR7(oGg'`,^7 f&p7MT|úh8UHE7] \bq+pj0=^*?^G'匜ч5W]ksZGbTP7R|p[Iī2 kȯyf="*'jvpqab zShL3A#.pHlI[nRRp-BzA"eH^W>-1sҐb PЈ5ȅ{#XmVSI;][y!Z\FEDb,k2=LKɭEgVTdԁ+q `>L-T9N0Pb}HX䴈Gro.c_zx9 a ѱHtYE XC>f|\CmaURu_Y 9)/;#٬=23!to3?>-dds-JZx =6g2f SY,H~: ,ي¼ò[2vco5/kӚ@f|׺'_ wQ&k)U 609%i&Cl{v-R"Np"fFd7AU=ao6^ ymwt;YnjrN^3{O &jWu4(Wr5]XT83K.1ۭy&GAGxdG <˔ I5ػ΢^A{c^l~fhtL:mn_=Cr L-(h?y$@ݲXcX/,O\1$b]n&$:a;~v1'bZyܛ B+ (4;&&Q7Pf[``v^_5al\C/v #}R[=?]:0+7Y֌)szv͂ˮ|uHDaw\Xkj|oB-%eAL;.a3=H9F)\)r8_.G'FSgV+SVrgw'_j#>^ˏgz\vvVV3["U5w\ D +'Gqt2-~3.-8c<|zi#75oaֵ{ LbC,ET2newjHW)D5Gߑ̫Z?d 5L 3ޜu?PceK24m%ov_]Rԗ& J5X\lA"hFDzx:0 "mďA UBR_mR!RV%1pD{ /)i9n!-\09YV{M[gy #?ׄAF49aK?5 M?$;Yl&-TuwWv)`B|%q kjJh[τ[0F5DNZ%,(N@ ;`$g.W$ :q3H~A/7W#ǔY9Zt%ٓB9TWG ҧRtS, s@ :w0ւx'4!&zmpOj7Q1(x4B?edRrD/~Zi6unִ%I IvsI@PϛxC |ԣ<|l^9d 5j6wX gQhm(IyՃM܆l)Jt|kӶGVSr/7HaM˙^;ǥ,,^٥$=z pëN* [;&CPXvG2&:;ƅQE]o%?]מ[ QM(t0 >0tR4Q0ebQ.sd,ӓTtt벝O&`VDށQYxwKU0sT z|3΁+uxE"Ƅm3߉J˖yn#h#S $͡E8Xqkh*֘>T$9Y4 da?[i:rV_h-0x:Ts #Wj- ~ϩ= [ƛ/B&<|",}+>t6&jP Tŧ-Ta-C\AE»y_Hȏjop" =g/넧,b{gړ &baTpqf P M /TA~#CH9''XEf&[ s]. VUXbBÌ9G+ѹ>@'{3t* jtamc-_jQj^Uz`eq!Ձ1$B$cQ63\Rv*J::s)%ef1 sBQX]xD5OGKzQaL]dv!MɌ:0jH*7s9WtwtMmd,Z :{q#,`mHd%Xt.}aW\DU1h #J?T*a| aK*rlyoaTc(zFז Yb>6cS$}:p# M֟e s='E]~`_.TP A}gD.+.i@,Q !^gu%2NcT%1ޭ5kݍ(3{Y\!Vk70;|7ٻJk2 V4:D^gjŽ(B8.zv6YcN]Ɖ*i9chp##닆c#SK>Cޙ0֠!LUw٪ q!2xC~~?MN'6 .'控XY옂D&kUɽhD[>kܑ72^6vKhKk100_/ wd5y9 o8޵XKHpRw+S o_oIbH kg@28$o)qFtOYdgbcLh ,NY>4WL{&_zR?.ɡB8OF 1)_gayU(sclwz\*JH Zl;Vv̀MʈBXx{\h\3V+&b TuyEȷi{EңFRǬfK^Vr7BA&a9.% !J4JRԀ#63/ r+ )jZ,At#6riʵ^3G ܶ22xvX`czGSQFrsW 8X6)>3'9uj$'uQg7,6 ~,Km5 z66*5p1T(.D Ra(8I< tَ4hƤ"*}veə *v\AuhP9b0q-L9u4D=FH@SV=7o 42[?f cθkĔKgwƲCp"Rmɔ{{ Ԕ;qJ( ~4|Hiјdȸ(?tԯM;ٳ)Gd7]׍c7u#%?jәf> ~CΆ_decDhqLKɯC-W{Gex+h%RyS P4%4*0љ ]N1 V;.&=y!+_fRBaP~/Q0-|ANn_(,z,0ϒjWYɀBwU}e!zm>&ޯ2S >p߼K;4?^]Bp^6y}Aޓ2G\k'UDvl_8:5#ypA4K5Rt#tԃoF8 M/,4oڟQ(y#s&;OȾe<֢ 񬶒 (i}-Eܕ{xkXn +\cun`̞Ȅwyt!zFoj޷ 3X a#Ȋk=IT\iP :+|([Py#q̀轝"q9l5 = H`ܱ=c6@~GBiLbHPK B ;Amyzip/UT!Kux PK H ;300G # mandatory for test_checktree_missing_smaller_than() in tests.py bar/foo3| <1K # checking if missing files are identified bar/toto| backupchecker-1.7/tests/filetree/filetree.conf000066400000000000000000000001261251036066300215630ustar00rootroot00000000000000[main] name=tree type=tree path=tests/filetree/foo files_list=tests/filetree/filelist backupchecker-1.7/tests/filetree/foo/000077500000000000000000000000001251036066300177015ustar00rootroot00000000000000backupchecker-1.7/tests/filetree/foo/bar/000077500000000000000000000000001251036066300204455ustar00rootroot00000000000000backupchecker-1.7/tests/filetree/foo/bar/foo3000066400000000000000000000040001251036066300212300ustar00rootroot00000000000000backupchecker-1.7/tests/filetree/foo/foo1000066400000000000000000000000031251036066300204610ustar00rootroot00000000000000yo backupchecker-1.7/tests/filetree/foo/foo2000066400000000000000000000000061251036066300204650ustar00rootroot00000000000000hello backupchecker-1.7/tests/generatelist_private_methods/000077500000000000000000000000001251036066300232625ustar00rootroot00000000000000backupchecker-1.7/tests/generatelist_private_methods/mytar.list000066400000000000000000000000151251036066300253070ustar00rootroot00000000000000[files] foo: backupchecker-1.7/tests/generatelistforgzip_private_methods/000077500000000000000000000000001251036066300246635ustar00rootroot00000000000000backupchecker-1.7/tests/generatelistforgzip_private_methods/mygzip.gz000066400000000000000000000000501251036066300265370ustar00rootroot000000000000006Nmygzip+,VD.+Z(backupchecker-1.7/tests/generatelistfortar_private_methods/000077500000000000000000000000001251036066300245005ustar00rootroot00000000000000backupchecker-1.7/tests/generatelistfortar_private_methods/mytar.tar.gz000066400000000000000000000003301251036066300267570ustar00rootroot00000000000000kNԽ0@>E}ڎ Joo\:Tc<n8\ӡj2)ޚF8k{eD)mӎu ZnUˤ;.>' C$zF߿NY !TWӾ.+ /3ynᨫfOO=x4SD(backupchecker-1.7/tests/generatelistfortree_private_methods/000077500000000000000000000000001251036066300246515ustar00rootroot00000000000000backupchecker-1.7/tests/generatelistfortree_private_methods/mydir/000077500000000000000000000000001251036066300257755ustar00rootroot00000000000000backupchecker-1.7/tests/generatelistfortree_private_methods/mydir/bar/000077500000000000000000000000001251036066300265415ustar00rootroot00000000000000backupchecker-1.7/tests/generatelistfortree_private_methods/mydir/bar/rab000066400000000000000000000000001251036066300272160ustar00rootroot00000000000000backupchecker-1.7/tests/generatelistfortree_private_methods/mydir/foo000066400000000000000000000000231251036066300264760ustar00rootroot00000000000000this is a foo file backupchecker-1.7/tests/generatelistfortree_private_methods/mydir/oof000077700000000000000000000000001251036066300272042fooustar00rootroot00000000000000backupchecker-1.7/tests/generatelistforzip_private_methods/000077500000000000000000000000001251036066300245145ustar00rootroot00000000000000backupchecker-1.7/tests/generatelistforzip_private_methods/myzip.zip000066400000000000000000000007331251036066300264130ustar00rootroot00000000000000PK ve?myzip/UT /qNqNux PK se? myzip/bar/UT )qN)qNux PK ve?m myzip/fooUT /qN/qNux this is a foo file PK ve?Amyzip/UT/qNux PK se? A@myzip/bar/UT)qNux PK ve?m myzip/fooUT/qNux PKbackupchecker-1.7/tests/gzip/000077500000000000000000000000001251036066300162705ustar00rootroot00000000000000backupchecker-1.7/tests/gzip/mygzip-list000066400000000000000000000000151251036066300204770ustar00rootroot00000000000000[files] foo| backupchecker-1.7/tests/gzip/mygzip.conf000066400000000000000000000001061251036066300204530ustar00rootroot00000000000000[main] name=mygzip type=archive path=mygzip.gz files_list=mygzip-list backupchecker-1.7/tests/gzip/mygzip.gz000066400000000000000000000000621251036066300201470ustar00rootroot00000000000000ĈNmygzipHWMS/WH,JU/|2backupchecker-1.7/tests/listtype/000077500000000000000000000000001251036066300171745ustar00rootroot00000000000000backupchecker-1.7/tests/listtype/mybz2.bz2000066400000000000000000000001431251036066300206540ustar00rootroot00000000000000BZh91AY&SYMU߀@* ;l0 HjQi =CB ÐNcHnV-1˲:E{H )backupchecker-1.7/tests/listtype/mygzip.gz000066400000000000000000000000621251036066300210530ustar00rootroot00000000000000ЈNmygzipHWMS/WH,JU/|2backupchecker-1.7/tests/listtype/mylzma.xz000066400000000000000000000001041251036066300210630ustar00rootroot000000000000007zXZִF!t/ lzma test X" g}YZbackupchecker-1.7/tests/listtype/mytargz.tar.gz000066400000000000000000000002741251036066300220230ustar00rootroot00000000000000tNM 0@=En`&y-"zzҢ.tD|f dko2[E)ћ9S"bmH Ϲr?@kzW.tکS덱+!:muh.Vs~88_ܳCi7쮯]jo"sU(backupchecker-1.7/tests/listtype/mytree/000077500000000000000000000000001251036066300205015ustar00rootroot00000000000000backupchecker-1.7/tests/listtype/mytree/hello000066400000000000000000000000061251036066300215230ustar00rootroot00000000000000hello backupchecker-1.7/tests/listtype/mytree/riri000077700000000000000000000000001251036066300224122helloustar00rootroot00000000000000backupchecker-1.7/tests/listtype/myzip.zip000066400000000000000000000016201251036066300210670ustar00rootroot00000000000000PK ')?file-missing-in-zip/UT >iN>iNux PK -)?file-missing-in-zip/foo2/UT >iN>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT >iN>iNux hi PK )?鳢file-missing-in-zip/barUT >iN>iNux bar PK )?zzofile-missing-in-zip/fooUT >iN>iNux hi PK ')?Afile-missing-in-zip/UT>iNux PK -)?ANfile-missing-in-zip/foo2/UT>iNux PK -)?zzofile-missing-in-zip/foo2/bar2UT>iNux PK )?鳢file-missing-in-zip/barUT>iNux PK )?zzoPfile-missing-in-zip/fooUT>iNux PKbackupchecker-1.7/tests/lzma/000077500000000000000000000000001251036066300162625ustar00rootroot00000000000000backupchecker-1.7/tests/lzma/mylzma-list000066400000000000000000000000151251036066300204630ustar00rootroot00000000000000[files] foo| backupchecker-1.7/tests/lzma/mylzma.xz000066400000000000000000000001041251036066300201510ustar00rootroot000000000000007zXZִF!t/ lzma test X" g}YZbackupchecker-1.7/tests/placeholders/000077500000000000000000000000001251036066300177645ustar00rootroot00000000000000backupchecker-1.7/tests/placeholders/hourly.1000066400000000000000000000000001251036066300213560ustar00rootroot00000000000000backupchecker-1.7/tests/placeholders/hourly.2000066400000000000000000000000001251036066300213570ustar00rootroot00000000000000backupchecker-1.7/tests/placeholders/hourly.3000066400000000000000000000000001251036066300213600ustar00rootroot00000000000000backupchecker-1.7/tests/tar_bz2_archive_content/000077500000000000000000000000001251036066300221155ustar00rootroot00000000000000backupchecker-1.7/tests/tar_bz2_archive_content/archive2.conf000066400000000000000000000002311251036066300244630ustar00rootroot00000000000000[main] name=essai2 type=archive path=/home/chaica/progra/python/brebis/tests/titi.tar.bz2 files_list=/home/chaica/progra/python/brebis/tests/essai2-list backupchecker-1.7/tests/tar_bz2_archive_content/essai2-list000066400000000000000000000000311251036066300241710ustar00rootroot00000000000000[files] titi/toutou/foo| backupchecker-1.7/tests/tar_bz2_archive_content/titi.tar.bz2000066400000000000000000000002631251036066300242730ustar00rootroot00000000000000BZh91AY&SY9yy@@$i`0&&L1$4b/0ț4;G8M&90D"Xb JCֺBCiYJF,0EHPN\ RPAws4ih͠k7W0/*:ܑN$>N^^@backupchecker-1.7/tests/tar_gz_archive_content/000077500000000000000000000000001251036066300220405ustar00rootroot00000000000000backupchecker-1.7/tests/tar_gz_archive_content/archive.conf000066400000000000000000000001071251036066300243260ustar00rootroot00000000000000[main] name=essai type=archive path=essai.tar.gz files_list=essai-list backupchecker-1.7/tests/tar_gz_archive_content/essai-list000066400000000000000000000000501251036066300240330ustar00rootroot00000000000000[files] essai/dir/toto| essai/dir/titi| backupchecker-1.7/tests/tar_gz_archive_content/essai.tar.gz000066400000000000000000000003201251036066300242660ustar00rootroot00000000000000I/Kessai.tarY 0@|w/'BA@m# > 񨲒AzbTN}Ã/U^kw)ENO_wcXء IM3s_o8QΫ?߅k[[?hE 󿆩?wGy(backupchecker-1.7/tests/test_conf/000077500000000000000000000000001251036066300173035ustar00rootroot00000000000000backupchecker-1.7/tests/test_conf/archive.conf000066400000000000000000000001231251036066300215670ustar00rootroot00000000000000[main] name=essai type=archive path=essai.tar.gz files_list=essai-list delimiter=| backupchecker-1.7/tests/test_conf/essai-list000066400000000000000000000000501251036066300212760ustar00rootroot00000000000000[files] essai/dir/toto| essai/dir/titi| backupchecker-1.7/tests/test_conf/essai.tar.gz000066400000000000000000000003201251036066300215310ustar00rootroot00000000000000I/Kessai.tarY 0@|w/'BA@m# > 񨲒AzbTN}Ã/U^kw)ENO_wcXء IM3s_o8QΫ?߅k[[?hE 󿆩?wGy(backupchecker-1.7/tests/test_conf/subdir/000077500000000000000000000000001251036066300205735ustar00rootroot00000000000000backupchecker-1.7/tests/test_conf/subdir/archive2.conf000066400000000000000000000001221251036066300231400ustar00rootroot00000000000000[main] name=essai2 type=archive path=toto/essai.tar.gz files_list=toto/essai-list backupchecker-1.7/tests/test_conf/subdir/toto/000077500000000000000000000000001251036066300215605ustar00rootroot00000000000000backupchecker-1.7/tests/test_conf/subdir/toto/essai-list000066400000000000000000000000501251036066300235530ustar00rootroot00000000000000[files] essai/dir/toto| essai/dir/titi| backupchecker-1.7/tests/test_conf/subdir/toto/essai.tar.gz000066400000000000000000000003201251036066300240060ustar00rootroot00000000000000I/Kessai.tarY 0@|w/'BA@m# > 񨲒AzbTN}Ã/U^kw)ENO_wcXء IM3s_o8QΫ?߅k[[?hE 󿆩?wGy(backupchecker-1.7/tests/test_conf_gpg/000077500000000000000000000000001251036066300201405ustar00rootroot00000000000000backupchecker-1.7/tests/test_conf_gpg/archive.conf000066400000000000000000000017161251036066300224350ustar00rootroot00000000000000-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 [main] name=strip-gpg-header-tar-gz type=archive path=essai.tar.gz files_list=essai.list -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBCAAGBQJSYw6BAAoJEAJwonWM1zbi1sEP/38PWWTYpBrUd33VN6Qr5o2h 0Xs6k23CiCORBHMFG6qrwRgJuWqAMJg3fqRFu8oXvFzduZuRP1sLVoM+TQ7CuCbH LOMLPljsa9U8SF5s6q2LcAPRHtn9+tY9PukL95kRrzq+dt5yDD5GOx538R384I4U h6DaHfCh0b6jE5Uv5kqdtKtZaiKXLdYX+R3ljmh0VauS8XZcbqybeL+YE8qBTD9R 0sh6wRDAnAd7W3blIVaoZPh/QJ89IX87ngmh7/qRf8Zcl7xek8VQ1CIOCOPAO0wc Pg+pVg2zP2q0SYwuFaf598c8AqxpgZV29qMty6P/8VLbm2scFD63SDrQlREZwQG6 WEumMGpr3O86ygpikjsag/DP9DEOwaJun1M3PcSK1ewWKkFIgjh+mKKGF+B6GhG0 USEJAikKstcQuzjUEenf2uYKfzOsIulYsr2f40SEeJ0S5r1iRn7SXCw/7ahwsKXd RbKMpJfSTgPZ2RBPS2YOUMnHo2gJQr32U/JBr6vHZl0byKnblqi/NAPuk8qKgsVY RYsmCfOZRXvqTqCT3MMyIAP3m1IvolGAHcv/MeC9yG8BM/r2X7N+x71+KuuWMHlQ 89Wz0CRr21uu4SFVzkQwAgr39iGasO8ICKu3N/qeQ2fWCoDLINfXHi2yohVZYPIW ennHbVX0g6KFh3G7k7XJ =c72L -----END PGP SIGNATURE----- backupchecker-1.7/tests/test_conf_gpg/essai.list000066400000000000000000000000501251036066300221340ustar00rootroot00000000000000[files] essai/dir/toto| essai/dir/titi| backupchecker-1.7/tests/test_conf_gpg/essai.tar.gz000066400000000000000000000003201251036066300223660ustar00rootroot00000000000000I/Kessai.tarY 0@|w/'BA@m# > 񨲒AzbTN}Ã/U^kw)ENO_wcXء IM3s_o8QΫ?߅k[[?hE 󿆩?wGy(backupchecker-1.7/tests/test_conf_gpg/result000066400000000000000000000001311251036066300213740ustar00rootroot00000000000000[main] name=strip-gpg-header-tar-gz type=archive path=essai.tar.gz files_list=essai.list backupchecker-1.7/tests/unexpected_files/000077500000000000000000000000001251036066300206455ustar00rootroot00000000000000backupchecker-1.7/tests/unexpected_files/archive.conf000066400000000000000000000001611251036066300231330ustar00rootroot00000000000000[main] name=foo type=archive path=tests/unexpected_files/foo.tar.gz files_list=tests/unexpected_files/files-list backupchecker-1.7/tests/unexpected_files/files-list000066400000000000000000000000601251036066300226370ustar00rootroot00000000000000[files] foo/foo1| foo/foo2| foo/bar| unexpected backupchecker-1.7/tests/unexpected_files/foo.tar.gz000066400000000000000000000002411251036066300225540ustar00rootroot00000000000000&(La 0 7Xy`ۂnAx()GeęVcJژn,6i`z+k2e*}zSsͿ޳G 8Ǹ'zCmȿ;յǁS?/<<{. R(backupchecker-1.7/tests/zip/000077500000000000000000000000001251036066300161215ustar00rootroot00000000000000backupchecker-1.7/tests/zip/cryptedzip.zip000066400000000000000000000007761251036066300210540ustar00rootroot00000000000000PK vk=foo/UT /L.Lux PK vk= 0:6foo/barUT /L/Lux ՓJ q4SdnPK 0:6PK rk= foo/foo1UT /L/Lux O[nDPK PK vk=Afoo/UT/Lux PK vk= 0:6>foo/barUT/Lux PK rk= foo/foo1UT/Lux PKbackupchecker-1.7/tests/zip/mycryptedzip.conf000066400000000000000000000001411251036066300215270ustar00rootroot00000000000000[main] name=mycryptedzip type=archive path=tests/cryptedzip.zip files_list=tests/cryptedzip-list backupchecker-1.7/tests/zip/myzip-list000066400000000000000000000000401251036066300201570ustar00rootroot00000000000000[files] myzip/bar1| toto/bling| backupchecker-1.7/tests/zip/myzip.conf000066400000000000000000000001201251036066300201310ustar00rootroot00000000000000[main] name=myzip type=archive path=tests/myzip.zip files_list=tests/myzip-list backupchecker-1.7/tests/zip/myzip.zip000066400000000000000000000011621251036066300200150ustar00rootroot00000000000000PK jz;myzip/UT rKrKux PK jz; 0:6 myzip/bar1UT rKrKux hello PK jz; myzip/foo/UT rKrKux PKjz;.myzip/foo/bar2UT rKrKux .PK jz;Amyzip/UTrKux PK jz; 0:6 @myzip/bar1UTrKux PK jz; Amyzip/foo/UTrKux PKjz;.myzip/foo/bar2UTrKux PK@