// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package raft import ( "context" "fmt" "io/ioutil" "testing" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-uuid" ) func GetRaft(t testing.TB, bootstrap bool, noStoreState bool) (*RaftBackend, string) { raftDir, err := ioutil.TempDir("", "vault-raft-") if err != nil { t.Fatal(err) } t.Logf("raft dir: %s", raftDir) return getRaftWithDir(t, bootstrap, noStoreState, raftDir) } func getRaftWithDir(t testing.TB, bootstrap bool, noStoreState bool, raftDir string) (*RaftBackend, string) { id, err := uuid.GenerateUUID() if err != nil { t.Fatal(err) } logger := hclog.New(&hclog.LoggerOptions{ Name: fmt.Sprintf("raft-%s", id), Level: hclog.Trace, }) logger.Info("raft dir", "dir", raftDir) conf := map[string]string{ "path": raftDir, "trailing_logs": "100", "node_id": id, } if noStoreState { conf["doNotStoreLatestState"] = "" } backendRaw, err := NewRaftBackend(conf, logger) if err != nil { t.Fatal(err) } backend := backendRaw.(*RaftBackend) if bootstrap { err = backend.Bootstrap([]Peer{ { ID: backend.NodeID(), Address: backend.NodeID(), }, }) if err != nil { t.Fatal(err) } err = backend.SetupCluster(context.Background(), SetupOpts{}) if err != nil { t.Fatal(err) } for { if backend.raft.AppliedIndex() >= 2 { break } } } backend.DisableAutopilot() return backend, raftDir }