public async Task RemoteOrchestrator_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 remoteOrchestrator = new RemoteOrchestrator(sqlProvider, options); var scopeTableCreating = 0; var scopeTableCreated = 0; var scopeLoading = 0; var scopeLoaded = 0; var scopeSaving = 0; var scopeSaved = 0; remoteOrchestrator.OnScopeSaving(ssa => { Assert.NotNull(ssa.Command); scopeSaving++; }); remoteOrchestrator.OnScopeSaved(ssa => scopeSaved++); remoteOrchestrator.OnScopeTableCreating(stca => { Assert.NotNull(stca.Command); scopeTableCreating++; }); remoteOrchestrator.OnScopeTableCreated(stca => { scopeTableCreated++; }); remoteOrchestrator.OnServerScopeInfoLoading(args => { Assert.NotNull(args.Command); 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); scopeLoading++; }); remoteOrchestrator.OnServerScopeInfoLoaded(args => { Assert.Equal(scopeName, args.Context.ScopeName); Assert.NotNull(args.Connection); Assert.NotNull(args.Transaction); scopeLoaded++; }); var serverScopeInfo = await remoteOrchestrator.GetServerScopeInfoAsync(scopeName, setup); // TODO : if serverScope.Schema is null, should we Provision here ? serverScopeInfo.Version = "2.0"; await remoteOrchestrator.SaveServerScopeInfoAsync(serverScopeInfo); Assert.Equal(2, scopeTableCreating); Assert.Equal(2, scopeTableCreated); Assert.Equal(2, scopeLoading); Assert.Equal(3, scopeLoaded); Assert.Equal(3, scopeSaving); Assert.Equal(3, scopeSaved); HelperDatabase.DropDatabase(ProviderType.Sql, dbName); }