1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package diskmanager_test
9
jc "github.com/juju/testing/checkers"
10
gc "gopkg.in/check.v1"
11
"gopkg.in/juju/names.v2"
13
"github.com/juju/juju/apiserver/common"
14
"github.com/juju/juju/apiserver/diskmanager"
15
"github.com/juju/juju/apiserver/params"
16
apiservertesting "github.com/juju/juju/apiserver/testing"
17
"github.com/juju/juju/state"
18
"github.com/juju/juju/storage"
19
coretesting "github.com/juju/juju/testing"
22
var _ = gc.Suite(&DiskManagerSuite{})
24
type DiskManagerSuite struct {
26
resources *common.Resources
27
authorizer *apiservertesting.FakeAuthorizer
29
api *diskmanager.DiskManagerAPI
32
func (s *DiskManagerSuite) SetUpTest(c *gc.C) {
33
s.BaseSuite.SetUpTest(c)
34
s.resources = common.NewResources()
35
tag := names.NewMachineTag("0")
36
s.authorizer = &apiservertesting.FakeAuthorizer{Tag: tag}
38
diskmanager.PatchState(s, s.st)
41
s.api, err = diskmanager.NewDiskManagerAPI(nil, nil, s.authorizer)
42
c.Assert(err, jc.ErrorIsNil)
45
func (s *DiskManagerSuite) TestSetMachineBlockDevices(c *gc.C) {
46
devices := []storage.BlockDevice{{DeviceName: "sda"}, {DeviceName: "sdb"}}
47
results, err := s.api.SetMachineBlockDevices(params.SetMachineBlockDevices{
48
MachineBlockDevices: []params.MachineBlockDevices{{
50
BlockDevices: devices,
53
c.Assert(err, jc.ErrorIsNil)
54
c.Assert(results, gc.DeepEquals, params.ErrorResults{
55
Results: []params.ErrorResult{{Error: nil}},
59
func (s *DiskManagerSuite) TestSetMachineBlockDevicesEmptyArgs(c *gc.C) {
60
results, err := s.api.SetMachineBlockDevices(params.SetMachineBlockDevices{})
61
c.Assert(err, jc.ErrorIsNil)
62
c.Assert(results.Results, gc.HasLen, 0)
65
func (s *DiskManagerSuite) TestNewDiskManagerAPINonMachine(c *gc.C) {
66
tag := names.NewUnitTag("mysql/0")
67
s.authorizer = &apiservertesting.FakeAuthorizer{Tag: tag}
68
_, err := diskmanager.NewDiskManagerAPI(nil, nil, s.authorizer)
69
c.Assert(err, gc.ErrorMatches, "permission denied")
72
func (s *DiskManagerSuite) TestSetMachineBlockDevicesInvalidTags(c *gc.C) {
73
results, err := s.api.SetMachineBlockDevices(params.SetMachineBlockDevices{
74
MachineBlockDevices: []params.MachineBlockDevices{{
79
Machine: "unit-mysql-0",
82
c.Assert(err, jc.ErrorIsNil)
83
c.Assert(results, gc.DeepEquals, params.ErrorResults{
84
Results: []params.ErrorResult{{
87
Error: ¶ms.Error{Message: "permission denied", Code: "unauthorized access"},
89
Error: ¶ms.Error{Message: "permission denied", Code: "unauthorized access"},
92
c.Assert(s.st.calls, gc.Equals, 1)
95
func (s *DiskManagerSuite) TestSetMachineBlockDevicesStateError(c *gc.C) {
96
s.st.err = errors.New("boom")
97
results, err := s.api.SetMachineBlockDevices(params.SetMachineBlockDevices{
98
MachineBlockDevices: []params.MachineBlockDevices{{
102
c.Assert(err, jc.ErrorIsNil)
103
c.Assert(results, gc.DeepEquals, params.ErrorResults{
104
Results: []params.ErrorResult{{
105
Error: ¶ms.Error{Message: "boom", Code: ""},
110
type mockState struct {
112
devices map[string][]state.BlockDeviceInfo
116
func (st *mockState) SetMachineBlockDevices(machineId string, devices []state.BlockDeviceInfo) error {
118
if st.devices == nil {
119
st.devices = make(map[string][]state.BlockDeviceInfo)
121
st.devices[machineId] = devices