github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/client/backups/backups_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package backups_test 5 6 import ( 7 "io" 8 "io/ioutil" 9 10 "github.com/juju/errors" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 "gopkg.in/juju/names.v2" 14 15 "github.com/juju/juju/apiserver/common" 16 backupsAPI "github.com/juju/juju/apiserver/facades/client/backups" 17 "github.com/juju/juju/apiserver/params" 18 apiservertesting "github.com/juju/juju/apiserver/testing" 19 "github.com/juju/juju/juju/testing" 20 "github.com/juju/juju/state/backups" 21 backupstesting "github.com/juju/juju/state/backups/testing" 22 ) 23 24 type backupsSuite struct { 25 testing.JujuConnSuite 26 resources *common.Resources 27 authorizer *apiservertesting.FakeAuthorizer 28 api *backupsAPI.APIv2 29 meta *backups.Metadata 30 machineTag names.MachineTag 31 } 32 33 var _ = gc.Suite(&backupsSuite{}) 34 35 func (s *backupsSuite) SetUpTest(c *gc.C) { 36 s.JujuConnSuite.SetUpTest(c) 37 38 s.machineTag = names.NewMachineTag("0") 39 s.resources = common.NewResources() 40 s.resources.RegisterNamed("dataDir", common.StringResource(s.DataDir())) 41 s.resources.RegisterNamed("machineID", common.StringResource(s.machineTag.Id())) 42 43 ssInfo, err := s.State.StateServingInfo() 44 c.Assert(err, jc.ErrorIsNil) 45 agentConfig := s.AgentConfigForTag(c, s.machineTag) 46 agentConfig.SetStateServingInfo(params.StateServingInfo{ 47 PrivateKey: ssInfo.PrivateKey, 48 Cert: ssInfo.Cert, 49 CAPrivateKey: ssInfo.CAPrivateKey, 50 SharedSecret: ssInfo.SharedSecret, 51 APIPort: ssInfo.APIPort, 52 StatePort: ssInfo.StatePort, 53 }) 54 err = agentConfig.Write() 55 c.Assert(err, jc.ErrorIsNil) 56 57 tag := names.NewLocalUserTag("admin") 58 s.authorizer = &apiservertesting.FakeAuthorizer{Tag: tag} 59 s.api, err = backupsAPI.NewAPIv2(&stateShim{s.State, s.Model}, s.resources, s.authorizer) 60 c.Assert(err, jc.ErrorIsNil) 61 s.meta = backupstesting.NewMetadataStarted() 62 } 63 64 func (s *backupsSuite) setBackups(c *gc.C, meta *backups.Metadata, err string) *backupstesting.FakeBackups { 65 fake := backupstesting.FakeBackups{ 66 Meta: meta, 67 Filename: "test-filename", 68 } 69 if meta != nil { 70 fake.MetaList = append(fake.MetaList, meta) 71 } 72 if err != "" { 73 fake.Error = errors.Errorf(err) 74 } 75 s.PatchValue(backupsAPI.NewBackups, 76 func(backupsAPI.Backend) (backups.Backups, io.Closer) { 77 return &fake, ioutil.NopCloser(nil) 78 }, 79 ) 80 return &fake 81 } 82 83 func (s *backupsSuite) TestNewAPIOkay(c *gc.C) { 84 _, err := backupsAPI.NewAPIv2(&stateShim{s.State, s.Model}, s.resources, s.authorizer) 85 c.Check(err, jc.ErrorIsNil) 86 } 87 88 func (s *backupsSuite) TestNewAPINotAuthorized(c *gc.C) { 89 s.authorizer.Tag = names.NewApplicationTag("eggs") 90 _, err := backupsAPI.NewAPIv2(&stateShim{s.State, s.Model}, s.resources, s.authorizer) 91 c.Check(errors.Cause(err), gc.Equals, common.ErrPerm) 92 } 93 94 func (s *backupsSuite) TestNewAPIHostedEnvironmentFails(c *gc.C) { 95 otherState := s.Factory.MakeModel(c, nil) 96 defer otherState.Close() 97 otherModel, err := otherState.Model() 98 c.Assert(err, jc.ErrorIsNil) 99 _, err = backupsAPI.NewAPIv2(&stateShim{otherState, otherModel}, s.resources, s.authorizer) 100 c.Check(err, gc.ErrorMatches, "backups are only supported from the controller model\nUse juju switch to select the controller model") 101 }