def test_add_column(self): sync_table(FirstModel) meta_columns = _get_table_metadata(FirstModel).columns self.assertEqual(set(meta_columns), set(FirstModel._columns)) sync_table(SecondModel) meta_columns = _get_table_metadata(FirstModel).columns self.assertEqual(set(meta_columns), set(SecondModel._columns)) sync_table(ThirdModel) meta_columns = _get_table_metadata(FirstModel).columns self.assertEqual(len(meta_columns), 5) self.assertEqual(len(ThirdModel._columns), 4) self.assertIn('fourth_key', meta_columns) self.assertNotIn('fourth_key', ThirdModel._columns) self.assertIn('blah', ThirdModel._columns) self.assertIn('blah', meta_columns) sync_table(FourthModel) meta_columns = _get_table_metadata(FirstModel).columns self.assertEqual(len(meta_columns), 5) self.assertEqual(len(ThirdModel._columns), 4) self.assertIn('fourth_key', meta_columns) self.assertNotIn('fourth_key', FourthModel._columns) self.assertIn('renamed', FourthModel._columns) self.assertNotIn('renamed', meta_columns) self.assertIn('blah', meta_columns)
def test_sync_table_works_with_primary_keys_only_tables(self): sync_table(PrimaryKeysOnlyModel) # blows up with DoesNotExist if table does not exist table_meta = management._get_table_metadata(PrimaryKeysOnlyModel) self.assertIn('LeveledCompactionStrategy', table_meta.as_cql_query()) PrimaryKeysOnlyModel.__options__['compaction']['class'] = 'SizeTieredCompactionStrategy' sync_table(PrimaryKeysOnlyModel) table_meta = management._get_table_metadata(PrimaryKeysOnlyModel) self.assertIn('SizeTieredCompactionStrategy', table_meta.as_cql_query())
def test_sync_index_case_sensitive(self): """ Tests the default table creation, and ensures the table_name is created correctly and surfaced correctly in table metadata @since 3.1 @jira_ticket PYTHON-337 @expected_result table_name is lower case @test_category object_mapper """ sync_table(IndexCaseSensitiveModel) table_meta = management._get_table_metadata(IndexCaseSensitiveModel) self.assertIsNotNone(management._get_index_name_by_column(table_meta, 'second_key')) # index already exists sync_table(IndexCaseSensitiveModel) table_meta = management._get_table_metadata(IndexCaseSensitiveModel) self.assertIsNotNone(management._get_index_name_by_column(table_meta, 'second_key'))
def test_table_property_update(self): ModelWithTableProperties.__options__['bloom_filter_fp_chance'] = 0.66778 ModelWithTableProperties.__options__['comment'] = 'xirAkRWZVVvsmzRvXamiEcQkshkUIDINVJZgLYSdnGHweiBrAiJdLJkVohdRy' ModelWithTableProperties.__options__['gc_grace_seconds'] = 96362 ModelWithTableProperties.__options__['read_repair_chance'] = 0.2989 ModelWithTableProperties.__options__['dclocal_read_repair_chance'] = 0.12732 sync_table(ModelWithTableProperties) table_options = management._get_table_metadata(ModelWithTableProperties).options self.assertDictContainsSubset(ModelWithTableProperties.__options__, table_options)
def test_alter_options(self): class AlterTable(Model): __options__ = { 'compaction': { 'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy', 'sstable_size_in_mb': '64' } } user_id = columns.UUID(primary_key=True) name = columns.Text() drop_table(AlterTable) sync_table(AlterTable) table_meta = _get_table_metadata(AlterTable) self.assertRegexpMatches(table_meta.export_as_string(), ".*'sstable_size_in_mb': '64'.*") AlterTable.__options__['compaction']['sstable_size_in_mb'] = '128' sync_table(AlterTable) table_meta = _get_table_metadata(AlterTable) self.assertRegexpMatches(table_meta.export_as_string(), ".*'sstable_size_in_mb': '128'.*")
def test_alter_actually_alters(self): tmp = copy.deepcopy(LeveledCompactionTestTable) drop_table(tmp) sync_table(tmp) tmp.__options__ = { 'compaction': { 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' } } sync_table(tmp) table_meta = _get_table_metadata(tmp) self.assertRegexpMatches(table_meta.export_as_string(), '.*SizeTieredCompactionStrategy.*')
def test_sync_indexed_set(self): """ Tests that models that have container types with indices can be synced. @since 3.2 @jira_ticket PYTHON-533 @expected_result table_sync should complete without a server error. @test_category object_mapper """ sync_table(TestIndexSetModel) table_meta = management._get_table_metadata(TestIndexSetModel) self.assertIsNotNone(management._get_index_name_by_column(table_meta, 'int_set')) self.assertIsNotNone(management._get_index_name_by_column(table_meta, 'int_list')) self.assertIsNotNone(management._get_index_name_by_column(table_meta, 'text_map')) self.assertIsNotNone(management._get_index_name_by_column(table_meta, 'mixed_tuple'))
def test_set_table_properties(self): sync_table(ModelWithTableProperties) expected = {'bloom_filter_fp_chance': 0.76328, 'comment': 'TxfguvBdzwROQALmQBOziRMbkqVGFjqcJfVhwGR', 'gc_grace_seconds': 2063, 'read_repair_chance': 0.17985, # For some reason 'dclocal_read_repair_chance' in CQL is called # just 'local_read_repair_chance' in the schema table. # Source: https://issues.apache.org/jira/browse/CASSANDRA-6717 # TODO: due to a bug in the native driver i'm not seeing the local read repair chance show up # 'local_read_repair_chance': 0.50811, } options = management._get_table_metadata(ModelWithTableProperties).options self.assertEqual(dict([(k, options.get(k)) for k in expected.keys()]), expected)
def test_all_leveled_options(self): class AllLeveledOptionsModel(Model): __options__ = { 'compaction': { 'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy', 'sstable_size_in_mb': '64' } } cid = columns.UUID(primary_key=True) name = columns.Text() drop_table(AllLeveledOptionsModel) sync_table(AllLeveledOptionsModel) table_meta = _get_table_metadata(AllLeveledOptionsModel) self._verify_options(table_meta, AllLeveledOptionsModel.__options__)
def test_all_size_tiered_options(self): class AllSizeTieredOptionsModel(Model): __options__ = { 'compaction': { 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'bucket_low': '.3', 'bucket_high': '2', 'min_threshold': '2', 'max_threshold': '64', 'tombstone_compaction_interval': '86400' } } cid = columns.UUID(primary_key=True) name = columns.Text() drop_table(AllSizeTieredOptionsModel) sync_table(AllSizeTieredOptionsModel) table_meta = _get_table_metadata(AllSizeTieredOptionsModel) self._verify_options(table_meta, AllSizeTieredOptionsModel.__options__)