summaryrefslogtreecommitdiffstats
path: root/testutil
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2021-10-13 15:08:52 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2021-10-13 15:10:29 +0200
commit505d979eca083b5b937bea246e23cf749f463a68 (patch)
treedf9ff931ca6f6e3f7d37c85e4a48dbdcb2b3f2d0 /testutil
parent5b6cd84f0a8d7645ef0e83cabf2cd8e15ea5d61d (diff)
Allow setting unix:uid/gid attributes in JimFS
Diffstat (limited to 'testutil')
-rw-r--r--testutil/src/main/java/com/yahoo/vespa/test/file/UnixUidGidAttributeProvider.java23
1 files changed, 22 insertions, 1 deletions
diff --git a/testutil/src/main/java/com/yahoo/vespa/test/file/UnixUidGidAttributeProvider.java b/testutil/src/main/java/com/yahoo/vespa/test/file/UnixUidGidAttributeProvider.java
index 2b1b0231b4f..13c51851540 100644
--- a/testutil/src/main/java/com/yahoo/vespa/test/file/UnixUidGidAttributeProvider.java
+++ b/testutil/src/main/java/com/yahoo/vespa/test/file/UnixUidGidAttributeProvider.java
@@ -72,7 +72,8 @@ public class UnixUidGidAttributeProvider extends AttributeProvider {
}
private int getUniqueId(UserPrincipal user) {
- return idCache.computeIfAbsent(user, id -> maybeNumber(id.getName()).orElseGet(uidGenerator::incrementAndGet));
+ return maybeNumber(user.getName())
+ .orElseGet(() -> idCache.computeIfAbsent(user, id -> uidGenerator.incrementAndGet()));
}
@SuppressWarnings("unchecked")
@@ -106,6 +107,14 @@ public class UnixUidGidAttributeProvider extends AttributeProvider {
@Override
public void set(File file, String view, String attribute, Object value, boolean create) {
+ switch (attribute) {
+ case "uid":
+ file.setAttribute("owner", "owner", new BasicUserPrincipal(String.valueOf(value)));
+ return;
+ case "gid":
+ file.setAttribute("posix", "group", new BasicGroupPrincipal(String.valueOf(value)));
+ return;
+ }
throw unsettable(view, attribute);
}
@@ -158,4 +167,16 @@ public class UnixUidGidAttributeProvider extends AttributeProvider {
return Optional.empty();
}
}
+
+ private static class BasicUserPrincipal implements UserPrincipal {
+ private final String name;
+ private BasicUserPrincipal(String name) { this.name = name; }
+
+ @Override public String getName() { return name; }
+ @Override public String toString() { return name; }
+ }
+
+ private static class BasicGroupPrincipal extends BasicUserPrincipal implements GroupPrincipal {
+ private BasicGroupPrincipal(String name) { super(name); }
+ }
}