@@ -2,6 +2,7 @@ package e2e
22
33import (
44 "context"
5+ "regexp"
56 "testing"
67 "time"
78
@@ -29,6 +30,81 @@ func getDCGMPackageNames(os string) []string {
2930 return packages
3031}
3132
33+ // extractMajorMinorPatchVersion extracts the major.minor.patch version from a
34+ // version string
35+ //
36+ // Examples:
37+ //
38+ // "4.6.0-1" -> "4.6.0"
39+ // "4.5.2-1.azl3" -> "4.5.2"
40+ // "1:4.4.1-1" -> "4.4.1" (handles epoch prefix)
41+ func extractMajorMinorPatchVersion (version string ) string {
42+ // Remove epoch prefix (e.g., "1:" in "1:4.4.1-1")
43+ version = regexp .MustCompile (`^\d+:` ).ReplaceAllString (version , "" )
44+
45+ // Match major.minor.patch pattern
46+ re := regexp .MustCompile (`^(\d+\.\d+\.\d+)` )
47+ matches := re .FindStringSubmatch (version )
48+ if len (matches ) > 1 {
49+ return matches [1 ]
50+ }
51+ return ""
52+ }
53+
54+ type packageOSVariant struct {
55+ pkgName string
56+ osName string
57+ osRelease string
58+ }
59+
60+ func Test_Version_Consistency_GPU_Managed_Components (t * testing.T ) {
61+ allPackageVariants := [][]packageOSVariant {
62+ {
63+ {"nvidia-device-plugin" , "ubuntu" , "r2404" },
64+ {"nvidia-device-plugin" , "ubuntu" , "r2204" },
65+ {"nvidia-device-plugin" , "azurelinux" , "v3.0" },
66+ },
67+ {
68+ {"datacenter-gpu-manager-4-core" , "ubuntu" , "r2404" },
69+ {"datacenter-gpu-manager-4-core" , "ubuntu" , "r2204" },
70+ {"datacenter-gpu-manager-4-core" , "azurelinux" , "v3.0" },
71+ },
72+ {
73+ {"datacenter-gpu-manager-4-proprietary" , "ubuntu" , "r2404" },
74+ {"datacenter-gpu-manager-4-proprietary" , "ubuntu" , "r2204" },
75+ {"datacenter-gpu-manager-4-proprietary" , "azurelinux" , "v3.0" },
76+ },
77+ {
78+ {"datacenter-gpu-manager-exporter" , "ubuntu" , "r2404" },
79+ {"datacenter-gpu-manager-exporter" , "ubuntu" , "r2204" },
80+ {"dcgm-exporter" , "azurelinux" , "v3.0" },
81+ },
82+ }
83+
84+ for _ , packageGroup := range allPackageVariants {
85+ expectedVersion := ""
86+ for _ , pkgVar := range packageGroup {
87+ componentVersions := components .GetExpectedPackageVersions (pkgVar .pkgName , pkgVar .osName , pkgVar .osRelease )
88+ require .Lenf (t , componentVersions , 1 ,
89+ "Expected exactly one %s version for %s %s but got %d" ,
90+ pkgVar .pkgName , pkgVar .osName , pkgVar .osRelease , len (componentVersions ))
91+
92+ pkgVersion := extractMajorMinorPatchVersion (componentVersions [0 ])
93+ require .NotEmptyf (t , pkgVersion , "Failed to extract major.minor.patch version from %s for %s %s" ,
94+ componentVersions [0 ], pkgVar .osName , pkgVar .osRelease )
95+
96+ // For the first iteration, set the expectedVersion
97+ if expectedVersion == "" {
98+ expectedVersion = pkgVersion
99+ continue
100+ }
101+ require .Equalf (t , expectedVersion , pkgVersion ,
102+ "Expected all %s versions to have the same major.minor.patch version, but found mismatch: %s vs %s for %s.%s" ,
103+ pkgVar .pkgName , expectedVersion , pkgVersion , pkgVar .osName , pkgVar .osRelease )
104+ }
105+ }
106+ }
107+
32108func Test_Ubuntu2404_NvidiaDevicePluginRunning (t * testing.T ) {
33109 RunScenario (t , & Scenario {
34110 Description : "Tests that NVIDIA device plugin and DCGM Exporter are running & functional on Ubuntu 24.04 GPU nodes" ,
0 commit comments