#7 Fixed parameter bug, added cli unit tests, updated requirements
Merged 8 years ago by mcurlej. Opened 8 years ago by mcurlej.
mcurlej/module_diff issue4  into  master

file modified
+4 -4
@@ -4,8 +4,9 @@ 

  from module_diff import module_diff

  

  

- def main(org_nsv, diff_nsv, json=False, dist=False, reused=False):

-     module_diff(org_nsv, diff_nsv, json=json)

+ def main():

+     args = parse_arguments()

+     module_diff(args.org_nsv, args.diff_nsv, json=args.json, dist=args.dist, reused=args.reused)

  

  

  def parse_arguments():
@@ -24,5 +25,4 @@ 

      return parser.parse_args()

  

  if __name__ == "__main__":

-     args = parse_arguments()

-     main(args.org_nsv, args.diff_nsv, json=args.json, dist=args.dist, reused=args.reused)

+     main()

file modified
+5 -4
@@ -15,7 +15,6 @@ 

  

  def module_diff(org_nsv, diff_nsv, json=False, dist=False, reused=False):

      pdc = PDC()

-     # TODO is check for not found module needed?

      org_module = pdc.get_module(org_nsv)

      diff_module = pdc.get_module(diff_nsv)

  
@@ -31,7 +30,8 @@ 

      stats = diff["stats"]

      print("Compared modules:")

      print("NSV: %s, # of RPMs: %s" % (stats["org_module"]["nsv"], stats["org_module"]["num_rpms"]))

-     print("NSV: %s, # of RPMs: %s" % (stats["diff_module"]["nsv"], stats["diff_module"]["num_rpms"]))

+     print("NSV: %s, # of RPMs: %s" % (stats["diff_module"]["nsv"],

+                                       stats["diff_module"]["num_rpms"]))

      print("# of RPMs added: %s" % stats["num_added"])

      print("# of RPMs removed: %s" % stats["num_removed"])

      print("# of RPMs upgraded: %s" % stats["num_upgraded"])
@@ -41,9 +41,9 @@ 

          print("# of RPMs reused: %s" % stats["num_reused"])

  

      if dist:

-         print("# of RPMs which dist tag changed: %s" % stats["changed_distag_rpms"])

+         print("# of RPMs which dist tag changed: %s" % stats["num_changed_dist"])

  

-     print("---- RPMs Added ----\n")

+     print("\n---- RPMs Added ----\n")

      for rpm in diff["added_rpms"]:

          print("%s+ %s%s" % (CliColors.OKGREEN, rpm, CliColors.ENDC))

      print("\n---- RPMs Removed ----\n")
@@ -65,5 +65,6 @@ 

          for rpm in diff["changed_distag_rpms"]:

              print("C %s -> %s" % (rpm[0], rpm[1]))

  

+ 

  def jsonify_diff(diff):

      print(json.dumps(diff))

file modified
+1
@@ -1,2 +1,3 @@ 

+ mock==2.0.0

  pytest==3.2.5

  requests-mock==1.3.0

file added
+171
@@ -0,0 +1,171 @@ 

+ import json

+ import mock

+ import imp

+ # importing the bin script as source through imp

+ imp.load_source("module_diff_bin", "bin/module_diff") # noqa

+ import requests_mock

+ from module_diff_bin import main

+ 

+ module1_url = ("https://pdc.fedoraproject.org/rest_api/v1"

+                "/unreleasedvariants/"

+                "?page_size=1&variant_uid=mariadb-10.2-20171019133930")

+ 

+ module2_url = ("https://pdc.fedoraproject.org/rest_api/v1"

+                "/unreleasedvariants/"

+                "?page_size=1&variant_uid=mariadb-10.2-20171103103655")

+ 

+ 

+ def generate_module_res(pdc_json_res):

+     module1_res = pdc_json_res.get()

+     module2_res = pdc_json_res.get()

+     module1_res["results"][0]["rpms"].remove(

+         "mariadb-connect-engine-3:10.2.9-3.module_629c669e.x86_64.rpm")

+     module2_res["results"][0]["koji_tag"] = "module-15d35d06c29b1848"

+     module2_res["results"][0]["rpms"] = [

+             "mariadb-debugsource-3:10.2.9-3.module_629c669e.x86_64.rpm",

+             "mariadb-connect-engine-debuginfo-3:10.2.9-3.module_629c669e.x86_64.rpm",

+             "mariadb-debuginfo-3:11.2.9-3.module_15d35d06.x86_64.rpm",

+             "mariadb-3:10.2.9-3.module_629c669e.x86_64.rpm",

+             "mariadb-devel-3:9.2.9-3.module_15d35d06.x86_64.rpm",

+             "mariadb-connect-engine-3:10.2.9-3.module_15d35d06.x86_64.rpm"

+     ]

+ 

+     return module1_res, module2_res

+ 

+ 

+ class TestCli(object):

+     """

+     Tests for the cli of the module_diff tool

+     """

+ 

+     def test_cli_required_options(self, pdc_json_res, capsys):

+         """ Testing output with minimum required options """

+ 

+         module1_res, module2_res = generate_module_res(pdc_json_res)

+ 

+         with requests_mock.mock() as mock_http:

+             mock_http.register_uri("GET", module1_url, json=module1_res)

+             mock_http.register_uri("GET", module2_url, json=module2_res)

+ 

+             cli_cmd = [

+                 'module_diff',

+                 'mariadb-10.2-20171019133930',

+                 'mariadb-10.2-20171103103655'

+             ]

+ 

+             with mock.patch("sys.argv", cli_cmd):

