Skip to content

Commit 1a6d8a0

Browse files
Add focused unit tests for libvirt image management
Implements comprehensive yet focused unit tests for the inMemoryImage implementation in the libvirt provider. Tests cover: - Image creation from byte arrays (text, empty, binary data) - Size calculation functionality - String representation - Import operations with success and error handling The test suite uses table-driven tests for maintainability and focuses on testing our wrapper logic rather than Go's standard library behavior. Test coverage: - TestInMemoryImage: Validates creation, size(), and string() methods - TestInMemoryImageImport: Tests importImage with various scenarios Signed-off-by: Chathurya Adapa <Adapa.Chathurya1@ibm.com> Assisted-by: IBM Bob <noreply@ibm.com>
1 parent 02bb592 commit 1a6d8a0

1 file changed

Lines changed: 116 additions & 0 deletions

File tree

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// (C) Copyright Confidential Containers Contributors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package libvirt
5+
6+
import (
7+
"io"
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
"github.com/stretchr/testify/require"
12+
libvirtxml "libvirt.org/go/libvirtxml"
13+
)
14+
15+
const (
16+
testVolumeName = "test-volume"
17+
)
18+
19+
// TestInMemoryImage tests the core functionality of inMemoryImage
20+
func TestInMemoryImage(t *testing.T) {
21+
tests := []struct {
22+
name string
23+
data []byte
24+
}{
25+
{
26+
name: "text data",
27+
data: []byte("test image data"),
28+
},
29+
{
30+
name: "empty data",
31+
data: []byte{},
32+
},
33+
{
34+
name: "binary data",
35+
data: []byte{0x00, 0x01, 0x02, 0xFF, 0xFE, 0xFD},
36+
},
37+
}
38+
39+
for _, tt := range tests {
40+
t.Run(tt.name, func(t *testing.T) {
41+
// Test creation
42+
img, err := newImageFromBytes(tt.data)
43+
require.NoError(t, err)
44+
assert.NotNil(t, img)
45+
46+
// Test size()
47+
size, err := img.size()
48+
require.NoError(t, err)
49+
assert.Equal(t, uint64(len(tt.data)), size)
50+
51+
// Test string()
52+
str := img.string()
53+
assert.Contains(t, str, "plain bytes")
54+
assert.Contains(t, str, "[")
55+
assert.Contains(t, str, "]")
56+
})
57+
}
58+
}
59+
60+
// TestInMemoryImageImport tests the importImage functionality
61+
func TestInMemoryImageImport(t *testing.T) {
62+
tests := []struct {
63+
name string
64+
data []byte
65+
expectError bool
66+
copierFunc func(*[]byte) func(io.Reader) error
67+
validate func(*testing.T, []byte, []byte)
68+
}{
69+
{
70+
name: "successful import",
71+
data: []byte("test data"),
72+
copierFunc: func(captured *[]byte) func(io.Reader) error {
73+
return func(rdr io.Reader) error {
74+
data, err := io.ReadAll(rdr)
75+
*captured = data
76+
return err
77+
}
78+
},
79+
validate: func(t *testing.T, expected, actual []byte) {
80+
assert.Equal(t, expected, actual)
81+
},
82+
},
83+
{
84+
name: "copier error",
85+
data: []byte("test data"),
86+
copierFunc: func(captured *[]byte) func(io.Reader) error {
87+
return func(rdr io.Reader) error {
88+
return assert.AnError
89+
}
90+
},
91+
expectError: true,
92+
},
93+
}
94+
95+
for _, tt := range tests {
96+
t.Run(tt.name, func(t *testing.T) {
97+
img, err := newImageFromBytes(tt.data)
98+
require.NoError(t, err)
99+
100+
var capturedData []byte
101+
copier := tt.copierFunc(&capturedData)
102+
103+
volumeDef := libvirtxml.StorageVolume{Name: testVolumeName}
104+
err = img.importImage(copier, volumeDef)
105+
106+
if tt.expectError {
107+
assert.Error(t, err)
108+
} else {
109+
require.NoError(t, err)
110+
if tt.validate != nil {
111+
tt.validate(t, tt.data, capturedData)
112+
}
113+
}
114+
})
115+
}
116+
}

0 commit comments

Comments
 (0)