Kaynağa Gözat

YARN-8922. Fixed test-container-executor test setup and clean up.
Contributed by Robert Kanter

Eric Yang 6 yıl önce
ebeveyn
işleme
66e7a2c787

+ 39 - 15
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/test-container-executor.c

@@ -1440,32 +1440,26 @@ int main(int argc, char **argv) {
     exit(1);
   }
 
-  if (mkdirs(TEST_ROOT, 0777) != 0) {
+  printf("\nMaking test dir\n");
+  if (mkdirs(TEST_ROOT, 0755) != 0) {
     exit(1);
   }
-  if (chmod(TEST_ROOT, 0777) != 0) {    // in case of umask
-    exit(1);
-  }
-
-  if (mkdirs(TEST_ROOT "/logs/userlogs", 0755) != 0) {
+  if (chmod(TEST_ROOT, 0755) != 0) {    // in case of umask
     exit(1);
   }
 
+  // We need a valid config before the test really starts for the check_user
+  // and set_user calls
+  printf("\nCreating test.cfg\n");
   if (write_config_file(TEST_ROOT "/test.cfg", 1) != 0) {
     exit(1);
   }
-
-  printf("\nOur executable is %s\n",get_executable(argv[0]));
-
+  printf("\nLoading test.cfg\n");
   read_executor_config(TEST_ROOT "/test.cfg");
 
-  local_dirs = split(strdup(NM_LOCAL_DIRS));
-  log_dirs = split(strdup(NM_LOG_DIRS));
-
-  create_nm_roots(local_dirs);
-
   // See the description above of various ways this test
   // can be executed in order to understand the following logic
+  printf("\nDetermining user details\n");
   char* current_username = strdup(getpwuid(getuid())->pw_name);
   if (getuid() == 0 && (argc == 2 || argc == 3)) {
     username = argv[1];
@@ -1474,12 +1468,37 @@ int main(int argc, char **argv) {
     username = current_username;
     yarn_username = (argc == 2) ? argv[1] : current_username;
   }
-  set_nm_uid(geteuid(), getegid());
+  struct passwd *username_info = check_user(username);
+  printf("\nSetting NM UID\n");
+  set_nm_uid(username_info->pw_uid, username_info->pw_gid);
+
+  // Make sure that username owns all the files now
+  printf("\nEnsuring ownership of test dir\n");
+  if (chown(TEST_ROOT, username_info->pw_uid, username_info->pw_gid) != 0) {
+    exit(1);
+  }
+  if (chown(TEST_ROOT "/test.cfg",
+       username_info->pw_uid, username_info->pw_gid) != 0) {
+    exit(1);
+  }
 
+  printf("\nSetting effective user\n");
   if (set_user(username)) {
     exit(1);
   }
 
+  printf("\nCreating userlogs dir\n");
+  if (mkdirs(TEST_ROOT "/logs/userlogs", 0755) != 0) {
+    exit(1);
+  }
+
+  printf("\nOur executable is %s\n",get_executable(argv[0]));
+
+  local_dirs = split(strdup(NM_LOCAL_DIRS));
+  log_dirs = split(strdup(NM_LOG_DIRS));
+
+  create_nm_roots(local_dirs);
+
   printf("\nStarting tests\n");
 
   printf("\ntest_is_empty()\n");
@@ -1609,6 +1628,11 @@ int main(int argc, char **argv) {
   test_trim_function();
   printf("\nFinished tests\n");
 
+  printf("\nAttempting to clean up from the run\n");
+  if (system("chmod -R u=rwx " TEST_ROOT "; rm -fr " TEST_ROOT)) {
+    exit(1);
+  }
+
   free(current_username);
   free_executor_configurations();