aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skyframe
diff options
context:
space:
mode:
authorGravatar nharmata <nharmata@google.com>2017-05-17 20:29:19 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-05-19 15:07:46 +0200
commitd922e651f75ede33a47a4b5da3be0188a94aa897 (patch)
treef3e74027bb04d2805340371e2cd6143c0222fecc /src/test/java/com/google/devtools/build/lib/skyframe
parentba23f313daf8d0afd8c35ccc72c5661fd897bd5e (diff)
PiperOrigin-RevId: 156331430
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skyframe')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java118
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/packages/BUILD25
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoaderTest.java32
10 files changed, 193 insertions, 12 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
index 491ecc14d1..c01285e969 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
@@ -108,7 +108,7 @@ abstract class ArtifactFunctionTestCase {
SkyFunctions.WORKSPACE_FILE,
new WorkspaceFileFunction(
TestRuleClassProvider.getRuleClassProvider(),
- TestConstants.PACKAGE_FACTORY_FACTORY_FOR_TESTING.create(
+ TestConstants.PACKAGE_FACTORY_BUILDER_FACTORY_FOR_TESTING.builder().build(
TestRuleClassProvider.getRuleClassProvider(), root.getFileSystem()),
directories))
.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
index 8e1ff34c53..8be17f2064 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
@@ -157,7 +157,7 @@ public class FileFunctionTest {
SkyFunctions.WORKSPACE_FILE,
new WorkspaceFileFunction(
TestRuleClassProvider.getRuleClassProvider(),
- TestConstants.PACKAGE_FACTORY_FACTORY_FOR_TESTING.create(
+ TestConstants.PACKAGE_FACTORY_BUILDER_FACTORY_FOR_TESTING.builder().build(
TestRuleClassProvider.getRuleClassProvider(), fs),
directories))
.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index 2c92706a7a..74e7c776e5 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -128,7 +128,7 @@ public class FilesystemValueCheckerTest {
new WorkspaceASTFunction(TestRuleClassProvider.getRuleClassProvider()));
skyFunctions.put(SkyFunctions.WORKSPACE_FILE,
new WorkspaceFileFunction(TestRuleClassProvider.getRuleClassProvider(),
- TestConstants.PACKAGE_FACTORY_FACTORY_FOR_TESTING.create(
+ TestConstants.PACKAGE_FACTORY_BUILDER_FACTORY_FOR_TESTING.builder().build(
TestRuleClassProvider.getRuleClassProvider(), fs),
directories));
skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
index a2d51781c3..c8c5bae031 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
@@ -24,6 +24,7 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.packages.PackageFactory;
+import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction;
@@ -94,10 +95,12 @@ public class LocalRepositoryLookupFunctionTest extends FoundationTestCase {
new WorkspaceFileFunction(
ruleClassProvider,
analysisMock
- .getPackageFactoryForTesting()
- .create(
+ .getPackageFactoryBuilderForTesting()
+ .setEnvironmentExtensions(
+ ImmutableList.<EnvironmentExtension>of(
+ new PackageFactory.EmptyEnvironmentExtension()))
+ .build(
ruleClassProvider,
- new PackageFactory.EmptyEnvironmentExtension(),
scratch.getFileSystem()),
directories));
skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
index 9fe08801d5..ff5b2bdeee 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.packages.BuildFileNotFoundException;
import com.google.devtools.build.lib.packages.PackageFactory;
+import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.rules.repository.LocalRepositoryFunction;
@@ -117,10 +118,12 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase {
new WorkspaceFileFunction(
ruleClassProvider,
analysisMock
- .getPackageFactoryForTesting()
- .create(
+ .getPackageFactoryBuilderForTesting()
+ .setEnvironmentExtensions(
+ ImmutableList.<EnvironmentExtension>of(
+ new PackageFactory.EmptyEnvironmentExtension()))
+ .build(
ruleClassProvider,
- new PackageFactory.EmptyEnvironmentExtension(),
scratch.getFileSystem()),
directories));
skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
index d2ddae08a4..2aa91f699d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
@@ -120,8 +120,8 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
new WorkspaceFileFunction(
ruleClassProvider,
analysisMock
- .getPackageFactoryForTesting()
- .create(ruleClassProvider, scratch.getFileSystem()),
+ .getPackageFactoryBuilderForTesting()
+ .build(ruleClassProvider, scratch.getFileSystem()),
directories));
skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index 901fa9ffe9..2104ec53dd 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -205,7 +205,7 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase {
SkyFunctions.WORKSPACE_FILE,
new WorkspaceFileFunction(
TestRuleClassProvider.getRuleClassProvider(),
- TestConstants.PACKAGE_FACTORY_FACTORY_FOR_TESTING.create(
+ TestConstants.PACKAGE_FACTORY_BUILDER_FACTORY_FOR_TESTING.builder().build(
TestRuleClassProvider.getRuleClassProvider(), scratch.getFileSystem()),
directories))
.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java
new file mode 100644
index 0000000000..40deb5089d
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java
@@ -0,0 +1,118 @@
+// Copyright 2017 The Bazel Authors. 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.skyframe.packages;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.testutil.MoreAsserts.assertContainsEvent;
+import static com.google.devtools.build.lib.testutil.MoreAsserts.assertNoEvents;
+import static org.junit.Assert.fail;
+
+import com.google.common.base.Joiner;
+import com.google.common.eventbus.EventBus;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.events.Reporter;
+import com.google.devtools.build.lib.events.StoredEventHandler;
+import com.google.devtools.build.lib.packages.NoSuchPackageException;
+import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.vfs.FileSystem;
+import com.google.devtools.build.lib.vfs.FileSystemUtils;
+import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
+import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
+import org.junit.Before;
+import org.junit.Test;
+
+/** Abstract base class of a unit test for a {@link AbstractPackageLoader} implementation. */
+public abstract class AbstractPackageLoaderTest {
+ private Path pkgRoot;
+ protected StoredEventHandler handler;
+ protected PackageLoader pkgLoader;
+
+ @Before
+ public final void init() throws Exception {
+ FileSystem fs = new InMemoryFileSystem();
+ pkgRoot = fs.getRootDirectory().getChild("pkgRoot");
+ FileSystemUtils.createDirectoryAndParents(pkgRoot);
+ Reporter reporter = new Reporter(new EventBus());
+ handler = new StoredEventHandler();
+ reporter.addHandler(handler);
+ pkgLoader = makeFreshBuilder(pkgRoot).setReporter(reporter).build();
+ }
+
+ protected abstract AbstractPackageLoader.Builder makeFreshBuilder(Path pkgRoot);
+
+ @Test
+ public void simpleNoPackage() throws Exception {
+ PackageIdentifier pkgId = PackageIdentifier.createInMainRepo(PathFragment.create("nope"));
+ try {
+ pkgLoader.loadPackage(pkgId);
+ fail();
+ } catch (NoSuchPackageException expected) {
+ assertThat(expected)
+ .hasMessageThat()
+ .isEqualTo("no such package 'nope': BUILD file not found on package path");
+ }
+ assertNoEvents(handler.getEvents());
+ }
+
+ @Test
+ public void simpleBadPackage() throws Exception {
+ file("bad/BUILD", "invalidBUILDsyntax");
+ PackageIdentifier pkgId = PackageIdentifier.createInMainRepo(PathFragment.create("bad"));
+ Package badPkg = pkgLoader.loadPackage(pkgId);
+ assertThat(badPkg.containsErrors()).isTrue();
+ assertContainsEvent(badPkg.getEvents(), "invalidBUILDsyntax");
+ assertContainsEvent(handler.getEvents(), "invalidBUILDsyntax");
+ }
+
+ @Test
+ public void simpleGoodPackage() throws Exception {
+ file("good/BUILD", "sh_library(name = 'good')");
+ PackageIdentifier pkgId = PackageIdentifier.createInMainRepo(PathFragment.create("good"));
+ Package goodPkg = pkgLoader.loadPackage(pkgId);
+ assertThat(goodPkg.containsErrors()).isFalse();
+ assertThat(
+ goodPkg.getTarget("good").getAssociatedRule().getRuleClass()).isEqualTo("sh_library");
+ assertNoEvents(goodPkg.getEvents());
+ assertNoEvents(handler.getEvents());
+ }
+
+ @Test
+ public void simpleGoodPackage_Skylark() throws Exception {
+ file("good/good.bzl",
+ "def f(x):",
+ " native.sh_library(name = x)");
+ file("good/BUILD",
+ "load('//good:good.bzl', 'f')",
+ "f('good')");
+ PackageIdentifier pkgId = PackageIdentifier.createInMainRepo(PathFragment.create("good"));
+ Package goodPkg = pkgLoader.loadPackage(pkgId);
+ assertThat(goodPkg.containsErrors()).isFalse();
+ assertThat(
+ goodPkg.getTarget("good").getAssociatedRule().getRuleClass()).isEqualTo("sh_library");
+ assertNoEvents(goodPkg.getEvents());
+ assertNoEvents(handler.getEvents());
+ }
+
+ protected Path path(String rootRelativePath) {
+ return pkgRoot.getRelative(PathFragment.create(rootRelativePath));
+ }
+
+ protected Path file(String fileName, String... contents) throws Exception {
+ Path path = path(fileName);
+ FileSystemUtils.createDirectoryAndParents(path.getParentDirectory());
+ FileSystemUtils.writeContentAsLatin1(path, Joiner.on("\n").join(contents));
+ return path;
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/packages/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/packages/BUILD
new file mode 100644
index 0000000000..89f75b39c4
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/packages/BUILD
@@ -0,0 +1,25 @@
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+ visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+)
+
+java_test(
+ name = "BazelPackageLoaderTest",
+ srcs = [
+ "AbstractPackageLoaderTest.java",
+ "BazelPackageLoaderTest.java",
+ ],
+ deps = [
+ "//src/main/java/com/google/devtools/build/lib:BazelPackageLoader",
+ "//src/main/java/com/google/devtools/build/lib:events",
+ "//src/main/java/com/google/devtools/build/lib:inmemoryfs",
+ "//src/main/java/com/google/devtools/build/lib:packages",
+ "//src/main/java/com/google/devtools/build/lib:vfs",
+ "//src/test/java/com/google/devtools/build/lib:testutil",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoaderTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoaderTest.java
new file mode 100644
index 0000000000..e6f6e4df2c
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoaderTest.java
@@ -0,0 +1,32 @@
+// Copyright 2017 The Bazel Authors. 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.skyframe.packages;
+
+import com.google.devtools.build.lib.vfs.Path;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Simple tests for {@link BazelPackageLoader}.
+ *
+ * <p>Bazel's unit and integration tests do sanity checks with {@link BazelPackageLoader} under the
+ * covers, so we get pretty exhaustive correctness tests for free.
+ */
+@RunWith(JUnit4.class)
+public final class BazelPackageLoaderTest extends AbstractPackageLoaderTest {
+ @Override
+ protected BazelPackageLoader.Builder makeFreshBuilder(Path pkgRoot) {
+ return BazelPackageLoader.builder(pkgRoot);
+ }
+}