Ejemplo n.º 1
0
        protected async Task <bool> WaitUntilDatabaseHasState(DocumentStore store, TimeSpan timeout, Func <DatabaseRecord, bool> predicate)
        {
            var requestExecutor = store.GetRequestExecutor();

            using (var context = JsonOperationContext.ShortTermSingleUse())
            {
                var shouldContinue = true;
                var timeoutTask    = Task.Delay(timeout);
                while (shouldContinue && timeoutTask.IsCompleted == false)
                {
                    try
                    {
                        var databaseIsLoadedCommand = new GetDatabaseDocumentTestCommand();
                        await requestExecutor.ExecuteAsync(databaseIsLoadedCommand, context);

                        shouldContinue = predicate(databaseIsLoadedCommand.Result) == false;
                        await Task.Delay(100);
                    }
                    catch (OperationCanceledException)
                    {
                        //OperationCanceledException is thrown if the database is currently shutting down
                    }
                }

                return(timeoutTask.IsCompleted == false);
            }
        }
Ejemplo n.º 2
0
        private bool HasEtagInDatabaseDocumentResponse(string url, string databaseName, JsonOperationContext context)
        {
            var command = new GetDatabaseDocumentTestCommand();

            using (var requestExecuter = new RequestExecuter(url, databaseName, null))
            {
                requestExecuter.Execute(command, context);
            }

            var result = command.Result;
            BlittableJsonReaderObject metadata;
            var  hasMetadataProperty = result.TryGet("@metadata", out metadata);
            long etag;
            var  hasEtagProperty = metadata.TryGet("@etag", out etag);

            return(hasMetadataProperty && hasEtagProperty && etag > 0);
        }
Ejemplo n.º 3
0
        public void Admin_databases_endpoint_should_fetch_document_with_etag_in_metadata_property()
        {
            using (var store = GetDocumentStore())
            {
                TransactionOperationContext context;
                using (Server.ServerStore.ContextPool.AllocateOperationContext(out context))
                {
                    var command = new GetDatabaseDocumentTestCommand();
                    using (var requestExecutor = RequestExecutor.Create(store.Urls, store.Database, null, DocumentConventions.Default))
                    {
                        requestExecutor.Execute(command, context);
                    }

                    var hasEtag = command.Result.TryGet("Etag", out long etag);
                    Assert.True(hasEtag && etag != 0, $"{hasEtag} - {etag}");
                }
            }
        }
Ejemplo n.º 4
0
        public void Admin_databases_endpoint_should_refuse_document_with_lower_etag_with_concurrency_Exception()
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Load <object>("users/1");// just waiting for the db to load
                }

                TransactionOperationContext context;
                using (Server.ServerStore.ContextPool.AllocateOperationContext(out context))
                {
                    var getCommand = new GetDatabaseDocumentTestCommand();
                    using (var requestExecutor = RequestExecutor.Create(store.Urls, store.Database, null, DocumentConventions.Default))
                    {
                        requestExecutor.Execute(getCommand, context);
                        using (var putCommand = new PutDatabaseDocumentTestCommand(getCommand.Result))
                        {
                            Assert.Throws <ConcurrencyException>(() => requestExecutor.Execute(putCommand, context));
                        }
                    }
                }
            }
        }