licensing: split deprecated check out for reuse

This just adds unittest coverage for now.

BUG=chromium:401332, chromium:1019728
TEST=CQ passes

Change-Id: Ib2a2775146519cae8eec6b2d5f62460410038bc9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2303809
Reviewed-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
diff --git a/licensing/licenses_lib.py b/licensing/licenses_lib.py
index 31e81c4..a9b01a1 100644
--- a/licensing/licenses_lib.py
+++ b/licensing/licenses_lib.py
@@ -794,6 +794,179 @@
     return stock + custom
 
 
+def _CheckForDeprecatedLicense(cpf, licenses):
+  """See if |cpf| is a known package using a deprecated license.
+
+  We have a bunch of licenses we don't want people to use, but some packages
+  were using them by the time we noticed.  Still allow those existing ones,
+  but prevent new users from showing up.
+  """
+  # TODO(crbug.com/401332): Remove this entirely.
+  # We allow a few packages for now so new packages will stop showing up.
+  if 'Proprietary-Binary' in licenses:
+    # Note: DO NOT ADD ANY MORE PACKAGES HERE.
+    LEGACY_PKGS = (
+        'chromeos-base/infineon-firmware',
+        'chromeos-base/pepper-flash',
+        'sys-boot/coreboot-private-files-',
+        'sys-boot/exynos-pre-boot',
+        'sys-boot/nhlt-blobs',
+        'sys-boot/mma-blobs',
+    )
+    if not any(cpf.startswith(x) for x in LEGACY_PKGS):
+      raise PackageLicenseError('Proprietary-Binary is not a valid license.')
+
+  # TODO(crbug.com/1019728): Remove this entirely.
+  # We allow a few packages for now so new packages will stop showing up.
+  if 'Google-TOS' in licenses:
+    # Note: DO NOT ADD ANY MORE PACKAGES HERE.
+    LEGACY_PKGS = {
+        'chromeos-base/android-flashstation-app',
+        'chromeos-base/app-shell-apps-rialto',
+        'chromeos-base/chromeos-board-default-apps-atlas',
+        'chromeos-base/chromeos-board-default-apps-blaze',
+        'chromeos-base/chromeos-board-default-apps-butterfly',
+        'chromeos-base/chromeos-board-default-apps-candy',
+        'chromeos-base/chromeos-board-default-apps-cave',
+        'chromeos-base/chromeos-board-default-apps-chell',
+        'chromeos-base/chromeos-board-default-apps-falco',
+        'chromeos-base/chromeos-board-default-apps-kip',
+        'chromeos-base/chromeos-board-default-apps-link',
+        'chromeos-base/chromeos-board-default-apps-mickey',
+        'chromeos-base/chromeos-board-default-apps-minnie',
+        'chromeos-base/chromeos-board-default-apps-nocturne',
+        'chromeos-base/chromeos-board-default-apps-paine',
+        'chromeos-base/chromeos-board-default-apps-pi',
+        'chromeos-base/chromeos-board-default-apps-pit',
+        'chromeos-base/chromeos-board-default-apps-quawks',
+        'chromeos-base/chromeos-board-default-apps-setzer',
+        'chromeos-base/chromeos-board-default-apps-skate',
+        'chromeos-base/chromeos-board-default-apps-snappy',
+        'chromeos-base/chromeos-board-default-apps-soraka',
+        'chromeos-base/chromeos-board-default-apps-speedy',
+        'chromeos-base/chromeos-board-default-apps-squawks',
+        'chromeos-base/chromeos-board-default-apps-terra',
+        'chromeos-base/chromeos-board-default-apps-winky',
+        'chromeos-base/chromeos-board-default-apps-yuna',
+        'chromeos-base/chromeos-board-default-apps-zako',
+        'chromeos-base/chromeos-chrome',
+        'chromeos-base/chromeos-default-apps',
+        'chromeos-base/chromeos-disk-firmware-enguarde',
+        'chromeos-base/chromeos-disk-firmware-falco',
+        'chromeos-base/chromeos-disk-firmware-gnawty',
+        'chromeos-base/chromeos-disk-firmware-samus',
+        'chromeos-base/chromeos-disk-firmware-squawks',
+        'chromeos-base/chromeos-disk-firmware-test-enguarde',
+        'chromeos-base/chromeos-disk-firmware-test-gnawty',
+        'chromeos-base/chromeos-disk-firmware-test-samus',
+        'chromeos-base/chromeos-disk-firmware-test-squawks',
+        'chromeos-base/chromeos-firmware-anx7688',
+        'chromeos-base/fibocom-firmware',
+        'chromeos-base/google-sans-fonts',
+        'chromeos-base/houdini',
+        'chromeos-base/houdini-pi',
+        'chromeos-base/houdini-qt',
+        'chromeos-base/intel-hdcp',
+        'chromeos-base/monotype-fonts',
+        'chromeos-base/rialto-cellular-autoconnect',
+        'chromeos-base/rialto-modem-watchdog',
+        'chromeos-base/rialto-override-apn',
+        'chromeos-base/rialto-override-scanresponse',
+        'chromeos-base/rialto-services',
+        'chromeos-base/widevine-cdm',
+        'dev-embedded/meta-embedded-toolkit',
+        'dev-util/PVRPerfServer',
+        'dev-util/PVRTrace',
+        'media-libs/a630-fw',
+        'media-libs/adreno-drivers',
+        'media-libs/apl-hotword-support',
+        'media-libs/arc-img-ddk',
+        'media-libs/arc-mali-drivers',
+        'media-libs/arc-mali-drivers-bifrost',
+        'media-libs/dlm',
+        'media-libs/glk-hotword-support',
+        'media-libs/go2001-fw',
+        'media-libs/img-ddk',
+        'media-libs/img-ddk-bin',
+        'media-libs/kbl-hotword-support',
+        'media-libs/kbl-rt5514-hotword-support',
+        'media-libs/mali-drivers',
+        'media-libs/mali-drivers-bifrost',
+        'media-libs/mali-drivers-bifrost-bin',
+        'media-libs/mali-drivers-bin',
+        'media-libs/mfc-fw',
+        'media-libs/mfc-fw-v7',
+        'media-libs/mfc-fw-v8',
+        'media-libs/rk3399-hotword-support',
+        'media-libs/skl-hotword-support',
+        'sys-apps/accelerator-bootstrap',
+        'sys-apps/eid',
+        'sys-apps/loonix-hydrogen',
+        'sys-boot/chromeos-firmware-ps8751',
+        'sys-boot/chromeos-vendor-strings-wilco',
+        'sys-boot/coreboot-private-files-amenia',
+        'sys-boot/coreboot-private-files-aplrvp',
+        'sys-boot/coreboot-private-files-atlas',
+        'sys-boot/coreboot-private-files-baseboard-auron',
+        'sys-boot/coreboot-private-files-baseboard-coral',
+        'sys-boot/coreboot-private-files-baseboard-fizz',
+        'sys-boot/coreboot-private-files-baseboard-glados',
+        'sys-boot/coreboot-private-files-baseboard-jecht',
+        'sys-boot/coreboot-private-files-baseboard-kalista',
+        'sys-boot/coreboot-private-files-baseboard-kblrvp',
+        'sys-boot/coreboot-private-files-baseboard-kunimitsu',
+        'sys-boot/coreboot-private-files-baseboard-nami',
+        'sys-boot/coreboot-private-files-baseboard-octopus',
+        'sys-boot/coreboot-private-files-baseboard-poppy',
+        'sys-boot/coreboot-private-files-baseboard-rammus',
+        'sys-boot/coreboot-private-files-baseboard-reef',
+        'sys-boot/coreboot-private-files-baseboard-strago',
+        'sys-boot/coreboot-private-files-bolt',
+        'sys-boot/coreboot-private-files-chipset-picasso',
+        'sys-boot/coreboot-private-files-chipset-stnyridge',
+        'sys-boot/coreboot-private-files-cnlrvp',
+        'sys-boot/coreboot-private-files-drallion',
+        'sys-boot/coreboot-private-files-eve',
+        'sys-boot/coreboot-private-files-falco',
+        'sys-boot/coreboot-private-files-fizz',
+        'sys-boot/coreboot-private-files-glkrvp',
+        'sys-boot/coreboot-private-files-grunt',
+        'sys-boot/coreboot-private-files-hatch',
+        'sys-boot/coreboot-private-files-kalista',
+        'sys-boot/coreboot-private-files-mistral',
+        'sys-boot/coreboot-private-files-nami',
+        'sys-boot/coreboot-private-files-nautilus',
+        'sys-boot/coreboot-private-files-nocturne',
+        'sys-boot/coreboot-private-files-panther',
+        'sys-boot/coreboot-private-files-peppy',
+        'sys-boot/coreboot-private-files-poppy',
+        'sys-boot/coreboot-private-files-pyro',
+        'sys-boot/coreboot-private-files-rambi',
+        'sys-boot/coreboot-private-files-rammus',
+        'sys-boot/coreboot-private-files-reef',
+        'sys-boot/coreboot-private-files-samus',
+        'sys-boot/coreboot-private-files-sand',
+        'sys-boot/coreboot-private-files-sarien',
+        'sys-boot/coreboot-private-files-sklrvp',
+        'sys-boot/coreboot-private-files-snappy',
+        'sys-boot/coreboot-private-files-soraka',
+        'sys-boot/exynos-pre-boot',
+        'sys-boot/intel-cflfsp',
+        'sys-boot/intel-glkfsp',
+        'sys-boot/intel-iclfsp',
+        'sys-boot/mma-blobs',
+        'sys-boot/nhlt-blobs',
+        'sys-boot/rk3399-hdcp-fw',
+        'sys-firmware/displaylink-firmware',
+        'sys-firmware/huddly-firmware',
+        'sys-firmware/iq-firmware',
+        'sys-firmware/sis-firmware',
+        'www-servers/spacecast',
+    }
+    if not any(cpf.startswith(x) for x in LEGACY_PKGS):
+      raise PackageLicenseError('Google-TOS is not a valid license.')
+
+
 class Licensing(object):
   """Do the actual work of extracting licensing info and outputting html."""
 
