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 }