// TODO(cmars) 2015/08/10: rework this into builtin Engine cycle checker. func (s *ManifoldsSuite) TestAcyclic(c *gc.C) { manifolds := unit.Manifolds(unit.ManifoldsConfig{ Agent: fakeAgent{}, }) err := dependency.Validate(manifolds) c.Assert(err, jc.ErrorIsNil) }
func (s *EngineSuite) TestValidateComplexManifolds(c *gc.C) { // Create a bunch of manifolds with tangled but acyclic dependencies; check // that they pass validation. manifolds := dependency.Manifolds{ "root1": dependency.Manifold{}, "root2": dependency.Manifold{}, "mid1": dependency.Manifold{Inputs: []string{"root1"}}, "mid2": dependency.Manifold{Inputs: []string{"root1", "root2"}}, "leaf1": dependency.Manifold{Inputs: []string{"root2", "mid1"}}, "leaf2": dependency.Manifold{Inputs: []string{"root1", "mid2"}}, "leaf3": dependency.Manifold{Inputs: []string{"root1", "root2", "mid1", "mid2"}}, } err := dependency.Validate(manifolds) c.Check(err, jc.ErrorIsNil) // Introduce a cycle; check the manifolds no longer validate. manifolds["root1"] = dependency.Manifold{Inputs: []string{"leaf1"}} err = dependency.Validate(manifolds) c.Check(err, gc.ErrorMatches, "cycle detected at .*") }
func (s *EngineSuite) TestValidateTrivialCycle(c *gc.C) { err := dependency.Validate(dependency.Manifolds{ "a": dependency.Manifold{Inputs: []string{"a"}}, }) c.Check(err.Error(), gc.Equals, `cycle detected at "a" (considering: map[a:true])`) }
func (s *EngineSuite) TestValidateEmptyManifolds(c *gc.C) { err := dependency.Validate(dependency.Manifolds{}) c.Check(err, jc.ErrorIsNil) }