/*
  * Creates a thread pool object.
  */
 public CnpOnlineRequestThreadPool(BaseCnpOnlineTest test, cnpTransactionInterface request, List <XMLVersion> versions, int maxThreads)
 {
     this.test       = test;
     this.request    = request;
     this.versions   = versions;
     this.maxThreads = maxThreads;
 }
 /*
  * Runs a test transaction for all versions.
  */
 public void RunCnpTest <T>(cnpTransactionInterface transaction)
 {
     foreach (var version in this.GetVersionsToRun())
     {
         Console.WriteLine("Running transaction test for " + version);
         this.RunCnpTest <T>(transaction, version);
     }
 }
        /*
         * Sends a transaction request asynchronously.
         */
        public async Task <T> SendTransactionAsync <T>(cnpTransactionInterface transaction, CancellationToken cancellationToken)
        {
            // Create the CNP Online request.
            var request = CreateRequest(transaction);

            // Send the request and return the response.
            var cnpResponse = await this.SendToCnpAsync(request, cancellationToken).ConfigureAwait(false);

            return(cnpResponse.GetOnlineResponse <T>());
        }
        /*
         * Sends a transaction request.
         */
        public T SendTransaction <T>(cnpTransactionInterface transaction)
        {
            // Create the CNP Online request.
            var request = CreateRequest(transaction);

            // Send the request and return the response.
            var cnpResponse = this.SendToCnp(request);

            return(cnpResponse.GetOnlineResponse <T>());
        }
        /*
         * Adds a transaction.
         */
        public void AddTransaction(cnpTransactionInterface transaction)
        {
            // Set the report group.
            if (transaction is transactionTypeWithReportGroup && ((transactionTypeWithReportGroup)transaction).reportGroup == null)
            {
                ((transactionTypeWithReportGroup)transaction).reportGroup = this.config.GetValue("reportGroup");
            }
            if (transaction is transactionTypeWithReportGroupAndPartial && ((transactionTypeWithReportGroupAndPartial)transaction).reportGroup == null)
            {
                ((transactionTypeWithReportGroupAndPartial)transaction).reportGroup = this.config.GetValue("reportGroup");
            }

            // Add the transaction.
            if (transaction is recurringTransactionType)
            {
                this.batchRequest.recurringTransaction.Add((recurringTransactionType)transaction);
            }
            else if (transaction is transactionType)
            {
                this.batchRequest.transaction.Add((transactionType)transaction);
            }

            // Add the sum.
            var type             = typeof(batchRequest);
            var numberSumName1   = "num" + transaction.GetType().Name.Substring(0, 1).ToUpper() + transaction.GetType().Name.Substring(1);
            var numberSumName2   = numberSumName1 + "s";
            var numberSumMember1 = type.GetProperty(numberSumName1);
            var numberSumMember2 = type.GetProperty(numberSumName2);

            if (numberSumMember1 != null)
            {
                numberSumMember1.SetValue(this.batchRequest, (int)numberSumMember1.GetValue(this.batchRequest) + 1);
            }
            if (numberSumMember2 != null)
            {
                numberSumMember2.SetValue(this.batchRequest, (int)numberSumMember2.GetValue(this.batchRequest) + 1);
            }

            // Add the amount.
            var amountSumName           = transaction.GetType().Name + "Amount";
            var amountSumMember         = type.GetProperty(amountSumName);
            var amountTransactionMember = transaction.GetType().GetProperty("amount");

            if (amountSumMember != null && amountTransactionMember != null && amountTransactionMember.GetValue(transaction) != null)
            {
                var existingAmount = (int)amountSumMember.GetValue(this.batchRequest);
                var amount         = (int)amountTransactionMember.GetValue(transaction);
                amountSumMember.SetValue(this.batchRequest, existingAmount + amount);
            }
        }
        /*
         * Runs a test transaction for a specific version.
         */
        public void RunCnpTest <T>(cnpTransactionInterface transaction, XMLVersion version)
        {
            // Create the configuration.
            var config = new ConfigManager(new Dictionary <string, string>
            {
                { "reportGroup", "Default Report Group" },
                { "username", "DOTNET" },
                { "timeout", "15000" },
                { "merchantId", "101" },
                { "password", "TESTCASE" },
                { "printxml", "true" },
                { "neuterAccountNums", "true" },
                { "version", version.ToString() }
            });

            // Create a CNP Online object.
            var cnpOnline = new CnpOnline(config);

            // Perform the sync transaction, and validate the response.
            try
            {
                var transactionResponse = cnpOnline.SendTransaction <T>(transaction);
                this.ValidateResponse <T>(transactionResponse, version);
            }
            catch (Exception exception)
            {
                this.ValidateException(exception, version);
            }


            // Perform the async transaction, and validate the response.
            try
            {
                var transactionResponse = cnpOnline.SendTransactionAsync <T>(transaction, new CancellationToken()).Result;
                this.ValidateResponse <T>(transactionResponse, version);
            }
            catch (AggregateException exception)
            {
                this.ValidateException(exception.InnerException, version);
            }
        }
        /*
         * Creates a request object to send.
         */
        private cnpOnlineRequest CreateRequest(cnpTransactionInterface transactionObject)
        {
            // Create the request.
            var request = CreateCnpOnlineRequest();

            // Add the report group.
            if (transactionObject is transactionTypeWithReportGroup && ((transactionTypeWithReportGroup)transactionObject).reportGroup == null)
            {
                ((transactionTypeWithReportGroup)transactionObject).reportGroup = this.config.GetValue("reportGroup");
            }
            if (transactionObject is transactionTypeWithReportGroupAndPartial && ((transactionTypeWithReportGroupAndPartial)transactionObject).reportGroup == null)
            {
                ((transactionTypeWithReportGroupAndPartial)transactionObject).reportGroup = this.config.GetValue("reportGroup");
            }

            // Add the element.
            request.AddAdditionalElement(transactionObject.Serialize(this.config.GetVersion()));

            // Return the request.
            return(request);
        }
Exemple #8
0
 /*
  * Performs a CNP Online transaction.
  */
 public T SendTransaction <T>(cnpTransactionInterface transaction)
 {
     return(this.cnpOnline.SendTransaction <T>(transaction));
 }
        /*
         * Runs a test transaction for all versions with threading.
         */
        public void RunCnpTestThreaded <T>(cnpTransactionInterface transaction)
        {
            var pool = new CnpOnlineRequestThreadPool <T>(this, transaction, this.GetVersionsToRun(), MAX_REQUEST_THREADS);

            pool.RunTestPool();
        }