Skip to content

Commit bac8466

Browse files
committed
add unit tests for Registry pkg
Signed-off-by: Ansuman Sahoo <[email protected]>
1 parent d7f297a commit bac8466

File tree

1 file changed

+254
-0
lines changed

1 file changed

+254
-0
lines changed

pkg/registry/registry_test.go

Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
// SPDX-FileCopyrightText: Copyright The Lima Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package registry
5+
6+
import (
7+
"context"
8+
"net"
9+
"os"
10+
"path/filepath"
11+
"runtime"
12+
"testing"
13+
14+
"gotest.tools/v3/assert"
15+
16+
"github.com/lima-vm/lima/pkg/driver"
17+
"github.com/lima-vm/lima/pkg/store"
18+
)
19+
20+
type mockDriver struct {
21+
Name string
22+
}
23+
24+
func newMockDriver(name string) *mockDriver {
25+
return &mockDriver{Name: name}
26+
}
27+
28+
var _ driver.Driver = (*mockDriver)(nil)
29+
30+
func (m *mockDriver) Validate() error { return nil }
31+
func (m *mockDriver) Initialize(_ context.Context) error { return nil }
32+
func (m *mockDriver) CreateDisk(_ context.Context) error { return nil }
33+
func (m *mockDriver) Start(_ context.Context) (chan error, error) { return nil, nil }
34+
func (m *mockDriver) Stop(_ context.Context) error { return nil }
35+
func (m *mockDriver) RunGUI() error { return nil }
36+
func (m *mockDriver) ChangeDisplayPassword(_ context.Context, _ string) error { return nil }
37+
func (m *mockDriver) DisplayConnection(_ context.Context) (string, error) { return "", nil }
38+
func (m *mockDriver) CreateSnapshot(_ context.Context, _ string) error { return nil }
39+
func (m *mockDriver) ApplySnapshot(_ context.Context, _ string) error { return nil }
40+
func (m *mockDriver) DeleteSnapshot(_ context.Context, _ string) error { return nil }
41+
func (m *mockDriver) ListSnapshots(_ context.Context) (string, error) { return "", nil }
42+
func (m *mockDriver) Register(_ context.Context) error { return nil }
43+
func (m *mockDriver) Unregister(_ context.Context) error { return nil }
44+
func (m *mockDriver) ForwardGuestAgent() bool { return false }
45+
func (m *mockDriver) GuestAgentConn(_ context.Context) (net.Conn, string, error) { return nil, "", nil }
46+
func (m *mockDriver) Info() driver.Info { return driver.Info{DriverName: m.Name} }
47+
func (m *mockDriver) Configure(_ *store.Instance, _ int) *driver.ConfiguredDriver { return nil }
48+
49+
func TestRegister(t *testing.T) {
50+
originalInternalDrivers := internalDrivers
51+
t.Cleanup(func() {
52+
internalDrivers = originalInternalDrivers
53+
})
54+
55+
internalDrivers = make(map[string]driver.Driver)
56+
57+
mockDrv := newMockDriver("test-driver")
58+
mockDrv2 := newMockDriver("test-driver-2")
59+
Register(mockDrv)
60+
Register(mockDrv2)
61+
62+
assert.Equal(t, len(internalDrivers), 2)
63+
assert.Equal(t, internalDrivers["test-driver"], mockDrv)
64+
assert.Equal(t, internalDrivers["test-driver-2"], mockDrv2)
65+
66+
// Test registering duplicate driver (should not overwrite)
67+
mockDrv3 := newMockDriver("test-driver")
68+
Register(mockDrv3)
69+
70+
assert.Equal(t, len(internalDrivers), 2)
71+
assert.Equal(t, internalDrivers["test-driver"], mockDrv)
72+
73+
driverType := CheckInternalOrExternal("test-driver")
74+
assert.Equal(t, driverType, Internal)
75+
76+
extDriver, intDriver, exists := Get("test-driver")
77+
assert.Equal(t, exists, true)
78+
assert.Assert(t, extDriver == nil)
79+
assert.Assert(t, intDriver != nil)
80+
assert.Equal(t, intDriver.Info().DriverName, "test-driver")
81+
82+
vmTypes := List()
83+
assert.Equal(t, vmTypes["test-driver-2"], Internal)
84+
}
85+
86+
func TestDiscoverDriversInDir(t *testing.T) {
87+
originalExternalDrivers := ExternalDrivers
88+
t.Cleanup(func() {
89+
ExternalDrivers = originalExternalDrivers
90+
})
91+
92+
ExternalDrivers = make(map[string]*ExternalDriver)
93+
tempDir := t.TempDir()
94+
95+
var driverPath string
96+
driverName := "mockext"
97+
if runtime.GOOS == "windows" {
98+
driverPath = filepath.Join(tempDir, "lima-driver-"+driverName+".exe")
99+
} else {
100+
driverPath = filepath.Join(tempDir, "lima-driver-"+driverName)
101+
}
102+
103+
err := os.WriteFile(driverPath, []byte(""), 0o755)
104+
assert.NilError(t, err)
105+
t.Cleanup(func() {
106+
err := os.Remove(driverPath)
107+
assert.NilError(t, err)
108+
109+
_, err = os.Stat(driverPath)
110+
assert.Assert(t, os.IsNotExist(err))
111+
})
112+
113+
err = discoverDriversInDir(tempDir)
114+
assert.NilError(t, err)
115+
116+
assert.Equal(t, len(ExternalDrivers), 1)
117+
extDriver := ExternalDrivers[driverName]
118+
assert.Assert(t, extDriver != nil)
119+
assert.Equal(t, extDriver.Name, driverName)
120+
assert.Equal(t, extDriver.Path, driverPath)
121+
122+
driverType := CheckInternalOrExternal(driverName)
123+
assert.Equal(t, driverType, External)
124+
125+
extDriver, intDriver, exists := Get(driverName)
126+
assert.Equal(t, exists, true)
127+
assert.Assert(t, extDriver != nil)
128+
assert.Assert(t, intDriver == nil)
129+
assert.Equal(t, extDriver.Name, driverName)
130+
131+
vmTypes := List()
132+
assert.Equal(t, vmTypes[driverName], driverPath)
133+
}
134+
135+
func TestRegisterDriverFile(t *testing.T) {
136+
originalExternalDrivers := ExternalDrivers
137+
t.Cleanup(func() {
138+
ExternalDrivers = originalExternalDrivers
139+
})
140+
141+
tests := []struct {
142+
name string
143+
filename string
144+
expectDriver bool
145+
expectedName string
146+
}{
147+
{
148+
name: "valid driver file",
149+
filename: "lima-driver-test",
150+
expectDriver: runtime.GOOS != "windows",
151+
expectedName: "test",
152+
},
153+
{
154+
name: "valid driver file with extension on Windows",
155+
filename: "lima-driver-windows.exe",
156+
expectDriver: runtime.GOOS == "windows",
157+
expectedName: "windows",
158+
},
159+
{
160+
name: "invalid filename - no prefix",
161+
filename: "not-a-driver",
162+
expectDriver: false,
163+
},
164+
{
165+
name: "invalid filename - wrong prefix",
166+
filename: "driver-lima-test",
167+
expectDriver: false,
168+
},
169+
{
170+
name: "empty name after prefix",
171+
filename: "lima-driver-",
172+
expectDriver: false,
173+
},
174+
}
175+
176+
for _, tt := range tests {
177+
t.Run(tt.name, func(t *testing.T) {
178+
ExternalDrivers = make(map[string]*ExternalDriver)
179+
registerDriverFile(filepath.Join("/test/path", tt.filename))
180+
181+
if tt.expectDriver {
182+
assert.Equal(t, len(ExternalDrivers), 1)
183+
extDriver := ExternalDrivers[tt.expectedName]
184+
assert.Assert(t, extDriver != nil)
185+
assert.Equal(t, extDriver.Name, tt.expectedName)
186+
assert.Equal(t, extDriver.Path, filepath.Join("/test/path", tt.filename))
187+
} else {
188+
assert.Equal(t, len(ExternalDrivers), 0)
189+
}
190+
})
191+
}
192+
}
193+
194+
func TestGet(t *testing.T) {
195+
originalExternalDrivers := ExternalDrivers
196+
originalInternalDrivers := internalDrivers
197+
t.Cleanup(func() {
198+
ExternalDrivers = originalExternalDrivers
199+
internalDrivers = originalInternalDrivers
200+
})
201+
202+
internalDrivers = make(map[string]driver.Driver)
203+
ExternalDrivers = make(map[string]*ExternalDriver)
204+
205+
mockDrv := newMockDriver("internal-test")
206+
Register(mockDrv)
207+
208+
extDriver, intDriver, exists := Get("internal-test")
209+
assert.Equal(t, exists, true)
210+
assert.Assert(t, extDriver == nil)
211+
assert.Equal(t, intDriver, mockDrv)
212+
213+
registerExternalDriver("external-test", "/path/to/external")
214+
215+
extDriver, intDriver, exists = Get("external-test")
216+
assert.Equal(t, exists, true)
217+
assert.Assert(t, extDriver != nil)
218+
assert.Assert(t, intDriver == nil)
219+
assert.Equal(t, extDriver.Name, "external-test")
220+
221+
extDriver, intDriver, exists = Get("non-existent")
222+
assert.Equal(t, exists, false)
223+
assert.Assert(t, extDriver == nil)
224+
assert.Assert(t, intDriver == nil)
225+
}
226+
227+
func TestList(t *testing.T) {
228+
originalExternalDrivers := ExternalDrivers
229+
originalInternalDrivers := internalDrivers
230+
t.Cleanup(func() {
231+
ExternalDrivers = originalExternalDrivers
232+
internalDrivers = originalInternalDrivers
233+
})
234+
235+
internalDrivers = make(map[string]driver.Driver)
236+
ExternalDrivers = make(map[string]*ExternalDriver)
237+
238+
vmTypes := List()
239+
assert.Equal(t, len(vmTypes), 0)
240+
241+
mockDrv := newMockDriver("internal-test")
242+
Register(mockDrv)
243+
244+
vmTypes = List()
245+
assert.Equal(t, len(vmTypes), 1)
246+
assert.Equal(t, vmTypes["internal-test"], Internal)
247+
248+
registerExternalDriver("external-test", "/path/to/external")
249+
250+
vmTypes = List()
251+
assert.Equal(t, len(vmTypes), 2)
252+
assert.Equal(t, vmTypes["internal-test"], Internal)
253+
assert.Equal(t, vmTypes["external-test"], "/path/to/external")
254+
}

0 commit comments

Comments
 (0)