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  }