github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/featuretests/cmd_juju_bundle_test.go (about)

     1  // Copyright 2018 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  package featuretests
     4  
     5  import (
     6  	"github.com/juju/cmd/cmdtesting"
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/cmd/juju/model"
    11  	"github.com/juju/juju/feature"
    12  	jujutesting "github.com/juju/juju/juju/testing"
    13  	"github.com/juju/juju/state"
    14  	"github.com/juju/juju/testing/factory"
    15  )
    16  
    17  type CmdExportBundleSuite struct {
    18  	jujutesting.JujuConnSuite
    19  }
    20  
    21  func (s *CmdExportBundleSuite) setupApplications(c *gc.C) {
    22  	s.Factory.MakeSpace(c, &factory.SpaceParams{Name: "vlan2"})
    23  	// make an application with 2 endpoints
    24  	application1 := s.Factory.MakeApplication(c, &factory.ApplicationParams{
    25  		Charm: s.Factory.MakeCharm(c, &factory.CharmParams{
    26  			Name:     "wordpress",
    27  			Revision: "23",
    28  		}),
    29  	})
    30  	endpoint1, err := application1.Endpoint("juju-info")
    31  	c.Assert(err, jc.ErrorIsNil)
    32  	endpoint2, err := application1.Endpoint("logging-dir")
    33  	c.Assert(err, jc.ErrorIsNil)
    34  
    35  	// make another application with 2 endpoints
    36  	application2 := s.Factory.MakeApplication(c, &factory.ApplicationParams{
    37  		Charm: s.Factory.MakeCharm(c, &factory.CharmParams{
    38  			Name:     "logging",
    39  			Revision: "43",
    40  		}),
    41  		CharmConfig:      map[string]interface{}{"foo": "bar"},
    42  		EndpointBindings: map[string]string{"info": "vlan2"},
    43  	})
    44  	endpoint3, err := application2.Endpoint("info")
    45  	c.Assert(err, jc.ErrorIsNil)
    46  	endpoint4, err := application2.Endpoint("logging-directory")
    47  	c.Assert(err, jc.ErrorIsNil)
    48  
    49  	// create relation between a1:e1 and a2:e3
    50  	relation1 := s.Factory.MakeRelation(c, &factory.RelationParams{
    51  		Endpoints: []state.Endpoint{endpoint1, endpoint3},
    52  	})
    53  	c.Assert(relation1, gc.NotNil)
    54  
    55  	// create relation between a1:e2 and a2:e4
    56  	relation2 := s.Factory.MakeRelation(c, &factory.RelationParams{
    57  		Endpoints: []state.Endpoint{endpoint2, endpoint4},
    58  	})
    59  	c.Assert(relation2, gc.NotNil)
    60  }
    61  
    62  func (s *CmdExportBundleSuite) TestExportBundle(c *gc.C) {
    63  	s.SetFeatureFlags(feature.DeveloperMode)
    64  
    65  	s.setupApplications(c)
    66  
    67  	ctx, err := cmdtesting.RunCommand(c, model.NewExportBundleCommand())
    68  	c.Assert(err, jc.ErrorIsNil)
    69  	output := cmdtesting.Stdout(ctx)
    70  	c.Assert(output, gc.Equals, `
    71  series: quantal
    72  applications:
    73    logging:
    74      charm: cs:quantal/logging-43
    75      options:
    76        foo: bar
    77      bindings:
    78        info: vlan2
    79    wordpress:
    80      charm: cs:quantal/wordpress-23
    81  relations:
    82  - - wordpress:juju-info
    83    - logging:info
    84  - - wordpress:logging-dir
    85    - logging:logging-directory
    86  `[1:])
    87  }