github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/api/unitassigner/unitassigner_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package unitassigner 5 6 import ( 7 "sync" 8 9 "github.com/juju/errors" 10 "github.com/juju/names" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/api/base" 15 "github.com/juju/juju/apiserver/params" 16 ) 17 18 var _ = gc.Suite(testsuite{}) 19 20 type testsuite struct{} 21 22 func (testsuite) TestAssignUnits(c *gc.C) { 23 f := &fakeAssignCaller{c: c, response: params.ErrorResults{ 24 Results: []params.ErrorResult{ 25 {}, 26 {}, 27 }}} 28 api := New(f) 29 ids := []names.UnitTag{names.NewUnitTag("mysql/0"), names.NewUnitTag("mysql/1")} 30 errs, err := api.AssignUnits(ids) 31 c.Assert(f.request, gc.Equals, "AssignUnits") 32 c.Assert(f.params, gc.DeepEquals, 33 params.Entities{[]params.Entity{ 34 {Tag: "unit-mysql-0"}, 35 {Tag: "unit-mysql-1"}, 36 }}, 37 ) 38 c.Assert(err, jc.ErrorIsNil) 39 c.Assert(errs, gc.DeepEquals, []error{nil, nil}) 40 } 41 42 func (testsuite) TestAssignUnitsNotFound(c *gc.C) { 43 f := &fakeAssignCaller{c: c, response: params.ErrorResults{ 44 Results: []params.ErrorResult{ 45 {Error: ¶ms.Error{Code: params.CodeNotFound}}, 46 }}} 47 api := New(f) 48 ids := []names.UnitTag{names.NewUnitTag("mysql/0")} 49 errs, err := api.AssignUnits(ids) 50 f.Lock() 51 c.Assert(f.request, gc.Equals, "AssignUnits") 52 c.Assert(f.params, gc.DeepEquals, 53 params.Entities{[]params.Entity{ 54 {Tag: "unit-mysql-0"}, 55 }}, 56 ) 57 c.Assert(err, jc.ErrorIsNil) 58 c.Assert(errs, gc.HasLen, 1) 59 c.Assert(errs[0], jc.Satisfies, errors.IsNotFound) 60 } 61 62 func (testsuite) TestWatchUnitAssignment(c *gc.C) { 63 f := &fakeWatchCaller{ 64 c: c, 65 response: params.StringsWatchResult{}, 66 } 67 api := New(f) 68 w, err := api.WatchUnitAssignments() 69 f.Lock() 70 c.Assert(f.request, gc.Equals, "WatchUnitAssignments") 71 c.Assert(f.params, gc.IsNil) 72 c.Assert(err, jc.ErrorIsNil) 73 c.Assert(w, gc.NotNil) 74 } 75 76 type fakeAssignCaller struct { 77 base.APICaller 78 sync.Mutex 79 request string 80 params interface{} 81 response params.ErrorResults 82 err error 83 c *gc.C 84 } 85 86 func (f *fakeAssignCaller) APICall(objType string, version int, id, request string, param, response interface{}) error { 87 f.Lock() 88 defer f.Unlock() 89 f.request = request 90 f.params = param 91 res, ok := response.(*params.ErrorResults) 92 if !ok { 93 f.c.Errorf("Expected *params.ErrorResults as response, but was %#v", response) 94 } else { 95 *res = f.response 96 } 97 return f.err 98 99 } 100 101 func (*fakeAssignCaller) BestFacadeVersion(facade string) int { 102 return 1 103 } 104 105 type fakeWatchCaller struct { 106 base.APICaller 107 sync.Mutex 108 request string 109 params interface{} 110 response params.StringsWatchResult 111 err error 112 c *gc.C 113 } 114 115 func (f *fakeWatchCaller) APICall(objType string, version int, id, request string, param, response interface{}) error { 116 f.Lock() 117 defer f.Unlock() 118 f.request = request 119 f.params = param 120 _, ok := response.(*params.StringsWatchResult) 121 if !ok { 122 f.c.Errorf("Expected *params.StringsWatchResult as response, but was %#v", response) 123 } 124 return f.err 125 } 126 127 func (*fakeWatchCaller) BestFacadeVersion(facade string) int { 128 return 1 129 }