blob: e209a0911aafd66333b3d689775af56ee45f919b [file] [edit]
// Copyright 2020 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build linux && (386 || amd64)
// +build linux
// +build 386 amd64
package packages
import (
"errors"
"io/ioutil"
"os"
"reflect"
"testing"
"cos.googlesource.com/cos/tools.git/src/pkg/cos"
)
func TestParseInstalledCOSPackages(t *testing.T) {
readMachineArch = func() (string, error) {
return "", errors.New("failed to obtain machine architecture")
}
if _, err := parseInstalledCOSPackages(&cos.PackageInfo{}); err == nil {
t.Errorf("did not get expected error")
}
readMachineArch = func() (string, error) {
return "x86_64", nil
}
pkg0 := cos.Package{Category: "dev-util", Name: "foo-x", Version: "1.2.3", EbuildVersion: "someversion"}
expect0 := &PkgInfo{Name: "dev-util/foo-x", Arch: "x86_64", Version: "1.2.3"}
pkg1 := cos.Package{Category: "app-admin", Name: "bar", Version: "0.1"}
expect1 := &PkgInfo{Name: "app-admin/bar", Arch: "x86_64", Version: "0.1"}
pkgInfo := &cos.PackageInfo{InstalledPackages: []cos.Package{pkg0, pkg1}}
parsed, err := parseInstalledCOSPackages(pkgInfo)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if !reflect.DeepEqual(parsed[0], expect0) {
t.Errorf("parseInstalledCOSPackages pkg0: %v, want: %v", parsed[0], expect0)
}
if !reflect.DeepEqual(parsed[1], expect1) {
t.Errorf("parseInstalledCOSPackages pkg1: %v, want: %v", parsed[1], expect1)
}
}
func TestInstalledCOSPackages(t *testing.T) {
testDataJSON := `{
"installedPackages": [
{
"category": "app-arch",
"name": "gzip",
"version": "1.9",
"ebuildverison": "someotherversion"
},
{
"category": "dev-libs",
"name": "popt",
"version": "1.16"
},
{
"category": "app-emulation",
"name": "docker-credential-helpers",
"version": "0.6.3"
},
{
"category": "_not.real-category1+",
"name": "_not-real_package1",
"version": "12.34.56.78"
},
{
"category": "_not.real-category1+",
"name": "_not-real_package2",
"version": "12.34.56.78"
},
{
"category": "_not.real-category1+",
"name": "_not-real_package3",
"version": "12.34.56.78_rc3"
},
{
"category": "_not.real-category1+",
"name": "_not-real_package4",
"version": "12.34.56.78_rc3"
},
{
"category": "_not.real-category1+",
"name": "_not-real_package5",
"version": "12.34.56.78_pre2_rc3"
},
{
"category": "_not.real-category2+",
"name": "_not-real_package1",
"version": "12.34.56.78q"
},
{
"category": "_not.real-category2+",
"name": "_not-real_package2",
"version": "12.34.56.78q"
},
{
"category": "_not.real-category2+",
"name": "_not-real_package3",
"version": "12.34.56.78q_rc3"
},
{
"category": "_not.real-category2+",
"name": "_not-real_package4",
"version": "12.34.56.78q_rc3"
},
{
"category": "_not.real-category2+",
"name": "_not-real_package5",
"version": "12.34.56.78q_pre2_rc3"
}
]
}`
testFile, err := ioutil.TempFile("", "cos_pkg_info_test")
if err != nil {
t.Fatalf("Failed to create tempfile: %v", err)
}
defer os.Remove(testFile.Name())
_, err = testFile.WriteString(testDataJSON)
if err != nil {
t.Fatalf("Failed to write test data: %v", err)
}
err = testFile.Close()
if err != nil {
t.Fatalf("Failed to close test file: %v", err)
}
expected := []*PkgInfo{
{Name: "app-arch/gzip", Arch: "x86_64", Version: "1.9"},
{Name: "dev-libs/popt", Arch: "x86_64", Version: "1.16"},
{Name: "app-emulation/docker-credential-helpers", Arch: "x86_64", Version: "0.6.3"},
{Name: "_not.real-category1+/_not-real_package1", Arch: "x86_64", Version: "12.34.56.78"},
{Name: "_not.real-category1+/_not-real_package2", Arch: "x86_64", Version: "12.34.56.78"},
{Name: "_not.real-category1+/_not-real_package3", Arch: "x86_64", Version: "12.34.56.78_rc3"},
{Name: "_not.real-category1+/_not-real_package4", Arch: "x86_64", Version: "12.34.56.78_rc3"},
{Name: "_not.real-category1+/_not-real_package5", Arch: "x86_64", Version: "12.34.56.78_pre2_rc3"},
{Name: "_not.real-category2+/_not-real_package1", Arch: "x86_64", Version: "12.34.56.78q"},
{Name: "_not.real-category2+/_not-real_package2", Arch: "x86_64", Version: "12.34.56.78q"},
{Name: "_not.real-category2+/_not-real_package3", Arch: "x86_64", Version: "12.34.56.78q_rc3"},
{Name: "_not.real-category2+/_not-real_package4", Arch: "x86_64", Version: "12.34.56.78q_rc3"},
{Name: "_not.real-category2+/_not-real_package5", Arch: "x86_64", Version: "12.34.56.78q_pre2_rc3"},
}
readMachineArch = func() (string, error) {
return "", errors.New("failed to obtain machine architecture")
}
readCOSPackageInfo = func() (*cos.PackageInfo, error) {
info, err := cos.GetPackageInfoFromFile(testFile.Name())
return &info, err
}
if _, err := InstalledCOSPackages(); err == nil {
t.Errorf("did not get expected error from readMachineArch")
}
readMachineArch = func() (string, error) {
return "x86_64", nil
}
readCOSPackageInfo = func() (*cos.PackageInfo, error) {
info, err := cos.GetPackageInfoFromFile("_" + testFile.Name())
return &info, err
}
if _, err := InstalledCOSPackages(); err == nil {
t.Errorf("did not get expected error fro readCOSPackageInfo")
}
readMachineArch = func() (string, error) {
return "x86_64", nil
}
readCOSPackageInfo = func() (*cos.PackageInfo, error) {
info, err := cos.GetPackageInfoFromFile(testFile.Name())
return &info, err
}
ret, err := InstalledCOSPackages()
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if len(ret) != len(expected) {
t.Errorf("Length is wrong. want: %d, got: %d",
len(expected), len(ret))
}
if !reflect.DeepEqual(ret, expected) {
t.Errorf("InstalledCOSPackages() returned: %v, want: %v", ret, expected)
}
}