public void TestFixtureSetUp()
        {
            var localDb = new SqlLocalDbApiWrapper();

            if (!localDb.IsLocalDBInstalled())
            {
                throw new Exception("LocalDB is not installed!");
            }

            this.instance = TemporarySqlLocalDbInstance.Create(deleteFiles: true);

            // Initialize database
            var strategy = new DropCreateDatabaseAlways <SentinelContext>();

            Database.SetInitializer(strategy);

            var builder = this.instance.CreateConnectionStringBuilder();

            // Update the connection string to specify the name of the database
            // and its physical location to the current application directory
            builder.SetInitialCatalogName("SentinelAuth");
            builder.SetPhysicalFileName(@".\SentinelAuth.mdf");

            this.connectionString = builder.ConnectionString;

            using (var context = new SentinelContext(this.connectionString))
            {
                context.Database.Initialize(true);
            }
        }
示例#2
0
        public void TestFixtureSetUp()
        {
            if (!SqlLocalDbApi.IsLocalDBInstalled())
            {
                throw new Exception("LocalDB is not installed!");
            }

            this.databaseName = "SqlServerUserManagerTests_" + Guid.NewGuid().ToString("N");

            // Configure dapper to support datetime2
            SqlMapper.AddTypeMap(typeof(DateTime), DbType.DateTime2);

            // Create test instance
            this.instance = TemporarySqlLocalDbInstance.Create(deleteFiles: true);

            // Seed test data
            using (var connection = this.instance.CreateConnection())
            {
                connection.Open();

                try
                {
                    connection.Execute("CREATE DATABASE " + this.databaseName);
                    connection.Execute("USE " + this.databaseName);
                    connection.Execute("CREATE TABLE Users (Id bigint NOT NULL PRIMARY KEY IDENTITY(1,1), UserId VARCHAR(255) NOT NULL, Password VARCHAR(MAX) NOT NULL, FirstName NVARCHAR(255) NOT NULL, LastName NVARCHAR(255) NOT NULL, LastLogin DATETIMEOFFSET)");
                    connection.Execute("INSERT INTO Users (UserId, Password, FirstName, LastName) VALUES ('azzlack', '10000:gW7zpVeugKl8IFu7TcpPskcgQjy4185eAwBk9fFlZK6JNd1I45tLyCYtJrzWzE+kVCUP7lMSY8o808EjUgfavBzYU/ZtWypcdCdCJ0BMfMcf8Mk+XIYQCQLiFpt9Rjrf5mAY86NuveUtd1yBdPjxX5neMXEtquNYhu9I6iyzcN4=:Lk2ZkpmTDkNtO/tsB/GskMppdAX2bXehP+ED4oLis0AAv3Q1VeI8KL0SxIIWdxjKH0NJKZ6qniRFkfZKZRS2hS4SB8oyB34u/jyUlmv+RZGZSt9nJ9FYJn1percd/yFA7sSQOpkGljJ6OTwdthe0Bw0A/8qlKHbO2y2M5BFgYHY=', 'Ove', 'Andersen')");
                }
                finally
                {
                    connection.Close();
                }
            }

            base.TestFixtureSetUp();
        }
示例#3
0
        public override void TestFixtureSetUp()
        {
            if (!SqlLocalDbApi.IsLocalDBInstalled())
            {
                throw new Exception("LocalDB is not installed!");
            }

            this.databaseName = "SqlTokenRepositoryTests" + Guid.NewGuid().ToString("N");

            // Configure dapper to support datetime2
            SqlMapper.AddTypeMap(typeof(DateTime), DbType.DateTime2);

            // Create test instance
            this.instance = TemporarySqlLocalDbInstance.Create(true);

            // Seed test data
            using (var connection = this.instance.CreateConnection())
            {
                connection.Open();

                connection.Execute($"CREATE DATABASE [{this.databaseName}]");
                connection.Execute($"USE [{this.databaseName}]");
                connection.Execute("CREATE TABLE AccessTokens (Id bigint NOT NULL PRIMARY KEY IDENTITY(1,1), ClientId VARCHAR(255) NOT NULL, Ticket VARCHAR(MAX) NOT NULL, Token VARCHAR(MAX) NOT NULL, Subject NVARCHAR(255) NOT NULL, RedirectUri VARCHAR(MAX), Scope NVARCHAR(MAX), ValidTo DATETIMEOFFSET, Created DATETIMEOFFSET)");
                connection.Execute("CREATE TABLE RefreshTokens (Id bigint NOT NULL PRIMARY KEY IDENTITY(1,1), ClientId VARCHAR(255) NOT NULL, Token VARCHAR(MAX) NOT NULL, Subject NVARCHAR(255) NOT NULL, RedirectUri VARCHAR(MAX), Scope NVARCHAR(MAX), ValidTo DATETIMEOFFSET, Created DATETIMEOFFSET)");
                connection.Execute("CREATE TABLE AuthorizationCodes (Id bigint NOT NULL PRIMARY KEY IDENTITY(1,1), ClientId VARCHAR(255) NOT NULL, Ticket VARCHAR(MAX) NOT NULL, Code VARCHAR(MAX) NOT NULL, Subject NVARCHAR(255) NOT NULL, Scope NVARCHAR(MAX), RedirectUri VARCHAR(MAX), ValidTo DATETIMEOFFSET, Created DATETIMEOFFSET)");
            }

            base.TestFixtureSetUp();
        }
