diff --git a/mongobin/downloadSpec.go b/mongobin/downloadSpec.go index 4e98acb..65b7974 100644 --- a/mongobin/downloadSpec.go +++ b/mongobin/downloadSpec.go @@ -34,6 +34,7 @@ type DownloadSpec struct { // - ubuntu1804 // - ubuntu1604 // - ubuntu1404 + // - debian10 // - debian92 // - debian81 // - suse12 @@ -198,15 +199,7 @@ func osNameFromOsRelease(osRelease map[string]string, mongoVersion []int) string switch id { case "ubuntu": - if majorVersion >= 18 && versionGTE(mongoVersion, []int{4, 0, 1}) { - return "ubuntu1804" - } - if majorVersion >= 16 && versionGTE(mongoVersion, []int{3, 2, 7}) { - return "ubuntu1604" - } - if majorVersion >= 14 { - return "ubuntu1404" - } + return osNameFromUbuntuRelease(majorVersion, mongoVersion) case "sles": if majorVersion >= 12 { return "suse12" @@ -216,24 +209,48 @@ func osNameFromOsRelease(osRelease map[string]string, mongoVersion []int) string return "rhel70" } case "debian": - if majorVersion >= 9 && versionGTE(mongoVersion, []int{3, 6, 5}) { - return "debian92" - } - if majorVersion >= 8 && versionGTE(mongoVersion, []int{3, 2, 8}) { - return "debian81" - } + return osNameFromDebianRelease(majorVersion, mongoVersion) case "amzn": - if majorVersion == 2 && versionGTE(mongoVersion, []int{4, 0, 0}) { - return "amazon2" - } + return osNameFromAmznRelease(majorVersion, mongoVersion) + } - // Version before 2 has the release date, not a real version number - return "amazon" + return "" +} +func osNameFromUbuntuRelease(majorVersion int, mongoVersion []int) string { + if majorVersion >= 18 && versionGTE(mongoVersion, []int{4, 0, 1}) { + return "ubuntu1804" + } + if majorVersion >= 16 && versionGTE(mongoVersion, []int{3, 2, 7}) { + return "ubuntu1604" } + if majorVersion >= 14 { + return "ubuntu1404" + } + return "" +} +func osNameFromDebianRelease(majorVersion int, mongoVersion []int) string { + if majorVersion >= 10 && versionGTE(mongoVersion, []int{4, 2, 1}) { + return "debian10" + } + if majorVersion >= 9 && versionGTE(mongoVersion, []int{3, 6, 5}) { + return "debian92" + } + if majorVersion >= 8 && versionGTE(mongoVersion, []int{3, 2, 8}) { + return "debian81" + } return "" } +func osNameFromAmznRelease(majorVersion int, mongoVersion []int) string { + if majorVersion == 2 && versionGTE(mongoVersion, []int{4, 0, 0}) { + return "amazon2" + } + + // Version before 2 has the release date, not a real version number + return "amazon" +} + func osNameFromRedhatRelease(redhatRelease string) string { // RHEL 7 uses /etc/os-release, so we're just detecting RHEL 6 here if strings.Contains(redhatRelease, "release 6") { diff --git a/mongobin/downloadSpec_test.go b/mongobin/downloadSpec_test.go index 96ec4d6..b62886b 100644 --- a/mongobin/downloadSpec_test.go +++ b/mongobin/downloadSpec_test.go @@ -160,6 +160,53 @@ func TestMakeDownloadSpec(t *testing.T) { OSName: "rhel62", }, }, + "Debian buster": { + etcFolder: "debianbuster", + + expectedSpec: &DownloadSpec{ + Version: testMongoVersion, + Platform: "linux", + SSLBuildNeeded: false, + Arch: "x86_64", + OSName: "debian92", + }, + }, + "Debian buster new mongo": { + mongoVersion: "4.2.1", + etcFolder: "debianbuster", + + expectedSpec: &DownloadSpec{ + Version: "4.2.1", + Platform: "linux", + SSLBuildNeeded: false, + Arch: "x86_64", + OSName: "debian10", + }, + }, + "Debian buster older mongo": { + mongoVersion: "3.6.4", + etcFolder: "debianbuster", + + expectedSpec: &DownloadSpec{ + Version: "3.6.4", + Platform: "linux", + SSLBuildNeeded: false, + Arch: "x86_64", + OSName: "debian81", + }, + }, + "Debian buster much older mongo": { + mongoVersion: "3.2.7", + etcFolder: "debianbuster", + + expectedSpec: &DownloadSpec{ + Version: "3.2.7", + Platform: "linux", + SSLBuildNeeded: false, + Arch: "x86_64", + OSName: "", + }, + }, "Debian stretch": { etcFolder: "debianstretch", diff --git a/mongobin/downloadURL_test.go b/mongobin/downloadURL_test.go index 34a1f51..dc6765c 100644 --- a/mongobin/downloadURL_test.go +++ b/mongobin/downloadURL_test.go @@ -106,6 +106,17 @@ func TestGetDownloadURL(t *testing.T) { mongoVersions: mongoVersionsToTest, expectedURL: "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-VERSION.tgz", }, + "Debian buster": { + spec: &DownloadSpec{ + Platform: "linux", + Arch: "x86_64", + OSName: "debian10", + }, + mongoVersions: []string{ + "4.2.1", + }, + expectedURL: "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian10-VERSION.tgz", + }, "Debian stretch": { spec: &DownloadSpec{ Platform: "linux", diff --git a/mongobin/testdata/etc/debianbuster/os-release b/mongobin/testdata/etc/debianbuster/os-release new file mode 100644 index 0000000..e4d27d9 --- /dev/null +++ b/mongobin/testdata/etc/debianbuster/os-release @@ -0,0 +1,8 @@ +PRETTY_NAME="Debian GNU/Linux 10 (buster)" +NAME="Debian GNU/Linux" +VERSION_ID="10" +VERSION="10 (buster)" +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/"