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

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package cloud_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/cloud"
    13  	"github.com/juju/juju/juju/osenv"
    14  	"github.com/juju/juju/testing"
    15  )
    16  
    17  type personalCloudSuite struct {
    18  	testing.FakeJujuXDGDataHomeSuite
    19  }
    20  
    21  var _ = gc.Suite(&personalCloudSuite{})
    22  
    23  func (s *personalCloudSuite) TestWritePersonalClouds(c *gc.C) {
    24  	clouds := map[string]cloud.Cloud{
    25  		"homestack": cloud.Cloud{
    26  			Type:      "openstack",
    27  			AuthTypes: []cloud.AuthType{"userpass", "access-key"},
    28  			Endpoint:  "http://homestack",
    29  			Regions: []cloud.Region{
    30  				cloud.Region{Name: "london", Endpoint: "http://london/1.0"},
    31  			},
    32  		},
    33  		"azurestack": cloud.Cloud{
    34  			Type:      "azure",
    35  			AuthTypes: []cloud.AuthType{"userpass"},
    36  			Regions: []cloud.Region{{
    37  				Name:     "prod",
    38  				Endpoint: "http://prod.azurestack.local",
    39  			}, {
    40  				Name:     "dev",
    41  				Endpoint: "http://dev.azurestack.local",
    42  			}, {
    43  				Name:     "test",
    44  				Endpoint: "http://test.azurestack.local",
    45  			}},
    46  		},
    47  	}
    48  	err := cloud.WritePersonalCloudMetadata(clouds)
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	data, err := ioutil.ReadFile(osenv.JujuXDGDataHomePath("clouds.yaml"))
    51  	c.Assert(err, jc.ErrorIsNil)
    52  	c.Assert(string(data), gc.Equals, `
    53  clouds:
    54    azurestack:
    55      type: azure
    56      auth-types: [userpass]
    57      regions:
    58        prod:
    59          endpoint: http://prod.azurestack.local
    60        dev:
    61          endpoint: http://dev.azurestack.local
    62        test:
    63          endpoint: http://test.azurestack.local
    64    homestack:
    65      type: openstack
    66      auth-types: [userpass, access-key]
    67      endpoint: http://homestack
    68      regions:
    69        london:
    70          endpoint: http://london/1.0
    71  `[1:])
    72  }
    73  
    74  func (s *personalCloudSuite) TestReadPersonalCloudsNone(c *gc.C) {
    75  	clouds, err := cloud.PersonalCloudMetadata()
    76  	c.Assert(err, jc.ErrorIsNil)
    77  	c.Assert(clouds, gc.IsNil)
    78  }
    79  
    80  func (s *personalCloudSuite) TestReadPersonalClouds(c *gc.C) {
    81  	s.setupReadClouds(c, osenv.JujuXDGDataHomePath("clouds.yaml"))
    82  	clouds, err := cloud.PersonalCloudMetadata()
    83  	c.Assert(err, jc.ErrorIsNil)
    84  	s.assertPersonalClouds(c, clouds)
    85  }
    86  
    87  func (s *personalCloudSuite) TestReadUserSpecifiedClouds(c *gc.C) {
    88  	file := osenv.JujuXDGDataHomePath("somemoreclouds.yaml")
    89  	s.setupReadClouds(c, file)
    90  	clouds, err := cloud.ParseCloudMetadataFile(file)
    91  	c.Assert(err, jc.ErrorIsNil)
    92  	s.assertPersonalClouds(c, clouds)
    93  }
    94  
    95  func (s *personalCloudSuite) assertPersonalClouds(c *gc.C, clouds map[string]cloud.Cloud) {
    96  	c.Assert(clouds, jc.DeepEquals, map[string]cloud.Cloud{
    97  		"homestack": cloud.Cloud{
    98  			Type:      "openstack",
    99  			AuthTypes: []cloud.AuthType{"userpass", "access-key"},
   100  			Endpoint:  "http://homestack",
   101  			Regions: []cloud.Region{
   102  				cloud.Region{Name: "london", Endpoint: "http://london/1.0"},
   103  			},
   104  		},
   105  		"azurestack": cloud.Cloud{
   106  			Type:            "azure",
   107  			AuthTypes:       []cloud.AuthType{"userpass"},
   108  			StorageEndpoint: "http://storage.azurestack.local",
   109  			Regions: []cloud.Region{
   110  				cloud.Region{
   111  					Name:            "local",
   112  					Endpoint:        "http://azurestack.local",
   113  					StorageEndpoint: "http://storage.azurestack.local",
   114  				},
   115  			},
   116  		},
   117  	})
   118  }
   119  
   120  func (s *personalCloudSuite) setupReadClouds(c *gc.C, destPath string) {
   121  	data := `
   122  clouds:
   123    homestack:
   124      type: openstack
   125      auth-types: [userpass, access-key]
   126      endpoint: http://homestack
   127      regions:
   128        london:
   129          endpoint: http://london/1.0
   130    azurestack:
   131      type: azure
   132      auth-types: [userpass]
   133      storage-endpoint: http://storage.azurestack.local
   134      regions:
   135        local:
   136          endpoint: http://azurestack.local
   137  `[1:]
   138  	err := ioutil.WriteFile(destPath, []byte(data), 0600)
   139  	c.Assert(err, jc.ErrorIsNil)
   140  }