Пример #1
0
        private void CreateDriverFactory()
        {
            _driverFactory = new Lazy <IQldbDriver>(() =>
            {
                var builder = QldbDriver.Builder()
                              .WithAWSCredentials(_credentials)
                              .WithQLDBSessionConfig(_sessionConfig);

                if (!string.IsNullOrEmpty(_ledger))
                {
                    builder.WithLedger(_ledger);
                }

                if (_maxConcurrentTransactions >= 0)
                {
                    builder.WithMaxConcurrentTransactions(_maxConcurrentTransactions);
                }

                if (_useRetryLogging)
                {
                    builder.WithRetryLogging();
                }

                if (_logger != null)
                {
                    builder.WithLogger(_logger);
                }

                return(builder
                       .Build());
            });
        }
 public async Task TestExecuteWithActionLambdaCanInvokeSuccessfully()
 {
     var driver = new QldbDriver(
         new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                         new Mock <IRetryHandler>().Object, 4, NullLogger.Instance));
     await driver.Execute(txn => txn.Execute("testStatement"));
 }
Пример #3
0
        public QldbDriver CreateDriver(
            AmazonQLDBSessionConfig amazonQldbSessionConfig,
            int maxConcurrentTransactions = default,
            string ledgerName             = default)
        {
            QldbDriverBuilder builder = QldbDriver.Builder();

            string finalLedgerName;

            if (ledgerName != default)
            {
                finalLedgerName = ledgerName;
            }
            else
            {
                finalLedgerName = this.ledgerName;
            }

            if (maxConcurrentTransactions != default)
            {
                builder.WithMaxConcurrentTransactions(maxConcurrentTransactions);
            }

            return(builder.WithQLDBSessionConfig(amazonQldbSessionConfig)
                   .WithLedger(finalLedgerName)
                   .Build());
        }
Пример #4
0
        public void TestDisposeWithRepeatCalls()
        {
            var driver = new QldbDriver("ledgerName", mockClient.Object, 4, NullLogger.Instance);

            driver.Dispose();
            driver.Dispose();
        }
        public void TestQldbDriverConstructorReturnsValidObject()
        {
            var driver = new QldbDriver(
                new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                                new Mock <IRetryHandler>().Object, 4, NullLogger.Instance));

            Assert.IsNotNull(driver);
        }
        public async Task TestExecuteWithActionLambdaAndRetryPolicyCanInvokeSuccessfully()
        {
            var driver = new QldbDriver(
                new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                                QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 4, NullLogger.Instance));

            await driver.Execute(txn => txn.Execute("testStatement"), Driver.RetryPolicy.Builder().Build());
        }
        public void TestGetSession_GetTwoSessionsFromPoolOfOne_TimeoutOnSecondGet()
        {
            var         driver          = new QldbDriver(TestLedger, mockClient, 1, NullLogger.Instance);
            QldbSession returnedSession = driver.GetSession();

            Assert.ThrowsException <QldbDriverException>(() => driver.GetSession());

            Assert.IsNotNull(returnedSession);
        }
        public QldbService()
        {
            AmazonQLDBSessionConfig amazonQldbSessionConfig = new AmazonQLDBSessionConfig();

            this.driver = QldbDriver.Builder()
                          .WithQLDBSessionConfig(amazonQldbSessionConfig)
                          .WithLedger(LedgerName)
                          .Build();
        }