@@ -885,177 +1058,14 @@
       license_names: list of license name strings.
       license_texts: custom license text to use, mostly for attribution.
     """
-    # TODO(crbug.com/401332): Remove this entirely.
-    # We allow a few packages for now so new packages will stop showing up.
-    if 'Proprietary-Binary' in license_names:
-      # Note: DO NOT ADD ANY MORE PACKAGES HERE.
-      LEGACY_PKGS = (
-          'chromeos-base/infineon-firmware',
-          'chromeos-base/pepper-flash',
-          'sys-boot/coreboot-private-files-',
-          'sys-boot/exynos-pre-boot',
-          'sys-boot/nhlt-blobs',
-          'sys-boot/mma-blobs',
-      )
-      if not any(fullnamerev.startswith(x) for x in LEGACY_PKGS):
-        raise AssertionError('Proprietary-Binary is not a valid license.')
-
-    # TODO(crbug.com/1019728): Remove this entirely.
-    # We allow a few packages for now so new packages will stop showing up.
-    if 'Google-TOS' in license_names:
-      # Note: DO NOT ADD ANY MORE PACKAGES HERE.
-      LEGACY_PKGS = {
-          'chromeos-base/android-flashstation-app',
-          'chromeos-base/app-shell-apps-rialto',
-          'chromeos-base/chromeos-board-default-apps-atlas',
-          'chromeos-base/chromeos-board-default-apps-blaze',
-          'chromeos-base/chromeos-board-default-apps-butterfly',
-          'chromeos-base/chromeos-board-default-apps-candy',
-          'chromeos-base/chromeos-board-default-apps-cave',
-          'chromeos-base/chromeos-board-default-apps-chell',
-          'chromeos-base/chromeos-board-default-apps-falco',
-          'chromeos-base/chromeos-board-default-apps-kip',
-          'chromeos-base/chromeos-board-default-apps-link',
-          'chromeos-base/chromeos-board-default-apps-mickey',
-          'chromeos-base/chromeos-board-default-apps-minnie',
-          'chromeos-base/chromeos-board-default-apps-nocturne',
-          'chromeos-base/chromeos-board-default-apps-paine',
-          'chromeos-base/chromeos-board-default-apps-pi',
-          'chromeos-base/chromeos-board-default-apps-pit',
-          'chromeos-base/chromeos-board-default-apps-quawks',
-          'chromeos-base/chromeos-board-default-apps-setzer',
-          'chromeos-base/chromeos-board-default-apps-skate',
-          'chromeos-base/chromeos-board-default-apps-snappy',
-          'chromeos-base/chromeos-board-default-apps-soraka',
-          'chromeos-base/chromeos-board-default-apps-speedy',
-          'chromeos-base/chromeos-board-default-apps-squawks',
-          'chromeos-base/chromeos-board-default-apps-terra',
-          'chromeos-base/chromeos-board-default-apps-winky',
-          'chromeos-base/chromeos-board-default-apps-yuna',
-          'chromeos-base/chromeos-board-default-apps-zako',
-          'chromeos-base/chromeos-chrome',
-          'chromeos-base/chromeos-default-apps',
-          'chromeos-base/chromeos-disk-firmware-enguarde',
-          'chromeos-base/chromeos-disk-firmware-falco',
-          'chromeos-base/chromeos-disk-firmware-gnawty',
-          'chromeos-base/chromeos-disk-firmware-samus',
-          'chromeos-base/chromeos-disk-firmware-squawks',
-          'chromeos-base/chromeos-disk-firmware-test-enguarde',
-          'chromeos-base/chromeos-disk-firmware-test-gnawty',
-          'chromeos-base/chromeos-disk-firmware-test-samus',
-          'chromeos-base/chromeos-disk-firmware-test-squawks',
-          'chromeos-base/chromeos-firmware-anx7688',
-          'chromeos-base/fibocom-firmware',
-          'chromeos-base/google-sans-fonts',
-          'chromeos-base/houdini',
-          'chromeos-base/houdini-pi',
-          'chromeos-base/houdini-qt',
-          'chromeos-base/intel-hdcp',
-          'chromeos-base/monotype-fonts',
-          'chromeos-base/rialto-cellular-autoconnect',
-          'chromeos-base/rialto-modem-watchdog',
-          'chromeos-base/rialto-override-apn',
-          'chromeos-base/rialto-override-scanresponse',
-          'chromeos-base/rialto-services',
-          'chromeos-base/widevine-cdm',
-          'dev-embedded/meta-embedded-toolkit',
-          'dev-util/PVRPerfServer',
-          'dev-util/PVRTrace',
-          'media-libs/a630-fw',
-          'media-libs/adreno-drivers',
-          'media-libs/apl-hotword-support',
-          'media-libs/arc-img-ddk',
-          'media-libs/arc-mali-drivers',
-          'media-libs/arc-mali-drivers-bifrost',
-          'media-libs/dlm',
-          'media-libs/glk-hotword-support',
-          'media-libs/go2001-fw',
-          'media-libs/img-ddk',
-          'media-libs/img-ddk-bin',
-          'media-libs/kbl-hotword-support',
-          'media-libs/kbl-rt5514-hotword-support',
-          'media-libs/mali-drivers',
-          'media-libs/mali-drivers-bifrost',
-          'media-libs/mali-drivers-bifrost-bin',
-          'media-libs/mali-drivers-bin',
-          'media-libs/mfc-fw',
-          'media-libs/mfc-fw-v7',
-          'media-libs/mfc-fw-v8',
-          'media-libs/rk3399-hotword-support',
-          'media-libs/skl-hotword-support',
-          'sys-apps/accelerator-bootstrap',
-          'sys-apps/eid',
-          'sys-apps/loonix-hydrogen',
-          'sys-boot/chromeos-firmware-ps8751',
-          'sys-boot/chromeos-vendor-strings-wilco',
-          'sys-boot/coreboot-private-files-amenia',
-          'sys-boot/coreboot-private-files-aplrvp',
-          'sys-boot/coreboot-private-files-atlas',
-          'sys-boot/coreboot-private-files-baseboard-auron',
-          'sys-boot/coreboot-private-files-baseboard-coral',
-          'sys-boot/coreboot-private-files-baseboard-fizz',
-          'sys-boot/coreboot-private-files-baseboard-glados',
-          'sys-boot/coreboot-private-files-baseboard-jecht',
-          'sys-boot/coreboot-private-files-baseboard-kalista',
-          'sys-boot/coreboot-private-files-baseboard-kblrvp',
-          'sys-boot/coreboot-private-files-baseboard-kunimitsu',
-          'sys-boot/coreboot-private-files-baseboard-nami',
-          'sys-boot/coreboot-private-files-baseboard-octopus',
-          'sys-boot/coreboot-private-files-baseboard-poppy',
-          'sys-boot/coreboot-private-files-baseboard-rammus',
-          'sys-boot/coreboot-private-files-baseboard-reef',
-          'sys-boot/coreboot-private-files-baseboard-strago',
-          'sys-boot/coreboot-private-files-bolt',
-          'sys-boot/coreboot-private-files-chipset-picasso',
-          'sys-boot/coreboot-private-files-chipset-stnyridge',
-          'sys-boot/coreboot-private-files-cnlrvp',
-          'sys-boot/coreboot-private-files-drallion',
-          'sys-boot/coreboot-private-files-eve',
-          'sys-boot/coreboot-private-files-falco',
-          'sys-boot/coreboot-private-files-fizz',
-          'sys-boot/coreboot-private-files-glkrvp',
-          'sys-boot/coreboot-private-files-grunt',
-          'sys-boot/coreboot-private-files-hatch',
-          'sys-boot/coreboot-private-files-kalista',
-          'sys-boot/coreboot-private-files-mistral',
-          'sys-boot/coreboot-private-files-nami',
-          'sys-boot/coreboot-private-files-nautilus',
-          'sys-boot/coreboot-private-files-nocturne',
-          'sys-boot/coreboot-private-files-panther',
-          'sys-boot/coreboot-private-files-peppy',
-          'sys-boot/coreboot-private-files-poppy',
-          'sys-boot/coreboot-private-files-pyro',
-          'sys-boot/coreboot-private-files-rambi',
-          'sys-boot/coreboot-private-files-rammus',
-          'sys-boot/coreboot-private-files-reef',
-          'sys-boot/coreboot-private-files-samus',
-          'sys-boot/coreboot-private-files-sand',
-          'sys-boot/coreboot-private-files-sarien',
-          'sys-boot/coreboot-private-files-sklrvp',
-          'sys-boot/coreboot-private-files-snappy',
-          'sys-boot/coreboot-private-files-soraka',
-          'sys-boot/exynos-pre-boot',
-          'sys-boot/intel-cflfsp',
-          'sys-boot/intel-glkfsp',
-          'sys-boot/intel-iclfsp',
-          'sys-boot/mma-blobs',
-          'sys-boot/nhlt-blobs',
-          'sys-boot/rk3399-hdcp-fw',
-          'sys-firmware/displaylink-firmware',
-          'sys-firmware/huddly-firmware',
-          'sys-firmware/iq-firmware',
-          'sys-firmware/sis-firmware',
-          'www-servers/spacecast',
-      }
-      if not any(fullnamerev.startswith(x) for x in LEGACY_PKGS):
-        raise AssertionError('Google-TOS is not a valid license.')
-
     pkg = PackageInfo(self.board, fullnamerev)
     pkg.homepages = homepages
     pkg.license_names = license_names
     pkg.license_text_scanned = license_texts
     self.packages[fullnamerev] = pkg
 
+    _CheckForDeprecatedLicense(fullnamerev, pkg.license_names)
+
   # Called directly by src/repohooks/pre-upload.py
   @staticmethod
   def FindLicenseType(license_name, board=None, overlay_path=None,
diff --git a/licensing/licenses_lib_unittest.py b/licensing/licenses_lib_unittest.py
index b2752dc..4885873 100644
--- a/licensing/licenses_lib_unittest.py
+++ b/licensing/licenses_lib_unittest.py
@@ -14,6 +14,9 @@
 from chromite.licensing import licenses_lib
 
 
+# pylint: disable=protected-access
+
+
 class LicenseLibTest(cros_test_lib.TempDirTestCase):
   """Limited tests for license_lib."""
 
@@ -288,3 +291,19 @@
     osutils.WriteFile(bad_license, u'Foo\x00Bar')
     result = licenses_lib.ReadUnknownEncodedFile(bad_license)
     self.assertEqual(result, 'FooBar')
+
+  def testDeprecatedLicenses(self):
+    """Verify deprecated license checks."""
+    # These are known bad packages.
+    licenses_lib._CheckForDeprecatedLicense(
+        'chromeos-base/pepper-flash-0.0.1', {'Proprietary-Binary'})
+    licenses_lib._CheckForDeprecatedLicense(
+        'chromeos-base/google-sans-fonts-1-r13', {'Google-TOS'})
+
+    # These packages should not be allowed.
+    with self.assertRaises(licenses_lib.PackageLicenseError):
+      licenses_lib._CheckForDeprecatedLicense(
+          'sys-apps/portage-123', {'Proprietary-Binary'})
+    with self.assertRaises(licenses_lib.PackageLicenseError):
+      licenses_lib._CheckForDeprecatedLicense(
+          'sys-apps/portage-123', {'GPL-2', 'Google-TOS'})