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  }