From 4c785fe118548bcca484c2132587162cb42b5e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thi=C3=A9baud=20Weksteen?= Date: Fri, 29 Sep 2023 10:09:44 +1000 Subject: [PATCH] Add integration test for EnforcePermissionHelperDetector This test ensures that the linter is correctly executed and reports an error. It uses the `lint.suppress_exit_code` to silence the error when building the test library (otherwise, this module would fail to build on a checkbuild). Bug: 302400088 Test: atest --host AndroidGlobalLintCheckerIntegrationTest Change-Id: Ib9e9deec16f6b703139fb85337f4a826a99ec033 --- .../lint/global/integration_tests/Android.bp | 40 +++++++++++++++++++ .../TestNoAidl/TestNoAidl.java | 30 ++++++++++++++ tools/lint/global/integration_tests/tests.py | 34 ++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 tools/lint/global/integration_tests/Android.bp create mode 100644 tools/lint/global/integration_tests/TestNoAidl/TestNoAidl.java create mode 100644 tools/lint/global/integration_tests/tests.py diff --git a/tools/lint/global/integration_tests/Android.bp b/tools/lint/global/integration_tests/Android.bp new file mode 100644 index 0000000000000..ca96559ac016e --- /dev/null +++ b/tools/lint/global/integration_tests/Android.bp @@ -0,0 +1,40 @@ +// Copyright (C) 2023 The Android Open Source Project +// +// 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. + +java_library { + name: "AndroidGlobalLintTestNoAidl", + srcs: ["TestNoAidl/**/*.java"], + libs: [ + "framework-annotations-lib", + ], + lint: { + // It is expected that lint returns an error when processing this + // library. Silence it here, the lint output is verified in tests.py. + suppress_exit_code: true, + }, +} + +python_test_host { + name: "AndroidGlobalLintCheckerIntegrationTest", + srcs: ["tests.py"], + main: "tests.py", + data: [ + ":AndroidGlobalLintTestNoAidl{.lint}", + ], + version: { + py3: { + embedded_launcher: true, + }, + }, +} diff --git a/tools/lint/global/integration_tests/TestNoAidl/TestNoAidl.java b/tools/lint/global/integration_tests/TestNoAidl/TestNoAidl.java new file mode 100644 index 0000000000000..0015f958a78e5 --- /dev/null +++ b/tools/lint/global/integration_tests/TestNoAidl/TestNoAidl.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * 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.android.lint.integration_tests; + +import android.annotation.EnforcePermission; + +/** + * A class that use the annotation but does not rely on AIDL. + */ +class TestNoAidl { + + @EnforcePermission("INTERNET") + void myMethod() { + } + +} diff --git a/tools/lint/global/integration_tests/tests.py b/tools/lint/global/integration_tests/tests.py new file mode 100644 index 0000000000000..fc3eeb4f8ed92 --- /dev/null +++ b/tools/lint/global/integration_tests/tests.py @@ -0,0 +1,34 @@ +# Copyright 2023 The Android Open Source Project +# +# 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. + +import pkgutil +import unittest +import xml.etree.ElementTree + +class TestLinterReports(unittest.TestCase): + """Integration tests for the linters used by @EnforcePermission.""" + + def test_no_aidl(self): + report = pkgutil.get_data("lint", "lint-report.xml").decode() + issues = xml.etree.ElementTree.fromstring(report) + self.assertEqual(issues.tag, "issues") + self.assertEqual(len(issues), 1) + + issue = issues[0] + self.assertEqual(issue.attrib["id"], "MisusingEnforcePermissionAnnotation") + self.assertEqual(issue.attrib["severity"], "Error") + + +if __name__ == '__main__': + unittest.main(verbosity=2)