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