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(); } } } }
public DatabaseFixture() { lazyInstance = new Lazy <TemporarySqlLocalDbInstance>(() => { using (var localDb = new SqlLocalDbApi()) { return(localDb.CreateTemporaryInstance(deleteFiles: true)); } }); }
public static TestDatabase Create(string pathToSeedDb) { var sqlLocalDbApi = new SqlLocalDbApi { StopOptions = StopInstanceOptions.KillProcess }; var temporarySqlLocalDbInstance = sqlLocalDbApi.CreateTemporaryInstance(deleteFiles: true); return(new TestDatabase(temporarySqlLocalDbInstance, pathToSeedDb)); }
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(); }
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... } } } }
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(); } }
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(); } }
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); }