~rogpeppe/juju-core/438-local-instance-Addresses

« back to all changes in this revision

Viewing changes to state/apiserver/provisioner/provisioner_test.go

[r=fwereade],[bug=1234035] Fix upgrade 1.14 -> 1.15

This adds a Tools() API call to provisioner API,
similarly to the upgrader API. Common code factored
out into apiserver/common/tools.go.

SetAgentTools() renamed to SetAgentVersion() in
machine and unit state types. Also renamed a few
types in params to be shorter or better reflect
what are they about. Added DEPRECATE(v1.18) tags
to bits of the API that need cleanup.

Live tested on EC2 - after copying the tools from
/tools/releases/ to /tools/ the upgrade proceeds
and finishes successfully.

https://codereview.appspot.com/14231044/

R=fwereade, jameinel

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
        statetesting "launchpad.net/juju-core/state/testing"
22
22
        coretesting "launchpad.net/juju-core/testing"
23
23
        jc "launchpad.net/juju-core/testing/checkers"
 
24
        "launchpad.net/juju-core/version"
24
25
)
25
26
 
26
27
func Test(t *stdtesting.T) {
666
667
                Result: s.State.CACert(),
667
668
        })
668
669
}
 
670
 
 
671
func (s *provisionerSuite) TestToolsNothing(c *gc.C) {
 
672
        // Not an error to watch nothing
 
673
        results, err := s.provisioner.Tools(params.Entities{})
 
674
        c.Assert(err, gc.IsNil)
 
675
        c.Check(results.Results, gc.HasLen, 0)
 
676
}
 
677
 
 
678
func (s *provisionerSuite) TestToolsRefusesWrongAgent(c *gc.C) {
 
679
        anAuthorizer := s.authorizer
 
680
        anAuthorizer.Tag = "machine-12354"
 
681
        anAuthorizer.Manager = false
 
682
        anAuthorizer.MachineAgent = true
 
683
        aProvisioner, err := provisioner.NewProvisionerAPI(s.State, s.resources, anAuthorizer)
 
684
        c.Check(err, gc.IsNil)
 
685
        args := params.Entities{
 
686
                Entities: []params.Entity{{Tag: s.machines[0].Tag()}},
 
687
        }
 
688
        results, err := aProvisioner.Tools(args)
 
689
        // It is not an error to make the request, but the specific item is rejected
 
690
        c.Assert(err, gc.IsNil)
 
691
        c.Check(results.Results, gc.HasLen, 1)
 
692
        toolResult := results.Results[0]
 
693
        c.Assert(toolResult.Error, gc.DeepEquals, apiservertesting.ErrUnauthorized)
 
694
}
 
695
 
 
696
func (s *provisionerSuite) TestToolsForAgent(c *gc.C) {
 
697
        cur := version.Current
 
698
        agent := params.Entity{Tag: s.machines[0].Tag()}
 
699
 
 
700
        // The machine must have its existing tools set before we query for the
 
701
        // next tools. This is so that we can grab Arch and Series without
 
702
        // having to pass it in again
 
703
        err := s.machines[0].SetAgentVersion(version.Current)
 
704
        c.Assert(err, gc.IsNil)
 
705
 
 
706
        args := params.Entities{Entities: []params.Entity{agent}}
 
707
        results, err := s.provisioner.Tools(args)
 
708
        c.Assert(err, gc.IsNil)
 
709
        c.Check(results.Results, gc.HasLen, 1)
 
710
        c.Assert(results.Results[0].Error, gc.IsNil)
 
711
        agentTools := results.Results[0].Tools
 
712
        c.Check(agentTools.URL, gc.Not(gc.Equals), "")
 
713
        c.Check(agentTools.Version, gc.DeepEquals, cur)
 
714
}