diff --git a/internal/pkg/loader.go b/internal/pkg/loader.go index aca5860..bd36210 100644 --- a/internal/pkg/loader.go +++ b/internal/pkg/loader.go @@ -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 diff --git a/internal/pkg/loader_test.go b/internal/pkg/loader_test.go new file mode 100644 index 0000000..9d6c26c --- /dev/null +++ b/internal/pkg/loader_test.go @@ -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 , 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() + } + +}