add minimal test for 'pkg/loader' + update loader to let 'lsb_release -is' command for its caller
This commit is contained in:
parent
82d694b7cb
commit
ac3732d318
|
@ -6,24 +6,15 @@ import (
|
|||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var ErrUnknownDistribution = errors.New("unknown linux distribution")
|
||||
var ErrNoCandidateInstalled = errors.New("no package-manager candidate installed")
|
||||
var ErrNoDriverFound = errors.New("no driver found for the package manager")
|
||||
|
||||
func Load() (PackageManager, error) {
|
||||
func Load(_distro string) (PackageManager, error) {
|
||||
|
||||
// 1. get distro name
|
||||
out, err := exec.Command("lsb_release", "-is").Output()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
distro := strings.ToLower(strings.Trim(string(out), " \n\t"))
|
||||
|
||||
// 2. load config file
|
||||
// 1. load config file
|
||||
driverTable := filepath.Join(os.Getenv("GOPATH"), "src/git.xdrm.io/xdrm-brackets/nix-amer/meta/pkg-drivers.json")
|
||||
file, err := os.Open(driverTable)
|
||||
if err != nil {
|
||||
|
@ -31,7 +22,7 @@ func Load() (PackageManager, error) {
|
|||
}
|
||||
defer file.Close()
|
||||
|
||||
// 3. Parse json
|
||||
// 2. Parse json
|
||||
table := make(map[string][]string)
|
||||
decoder := json.NewDecoder(file)
|
||||
if err := decoder.Decode(&table); err != nil {
|
||||
|
@ -39,13 +30,13 @@ func Load() (PackageManager, error) {
|
|||
}
|
||||
decoder = nil
|
||||
|
||||
// 4. Get available package-manager list for distro
|
||||
available, exists := table[distro]
|
||||
// 3. Get available package-manager list for distro
|
||||
available, exists := table[_distro]
|
||||
if !exists || len(available) < 1 {
|
||||
return nil, ErrUnknownDistribution
|
||||
}
|
||||
|
||||
// 5. Check each available package-manager in order
|
||||
// 4. Check each available package-manager in order
|
||||
selected := ""
|
||||
for _, current := range available {
|
||||
if exec.Command("which", current).Run() == nil {
|
||||
|
@ -59,7 +50,7 @@ func Load() (PackageManager, error) {
|
|||
return nil, ErrNoCandidateInstalled
|
||||
}
|
||||
|
||||
// 6. Instanciate
|
||||
// 5. Instanciate
|
||||
switch selected {
|
||||
case "apt-get":
|
||||
return new(Apt), nil
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
package pkg
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestUnknownDistribution(t *testing.T) {
|
||||
|
||||
_, err := Load("invalid-distro-xxx")
|
||||
if err != ErrUnknownDistribution {
|
||||
t.Errorf("expected <%s>, got <%s>", ErrUnknownDistribution, err)
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
}
|
||||
func TestNoCandidateInstalled(t *testing.T) {
|
||||
|
||||
// get host distro
|
||||
out, err := exec.Command("lsb_release", "-is").Output()
|
||||
if err != nil {
|
||||
t.Errorf("cannot get host linux distribution")
|
||||
t.Fail()
|
||||
}
|
||||
hostDistro := strings.ToLower(strings.Trim(string(out), " \n\t"))
|
||||
|
||||
// valid candidate
|
||||
_, err = Load(hostDistro)
|
||||
if err != nil {
|
||||
t.Errorf("expected <nil>, got <%s>", err)
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
// invalid candidate
|
||||
distro := "solus"
|
||||
if hostDistro == distro {
|
||||
distro = "ubuntu"
|
||||
}
|
||||
|
||||
_, err = Load(distro)
|
||||
if err != ErrNoCandidateInstalled {
|
||||
t.Errorf("expected <%s>, got <%s>", ErrNoCandidateInstalled, err)
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue