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

     1  package tests
     2  
     3  import (
     4  	"github.com/ravendb/ravendb-go-client/serverwide/operations"
     5  	"github.com/stretchr/testify/assert"
     6  	"os"
     7  	"testing"
     8  	"time"
     9  )
    10  
    11  func removeNodeFromClusterTest(t *testing.T, driver *RavenTestDriver) {
    12  	if os.Getenv("RAVEN_License") == "" {
    13  		t.Skip("This test requires RavenDB license.")
    14  	}
    15  	var err error
    16  	store := driver.getDocumentStoreMust(t)
    17  	defer store.Close()
    18  	assert.NoError(t, err)
    19  
    20  	driver2 := createTestDriver(t)
    21  	store2, err := driver2.createMainStore()
    22  	defer store2.Close()
    23  	assert.NoError(t, err)
    24  
    25  	destroy := func() { destroyDriver(t, driver) }
    26  	defer recoverTest(t, destroy)
    27  
    28  	operationAddNodeToCluster := operations.OperationAddClusterNode{
    29  		Url:     store2.GetUrls()[0],
    30  		Tag:     "B",
    31  		Watcher: false,
    32  	}
    33  	err = store.Maintenance().Server().Send(&operationAddNodeToCluster)
    34  	assert.NoError(t, err)
    35  
    36  	time.Sleep(time.Second * 5) // wait for topology to be updated
    37  	operation := operations.OperationGetClusterTopology{}
    38  	err = store.Maintenance().Server().Send(&operation)
    39  	assert.NoError(t, err)
    40  	assert.NotEmpty(t, operation.Leader)
    41  	assert.NotEmpty(t, operation.NodeTag)
    42  
    43  	topology := operation.Topology
    44  	assert.NotNil(t, topology)
    45  	assert.NotEmpty(t, topology.TopologyID)
    46  	assert.Equal(t, 2, len(topology.Members))
    47  	assert.Equal(t, 0, len(topology.Watchers))
    48  	assert.Equal(t, 0, len(topology.Promotables))
    49  
    50  	operationRemoveNode := operations.RemoveClusterNode{
    51  		Node: store2.GetUrls()[0],
    52  		Tag:  "B",
    53  	}
    54  	err = store.Maintenance().Server().Send(&operationRemoveNode)
    55  	assert.NoError(t, err)
    56  
    57  	time.Sleep(time.Second * 5) // wait for topology to be updated
    58  	operation = operations.OperationGetClusterTopology{}
    59  	err = store.Maintenance().Server().Send(&operation)
    60  	assert.NoError(t, err)
    61  	assert.NotEmpty(t, operation.Leader)
    62  	assert.NotEmpty(t, operation.NodeTag)
    63  
    64  	topology = operation.Topology
    65  	assert.NotNil(t, topology)
    66  	assert.NotEmpty(t, topology.TopologyID)
    67  	assert.Equal(t, 1, len(topology.Members))
    68  	assert.Equal(t, 0, len(topology.Watchers))
    69  	assert.Equal(t, 0, len(topology.Promotables))
    70  }
    71  
    72  func TestRemoveNodeFromCluster(t *testing.T) {
    73  	driver := createTestDriver(t)
    74  
    75  	destroy := func() { destroyDriver(t, driver) }
    76  	defer recoverTest(t, destroy)
    77  
    78  	removeNodeFromClusterTest(t, driver)
    79  }