/* * 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); }
/* * 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(); }