github.com/dahs81/otto@v0.2.1-0.20160126165905-6400716cf085/helper/hashitools/project_test.go (about) 1 package hashitools 2 3 import ( 4 "net/http" 5 "path/filepath" 6 "runtime" 7 "testing" 8 9 "github.com/hashicorp/go-version" 10 ) 11 12 var hasInternet bool 13 14 func init() { 15 var client http.Client 16 if _, err := client.Get("http://www.google.com"); err == nil { 17 hasInternet = true 18 } 19 } 20 21 func TestProjectLatestVersion(t *testing.T) { 22 if !hasInternet { 23 t.Skip("No internet detected, skipping test") 24 } 25 26 p := &Project{Name: "vagrant"} 27 28 vsn, err := p.LatestVersion() 29 if err != nil { 30 t.Fatalf("err: %s", err) 31 } 32 33 min := version.Must(version.NewVersion("1.0.0")) 34 max := version.Must(version.NewVersion("2.0.0")) 35 if vsn.LessThan(min) || vsn.GreaterThan(max) { 36 t.Fatalf("bad: %s", vsn) 37 } 38 } 39 40 type stubInstaller struct { 41 path string 42 } 43 44 func (t *stubInstaller) InstallAsk(installed, required, latest *version.Version) (bool, error) { 45 return false, nil 46 } 47 func (t *stubInstaller) Install(*version.Version) error { return nil } 48 func (t *stubInstaller) Path() string { return t.path } 49 50 // https://github.com/hashicorp/otto/issues/70 51 func TestVersion_vagrantStdErrWarning(t *testing.T) { 52 if runtime.GOOS == "windows" { 53 t.Skip("Test uses a bash script; skipping on Windows") 54 } 55 56 path, err := filepath.Abs(filepath.Join( 57 "./test-fixtures", "vagrant-version-stderr", "vagrant")) 58 if err != nil { 59 t.Fatal(err) 60 } 61 62 p := &Project{ 63 Name: "vagrant", 64 Installer: &stubInstaller{ 65 path: path, 66 }, 67 } 68 69 v, err := p.Version() 70 if err != nil { 71 t.Fatalf("err: %s", err) 72 } 73 74 if v == nil || v.String() != "1.2.3" { 75 t.Fatalf("expected: 1.2.3, got: %s", v) 76 } 77 } 78 79 func TestVersionRe(t *testing.T) { 80 cases := []struct { 81 Input string 82 Output string 83 }{ 84 { 85 "0.8.7", 86 "0.8.7", 87 }, 88 89 { 90 "Terraform v0.6.4-dev (4d37704d532ae3effdfe2c5b6254bee0b94e8d8e+CHANGES)\n", 91 "0.6.4-dev", 92 }, 93 94 { 95 "Consul v0.5.0\nConsul Protocol: 2 (Understands back to: 1)", 96 "0.5.0", 97 }, 98 99 { 100 "Packer v0.5.0.dev\n", 101 "0.5.0.dev", 102 }, 103 104 { 105 "Vagrant 1.7.4", 106 "1.7.4", 107 }, 108 } 109 110 for _, tc := range cases { 111 matches := versionRe.FindStringSubmatch(tc.Input) 112 if len(matches) == 0 { 113 t.Fatalf("bad: %s", tc.Input) 114 } 115 if matches[1] != tc.Output { 116 t.Fatalf("bad: %s != %s\n\n%s", matches[1], tc.Output, tc.Input) 117 } 118 } 119 }