示例#4
0
        private TestDatabase(TemporarySqlLocalDbInstance instance, string pathToSeedDb)
        {
            _instance = instance;

            var pathToModel = Path.Combine(SqlLocalDbApi.GetInstancesFolderPath(), instance.Name, Path.GetFileName(pathToSeedDb));

            File.Copy(pathToSeedDb, pathToModel);

            _connectionString = GetConnectionString(instance, pathToModel);
        }
示例#5
0
        public SqlServerTests()
        {
            _instance = TemporarySqlLocalDbInstance.Create(deleteFiles: true);

            _connection = _instance.CreateConnection();
            _connection.Open();

            _database = new Database(_connection);

            _database.Execute("create database [SqlServerTests]");
        }
示例#6
0
        private void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                _instance.Dispose();
                _instance = null;
            }
            _disposed = true;
        }
示例#7
0
        /// <summary>
        /// Mains the specified arguments.
        /// </summary>
        /// <param name="args">The arguments.</param>
        public static void Main(string[] args)
        {
            var books = new List <Book>
            {
                new Book {
                    Id = Guid.NewGuid(), Author = "Author 1", Title = "Book 1"
                },
                new Book {
                    Id = Guid.NewGuid(), Author = "Author 2", Title = "Book 2"
                },
                new Book {
                    Id = Guid.NewGuid(), Author = "Author 3", Title = "Book 3"
                }
            };

            Console.WriteLine("===============================================================================");
            Console.WriteLine("Using Sqlite");
            Console.WriteLine("===============================================================================");
            using (var connection = new SQLiteConnection(@"Data Source=:memory:;Version=3;New=True;"))
            {
                connection.Open();

                InitializeSqlite(connection);

                Execute(books, connection);

                connection.Close();
            }

            Console.WriteLine();
            Console.WriteLine("===============================================================================");
            Console.WriteLine("Using LocalDb (SQL Server)");
            Console.WriteLine("===============================================================================");
            using (TemporarySqlLocalDbInstance instance = TemporarySqlLocalDbInstance.Create(true))
                using (SqlConnection connection = instance.CreateConnection())
                {
                    connection.Open();

                    InitializeLocalDb(connection);

                    Execute(books, connection);

                    connection.Close();
                }
        }
