github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/replication_test_base_test.go (about) 1 package tests 2 3 import ( 4 "github.com/ravendb/ravendb-go-client" 5 "time" 6 ) 7 8 // Note: Java's ReplicationTestBase is folded into RavenTestDriver 9 10 func (d *RavenTestDriver) modifyReplicationDestination(replicationNode *ravendb.ReplicationNode) { 11 // empty by design 12 } 13 14 func (d *RavenTestDriver) setupReplication(fromStore *ravendb.DocumentStore, destinations ...*ravendb.DocumentStore) error { 15 for _, store := range destinations { 16 databaseWatcher := ravendb.NewExternalReplication(store.GetDatabase(), "ConnectionString-"+store.GetIdentifier()) 17 d.modifyReplicationDestination(&databaseWatcher.ReplicationNode) 18 19 if err := d.addWatcherToReplicationTopology(fromStore, databaseWatcher); err != nil { 20 return err 21 } 22 } 23 return nil 24 } 25 26 func (d *RavenTestDriver) addWatcherToReplicationTopology(store *ravendb.DocumentStore, watcher *ravendb.ExternalReplication) error { 27 connectionString := ravendb.NewRavenConnectionString() 28 connectionString.Name = watcher.ConnectionStringName 29 connectionString.Database = watcher.Database 30 connectionString.TopologyDiscoveryUrls = store.GetUrls() 31 32 err := store.Maintenance().Send(ravendb.NewPutConnectionStringOperation(connectionString)) 33 if err != nil { 34 return err 35 } 36 op := ravendb.NewUpdateExternalReplicationOperation(watcher) 37 return store.Maintenance().Send(op) 38 } 39 40 func (d *RavenTestDriver) waitForDocumentToReplicate(store *ravendb.DocumentStore, result interface{}, id string, timeout time.Duration) error { 41 sw := time.Now() 42 43 for { 44 time.Sleep(time.Millisecond * 500) 45 dur := time.Since(sw) 46 if dur > timeout { 47 return nil 48 } 49 { 50 session, err := store.OpenSession("") 51 if err != nil { 52 return err 53 } 54 err = session.Load(result, id) 55 session.Close() 56 if err != nil { 57 return err 58 } 59 } 60 } 61 }