Exemple #1
0
        public async Task It_should_rollback_both_entity_and_change_log_within_sync_flow()
        {
            // Given
            var id        = Guid.NewGuid();
            var user      = new UserAggregate(id, "Bond");
            var changeLog = user.Changes.GetUncommittedChanges().ToList();

            using var db = NewDbContext();
            db.Users.Add(user);
            await db.SaveChangesAsync();

            // When
            using (var tran = TransactionExt.Begin(IsolationLevel.ReadCommitted))
            {
                user.Rename("James Bond");
                db.SaveChanges();
            }

            // Then
            db.DetachAll();
            var savedUser = await db.Users.FindAsync(id);

            var savedChangeLog = await LoadChangeLog(user.StreamId);

            savedUser.Should().BeEquivalentTo(new UserAggregate(id, "Bond"));
            savedChangeLog.Should().HaveSameCount(changeLog);
            for (var i = 0; i < savedChangeLog.Count; i++)
            {
                savedChangeLog[i].Should().BeEquivalentTo((object)changeLog[i]);
                savedChangeLog[i].Should().BeOfType(changeLog[i].GetType());
            }
        }
 public static void Encode(IByteWriter stream, TransactionExt encodedTransactionExt) {
 XdrEncoding.EncodeInt32(encodedTransactionExt.Discriminant, stream);
 switch (encodedTransactionExt.Discriminant) {
 case 0:
 break;
 }
 }
        public static Transaction Decode(XdrDataInputStream stream)
        {
            Transaction decodedTransaction = new Transaction();

            decodedTransaction.SourceAccount = AccountID.Decode(stream);
            decodedTransaction.Fee           = Uint32.Decode(stream);
            decodedTransaction.SeqNum        = SequenceNumber.Decode(stream);
            int TimeBoundsPresent = stream.ReadInt();

            if (TimeBoundsPresent != 0)
            {
                decodedTransaction.TimeBounds = TimeBounds.Decode(stream);
            }

            decodedTransaction.Memo = Memo.Decode(stream);
            int operationssize = stream.ReadInt();

            decodedTransaction.Operations = new Operation[operationssize];

            for (int i = 0; i < operationssize; i++)
            {
                decodedTransaction.Operations[i] = Operation.Decode(stream);
            }

            decodedTransaction.Ext = TransactionExt.Decode(stream);
            return(decodedTransaction);
        }
        public static void Encode(XdrDataOutputStream stream, Transaction encodedTransaction)
        {
            AccountID.Encode(stream, encodedTransaction.SourceAccount);
            Uint32.Encode(stream, encodedTransaction.Fee);
            SequenceNumber.Encode(stream, encodedTransaction.SeqNum);

            if (encodedTransaction.TimeBounds != null)
            {
                stream.WriteInt(1);
                TimeBounds.Encode(stream, encodedTransaction.TimeBounds);
            }
            else
            {
                stream.WriteInt(0);
            }

            Memo.Encode(stream, encodedTransaction.Memo);
            int operationssize = encodedTransaction.Operations.Length;

            stream.WriteInt(operationssize);

            for (int i = 0; i < operationssize; i++)
            {
                Operation.Encode(stream, encodedTransaction.Operations[i]);
            }

            TransactionExt.Encode(stream, encodedTransaction.Ext);
        }
 public static void Encode(XdrDataOutputStream stream, TransactionExt encodedTransactionExt)
 {
     stream.WriteInt(encodedTransactionExt.Discriminant);
     switch (encodedTransactionExt.Discriminant)
     {
         case 0:
             break;
     }
 }
Exemple #6
0
 public static void Encode(IByteWriter stream, TransactionExt encodedTransactionExt)
 {
     XdrEncoding.EncodeInt32(encodedTransactionExt.Discriminant, stream);
     switch (encodedTransactionExt.Discriminant)
     {
     case 0:
         break;
     }
 }
 public static TransactionExt Decode(XdrDataInputStream stream)
 {
     var decodedTransactionExt = new TransactionExt();
     var discriminant = stream.ReadInt();
     decodedTransactionExt.Discriminant = discriminant;
     switch (decodedTransactionExt.Discriminant)
     {
         case 0:
             break;
     }
     return decodedTransactionExt;
 }
Exemple #8
0
            public static TransactionExt Decode(IByteReader stream)
            {
                TransactionExt decodedTransactionExt = new TransactionExt();

                decodedTransactionExt.Discriminant = XdrEncoding.DecodeInt32(stream);
                switch (decodedTransactionExt.Discriminant)
                {
                case 0:
                    break;
                }
                return(decodedTransactionExt);
            }
Exemple #9
0
        protected async Task InsertUserInTransaction(UserAggregate user, Task beforeTransactionDone)
        {
            await Task.Yield();

            using var transaction = TransactionExt.BeginAsync(IsolationLevel.ReadCommitted);
            using var db          = NewDbContext();
            db.Users.Add(user);
            await db.SaveChangesAsync();

            await beforeTransactionDone;

            transaction.Complete();
        }
Exemple #10
0
        public static Transaction Decode(IByteReader stream)
        {
            Transaction decodedTransaction = new Transaction();

            decodedTransaction.SourceAccount = AccountID.Decode(stream);
            decodedTransaction.Fee           = Uint32.Decode(stream);
            decodedTransaction.SeqNum        = SequenceNumber.Decode(stream);
            int timeBoundsPresent = XdrEncoding.DecodeInt32(stream);

            if (timeBoundsPresent != 0)
            {
                decodedTransaction.TimeBounds = TimeBounds.Decode(stream);
            }
            decodedTransaction.Memo = Memo.Decode(stream);
            int operationssize = XdrEncoding.DecodeInt32(stream);

            decodedTransaction.Operations = new Operation[operationssize];
            for (int i = 0; i < operationssize; i++)
            {
                decodedTransaction.Operations[i] = Operation.Decode(stream);
            }
            decodedTransaction.Ext = TransactionExt.Decode(stream);
            return(decodedTransaction);
        }
Exemple #11
0
        public static void Encode(IByteWriter stream, Transaction encodedTransaction)
        {
            AccountID.Encode(stream, encodedTransaction.SourceAccount);
            Uint32.Encode(stream, encodedTransaction.Fee);
            SequenceNumber.Encode(stream, encodedTransaction.SeqNum);
            if (encodedTransaction.TimeBounds != null)
            {
                XdrEncoding.EncodeInt32(1, stream);
                TimeBounds.Encode(stream, encodedTransaction.TimeBounds);
            }
            else
            {
                XdrEncoding.EncodeInt32(0, stream);
            }
            Memo.Encode(stream, encodedTransaction.Memo);
            int operationssize = encodedTransaction.Operations.Length;

            XdrEncoding.EncodeInt32(operationssize, stream);
            for (int i = 0; i < operationssize; i++)
            {
                Operation.Encode(stream, encodedTransaction.Operations[i]);
            }
            TransactionExt.Encode(stream, encodedTransaction.Ext);
        }
 public static TransactionExt Decode(IByteReader stream) {
   TransactionExt decodedTransactionExt = new TransactionExt();
 decodedTransactionExt.Discriminant = XdrEncoding.DecodeInt32(stream);
 switch (decodedTransactionExt.Discriminant) {
 case 0:
 break;
 }
   return decodedTransactionExt;
 }