github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/jujuclient/modelsfile_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package jujuclient_test
     5  
     6  import (
     7  	"io/ioutil"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/juju/osenv"
    13  	"github.com/juju/juju/jujuclient"
    14  	"github.com/juju/juju/testing"
    15  )
    16  
    17  type ModelsFileSuite struct {
    18  	testing.FakeJujuXDGDataHomeSuite
    19  }
    20  
    21  var _ = gc.Suite(&ModelsFileSuite{})
    22  
    23  const testModelsYAML = `
    24  controllers:
    25    ctrl:
    26      accounts:
    27        admin@local:
    28          models:
    29            admin:
    30              uuid: ghi
    31        bob@local:
    32          models:
    33            admin:
    34              uuid: jkl
    35    kontroll:
    36      accounts:
    37        admin@local:
    38          models:
    39            admin:
    40              uuid: abc
    41            my-model:
    42              uuid: def
    43          current-model: my-model
    44  `
    45  
    46  var testControllerModels = map[string]jujuclient.ControllerAccountModels{
    47  	"kontroll": {
    48  		map[string]*jujuclient.AccountModels{
    49  			"admin@local": {
    50  				Models: map[string]jujuclient.ModelDetails{
    51  					"admin":    kontrollAdminModelDetails,
    52  					"my-model": kontrollMyModelModelDetails,
    53  				},
    54  				CurrentModel: "my-model",
    55  			},
    56  		},
    57  	},
    58  	"ctrl": {
    59  		map[string]*jujuclient.AccountModels{
    60  			"admin@local": {
    61  				Models: map[string]jujuclient.ModelDetails{
    62  					"admin": ctrlAdminAdminModelDetails,
    63  				},
    64  			},
    65  			"bob@local": {
    66  				Models: map[string]jujuclient.ModelDetails{
    67  					"admin": ctrlBobAdminModelDetails,
    68  				},
    69  			},
    70  		},
    71  	},
    72  }
    73  
    74  var kontrollAdminModelDetails = jujuclient.ModelDetails{"abc"}
    75  var kontrollMyModelModelDetails = jujuclient.ModelDetails{"def"}
    76  var ctrlAdminAdminModelDetails = jujuclient.ModelDetails{"ghi"}
    77  var ctrlBobAdminModelDetails = jujuclient.ModelDetails{"jkl"}
    78  
    79  func (s *ModelsFileSuite) TestWriteFile(c *gc.C) {
    80  	writeTestModelsFile(c)
    81  	data, err := ioutil.ReadFile(osenv.JujuXDGDataHomePath("models.yaml"))
    82  	c.Assert(err, jc.ErrorIsNil)
    83  	c.Assert(string(data), gc.Equals, testModelsYAML[1:])
    84  }
    85  
    86  func (s *ModelsFileSuite) TestReadNoFile(c *gc.C) {
    87  	models, err := jujuclient.ReadModelsFile("nowhere.yaml")
    88  	c.Assert(err, jc.ErrorIsNil)
    89  	c.Assert(models, gc.IsNil)
    90  }
    91  
    92  func (s *ModelsFileSuite) TestReadEmptyFile(c *gc.C) {
    93  	err := ioutil.WriteFile(osenv.JujuXDGDataHomePath("models.yaml"), []byte(""), 0600)
    94  	c.Assert(err, jc.ErrorIsNil)
    95  	models, err := jujuclient.ReadModelsFile(jujuclient.JujuModelsPath())
    96  	c.Assert(err, jc.ErrorIsNil)
    97  	c.Assert(models, gc.HasLen, 0)
    98  }
    99  
   100  func writeTestModelsFile(c *gc.C) {
   101  	err := jujuclient.WriteModelsFile(testControllerModels)
   102  	c.Assert(err, jc.ErrorIsNil)
   103  }
   104  
   105  func (s *ModelsFileSuite) TestParseModels(c *gc.C) {
   106  	models, err := jujuclient.ParseModels([]byte(testModelsYAML))
   107  	c.Assert(err, jc.ErrorIsNil)
   108  	c.Assert(models, jc.DeepEquals, testControllerModels)
   109  }
   110  
   111  func (s *ModelsFileSuite) TestParseModelMetadataError(c *gc.C) {
   112  	models, err := jujuclient.ParseModels([]byte("fail me now"))
   113  	c.Assert(err, gc.ErrorMatches,
   114  		"cannot unmarshal models: yaml: unmarshal errors:"+
   115  			"\n  line 1: cannot unmarshal !!str `fail me...` into "+
   116  			"jujuclient.modelsCollection",
   117  	)
   118  	c.Assert(models, gc.IsNil)
   119  }