public async Task RemoteOrchestrator_CreateSnapshot_WithParameters_CheckBatchInfo() { 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(); // 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); setup.Filters.Add("Customer", "CompanyName"); var addressCustomerFilter = new SetupFilter("CustomerAddress"); addressCustomerFilter.AddParameter("CompanyName", "Customer"); addressCustomerFilter.AddJoin(Join.Left, "Customer").On("CustomerAddress", "CustomerId", "Customer", "CustomerId"); addressCustomerFilter.AddWhere("CompanyName", "Customer", "CompanyName"); setup.Filters.Add(addressCustomerFilter); var addressFilter = new SetupFilter("Address"); addressFilter.AddParameter("CompanyName", "Customer"); addressFilter.AddJoin(Join.Left, "CustomerAddress").On("CustomerAddress", "AddressId", "Address", "AddressId"); addressFilter.AddJoin(Join.Left, "Customer").On("CustomerAddress", "CustomerId", "Customer", "CustomerId"); addressFilter.AddWhere("CompanyName", "Customer", "CompanyName"); setup.Filters.Add(addressFilter); var orderHeaderFilter = new SetupFilter("SalesOrderHeader"); orderHeaderFilter.AddParameter("CompanyName", "Customer"); orderHeaderFilter.AddJoin(Join.Left, "CustomerAddress").On("CustomerAddress", "CustomerId", "SalesOrderHeader", "CustomerId"); orderHeaderFilter.AddJoin(Join.Left, "Customer").On("CustomerAddress", "CustomerId", "Customer", "CustomerId"); orderHeaderFilter.AddWhere("CompanyName", "Customer", "CompanyName"); setup.Filters.Add(orderHeaderFilter); var orderDetailsFilter = new SetupFilter("SalesOrderDetail"); orderDetailsFilter.AddParameter("CompanyName", "Customer"); orderDetailsFilter.AddJoin(Join.Left, "SalesOrderHeader").On("SalesOrderDetail", "SalesOrderID", "SalesOrderHeader", "SalesOrderID"); orderDetailsFilter.AddJoin(Join.Left, "CustomerAddress").On("CustomerAddress", "CustomerId", "SalesOrderHeader", "CustomerId"); orderDetailsFilter.AddJoin(Join.Left, "Customer").On("CustomerAddress", "CustomerId", "Customer", "CustomerId"); orderDetailsFilter.AddWhere("CompanyName", "Customer", "CompanyName"); setup.Filters.Add(orderDetailsFilter); var orchestrator = new RemoteOrchestrator(provider, options, setup); SyncParameters parameters = new SyncParameters(); var p1 = new SyncParameter("CompanyName", "A Bike Store"); parameters.Add(p1); var bi = await orchestrator.CreateSnapshotAsync(parameters); var finalDirectoryFullName = Path.Combine(snapshotDirectory, SyncOptions.DefaultScopeName); Assert.NotNull(bi); Assert.Equal(finalDirectoryFullName, bi.DirectoryRoot); Assert.Equal("CompanyName_ABikeStore", bi.DirectoryName); Assert.Single(bi.BatchPartsInfo); Assert.Equal(17, bi.BatchPartsInfo[0].Tables.Length); Assert.True(bi.BatchPartsInfo[0].IsLastBatch); // Check summary.json exists. var summaryFile = Path.Combine(bi.GetDirectoryFullPath(), "summary.json"); var summaryString = new StreamReader(summaryFile).ReadToEnd(); var summaryObject = JObject.Parse(summaryString); Assert.NotNull(summaryObject); string summaryDirname = (string)summaryObject["dirname"]; Assert.NotNull(summaryDirname); Assert.Equal("CompanyName_ABikeStore", summaryDirname); string summaryDir = (string)summaryObject["dir"]; Assert.NotNull(summaryDir); Assert.Equal(finalDirectoryFullName, summaryDir); Assert.Single(summaryObject["parts"]); Assert.NotNull(summaryObject["parts"][0]["file"]); Assert.NotNull(summaryObject["parts"][0]["index"]); Assert.Equal(0, (int)summaryObject["parts"][0]["index"]); Assert.NotNull(summaryObject["parts"][0]["last"]); Assert.True((bool)summaryObject["parts"][0]["last"]); Assert.Equal(17, summaryObject["parts"][0]["tables"].Count()); HelperDatabase.DropDatabase(ProviderType.Sql, dbName); }
internal void AddFilterParameter(SyncParameter param) { this.FilterParameters.Add(param); }