コード例 #1
0
        public DeleteServiceTestsFixture()
        {
            _sqlDataStoreTestsFixture = new SqlDataStoreTestsFixture();
            _blobStorageTestsFixture  = new DataStoreTestsFixture();

            RecyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
        }
コード例 #2
0
        public async Task GivenTwoSchemaInitializationMethods_WhenCreatingTwoDatabases_BothSchemasShouldBeEquivalent()
        {
            // Create two databases, one where we apply the the maximum supported version's snapshot SQL schema file
            SqlDataStoreTestsFixture snapshotFixture = new SqlDataStoreTestsFixture(SqlDataStoreTestsFixture.GenerateDatabaseName("SNAPSHOT"));

            // And one where we apply .diff.sql files to upgrade the schema version to the maximum supported version.
            SqlDataStoreTestsFixture diffFixture = new SqlDataStoreTestsFixture(SqlDataStoreTestsFixture.GenerateDatabaseName("DIFF"));

            await snapshotFixture.InitializeAsync(forceIncrementalSchemaUpgrade : false);

            await diffFixture.InitializeAsync(forceIncrementalSchemaUpgrade : true);

            SchemaCompareDatabaseEndpoint snapshotEndpoint = new SchemaCompareDatabaseEndpoint(snapshotFixture.TestConnectionString);
            SchemaCompareDatabaseEndpoint diffEndpoint     = new SchemaCompareDatabaseEndpoint(diffFixture.TestConnectionString);
            var comparison = new SchemaComparison(snapshotEndpoint, diffEndpoint);

            SchemaComparisonResult result = comparison.Compare();

            Assert.True(result.IsEqual);

            // cleanup if succeeds
            await snapshotFixture.DisposeAsync();

            await diffFixture.DisposeAsync();
        }
コード例 #3
0
        public async Task GivenASchemaVersion_WhenApplyingSnapshotTwice_ShouldSucceed(int schemaVersion)
        {
            SqlDataStoreTestsFixture snapshotFixture = new SqlDataStoreTestsFixture(SqlDataStoreTestsFixture.GenerateDatabaseName("SNAPSHOT"));

            snapshotFixture.SchemaInformation = new SchemaInformation(SchemaVersionConstants.Min, schemaVersion);

            await snapshotFixture.InitializeAsync(forceIncrementalSchemaUpgrade : false);

            await snapshotFixture.SchemaUpgradeRunner.ApplySchemaAsync(schemaVersion, applyFullSchemaSnapshot : true, CancellationToken.None);

            // cleanup if succeeds
            await snapshotFixture.DisposeAsync();
        }
コード例 #4
0
        public async Task GivenTwoSchemaInitializationMethods_WhenCreatingTwoDatabases_BothSchemasShouldBeEquivalent()
        {
            // Create two databases, one where we apply the the maximum supported version's snapshot SQL schema file
            SqlDataStoreTestsFixture snapshotFixture = new SqlDataStoreTestsFixture(SqlDataStoreTestsFixture.GenerateDatabaseName("SNAPSHOT"));

            // And one where we apply .diff.sql files to upgrade the schema version to the maximum supported version.
            SqlDataStoreTestsFixture diffFixture = new SqlDataStoreTestsFixture(SqlDataStoreTestsFixture.GenerateDatabaseName("DIFF"));

            await snapshotFixture.InitializeAsync(forceIncrementalSchemaUpgrade : false);

            await diffFixture.InitializeAsync(forceIncrementalSchemaUpgrade : true);

            SchemaCompareDatabaseEndpoint snapshotEndpoint = new SchemaCompareDatabaseEndpoint(snapshotFixture.TestConnectionString);
            SchemaCompareDatabaseEndpoint diffEndpoint     = new SchemaCompareDatabaseEndpoint(diffFixture.TestConnectionString);
            var comparison = new SchemaComparison(snapshotEndpoint, diffEndpoint);
            SchemaComparisonResult result = comparison.Compare();

            // filter our sproc bodyscript differences because of auto-generation
            var actualDiffs = new List <SchemaDifference>();

            if (!result.IsEqual)
            {
                foreach (var diff in result.Differences)
                {
                    if (diff.Name == "SqlProcedure")
                    {
                        foreach (var childDiff in diff.Children)
                        {
                            if (childDiff.Name != "BodyScript")
                            {
                                actualDiffs.Add(diff);
                                break;
                            }
                        }
                    }
                    else
                    {
                        actualDiffs.Add(diff);
                    }
                }
            }

            Assert.Empty(actualDiffs);

            // cleanup if succeeds
            await snapshotFixture.DisposeAsync();

            await diffFixture.DisposeAsync();
        }
コード例 #5
0
        public async Task GivenANewSchemaVersion_WhenApplying_ShouldBackCompatible(int schemaVersion)
        {
            int oldSchemaVersion = schemaVersion - 1;
            // Create Sql store at old schema version
            SqlDataStoreTestsFixture oldSqlStore = new SqlDataStoreTestsFixture(SqlDataStoreTestsFixture.GenerateDatabaseName($"COMPATIBLE_{oldSchemaVersion}_"), new SchemaInformation(oldSchemaVersion, oldSchemaVersion));
            await oldSqlStore.InitializeAsync(forceIncrementalSchemaUpgrade : false);

            var oldProcedures = SqlTestUtils.GetStoredProcedures(oldSqlStore);

            // Create Sql store at new schema version
            SqlDataStoreTestsFixture newSqlStore = new SqlDataStoreTestsFixture(SqlDataStoreTestsFixture.GenerateDatabaseName($"COMPATIBLE_{schemaVersion}_"), new SchemaInformation(schemaVersion, schemaVersion));
            await newSqlStore.InitializeAsync(forceIncrementalSchemaUpgrade : false);

            var newProcedures = SqlTestUtils.GetStoredProcedures(newSqlStore);

            // Validate if stored procedures are compatible
            StoredProcedureCompatibleValidator.Validate(schemaVersion, newProcedures, oldProcedures);

            // Dispose if pass
            await oldSqlStore.DisposeAsync();

            await newSqlStore.DisposeAsync();
        }
コード例 #6
0
        /// <summary>
        /// Get StoredProcedures in SqlDataStore
        /// </summary>
        /// <param name="sqlDataStore">The Sql data store</param>
        /// <returns>The stored procedures.</returns>
        public static System.Collections.Generic.IReadOnlyList <StoredProcedure> GetStoredProcedures(SqlDataStoreTestsFixture sqlDataStore)
        {
            EnsureArg.IsNotNull(sqlDataStore, nameof(sqlDataStore));
            using var sqlConnection = new SqlConnection(sqlDataStore.TestConnectionString);
            ServerConnection connection           = new ServerConnection(sqlConnection);
            Server           server               = new Server(connection);
            Database         db                   = server.Databases[sqlDataStore.DatabaseName];
            DataTable        storedProcedureTable = db.EnumObjects(DatabaseObjectTypes.StoredProcedure);

            List <StoredProcedure> result = new List <StoredProcedure>();

            foreach (DataRow row in storedProcedureTable.Rows)
            {
                string schema = (string)row["Schema"];
                if (schema == "sys")
                {
                    continue;
                }

                StoredProcedure sp = (StoredProcedure)server.GetSmoObject(new Urn((string)row["Urn"]));
                result.Add(sp);
            }
            return(result);
        }
コード例 #7
0
 public ChangeFeedTestsFixture()
 {
     _sqlDataStoreTestsFixture = new SqlDataStoreTestsFixture();
 }