private IQldbDriver GetDriver()
        {
            AmazonQLDBSessionConfig sessionConfig = new AmazonQLDBSessionConfig();

            sessionConfig.RegionEndpoint = RegionEndpoint.USEast1;
            return((IQldbDriver)PooledQldbDriver.Builder().WithAWSCredentials((AWSCredentials)this.awsCredentials).WithQLDBSessionConfig(sessionConfig).WithLedger(Global.LedgerName).Build());
        }
        public void TestExecuteWithParamsReturnsValidResult()
        {
            var driver = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);
            var result = driver.Execute("testStatement", new List <IIonValue>());

            Assert.IsNotNull(result);
        }
        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 = PooledQldbDriver.Builder().WithLedger("testLedger");
        }
        public void TestExecuteWithVarargsAndRetryActionReturnsValidResult()
        {
            var driver = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);
            var result = driver.Execute("testStatement", (int k) => { return; }, new IIonValue[] { });

            Assert.IsNotNull(result);
        }
        public void TestGetSessionFromDriverWithSessionReturnedToPool()
        {
            var sendCommandResponseWithStartSession = new SendCommandResponse
            {
                StartSession = new StartSessionResult
                {
                    SessionToken = "testToken"
                },
                ResponseMetadata = new ResponseMetadata
                {
                    RequestId = "testId"
                }
            };
            var sendCommandResponseEmpty = new SendCommandResponse();

            mockClient.SetupSequence(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(sendCommandResponseWithStartSession))
            .Returns(Task.FromResult(sendCommandResponseEmpty));
            builder = PooledQldbDriver.Builder().WithLedger("testLedger");

            var driver  = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 4, 4, NullLogger.Instance);
            var session = driver.GetSession();

            session.Dispose();
            session = driver.GetSession();
            Assert.IsNotNull(session);
            // Once for start session, once for abort. Second will throw exception if start session due to empty response.
            mockClient.Verify(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()),
                              Times.Exactly(2));
        }
        public void TestExecuteWithActionLambdaAndRetryActionCanInvokeSuccessfully()
        {
            var driver = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);

            driver.Execute((txn) =>
            {
                txn.Execute("testStatement");
            }, (int k) => { return; });
        }
        public void TestDisposeSessionReleasesSemaphore()
        {
            var driver  = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);
            var session = driver.GetSession();

            session.Dispose();
            // Pool limit is 1 so will throw TimeoutException if semaphore was not released upon dispose.
            session = driver.GetSession();
            Assert.IsNotNull(session);
        }
        public void TestGetSessionReturnsValidSession()
        {
            var driver  = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 4, 4, NullLogger.Instance);
            var session = driver.GetSession();

            Assert.IsNotNull(session);
            // Start session.
            mockClient.Verify(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()),
                              Times.Once);
        }
        public void TestExecuteWithFuncLambdaAndRetryActionReturnsFuncOutput()
        {
            var driver = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);

            driver.Dispose();
            Assert.ThrowsException <ObjectDisposedException>(() => driver.Execute((txn) =>
            {
                txn.Execute("testStatement");
                return("testReturnValue");
            }, (int k) => { return; }));
        }
        public void TestExecuteWithFuncLambdaReturnsFuncOutput()
        {
            var driver = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);
            var result = driver.Execute((txn) =>
            {
                txn.Execute("testStatement");
                return("testReturnValue");
            });

            Assert.AreEqual("testReturnValue", result);
        }
        public void TestGetSessionWithNoneInPoolAndTimeoutReached()
        {
            var driver  = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);
            var session = driver.GetSession();

            Assert.IsNotNull(session);
            Assert.ThrowsException <TimeoutException>(driver.GetSession);
            // Start session.
            mockClient.Verify(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()),
                              Times.Once);
        }
        public void TestDisposeEndsPooledSessions()
        {
            var driver  = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 4, 4, NullLogger.Instance);
            var session = driver.GetSession();

            session.Dispose();
            driver.Dispose();
            driver.Dispose();
            // Once to start session, and once to end session in pool upon disposal of driver.
            mockClient.Verify(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()),
                              Times.Exactly(2));
        }
Пример #13
0
        public async Task <string> FunctionHandler(KinesisEvent kinesisEvent)
        {
            foreach (var record in kinesisEvent.Records)
            {
                LambdaLogger.Log(GetRecordContents(record.Kinesis));
            }

            var builder = PooledQldbDriver.Builder();
            var driver  = builder.WithLedger("demo-ledger-1").Build();
            var session = driver.GetSession();

            return(kinesisEvent.ToString());
        }
        public void TestGetSessionWhenMakingNewSessionThrowsException()
        {
            var testException = new AmazonClientException("");

            mockClient.Setup(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()))
            .Throws(testException);
            var driver = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 1, 10, NullLogger.Instance);

            Assert.ThrowsException <AmazonClientException>(driver.GetSession);
            // Ensure semaphore released due to earlier exception. Will throw TimeoutException if not.
            Assert.ThrowsException <AmazonClientException>(driver.GetSession);
            // Start session twice.
            mockClient.Verify(x => x.SendCommandAsync(It.IsAny <SendCommandRequest>(), It.IsAny <CancellationToken>()),
                              Times.Exactly(2));
        }
Пример #15
0
        static void Main(string[] args)
        {
            var builder         = PooledQldbDriver.Builder();
            var driver          = builder.WithLedger("demo-ledger-1").Build();
            var session         = driver.GetSession();
            var personForCreate = new Person("akinama", "taro");

            session.Execute($"INSERT INTO Person << {personForCreate.ToJson()} >>;");
            var ion    = session.Execute("SELECT * FROM Person") as BufferedResult;
            var people = new List <Person>();

            foreach (var ionValue in ion)
            {
                var person = new Person(ionValue);
                people.Add(person);
                Console.WriteLine($"FirstName: {person.FirstName}, LastName: {person.LastName}, CreatedAt: {person.CreatedAt}");
            }
        }
        public void TestPooledQldbDriverConstructorReturnsValidObject()
        {
            var driver = new PooledQldbDriver("ledgerName", mockClient.Object, 4, 4, 4, NullLogger.Instance);

            Assert.IsNotNull(driver);
        }