Пример #9
0
 private AmazonQldbDataProvider GetAmazonQLDBDataProvider(List <AuditEvent> ins, List <AuditEvent> repl) =>
 new AmazonQldbDataProviderForTest(ins, repl)
 {
     QldbDriver = new Lazy <IQldbDriver>(() => QldbDriver.Builder()
                                         .WithQLDBSessionConfig(new AmazonQLDBSessionConfig())
                                         .WithLedger("audit-ledger")
                                         .WithRetryLogging()
                                         .WithMaxConcurrentTransactions(2)
                                         .Build()),
     TableNameBuilder = ev => ev.EventType
 };
        public void TestExecuteWithActionAndRetryActionCanInvokeSuccessfully()
        {
            var driver = new QldbDriver(
                new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                                QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 4, NullLogger.Instance));

            driver.Execute((txn) =>
            {
                txn.Execute("testStatement");
            },
                           Console.WriteLine);
        }
        public void TestExecuteWithFuncLambdaAndRetryActionReturnsFuncOutput()
        {
            var driver = new QldbDriver(
                new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                                QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 4, NullLogger.Instance));

            driver.Dispose();
            Assert.ThrowsException <QldbDriverException>(() => driver.Execute((txn) =>
            {
                txn.Execute("testStatement");
                return("testReturnValue");
            }, Console.WriteLine));
        }
        public async Task TestExecuteWithFuncLambdaReturnsFuncOutput()
        {
            var driver = new QldbDriver(
                new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                                QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 4, NullLogger.Instance));

            var result = await driver.Execute(async txn =>
            {
                await txn.Execute("testStatement");
                return("testReturnValue");
            });

            Assert.AreEqual("testReturnValue", result);
        }
        public async Task TestExecuteWithFuncLambdaAndRetryPolicyReturnsFuncOutput()
        {
            var driver = new QldbDriver(
                new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                                QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 4, NullLogger.Instance));

            await driver.DisposeAsync();

            await Assert.ThrowsExceptionAsync <QldbDriverException>(async() => await driver.Execute(async txn =>
            {
                await txn.Execute("testStatement");
                return("testReturnValue");
            }, Driver.RetryPolicy.Builder().Build()));
        }
Пример #14
0
        public void TestWithLedgerValidAndInvalidInputs()
        {
            var        testBuilder = QldbDriver.Builder();
            QldbDriver driver;

            // No specified ledger
            Assert.ThrowsException <ArgumentException>(() => driver = testBuilder.Build());

            // Empty ledger
            Assert.ThrowsException <ArgumentException>(() => testBuilder.WithLedger(""));
            Assert.ThrowsException <ArgumentException>(() => testBuilder.WithLedger(null));

            driver = testBuilder.WithLedger("testLedger").Build();
            Assert.IsNotNull(driver);
        }
