github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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 }