diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-10-12 13:36:05 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2018-10-12 13:36:05 +0200 |
commit | 0dec619cd87f5baa7b462c4dcfbd45b3a3a7d0b3 (patch) | |
tree | 21cd9fb6f7768ab69efc75b3434cf26cbf2e71d5 /node-admin | |
parent | 6a0539af772ce6005741b2cb8caa9f4c7fc332a7 (diff) |
Add pathInNodeFromPathOnHost() to NodeAgentContext
Diffstat (limited to 'node-admin')
3 files changed, 59 insertions, 8 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java index 63f469635f8..f65f371ff67 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java @@ -19,24 +19,42 @@ public interface NodeAgentContext extends TaskContext { AthenzService identity(); + /** - * Translates an absolute path in container to an absolute path in host. + * This method is the inverse of {@link #pathInNodeFromPathOnHost(Path)}} * * @param pathInNode absolute path in the container * @return the absolute path on host pointing at the same inode */ Path pathOnHostFromPathInNode(Path pathInNode); + /** @see #pathOnHostFromPathInNode(Path) */ default Path pathOnHostFromPathInNode(String pathInNode) { return pathOnHostFromPathInNode(Paths.get(pathInNode)); } + + /** + * This method is the inverse of {@link #pathOnHostFromPathInNode(Path)} + * + * @param pathOnHost absolute path on host + * @return the absolute path in the container pointing at the same inode + */ + Path pathInNodeFromPathOnHost(Path pathOnHost); + + /** @see #pathOnHostFromPathInNode(Path) */ + default Path pathInNodeFromPathOnHost(String pathOnHost) { + return pathInNodeFromPathOnHost(Paths.get(pathOnHost)); + } + + /** * @param relativePath relative path under Vespa home in container * @return the absolute path under Vespa home in the container */ Path pathInNodeUnderVespaHome(Path relativePath); + /** @see #pathInNodeUnderVespaHome(Path) */ default Path pathInNodeUnderVespaHome(String relativePath) { return pathInNodeUnderVespaHome(Paths.get(relativePath)); } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java index 6d7110aeb51..d3c8b145488 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java @@ -59,15 +59,26 @@ public class NodeAgentContextImpl implements NodeAgentContext { @Override public Path pathOnHostFromPathInNode(Path pathInNode) { if (! pathInNode.isAbsolute()) - throw new IllegalArgumentException("Expected an absolute path in container, got: " + pathInNode); + throw new IllegalArgumentException("Expected an absolute path in the container, got: " + pathInNode); return pathToNodeRootOnHost.resolve(ROOT.relativize(pathInNode).toString()); } @Override + public Path pathInNodeFromPathOnHost(Path pathOnHost) { + if (! pathOnHost.isAbsolute()) + throw new IllegalArgumentException("Expected an absolute path on the host, got: " + pathOnHost); + + if (!pathOnHost.startsWith(pathToNodeRootOnHost)) + throw new IllegalArgumentException("Path " + pathOnHost + " does not exist in the container"); + + return ROOT.resolve(pathToNodeRootOnHost.relativize(pathOnHost).toString()); + } + + @Override public Path pathInNodeUnderVespaHome(Path relativePath) { if (relativePath.isAbsolute()) - throw new IllegalArgumentException("Expected a relative path to Vespa home, got: " + relativePath); + throw new IllegalArgumentException("Expected a relative path to the Vespa home, got: " + relativePath); return pathToVespaHome.resolve(relativePath); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java index 2388e1e02b1..31ac8d1c114 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java @@ -15,23 +15,45 @@ import static org.junit.Assert.assertEquals; * @author freva */ public class NodeAgentContextImplTest { - private final NodeAgentContext context = nodeAgentFromHostname("container-1.domain.tld"); - + private final FileSystem fileSystem = TestFileSystem.create(); + private final NodeAgentContext context = nodeAgentFromHostname(fileSystem, "container-1.domain.tld"); @Test public void path_on_host_from_path_in_node_test() { assertEquals( "/home/docker/container-1", - context.pathOnHostFromPathInNode(Paths.get("/")).toString()); + context.pathOnHostFromPathInNode("/").toString()); assertEquals( "/home/docker/container-1/dev/null", - context.pathOnHostFromPathInNode(Paths.get("/dev/null")).toString()); + context.pathOnHostFromPathInNode("/dev/null").toString()); } @Test(expected=IllegalArgumentException.class) public void path_in_container_must_be_absolute() { - context.pathOnHostFromPathInNode(Paths.get("some/relative/path")); + context.pathOnHostFromPathInNode("some/relative/path"); + } + + @Test + public void path_in_node_from_path_on_host_test() { + assertEquals( + "/dev/null", + context.pathInNodeFromPathOnHost(fileSystem.getPath("/home/docker/container-1/dev/null")).toString()); + } + + @Test(expected=IllegalArgumentException.class) + public void path_on_host_must_be_absolute() { + context.pathInNodeFromPathOnHost("some/relative/path"); + } + + @Test(expected=IllegalArgumentException.class) + public void path_on_host_must_be_inside_container_storage_of_context() { + context.pathInNodeFromPathOnHost(fileSystem.getPath("/home/docker/container-2/dev/null")); + } + + @Test(expected=IllegalArgumentException.class) + public void path_on_host_must_be_inside_container_storage() { + context.pathInNodeFromPathOnHost(fileSystem.getPath("/home")); } @Test |