github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/operation_add_database_to_node_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"errors"
     5  	"github.com/ravendb/ravendb-go-client"
     6  	"github.com/ravendb/ravendb-go-client/serverwide/operations"
     7  	"github.com/stretchr/testify/assert"
     8  	"os"
     9  	"testing"
    10  	"time"
    11  )
    12  
    13  const iterations = 10
    14  
    15  func AddDatabaseToNode(t *testing.T, driver *RavenTestDriver) error {
    16  	if os.Getenv("RAVEN_License") == "" {
    17  		t.Skip("This test requires RavenDB license.")
    18  	}
    19  	var err error
    20  	store := driver.getDocumentStoreMust(t)
    21  	defer store.Close()
    22  
    23  	driver2 := createTestDriver(t)
    24  	store2, err := driver2.createMainStore()
    25  	defer store2.Close()
    26  	assert.NoError(t, err)
    27  
    28  	destroy := func() { destroyDriver(t, driver) }
    29  	defer recoverTest(t, destroy)
    30  
    31  	operationAddNodeToCluster := operations.OperationAddClusterNode{
    32  		Url:     store2.GetUrls()[0],
    33  		Tag:     "B",
    34  		Watcher: false,
    35  	}
    36  
    37  	err = store.Maintenance().Server().Send(&operationAddNodeToCluster)
    38  	assert.NoError(t, err)
    39  
    40  	operationAddDatabaseNode := operations.OperationAddDatabaseNode{
    41  		Name: store.GetDatabase(),
    42  		Node: "B",
    43  	}
    44  	err = store.Maintenance().Server().Send(&operationAddDatabaseNode)
    45  	assert.NoError(t, err)
    46  
    47  	for i := 0; i <= iterations; i++ {
    48  		time.Sleep(2 * time.Second) //we HAVE to wait for things to move around
    49  		command := ravendb.NewGetDatabaseTopologyCommand()
    50  		err = store2.GetRequestExecutor(store.GetDatabase()).ExecuteCommand(command, nil)
    51  		assert.NoError(t, err)
    52  		result := command.Result
    53  		assert.NotNil(t, result)
    54  		if len(result.Nodes) == 2 {
    55  			assert.Equal(t, result.Nodes[0].Database, store.GetDatabase())
    56  			assert.Equal(t, result.Nodes[1].Database, store.GetDatabase())
    57  			break
    58  		} else if i == iterations {
    59  			return errors.New("Expected database to be included in both node A and node B. ")
    60  		}
    61  	}
    62  	return nil
    63  }
    64  
    65  func TestAddDatabaseToNode(t *testing.T) {
    66  	driver := createTestDriver(t)
    67  	destroy := func() { destroyDriver(t, driver) }
    68  	defer recoverTest(t, destroy)
    69  
    70  	err := AddDatabaseToNode(t, driver)
    71  	if err != nil {
    72  		panic(err.Error())
    73  	}
    74  }