def test_meta_is_immuatable_after_commit(self): n = models.Node('lunr', 12, volume_type=self.volume_type, hostname='127.0.0.1', port=8080) # this works here because the instance is new n.meta.update(key1='val1') expected = {'key1': 'val1'} self.assertEquals(expected, n.meta) self.db.add(n) self.db.commit() n = self.db.query(models.Node).filter_by(name='lunr').first() self.assertEquals(expected, n.meta) # when you load an object from the database the meta attribute is # not directly mutable, you have to use _meta try: n.meta.update(key2='val2') except Exception: pass else: raise AssertionError('node meta should not support item ' 'assignment directly') # assignment still works n.meta = dict(n.meta) n.meta.update(key2='val2') self.db.commit() n = self.db.query(models.Node).filter_by(name='lunr').first() expected = {'key1': 'val1', 'key2': 'val2'} self.assertEquals(expected, n.meta)
def test_default_empty_meta(self): n = models.Node('lunr', 12, volume_type=self.volume_type, hostname='127.0.0.1', port=8080) self.assertEquals({}, n.meta) self.db.add(n) self.db.commit() self.assertEquals({}, n.meta)
def test_set_meta_after_init(self): n = models.Node('lunr', 12, volume_type=self.volume_type, hostname='127.0.0.1', port=8080) n.meta = {'key1': 'val1'} expected = {'key1': 'val1'} self.assertEquals(expected, n.meta) self.db.add(n) self.db.commit() n = self.db.query(models.Node).filter_by(name='lunr').first() self.assertEquals(expected, n.meta)
def test_update_meta_after_commit(self): n = models.Node('lunr', 8, volume_type=self.volume_type, hostname='test', port=8080) self.db.add(n) self.db.commit() n = self.db.query(models.Node).filter_by(name='lunr').first() # use the _meta property to update isntance meta n._meta.update(key1='val1') self.assertEquals({'key1': 'val1'}, n.meta) self.db.commit() n = self.db.query(models.Node).filter_by(name='lunr').first() self.assertEquals({'key1': 'val1'}, n.meta)
def test_create_default(self): n = models.Node() self.assert_(isinstance(dict(n), dict)) self.db.add(n) self.db.commit() n = self.db.query(models.Node).first() self.assert_(isinstance(dict(n), dict)) expected = { 'size': 0, 'port': 8081, 'hostname': 'localhost', 'storage_hostname': 'localhost', 'storage_port': 3260, 'volume_type_name': models.DEFAULT_VOLUME_TYPE, 'affinity_group': '', } for k, v in expected.items(): err_msg = '%s != %s (%s)' % (v, getattr(n, k), k) self.assertEquals(v, getattr(n, k), err_msg)
def test_calculate_storage_used(self): a = models.Account() n = models.Node('lunr', 12, volume_type=self.volume_type, hostname='127.0.0.1', port=8080) v = models.Volume(account=a, size=1, volume_type=self.volume_type, node=n) self.db.add_all([a, n, v]) self.db.commit() n.calc_storage_used() self.assertEquals(1, n.storage_used) v.status = 'DELETED' self.db.add(v) n.calc_storage_used() self.assertEquals(0, n.storage_used)
def test_active_backup_count(self): vt = models.VolumeType('lunr') a = models.Account() n = models.Node('lunr', 10, volume_type=vt, hostname='127.0.0.1', port=8080) v = models.Volume(account=a, size=1, volume_type=vt, node=n) b1 = models.Backup(volume=v, status='AVAILABLE') b2 = models.Backup(volume=v, status='AVAILABLE') b3 = models.Backup(volume=v, status='NOTAVAILABLE') b4 = models.Backup(volume=v, status='SOMETHING') b5 = models.Backup(volume=v, status='AVAILABLE') b6 = models.Backup(volume=v, status='AUDITING') b7 = models.Backup(volume=v, status='DELETED') self.db.add_all([a, n, v, b1, b2, b3, b4, b5, b6, b7]) self.db.commit() self.db.refresh(v) self.assertEquals(5, v.active_backup_count())