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