#!/usr/bin/python
|
# -*- coding:utf-8 -*-
|
# Copyright 2018 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 os
|
import shutil
|
import tempfile
|
import unittest
|
|
import android_test_mapping_format
|
|
|
VALID_TEST_MAPPING = r"""
|
{
|
"presubmit": [
|
{
|
"name": "CtsWindowManagerDeviceTestCases",
|
"options": [
|
{
|
"include-annotation": "android.platform.test.annotations.Presubmit"
|
}
|
]
|
}
|
],
|
"postsubmit": [
|
{
|
"name": "CtsWindowManagerDeviceTestCases",
|
"host": true,
|
"preferred_targets": ["a", "b"],
|
"file_patterns": [".*\\.java"]
|
}
|
],
|
"imports": [
|
{
|
"path": "frameworks/base/services/core/java/com/android/server/am"
|
},
|
{
|
"path": "frameworks/base/services/core/java/com/android/server/wm"
|
}
|
]
|
}
|
"""
|
|
BAD_JSON = """
|
{wrong format}
|
"""
|
|
BAD_TEST_WRONG_KEY = """
|
{
|
"presubmit": [
|
{
|
"bad_name": "CtsWindowManagerDeviceTestCases"
|
}
|
]
|
}
|
"""
|
|
BAD_TEST_WRONG_HOST_VALUE = """
|
{
|
"presubmit": [
|
{
|
"name": "CtsWindowManagerDeviceTestCases",
|
"host": "bad_value"
|
}
|
]
|
}
|
"""
|
|
|
BAD_TEST_WRONG_PREFERRED_TARGETS_VALUE_NONE_LIST = """
|
{
|
"presubmit": [
|
{
|
"name": "CtsWindowManagerDeviceTestCases",
|
"preferred_targets": "bad_value"
|
}
|
]
|
}
|
"""
|
|
BAD_TEST_WRONG_PREFERRED_TARGETS_VALUE_WRONG_TYPE = """
|
{
|
"presubmit": [
|
{
|
"name": "CtsWindowManagerDeviceTestCases",
|
"preferred_targets": ["bad_value", 123]
|
}
|
]
|
}
|
"""
|
|
BAD_TEST_WRONG_OPTION = """
|
{
|
"presubmit": [
|
{
|
"name": "CtsWindowManagerDeviceTestCases",
|
"options": [
|
{
|
"include-annotation": "android.platform.test.annotations.Presubmit",
|
"bad_option": "some_name"
|
}
|
]
|
}
|
]
|
}
|
"""
|
|
BAD_IMPORT_WRONG_KEY = """
|
{
|
"imports": [
|
{
|
"name": "frameworks/base/services/core/java/com/android/server/am"
|
}
|
]
|
}
|
"""
|
|
BAD_IMPORT_WRONG_IMPORT_VALUE = """
|
{
|
"imports": [
|
{
|
"path": "frameworks/base/services/core/java/com/android/server/am",
|
"option": "something"
|
}
|
]
|
}
|
"""
|
|
BAD_FILE_PATTERNS = """
|
{
|
"presubmit": [
|
{
|
"name": "CtsWindowManagerDeviceTestCases",
|
"file_patterns": ["pattern", 123]
|
}
|
]
|
}
|
"""
|
|
|
class AndroidTestMappingFormatTests(unittest.TestCase):
|
"""Unittest for android_test_mapping_format module."""
|
|
def setUp(self):
|
self.tempdir = tempfile.mkdtemp()
|
self.test_mapping_file = os.path.join(self.tempdir, 'TEST_MAPPING')
|
|
def tearDown(self):
|
shutil.rmtree(self.tempdir)
|
|
def test_valid_test_mapping(self):
|
"""Verify that the check doesn't raise any error for valid test mapping.
|
"""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(VALID_TEST_MAPPING)
|
android_test_mapping_format.process_file(self.test_mapping_file)
|
|
def test_invalid_test_mapping_bad_json(self):
|
"""Verify that TEST_MAPPING file with bad json can be detected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_JSON)
|
self.assertRaises(
|
ValueError, android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
def test_invalid_test_mapping_wrong_test_key(self):
|
"""Verify that test config using wrong key can be detected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_TEST_WRONG_KEY)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
def test_invalid_test_mapping_wrong_test_value(self):
|
"""Verify that test config using wrong host value can be detected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_TEST_WRONG_HOST_VALUE)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
def test_invalid_test_mapping_wrong_preferred_targets_value(self):
|
"""Verify invalid preferred_targets are rejected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_TEST_WRONG_PREFERRED_TARGETS_VALUE_NONE_LIST)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_TEST_WRONG_PREFERRED_TARGETS_VALUE_WRONG_TYPE)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
def test_invalid_test_mapping_wrong_test_option(self):
|
"""Verify that test config using wrong option can be detected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_TEST_WRONG_OPTION)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
def test_invalid_test_mapping_wrong_import_key(self):
|
"""Verify that import setting using wrong key can be detected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_IMPORT_WRONG_KEY)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
def test_invalid_test_mapping_wrong_import_value(self):
|
"""Verify that import setting using wrong value can be detected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_IMPORT_WRONG_IMPORT_VALUE)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
def test_invalid_test_mapping_file_patterns_value(self):
|
"""Verify that file_patterns using wrong value can be detected."""
|
with open(self.test_mapping_file, 'w') as f:
|
f.write(BAD_FILE_PATTERNS)
|
self.assertRaises(
|
android_test_mapping_format.InvalidTestMappingError,
|
android_test_mapping_format.process_file,
|
self.test_mapping_file)
|
|
|
if __name__ == '__main__':
|
unittest.main()
|