From b43a76deeccf1ae387a012bca132e8ddf6095533 Mon Sep 17 00:00:00 2001 From: Evan Hazlett Date: Fri, 17 Jul 2015 12:13:21 -0400 Subject: [PATCH] add GetOsReleaseInfo to provisioner to assist in testing; add tests for rpm repo Signed-off-by: Evan Hazlett --- libmachine/provision/boot2docker.go | 4 ++++ libmachine/provision/centos_test.go | 28 ++++++++++++++++++++++++++++ libmachine/provision/fedora_test.go | 28 ++++++++++++++++++++++++++++ libmachine/provision/generic.go | 4 ++++ libmachine/provision/provisioner.go | 3 +++ libmachine/provision/redhat.go | 25 +++++++++++++++++++++---- libmachine/provision/redhat_test.go | 28 ++++++++++++++++++++++++++++ 7 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 libmachine/provision/centos_test.go create mode 100644 libmachine/provision/fedora_test.go create mode 100644 libmachine/provision/redhat_test.go diff --git a/libmachine/provision/boot2docker.go b/libmachine/provision/boot2docker.go index 1486181b7b..485cfb852e 100644 --- a/libmachine/provision/boot2docker.go +++ b/libmachine/provision/boot2docker.go @@ -172,6 +172,10 @@ func (provisioner *Boot2DockerProvisioner) SetOsReleaseInfo(info *OsRelease) { provisioner.OsReleaseInfo = info } +func (provisioner *Boot2DockerProvisioner) GetOsReleaseInfo() (*OsRelease, error) { + return provisioner.OsReleaseInfo, nil +} + func (provisioner *Boot2DockerProvisioner) Provision(swarmOptions swarm.SwarmOptions, authOptions auth.AuthOptions, engineOptions engine.EngineOptions) error { provisioner.SwarmOptions = swarmOptions provisioner.AuthOptions = authOptions diff --git a/libmachine/provision/centos_test.go b/libmachine/provision/centos_test.go new file mode 100644 index 0000000000..df6bfc9653 --- /dev/null +++ b/libmachine/provision/centos_test.go @@ -0,0 +1,28 @@ +package provision + +import ( + "regexp" + "testing" +) + +func TestCentosGenerateYumRepoList(t *testing.T) { + info := &OsRelease{ + Id: "centos", + } + p := NewCentosProvisioner(nil) + p.SetOsReleaseInfo(info) + + buf, err := generateYumRepoList(p) + if err != nil { + t.Fatal(err) + } + + m, err := regexp.MatchString(".*centos/7.*", buf.String()) + if err != nil { + t.Fatal(err) + } + + if !m { + t.Fatalf("expected match for centos/7") + } +} diff --git a/libmachine/provision/fedora_test.go b/libmachine/provision/fedora_test.go new file mode 100644 index 0000000000..8bc0180393 --- /dev/null +++ b/libmachine/provision/fedora_test.go @@ -0,0 +1,28 @@ +package provision + +import ( + "regexp" + "testing" +) + +func TestFedoraGenerateYumRepoList(t *testing.T) { + info := &OsRelease{ + Id: "fedora", + } + p := NewCentosProvisioner(nil) + p.SetOsReleaseInfo(info) + + buf, err := generateYumRepoList(p) + if err != nil { + t.Fatal(err) + } + + m, err := regexp.MatchString(".*fedora/22.*", buf.String()) + if err != nil { + t.Fatal(err) + } + + if !m { + t.Fatalf("expected match for fedora/22") + } +} diff --git a/libmachine/provision/generic.go b/libmachine/provision/generic.go index 04ab390029..1b174f24b1 100644 --- a/libmachine/provision/generic.go +++ b/libmachine/provision/generic.go @@ -68,6 +68,10 @@ func (provisioner *GenericProvisioner) SetOsReleaseInfo(info *OsRelease) { provisioner.OsReleaseInfo = info } +func (provisioner *GenericProvisioner) GetOsReleaseInfo() (*OsRelease, error) { + return provisioner.OsReleaseInfo, nil +} + func (provisioner *GenericProvisioner) GenerateDockerOptions(dockerPort int) (*DockerOptions, error) { var ( engineCfg bytes.Buffer diff --git a/libmachine/provision/provisioner.go b/libmachine/provision/provisioner.go index 0ed994b155..3d0184432a 100644 --- a/libmachine/provision/provisioner.go +++ b/libmachine/provision/provisioner.go @@ -56,6 +56,9 @@ type Provisioner interface { // Set the OS Release info depending on how it's represented // internally SetOsReleaseInfo(info *OsRelease) + + // Get the OS Release info for the current provisioner + GetOsReleaseInfo() (*OsRelease, error) } // Detection diff --git a/libmachine/provision/redhat.go b/libmachine/provision/redhat.go index d6b8afcf95..ec199da6fb 100644 --- a/libmachine/provision/redhat.go +++ b/libmachine/provision/redhat.go @@ -277,9 +277,15 @@ func (provisioner *RedHatProvisioner) GenerateDockerOptions(dockerPort int) (*Do }, nil } -func (provisioner *RedHatProvisioner) ConfigurePackageList() error { +func generateYumRepoList(provisioner Provisioner) (*bytes.Buffer, error) { packageListInfo := &PackageListInfo{} - switch provisioner.OsReleaseId { + + releaseInfo, err := provisioner.GetOsReleaseInfo() + if err != nil { + return nil, err + } + + switch releaseInfo.Id { case "rhel", "centos": // rhel and centos both use the "centos" repo packageListInfo.OsRelease = "centos" @@ -288,20 +294,31 @@ func (provisioner *RedHatProvisioner) ConfigurePackageList() error { packageListInfo.OsRelease = "fedora" packageListInfo.OsReleaseVersion = "22" default: - return ErrUnknownYumOsRelease + return nil, ErrUnknownYumOsRelease } t, err := template.New("packageList").Parse(packageListTemplate) if err != nil { - return err + return nil, err } var buf bytes.Buffer if err := t.Execute(&buf, packageListInfo); err != nil { + return nil, err + } + + return &buf, nil +} + +func (provisioner *RedHatProvisioner) ConfigurePackageList() error { + buf, err := generateYumRepoList(provisioner) + if err != nil { return err } + // we cannot use %q here as it combines the newlines in the formatting + // on transport causing yum to not use the repo packageCmd := fmt.Sprintf("echo \"%s\" | sudo tee /etc/yum.repos.d/docker.repo", buf.String()) if _, err := provisioner.SSHCommand(packageCmd); err != nil { return err diff --git a/libmachine/provision/redhat_test.go b/libmachine/provision/redhat_test.go new file mode 100644 index 0000000000..27d0f46706 --- /dev/null +++ b/libmachine/provision/redhat_test.go @@ -0,0 +1,28 @@ +package provision + +import ( + "regexp" + "testing" +) + +func TestRedHatGenerateYumRepoList(t *testing.T) { + info := &OsRelease{ + Id: "rhel", + } + p := NewRedHatProvisioner(nil) + p.SetOsReleaseInfo(info) + + buf, err := generateYumRepoList(p) + if err != nil { + t.Fatal(err) + } + + m, err := regexp.MatchString(".*centos/7.*", buf.String()) + if err != nil { + t.Fatal(err) + } + + if !m { + t.Fatalf("expected match for centos/7") + } +}