github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/storage/poolremove_test.go (about)

     1  // Copyright 2019 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package storage_test
     5  
     6  import (
     7  	"fmt"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/rpc/params"
    13  	"github.com/juju/juju/storage"
    14  	"github.com/juju/juju/storage/provider"
    15  )
    16  
    17  type poolRemoveSuite struct {
    18  	baseStorageSuite
    19  }
    20  
    21  var _ = gc.Suite(&poolRemoveSuite{})
    22  
    23  func (s *poolRemoveSuite) createPools(c *gc.C, num int) {
    24  	var err error
    25  	for i := 0; i < num; i++ {
    26  		poolName := fmt.Sprintf("%v%v", tstName, i)
    27  		s.baseStorageSuite.pools[poolName], err =
    28  			storage.NewConfig(poolName, provider.LoopProviderType, map[string]interface{}{"zip": "zap"})
    29  		c.Assert(err, jc.ErrorIsNil)
    30  	}
    31  }
    32  
    33  func (s *poolRemoveSuite) TestRemovePool(c *gc.C) {
    34  	s.createPools(c, 1)
    35  	poolName := fmt.Sprintf("%v%v", tstName, 0)
    36  
    37  	args := params.StoragePoolDeleteArgs{
    38  		Pools: []params.StoragePoolDeleteArg{{
    39  			Name: poolName,
    40  		}},
    41  	}
    42  	results, err := s.api.RemovePool(args)
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	c.Assert(results.Results, gc.HasLen, 1)
    45  	c.Assert(results.Results[0].Error, gc.IsNil)
    46  
    47  	pools, err := s.poolManager.List()
    48  	c.Assert(err, jc.ErrorIsNil)
    49  	c.Assert(pools, gc.HasLen, 0)
    50  }
    51  
    52  func (s *poolRemoveSuite) TestRemoveNotExists(c *gc.C) {
    53  	poolName := fmt.Sprintf("%v%v", tstName, 0)
    54  
    55  	args := params.StoragePoolDeleteArgs{
    56  		Pools: []params.StoragePoolDeleteArg{{
    57  			Name: poolName,
    58  		}},
    59  	}
    60  	results, err := s.api.RemovePool(args)
    61  	c.Assert(err, jc.ErrorIsNil)
    62  	c.Assert(results.Results, gc.HasLen, 1)
    63  	c.Assert(results.Results[0].Error, gc.IsNil)
    64  
    65  	pools, err := s.poolManager.List()
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	c.Assert(pools, gc.HasLen, 0)
    68  }
    69  
    70  func (s *poolRemoveSuite) TestRemoveInUse(c *gc.C) {
    71  	s.createPools(c, 1)
    72  	poolName := fmt.Sprintf("%v%v", tstName, 0)
    73  	s.poolsInUse = []string{poolName}
    74  	args := params.StoragePoolDeleteArgs{
    75  		Pools: []params.StoragePoolDeleteArg{{
    76  			Name: poolName,
    77  		}},
    78  	}
    79  	results, err := s.api.RemovePool(args)
    80  	c.Assert(err, jc.ErrorIsNil)
    81  	c.Assert(results.Results, gc.HasLen, 1)
    82  	c.Assert(results.Results[0].Error, gc.ErrorMatches, fmt.Sprintf("storage pool %q in use", poolName))
    83  
    84  	pools, err := s.poolManager.List()
    85  	c.Assert(err, jc.ErrorIsNil)
    86  	c.Assert(pools, gc.HasLen, 1)
    87  }
    88  
    89  func (s *poolRemoveSuite) TestRemoveSomeInUse(c *gc.C) {
    90  	s.createPools(c, 2)
    91  	poolNameInUse := fmt.Sprintf("%v%v", tstName, 0)
    92  	poolNameNotInUse := fmt.Sprintf("%v%v", tstName, 1)
    93  	s.poolsInUse = []string{poolNameInUse}
    94  	args := params.StoragePoolDeleteArgs{
    95  		Pools: []params.StoragePoolDeleteArg{{
    96  			Name: poolNameInUse,
    97  		}, {
    98  			Name: poolNameNotInUse,
    99  		}},
   100  	}
   101  	results, err := s.api.RemovePool(args)
   102  	c.Assert(err, jc.ErrorIsNil)
   103  	c.Assert(results.Results, gc.HasLen, 2)
   104  	c.Assert(results.Results[0].Error, gc.ErrorMatches, fmt.Sprintf("storage pool %q in use", poolNameInUse))
   105  	c.Assert(results.Results[1].Error, gc.IsNil)
   106  
   107  	pools, err := s.poolManager.List()
   108  	c.Assert(err, jc.ErrorIsNil)
   109  	c.Assert(pools, gc.HasLen, 1)
   110  }