99 lines
2.9 KiB
Go
99 lines
2.9 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolveNvidiaPFID(t *testing.T) {
|
|
tests := []struct {
|
|
model string
|
|
wantPFID string
|
|
wantErr bool
|
|
}{
|
|
{"RTX 4090", "995", false},
|
|
{"GeForce RTX 4090", "995", false},
|
|
{"rtx 4090", "995", false},
|
|
{"RTX 4090 D", "1036", false},
|
|
{"RTX 4090 Laptop GPU", "1004", false},
|
|
{"NonExistentGPU", "", true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.model, func(t *testing.T) {
|
|
got, err := resolveNvidiaPFID(tt.model)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("resolveNvidiaPFID(%q) error = %v, wantErr %v", tt.model, err, tt.wantErr)
|
|
return
|
|
}
|
|
if got != tt.wantPFID {
|
|
t.Errorf("resolveNvidiaPFID(%q) = %q, want %q", tt.model, got, tt.wantPFID)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestFetchNvidiaDriverURL(t *testing.T) {
|
|
// Query API for RTX 4090 Game Ready
|
|
url, version, err := fetchNvidiaDriverURL("995", "Game Ready")
|
|
if err != nil {
|
|
t.Skipf("Skipping API test (possibly offline or rate limited): %v", err)
|
|
return
|
|
}
|
|
if !strings.HasPrefix(url, "https://") {
|
|
t.Errorf("expected download URL to start with https://, got %q", url)
|
|
}
|
|
if version == "" {
|
|
t.Error("expected version to be non-empty")
|
|
}
|
|
|
|
// Query API for RTX 4090 Studio
|
|
urlStudio, versionStudio, err := fetchNvidiaDriverURL("995", "Studio")
|
|
if err != nil {
|
|
t.Skipf("Skipping API test: %v", err)
|
|
return
|
|
}
|
|
if !strings.HasPrefix(urlStudio, "https://") {
|
|
t.Errorf("expected studio download URL to start with https://, got %q", urlStudio)
|
|
}
|
|
if versionStudio == "" {
|
|
t.Error("expected studio version to be non-empty")
|
|
}
|
|
}
|
|
|
|
func TestGetInstalledNvidiaVersion(t *testing.T) {
|
|
// Test with a mock runner that returns a valid driver version format
|
|
mockRunner := &fakeRunner{
|
|
responses: map[string]CommandResult{
|
|
commandKey("powershell.exe", "-NoLogo", "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command", "Get-CimInstance Win32_VideoController | Where-Object { $_.Name -like '*Nvidia*' } | Select-Object -ExpandProperty DriverVersion"): {
|
|
Stdout: "32.0.15.9636\n",
|
|
},
|
|
},
|
|
}
|
|
|
|
ver, err := getInstalledNvidiaVersion(context.Background(), mockRunner)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if ver != "596.36" {
|
|
t.Errorf("getInstalledNvidiaVersion = %q, want %q", ver, "596.36")
|
|
}
|
|
|
|
// Test case with leading zero representation
|
|
mockRunner2 := &fakeRunner{
|
|
responses: map[string]CommandResult{
|
|
commandKey("powershell.exe", "-NoLogo", "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command", "Get-CimInstance Win32_VideoController | Where-Object { $_.Name -like '*Nvidia*' } | Select-Object -ExpandProperty DriverVersion"): {
|
|
Stdout: "32.0.10.6104\n",
|
|
},
|
|
},
|
|
}
|
|
ver2, err := getInstalledNvidiaVersion(context.Background(), mockRunner2)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if ver2 != "61.04" {
|
|
t.Errorf("getInstalledNvidiaVersion = %q, want %q", ver2, "61.04")
|
|
}
|
|
}
|