github.com/google/osv-scalibr@v0.4.1/extractor/standalone/windows/dismpatch/dismparser/dism_parser_test.go (about) 1 // Copyright 2025 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package dismparser 16 17 import ( 18 "errors" 19 "os" 20 "testing" 21 22 "github.com/google/go-cmp/cmp" 23 ) 24 25 func TestParse(t *testing.T) { 26 content, err := os.ReadFile("testdata/dism_testdata.txt") 27 if err != nil { 28 t.Fatalf("Failed to read testdata: %v", err) 29 } 30 31 packages, imgVersion, err := Parse(string(content)) 32 if err != nil { 33 t.Errorf("Error while parsing the output: %v", err) 34 } 35 36 if imgVersion != "10.0.17763.3406" { 37 t.Errorf("Parse, ImageVersion: Got: %v, Want: %v", imgVersion, "10.0.17763.3406") 38 } 39 40 want := []DismPkg{ 41 { 42 PackageIdentity: "Microsoft-Windows-FodMetadata-Package~31bf3856ad364e35~amd64~~10.0.17763.1", 43 PackageVersion: "10.0.17763.1", 44 State: "Installed", 45 ReleaseType: "Feature Pack", 46 InstallTime: "9/15/2018 9:08 AM", 47 }, 48 { 49 PackageIdentity: "Package_for_KB4470788~31bf3856ad364e35~amd64~~17763.164.1.1", 50 PackageVersion: "17763.164.1.1", 51 State: "Installed", 52 ReleaseType: "Security Update", 53 InstallTime: "3/12/2019 6:27 AM", 54 }, 55 { 56 PackageIdentity: "Package_for_RollupFix~31bf3856ad364e35~amd64~~17763.3406.1.5", 57 PackageVersion: "17763.3406.1.5", 58 State: "Installed", 59 ReleaseType: "Security Update", 60 InstallTime: "9/13/2022 11:06 PM", 61 }, 62 { 63 PackageIdentity: "Package_for_RollupFix~31bf3856ad364e35~amd64~~17763.379.1.11", 64 PackageVersion: "17763.379.1.11", 65 State: "Superseded", 66 ReleaseType: "Security Update", 67 InstallTime: "3/12/2019 6:31 AM", 68 }, 69 { 70 PackageIdentity: "Package_for_ServicingStack_3232~31bf3856ad364e35~amd64~~17763.3232.1.1", 71 PackageVersion: "17763.3232.1.1", 72 State: "Installed", 73 ReleaseType: "Update", 74 InstallTime: "9/13/2022 10:46 PM", 75 }, 76 { 77 PackageIdentity: "Microsoft-Windows-WordPad-FoD-Package~31bf3856ad364e35~wow64~en-US~10.0.19041.1", 78 PackageVersion: "10.0.19041.1", 79 State: "Installed", 80 ReleaseType: "OnDemand Pack", 81 InstallTime: "12/7/2019 9:51 AM", 82 }, 83 } 84 85 if diff := cmp.Diff(want, packages); diff != "" { 86 t.Errorf("Parse: Diff = %v", diff) 87 } 88 } 89 90 func TestFindVersion(t *testing.T) { 91 type test struct { 92 input string 93 want string 94 } 95 96 tests := []test{ 97 { 98 input: "Microsoft-Windows-FodMetadata-Package~31bf3856ad364e35~amd64~~10.0.17763.1", 99 want: "10.0.17763.1", 100 }, 101 } 102 103 for _, tt := range tests { 104 t.Run(tt.input, func(t *testing.T) { 105 got := findVersion(tt.input) 106 if got != tt.want { 107 t.Errorf("findVersion: Got: %v, Want: %v", got, tt.want) 108 } 109 }) 110 } 111 } 112 113 func TestParseError(t *testing.T) { 114 content, err := os.ReadFile("testdata/err_testdata.txt") 115 if err != nil { 116 t.Fatalf("Failed to read testdata: %v", err) 117 } 118 119 _, _, err = Parse(string(content)) 120 if !errors.Is(err, ErrParsingError) { 121 t.Errorf("Parse: Want: %v, Got: %v", ErrParsingError, err) 122 } 123 }