mirror of
https://github.com/rwinkhart/go-winio.git
synced 2026-09-04 08:07:20 -04:00
Add Go wrappers for Get/SetVirtualDiskInformation win32 APIs
SetVirtualDiskInformation API is required for running confidential windows containers. The VHDs used for starting confidential pods/UVMs need to have a specific disk identifier. These newly added APIs will be used when preparing the VHDs for confidential pods. Signed-off-by: Amit <ambarve@microsoft.com>
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
//go:build windows
|
||||
|
||||
package vhd
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/Microsoft/go-winio/pkg/guid"
|
||||
)
|
||||
|
||||
func TestVirtualDiskIdentifier(t *testing.T) {
|
||||
// Create a temporary directory for the test
|
||||
tempDir := t.TempDir()
|
||||
// TODO(ambarve): We should add a test for VHD too, but our current create VHD API
|
||||
// seem to only work for VHDX.
|
||||
vhdPath := filepath.Join(tempDir, "test.vhdx")
|
||||
|
||||
// Create the virtual disk
|
||||
if err := CreateVhdx(vhdPath, 1, 1); err != nil { // 1GB, 1MB block size
|
||||
t.Fatalf("failed to create virtual disk: %s", err)
|
||||
}
|
||||
defer os.Remove(vhdPath)
|
||||
|
||||
// Get the initial identifier
|
||||
initialID, err := GetVirtualDiskIdentifier(vhdPath)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get initial virtual disk identifier: %s", err)
|
||||
}
|
||||
t.Logf("initial identifier: %s", initialID.String())
|
||||
|
||||
// Create a new GUID to set
|
||||
newID := guid.GUID{
|
||||
Data1: 0x12345678,
|
||||
Data2: 0x1234,
|
||||
Data3: 0x5678,
|
||||
Data4: [8]byte{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0},
|
||||
}
|
||||
t.Logf("setting new identifier: %s", newID.String())
|
||||
|
||||
// Set the new identifier
|
||||
if err := SetVirtualDiskIdentifier(vhdPath, newID); err != nil {
|
||||
t.Fatalf("failed to set virtual disk identifier: %s", err)
|
||||
}
|
||||
|
||||
// Get the identifier again to verify it was set correctly
|
||||
retrievedID, err := GetVirtualDiskIdentifier(vhdPath)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get virtual disk identifier after setting: %s", err)
|
||||
}
|
||||
t.Logf("retrieved identifier: %s", retrievedID.String())
|
||||
|
||||
// Verify the retrieved ID matches the one we set
|
||||
if retrievedID != newID {
|
||||
t.Errorf("retrieved identifier does not match set identifier.\nExpected: %s\nGot: %s",
|
||||
newID.String(), retrievedID.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user