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 LocalOrchestrator_Scope() { 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 localOrchestrator = new LocalOrchestrator(sqlProvider, options, setup, scopeName); var scopeTableCreating = 0; var scopeTableCreated = 0; var scopeLoading = 0; var scopeLoaded = 0; var scopeSaving = 0; var scopeSaved = 0; localOrchestrator.OnScopeSaving(ssa => { Assert.NotNull(ssa.Command); scopeSaving++; }); localOrchestrator.OnScopeSaved(ssa => scopeSaved++); localOrchestrator.OnScopeTableCreating(stca => { Assert.NotNull(stca.Command); scopeTableCreating++; }); localOrchestrator.OnScopeTableCreated(stca => { scopeTableCreated++; }); localOrchestrator.OnScopeLoading(args => { Assert.NotNull(args.Command); 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); scopeLoading++; }); localOrchestrator.OnScopeLoaded(args => { Assert.Equal(SyncStage.ScopeLoading, args.Context.SyncStage); Assert.Equal(scopeName, args.Context.ScopeName); Assert.NotNull(args.ScopeInfo); Assert.Equal(scopeName, args.ScopeInfo.Name); Assert.NotNull(args.Connection); Assert.NotNull(args.Transaction); scopeLoaded++; }); var localScopeInfo = await localOrchestrator.GetClientScopeAsync(); Assert.Equal(1, scopeTableCreating); Assert.Equal(1, scopeTableCreated); Assert.Equal(1, scopeLoading); Assert.Equal(1, scopeLoaded); Assert.Equal(1, scopeSaving); Assert.Equal(1, scopeSaved); scopeTableCreating = 0; scopeTableCreated = 0; scopeLoading = 0; scopeLoaded = 0; scopeSaving = 0; scopeSaved = 0; localScopeInfo.Version = "2.0"; await localOrchestrator.SaveClientScopeAsync(localScopeInfo); Assert.Equal(0, scopeTableCreating); Assert.Equal(0, scopeTableCreated); Assert.Equal(0, scopeLoading); Assert.Equal(0, scopeLoaded); Assert.Equal(1, scopeSaving); Assert.Equal(1, scopeSaved); HelperDatabase.DropDatabase(ProviderType.Sql, dbName); }