github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/environment/toolsversionupdate_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package environment
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/environs"
    11  	"github.com/juju/juju/environs/config"
    12  	"github.com/juju/juju/state"
    13  	coretesting "github.com/juju/juju/testing"
    14  	coretools "github.com/juju/juju/tools"
    15  	"github.com/juju/juju/version"
    16  )
    17  
    18  var _ = gc.Suite(&updaterSuite{})
    19  
    20  type updaterSuite struct {
    21  	coretesting.BaseSuite
    22  }
    23  
    24  type dummyEnviron struct {
    25  	environs.Environ
    26  }
    27  
    28  func (s *updaterSuite) TestCheckTools(c *gc.C) {
    29  	sConfig := coretesting.FakeConfig()
    30  	sConfig = sConfig.Merge(coretesting.Attrs{
    31  		"agent-version": "2.5.0",
    32  	})
    33  	cfg, err := config.New(config.NoDefaults, sConfig)
    34  	c.Assert(err, jc.ErrorIsNil)
    35  	fakeNewEnvirons := func(*config.Config) (environs.Environ, error) {
    36  		return dummyEnviron{}, nil
    37  	}
    38  	s.PatchValue(&newEnvirons, fakeNewEnvirons)
    39  	var (
    40  		calledWithEnviron                environs.Environ
    41  		calledWithMajor, calledWithMinor int
    42  		calledWithFilter                 coretools.Filter
    43  	)
    44  	fakeToolFinder := func(e environs.Environ, maj int, min int, _ string, filter coretools.Filter) (coretools.List, error) {
    45  		calledWithEnviron = e
    46  		calledWithMajor = maj
    47  		calledWithMinor = min
    48  		calledWithFilter = filter
    49  		ver := version.Binary{Number: version.Number{Major: maj, Minor: min}}
    50  		t := coretools.Tools{Version: ver, URL: "http://example.com", Size: 1}
    51  		c.Assert(calledWithMajor, gc.Equals, 2)
    52  		c.Assert(calledWithMinor, gc.Equals, 5)
    53  		return coretools.List{&t}, nil
    54  	}
    55  
    56  	ver, err := checkToolsAvailability(cfg, fakeToolFinder)
    57  	c.Assert(err, jc.ErrorIsNil)
    58  	c.Assert(ver, gc.Not(gc.Equals), version.Zero)
    59  	c.Assert(ver, gc.Equals, version.Number{Major: 2, Minor: 5, Patch: 0})
    60  }
    61  
    62  type envGetter struct {
    63  }
    64  
    65  func (e *envGetter) Environment() (*state.Environment, error) {
    66  	return &state.Environment{}, nil
    67  }
    68  
    69  func (s *updaterSuite) TestUpdateToolsAvailability(c *gc.C) {
    70  	fakeNewEnvirons := func(*config.Config) (environs.Environ, error) {
    71  		return dummyEnviron{}, nil
    72  	}
    73  	s.PatchValue(&newEnvirons, fakeNewEnvirons)
    74  
    75  	fakeEnvConfig := func(_ *state.Environment) (*config.Config, error) {
    76  		sConfig := coretesting.FakeConfig()
    77  		sConfig = sConfig.Merge(coretesting.Attrs{
    78  			"agent-version": "2.5.0",
    79  		})
    80  		return config.New(config.NoDefaults, sConfig)
    81  	}
    82  	s.PatchValue(&envConfig, fakeEnvConfig)
    83  
    84  	fakeToolFinder := func(_ environs.Environ, _ int, _ int, _ string, _ coretools.Filter) (coretools.List, error) {
    85  		ver := version.Binary{Number: version.Number{Major: 2, Minor: 5, Patch: 2}}
    86  		olderVer := version.Binary{Number: version.Number{Major: 2, Minor: 5, Patch: 1}}
    87  		t := coretools.Tools{Version: ver, URL: "http://example.com", Size: 1}
    88  		tOld := coretools.Tools{Version: olderVer, URL: "http://example.com", Size: 1}
    89  		return coretools.List{&t, &tOld}, nil
    90  	}
    91  
    92  	var ver version.Number
    93  	fakeUpdate := func(_ *state.Environment, v version.Number) error {
    94  		ver = v
    95  		return nil
    96  	}
    97  
    98  	err := updateToolsAvailability(&envGetter{}, fakeToolFinder, fakeUpdate)
    99  	c.Assert(err, jc.ErrorIsNil)
   100  
   101  	c.Assert(ver, gc.Not(gc.Equals), version.Zero)
   102  	c.Assert(ver, gc.Equals, version.Number{Major: 2, Minor: 5, Patch: 2})
   103  }