public async Task CreateConnection_Creates_A_Sql_Connection()
        {
            // Arrange
            using (var api = new SqlLocalDbApi(_loggerFactory))
            {
                using (TemporarySqlLocalDbInstance temporary = api.CreateTemporaryInstance(deleteFiles: true))
                {
                    ISqlLocalDbInstanceManager manager = temporary.Manage();

                    manager.ShouldNotBeNull();
                    manager.Name.ShouldBe(temporary.Name);

                    // Act
                    using (SqlConnection actual = manager.CreateConnection())
                    {
                        // Assert
                        actual.ShouldNotBeNull();
                        actual.ConnectionString.ShouldNotBeNull();
                        actual.State.ShouldBe(ConnectionState.Closed);

                        await actual.OpenAsync();

                        actual.Close();
                    }
                }
            }
        }
Пример #2
0
 public DatabaseFixture()
 {
     lazyInstance = new Lazy <TemporarySqlLocalDbInstance>(() =>
     {
         using (var localDb = new SqlLocalDbApi())
         {
             return(localDb.CreateTemporaryInstance(deleteFiles: true));
         }
     });
 }
Пример #3
0
        public static TestDatabase Create(string pathToSeedDb)
        {
            var sqlLocalDbApi = new SqlLocalDbApi
            {
                StopOptions = StopInstanceOptions.KillProcess
            };
            var temporarySqlLocalDbInstance = sqlLocalDbApi.CreateTemporaryInstance(deleteFiles: true);

            return(new TestDatabase(temporarySqlLocalDbInstance, pathToSeedDb));
        }
Пример #4
0
        public void Restart_Stops_And_Starts_Instance()
        {
            // Arrange
            using var api = new SqlLocalDbApi(_loggerFactory);
            using TemporarySqlLocalDbInstance temporary = api.CreateTemporaryInstance(deleteFiles: true);

            ISqlLocalDbInstanceManager manager = temporary.Manage();

            // Act
            manager.Restart();

            // Assert
            temporary.GetInstanceInfo().IsRunning.ShouldBeTrue();
        }
        public void ShareInstance_Shares_Instance_For_Current_User()
        {
            // Arrange
            using var api = new SqlLocalDbApi(_loggerFactory);
            using TemporarySqlLocalDbInstance target = api.CreateTemporaryInstance(deleteFiles: true);

            target.GetInstanceInfo().IsShared.ShouldBeFalse();

            // Act
            api.ShareInstance(target.Name, Guid.NewGuid().ToString());

            // Assert
            target.GetInstanceInfo().IsShared.ShouldBeTrue();
        }
Пример #6
0
        public void Create_A_Temporary_Sql_LocalDB_Instance()
        {
            using (var localDB = new SqlLocalDbApi(OutputHelper.ToLoggerFactory()))
            {
                using (TemporarySqlLocalDbInstance instance = localDB.CreateTemporaryInstance(deleteFiles: true))
                {
                    using (var connection = new SqlConnection(instance.ConnectionString))
                    {
                        connection.Open();

                        // Use the SQL connection...
                    }
                }
            }
        }
Пример #7
0
        public void CreateTemporaryInstance_Creates_Starts_And_Deletes_An_Instance(bool deleteFiles)
        {
            // Arrange
            if (!SqlLocalDbApi.IsWindows)
            {
                // HACK Theories dont seem to work correctly with subclasses now
                // so cannot make a derived class for a "Windows-only" theory.
                return;
            }

            using (var api = new SqlLocalDbApi(_loggerFactory))
            {
                ISqlLocalDbInstanceInfo info;
                string name;

                // Act
                using (TemporarySqlLocalDbInstance target = api.CreateTemporaryInstance(deleteFiles))
                {
                    // Assert
                    target.ShouldNotBeNull();
                    target.Name.ShouldNotBeNull();
                    target.Name.ShouldNotBeEmpty();

                    Guid.TryParse(target.Name, out Guid nameAsGuid).ShouldBeTrue();
                    nameAsGuid.ShouldNotBe(Guid.Empty);

                    // Act
                    info = target.GetInstanceInfo();

                    // Assert
                    info.ShouldNotBeNull();
                    info.Exists.ShouldBeTrue();
                    info.IsRunning.ShouldBeTrue();

                    name = target.Name;
                }

                // Act
                info = api.GetInstanceInfo(name);

                // Assert
                info.ShouldNotBeNull();
                info.Exists.ShouldBeFalse();
            }
        }
