コード例 #1
0
ファイル: test_comps.py プロジェクト: jlsherrill/pulp
    def test_sync_of_orphaned_data(self):
        # Sync repo with some initial data
        # Modify the underlying directory to make it look like source has changed
        # Re-sync
        # Verify orphaned groups/categories were removed
        ic = ImporterComps()
        repo_src_dir = os.path.join(self.data_dir, "test_orphaned_data_initial")
        feed_url = "file://%s" % (repo_src_dir)
        config = importer_mocks.get_basic_config(feed_url=feed_url)
        repo = mock.Mock(spec=Repository)
        repo.id = "test_sync_of_orphaned_data"
        repo.working_dir = self.working_dir
        # Simulate a repo sync, copy the source contents to the repo.working_dir
        self.simulate_sync(repo, repo_src_dir)

        sync_conduit = importer_mocks.get_sync_conduit()
        status, summary, details = ic.sync(repo, sync_conduit, config)
        self.assertTrue(status)
        self.assertEqual(summary["num_available_groups"], 3)
        self.assertEqual(summary["num_available_categories"], 2)
        self.assertEqual(summary["num_new_groups"], 3)
        self.assertEqual(summary["num_new_categories"], 2)
        self.assertEqual(summary["num_orphaned_groups"], 0)
        self.assertEqual(summary["num_orphaned_categories"], 0)
        self.assertTrue(summary["time_total_sec"] > 0)
        #
        # Simulate the existing_units 
        #
        avail_groups, avail_cats = comps.get_available(repo_src_dir)
        existing_cats, existing_cat_units = comps.get_new_category_units(avail_cats, {}, sync_conduit, repo)
        existing_groups, existing_group_units = comps.get_new_group_units(avail_groups, {}, sync_conduit, repo)
        self.assertEquals(len(existing_cats), 2)
        self.assertEquals(len(existing_groups), 3)

        existing_units = []
        existing_units.extend(existing_group_units.values())
        existing_units.extend(existing_cat_units.values())
        self.assertEquals(len(existing_units), (len(existing_cats) + len(existing_groups)))
        # 
        # Now we will simulate a change to the feed and pass in our existing units
        #
        repo_src_dir = os.path.join(self.data_dir, "test_orphaned_data_final")
        feed_url = "file://%s" % (repo_src_dir)
        config = importer_mocks.get_basic_config(feed_url=feed_url)
        sync_conduit = importer_mocks.get_sync_conduit(existing_units=existing_units)
        self.simulate_sync(repo, repo_src_dir)
        status, summary, details = ic.sync(repo, sync_conduit, config)

        self.assertTrue(status)
        self.assertEqual(summary["num_available_groups"], 2)
        self.assertEqual(summary["num_available_categories"], 1)
        self.assertEqual(summary["num_new_groups"], 0)
        self.assertEqual(summary["num_new_categories"], 0)
        self.assertEqual(summary["num_orphaned_groups"], 1)
        self.assertEqual(summary["num_orphaned_categories"], 1)
        self.assertTrue(summary["time_total_sec"] > 0)
コード例 #2
0
 def get_pkg_group_or_category(self, repo, type_id):
     repo_src_dir = os.path.join(self.data_dir, "test_comps_import_with_dots_in_pkg_names")
     sync_conduit = importer_mocks.get_sync_conduit()
     avail_groups, avail_cats = comps.get_available(repo_src_dir)
     if type_id == TYPE_ID_PKG_GROUP:
         groups, group_units = comps.get_new_group_units(avail_groups, {}, sync_conduit, repo)
         self.assertTrue(len(group_units) > 0)
         return group_units.values()[0]
     elif type_id == TYPE_ID_PKG_CATEGORY:
         cats, cat_units = comps.get_new_category_units(avail_cats, {}, sync_conduit, repo)
         self.assertTrue(len(cat_units) > 0)
         return cat_units.values()[0]
     else:
         return None
