Skip to content

Commit d41c79f

Browse files
committed
testing: embedded Etcd server
1 parent e300c97 commit d41c79f

2 files changed

Lines changed: 53 additions & 27 deletions

File tree

internal/node/pool.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ func dismissContainer(requiredMemoryMB int64) (bool, error) {
307307
}
308308
}
309309

310-
cleanup: // Phase 2: Cleanup
310+
cleanup: // Phase 2: Cleanup
311311
if cleanedMB >= requiredMemoryMB { // if we'd actually free enough memory we do it, otherwise there's no point
312312
for _, item := range containerToDismiss {
313313
if item.pool.removeContainerFromIdle(item.cont) {

internal/test/main_test.go

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package test
22

33
import (
44
"context"
5-
"errors"
65
"flag"
76
"fmt"
7+
clientv3 "go.etcd.io/etcd/client/v3"
8+
"go.etcd.io/etcd/server/v3/embed"
89
"log"
910
"net/http"
1011
"os"
11-
"os/exec"
1212
"testing"
1313
"time"
1414

@@ -92,6 +92,55 @@ func TestMain(m *testing.M) {
9292

9393
// TODO: avoid full setup if testing.Short()
9494

95+
//
96+
// START ETCD
97+
//
98+
// Create a temporary directory for etcd data
99+
tempDir, err := os.MkdirTemp("", "etcd-data-*")
100+
if err != nil {
101+
log.Fatalf("Failed to create temp dir for etcd: %v", err)
102+
}
103+
// Schedule cleanup for the end of the test run
104+
defer func(path string) {
105+
err := os.RemoveAll(path)
106+
if err != nil {
107+
log.Printf("Failed to remove temp dir for etcd: %v", err)
108+
}
109+
}(tempDir)
110+
111+
// 1. Setup: Start an embedded etcd server
112+
cfg := embed.NewConfig()
113+
cfg.Dir = tempDir // Use the temporary directory
114+
cfg.LogOutputs = []string{"/dev/null"} // Silence etcd output
115+
etcd, err := embed.StartEtcd(cfg)
116+
if err != nil {
117+
log.Fatalf("Failed to start embedded etcd: %v", err)
118+
}
119+
defer etcd.Close()
120+
121+
select {
122+
case <-etcd.Server.ReadyNotify():
123+
// Silently continue
124+
case <-time.After(60 * time.Second):
125+
etcd.Server.Stop() // trigger a shutdown
126+
log.Fatal("Embedded etcd server took too long to start")
127+
}
128+
129+
// Create a client connected to the embedded server
130+
etcdClient, err := clientv3.New(clientv3.Config{
131+
Endpoints: []string{etcd.Clients[0].Addr().String()},
132+
DialTimeout: 5 * time.Second,
133+
})
134+
if err != nil {
135+
log.Fatalf("Failed to create etcd client: %v", err)
136+
}
137+
defer func(etcdClient *clientv3.Client) {
138+
err := etcdClient.Close()
139+
if err != nil {
140+
log.Printf("Failed to close etcd client: %v", err)
141+
}
142+
}(etcdClient)
143+
95144
echoServer, ok := setupServerledge(outboundIp.String())
96145
if ok != nil {
97146
fmt.Printf("failed to initialize serverledgde: %v\n", ok)
@@ -125,32 +174,9 @@ func waitForServerReady() {
125174
log.Fatal("Server not ready after timeout")
126175
}
127176

128-
// startReliably can start the containers, or restart them if needed
129-
func startReliably(startScript string) error {
130-
// make sure etcd is not already running, this will cause issues. Also clean etcd status for clean start
131-
cmd1 := exec.CommandContext(context.Background(), getShell(), "../../scripts/stop-etcd"+getShellExt())
132-
if err := cmd1.Run(); err != nil {
133-
// If the container doesn't exist, `docker stop` and `docker rm` will fail.
134-
// We can safely ignore this error and proceed.
135-
var exitError *exec.ExitError
136-
if errors.As(err, &exitError) {
137-
// 1 indicates that the container does not exist.
138-
if exitError.ExitCode() != 1 {
139-
log.Printf("failed to stop etcd: %v", err)
140-
}
141-
}
142-
}
143-
144-
cmd := exec.CommandContext(context.Background(), getShell(), startScript)
145-
err := cmd.Run()
146-
if err != nil {
147-
log.Fatalf("failed to start (%s): %v", startScript, err)
148-
}
149-
return err
150-
}
151-
152177
// run the bash script to initialize serverledge
153178
func setupServerledge(outboundIp string) (*echo.Echo, error) {
179+
154180
echoServer := testStartServerledge(false, outboundIp)
155181
return echoServer, nil
156182
}

0 commit comments

Comments
 (0)