Skip to content

Commit eb835da

Browse files
chathuryaadapastevenhorsman
authored andcommitted
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 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 8916afe commit eb835da

1 file changed

Lines changed: 118 additions & 0 deletions

File tree

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

0 commit comments

Comments
 (0)