コード例 #3
0
ファイル: test_comps.py プロジェクト: jlsherrill/pulp
 def test_form_comps_xml(self):
     # Form several package groups and categories
     repo_src_dir = os.path.join(self.data_dir, "pulp_unittest")
     avail_groups, avail_cats = comps.get_available(repo_src_dir)
     # Translate the dicts into units
     repo = mock.Mock(spec=Repository)
     repo.id = "test_form_comps_xml"
     repo.working_dir = self.working_dir
     sync_conduit = importer_mocks.get_sync_conduit()
     initial_cats, initial_cat_units = comps.get_new_category_units(avail_cats, {}, sync_conduit, repo)
     initial_groups, initial_group_units = comps.get_new_group_units(avail_groups, {}, sync_conduit, repo)
     # Write these to a comps.xml
     comps_xml = comps_util.form_comps_xml_from_units(initial_group_units.values(), initial_cat_units.values())
     out_path = os.path.join(self.temp_dir, "test_form_comps.xml")
     f = open(out_path, "w")
     try:
         f.write(comps_xml)
     finally:
         f.close()
     # Read in comps.xml and parse
     final_groups, final_cats = comps.get_available(repo_src_dir, group_file=out_path, group_type='group')
     final_cats, final_cat_units = comps.get_new_category_units(final_cats, {}, sync_conduit, repo)
     final_groups, final_group_units = comps.get_new_group_units(final_groups, {}, sync_conduit, repo)
     # Verify we get the same data back
     self.assertEquals(len(initial_group_units), len(final_group_units))
     self.assertEquals(len(initial_cat_units), len(final_cat_units))
     # Examine Package Group Data
     for grp_key in initial_group_units:
         initial_unit = initial_group_units[grp_key]
         final_unit = final_group_units[grp_key]
         self.assertEquals(len(initial_unit.unit_key), len(final_unit.unit_key))
         self.assertEquals(len(initial_unit.metadata), len(final_unit.metadata))
         # Verify unit keys are same
         for key in initial_unit.unit_key:
             self.assertEquals(initial_unit.unit_key[key], final_unit.unit_key[key])
         for key in initial_unit.metadata:
             self.assertEquals(initial_unit.metadata[key], final_unit.metadata[key])
コード例 #4
0
ファイル: test_comps.py プロジェクト: jlsherrill/pulp
 def test_write_comps_with_centos6_comps_xml(self):
         repo = mock.Mock(spec=Repository)
         repo.id = "test_write_comps_with_i18n_data"
         repo.working_dir = self.working_dir
         sync_conduit = importer_mocks.get_sync_conduit()
         repo_src_dir = os.path.join(self.data_dir, "test_comps_import_with_dots_in_pkg_names")
         # Simulate a sync with CentOS 6 comps.xml data
         # The test data contains issues such as:
         #  1) conditional_package_names that contain a '.' in the key name
         #     InvalidDocument: key 'openoffice.org-langpack-en' must not contain '.'
         #  2) unicode strings which are not being encoded correctly during write
         #     UnicodeEncodeError: 'ascii' codec can't encode characters in position 334-341: ordinal not in range(128)
         avail_groups, avail_cats = comps.get_available(repo_src_dir)
         groups, group_units = comps.get_new_group_units(avail_groups, {}, sync_conduit, repo)
         cats, cat_units = comps.get_new_category_units(avail_cats, {}, sync_conduit, repo)
         yum_distributor = YumDistributor()
         comps_xml_out_path = comps_util.write_comps_xml(repo, group_units.values(), cat_units.values())
         self.assertEqual(comps_xml_out_path, os.path.join(repo.working_dir, "comps.xml"))
         yc = yum.comps.Comps()
         yc.add(comps_xml_out_path)
         self.assertTrue(len(group_units), len(yc.groups))
         self.assertTrue(len(cat_units), len(yc.categories))