blob: 11a3463126c1540d9a577cbb357bf66924e403e5 [file] [log] [blame]
#!/usr/bin/env python3.8
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from tempfile import TemporaryDirectory
import json
import os
import unittest
from verify_cts_deps import VerifyCtsDeps
class CtsVerifyDepsTests(unittest.TestCase):
def create_empty_sdk_manifest(self, root_build_dir, manifest_name):
manifest_path = root_build_dir + '/sdk/manifest/'
if not os.path.exists(manifest_path):
os.makedirs(manifest_path)
sdk_manifest = manifest_path + manifest_name
if not os.path.isfile(sdk_manifest):
with open(sdk_manifest, 'w') as f:
f.write("")
return sdk_manifest
def test_init(self):
cts_file = 'test.this_is_cts'
invoker_label = "//sdk/cts/build:verify_cts_deps_test"
deps = ['//zircon/public/lib/zxtest:zxtest']
allowed_cts_dirs = ['//sdk/*']
with TemporaryDirectory() as root_build_dir:
sdk_manifests = [
self.create_empty_sdk_manifest(root_build_dir, "core")
]
try:
VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, deps,
allowed_cts_dirs, sdk_manifests)
except Exception as e:
self.assertTrue(False, e)
with self.assertRaises(ValueError):
VerifyCtsDeps(
'', cts_file, invoker_label, deps, deps, allowed_cts_dirs,
sdk_manifests)
with self.assertRaises(ValueError):
VerifyCtsDeps(
'/this/path/doesnt/exist', cts_file, invoker_label, deps,
deps, allowed_cts_dirs, sdk_manifests)
with self.assertRaises(ValueError):
VerifyCtsDeps(
root_build_dir, '', invoker_label, deps, deps,
allowed_cts_dirs, sdk_manifests)
with self.assertRaises(ValueError):
VerifyCtsDeps(
root_build_dir, cts_file, '', deps, deps, allowed_cts_dirs,
sdk_manifests)
with self.assertRaises(ValueError):
VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, [], deps,
allowed_cts_dirs, sdk_manifests)
with self.assertRaises(ValueError):
VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, [],
allowed_cts_dirs, sdk_manifests)
with self.assertRaises(ValueError):
VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, deps, [],
sdk_manifests)
with self.assertRaises(ValueError):
VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, deps,
allowed_cts_dirs, ['/this/path/doesnt/exist'])
def test_get_file_path(self):
cts_file = 'test.this_is_cts'
invoker_label = "//sdk/cts/build:verify_cts_deps_test"
deps = ['//zircon/public/lib/zxtest:zxtest']
allowed_cts_dirs = ['//sdk/*']
with TemporaryDirectory() as root_build_dir:
sdk_manifests = [
self.create_empty_sdk_manifest(root_build_dir, "core")
]
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, deps,
allowed_cts_dirs, sdk_manifests)
dep = '//zircon/public/lib/zxtest:zxtest'
self.assertEqual(
root_build_dir +
'/cts/zircon/public/lib/zxtest/zxtest.this_is_cts',
cts_element.get_file_path(dep))
dep = '//zircon/public/lib/zxtest'
self.assertEqual(
root_build_dir +
'/cts/zircon/public/lib/zxtest/zxtest.this_is_cts',
cts_element.get_file_path(dep))
dep = '//sdk'
self.assertEqual(
root_build_dir + '/cts/sdk/sdk.this_is_cts',
cts_element.get_file_path(dep))
def test_verify_dep_in_sdk(self):
cts_file = 'test.this_is_cts'
invoker_label = "//sdk/cts/build:verify_cts_deps_test"
allowed_cts_deps = ['//zircon/public/lib/zxtest:zxtest']
allowed_cts_dirs = ['//third_party/dart-pkg/pub/*']
deps = [
'//sdk/fidl/fuchsia.io',
'//sdk/lib/fdio:fdio',
'//sdk/lib/private_atom:private_atom'
]
fdio_atom = {
"category": "partner",
"deps": [],
"files": [],
"gn-label": "//sdk/lib/fdio:fdio_sdk_manifest(//build/toolchain/fuchsia:x64)",
"id": "sdk://pkg/fdio",
"meta": "pkg/fdio/meta.json",
"type": "cc_prebuilt_library"
}
fuchsia_io_atom = {
"category": "partner",
"deps": [],
"files": [],
"gn-label": "//sdk/fidl/fuchsia.io:fuchsia.io_sdk(//build/fidl:fidling)",
"id": "sdk://fidl/fuchsia.io",
"meta": "fidl/fuchsia.io/meta.json",
"type": "fidl_library"
}
fuchsia_git_atom = {
"category": "internal",
"deps": [],
"files": [],
"gn-label": "//sdk/lib/private_atom:private_atom(//build/toolchain:fuchsia:x64)",
"id": "sdk://fidl/fuchsia.io",
"meta": "fidl/fuchsia.io/meta.json",
"type": "fidl_library"
}
manifest = {
"atoms": [],
"ids": []
}
with TemporaryDirectory() as root_build_dir:
sdk_manifest = self.create_empty_sdk_manifest(
root_build_dir, "core")
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, [sdk_manifest])
self.assertFalse(
cts_element.verify_dep_in_sdk('//sdk/lib/fdio:fdio'))
with TemporaryDirectory() as root_build_dir:
sdk_manifest = self.create_empty_sdk_manifest(
root_build_dir, "core")
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, [sdk_manifest])
manifest['atoms'].append(fdio_atom)
with open(sdk_manifest, 'w') as f:
json.dump(manifest, f)
self.assertTrue(
cts_element.verify_dep_in_sdk('//sdk/lib/fdio:fdio'))
self.assertFalse(
cts_element.verify_dep_in_sdk('//sdk/fidl/fuchsia.io'))
self.assertFalse(
cts_element.verify_dep_in_sdk('//sdk/lib/private_atom'))
manifest['atoms'].append(fuchsia_io_atom)
with open(sdk_manifest, 'w') as f:
json.dump(manifest, f)
self.assertTrue(
cts_element.verify_dep_in_sdk('//sdk/lib/fdio:fdio'))
self.assertTrue(
cts_element.verify_dep_in_sdk(
'//sdk/fidl/fuchsia.io:fuchsia.io'))
self.assertFalse(
cts_element.verify_dep_in_sdk('//sdk/lib/private_atom'))
manifest['atoms'].append(fuchsia_git_atom)
with open(sdk_manifest, 'w') as f:
json.dump(manifest, f)
self.assertTrue(
cts_element.verify_dep_in_sdk('//sdk/lib/fdio:fdio'))
self.assertTrue(
cts_element.verify_dep_in_sdk(
'//sdk/fidl/fuchsia.io:fuchsia.io'))
self.assertFalse(
cts_element.verify_dep_in_sdk('//sdk/lib/private_atom'))
manifest['atoms'] = []
with TemporaryDirectory() as root_build_dir:
manifest1 = self.create_empty_sdk_manifest(root_build_dir, "core")
manifest['atoms'].append(fdio_atom)
with open(manifest1, 'w') as f:
json.dump(manifest, f)
manifest['atoms'] = []
manifest2 = self.create_empty_sdk_manifest(root_build_dir, "core2")
manifest['atoms'].append(fuchsia_io_atom)
with open(manifest2, 'w') as f:
json.dump(manifest, f)
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, [manifest1, manifest2])
self.assertTrue(
cts_element.verify_dep_in_sdk('//sdk/lib/fdio:fdio'))
self.assertTrue(
cts_element.verify_dep_in_sdk(
'//sdk/fidl/fuchsia.io:fuchsia.io'))
self.assertFalse(
cts_element.verify_dep_in_sdk('//sdk/lib/private_atom'))
def test_verify_deps(self):
cts_file = 'test.this_is_cts'
invoker_label = "//sdk/cts/build:verify_cts_deps_test"
allowed_cts_deps = ['//zircon/public/lib/zxtest:zxtest']
allowed_cts_dirs = ['//sdk/*']
with TemporaryDirectory() as root_build_dir:
sdk_manifests = [
self.create_empty_sdk_manifest(root_build_dir, "core")
]
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, allowed_cts_deps,
allowed_cts_deps, allowed_cts_dirs, sdk_manifests)
self.assertListEqual(cts_element.verify_deps(), [])
deps = ['//this/dep/isnt/allowed/in:cts']
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, sdk_manifests)
self.assertListEqual(cts_element.verify_deps(), deps)
deps = [
'//this/dep/isnt/allowed/in:cts',
'//this/dep/isnt/allowed/in:cts2',
]
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, sdk_manifests)
self.assertListEqual(cts_element.verify_deps(), deps)
deps = ['//sdk/this/is/a/real:target']
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, sdk_manifests)
self.assertListEqual(cts_element.verify_deps(), [])
deps = [
'//sdk/this/is/a/real:target',
'//zircon/public/lib/zxtest:zxtest',
]
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, sdk_manifests)
self.assertListEqual(cts_element.verify_deps(), [])
deps = [
'//sdk/lib/fdio:fdio',
'//third_party/dart-pkg/pub/some-dart-pkg',
'//zircon/public/lib/zxtest:zxtest',
]
manifest = {
"atoms": [{
"category": "partner",
"deps": [],
"files": [],
"gn-label": "//sdk/lib/fdio:fdio_sdk_manifest(//build/toolchain/fuchsia:x64)",
"id": "sdk://pkg/fdio",
"meta": "pkg/fdio/meta.json",
"type": "cc_prebuilt_library"
}],
"ids": []
}
with open(sdk_manifests[0], 'w') as sdk_manifest:
json.dump(manifest, sdk_manifest)
allowed_cts_dirs = ['//third_party/dart-pkg/pub/*']
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, sdk_manifests)
self.assertListEqual(cts_element.verify_deps(), [])
def test_create_cts_dep_file(self):
invoker_label = "//sdk/cts/build:verify_cts_deps_test"
deps = ['//sdk:sdk', '//zircon/public/lib/zxtest:zxtest']
allowed_cts_deps = ['//zircon/public/lib/zxtest:zxtest']
allowed_cts_dirs = ['//sdk/*']
with TemporaryDirectory() as root_build_dir:
cts_file = root_build_dir + '/create_cts_dep_file.this_is_cts'
sdk_manifests = [
self.create_empty_sdk_manifest(root_build_dir, "core")
]
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, sdk_manifests)
cts_element.create_cts_dep_file()
self.assertTrue(os.path.exists(cts_file))
with open(cts_file) as f:
lines = [line.strip() for line in f.readlines()]
self.assertListEqual(deps, lines)
with TemporaryDirectory() as root_build_dir:
cts_file = root_build_dir + '/cts/create_cts_dep_file.this_is_cts'
sdk_manifests = [
self.create_empty_sdk_manifest(root_build_dir, "core")
]
cts_element = VerifyCtsDeps(
root_build_dir, cts_file, invoker_label, deps, allowed_cts_deps,
allowed_cts_dirs, sdk_manifests)
cts_element.create_cts_dep_file()
self.assertTrue(os.path.exists(cts_file))
with open(cts_file) as f:
lines = [line.strip() for line in f.readlines()]
self.assertListEqual(deps, lines)
if __name__ == '__main__':
unittest.main()