forked from gastownhall/beads
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathopen_nocgo_test.go
More file actions
95 lines (82 loc) · 2.91 KB
/
Copy pathopen_nocgo_test.go
File metadata and controls
95 lines (82 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//go:build !cgo
package beads_test
import (
"context"
"fmt"
"net"
"os"
"path/filepath"
"strings"
"testing"
"github.com/steveyegge/beads"
)
func TestOpenBestAvailable_NoCGO_EmbeddedMode_ReturnsError(t *testing.T) {
tmpDir := t.TempDir()
beadsDir := filepath.Join(tmpDir, ".beads")
if err := os.MkdirAll(beadsDir, 0755); err != nil {
t.Fatalf("failed to create .beads dir: %v", err)
}
metadata := `{"backend":"dolt","database":"dolt","dolt_mode":"embedded"}`
if err := os.WriteFile(filepath.Join(beadsDir, "metadata.json"), []byte(metadata), 0644); err != nil {
t.Fatalf("failed to write metadata.json: %v", err)
}
ctx := context.Background()
_, _, err := beads.OpenBestAvailable(ctx, beadsDir)
if err == nil {
t.Fatal("expected error for embedded mode without CGO")
}
if !strings.Contains(err.Error(), "CGO") {
t.Errorf("expected error to mention CGO, got: %v", err)
}
}
func TestOpenBestAvailable_NoCGO_NoMetadata_ReturnsError(t *testing.T) {
tmpDir := t.TempDir()
beadsDir := filepath.Join(tmpDir, ".beads")
if err := os.MkdirAll(beadsDir, 0755); err != nil {
t.Fatalf("failed to create .beads dir: %v", err)
}
// No metadata.json — embedded is the default, CGO required.
ctx := context.Background()
_, _, err := beads.OpenBestAvailable(ctx, beadsDir)
if err == nil {
t.Fatal("expected error for embedded mode without CGO")
}
if !strings.Contains(err.Error(), "CGO") {
t.Errorf("expected error to mention CGO, got: %v", err)
}
}
func TestOpenBestAvailable_NoCGO_ServerMode_FailsWithoutServer(t *testing.T) {
// Even in !cgo builds, server mode should delegate to OpenFromConfig and
// return the fail-fast error when no server is listening.
if prev := os.Getenv("BEADS_DOLT_PORT"); prev != "" {
os.Unsetenv("BEADS_DOLT_PORT")
t.Cleanup(func() { os.Setenv("BEADS_DOLT_PORT", prev) })
}
if prev := os.Getenv("BEADS_TEST_MODE"); prev != "" {
os.Unsetenv("BEADS_TEST_MODE")
t.Cleanup(func() { os.Setenv("BEADS_TEST_MODE", prev) })
}
tmpDir := t.TempDir()
beadsDir := filepath.Join(tmpDir, ".beads")
if err := os.MkdirAll(beadsDir, 0755); err != nil {
t.Fatalf("failed to create .beads dir: %v", err)
}
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("failed to find free port: %v", err)
}
freePort := ln.Addr().(*net.TCPAddr).Port
ln.Close()
metadata := fmt.Sprintf(`{"backend":"dolt","database":"dolt","dolt_mode":"server","dolt_server_host":"127.0.0.1","dolt_server_port":%d}`, freePort)
if err := os.WriteFile(filepath.Join(beadsDir, "metadata.json"), []byte(metadata), 0644); err != nil {
t.Fatalf("failed to write metadata.json: %v", err)
}
ctx := context.Background()
_, _, openErr := beads.OpenBestAvailable(ctx, beadsDir)
if openErr == nil {
t.Fatal("OpenBestAvailable (server mode) should fail when no server is running")
}
if !strings.Contains(openErr.Error(), "unreachable") {
t.Errorf("expected 'unreachable' in error, got: %v", openErr)
}
}