github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/cmd/charm-admin/deletecharm_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"fmt"
     8  	"os"
     9  	"path"
    10  
    11  	"github.com/juju/charm"
    12  	charmtesting "github.com/juju/charm/testing"
    13  	"github.com/juju/charmstore"
    14  	gitjujutesting "github.com/juju/testing"
    15  	gc "launchpad.net/gocheck"
    16  
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type DeleteCharmSuite struct {
    21  	testing.BaseSuite
    22  }
    23  
    24  var _ = gc.Suite(&DeleteCharmSuite{})
    25  
    26  const testDeleteCharm = `
    27  mongo-url: localhost:23456
    28  `
    29  
    30  func (s *DeleteCharmSuite) SetUpSuite(c *gc.C) {
    31  	s.BaseSuite.SetUpSuite(c)
    32  }
    33  
    34  func (s *DeleteCharmSuite) TearDownSuite(c *gc.C) {
    35  	s.BaseSuite.TearDownSuite(c)
    36  }
    37  
    38  func (s *DeleteCharmSuite) TestInit(c *gc.C) {
    39  	config := &DeleteCharmCommand{}
    40  	err := testing.InitCommand(config, []string{"--config", "/etc/charmd.conf", "--url", "cs:go"})
    41  	c.Assert(err, gc.IsNil)
    42  	c.Assert(config.ConfigPath, gc.Equals, "/etc/charmd.conf")
    43  	c.Assert(config.Url, gc.Equals, "cs:go")
    44  }
    45  
    46  func (s *DeleteCharmSuite) TestRun(c *gc.C) {
    47  	// Derive config file from test mongo port
    48  	confDir := c.MkDir()
    49  	f, err := os.Create(path.Join(confDir, "charmd.conf"))
    50  	c.Assert(err, gc.IsNil)
    51  	configPath := f.Name()
    52  	{
    53  		defer f.Close()
    54  		fmt.Fprintf(f, "mongo-url: %s\n", gitjujutesting.MgoServer.Addr())
    55  	}
    56  	// Delete charm that does not exist, not found error.
    57  	config := &DeleteCharmCommand{}
    58  	out, err := testing.RunCommand(c, config, "--config", configPath, "--url", "cs:unreleased/foo")
    59  	fmt.Println(out)
    60  	c.Assert(err, gc.NotNil)
    61  	// Publish that charm now
    62  	url := charm.MustParseURL("cs:unreleased/foo")
    63  	{
    64  		s, err := charmstore.Open(gitjujutesting.MgoServer.Addr())
    65  		defer s.Close()
    66  		c.Assert(err, gc.IsNil)
    67  		pub, err := s.CharmPublisher([]*charm.URL{url}, "such-digest-much-unique")
    68  		c.Assert(err, gc.IsNil)
    69  		err = pub.Publish(charmtesting.Charms.ClonedDir(c.MkDir(), "dummy"))
    70  		c.Assert(err, gc.IsNil)
    71  	}
    72  	// Delete charm, should now succeed
    73  	_, err = testing.RunCommand(c, config, "--config", configPath, "--url", "cs:unreleased/foo")
    74  	c.Assert(err, gc.IsNil)
    75  	c.Assert(config.Config, gc.NotNil)
    76  	// Confirm that the charm is gone
    77  	{
    78  		s, err := charmstore.Open(gitjujutesting.MgoServer.Addr())
    79  		defer s.Close()
    80  		c.Assert(err, gc.IsNil)
    81  		_, err = s.CharmInfo(url)
    82  		c.Assert(err, gc.NotNil)
    83  	}
    84  }