Пример #8
0
        public LocalDbServer(string databaseName)
        {
            DatabaseName = Check.NotNull(nameof(databaseName), databaseName);
            var tmp = PathUtility.GetTempFileName();

            MdfFileName = Path.ChangeExtension(tmp, EXTENSION_TMP_MDF);
            LdfFileName = Path.ChangeExtension(tmp, EXTENSION_TMP_LDF);
            var sqlCreateDb = SQL_CREATE_DATABASE_FORMAT.FormatInvariant(databaseName, MdfFileName, LdfFileName);

            _SqlLocalDbApi = new SqlLocalDbApi {
                AutomaticallyDeleteInstanceFiles = true
            };
            _Instance = _SqlLocalDbApi.CreateTemporaryInstance(true);

            using var connection = _Instance.GetInstanceInfo().CreateConnection();
            connection.Open();
            using var createDbComand   = connection.CreateCommand();
            createDbComand.CommandText = sqlCreateDb;
            _ = createDbComand.ExecuteNonQuery();
        }
        private void CreateTemporaryInstance_Creates_Starts_And_Deletes_An_Instance(bool deleteFiles)
        {
            // Arrange
            using (var api = new SqlLocalDbApi(_loggerFactory))
            {
                ISqlLocalDbInstanceInfo info;
                string name;

                // Act
                using (TemporarySqlLocalDbInstance target = api.CreateTemporaryInstance(deleteFiles))
                {
                    // Assert
                    target.ShouldNotBeNull();
                    target.Name.ShouldNotBeNull();
                    target.Name.ShouldNotBeEmpty();

                    Guid.TryParse(target.Name, out Guid nameAsGuid).ShouldBeTrue();
                    nameAsGuid.ShouldNotBe(Guid.Empty);

                    // Act
                    info = target.GetInstanceInfo();

                    // Assert
                    info.ShouldNotBeNull();
                    info.Exists.ShouldBeTrue();
                    info.IsRunning.ShouldBeTrue();

                    name = target.Name;
                }

                // Act
                info = api.GetInstanceInfo(name);

                // Assert
                info.ShouldNotBeNull();
                info.Exists.ShouldBeFalse();
            }
        }
Пример #10
0
        public async Task Can_Create_Update_And_Delete_Todo_Items()
        {
            // Arrange
            Skip.IfNot(
                RuntimeInformation.IsOSPlatform(OSPlatform.Windows),
                "This test can only be run on Windows.");

            var now   = new DateTimeOffset(2018, 08, 12, 10, 41, 0, TimeSpan.Zero);
            var clock = new FakeClock(Instant.FromDateTimeOffset(now));

            var options = new SqlLocalDbOptions()
            {
                AutomaticallyDeleteInstanceFiles = true,
                StopOptions = StopInstanceOptions.NoWait,
                StopTimeout = TimeSpan.FromSeconds(1),
            };

            using var localDB = new SqlLocalDbApi(options, LoggerFactory);
            using TemporarySqlLocalDbInstance instance = localDB.CreateTemporaryInstance(deleteFiles: true);

            var builder = new DbContextOptionsBuilder <TodoContext>()
                          .UseSqlServer(instance.ConnectionString);

            using var context = new TodoContext(builder.Options);
            await context.Database.MigrateAsync();

            var target = new TodoRepository(clock, context);

            // Act - Verify the repository is empty
            IList <TodoItem> items = await target.GetItemsAsync();

            // Assert
            Assert.NotNull(items);
            Assert.Empty(items);

            // Arrange - Add a new item
            string text = "Buy cheese";

            // Act
            TodoItem item = await target.AddItemAsync(text);

            // Assert
            Assert.NotNull(item);
            Assert.NotEqual(Guid.Empty, item.Id);
            Assert.Equal(text, item.Text);
            Assert.Equal(now, item.CreatedAt);
            Assert.Null(item.CompletedAt);

            // Arrange - Mark the item as completed
            Guid id = item.Id;

            // Act
            bool?completeResult = await target.CompleteItemAsync(id);

            // Assert
            Assert.True(completeResult);

            // Act - Verify the repository has one item that is completed
            items = await target.GetItemsAsync();

            // Assert
            Assert.NotNull(items);
            Assert.NotEmpty(items);
            Assert.Equal(1, items.Count);

            item = items[0];
            Assert.NotNull(item);
            Assert.NotEqual(Guid.Empty, item.Id);
            Assert.Equal(text, item.Text);
            Assert.Equal(now, item.CreatedAt);
            Assert.Equal(now, item.CompletedAt);

            // Act - Delete the item
            bool deleteResult = await target.DeleteItemAsync(id);

            // Assert
            Assert.True(deleteResult);

            // Act - Verify the repository is empty again
            items = await target.GetItemsAsync();

            // Assert
            Assert.NotNull(items);
            Assert.Empty(items);
        }