@@ -271,3 +271,139 @@ func TestIsConfidentialComputeSupported(t *testing.T) {
271271 })
272272 }
273273}
274+
275+ func TestVerifyDriverDigest (t * testing.T ) {
276+ tests := []struct {
277+ name string
278+ driverDigest string
279+ refDriverDigest string
280+ wantErr bool
281+ errSubstr string
282+ }{
283+ {
284+ name : "Driver digest matches" ,
285+ driverDigest : "test-digest" ,
286+ refDriverDigest : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27f" ,
287+ wantErr : false ,
288+ },
289+ {
290+ name : "Driver digest mismatch" ,
291+ driverDigest : "test-digest" ,
292+ refDriverDigest : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27a" ,
293+ wantErr : true ,
294+ errSubstr : "gpu driver digest verification failed" ,
295+ },
296+ {
297+ name : "Empty reference driver digest" ,
298+ driverDigest : "test-digest" ,
299+ refDriverDigest : "" ,
300+ wantErr : true ,
301+ errSubstr : "gpu driver digest verification failed" ,
302+ },
303+ {
304+ name : "Installed driver file does not exist" ,
305+ driverDigest : "" ,
306+ refDriverDigest : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27f" ,
307+ wantErr : true ,
308+ errSubstr : "failed to read the file" ,
309+ },
310+ }
311+
312+ for _ , tt := range tests {
313+ t .Run (tt .name , func (t * testing.T ) {
314+
315+ tempDir := t .TempDir ()
316+ installedFile := fmt .Sprintf ("%s/installed_driver_digest" , tempDir )
317+
318+ if tt .name != "Installed driver file does not exist" {
319+ err := os .WriteFile (installedFile , []byte (tt .driverDigest ), 0644 )
320+ if err != nil {
321+ t .Fatalf ("failed to write to the driver digest testfile %s: %v" , installedFile , err )
322+ }
323+ }
324+ err := verifyDriverDigest (installedFile , tt .refDriverDigest )
325+ if (err != nil ) != tt .wantErr {
326+ t .Errorf ("VerifyDriverDigest() error = %v, wantErr %v" , err , tt .wantErr )
327+ }
328+ if tt .wantErr && ! strings .Contains (err .Error (), tt .errSubstr ) {
329+ t .Errorf ("VerifyDriverDigest() error message %s is expected to contain %s" , err .Error (), tt .errSubstr )
330+ }
331+ })
332+ }
333+ }
334+
335+ func TestParseDriverDigestFile (t * testing.T ) {
336+ tests := []struct {
337+ name string
338+ refFileContent string
339+ expectedFilename string
340+ expectedDigest string
341+ wantErr bool
342+ errSubstr string
343+ }{
344+ {
345+ name : "Valid content in reference digest file" ,
346+ refFileContent : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27f test-driver-file" ,
347+ expectedDigest : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27f" ,
348+ expectedFilename : "test-driver-file" ,
349+ wantErr : false ,
350+ },
351+ {
352+ name : "Valid content in reference digest file extra whitespaces" ,
353+ refFileContent : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27f test-driver-file" ,
354+ expectedDigest : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27f" ,
355+ expectedFilename : "test-driver-file" ,
356+ wantErr : false ,
357+ },
358+ {
359+ name : "Malformed content in reference digest file" ,
360+ refFileContent : "8edf273aa28919d86f9f0ab68b1f267280821a3251c281d19748f940c180d27a test-driver-file some-more-data" ,
361+ expectedFilename : "" ,
362+ wantErr : true ,
363+ errSubstr : "unexpected content length in reference file" ,
364+ },
365+ {
366+ name : "Empty reference digest file" ,
367+ refFileContent : "" ,
368+ expectedFilename : "" ,
369+ wantErr : true ,
370+ errSubstr : "unexpected content length in reference file" ,
371+ },
372+ {
373+ name : "Reference file does not exist" ,
374+ refFileContent : "" ,
375+ expectedFilename : "" ,
376+ wantErr : true ,
377+ errSubstr : "failed to read the file" ,
378+ },
379+ }
380+
381+ for _ , tt := range tests {
382+ t .Run (tt .name , func (t * testing.T ) {
383+
384+ tempDir := t .TempDir ()
385+ refFile := fmt .Sprintf ("%s/reference_driver_digest" , tempDir )
386+
387+ if tt .name != "Reference file does not exist" {
388+ err := os .WriteFile (refFile , []byte (tt .refFileContent ), 0644 )
389+ if err != nil {
390+ t .Fatalf ("failed to write to the reference digest testfile %s: %v" , refFile , err )
391+ }
392+ }
393+
394+ digest , filename , err := parseDriverDigestFile (refFile )
395+ if (err != nil ) != tt .wantErr {
396+ t .Errorf ("parseDriverDigestFile() error = %v, wantErr %v" , err , tt .wantErr )
397+ }
398+ if tt .wantErr && ! strings .Contains (err .Error (), tt .errSubstr ) {
399+ t .Errorf ("parseDriverDigestFile() error message %s is expected to contain %s" , err .Error (), tt .errSubstr )
400+ }
401+ if filename != tt .expectedFilename {
402+ t .Errorf ("parseDriverDigestFile() returned unexpected filename, got = %v, want %v" , filename , tt .expectedFilename )
403+ }
404+ if digest != tt .expectedDigest {
405+ t .Errorf ("parseDriverDigestFile() returned unexpected digest, got = %v, want %v" , digest , tt .expectedDigest )
406+ }
407+ })
408+ }
409+ }
0 commit comments