def test_update_no_changes(self): """ Tests the common use case of loading type definitions that have been loaded already and have not changed. """ # Setup defs = [DEF_1, DEF_2, DEF_3, DEF_4] types_db.update_database(defs) # Test same_defs = [ DEF_4, DEF_3, DEF_2, DEF_1 ] # no real reason for this, just felt better than using the previous list types_db.update_database(same_defs) # Verify all_collection_names = types_db.all_type_collection_names() self.assertEqual(len(same_defs), len(all_collection_names)) for d in defs: self.assertTrue( types_db.unit_collection_name(d.id) in all_collection_names) # Quick sanity check on the indexes collection = types_db.type_units_collection(d.id) all_indexes = collection.index_information() total_index_count = 1 + 1 + len( d.search_indexes) # _id + unit key + all search self.assertEqual(total_index_count, len(all_indexes))
def test_update_missing_no_error(self): """ Tests that updating a previously loaded database with some missing definitions does not throw an error. """ # Setup defs = [DEF_1, DEF_2, DEF_3] types_db.update_database(defs) # Test new_defs = [DEF_4] types_db.update_database(new_defs) # Verify all_collection_names = types_db.all_type_collection_names() self.assertEqual(len(defs) + len(new_defs), len(all_collection_names)) # old are not deleted for d in defs: self.assertTrue( types_db.unit_collection_name(d.id) in all_collection_names) # Quick sanity check on the indexes collection = types_db.type_units_collection(d.id) all_indexes = collection.index_information() total_index_count = 1 + 1 + len( d.search_indexes) # _id + unit key + all search self.assertEqual(total_index_count, len(all_indexes))
def test_migrate(self, start_logging_mock, listdir_mock, mock_plugin_definitions, mock_drop_indices): """ Ensure that migrate() imports types on a clean types database. """ migration.migrate() self.assertTrue(mock_drop_indices.called) all_collection_names = types_db.all_type_collection_names() self.assertEqual(len(all_collection_names), 1) self.assertEqual(['units_test_type_id'], all_collection_names) # Let's make sure we loaded the type definitions correctly db_type_definitions = types_db.all_type_definitions() self.assertEquals(len(db_type_definitions), 1) test_json = json.loads(_test_type_json) for attribute in ['id', 'display_name', 'description', 'unit_key', 'search_indexes']: self.assertEquals(test_json['types'][0][attribute], db_type_definitions[0][attribute]) # Now let's ensure that we have the correct indexes collection = types_db.type_units_collection('test_type_id') indexes = collection.index_information() self.assertEqual(indexes['_id_']['key'], [(u'_id', 1)]) # Make sure we have the unique constraint on all three attributes self.assertEqual(indexes['attribute_1_1_attribute_2_1_attribute_3_1']['unique'], True) self.assertEqual(indexes['attribute_1_1_attribute_2_1_attribute_3_1']['key'], [(u'attribute_1', 1), (u'attribute_2', 1), (u'attribute_3', 1)]) # Make sure we indexed attributes 1 and 3 self.assertEqual(indexes['attribute_1_1']['key'], [(u'attribute_1', 1)]) self.assertEqual(indexes['attribute_3_1']['key'], [(u'attribute_3', 1)]) # Make sure we only have the indexes that we've hand inspected here self.assertEqual(indexes.keys(), [u'_id_', u'attribute_1_1_attribute_2_1_attribute_3_1', u'attribute_1_1', u'attribute_3_1'])
def test_update_missing_no_error(self): """ Tests that updating a previously loaded database with some missing definitions does not throw an error. """ # Setup defs = [DEF_1, DEF_2, DEF_3] types_db.update_database(defs) # Test new_defs = [DEF_4] types_db.update_database(new_defs) # Verify all_collection_names = types_db.all_type_collection_names() self.assertEqual(len(defs) + len(new_defs), len(all_collection_names)) # old are not deleted for d in defs: self.assertTrue(types_db.unit_collection_name(d.id) in all_collection_names) # Quick sanity check on the indexes collection = types_db.type_units_collection(d.id) all_indexes = collection.index_information() total_index_count = 1 + 1 + len(d.search_indexes) # _id + unit key + all search self.assertEqual(total_index_count, len(all_indexes))
def test_update_no_changes(self): """ Tests the common use case of loading type definitions that have been loaded already and have not changed. """ # Setup defs = [DEF_1, DEF_2, DEF_3, DEF_4] types_db.update_database(defs) # Test same_defs = [DEF_4, DEF_3, DEF_2, DEF_1] # no real reason for this, just felt better than using the previous list types_db.update_database(same_defs) # Verify all_collection_names = types_db.all_type_collection_names() self.assertEqual(len(same_defs), len(all_collection_names)) for d in defs: self.assertTrue(types_db.unit_collection_name(d.id) in all_collection_names) # Quick sanity check on the indexes collection = types_db.type_units_collection(d.id) all_indexes = collection.index_information() total_index_count = 1 + 1 + len(d.search_indexes) # _id + unit key + all search self.assertEqual(total_index_count, len(all_indexes))
def test_pulp_manage_db_loads_types(self, listdir_mock): """ Test calling pulp-manage-db imports types on a clean types database. """ manage.main() all_collection_names = types_db.all_type_collection_names() self.assertEqual(len(all_collection_names), 1) self.assertEqual(['units_test_type_id'], all_collection_names) # Let's make sure we loaded the type definitions correctly db_type_definitions = types_db.all_type_definitions() self.assertEquals(len(db_type_definitions), 1) test_json = json.loads(_test_type_json) for attribute in ['id', 'display_name', 'description', 'unit_key', 'search_indexes']: self.assertEquals(test_json['types'][0][attribute], db_type_definitions[0][attribute]) # Now let's ensure that we have the correct indexes collection = types_db.type_units_collection('test_type_id') indexes = collection.index_information() self.assertEqual(indexes['_id_']['key'], [(u'_id', 1)]) # Make sure we have the unique constraint on all three attributes self.assertEqual(indexes['attribute_1_1_attribute_2_1_attribute_3_1']['unique'], True) self.assertEqual(indexes['attribute_1_1_attribute_2_1_attribute_3_1']['dropDups'], False) self.assertEqual(indexes['attribute_1_1_attribute_2_1_attribute_3_1']['key'], [(u'attribute_1', 1), (u'attribute_2', 1), (u'attribute_3', 1)]) # Make sure we indexes attributes 1 and 3 self.assertEqual(indexes['attribute_1_1']['dropDups'], False) self.assertEqual(indexes['attribute_1_1']['key'], [(u'attribute_1', 1)]) self.assertEqual(indexes['attribute_3_1']['dropDups'], False) self.assertEqual(indexes['attribute_3_1']['key'], [(u'attribute_3', 1)]) # Make sure we only have the indexes that we've hand inspected here self.assertEqual(indexes.keys(), [u'_id_', u'attribute_1_1_attribute_2_1_attribute_3_1', u'attribute_1_1', u'attribute_3_1'])
def test_all_type_collection_names_no_entries(self): """ Tests listing all type collections when there are none in the database. """ # Test names = types_db.all_type_collection_names() # Verify self.assertTrue(names is not None) self.assertEqual(0, len(names))
def test_pulp_manage_db_loads_types(self, initialize, start_logging_mock, listdir_mock, mock_drop_indices): """ Test calling pulp-manage-db imports types on a clean types database. """ manage.main() all_collection_names = types_db.all_type_collection_names() self.assertFalse(mock_drop_indices.called) self.assertEqual(len(all_collection_names), 1) self.assertEqual(['units_test_type_id'], all_collection_names) # Let's make sure we loaded the type definitions correctly db_type_definitions = types_db.all_type_definitions() self.assertEquals(len(db_type_definitions), 1) test_json = json.loads(_test_type_json) for attribute in [ 'id', 'display_name', 'description', 'unit_key', 'search_indexes' ]: self.assertEquals(test_json['types'][0][attribute], db_type_definitions[0][attribute]) # Now let's ensure that we have the correct indexes collection = types_db.type_units_collection('test_type_id') indexes = collection.index_information() self.assertEqual(indexes['_id_']['key'], [(u'_id', 1)]) # Make sure we have the unique constraint on all three attributes self.assertEqual( indexes['attribute_1_1_attribute_2_1_attribute_3_1']['unique'], True) self.assertEqual( indexes['attribute_1_1_attribute_2_1_attribute_3_1']['dropDups'], False) self.assertEqual( indexes['attribute_1_1_attribute_2_1_attribute_3_1']['key'], [(u'attribute_1', 1), (u'attribute_2', 1), (u'attribute_3', 1)]) # Make sure we indexes attributes 1 and 3 self.assertEqual(indexes['attribute_1_1']['dropDups'], False) self.assertEqual(indexes['attribute_1_1']['key'], [(u'attribute_1', 1)]) self.assertEqual(indexes['attribute_3_1']['dropDups'], False) self.assertEqual(indexes['attribute_3_1']['key'], [(u'attribute_3', 1)]) # Make sure we only have the indexes that we've hand inspected here self.assertEqual(indexes.keys(), [ u'_id_', u'attribute_1_1_attribute_2_1_attribute_3_1', u'attribute_1_1', u'attribute_3_1' ]) initialize.assert_called_once_with(max_timeout=1)
def test_all_type_collection_names(self): """ Tests listing all type collections. """ # Setup type_def = TypeDefinition('rpm', 'RPM', 'RPM Packages', ['name'], ['name'], []) types_db._create_or_update_type(type_def) # Test all_names = types_db.all_type_collection_names() # Verify self.assertEqual(1, len(all_names)) self.assertEqual(types_db.unit_collection_name(type_def.id), all_names[0])
def test_update_clean_database(self): """ Tests calling update on a completely clean types database. """ # Test defs = [DEF_1, DEF_2, DEF_3, DEF_4] types_db.update_database(defs) # Verify all_collection_names = types_db.all_type_collection_names() self.assertEqual(len(defs), len(all_collection_names)) for d in defs: self.assertTrue(types_db.unit_collection_name(d.id) in all_collection_names) # Quick sanity check on the indexes collection = types_db.type_units_collection(d.id) all_indexes = collection.index_information() total_index_count = 1 + 1 + len(d.search_indexes) # _id + unit key + all search self.assertEqual(total_index_count, len(all_indexes))