Move go version check into main() (#3734)
Previously the check was done in init(). This patch moves into main for unit testable friendly function.master
parent
25b936c369
commit
440866d26c
@ -1,45 +0,0 @@ |
|||||||
/* |
|
||||||
* Minio Cloud Storage, (C) 2015, 2016 Minio, Inc. |
|
||||||
* |
|
||||||
* 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. |
|
||||||
*/ |
|
||||||
|
|
||||||
package cmd |
|
||||||
|
|
||||||
import ( |
|
||||||
"fmt" |
|
||||||
"runtime" |
|
||||||
|
|
||||||
"github.com/hashicorp/go-version" |
|
||||||
"github.com/minio/mc/pkg/console" |
|
||||||
) |
|
||||||
|
|
||||||
// check if minimum Go version is met.
|
|
||||||
func checkGoVersion() { |
|
||||||
// Current version.
|
|
||||||
curVersion, e := version.NewVersion(runtime.Version()[2:]) |
|
||||||
if e != nil { |
|
||||||
console.Fatalln("Unable to determine current go version.", e) |
|
||||||
} |
|
||||||
|
|
||||||
// Prepare version constraint.
|
|
||||||
constraints, e := version.NewConstraint(minGoVersion) |
|
||||||
if e != nil { |
|
||||||
console.Fatalln("Unable to check go version.") |
|
||||||
} |
|
||||||
|
|
||||||
// Check for minimum version.
|
|
||||||
if !constraints.Check(curVersion) { |
|
||||||
console.Fatalln(fmt.Sprintf("Please recompile Minio with Golang version %s.", minGoVersion)) |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,50 @@ |
|||||||
|
/* |
||||||
|
* Minio Cloud Storage, (C) 2017 Minio, Inc. |
||||||
|
* |
||||||
|
* 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. |
||||||
|
*/ |
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"testing" |
||||||
|
) |
||||||
|
|
||||||
|
func TestCheckGoVersion(t *testing.T) { |
||||||
|
// Test success cases.
|
||||||
|
testCases := []struct { |
||||||
|
version string |
||||||
|
expectedErr error |
||||||
|
}{ |
||||||
|
{minGoVersion, nil}, |
||||||
|
{minGoVersion + ".10", nil}, |
||||||
|
{"1.6.8", fmt.Errorf("Minio is not compiled by Go >= 1.7. Please recompile accordingly.")}, |
||||||
|
{"0.1", fmt.Errorf("Minio is not compiled by Go >= 1.7. Please recompile accordingly.")}, |
||||||
|
{".1", fmt.Errorf("Malformed version: .1")}, |
||||||
|
{"somejunk", fmt.Errorf("Malformed version: somejunk")}, |
||||||
|
} |
||||||
|
|
||||||
|
for _, testCase := range testCases { |
||||||
|
err := checkGoVersion(testCase.version) |
||||||
|
if testCase.expectedErr == nil { |
||||||
|
if err != nil { |
||||||
|
t.Fatalf("expected: %v, got: %v", testCase.expectedErr, err) |
||||||
|
} |
||||||
|
} else if err == nil { |
||||||
|
t.Fatalf("expected: %v, got: %v", testCase.expectedErr, err) |
||||||
|
} else if testCase.expectedErr.Error() != err.Error() { |
||||||
|
t.Fatalf("expected: %v, got: %v", testCase.expectedErr, err) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue