aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2015-02-25 14:18:14 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-02-25 14:18:14 +0000
commitd5baac0122a72209553a338ea28648d9184ca37e (patch)
tree8d73a4dbac72f1e2f99ec0910e6ba3c848b81fcb /src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
parent7d6a4f618488a778f4e5780a1ad6f8a3e27a6ec9 (diff)
Open-source BuildViewTestCase and the infrastructure required by it, as well as
the tests under analysis/actions. They don't run yet, because the mock client setup is still missing. -- MOS_MIGRATED_REVID=87149625
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
new file mode 100644
index 0000000000..4ab2c12fae
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
@@ -0,0 +1,92 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.analysis.actions;
+
+import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.NULL_ACTION_OWNER;
+
+import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.ActionExecutionException;
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.Executor;
+import com.google.devtools.build.lib.analysis.BuildViewTestCase;
+import com.google.devtools.build.lib.exec.util.TestExecutorBuilder;
+import com.google.devtools.build.lib.testutil.MoreAsserts;
+import com.google.devtools.build.lib.vfs.FileSystemUtils;
+import com.google.devtools.build.lib.vfs.Path;
+
+/**
+ * Tests {@link SymlinkAction}.
+ */
+public class SymlinkActionTest extends BuildViewTestCase {
+
+ private Path input;
+ private Artifact inputArtifact;
+ private Path output;
+ private Artifact outputArtifact;
+ private SymlinkAction action;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ input = scratchFile("/workspace/input.txt", "Hello, world.");
+ inputArtifact = getSourceArtifact("input.txt");
+ Path linkedInput = directories.getExecRoot().getRelative("input.txt");
+ FileSystemUtils.createDirectoryAndParents(linkedInput.getParentDirectory());
+ linkedInput.createSymbolicLink(input);
+ outputArtifact = getBinArtifactWithNoOwner("destination.txt");
+ output = outputArtifact.getPath();
+ FileSystemUtils.createDirectoryAndParents(output.getParentDirectory());
+ action = new SymlinkAction(NULL_ACTION_OWNER,
+ inputArtifact, outputArtifact, "Symlinking test");
+ }
+
+ public void testInputArtifactIsInput() {
+ Iterable<Artifact> inputs = action.getInputs();
+ assertEquals(asSet(inputArtifact), asSet(inputs));
+ }
+
+ public void testDestinationArtifactIsOutput() {
+ Iterable<Artifact> outputs = action.getOutputs();
+ assertEquals(asSet(outputArtifact), asSet(outputs));
+ }
+
+ public void testSymlink() throws Exception {
+ Executor executor = new TestExecutorBuilder(directories, null).build();
+ action.execute(new ActionExecutionContext(executor, null, null, null, null));
+ assertTrue(output.isSymbolicLink());
+ assertEquals(input, output.resolveSymbolicLinks());
+ assertEquals(inputArtifact, action.getPrimaryInput());
+ assertEquals(outputArtifact, action.getPrimaryOutput());
+ }
+
+ public void testExecutableSymlink() throws Exception {
+ Executor executor = new TestExecutorBuilder(directories, null).build();
+ outputArtifact = getBinArtifactWithNoOwner("destination2.txt");
+ output = outputArtifact.getPath();
+ action = new ExecutableSymlinkAction(NULL_ACTION_OWNER, inputArtifact, outputArtifact);
+ assertFalse(input.isExecutable());
+ ActionExecutionContext actionExecutionContext =
+ new ActionExecutionContext(executor, null, null, null, null);
+ try {
+ action.execute(actionExecutionContext);
+ fail("Expected ActionExecutionException");
+ } catch (ActionExecutionException e) {
+ MoreAsserts.assertContainsRegex("'input.txt' is not executable", e.getMessage());
+ }
+ input.setExecutable(true);
+ action.execute(actionExecutionContext);
+ assertTrue(output.isSymbolicLink());
+ assertEquals(input, output.resolveSymbolicLinks());
+ }
+}