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