github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/uniter/runner/jujuc/relation_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package jujuc_test 5 6 import ( 7 "fmt" 8 9 "github.com/juju/testing" 10 11 "github.com/juju/juju/worker/uniter/runner/jujuc" 12 jujuctesting "github.com/juju/juju/worker/uniter/runner/jujuc/testing" 13 ) 14 15 type relationSuite struct { 16 ContextSuite 17 } 18 19 func (s *relationSuite) newHookContext(relid int, remote string) (jujuc.Context, *relationInfo) { 20 hctx, info := s.NewHookContext() 21 rInfo := &relationInfo{ContextInfo: info, stub: s.Stub} 22 settings := jujuctesting.Settings{ 23 "private-address": "u-0.testing.invalid", 24 } 25 rInfo.setNextRelation("", s.Unit, settings) // peer0 26 rInfo.setNextRelation("", s.Unit, settings) // peer1 27 if relid >= 0 { 28 rInfo.SetAsRelationHook(relid, remote) 29 } 30 31 return hctx, rInfo 32 } 33 34 type relationInfo struct { 35 *jujuctesting.ContextInfo 36 37 stub *testing.Stub 38 rels map[int]*jujuctesting.Relation 39 } 40 41 func (ri *relationInfo) reset() { 42 ri.Relations.Reset() 43 ri.RelationHook.Reset() 44 ri.rels = nil 45 } 46 47 func (ri *relationInfo) setNextRelation(name, unit string, settings jujuctesting.Settings) int { 48 if ri.rels == nil { 49 ri.rels = make(map[int]*jujuctesting.Relation) 50 } 51 id := len(ri.rels) 52 if name == "" { 53 name = fmt.Sprintf("peer%d", id) 54 } 55 relation := ri.SetNewRelation(id, name, ri.stub) 56 if unit != "" { 57 relation.UnitName = unit 58 relation.SetRelated(unit, settings) 59 } 60 ri.rels[id] = relation 61 return id 62 } 63 64 func (ri *relationInfo) addRelatedServices(relname string, count int) { 65 if ri.rels == nil { 66 ri.rels = make(map[int]*jujuctesting.Relation) 67 } 68 for i := 0; i < count; i++ { 69 ri.setNextRelation(relname, "", nil) 70 } 71 } 72 73 func (ri *relationInfo) setRelations(id int, members []string) { 74 relation := ri.rels[id] 75 relation.Reset() 76 for _, name := range members { 77 relation.SetRelated(name, nil) 78 } 79 }