diff options
author | 2017-05-23 23:43:00 +0200 | |
---|---|---|
committer | 2017-05-24 14:37:38 +0200 | |
commit | 0271796ab5f51e8da43ca5582c76d81843c54275 (patch) | |
tree | 01fd83313574e9b2a07463c604f15a9c692e06ba /src/test/java/com/google/devtools/build/lib | |
parent | 55d74ab5a25a242b7cdf00eab19c910a0f5acadc (diff) |
Improve error messages for malformed Android SDK/NDK.
Currently, if the user has an SDK/NDK that is missing required directories, we
print out an InconsistentFileSystemException. This CL will give a better error,
indicating which directory is missing (or is not a directory).
Implementation is roughly taken from NewLocalRepositoryFunction.
Followup to https://github.com/bazelbuild/bazel/issues/2739.
RELNOTES: None
PiperOrigin-RevId: 156913532
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
2 files changed, 68 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java index 00853edda0..f9d41460eb 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.bazel.rules.android; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.fail; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; @@ -22,6 +23,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.packages.AttributeContainer; +import com.google.devtools.build.lib.packages.BuildFileNotFoundException; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -177,4 +179,26 @@ public class AndroidNdkRepositoryTest extends BuildViewTestCase { assertThat(attributes.getAttr("hdrs").toString()) .isEqualTo("[@androidndk//:ndk/sources/android/cpufeatures/cpu-features.h]"); } + + @Test + public void testMissingPlatformsDirectory() throws Exception { + FileSystemUtils.appendIsoLatin1( + scratch.resolve("WORKSPACE"), + "android_ndk_repository(", + " name = 'androidndk',", + " path = '/ndk',", + ")"); + try { + // Invalidating configs re-runs AndroidNdkRepositoryFunction which results in a + // RuntimeException. This way we can catch a checked exception instead. + invalidatePackages(false); + getTarget("@androidndk//:files"); + fail("android_ndk_repository should have failed due to missing NDK platforms dir."); + } catch (BuildFileNotFoundException e) { + assertThat(e.getMessage()) + .contains( + "Expected directory at /ndk/platforms but it is not a directory or it does not " + + "exist."); + } + } } diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java index 7f90e4297a..1379700a6f 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java @@ -286,4 +286,48 @@ public class AndroidSdkRepositoryTest extends BuildViewTestCase { assertThat(getConfiguredTarget("@androidsdk//:sdk")).isNotNull(); } + + @Test + public void testMissingPlatformsDirectory() throws Exception { + scratchBuildToolsDirectories("25.0.0"); + FileSystemUtils.appendIsoLatin1( + scratch.resolve("WORKSPACE"), + "local_repository(name = 'bazel_tools', path = '/bazel_tools_workspace')", + "android_sdk_repository(", + " name = 'androidsdk',", + " path = '/sdk',", + ")"); + invalidatePackages(); + + try { + getTarget("@androidsdk//:files"); + fail("android_sdk_repository should have failed due to missing SDK platforms dir."); + } catch (BuildFileNotFoundException e) { + assertThat(e.getMessage()) + .contains("Expected directory at /sdk/platforms but it is not a directory or it does " + + "not exist."); + } + } + + @Test + public void testMissingBuildToolsDirectory() throws Exception { + scratchPlatformsDirectories(24); + FileSystemUtils.appendIsoLatin1( + scratch.resolve("WORKSPACE"), + "local_repository(name = 'bazel_tools', path = '/bazel_tools_workspace')", + "android_sdk_repository(", + " name = 'androidsdk',", + " path = '/sdk',", + ")"); + invalidatePackages(); + + try { + getTarget("@androidsdk//:files"); + fail("android_sdk_repository should have failed due to missing SDK build tools dir."); + } catch (BuildFileNotFoundException e) { + assertThat(e.getMessage()) + .contains("Expected directory at /sdk/build-tools but it is not a directory or it does " + + "not exist."); + } + } } |