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

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package caas_test
     5  
     6  import (
     7  	"github.com/juju/schema"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  	"gopkg.in/juju/environschema.v1"
    11  
    12  	"github.com/juju/juju/caas"
    13  	"github.com/juju/juju/testing"
    14  )
    15  
    16  var baseFields = environschema.Fields{
    17  	caas.JujuExternalHostNameKey: {
    18  		Description: "the external hostname of an exposed application",
    19  		Type:        environschema.Tstring,
    20  		Group:       environschema.EnvironGroup,
    21  	},
    22  	caas.JujuApplicationPath: {
    23  		Description: "the relative http path used to access an application",
    24  		Type:        environschema.Tstring,
    25  		Group:       environschema.EnvironGroup,
    26  	},
    27  }
    28  
    29  var baseDefaults = schema.Defaults{
    30  	caas.JujuApplicationPath: "/",
    31  }
    32  
    33  type ConfigSuite struct {
    34  	testing.BaseSuite
    35  }
    36  
    37  var _ = gc.Suite(&ConfigSuite{})
    38  
    39  func (s *ConfigSuite) TestConfigSchemaNoProviderFields(c *gc.C) {
    40  	fields, err := caas.ConfigSchema(nil)
    41  	c.Assert(err, jc.ErrorIsNil)
    42  	c.Assert(fields, jc.DeepEquals, baseFields)
    43  }
    44  
    45  func (s *ConfigSuite) TestConfigSchemaProviderFields(c *gc.C) {
    46  	extraFields := environschema.Fields{
    47  		"extra": {
    48  			Description: "some field",
    49  			Type:        environschema.Tstring,
    50  		},
    51  	}
    52  	fields, err := caas.ConfigSchema(extraFields)
    53  	c.Assert(err, jc.ErrorIsNil)
    54  
    55  	expectedFields := make(environschema.Fields)
    56  	for name, f := range baseFields {
    57  		expectedFields[name] = f
    58  	}
    59  	for name, f := range extraFields {
    60  		expectedFields[name] = f
    61  	}
    62  	c.Assert(fields, jc.DeepEquals, expectedFields)
    63  }
    64  
    65  func (s *ConfigSuite) TestConfigSchemaProviderFieldsConflict(c *gc.C) {
    66  	extraFields := environschema.Fields{
    67  		"juju-external-hostname": {
    68  			Description: "some field",
    69  			Type:        environschema.Tstring,
    70  		},
    71  	}
    72  	_, err := caas.ConfigSchema(extraFields)
    73  	c.Assert(err, gc.ErrorMatches, `config field "juju-external-hostname" clashes with common config`)
    74  }
    75  
    76  func (s *ConfigSuite) TestConfigDefaultsNoProviderDefaults(c *gc.C) {
    77  	defaults := caas.ConfigDefaults(nil)
    78  	c.Assert(defaults, jc.DeepEquals, baseDefaults)
    79  }
    80  
    81  func (s *ConfigSuite) TestConfigSchemaProviderDefaults(c *gc.C) {
    82  	extraDefaults := schema.Defaults{
    83  		"extra": "extra default",
    84  	}
    85  	defaults := caas.ConfigDefaults(extraDefaults)
    86  
    87  	expectedDefaults := make(schema.Defaults)
    88  	for name, d := range baseDefaults {
    89  		expectedDefaults[name] = d
    90  	}
    91  	for name, d := range defaults {
    92  		expectedDefaults[name] = d
    93  	}
    94  	c.Assert(defaults, jc.DeepEquals, expectedDefaults)
    95  }
    96  
    97  func (s *ConfigSuite) TestOperatorStorageClassLabels(c *gc.C) {
    98  	labels := caas.OperatorStorageClassLabels("gitlab", "test")
    99  	c.Assert(labels, jc.DeepEquals, []string{"gitlab-operator-storage", "test", "default"})
   100  }
   101  
   102  func (s *ConfigSuite) TestUnitStorageClassLabels(c *gc.C) {
   103  	labels := caas.UnitStorageClassLabels("gitlab", "test")
   104  	c.Assert(labels, jc.DeepEquals, []string{"gitlab-unit-storage", "test", "default"})
   105  }