Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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()
Exemple #4
0
 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
Exemple #7
0
 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
Exemple #8
0
 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()
Exemple #9
0
    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)
Exemple #12
0
 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
Exemple #14
0
 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
Exemple #16
0
 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
Exemple #17
0
 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/"
Exemple #19
0
 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)
Exemple #20
0
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
Exemple #27
0
    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