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  }