#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Unit tests for create_pkg_info."""

from __future__ import print_function

import io
import unittest

import create_pkg_info


class CreatePkgInfoTest(unittest.TestCase):
  """All the tests."""

  INSTALLED_PKG_INPUT_LINES = [
      'app-arch/gzip-1.9',
      'dev-libs/popt-1.16-r2',
      'app-containers/docker-credential-helpers-0.6.3-r1',
      '_not.real-category1+/_not-real_package1-12.34.56.78',
      ' _not.real-category1+/_not-real_package2-12.34.56.78-r26 ',
      '  _not.real-category1+/_not-real_package3-12.34.56.78_rc3  ',
      '   _not.real-category1+/_not-real_package4-12.34.56.78_rc3-r26   ',
      '    _not.real-category1+/_not-real_package5-12.34.56.78_pre2_rc3-r26   ',
      '_not.real-category2+/_not-real_package1-12.34.56.78q',
      '_not.real-category2+/_not-real_package2-12.34.56.78q-r26',
      '_not.real-category2+/_not-real_package3-12.34.56.78q_rc3',
      '_not.real-category2+/_not-real_package4-12.34.56.78q_rc3-r26',
      '_not.real-category2+/_not-real_package5-12.34.56.78q_pre2_rc3-r26'
  ]

  BUILDTIME_PKG_INPUT_LINES = [
      'virtual/pkgconfig-0-r1',
      'dev-go/protobuf-1.3.2-r1',
      'app-containers/docker-credential-helpers-0.6.3-r1',
      '_not.real-category1+/_not-real_package1-12.34.56.78',
      ' _not.real-category1+/_not-real_package2-12.34.56.78-r26 ',
      '  _not.real-category1+/_not-real_package3-12.34.56.78_rc3  ',
      '   _not.real-category1+/_not-real_package4-12.34.56.78_rc3-r26   ',
      '    _not.real-category1+/_not-real_package5-12.34.56.78_pre2_rc3-r26   ',
      '_not.real-category2+/_not-real_package1-12.34.56.78q',
      '_not.real-category2+/_not-real_package2-12.34.56.78q-r26',
      '_not.real-category2+/_not-real_package3-12.34.56.78q_rc3',
      '_not.real-category2+/_not-real_package4-12.34.56.78q_rc3-r26',
      '_not.real-category2+/_not-real_package5-12.34.56.78q_pre2_rc3-r26'
  ]

  ALL_PKG_INPUT_LINES = [
      'app-arch/gzip-1.9',
      'dev-libs/popt-1.16-r2 overlay:portage-stable',
      'virtual/pkgconfig-0-r1',
      'dev-go/protobuf-1.3.2-r1 overlay:portage-stable',
      'app-containers/docker-credential-helpers-0.6.3-r1 use_flags:+audit,+crypt,+multiarch,+ssp,+static-libs',
      'sys-apps/systemd-248.6-r2 overlay:project-lakitu use_flags:+apparmor,+audit,+cgroup-hybrid',
  ]

  INSTALLED_PKG_EXPECTED_LIST = [
      {'category': 'app-arch', 'package': 'gzip', 'version_no_rev': '1.9',
       'revision': None},
      {'category': 'dev-libs', 'package': 'popt', 'version_no_rev': '1.16',
       'revision': '2'},
      {'category': 'app-containers', 'package': 'docker-credential-helpers',
       'version_no_rev': '0.6.3', 'revision': '1'},
      {'category': '_not.real-category1+', 'package': '_not-real_package1',
       'version_no_rev': '12.34.56.78', 'revision': None},
      {'category': '_not.real-category1+', 'package': '_not-real_package2',
       'version_no_rev': '12.34.56.78', 'revision': '26'},
      {'category': '_not.real-category1+', 'package': '_not-real_package3',
       'version_no_rev': '12.34.56.78_rc3', 'revision': None},
      {'category': '_not.real-category1+', 'package': '_not-real_package4',
       'version_no_rev': '12.34.56.78_rc3', 'revision': '26'},
      {'category': '_not.real-category1+', 'package': '_not-real_package5',
       'version_no_rev': '12.34.56.78_pre2_rc3', 'revision': '26'},
      {'category': '_not.real-category2+', 'package': '_not-real_package1',
       'version_no_rev': '12.34.56.78q', 'revision': None},
      {'category': '_not.real-category2+', 'package': '_not-real_package2',
       'version_no_rev': '12.34.56.78q', 'revision': '26'},
      {'category': '_not.real-category2+', 'package': '_not-real_package3',
       'version_no_rev': '12.34.56.78q_rc3', 'revision': None},
      {'category': '_not.real-category2+', 'package': '_not-real_package4',
       'version_no_rev': '12.34.56.78q_rc3', 'revision': '26'},
      {'category': '_not.real-category2+', 'package': '_not-real_package5',
       'version_no_rev': '12.34.56.78q_pre2_rc3', 'revision': '26'}
  ]

  BUILDTIME_PKG_EXPECTED_LIST = [
      {'category': 'virtual', 'package': 'pkgconfig', 'version_no_rev': '0',
       'revision': '1'},
      {'category': 'dev-go', 'package': 'protobuf', 'version_no_rev': '1.3.2',
       'revision': '1'},
      {'category': 'app-containers', 'package': 'docker-credential-helpers',
       'version_no_rev': '0.6.3', 'revision': '1'},
      {'category': '_not.real-category1+', 'package': '_not-real_package1',
       'version_no_rev': '12.34.56.78', 'revision': None},
      {'category': '_not.real-category1+', 'package': '_not-real_package2',
       'version_no_rev': '12.34.56.78', 'revision': '26'},
      {'category': '_not.real-category1+', 'package': '_not-real_package3',
       'version_no_rev': '12.34.56.78_rc3', 'revision': None},
      {'category': '_not.real-category1+', 'package': '_not-real_package4',
       'version_no_rev': '12.34.56.78_rc3', 'revision': '26'},
      {'category': '_not.real-category1+', 'package': '_not-real_package5',
       'version_no_rev': '12.34.56.78_pre2_rc3', 'revision': '26'},
      {'category': '_not.real-category2+', 'package': '_not-real_package1',
       'version_no_rev': '12.34.56.78q', 'revision': None},
      {'category': '_not.real-category2+', 'package': '_not-real_package2',
       'version_no_rev': '12.34.56.78q', 'revision': '26'},
      {'category': '_not.real-category2+', 'package': '_not-real_package3',
       'version_no_rev': '12.34.56.78q_rc3', 'revision': None},
      {'category': '_not.real-category2+', 'package': '_not-real_package4',
       'version_no_rev': '12.34.56.78q_rc3', 'revision': '26'},
      {'category': '_not.real-category2+', 'package': '_not-real_package5',
       'version_no_rev': '12.34.56.78q_pre2_rc3', 'revision': '26'}
  ]

  ALL_PKG_EXPECTED_LIST = [
      {'category': 'app-arch', 'package': 'gzip', 'version_no_rev': '1.9',
       'revision': None, 'overlay': None, 'use_flags': None},
      {'category': 'dev-libs', 'package': 'popt', 'version_no_rev': '1.16',
       'revision': '2', 'overlay': 'overlay:portage-stable', 'use_flags': None},
      {'category': 'virtual', 'package': 'pkgconfig', 'version_no_rev': '0',
       'revision': '1', 'overlay': None, 'use_flags': None},
      {'category': 'dev-go', 'package': 'protobuf', 'version_no_rev': '1.3.2',
       'revision': '1', 'overlay': 'overlay:portage-stable', 'use_flags': None},
      {'category': 'app-containers', 'package': 'docker-credential-helpers',
       'version_no_rev': '0.6.3', 'revision': '1', 'overlay': None,
       'use_flags': 'use_flags:+audit,+crypt,+multiarch,+ssp,+static-libs'},
      {'category': 'sys-apps', 'package': 'systemd', 'version_no_rev': '248.6',
       'revision': '2', 'overlay': 'overlay:project-lakitu',
       'use_flags': 'use_flags:+apparmor,+audit,+cgroup-hybrid'}
  ]

  EXPECTED_JSON = """{
    "installedPackages": [
        {
            "category": "app-arch",
            "name": "gzip",
            "version": "123.0.1",
            "ebuild_version": "1.9"
        },
        {
            "category": "dev-libs",
            "name": "popt",
            "version": "123.0.1",
            "ebuild_version": "1.16-r2"
        },
        {
            "category": "app-containers",
            "name": "docker-credential-helpers",
            "version": "123.0.1",
            "ebuild_version": "0.6.3-r1"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package1",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package2",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78-r26"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package3",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78_rc3"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package4",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78_rc3-r26"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package5",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78_pre2_rc3-r26"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package1",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package2",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q-r26"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package3",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q_rc3"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package4",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q_rc3-r26"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package5",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q_pre2_rc3-r26"
        }
    ],
    "buildTimePackages": [
        {
            "category": "virtual",
            "name": "pkgconfig",
            "version": "123.0.1",
            "ebuild_version": "0-r1"
        },
        {
            "category": "dev-go",
            "name": "protobuf",
            "version": "123.0.1",
            "ebuild_version": "1.3.2-r1"
        },
        {
            "category": "app-containers",
            "name": "docker-credential-helpers",
            "version": "123.0.1",
            "ebuild_version": "0.6.3-r1"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package1",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package2",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78-r26"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package3",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78_rc3"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package4",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78_rc3-r26"
        },
        {
            "category": "_not.real-category1+",
            "name": "_not-real_package5",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78_pre2_rc3-r26"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package1",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package2",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q-r26"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package3",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q_rc3"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package4",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q_rc3-r26"
        },
        {
            "category": "_not.real-category2+",
            "name": "_not-real_package5",
            "version": "123.0.1",
            "ebuild_version": "12.34.56.78q_pre2_rc3-r26"
        }
    ]
}"""

  DEBUG_EXPECTED_JSON = """{
    "allPackages": [
        {
            "category": "app-arch",
            "name": "gzip",
            "version": "123.0.1",
            "ebuild_version": "1.9"
        },
        {
            "category": "dev-libs",
            "name": "popt",
            "version": "123.0.1",
            "ebuild_version": "1.16-r2",
            "overlay": "portage-stable"
        },
        {
            "category": "virtual",
            "name": "pkgconfig",
            "version": "123.0.1",
            "ebuild_version": "0-r1"
        },
        {
            "category": "dev-go",
            "name": "protobuf",
            "version": "123.0.1",
            "ebuild_version": "1.3.2-r1",
            "overlay": "portage-stable"
        },
        {
            "category": "app-containers",
            "name": "docker-credential-helpers",
            "version": "123.0.1",
            "ebuild_version": "0.6.3-r1",
            "use_flags": "+audit,+crypt,+multiarch,+ssp,+static-libs"
        },
        {
            "category": "sys-apps",
            "name": "systemd",
            "version": "123.0.1",
            "ebuild_version": "248.6-r2",
            "overlay": "project-lakitu",
            "use_flags": "+apparmor,+audit,+cgroup-hybrid"
        }
    ]
}"""

  def __init__(self, *args, **kwargs):
    unittest.TestCase.__init__(self, *args, **kwargs)
    self.maxDiff = None

  def testCreateList(self):
    self.assertEqual(
        create_pkg_info.CreateList(self.INSTALLED_PKG_INPUT_LINES, False),
        self.INSTALLED_PKG_EXPECTED_LIST)
    self.assertEqual(
        create_pkg_info.CreateList(self.BUILDTIME_PKG_INPUT_LINES, False),
        self.BUILDTIME_PKG_EXPECTED_LIST)

  def testCreateDebugList(self):
    self.assertEqual(
        create_pkg_info.CreateList(self.ALL_PKG_INPUT_LINES, True),
        self.ALL_PKG_EXPECTED_LIST)

  def testWriteJson(self):
    mock_file = io.StringIO()
    pkg_info = {
        'installedPackages': self.INSTALLED_PKG_EXPECTED_LIST,
        'buildTimePackages': self.BUILDTIME_PKG_EXPECTED_LIST,
    }
    create_pkg_info.WriteJson(pkg_info, '123.0.1', mock_file, False)
    print(mock_file.getvalue())
    self.assertEqual(mock_file.getvalue(), self.EXPECTED_JSON)
    mock_file.close()

  def testWriteDebugJson(self):
    mock_file = io.StringIO()
    pkg_info = {
        'allPackages': self.ALL_PKG_EXPECTED_LIST,
    }
    create_pkg_info.WriteJson(pkg_info, '123.0.1', mock_file, True)
    print(mock_file.getvalue())
    self.assertEqual(mock_file.getvalue(), self.DEBUG_EXPECTED_JSON)
    mock_file.close()

if __name__ == '__main__':
  unittest.main()
