| package packagediff |
| |
| import ( |
| "testing" |
| |
| "cos.googlesource.com/cos/tools.git/src/cmd/cos_image_analyzer/internal/input" |
| "cos.googlesource.com/cos/tools.git/src/cmd/cos_image_analyzer/internal/utilities" |
| ) |
| |
| // test searchPackageList function |
| func TestSearchPackageList(t *testing.T) { |
| testPackageList1 := []Package{ |
| {Category: "sys-boot", Name: "shim"}, |
| {Category: "chromeos-launch", Name: "cloud-network-boot", Version: "1.0.0", Revision: "4"}, |
| {Revision: "533"}} |
| testPackageList2 := []Package{} |
| for _, tc := range []struct { |
| packageName string |
| packageList []Package |
| wantPackage Package |
| wantOk bool |
| }{ |
| {packageName: "shim", packageList: testPackageList1, wantPackage: Package{Category: "sys-boot", Name: "shim"}, wantOk: true}, |
| {packageName: "sys-boot", packageList: testPackageList1, wantPackage: Package{}, wantOk: false}, |
| {packageName: "", packageList: testPackageList1, wantPackage: Package{Revision: "533"}, wantOk: true}, |
| {packageName: "cloud-network-boot", packageList: testPackageList2, wantPackage: Package{}, wantOk: false}, |
| } { |
| gotPackage, gotOk := searchPackageList(tc.packageName, tc.packageList) |
| if tc.wantOk != gotOk { |
| t.Fatalf("searchPackageList call expected: %v, got: %v", tc.wantOk, gotOk) |
| } |
| if tc.wantPackage.Name != gotPackage.Name { |
| t.Fatalf("searchPackageList expected: %v, got: %v", tc.wantPackage, gotPackage) |
| } |
| if tc.wantPackage.Category != gotPackage.Category { |
| t.Fatalf("searchPackageList expected: %v, got: %v", tc.wantPackage, gotPackage) |
| } |
| if tc.wantPackage.Version != gotPackage.Version { |
| t.Fatalf("searchPackageList expected: %v, got: %v", tc.wantPackage, gotPackage) |
| } |
| if tc.wantPackage.Revision != gotPackage.Revision { |
| t.Fatalf("searchPackageList expected: %v, got: %v", tc.wantPackage, gotPackage) |
| } |
| } |
| } |
| |
| // test Diff function |
| func TestDiff(t *testing.T) { |
| testPackageList1 := []Package{ |
| {Category: "sys-boot", Name: "shim", Version: "14.0.20180308", Revision: "4"}, |
| {Category: "chromeos-launch", Name: "cloud-network-boot", Version: "1.0.0", Revision: "4"}, |
| {Category: "sys-kernel", Name: "lakitu-kernel-4_19", Version: "4.20.127", Revision: "533"}, |
| {Category: "sys-apps", Name: "findutils", Version: "4.9.10", Revision: "1"}, |
| {Category: "app-emulation", Name: "runc", Version: "1.0.0_rc10", Revision: "1"}} |
| testPackageList2 := []Package{} |
| testPackageList3 := []Package{ |
| {Category: "sys-boot", Name: "shim", Version: "14.0.20180308", Revision: "4"}, |
| {Category: "chromeos-base", Name: "cloud-network-init", Version: "1.0.0", Revision: "4"}, |
| {Category: "sys-kernel", Name: "lakitu-kernel-4_19", Version: "4.19.127", Revision: "535"}, |
| {Category: "app-shells", Name: "dash", Version: "0.5.9.1", Revision: "7"}} |
| |
| testPackageDiff := []PkgDiff{ |
| {category: []string{"chromeos-launch"}, name: []string{"cloud-network-boot"}, version: []string{"1.0.0"}, revision: []string{"4"}, typeOFDiff: "image1"}, |
| {name: []string{"lakitu-kernel-4_19", "lakitu-kernel-4_19"}, version: []string{"4.20.127", "4.19.127"}, revision: []string{"533", "535"}, typeOFDiff: "shared"}, |
| {category: []string{"sys-apps"}, name: []string{"findutils"}, version: []string{"4.9.10"}, revision: []string{"1"}, typeOFDiff: "image1"}, |
| {category: []string{"app-emulation"}, name: []string{"runc"}, version: []string{"1.0.0_rc10"}, revision: []string{"1"}, typeOFDiff: "image1"}, |
| {category: []string{"chromeos-base"}, name: []string{"cloud-network-init"}, version: []string{"1.0.0"}, revision: []string{"4"}, typeOFDiff: "image2"}, |
| {category: []string{"app-shells"}, name: []string{"dash"}, version: []string{"0.5.9.1"}, revision: []string{"7"}, typeOFDiff: "image2"}} |
| testPkgDiffOneImage := &Differences{PackageList: testPackageList1} |
| testPkgDiffTwoImages := &Differences{PackageDiff: testPackageDiff} |
| |
| for _, tc := range []struct { |
| packagesImage1 []Package |
| packagesImage2 []Package |
| flagInfo *input.FlagInfo |
| want *Differences |
| }{ // One Image Test |
| {packagesImage1: testPackageList1, |
| packagesImage2: testPackageList2, |
| flagInfo: &input.FlagInfo{Image2: "", PackageSelected: true}, |
| want: testPkgDiffOneImage}, |
| // TWo Image Test |
| {packagesImage1: testPackageList1, |
| packagesImage2: testPackageList3, |
| flagInfo: &input.FlagInfo{Image2: "../testdata/image2", PackageSelected: true}, |
| want: testPkgDiffTwoImages}, |
| } { |
| got, _ := Diff(tc.packagesImage1, tc.packagesImage2, tc.flagInfo) |
| |
| for _, pl := range tc.want.PackageList { |
| pg, ok := searchPackageList(pl.Name, got.PackageList) |
| if !ok { |
| t.Fatalf("GetPackageInfo expected: %v, got: %v", tc.want, got) |
| } |
| if pl.Name != pg.Name { |
| t.Fatalf("GetPackageInfo expected: %v, got: %v", tc.want, got) |
| } |
| if pl.Category != pg.Category { |
| t.Fatalf("GetPackageInfo expected: %v, got: %v", tc.want, got) |
| } |
| if pl.Version != pg.Version { |
| t.Fatalf("GetPackageInfo expected: %v, got: %v", tc.want, got) |
| } |
| if pl.Revision != pg.Revision { |
| t.Fatalf("GetPackageInfo expected: %v, got: %v", tc.want, got) |
| } |
| } |
| |
| for _, pd := range tc.want.PackageDiff { |
| foundPkg := false |
| for _, pg := range got.PackageDiff { |
| if utilities.EqualArrays(pd.name, pg.name) { |
| if !utilities.EqualArrays(pd.category, pg.category) { |
| t.Fatalf("Package diff expected: %v, got: %v", tc.want, got) |
| } |
| if !utilities.EqualArrays(pd.version, pg.version) { |
| t.Fatalf("Package diff expected: %v, got: %v", tc.want, got) |
| } |
| if !utilities.EqualArrays(pd.revision, pg.revision) { |
| t.Fatalf("Package diff expected: %v, got: %v", tc.want, got) |
| } |
| foundPkg = true |
| } |
| } |
| if !foundPkg { |
| t.Fatalf("Package diff expected: %v, got: %v", tc.want, got) |
| } |
| } |
| } |
| } |