Browse Source

HADOOP-13178. TestShellBasedIdMapping.testStaticMapUpdate doesn't work on OS X (Kai Sasaki via aw)

(cherry picked from commit d8c1fd1944160ad5b5d093731ae987d701802321)
(cherry picked from commit daa768534409f08a83759634b5c3966e32e6f170)
Allen Wittenauer 9 years ago
parent
commit
02ef086824

+ 1 - 1
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/ShellBasedIdMapping.java

@@ -85,7 +85,7 @@ public class ShellBasedIdMapping implements IdMappingServiceProvider {
   private static final Pattern EMPTY_LINE = Pattern.compile("^\\s*$");
   private static final Pattern COMMENT_LINE = Pattern.compile("^\\s*#.*$");
   private static final Pattern MAPPING_LINE =
-      Pattern.compile("^(uid|gid)\\s+(\\d+)\\s+(\\d+)\\s*(#.*)?$");
+      Pattern.compile("^(uid|gid)\\s+(\\d+)\\s+(0|-?[1-9]\\d*)\\s*(#.*)?$");
 
   final private long timeout;
   

+ 11 - 5
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestShellBasedIdMapping.java

@@ -148,8 +148,9 @@ public class TestShellBasedIdMapping {
     // getUid()
     incrIdMapping.clearNameMaps();
     uidNameMap = refIdMapping.getUidNameMap();
-    {
-      BiMap.Entry<Integer, String> me = uidNameMap.entrySet().iterator().next();
+    for (BiMap.Entry<Integer, String> me : uidNameMap.entrySet()) {
+      tempStaticMapFile.delete();
+      incrIdMapping.clearNameMaps();
       Integer id = me.getKey();
       String name = me.getValue();
 
@@ -174,8 +175,9 @@ public class TestShellBasedIdMapping {
     // getGid()
     incrIdMapping.clearNameMaps();
     gidNameMap = refIdMapping.getGidNameMap();
-    {
-      BiMap.Entry<Integer, String> me = gidNameMap.entrySet().iterator().next();
+    for (BiMap.Entry<Integer, String> me : gidNameMap.entrySet()) {
+      tempStaticMapFile.delete();
+      incrIdMapping.clearNameMaps();
       Integer id = me.getKey();
       String name = me.getValue();
 
@@ -189,7 +191,11 @@ public class TestShellBasedIdMapping {
       Integer rid = id + 10000;
       String smapStr = "gid " + rid + " " + id;
       // Sleep a bit to avoid that two changes have the same modification time
-      try {Thread.sleep(1000);} catch (InterruptedException e) {}
+      try {
+        Thread.sleep(100);
+      } catch (InterruptedException e) {
+        // Do nothing
+      }
       createStaticMapFile(tempStaticMapFile, smapStr);
 
       // Now the id found for "name" should be the id specified by