func (s *constraintsValidationSuite) SetUpTest(c *gc.C) { s.ConnSuite.SetUpTest(c) s.policy.getConstraintsValidator = func(*config.Config) (constraints.Validator, error) { validator := constraints.NewValidator() validator.RegisterConflicts([]string{constraints.InstanceType}, []string{constraints.Mem, constraints.Arch}) validator.RegisterUnsupported([]string{constraints.CpuPower}) return validator, nil } }
func (s *validationSuite) TestMergeError(c *gc.C) { validator := constraints.NewValidator() validator.RegisterConflicts([]string{"instance-type"}, []string{"mem"}) consFallback := constraints.MustParse("instance-type=foo mem=4G") cons := constraints.MustParse("cpu-cores=2") _, err := validator.Merge(consFallback, cons) c.Assert(err, gc.ErrorMatches, `ambiguous constraints: "mem" overlaps with "instance-type"`) _, err = validator.Merge(cons, consFallback) c.Assert(err, gc.ErrorMatches, `ambiguous constraints: "mem" overlaps with "instance-type"`) }
func (s *ServiceSuite) SetUpTest(c *gc.C) { s.ConnSuite.SetUpTest(c) s.policy.getConstraintsValidator = func(*config.Config) (constraints.Validator, error) { validator := constraints.NewValidator() validator.RegisterConflicts([]string{constraints.InstanceType}, []string{constraints.Mem}) validator.RegisterUnsupported([]string{constraints.CpuPower}) return validator, nil } s.charm = s.AddTestingCharm(c, "mysql") s.mysql = s.AddTestingService(c, "mysql", s.charm) }
func (s *validationSuite) TestMerge(c *gc.C) { for i, t := range mergeTests { c.Logf("test %d: %s", i, t.desc) validator := constraints.NewValidator() validator.RegisterConflicts(t.reds, t.blues) consFallback := constraints.MustParse(t.consFallback) cons := constraints.MustParse(t.cons) merged, err := validator.Merge(consFallback, cons) c.Assert(err, gc.IsNil) expected := constraints.MustParse(t.expected) c.Check(merged, gc.DeepEquals, expected) } }
func (s *PrecheckerSuite) TestPrecheckInstance(c *gc.C) { // PrecheckInstance should be called with the specified // series and placement, and the specified constraints // merged with the environment constraints, when attempting // to create an instance. envCons := constraints.MustParse("mem=4G") placement := "abc123" template, err := s.addOneMachine(c, envCons, placement) c.Assert(err, gc.IsNil) c.Assert(s.prechecker.precheckInstanceSeries, gc.Equals, template.Series) c.Assert(s.prechecker.precheckInstancePlacement, gc.Equals, placement) validator := constraints.NewValidator() cons, err := validator.Merge(envCons, template.Constraints) c.Assert(err, gc.IsNil) c.Assert(s.prechecker.precheckInstanceConstraints, gc.DeepEquals, cons) }
func (s *validationSuite) TestValidation(c *gc.C) { for i, t := range validationTests { c.Logf("test %d", i) validator := constraints.NewValidator() validator.RegisterUnsupported(t.unsupported) validator.RegisterConflicts(t.reds, t.blues) for a, v := range t.vocab { validator.RegisterVocabulary(a, v) } cons := constraints.MustParse(t.cons) unsupported, err := validator.Validate(cons) if t.err == "" { c.Assert(err, gc.IsNil) c.Assert(unsupported, jc.DeepEquals, t.unsupported) } else { c.Assert(err, gc.ErrorMatches, t.err) } } }
func (st *State) constraintsValidator() (constraints.Validator, error) { // Default behaviour is to simply use a standard validator with // no environment specific behaviour built in. defaultValidator := constraints.NewValidator() if st.policy == nil { return defaultValidator, nil } cfg, err := st.EnvironConfig() if err != nil { return nil, err } validator, err := st.policy.ConstraintsValidator(cfg) if errors.IsNotImplemented(err) { return defaultValidator, nil } else if err != nil { return nil, err } if validator == nil { return nil, fmt.Errorf("policy returned nil constraints validator without an error") } return validator, nil }
// ConstraintsValidator is defined on the Environs interface. func (e *environ) ConstraintsValidator() (constraints.Validator, error) { validator := constraints.NewValidator() validator.RegisterUnsupported([]string{constraints.CpuPower}) validator.RegisterConflicts([]string{constraints.InstanceType}, []string{constraints.Mem}) return validator, nil }