Search code examples
asp.net-corexunitravendbraventestdriver

RavenDB The database **** is currently locked because Checking if we need to recreate indexes


I am using RavenTestDriver for my unit tests . Here is my configuration of my test :

  ConfigureServer(new TestServerOptions
            {
                CommandLineArgs = new System.Collections.Generic.List<string> { "--RunInMemory=true", },
                FrameworkVersion = null,
            }) ;
            IDocumentStore store = GetDocumentStore();
            try
            {
                store.Maintenance.ForDatabase(ravenTestDatabaseName).Send(new GetStatisticsOperation());
            }
            catch (DatabaseDoesNotExistException)
            {
                    store.Maintenance.Server.Send(new CreateDatabaseOperation(new DatabaseRecord(ravenTestDatabaseName)));
            }
            session = store.OpenAsyncSession(new SessionOptions()
            {
                Database=ravenTestDatabaseName,
            });
             var hostBuilder = easy.api.Program.CreateHostBuilder(new string[0])
         .ConfigureWebHost(webHostBuilder =>
         {
             webHostBuilder.UseTestServer();
         })
        .ConfigureServices(services =>
        {
                services.AddScoped<ICurrentUserService, InitRequest>();
                services.AddScoped<ICacheStorage>(provider=>
                {
                    return new Mock<ICacheStorage>().Object;
                });

            services.AddRavenDbAsyncSession(GetDocumentStore(new GetDocumentStoreOptions()));
                services.AddScoped<IAsyncDocumentSession>((c) =>
            {
                return store.OpenAsyncSession(new SessionOptions()
                {
                    Database=ravenTestDatabaseName,
                });
                });
        });

So I have several test in my solution:

When I run each test individual the test passed .But When I run all tests together I get this error :

 Raven.Client.Exceptions.Database.DatabaseDisabledException : Raven.Client.Exceptions.Database.DatabaseDisabledException: The database Test-Server is currently locked because Checking if we need to recreate indexes
   at Raven.Server.Documents.DatabasesLandlord.UnloadAndLockDatabase(String dbName, String reason) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Documents\DatabasesLandlord.cs:line 907
   at Raven.Server.Web.System.AdminDatabasesHandler.Put() in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Web\System\AdminDatabasesHandler.cs:line 327
   at Raven.Server.Routing.RequestRouter.HandlePath(RequestHandlerContext reqCtx) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\Routing\RequestRouter.cs:line 349
   at Raven.Server.RavenServerStartup.RequestHandler(HttpContext context) in C:\Builds\RavenDB-Stable-5.2\52000\src\Raven.Server\RavenServerStartup.cs:line 174
The server at /admin/databases?name=Test-Server&replicationFactor=1&raft-request-id=d9a39f56-a1ad-44b7-b6e5-b195c1143c4b responded with status code: ServiceUnavailable.

Solution

  • I just leave the database name empty .

    public class TestHostBuilder : RavenTestDriver, IAsyncLifetime
        {
    
            public HttpClient httpClient = null;
            public IDocumentStore documentStore = null;
            public async Task InitializeAsync()
            {
                documentStore = GetDocumentStore();
                var hostBuilder = easy.api.Program.CreateHostBuilder(new string[0])
            .ConfigureWebHost(webHostBuilder =>
            {
                webHostBuilder.UseTestServer();
            })
         
           .ConfigureServices(services =>
           {
               services.AddScoped<ICurrentUserService, InitRequest>();
               services.AddScoped<ICacheStorage>(provider =>
               {
                   return new Mock<ICacheStorage>().Object;
               });
               services.AddRavenDbAsyncSession(GetDocumentStore(new GetDocumentStoreOptions()));
               services.AddTransient<IAsyncDocumentSession>((c) =>
                {
                    return documentStore.OpenAsyncSession();
                });
               
           });
                var host = hostBuilder.Start();
                httpClient = host.GetTestClient();
            }
            public Task DisposeAsync()=> Task.CompletedTask;
        }