github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/worker/machineactions/fixture_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Copyright 2016 Cloudbase Solutions SRL
     3  // Licensed under the AGPLv3, see LICENCE file for details.
     4  
     5  package machineactions_test
     6  
     7  import (
     8  	"errors"
     9  
    10  	"github.com/juju/juju/api/machineactions"
    11  	"github.com/juju/juju/apiserver/params"
    12  	"github.com/juju/juju/watcher"
    13  	"github.com/juju/juju/worker"
    14  	"github.com/juju/juju/worker/workertest"
    15  	"github.com/juju/testing"
    16  	"gopkg.in/juju/names.v2"
    17  )
    18  
    19  var actionNotFoundErr = errors.New("action not found")
    20  
    21  func mockHandleAction(stub *testing.Stub) func(string, map[string]interface{}) (map[string]interface{}, error) {
    22  	return func(name string, params map[string]interface{}) (map[string]interface{}, error) {
    23  		stub.AddCall("HandleAction", name)
    24  		return nil, stub.NextErr()
    25  	}
    26  }
    27  
    28  // mockFacade implements machineactions.Facade for use in the tests.
    29  type mockFacade struct {
    30  	stub                     *testing.Stub
    31  	runningActions           []params.ActionResult
    32  	watcherSendInvalidValues bool
    33  }
    34  
    35  // RunningActions is part of the machineactions.Facade interface.
    36  func (mock *mockFacade) RunningActions(agent names.MachineTag) ([]params.ActionResult, error) {
    37  	mock.stub.AddCall("RunningActions", agent)
    38  	if err := mock.stub.NextErr(); err != nil {
    39  		return nil, err
    40  	}
    41  	return mock.runningActions, nil
    42  }
    43  
    44  // RunningActions is part of the machineactions.Facade interface.
    45  func (mock *mockFacade) Action(tag names.ActionTag) (*machineactions.Action, error) {
    46  	mock.stub.AddCall("Action", tag)
    47  	if err := mock.stub.NextErr(); err != nil {
    48  		return nil, err
    49  	}
    50  	return tagToActionMap[tag], nil
    51  }
    52  
    53  // ActionBegin is part of the machineactions.Facade interface.
    54  func (mock *mockFacade) ActionBegin(tag names.ActionTag) error {
    55  	mock.stub.AddCall("ActionBegin", tag)
    56  	return mock.stub.NextErr()
    57  }
    58  
    59  // ActionFinish is part of the machineactions.Facade interface.
    60  func (mock *mockFacade) ActionFinish(tag names.ActionTag, status string, results map[string]interface{}, message string) error {
    61  	mock.stub.AddCall("ActionFinish", tag, status, message)
    62  	return mock.stub.NextErr()
    63  }
    64  
    65  // Watch is part of the machineactions.Facade interface.
    66  func (mock *mockFacade) WatchActionNotifications(agent names.MachineTag) (watcher.StringsWatcher, error) {
    67  	mock.stub.AddCall("WatchActionNotifications", agent)
    68  	if err := mock.stub.NextErr(); err != nil {
    69  		return nil, err
    70  	}
    71  	return newStubWatcher(mock.watcherSendInvalidValues), nil
    72  }
    73  
    74  // stubWatcher implements watcher.StringsWatcher and supplied canned
    75  // data over the Changes() channel.
    76  type stubWatcher struct {
    77  	worker.Worker
    78  	changes chan []string
    79  }
    80  
    81  func newStubWatcher(watcherSendInvalidValues bool) *stubWatcher {
    82  	changes := make(chan []string, 3)
    83  	changes <- []string{firstActionID, secondActionID}
    84  	changes <- []string{thirdActionID}
    85  	if watcherSendInvalidValues {
    86  		changes <- []string{"invalid-action-id"}
    87  	}
    88  	return &stubWatcher{
    89  		Worker:  workertest.NewErrorWorker(nil),
    90  		changes: changes,
    91  	}
    92  }
    93  
    94  // Changes is part of the watcher.StringsWatcher interface.
    95  func (stubWatcher *stubWatcher) Changes() watcher.StringsChannel {
    96  	return stubWatcher.changes
    97  }
    98  
    99  var (
   100  	firstAction     = machineactions.NewAction("foo", nil)
   101  	secondAction    = machineactions.NewAction("baz", nil)
   102  	thirdAction     = machineactions.NewAction("boo", nil)
   103  	firstActionID   = "11234567-89ab-cdef-0123-456789abcdef"
   104  	secondActionID  = "21234567-89ab-cdef-0123-456789abcdef"
   105  	thirdActionID   = "31234567-89ab-cdef-0123-456789abcdef"
   106  	firstActionTag  = names.NewActionTag(firstActionID)
   107  	secondActionTag = names.NewActionTag(secondActionID)
   108  	thirdActionTag  = names.NewActionTag(thirdActionID)
   109  	tagToActionMap  = map[names.ActionTag]*machineactions.Action{
   110  		firstActionTag:  firstAction,
   111  		secondActionTag: secondAction,
   112  		thirdActionTag:  thirdAction,
   113  	}
   114  	fakeRunningActions = []params.ActionResult{
   115  		params.ActionResult{Action: &params.Action{Tag: thirdActionTag.String()}},
   116  	}
   117  )