示例#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();
        }
        public void TestFixtureSetUp()
        {
            if (!SqlLocalDbApi.IsLocalDBInstalled())
            {
                throw new Exception("LocalDB is not installed!");
            }

            this.databaseName = "SqlServerUserManagerTests_" + Guid.NewGuid().ToString("N");

            // Configure dapper to support datetime2
            SqlMapper.AddTypeMap(typeof(DateTime), DbType.DateTime2);

            // Create test instance
            this.instance = TemporarySqlLocalDbInstance.Create(deleteFiles: true);

            // Seed test data
            using (var connection = this.instance.CreateConnection())
            {
                connection.Open();

                try
                {
                    connection.Execute("CREATE DATABASE " + this.databaseName);
                    connection.Execute("USE " + this.databaseName);
                    connection.Execute("CREATE TABLE Users (Id bigint NOT NULL PRIMARY KEY IDENTITY(1,1), UserId VARCHAR(255) NOT NULL, Password VARCHAR(MAX) NOT NULL, Enabled BIT NULL, FirstName NVARCHAR(255) NOT NULL, LastName NVARCHAR(255) NOT NULL, LastLogin DATETIMEOFFSET, Created DATETIMEOFFSET)");
                    connection.Execute("INSERT INTO Users (UserId, Password, FirstName, LastName, Enabled) VALUES ('azzlack', '10000:gW7zpVeugKl8IFu7TcpPskcgQjy4185eAwBk9fFlZK6JNd1I45tLyCYtJrzWzE+kVCUP7lMSY8o808EjUgfavBzYU/ZtWypcdCdCJ0BMfMcf8Mk+XIYQCQLiFpt9Rjrf5mAY86NuveUtd1yBdPjxX5neMXEtquNYhu9I6iyzcN4=:Lk2ZkpmTDkNtO/tsB/GskMppdAX2bXehP+ED4oLis0AAv3Q1VeI8KL0SxIIWdxjKH0NJKZ6qniRFkfZKZRS2hS4SB8oyB34u/jyUlmv+RZGZSt9nJ9FYJn1percd/yFA7sSQOpkGljJ6OTwdthe0Bw0A/8qlKHbO2y2M5BFgYHY=', 'Ove', 'Andersen', 'true')");
                    connection.Execute("CREATE TABLE UserApiKeys (Id bigint NOT NULL PRIMARY KEY IDENTITY(1,1), UserId VARCHAR(255) NOT NULL, ApiKey VARCHAR(MAX) NOT NULL, Name VARCHAR(255) NOT NULL, Description VARCHAR(MAX) NOT NULL, Created DATETIMEOFFSET, LastUsed DATETIMEOFFSET)");
                    connection.Execute("INSERT INTO UserApiKeys (UserId, ApiKey, Name, Description) VALUES ('azzlack', 'PFJTQUtleVZhbHVlPjxNb2R1bHVzPnlidFpyM0pWS0p1L2hlUFMrV0Zla1kyYmRYVDlJMU1MeHZheTlIMW9IenRwRmI4QzJtQmUzY1EzVDhjUzE0ajJ4bk9lRkt2YVZ4Ukw5S2ozd0tOL1B3PT08L01vZHVsdXM+PEV4cG9uZW50PkFRQUI8L0V4cG9uZW50PjwvUlNBS2V5VmFsdWU+', 'Test', 'This is a test')");
                    connection.Execute("CREATE TABLE Clients (Id bigint NOT NULL PRIMARY KEY IDENTITY(1,1), ClientId VARCHAR(255) NOT NULL, ClientSecret VARCHAR(MAX) NOT NULL, PublicKey VARCHAR(MAX) NULL, RedirectUri NVARCHAR(2083) NOT NULL, Name NVARCHAR(255) NOT NULL, Enabled bit, LastUsed DATETIMEOFFSET, Created DATETIMEOFFSET)");
                    connection.Execute("INSERT INTO Clients (ClientId, ClientSecret, PublicKey, RedirectUri, Name, Enabled) VALUES ('NUnit', '10000:gW7zpVeugKl8IFu7TcpPskcgQjy4185eAwBk9fFlZK6JNd1I45tLyCYtJrzWzE+kVCUP7lMSY8o808EjUgfavBzYU/ZtWypcdCdCJ0BMfMcf8Mk+XIYQCQLiFpt9Rjrf5mAY86NuveUtd1yBdPjxX5neMXEtquNYhu9I6iyzcN4=:Lk2ZkpmTDkNtO/tsB/GskMppdAX2bXehP+ED4oLis0AAv3Q1VeI8KL0SxIIWdxjKH0NJKZ6qniRFkfZKZRS2hS4SB8oyB34u/jyUlmv+RZGZSt9nJ9FYJn1percd/yFA7sSQOpkGljJ6OTwdthe0Bw0A/8qlKHbO2y2M5BFgYHY=', 'PFJTQUtleVZhbHVlPjxNb2R1bHVzPnFKMEtXaXZWSjUxUWtKWGdIU1hidkxOTEJsa09rOE9uSWtvRTljU1FrRzhOZm5VYXBrWHpkTlEvb3FLZE9BSWxYK1hFMnNwN0xFcS9KRnJMaDRNblhRPT08L01vZHVsdXM+PEV4cG9uZW50PkFRQUI8L0V4cG9uZW50PjwvUlNBS2V5VmFsdWU+', 'http://localhost', 'NUnit Test', 1)");
                }
                finally
                {
                    connection.Close();
                }
            }

            base.TestFixtureSetUp();
        }
示例#10
0
        private static TemporarySqlLocalDbInstance ValueFactory()
        {
            var instance = TemporarySqlLocalDbInstance.Create(true);
            var builder  = instance.CreateConnectionStringBuilder();

            var databaseName = instance.Name;

            using (var conn = instance.CreateConnection())
            {
                conn.Open();
                var cmd = conn.CreateCommand();

                var fileName = Path.Combine(Environment.CurrentDirectory, databaseName + ".mdf");
                cmd.CommandText = string.Format("CREATE DATABASE [{0}] on (name='{0}', filename='{1}')", databaseName, fileName);
                cmd.ExecuteNonQuery();
            }

            Console.WriteLine(instance.Name);

            builder.InitialCatalog = databaseName;

            var connectionString = builder.ConnectionString;

            var migrate = new Migrate().Set(c =>
            {
                c.ConnectionString    = connectionString;
                c.DatabaseName        = databaseName;
                c.Silent              = true;
                c.DoNotCreateDatabase = false;
                //c.Logger = new ConsoleLogger();
                c.WithTransaction   = true;
                c.SqlFilesDirectory = Path.Combine(Environment.CurrentDirectory, "DatabaseMigration");
            });

            migrate.Run();

            return(instance);
        }
示例#11
0
 public static TestDatabase Create(string pathToSeedDb)
 {
     return(new TestDatabase(TemporarySqlLocalDbInstance.Create(true), pathToSeedDb));
 }
示例#12
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);
        }
示例#13
0
 public DatabaseFixture()
 {
     lazyInstance = new Lazy <TemporarySqlLocalDbInstance>(
         () => TemporarySqlLocalDbInstance.Create(true));
 }