def test_data_setter(self): with Transaction() as tran: instance = Dummy.objects.create() old_data = deepcopy(instance.data) old_computed = deepcopy(instance.computed) old_transaction_id = tran.id with tran: with ForceChanger(instance): instance.uri = "/uri/1/" instance.save() with Transaction(): instance_old = instance instance = Dummy.objects.get(id=instance.id) assert id(instance_old) != id(instance) assert instance.computed["uri"] == "/uri/1/" old_computed["uri"] = "/uri/1/" old_computed["uri_hash"] = json_encode(instance.uri_hash) old_computed["_mjson_revert_patch"] = { "data": {}, "status": 10, "version": 1, "computed": { "uri": None, "uri_hash": None }, "computed_uri_hash": None, "last_transaction": old_transaction_id, } assert instance.computed == old_computed instance.data = {"temp": 1} instance.save() with Transaction(): instance_old = instance instance = Dummy.objects.get(id=instance.id) assert id(instance_old) != id(instance) assert instance.data["temp"] == 1 old_data["temp"] = 1 assert instance.data == old_data instance.data = {"temp": 0} instance.save() with Transaction(): instance_old = instance instance = Dummy.objects.get(id=instance.id) assert id(instance_old) != id(instance) assert instance.data["temp"] == 0 old_data["temp"] = 0 assert instance.data == old_data instance.monitors.append(0) instance.save() with Transaction(): instance_old = instance instance = Dummy.objects.get(id=instance.id) assert id(instance_old) != id(instance) assert instance.data["monitors"] == [0] old_data["monitors"] = [0] assert instance.data == old_data
def test_nested_transaction(self): with Transaction(): with Transaction(): Dummy.objects.create() with self.assertRaises(AssertionError): with ReadonlyTransaction(): with Transaction(): Dummy.objects.create() with Transaction(): with ReadonlyTransaction(): assert Dummy.objects.count() == 1 with Transaction(): with Transaction(): with Transaction(): with Transaction(): with Transaction(): with ReadonlyTransaction(): assert Dummy.objects.count() == 1 Dummy.objects.create() assert Dummy.objects.count() == 2 with ReadonlyTransaction(): assert Dummy.objects.count() == 2 Dummy.objects.create() with Transaction(): assert Dummy.objects.count() == 3 with ReadonlyTransaction(): assert Dummy.objects.count() == 3 with ReadonlyTransaction(): assert Dummy.objects.count() == 3
def test_optimistic_lock(self): with Transaction(): Dummy().save() with Transaction() as tran1: instance1 = Model.objects.get(type__in=Dummy.types) with Transaction() as tran2: instance2 = Model.objects.get(type__in=Dummy.types) assert instance1 == instance2 assert id(instance1) != id(instance2) assert instance1.version == instance2.version == 1 with tran1: with ForceChanger(instance1): instance1.uri = "/uri/patent/usa/granted/1/" assert instance1.version == 1 instance1.save() assert instance1.version == 1 assert instance1.version == 2 with self.assertRaises(OptimisticLockException): with tran2: with ForceChanger(instance2): instance2.uri = "/uri/patent/usa/granted/2/" assert instance2.version == 1 instance2.save()
def test(self): with Transaction(): instance = Dummy.objects.create() instance.bool_test = 1 == 1 assert instance.bool_test is True assert instance.data["bool_test"] == 1 instance.bool_test = 1 == 0 assert instance.bool_test is False instance.bool_test = 1 assert instance.bool_test is True instance.bool_test = 0 assert instance.bool_test is False instance.bool_test = "True" assert instance.bool_test is True instance.bool_test = "False" instance.bool_test = False assert instance.data["bool_test"] == 0 assert instance.bool_test is False instance.save() with Transaction(): instance = Dummy.objects.order_by("-id").first() assert instance.data["bool_test"] == 0 assert Dummy.objects.filter(bool_test=False).count() == 1 assert Dummy.objects.filter(bool_test=0).count() == 1 assert Dummy.objects.filter(bool_test=True).count() == 0 assert Dummy.objects.filter(bool_test=1).count() == 0
def test_history2(self): with Transaction(): assert ModelHistory.objects.count() == 0 instance = Dummy.objects.create() assert ModelHistory.objects.count() == 0 with ForceChanger(instance): instance.uri = "/uri/1/" instance.save() assert ModelHistory.objects.count() == 0 assert ModelHistory.objects.count() == 1 - 1 with Transaction(): instance = Model.objects.get(id=instance.id) with ForceChanger(instance): instance.uri = "/uri/2/" instance.save() assert ModelHistory.objects.count() == 1 - 1 assert ModelHistory.objects.count() == 2 - 1 with Transaction(): instance = Model.objects.get(id=instance.id) instance.delete() assert ModelHistory.objects.count() == 2 - 1 assert ModelHistory.objects.count() == 3 - 1 with Transaction(): instance = Model.objects.get_deleted(id=instance.id) instance._destroy() assert ModelHistory.objects.count() == 4 - 1 assert ModelHistory.objects.count() == 4 - 1
def test_model_version(self): with Transaction(): instance = Dummy() assert instance.version == 0 with ForceChanger(instance): instance.uri = "/uri/patent/usa/granted/1/" assert instance.uri == "/uri/patent/usa/granted/1/" assert instance.version == 0 instance.save() assert instance.version == 1 with Transaction(): instance2 = Model.objects.get(id=instance.id) assert instance2.version == 1 with ForceChanger(instance2): instance2.uri = "/uri/patent/usa/granted/2/" assert instance2.version == 1 instance2.save() assert instance2.version == 2 with Transaction() as tran: instance3 = Model.objects.get(type__in=Dummy.types) assert instance3.version == 2 tran.remove(instance3) instance_db = Model.objects.get(id=instance3.id) assert id(instance_db) != id(instance3) assert instance_db.version == 2 instance_db.delete() assert instance_db.version == 2 assert instance_db.version == 3 assert instance3.version == 2
def test_transaction_checkin2(self): with Transaction(): human = User.objects.create() human2 = User.objects.create() actor = DummyActor.objects.create(user=human) actor2 = DummyActor.objects.create() with Transaction() as tran: tran.checkin(actor) assert tran.login_user == human assert tran.checkin_actor == actor tran.logout() assert tran.login_user is None assert tran.checkin_actor is None with Transaction() as tran: tran.login(human2) assert tran.login_user == human2 assert tran.checkin_actor is None tran.checkin(actor) assert tran.login_user == human2 assert tran.checkin_actor == actor tran.checkout() assert tran.login_user == human2 assert tran.checkin_actor is None tran.checkin(actor2) assert tran.login_user == human2 assert tran.checkin_actor == actor2 tran.checkout() assert tran.login_user == human2 assert tran.checkin_actor is None human2.logout() assert tran.login_user is None assert tran.checkin_actor is None
def test_model_modfiy_with_no_setter(self): with Transaction(): instance = Dummy.objects.create() with self.assertRaises(AssertionError): with Transaction(): instance = Dummy.objects.get(id=instance.id) instance.computed["uri"] = "/uri/patent/usa/granted/1/" instance.temp = 1 instance.save()
async def _test_err_tx(self): with self.assertRaises(AttributeError): Transaction(99, 'debit', 'EUR', 999, db=db) tx = Transaction(99, TransactionOperation.credit, 'EUR', 999, db=db) with self.assertRaises(AttributeError): await tx.set_status('processing') with self.assertRaises(AttributeError): Transaction(99, TransactionOperation.credit, 'RUB', 999, db=db)
def test(self): with Transaction(): instance = Countable() assert instance.count is None with self.assertRaises(AssertionError): with Transaction(): instance = Countable() assert instance.count is None instance.save()
def test_transaction2(self): with Transaction(): qs = Dummy.objects.all() qs._fetch_all() assert qs._result_cache is not None # django admin 을 위해 Transaction 안에서 생성되었다가 트랜잭션 밖에서 filter 하는 queryset 을 허용 # template rendering 은 view 함수 밖에서 실행되는 듯 함 assert len(qs.filter(version=1)) == 0 with Transaction(): with self.assertRaises(AssertionError): qs.filter(version=1)
def test(self): with Transaction(): instance = Dummy() del instance.data["temp"] instance.save() assert "temp" not in instance.data assert Dummy.objects.filter(temp=None).count() == 0 with Transaction(): instance = Dummy.objects.order_by("-id").first() assert "temp" in instance.data instance.save() assert Dummy.objects.filter(temp=None).count() == 1
def test_history4(self): with Transaction(): assert ModelHistory.objects.count() == 0 instance = Dummy.objects.create() assert ModelHistory.objects.count() == 0 with Transaction(): instance = Model.objects.get(id=instance.id) with ForceChanger(instance): instance.uri = "/uri/1/" instance.save() assert ModelHistory.objects.count() == 0 assert ModelHistory.objects.count() == 1
def test_transaction_checkin(self): with Transaction(): human = User.objects.create() actor = DummyActor.objects.create(user=human) dummy = Dummy.objects.create() with Transaction(checkin_actor=actor) as tran: assert tran.checkin_actor == actor assert id(tran.checkin_actor) == id(actor) assert tran.login_user == human assert TransactionManager.get_checkin_actor() == actor with self.assertRaises(AssertionError): with Transaction(checkin_actor=dummy): pass
def test(self): with Transaction(): instance = Dummy.objects.create() assert instance.status == Status.NEW instance.set_working() assert instance.status == Status.WORKING assert instance.status == Status.WORKING with Transaction(): instance = Dummy.objects.get(id=instance.id) assert instance.status == Status.WORKING instance.rollback_working() assert instance.status == Status.NORMAL assert instance.status == Status.NORMAL
def test(self): with Transaction(): uploaded_file = get_uploaded_file("base/apps.py") file_hash = compute_file_hash(uploaded_file) Blob.objects.create(file=uploaded_file, file_hash=file_hash) with Transaction(): blob = Blob.objects.order_by("-id").first() assert blob._file is None file = blob.file assert isinstance(file, DjangoFile) file_hash = compute_file_hash(file) assert blob.uname == file_hash file2 = blob.file file_hash2 = compute_file_hash(file2) assert file_hash2 == file_hash
def test(self): with Transaction(): instance = Dummy.objects.first("-id") assert instance assert instance.status == Status.WORKING assert Dummy.objects.filter(status=Status.NORMAL).count() == 0 assert Dummy.objects.filter(status=Status.WORKING).count() == 1
def test_status(self): with Transaction() as tran: instance = Dummy(raw={"patent": "aaa"}) assert instance.status is Status.NEW with ForceChanger(instance): instance.uri = "/uri/patent/usa/granted/1/" assert instance.uri == "/uri/patent/usa/granted/1/" assert instance.status is Status.NEW instance.save() with tran: assert instance.status is Status.NORMAL assert instance.uri == "/uri/patent/usa/granted/1/" assert instance.status is Status.NORMAL assert instance.uri == "/uri/patent/usa/granted/1/" with ForceChanger(instance): instance.uri = "/uri/patent/usa/granted/2/" assert instance.uri == "/uri/patent/usa/granted/2/" assert instance.status is Status.DIRTY instance.save() assert instance.status is Status.DIRTY assert instance.uri == "/uri/patent/usa/granted/2/" instance.delete() with tran: assert instance.status is Status.DELETED with self.assertRaises(AssertionError): with ForceChanger(instance): instance.uri = "/uri/patent/usa/granted/3/" assert instance.uri == "/uri/patent/usa/granted/2/"
def test_get_queryset(self): with Transaction(): instance = Dummy.objects.create() assert Model.objects.get(id=instance.id) assert Dummy.objects.get(id=instance.id) with self.assertRaises(Model.DoesNotExist): Nothing.objects.get(id=instance.id)
def init_db(): from django.contrib.auth import get_user_model from django.conf import settings from base.utils import console_log User = get_user_model() admin = User.objects.filter(username="******").order_by("-id").first() if admin is None: admin = User() admin.username = "******" admin.set_password(settings.PASSWORD) admin.is_superuser = True admin.is_staff = True admin.save() console_log("admin created") else: console_log("admin already created. so passed") return False from base.transaction import Transaction from server.specs.spec_db_initialize import InitializeDBSpec from django.db import IntegrityError try: with Transaction(): InitializeDBSpec().setUp() except IntegrityError: console_log("InitializeDBSpec already called. so passed") return False return True
def test(self): with Transaction(): instance = Dummy.objects.create() instance.set_working() instance.save() assert instance.status == Status.WORKING
def testTransaction(self): tx = Transaction() tx.addInput(b'genesis', 0) assert tx.numInputs() == 1 opGenesis = Transaction.Output(5, genesisPublicKey) tx.addOutput(opGenesis.value, opGenesis.address) tx.addOutput(5, alicePublicKey) tx.addOutput(10, bobPublicKey) assert tx.numOutputs() == 3 tx.removeInput(0) assert tx.numInputs() == 0 tx.addInput(b'genesis', 0) signature0 = sign(genesisPrivateKey, tx, 0) tx.addSignature(signature0, 0) tx.finalize() print(tx.hash) print(hash(tx.getInput(0))) print(tx.getInput(0).to_dict()) print(hash(tx.getOutput(0))) print(tx.getOutput(0).to_dict()) print(verify(genesisPublicKey, binascii.hexlify(signature0).decode('ascii'), tx.getRawDataToSign(0)))
def test_transaction1(self): qs = Dummy.objects.all() qs._fetch_all() assert qs._result_cache is not None with self.assertRaises(AssertionError): with Transaction(): qs.filter(version=1)
def test(self): with Transaction(): dummy = Dummy.objects.create() with ReadonlyTransaction(): dummy1 = Dummy.objects.first("-id") with self.assertRaises(AssertionError): dummy1.temp = 5
def test(self): with Transaction(): instance = Dummy.objects.create() assert instance.test_status is None instance.test_status = Status.NORMAL assert instance.test_status is Status.NORMAL instance.save() with Transaction(): instance = Dummy.objects.get(id=instance.id) assert instance.test_status is Status.NORMAL instance.test_status = Status.DIRTY assert instance._mjson_revert_patch["data"][ "test_status"] is Status.NORMAL.value assert instance.test_status is Status.DIRTY instance.test_status = None assert instance.test_status is None instance.save()
def test2(self): with Transaction(): instance = Dummy.objects.create() with self.assertRaises(AssertionError): instance.set_working() assert instance.status == Status.NORMAL
def test_try_transaction(self): assert Dummy.objects.count() == 0 with Transaction(): Dummy.objects.create() assert Dummy.objects.count() == 1 with TryTransaction(): assert Dummy.objects.create() assert Dummy.objects.count() == 1 with TryTransaction(): with Transaction(): assert Dummy.objects.create() assert Dummy.objects.count() == 2 assert Dummy.objects.count() == 2 assert Dummy.objects.count() == 1 with self.assertRaises(ZeroDivisionError): with TryTransaction(): a = 1 / 0
def test_create_db(self): with Transaction(): self.assertEqual(Model.objects.count(), 0) instance = Dummy() self.assertEqual(Model.objects.count(), 0) instance.save() self.assertEqual(Model.objects.count(), 1) assert instance.version == 1 self.assertEqual(Model.objects.count(), 1) assert instance.version == 1
def test_delete_with_new_status(self): with Transaction() as tran: instance = Dummy() assert instance.status == Status.NEW instance.delete() assert instance.status == Status.DELETED assert instance.id is not None with tran: instance._destroy() assert instance.id is None
def test_create_db2(self): with Transaction(): assert Model.objects.count() == 0 instance = Dummy() assert Model.objects.count() == 0 assert instance.version == 0 instance.save() assert Model.objects.count() == 1 assert instance.version == 1 assert Model.objects.count() == 1 assert instance.version == 1