Пример #15
0
        public void TestGetSessionGetsANewSession()
        {
            var driver = new QldbDriver("ledgerName", mockClient.Object, 4, NullLogger.Instance);

            var session1 = driver.GetSession();

            Assert.IsNotNull(session1);

            var session2 = driver.GetSession();

            Assert.IsNotNull(session2);

            Assert.AreNotEqual(session1, session2);

            driver.Dispose();
            Assert.ThrowsException <ObjectDisposedException>(() => driver.GetSession());
        }
        public void SetupTest()
        {
            builder = QldbDriver.Builder()
                      .WithLedger("testLedger")
                      .WithRetryLogging()
                      .WithLogger(NullLogger.Instance)
                      .WithAWSCredentials(new Mock <AWSCredentials>().Object)
                      .WithQLDBSessionConfig(new AmazonQLDBSessionConfig());
            Assert.IsNotNull(builder);

            mockClient = new MockSessionClient();
            mockClient.SetDefaultResponse(DefaultSendCommandResponse("testToken", TestTransactionId,
                                                                     TestRequestId, digest));

            testDriver = new QldbDriver(TestLedger, mockClient, 4, NullLogger.Instance);
            Assert.IsNotNull(testDriver);
        }
        public void SetupTest()
        {
            mockClient = new Mock <AmazonQLDBSessionClient>();
            var sendCommandResponse = new SendCommandResponse
            {
                StartSession = new StartSessionResult
                {
                    SessionToken = "testToken"
                },
                StartTransaction = new StartTransactionResult
                {
                    TransactionId = "testTransactionIdddddd"
                },
                ExecuteStatement = new ExecuteStatementResult
                {
                    FirstPage = new Page
                    {
                        NextPageToken = null,
                        Values        = new List <ValueHolder>()
                    }
                },
                CommitTransaction = new CommitTransactionResult
                {
                    CommitDigest = new MemoryStream(digest)
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };

            mockClient.Setup(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(sendCommandResponse));
            builder = QldbDriver.Builder()
                      .WithLedger("testLedger")
                      .WithRetryLogging()
                      .WithLogger(NullLogger.Instance)
                      .WithAWSCredentials(new Mock <AWSCredentials>().Object)
                      .WithQLDBSessionConfig(new AmazonQLDBSessionConfig());
        }
Пример #18
0
        public static async Task Main(string[] args)
        {
            Audit.EntityFramework.Configuration.Setup()
            .ForContext <InvoicingContext>(config => config
                                           .IncludeEntityObjects()
                                           .AuditEventType("{context}:{database}"));

            Audit.Core.Configuration.Setup()
            .UseAmazonQldb(config => config.WithQldbDriver(QldbDriver.Builder()
                                                           .WithLedger("InvoicingSystem")
                                                           .Build())
                           .Table("AuditEvents"));

            var host = CreateWebHostBuilder(args).Build();
            await host.RunAsync();

            Audit.Core.Configuration
            .AddCustomAction(ActionType.OnEventSaving, scope =>
            {
                var httpContextAccessor = (IHttpContextAccessor)host.Services.GetService(typeof(IHttpContextAccessor));
                scope.SetCustomField("TraceId", httpContextAccessor.HttpContext.TraceIdentifier);
            });
        }
        public static void SetUp(TestContext context)
        {
            // Get AWS configuration properties from .runsettings file.
            string       region     = context.Properties["region"].ToString();
            const string ledgerName = "DotnetStatementExecution";

            amazonQldbSessionConfig = IntegrationTestBase.CreateAmazonQLDBSessionConfig(region);
            integrationTestBase     = new IntegrationTestBase(ledgerName, region);

            integrationTestBase.RunForceDeleteLedger();

            integrationTestBase.RunCreateLedger();
            qldbDriver = integrationTestBase.CreateDriver(amazonQldbSessionConfig, new ObjectSerializer());

            // Create table.
            var query = $"CREATE TABLE {Constants.TableName}";
            var count = qldbDriver.Execute(txn =>
            {
                var result = txn.Execute(query);

                var count = 0;
                foreach (var row in result)
                {
                    count++;
                }
                return(count);
            });

            Assert.AreEqual(1, count);

            var result = qldbDriver.ListTableNames();

            foreach (var row in result)
            {
                Assert.AreEqual(Constants.TableName, row);
            }
        }
        public static async Task SetUp(TestContext context)
        {
            // Get AWS configuration properties from .runsettings file.
            string region = context.Properties["region"].ToString();

            amazonQldbSessionConfig = IntegrationTestBase.CreateAmazonQLDBSessionConfig(region);
            integrationTestBase     = new IntegrationTestBase(Constants.LedgerName, region);

            integrationTestBase.RunForceDeleteLedger();

            integrationTestBase.RunCreateLedger();
            qldbDriver = integrationTestBase.CreateDriver(amazonQldbSessionConfig);

            // Create table.
            var query = $"CREATE TABLE {Constants.TableName}";
            var count = await qldbDriver.Execute(async txn =>
            {
                var result = await txn.Execute(query);

                var count = 0;
                await foreach (var row in result)
                {
                    count++;
                }
                return(count);
            });

            Assert.AreEqual(1, count);

            var result = await qldbDriver.ListTableNames();

            foreach (var row in result)
            {
                Assert.AreEqual(Constants.TableName, row);
            }
        }
Пример #21
0
 /// <summary>
 /// Creates a new AmazonQLDB data provider using the given driver.
 /// </summary>
 /// <param name="driver">The Amazon QLDB driver instance.</param>
 public AmazonQldbDataProvider(QldbDriver driver)
 {
     QldbDriver = new Lazy <IQldbDriver>(() => driver);
 }
        public async Task Execute_ExceptionOnExecute_ShouldOnlyRetryOnISEAndTAOE(Exception exception, bool expectThrow)
        {
            var statement = "DELETE FROM table;";
            var h1        = QldbHash.ToQldbHash(TestTransactionId);

            h1 = Transaction.Dot(h1, statement, new List <IIonValue> {
            });

            var sendCommandResponseWithStartSession = new SendCommandResponse
            {
                StartTransaction = new StartTransactionResult
                {
                    TransactionId = TestTransactionId
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };

            var sendCommandResponseExecute = new SendCommandResponse
            {
                ExecuteStatement = new ExecuteStatementResult
                {
                    FirstPage = new Page
                    {
                        NextPageToken = null
                    }
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };

            var sendCommandResponseCommit = new SendCommandResponse
            {
                CommitTransaction = new CommitTransactionResult
                {
                    TransactionId = TestTransactionId,
                    CommitDigest  = new MemoryStream(h1.Hash),
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };
            var mockCreator = new Mock <Func <Task <Session> > >();
            var mockSession = new Mock <Session>(null, null, null, null, null);

            mockSession.Setup(x => x.StartTransaction(It.IsAny <CancellationToken>())).ReturnsAsync(sendCommandResponseWithStartSession.StartTransaction);
            mockSession.SetupSequence(x => x.ExecuteStatement(It.IsAny <String>(), It.IsAny <String>(), It.IsAny <List <IIonValue> >(), It.IsAny <CancellationToken>()))
            .ThrowsAsync(exception)
            .ThrowsAsync(exception)
            .ReturnsAsync(sendCommandResponseExecute.ExecuteStatement);
            mockSession.Setup(x => x.CommitTransaction(It.IsAny <String>(), It.IsAny <MemoryStream>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(sendCommandResponseCommit.CommitTransaction);

            mockCreator.Setup(x => x()).ReturnsAsync(mockSession.Object);

            var driver = new QldbDriver(
                new SessionPool(mockCreator.Object, QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 4, NullLogger.Instance));

            try
            {
                await driver.Execute(txn => txn.Execute(statement));
            }
            catch (Exception e)
            {
                Assert.AreEqual(exception, e);
                Assert.IsTrue(expectThrow);
                return;
            }

            Assert.IsFalse(expectThrow);
        }
Пример #23
0
        public void TestQldbDriverConstructorReturnsValidObject()
        {
            var driver = new QldbDriver("ledgerName", mockClient.Object, 4, NullLogger.Instance);

            Assert.IsNotNull(driver);
        }
Пример #24
0
 public void SetupTest()
 {
     builder = QldbDriver.Builder().WithLedger("testLedger");
 }
Пример #25
0
 public void Execute_UpdateSameRecordAtSameTime_ThrowsOccException()
 {
     QldbDriver driver = integrationTestBase.CreateDriver(amazonQldbSessionConfig, default, default, 0);
Пример #26
0
 public IAmazonQldbProviderTableConfigurator WithQldbDriver(QldbDriver driver)
 {
     _driverFactory = new Lazy <IQldbDriver>(() => driver);
     return(_tableConfigurator);
 }
        public async Task TestListTableNamesLists()
        {
            var factory = new ValueFactory();
            var tables  = new List <string>()
            {
                "table1", "table2"
            };
            var ions = tables.Select(t => CreateValueHolder(factory.NewString(t))).ToList();

            var h1 = QldbHash.ToQldbHash(TestTransactionId);

            h1 = Transaction.Dot(h1, QldbDriver.TableNameQuery, new List <IIonValue> {
            });

            var sendCommandResponseWithStartSession = new SendCommandResponse
            {
                StartSession = new StartSessionResult
                {
                    SessionToken = "testToken"
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };
            var sendCommandResponseStartTransaction = new SendCommandResponse
            {
                StartTransaction = new StartTransactionResult
                {
                    TransactionId = TestTransactionId
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };
            var sendCommandResponseExecute = new SendCommandResponse
            {
                ExecuteStatement = new ExecuteStatementResult
                {
                    FirstPage = new Page
                    {
                        NextPageToken = null,
                        Values        = ions
                    }
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };
            var sendCommandResponseCommit = new SendCommandResponse
            {
                CommitTransaction = new CommitTransactionResult
                {
                    CommitDigest  = new MemoryStream(h1.Hash),
                    TransactionId = TestTransactionId
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };

            mockClient.SetupSequence(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(sendCommandResponseWithStartSession))
            .Returns(Task.FromResult(sendCommandResponseStartTransaction))
            .Returns(Task.FromResult(sendCommandResponseExecute))
            .Returns(Task.FromResult(sendCommandResponseCommit));

            var driver = new QldbDriver(
                new SessionPool(() => Session.StartSession("ledgerName", mockClient.Object, NullLogger.Instance),
                                QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 4, NullLogger.Instance));

            var result = await driver.ListTableNames();

            Assert.IsNotNull(result);
            CollectionAssert.AreEqual(tables, result.ToList());
        }
 public void Execute_UpdateSameRecordAtSameTime_ThrowsOccException()
 {
     // Create a driver that does not retry OCC errors
     QldbDriver driver = integrationTestBase.CreateDriver(amazonQldbSessionConfig, default, default);