Example #1
0
static int
run_tests(const char *snapshot_file, enum test_methods method)
{
	struct passwd_test_data td, td_snap, td_2pass;
	int rv;

	TEST_DATA_INIT(passwd, &td, clone_passwd, free_passwd);
	TEST_DATA_INIT(passwd, &td_snap, clone_passwd, free_passwd);
	if (snapshot_file != NULL) {
		if (access(snapshot_file, W_OK | R_OK) != 0) {
			if (errno == ENOENT)
				method = TEST_BUILD_SNAPSHOT;
			else {
				printf("can't access the file %s\n",
				    snapshot_file);
				rv = -1;
				goto fin;
			}
		} else {
			if (method == TEST_BUILD_SNAPSHOT) {
				rv = 0;
				goto fin;
			}

			TEST_SNAPSHOT_FILE_READ(passwd, snapshot_file,
				&td_snap, passwd_read_snapshot_func);
		}
	}

	rv = passwd_fill_test_data(&td);
	if (rv == -1)
		return (-1);

	switch (method) {
	case TEST_GETPWNAM:
		if (snapshot_file == NULL)
			rv = DO_1PASS_TEST(passwd, &td,
				passwd_test_getpwnam, (void *)&td);
		else
			rv = DO_1PASS_TEST(passwd, &td_snap,
				passwd_test_getpwnam, (void *)&td_snap);
		break;
	case TEST_GETPWUID:
		if (snapshot_file == NULL)
			rv = DO_1PASS_TEST(passwd, &td,
				passwd_test_getpwuid, (void *)&td);
		else
			rv = DO_1PASS_TEST(passwd, &td_snap,
				passwd_test_getpwuid, (void *)&td_snap);
		break;
	case TEST_GETPWENT:
		if (snapshot_file == NULL)
			rv = DO_1PASS_TEST(passwd, &td, passwd_test_getpwent,
				(void *)&td);
		else
			rv = DO_2PASS_TEST(passwd, &td, &td_snap,
				compare_passwd, NULL);
		break;
	case TEST_GETPWENT_2PASS:
		TEST_DATA_INIT(passwd, &td_2pass, clone_passwd, free_passwd);
		rv = passwd_fill_test_data(&td_2pass);
		if (rv != -1)
			rv = DO_2PASS_TEST(passwd, &td, &td_2pass,
			    compare_passwd, NULL);
		TEST_DATA_DESTROY(passwd, &td_2pass);
		break;
	case TEST_BUILD_SNAPSHOT:
		if (snapshot_file != NULL)
			rv = TEST_SNAPSHOT_FILE_WRITE(passwd, snapshot_file,
			    &td, sdump_passwd);
		break;
	default:
		rv = 0;
		break;
	}

fin:
	TEST_DATA_DESTROY(passwd, &td_snap);
	TEST_DATA_DESTROY(passwd, &td);

	return (rv);
}
Example #2
0
int
main(int argc, char **argv)
{
	struct passwd_test_data td, td_snap, td_2pass;
	char *snapshot_file;
	int rv;
	int c;
	
	if (argc < 2)
		usage();
		
	snapshot_file = NULL;
	while ((c = getopt(argc, argv, "nue2ds:")) != -1)
		switch (c) {
		case 'd':
			debug++;
			break;
		case 'n':
			method = TEST_GETPWNAM;
			break;
		case 'u':
			method = TEST_GETPWUID;
			break;
		case 'e':
			method = TEST_GETPWENT;
			break;
		case '2':
			method = TEST_GETPWENT_2PASS;
			break;
		case 's':
			snapshot_file = strdup(optarg);
			break;
		default:
			usage();
		}
	
	TEST_DATA_INIT(passwd, &td, clone_passwd, free_passwd);
	TEST_DATA_INIT(passwd, &td_snap, clone_passwd, free_passwd);
	if (snapshot_file != NULL) {
		if (access(snapshot_file, W_OK | R_OK) != 0) {		
			if (errno == ENOENT)
				method = TEST_BUILD_SNAPSHOT;
			else {
				if (debug)
					printf("can't access the file %s\n",
				snapshot_file);
			
				rv = -1;
				goto fin;
			}
		} else {
			if (method == TEST_BUILD_SNAPSHOT) {
				rv = 0;
				goto fin;
			}
			
			TEST_SNAPSHOT_FILE_READ(passwd, snapshot_file,
				&td_snap, passwd_read_snapshot_func);
		}
	}
		
	rv = passwd_fill_test_data(&td);
	if (rv == -1)
		return (-1);
	
	switch (method) {
	case TEST_GETPWNAM:
		if (snapshot_file == NULL)
			rv = DO_1PASS_TEST(passwd, &td,
				passwd_test_getpwnam, (void *)&td);
		else
			rv = DO_1PASS_TEST(passwd, &td_snap, 
				passwd_test_getpwnam, (void *)&td_snap);
		break;
	case TEST_GETPWUID:
		if (snapshot_file == NULL)
			rv = DO_1PASS_TEST(passwd, &td,
				passwd_test_getpwuid, (void *)&td);
		else
			rv = DO_1PASS_TEST(passwd, &td_snap, 
				passwd_test_getpwuid, (void *)&td_snap);
		break;
	case TEST_GETPWENT:
		if (snapshot_file == NULL)
			rv = DO_1PASS_TEST(passwd, &td, passwd_test_getpwent,
				(void *)&td);
		else
			rv = DO_2PASS_TEST(passwd, &td, &td_snap,
				compare_passwd, NULL);
		break;
	case TEST_GETPWENT_2PASS:
			TEST_DATA_INIT(passwd, &td_2pass, clone_passwd, free_passwd);
			rv = passwd_fill_test_data(&td_2pass);			
			if (rv != -1)
				rv = DO_2PASS_TEST(passwd, &td, &td_2pass,
					compare_passwd, NULL);
			TEST_DATA_DESTROY(passwd, &td_2pass);
		break;
	case TEST_BUILD_SNAPSHOT:
		if (snapshot_file != NULL)
		    rv = TEST_SNAPSHOT_FILE_WRITE(passwd, snapshot_file, &td, 
			sdump_passwd);
		break;
	default:
		rv = 0;
		break;
	};

fin:
	TEST_DATA_DESTROY(passwd, &td_snap);
	TEST_DATA_DESTROY(passwd, &td);
	free(snapshot_file);	
	return (rv);
}