package inspur

import "testing"

func TestParseAssetJSON_NVIDIAGPUModelFromPCIIDs(t *testing.T) {
	raw := []byte(`{
		"VersionInfo": [],
		"CpuInfo": [],
		"MemInfo": {"MemCommonInfo": [], "DimmInfo": []},
		"HddInfo": [],
		"PcieInfo": [{
			"VendorId": 4318,
			"DeviceId": 9019,
			"BusNumber": 12,
			"DeviceNumber": 0,
			"FunctionNumber": 0,
			"MaxLinkWidth": 16,
			"MaxLinkSpeed": 5,
			"NegotiatedLinkWidth": 16,
			"CurrentLinkSpeed": 5,
			"ClassCode": 3,
			"SubClassCode": 2,
			"PcieSlot": 11,
			"LocString": "#CPU0_PCIE2",
			"PartNumber": null,
			"SerialNumber": null,
			"Mac": []
		}]
	}`)

	hw, err := ParseAssetJSON(raw, nil, nil)
	if err != nil {
		t.Fatalf("ParseAssetJSON failed: %v", err)
	}
	if len(hw.GPUs) != 1 {
		t.Fatalf("expected 1 GPU, got %d", len(hw.GPUs))
	}
	if hw.GPUs[0].Model != "GH100 [H200 NVL]" {
		t.Fatalf("expected model GH100 [H200 NVL], got %q", hw.GPUs[0].Model)
	}
}

func TestNormalizeGPUModel_FallbackToDeviceIDForUnknownNVIDIA(t *testing.T) {
	got := normalizeGPUModel(0x10de, 0xbeef, "0xBEEF\t", 3, 2)
	if got != "0xBEEF" {
		t.Fatalf("expected 0xBEEF, got %q", got)
	}
}
