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  }