/*- * Copyright (c) 2012 Michihiro NAKAJIMA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "test.h" __FBSDID("$FreeBSD$"); static void test_uid(void) { struct archive_entry *ae; struct archive *m; if (!assert((m = archive_match_new()) != NULL)) return; if (!assert((ae = archive_entry_new()) != NULL)) { archive_match_free(m); return; } assertEqualIntA(m, 0, archive_match_include_uid(m, 1000)); assertEqualIntA(m, 0, archive_match_include_uid(m, 1002)); archive_entry_set_uid(ae, 0); failure("uid 0 should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_set_uid(ae, 1000); failure("uid 1000 should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_set_uid(ae, 1001); failure("uid 1001 should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_set_uid(ae, 1002); failure("uid 1002 should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_set_uid(ae, 1003); failure("uid 1003 should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); /* Clean up. */ archive_entry_free(ae); archive_match_free(m); } static void test_gid(void) { struct archive_entry *ae; struct archive *m; if (!assert((m = archive_match_new()) != NULL)) return; if (!assert((ae = archive_entry_new()) != NULL)) { archive_match_free(m); return; } assertEqualIntA(m, 0, archive_match_include_gid(m, 1000)); assertEqualIntA(m, 0, archive_match_include_gid(m, 1002)); archive_entry_set_gid(ae, 0); failure("uid 0 should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_set_gid(ae, 1000); failure("uid 1000 should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_set_gid(ae, 1001); failure("uid 1001 should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_set_gid(ae, 1002); failure("uid 1002 should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_set_gid(ae, 1003); failure("uid 1003 should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); /* Clean up. */ archive_entry_free(ae); archive_match_free(m); } static void test_uname_mbs(void) { struct archive_entry *ae; struct archive *m; if (!assert((m = archive_match_new()) != NULL)) return; if (!assert((ae = archive_entry_new()) != NULL)) { archive_match_free(m); return; } assertEqualIntA(m, 0, archive_match_include_uname(m, "foo")); assertEqualIntA(m, 0, archive_match_include_uname(m, "bar")); archive_entry_copy_uname(ae, "unknown"); failure("User 'unknown' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_uname(ae, "foo"); failure("User 'foo' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_uname(ae, "foo1"); failure("User 'foo1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_uname(ae, "bar"); failure("User 'bar' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_uname(ae, "bar1"); failure("User 'bar1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); /* Clean up. */ archive_entry_free(ae); archive_match_free(m); } static void test_uname_wcs(void) { struct archive_entry *ae; struct archive *m; if (!assert((m = archive_match_new()) != NULL)) return; if (!assert((ae = archive_entry_new()) != NULL)) { archive_match_free(m); return; } assertEqualIntA(m, 0, archive_match_include_uname_w(m, L"foo")); assertEqualIntA(m, 0, archive_match_include_uname_w(m, L"bar")); archive_entry_copy_uname_w(ae, L"unknown"); failure("User 'unknown' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_uname_w(ae, L"foo"); failure("User 'foo' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_uname_w(ae, L"foo1"); failure("User 'foo1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_uname_w(ae, L"bar"); failure("User 'bar' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_uname_w(ae, L"bar1"); failure("User 'bar1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); /* Clean up. */ archive_entry_free(ae); archive_match_free(m); } static void test_gname_mbs(void) { struct archive_entry *ae; struct archive *m; if (!assert((m = archive_match_new()) != NULL)) return; if (!assert((ae = archive_entry_new()) != NULL)) { archive_match_free(m); return; } assertEqualIntA(m, 0, archive_match_include_gname(m, "foo")); assertEqualIntA(m, 0, archive_match_include_gname(m, "bar")); archive_entry_copy_gname(ae, "unknown"); failure("Group 'unknown' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_gname(ae, "foo"); failure("Group 'foo' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_gname(ae, "foo1"); failure("Group 'foo1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_gname(ae, "bar"); failure("Group 'bar' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_gname(ae, "bar1"); failure("Group 'bar1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); /* Clean up. */ archive_entry_free(ae); archive_match_free(m); } static void test_gname_wcs(void) { struct archive_entry *ae; struct archive *m; if (!assert((m = archive_match_new()) != NULL)) return; if (!assert((ae = archive_entry_new()) != NULL)) { archive_match_free(m); return; } assertEqualIntA(m, 0, archive_match_include_gname_w(m, L"foo")); assertEqualIntA(m, 0, archive_match_include_gname_w(m, L"bar")); archive_entry_copy_gname_w(ae, L"unknown"); failure("Group 'unknown' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_gname_w(ae, L"foo"); failure("Group 'foo' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_gname_w(ae, L"foo1"); failure("Group 'foo1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); archive_entry_copy_gname_w(ae, L"bar"); failure("Group 'bar' should not be excluded"); assertEqualInt(0, archive_match_owner_excluded(m, ae)); assertEqualInt(0, archive_match_excluded(m, ae)); archive_entry_copy_gname_w(ae, L"bar1"); failure("Group 'bar1' should be excluded"); assertEqualInt(1, archive_match_owner_excluded(m, ae)); assertEqualInt(1, archive_match_excluded(m, ae)); /* Clean up. */ archive_entry_free(ae); archive_match_free(m); } DEFINE_TEST(test_archive_match_owner) { test_uid(); test_gid(); test_uname_mbs(); test_uname_wcs(); test_gname_mbs(); test_gname_wcs(); }