public async Task LocalOrchestrator_EnsureScope_CheckInterceptors() { var dbName = HelperDatabase.GetRandomName("tcp_lo_"); await HelperDatabase.CreateDatabaseAsync(ProviderType.Sql, dbName, true); var cs = HelperDatabase.GetConnectionString(ProviderType.Sql, dbName); var sqlProvider = new SqlSyncProvider(cs); var ctx = new AdventureWorksContext((dbName, ProviderType.Sql, sqlProvider), true, false); await ctx.Database.EnsureCreatedAsync(); var scopeName = "scope"; var options = new SyncOptions(); var setup = new SyncSetup(this.Tables); var onScopeLoading = false; var onScopeLoaded = false; var localOrchestrator = new LocalOrchestrator(sqlProvider, options, setup, scopeName); localOrchestrator.OnScopeLoading(args => { Assert.Equal(SyncStage.ScopeLoading, args.Context.SyncStage); Assert.Equal(scopeName, args.Context.ScopeName); Assert.Equal(scopeName, args.ScopeName); Assert.NotNull(args.Connection); Assert.NotNull(args.Transaction); Assert.Equal(ConnectionState.Open, args.Connection.State); Assert.Same(args.Connection, args.Transaction.Connection); onScopeLoading = true; }); localOrchestrator.OnScopeLoaded(args => { Assert.Equal(SyncStage.ScopeLoaded, args.Context.SyncStage); Assert.Equal(scopeName, args.Context.ScopeName); Assert.NotNull(args.ScopeInfo); Assert.Equal(scopeName, args.ScopeInfo.Name); Assert.NotNull(args.Connection); Assert.Null(args.Transaction); Assert.Equal(ConnectionState.Closed, args.Connection.State); onScopeLoaded = true; }); // Check connection and transaction interceptors BaseOrchestratorTests.AssertConnectionAndTransaction(localOrchestrator, SyncStage.ScopeLoading, SyncStage.ScopeLoaded); var localScopeInfo = await localOrchestrator.GetClientScopeAsync(); Assert.True(onScopeLoaded); Assert.True(onScopeLoading); HelperDatabase.DropDatabase(ProviderType.Sql, dbName); }
public async Task RemoteOrchestrator_CreateSnapshot_CheckInterceptors() { var dbName = HelperDatabase.GetRandomName("tcp_lo_srv"); await HelperDatabase.CreateDatabaseAsync(ProviderType.Sql, dbName, true); var cs = HelperDatabase.GetConnectionString(ProviderType.Sql, dbName); var serverProvider = new SqlSyncProvider(cs); var ctx = new AdventureWorksContext((dbName, ProviderType.Sql, serverProvider), true, true); await ctx.Database.EnsureCreatedAsync(); var scopeName = "scopesnap1"; var onSnapshotCreating = false; var onSnapshotCreated = false; // snapshot directory var snapshotDirctoryName = HelperDatabase.GetRandomName(); var snapshotDirectory = Path.Combine(Environment.CurrentDirectory, snapshotDirctoryName); var options = new SyncOptions { SnapshotsDirectory = snapshotDirectory, BatchSize = 200 }; var setup = new SyncSetup(Tables); var remoteOrchestrator = new RemoteOrchestrator(serverProvider, options, setup, scopeName); // Assert on connection and transaction interceptors BaseOrchestratorTests.AssertConnectionAndTransaction(remoteOrchestrator, SyncStage.SnapshotCreating); remoteOrchestrator.OnSnapshotCreating(args => { Assert.IsType <SnapshotCreatingArgs>(args); Assert.Equal(SyncStage.SnapshotCreating, args.Context.SyncStage); Assert.Equal(scopeName, args.Context.ScopeName); Assert.NotNull(args.Connection); Assert.NotNull(args.Transaction); Assert.Equal(ConnectionState.Open, args.Connection.State); Assert.NotNull(args.Schema); Assert.Equal(snapshotDirectory, args.SnapshotDirectory); Assert.NotEqual(0, args.Timestamp); onSnapshotCreating = true; }); remoteOrchestrator.OnSnapshotCreated(args => { Assert.IsType <SnapshotCreatedArgs>(args); Assert.Equal(SyncStage.SnapshotCreating, args.Context.SyncStage); Assert.Equal(scopeName, args.Context.ScopeName); Assert.NotNull(args.Connection); Assert.Null(args.Transaction); Assert.NotNull(args.BatchInfo); var finalDirectoryFullName = Path.Combine(snapshotDirectory, scopeName); Assert.Equal(finalDirectoryFullName, args.BatchInfo.DirectoryRoot); Assert.Equal("ALL", args.BatchInfo.DirectoryName); Assert.Single(args.BatchInfo.BatchPartsInfo); Assert.Equal(17, args.BatchInfo.BatchPartsInfo[0].Tables.Length); Assert.True(args.BatchInfo.BatchPartsInfo[0].IsLastBatch); onSnapshotCreated = true; }); var bi = await remoteOrchestrator.CreateSnapshotAsync(); Assert.Equal(SyncStage.SnapshotCreating, remoteOrchestrator.GetContext().SyncStage); Assert.True(onSnapshotCreating); Assert.True(onSnapshotCreated); var dbNameCli = HelperDatabase.GetRandomName("tcp_lo_cli"); await HelperDatabase.CreateDatabaseAsync(ProviderType.Sql, dbNameCli, true); var csClient = HelperDatabase.GetConnectionString(ProviderType.Sql, dbNameCli); var clientProvider = new SqlSyncProvider(csClient); // Make a first sync to be sure everything is in place var agent = new SyncAgent(clientProvider, serverProvider, options, setup, scopeName); var onSnapshotApplying = false; var onSnapshotApplied = false; agent.LocalOrchestrator.OnSnapshotApplying(saa => { onSnapshotApplying = true; }); agent.LocalOrchestrator.OnSnapshotApplied(saa => { onSnapshotApplied = true; }); // Making a first sync, will initialize everything we need await agent.SynchronizeAsync(); Assert.True(onSnapshotApplying); Assert.True(onSnapshotApplied); HelperDatabase.DropDatabase(ProviderType.Sql, dbName); }
public async Task RemoteOrchestrator_CreateSnapshot_CheckInterceptors() { var dbName = HelperDatabase.GetRandomName("tcp_lo_"); await HelperDatabase.CreateDatabaseAsync(ProviderType.Sql, dbName, true); var cs = HelperDatabase.GetConnectionString(ProviderType.Sql, dbName); var sqlProvider = new SqlSyncProvider(cs); var ctx = new AdventureWorksContext((dbName, ProviderType.Sql, sqlProvider), true, true); await ctx.Database.EnsureCreatedAsync(); var scopeName = "scopesnap1"; var onSnapshotCreating = false; var onSnapshotCreated = false; // snapshot directory var snapshotDirctoryName = HelperDatabase.GetRandomName(); var snapshotDirectory = Path.Combine(Environment.CurrentDirectory, snapshotDirctoryName); var options = new SyncOptions { SnapshotsDirectory = snapshotDirectory, BatchSize = 200 }; var setup = new SyncSetup(Tables); var provider = new SqlSyncProvider(cs); var orchestrator = new RemoteOrchestrator(provider, options, setup, scopeName); // Assert on connection and transaction interceptors BaseOrchestratorTests.AssertConnectionAndTransaction(orchestrator, SyncStage.SnapshotCreating, SyncStage.SnapshotCreated); orchestrator.OnSnapshotCreating(args => { Assert.IsType <SnapshotCreatingArgs>(args); Assert.Equal(SyncStage.SnapshotCreating, args.Context.SyncStage); Assert.Equal(scopeName, args.Context.ScopeName); Assert.NotNull(args.Connection); Assert.NotNull(args.Transaction); Assert.Equal(ConnectionState.Open, args.Connection.State); Assert.NotNull(args.Schema); Assert.Equal(snapshotDirectory, args.SnapshotDirectory); Assert.NotEqual(0, args.Timestamp); onSnapshotCreating = true; }); orchestrator.OnSnapshotCreated(args => { Assert.IsType <SnapshotCreatedArgs>(args); Assert.Equal(SyncStage.SnapshotCreated, args.Context.SyncStage); Assert.Equal(scopeName, args.Context.ScopeName); Assert.NotNull(args.Connection); Assert.Null(args.Transaction); Assert.Equal(ConnectionState.Closed, args.Connection.State); Assert.NotNull(args.Schema); Assert.NotNull(args.BatchInfo); var finalDirectoryFullName = Path.Combine(snapshotDirectory, scopeName); Assert.Equal(finalDirectoryFullName, args.BatchInfo.DirectoryRoot); Assert.Equal("ALL", args.BatchInfo.DirectoryName); Assert.Single(args.BatchInfo.BatchPartsInfo); Assert.Equal(17, args.BatchInfo.BatchPartsInfo[0].Tables.Length); Assert.True(args.BatchInfo.BatchPartsInfo[0].IsLastBatch); onSnapshotCreated = true; }); var bi = await orchestrator.CreateSnapshotAsync(); Assert.Equal(SyncStage.SnapshotCreated, orchestrator.GetContext().SyncStage); Assert.True(onSnapshotCreating); Assert.True(onSnapshotCreated); HelperDatabase.DropDatabase(ProviderType.Sql, dbName); }