(t *testing.T)
| 141 | } |
| 142 | |
| 143 | func TestUpgradeMembersWithoutRole(t *testing.T) { |
| 144 | s, cleanup := state.NewTestState(t) |
| 145 | defer cleanup() |
| 146 | |
| 147 | serverCert := tlstest.TestingKeyPair(t) |
| 148 | mux := http.NewServeMux() |
| 149 | server := newServer(serverCert, mux) |
| 150 | defer server.Close() |
| 151 | |
| 152 | address := server.Listener.Addr().String() |
| 153 | setRaftRole(t, s.DB.Node, address) |
| 154 | |
| 155 | s.ServerCert = func() *localtls.CertInfo { return serverCert } |
| 156 | |
| 157 | gateway := newGateway(t, s.DB.Node, serverCert, s) |
| 158 | defer func() { _ = gateway.Shutdown() }() |
| 159 | |
| 160 | for path, handler := range gateway.HandlerFuncs(nil, trustedCerts) { |
| 161 | mux.HandleFunc(path, handler) |
| 162 | } |
| 163 | |
| 164 | var err error |
| 165 | require.NoError(t, s.DB.Cluster.Close()) |
| 166 | store := gateway.NodeStore() |
| 167 | dial := gateway.DialFunc() |
| 168 | s.DB.Cluster, err = db.OpenCluster(context.Background(), "db.bin", store, address, "/unused/db/dir", 5*time.Second, driver.WithDialFunc(dial)) |
| 169 | require.NoError(t, err) |
| 170 | gateway.Cluster = s.DB.Cluster |
| 171 | |
| 172 | // Add a couple of members to the database. |
| 173 | var members []db.NodeInfo |
| 174 | err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error { |
| 175 | _, err := tx.CreateNode("foo", "1.2.3.4") |
| 176 | require.NoError(t, err) |
| 177 | _, err = tx.CreateNode("bar", "5.6.7.8") |
| 178 | require.NoError(t, err) |
| 179 | members, err = tx.GetNodes(ctx) |
| 180 | require.NoError(t, err) |
| 181 | return nil |
| 182 | }) |
| 183 | require.NoError(t, err) |
| 184 | |
| 185 | err = cluster.UpgradeMembersWithoutRole(gateway, members) |
| 186 | require.NoError(t, err) |
| 187 | |
| 188 | // The members have been added to the raft configuration. |
| 189 | nodes, err := gateway.RaftNodes() |
| 190 | require.NoError(t, err) |
| 191 | |
| 192 | assert.Len(t, nodes, 3) |
| 193 | assert.Equal(t, uint64(1), nodes[0].ID) |
| 194 | assert.Equal(t, address, nodes[0].Address) |
| 195 | assert.Equal(t, uint64(2), nodes[1].ID) |
| 196 | assert.Equal(t, "1.2.3.4", nodes[1].Address) |
| 197 | assert.Equal(t, uint64(3), nodes[2].ID) |
| 198 | assert.Equal(t, "5.6.7.8", nodes[2].Address) |
| 199 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…