#include #include #include "user.h" #include "test_util.h" bool gets_home_directory() { //given const char *expected_home_directory = "home/msmith"; struct passwd test_passwd; test_passwd.pw_dir = const_cast (expected_home_directory); user test_user (&test_passwd); //when std::string actual_home_directory = test_user.home_directory(); //then check (expected_home_directory == actual_home_directory, "directories do not match"); return expected_home_directory == actual_home_directory; } std::shared_ptr fake_passwd; int fake_getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result) { if (fake_passwd) { *pwd = *fake_passwd; *result = pwd; return 0; } return -1; } bool create_user_succeeds() { // given std::string username ("msmith"); std::string home_directory ("this is my home"); fake_passwd.reset (new struct passwd); fake_passwd->pw_dir = const_cast (home_directory.c_str()); // when std::shared_ptr user (create_user (username)); // then check (user, "user should be returned"); check (user->home_directory() == home_directory, "home directory does not match"); succeed(); } bool create_user_nonexistent() { // given std::string username ("msmith"); // when std::shared_ptr user (create_user (username)); // then check (!user, "no user should be returned"); succeed(); } RESET_VARS_START fake_passwd.reset ((struct passwd *)0); RESET_VARS_END int run_tests() { test (gets_home_directory); test (create_user_succeeds); test (create_user_nonexistent); succeed(); } int main (int argc, char *argv[]) { return !run_tests(); }