+                 main()

+                 output = capsys.readouterr()[0]

+ 

+             assert "Compared modules" in output

+             assert "NSV:" in output

+             assert "# of RPMs:" in output

+             assert "# of RPMs added:" in output

+             assert "# of RPMs removed:" in output

+             assert "# of RPMs upgraded:" in output

+             assert "# of RPMs downgraded:" in output

+             assert "RPMs Added" in output

+             assert "RPMs Added" in output

+             assert "RPMs Removed" in output

+             assert "RPMs Upgraded" in output

+             assert "RPMs Downgraded" in output

+             assert "RPMs which dist tag changed" not in output

+             assert "RPMs Reused" not in output

+ 

+     def test_cli_dist_option(self, pdc_json_res, capsys):

+         """

+         Testing option --dist which displays RPMs which changed their dist tag.

+         """

+ 

+         module1_res, module2_res = generate_module_res(pdc_json_res)

+ 

+         with requests_mock.mock() as mock_http:

+             mock_http.register_uri("GET", module1_url, json=module1_res)

+             mock_http.register_uri("GET", module2_url, json=module2_res)

+ 

+             cli_cmd = [

+                 'module_diff',

+                 'mariadb-10.2-20171019133930',

+                 'mariadb-10.2-20171103103655',

+                 '--dist'

+             ]

+ 

+             with mock.patch("sys.argv", cli_cmd):

+                 main()

+                 output = capsys.readouterr()[0]

+ 

+             assert "Compared modules" in output

+             assert "NSV:" in output

+             assert "# of RPMs:" in output

+             assert "# of RPMs added:" in output

+             assert "# of RPMs removed:" in output

+             assert "# of RPMs upgraded:" in output

+             assert "# of RPMs downgraded:" in output

+             assert "RPMs Added" in output

+             assert "RPMs Added" in output

+             assert "RPMs Removed" in output

+             assert "RPMs Upgraded" in output

+             assert "RPMs Downgraded" in output

+             assert "RPMs which dist tag changed" in output

+             assert "RPMs Reused" not in output

+ 

+     def test_cli_reused_option(self, pdc_json_res, capsys):

+         """

+         Testing option --reused which displays RPMs which where reused from previous build.

+         """

+         module1_res, module2_res = generate_module_res(pdc_json_res)

+ 

+         with requests_mock.mock() as mock_http:

+             mock_http.register_uri("GET", module1_url, json=module1_res)

+             mock_http.register_uri("GET", module2_url, json=module2_res)

+ 

+             cli_cmd = [

+                 'module_diff',

+                 'mariadb-10.2-20171019133930',

+                 'mariadb-10.2-20171103103655',

+                 '--reused'

+             ]

+ 

+             with mock.patch("sys.argv", cli_cmd):

+                 main()

+                 output = capsys.readouterr()[0]

+ 

+             assert "Compared modules" in output

+             assert "NSV:" in output

+             assert "# of RPMs:" in output

+             assert "# of RPMs added:" in output

+             assert "# of RPMs removed:" in output

+             assert "# of RPMs upgraded:" in output

+             assert "# of RPMs downgraded:" in output

+             assert "RPMs Added" in output

+             assert "RPMs Added" in output

+             assert "RPMs Removed" in output

+             assert "RPMs Upgraded" in output

+             assert "RPMs Downgraded" in output

+             assert "RPMs which dist tag changed" not in output

+             assert "RPMs Reused" in output

+ 

+     def test_cli_json_option(self, pdc_json_res, capsys):

+         """

+         Testing option --json which displays the output as a json string.

+         """

+         module1_res, module2_res = generate_module_res(pdc_json_res)

+ 

+         with requests_mock.mock() as mock_http:

+             mock_http.register_uri("GET", module1_url, json=module1_res)

+             mock_http.register_uri("GET", module2_url, json=module2_res)

+ 

+             cli_cmd = [

+                 'module_diff',

+                 'mariadb-10.2-20171019133930',

+                 'mariadb-10.2-20171103103655',

+                 '--json'

+             ]

+ 

+             with mock.patch("sys.argv", cli_cmd):

+                 main()

+                 output = capsys.readouterr()[0]

+                 # json.loads will fire an exception if the json is not valid

+                 json_dict = json.loads(output)

+                 assert isinstance(json_dict, dict)

+                 assert len(json_dict)

file modified
+8 -7
@@ -20,7 +20,7 @@ 

  @pytest.mark.usefixtures("pdc_json_res")

  class TestModule(object):

      """

-     Test for the Module Class

+     Tests for the Module Class

      """

  

      def test_get_diff_no_diff(self, pdc_json_res):
@@ -211,11 +211,12 @@ 

          md = module1.get_rpm_md(rpm)

  

          expected_md = {'arch': 'x86_64',

-             'dist_tag': 'module_80d712e7',

-             'epoch': '0',

-             'full_name': 'python3-hawkey-debuginfo-0:0.10.1-2.module_80d712e7.modularity.1.x86_64.rpm',

-             'name': 'python3-hawkey-debuginfo',

-             'release': '2.module_80d712e7.modularityx86_64rpm',

-             'version': '0.10.1'}

+                        'dist_tag': 'module_80d712e7',

+                        'epoch': '0',

+                        'full_name': ('python3-hawkey-debuginfo-0:0.10.1-2'

+                                      '.module_80d712e7.modularity.1.x86_64.rpm'),

+                        'name': 'python3-hawkey-debuginfo',

+                        'release': '2.module_80d712e7.modularityx86_64rpm',

+                        'version': '0.10.1'}

  

          assert md == expected_md