本文整理汇总了Golang中github.com/juju/names.NewActionTag函数的典型用法代码示例。如果您正苦于以下问题:Golang NewActionTag函数的具体用法?Golang NewActionTag怎么用?Golang NewActionTag使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewActionTag函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestAuthAndActionFromTagFn
func (s *actionsSuite) TestAuthAndActionFromTagFn(c *gc.C) {
notFoundActionTag := names.NewActionTag(utils.MustNewUUID().String())
authorizedActionTag := names.NewActionTag(utils.MustNewUUID().String())
authorizedMachineTag := names.NewMachineTag("1")
authorizedAction := fakeAction{name: "action1", receiver: authorizedMachineTag.Id()}
unauthorizedActionTag := names.NewActionTag(utils.MustNewUUID().String())
unauthorizedMachineTag := names.NewMachineTag("10")
unauthorizedAction := fakeAction{name: "action2", receiver: unauthorizedMachineTag.Id()}
invalidReceiverActionTag := names.NewActionTag(utils.MustNewUUID().String())
invalidReceiverAction := fakeAction{name: "action2", receiver: "masterexploder"}
canAccess := makeCanAccess(map[names.Tag]bool{
authorizedMachineTag: true,
})
getActionByTag := makeGetActionByTag(map[names.ActionTag]state.Action{
authorizedActionTag: authorizedAction,
unauthorizedActionTag: unauthorizedAction,
invalidReceiverActionTag: invalidReceiverAction,
})
tagFn := common.AuthAndActionFromTagFn(canAccess, getActionByTag)
for i, test := range []struct {
tag string
errString string
err error
expectedAction state.Action
}{{
tag: "invalid-action-tag",
errString: `"invalid-action-tag" is not a valid tag`,
}, {
tag: notFoundActionTag.String(),
errString: "action not found",
}, {
tag: invalidReceiverActionTag.String(),
errString: `invalid actionreceiver name "masterexploder"`,
}, {
tag: unauthorizedActionTag.String(),
err: common.ErrPerm,
}, {
tag: authorizedActionTag.String(),
expectedAction: authorizedAction,
}} {
c.Logf("test %d", i)
action, err := tagFn(test.tag)
if test.errString != "" {
c.Check(err, gc.ErrorMatches, test.errString)
c.Check(action, gc.IsNil)
} else if test.err != nil {
c.Check(err, gc.Equals, test.err)
c.Check(action, gc.IsNil)
} else {
c.Check(err, jc.ErrorIsNil)
c.Check(action, gc.Equals, action)
}
}
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:59,代码来源:action_test.go
示例2: TestParseActionTag
func (s *actionSuite) TestParseActionTag(c *gc.C) {
parseActionTagTests := []struct {
tag string
expected names.Tag
err error
}{
{
tag: "",
expected: nil,
err: names.InvalidTagError("", ""),
}, {
tag: "action-good" + names.ActionMarker + "123",
expected: names.NewActionTag("good" + names.ActionMarker + "123"),
err: nil,
}, {
tag: "action-good/0" + names.ActionMarker + "123",
expected: names.NewActionTag("good/0" + names.ActionMarker + "123"),
err: nil,
}, {
tag: "action-bad/00" + names.ActionMarker + "123",
expected: nil,
err: names.InvalidTagError("action-bad/00"+names.ActionMarker+"123", names.ActionTagKind),
}, {
tag: "dave",
expected: nil,
err: names.InvalidTagError("dave", ""),
}, {
tag: "action-dave/0",
expected: nil,
err: names.InvalidTagError("action-dave/0", names.ActionTagKind),
}, {
tag: "action",
expected: nil,
err: names.InvalidTagError("action", ""),
}, {
tag: "user-dave",
expected: nil,
err: names.InvalidTagError("user-dave", names.ActionTagKind),
}}
for i, t := range parseActionTagTests {
c.Logf("test %d: %s", i, t.tag)
got, err := names.ParseActionTag(t.tag)
if err != nil || t.err != nil {
c.Check(err, gc.DeepEquals, t.err)
continue
}
c.Check(got, gc.FitsTypeOf, t.expected)
c.Check(got, gc.Equals, t.expected)
}
}
开发者ID:howbazaar,项目名称:names,代码行数:51,代码来源:action_test.go
示例3: Handle
// Handle is part of the watcher.StringsHandler interface.
// It should give us any actions currently enqueued for this machine.
// We try to execute every action before returning
func (h *handler) Handle(_ <-chan struct{}, actionsSlice []string) error {
for _, actionId := range actionsSlice {
ok := names.IsValidAction(actionId)
if !ok {
return errors.Errorf("got invalid action id %s", actionId)
}
actionTag := names.NewActionTag(actionId)
action, err := h.config.Facade.Action(actionTag)
if err != nil {
return errors.Annotatef(err, "could not retrieve action %s", actionId)
}
err = h.config.Facade.ActionBegin(actionTag)
if err != nil {
return errors.Annotatef(err, "could not begin action %s", action.Name())
}
// We try to handle the action. The result returned from handling the action is
// sent through using ActionFinish. We only stop the loop if ActionFinish fails.
var finishErr error
results, err := h.config.HandleAction(action.Name(), action.Params())
if err != nil {
finishErr = h.config.Facade.ActionFinish(actionTag, params.ActionFailed, nil, err.Error())
} else {
finishErr = h.config.Facade.ActionFinish(actionTag, params.ActionCompleted, results, "")
}
if finishErr != nil {
return errors.Trace(finishErr)
}
}
return nil
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:36,代码来源:worker.go
示例4: TestActionFinishSuccess
func (s *ClientSuite) TestActionFinishSuccess(c *gc.C) {
tag := names.NewActionTag(utils.MustNewUUID().String())
status := "stubstatus"
actionResults := map[string]interface{}{"stub": "stub"}
message := "stubmsg"
expectedCalls := []jujutesting.StubCall{{
"MachineActions.FinishActions",
[]interface{}{"", params.ActionExecutionResults{
Results: []params.ActionExecutionResult{{
ActionTag: tag.String(),
Status: status,
Results: actionResults,
Message: message,
}},
}},
}}
var stub jujutesting.Stub
apiCaller := apitesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
stub.AddCall(objType+"."+request, id, arg)
c.Check(result, gc.FitsTypeOf, ¶ms.ErrorResults{})
*(result.(*params.ErrorResults)) = params.ErrorResults{
Results: []params.ErrorResult{{}},
}
return nil
})
client := machineactions.NewClient(apiCaller)
err := client.ActionFinish(tag, status, actionResults, message)
c.Assert(err, jc.ErrorIsNil)
stub.CheckCalls(c, expectedCalls)
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:32,代码来源:machineactions_test.go
示例5: TestActionFinishTooManyResults
func (s *ClientSuite) TestActionFinishTooManyResults(c *gc.C) {
tag := names.NewActionTag(utils.MustNewUUID().String())
expectedCalls := []jujutesting.StubCall{{
"MachineActions.FinishActions",
[]interface{}{"", params.ActionExecutionResults{
Results: []params.ActionExecutionResult{{
ActionTag: tag.String(),
Status: "",
Results: nil,
Message: "",
}},
}},
}}
var stub jujutesting.Stub
apiCaller := apitesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
stub.AddCall(objType+"."+request, id, arg)
c.Check(result, gc.FitsTypeOf, ¶ms.ErrorResults{})
res := result.(*params.ErrorResults)
res.Results = make([]params.ErrorResult, 2)
return nil
})
client := machineactions.NewClient(apiCaller)
err := client.ActionFinish(tag, "", nil, "")
c.Assert(err, gc.ErrorMatches, "expected 1 result, got 2")
stub.CheckCalls(c, expectedCalls)
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:28,代码来源:machineactions_test.go
示例6: TestGetActionSuccess
func (s *ClientSuite) TestGetActionSuccess(c *gc.C) {
tag := names.NewActionTag(utils.MustNewUUID().String())
expectedCalls := []jujutesting.StubCall{{
"MachineActions.Actions",
[]interface{}{"", params.Entities{
Entities: []params.Entity{{Tag: tag.String()}},
}},
}}
expectedName := "ack"
expectedParams := map[string]interface{}{"floob": "zgloob"}
var stub jujutesting.Stub
apiCaller := apitesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
stub.AddCall(objType+"."+request, id, arg)
c.Check(result, gc.FitsTypeOf, ¶ms.ActionResults{})
*(result.(*params.ActionResults)) = params.ActionResults{
Results: []params.ActionResult{{
Action: ¶ms.Action{
Name: expectedName,
Parameters: expectedParams,
},
}},
}
return nil
})
client := machineactions.NewClient(apiCaller)
action, err := client.Action(tag)
c.Assert(err, jc.ErrorIsNil)
c.Assert(action.Name(), gc.Equals, expectedName)
c.Assert(action.Params(), gc.DeepEquals, expectedParams)
stub.CheckCalls(c, expectedCalls)
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:33,代码来源:machineactions_test.go
示例7: TestGetActionResultError
func (s *ClientSuite) TestGetActionResultError(c *gc.C) {
tag := names.NewActionTag(utils.MustNewUUID().String())
expectedCalls := []jujutesting.StubCall{{
"MachineActions.Actions",
[]interface{}{"", params.Entities{
Entities: []params.Entity{{Tag: tag.String()}},
}},
}}
expectedErr := ¶ms.Error{
Message: "rigged",
Code: params.CodeNotAssigned,
}
var stub jujutesting.Stub
apiCaller := apitesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
stub.AddCall(objType+"."+request, id, arg)
c.Check(result, gc.FitsTypeOf, ¶ms.ActionResults{})
*(result.(*params.ActionResults)) = params.ActionResults{
Results: []params.ActionResult{{
Error: expectedErr,
}},
}
return nil
})
client := machineactions.NewClient(apiCaller)
action, err := client.Action(tag)
c.Assert(errors.Cause(err), gc.Equals, expectedErr)
c.Assert(action, gc.IsNil)
stub.CheckCalls(c, expectedCalls)
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:31,代码来源:machineactions_test.go
示例8: TestPrefixSuffix
func (s *actionSuite) TestPrefixSuffix(c *gc.C) {
var tests = []struct {
prefix string
suffix int
}{
{prefix: "asdf", suffix: 0},
{prefix: "qwer/0", suffix: 10},
{prefix: "zxcv/3", suffix: 11},
}
for _, test := range tests {
suf := fmt.Sprintf("%d", test.suffix)
action := names.NewActionTag(test.prefix + names.ActionMarker + suf)
c.Assert(action.Prefix(), gc.Equals, test.prefix)
c.Assert(action.Sequence(), gc.Equals, test.suffix)
result := names.NewActionResultTag(test.prefix + names.ActionResultMarker + suf)
c.Assert(result.Prefix(), gc.Equals, test.prefix)
c.Assert(result.Sequence(), gc.Equals, test.suffix)
c.Assert(action.PrefixTag(), gc.Not(gc.IsNil))
c.Assert(action.PrefixTag(), gc.DeepEquals, result.PrefixTag())
}
}
开发者ID:howbazaar,项目名称:names,代码行数:25,代码来源:action_test.go
示例9: NewActionRunner
// NewActionRunner exists to satisfy the Factory interface.
func (f *factory) NewActionRunner(actionId string) (Runner, error) {
ch, err := getCharm(f.paths.GetCharmDir())
if err != nil {
return nil, errors.Trace(err)
}
ok := names.IsValidAction(actionId)
if !ok {
return nil, &badActionError{actionId, "not valid actionId"}
}
tag := names.NewActionTag(actionId)
action, err := f.state.Action(tag)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
return nil, ErrActionNotAvailable
} else if params.IsCodeActionNotAvailable(err) {
return nil, ErrActionNotAvailable
} else if err != nil {
return nil, errors.Trace(err)
}
name := action.Name()
spec, ok := ch.Actions().ActionSpecs[name]
if !ok {
return nil, &badActionError{name, "not defined"}
}
params := action.Params()
if err := spec.ValidateParams(params); err != nil {
return nil, &badActionError{name, err.Error()}
}
actionData := newActionData(name, &tag, params)
ctx, err := f.contextFactory.ActionContext(actionData)
runner := NewRunner(ctx, f.paths)
return runner, nil
}
开发者ID:mhilton,项目名称:juju,代码行数:36,代码来源:factory.go
示例10: TestActionBeginSuccess
func (s *ClientSuite) TestActionBeginSuccess(c *gc.C) {
tag := names.NewActionTag(utils.MustNewUUID().String())
expectedCalls := []jujutesting.StubCall{{
"MachineActions.BeginActions",
[]interface{}{"", params.Entities{
Entities: []params.Entity{{Tag: tag.String()}},
}},
}}
var stub jujutesting.Stub
apiCaller := apitesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
stub.AddCall(objType+"."+request, id, arg)
c.Check(result, gc.FitsTypeOf, ¶ms.ErrorResults{})
*(result.(*params.ErrorResults)) = params.ErrorResults{
Results: []params.ErrorResult{{}},
}
return nil
})
client := machineactions.NewClient(apiCaller)
err := client.ActionBegin(tag)
c.Assert(err, jc.ErrorIsNil)
stub.CheckCalls(c, expectedCalls)
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:25,代码来源:machineactions_test.go
示例11: TestActionFinishError
func (s *ClientSuite) TestActionFinishError(c *gc.C) {
tag := names.NewActionTag(utils.MustNewUUID().String())
expectedCalls := []jujutesting.StubCall{{
"MachineActions.FinishActions",
[]interface{}{"", params.ActionExecutionResults{
Results: []params.ActionExecutionResult{{
ActionTag: tag.String(),
Status: "",
Results: nil,
Message: "",
}},
}},
}}
expectedErr := errors.Errorf("blam")
var stub jujutesting.Stub
apiCaller := apitesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
stub.AddCall(objType+"."+request, id, arg)
c.Check(result, gc.FitsTypeOf, ¶ms.ErrorResults{})
return expectedErr
})
client := machineactions.NewClient(apiCaller)
err := client.ActionFinish(tag, "", nil, "")
c.Assert(errors.Cause(err), gc.Equals, expectedErr)
stub.CheckCalls(c, expectedCalls)
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:27,代码来源:machineactions_test.go
示例12: makeActionQuery
func makeActionQuery(actionID string, receiverType string, receiverTag names.Tag) actionQuery {
return actionQuery{
actionTag: names.NewActionTag(actionID),
receiver: actionReceiver{
receiverType: receiverType,
tag: receiverTag,
},
}
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:9,代码来源:run_test.go
示例13: TestAuthFuncForTagKind
func (s *commonSuite) TestAuthFuncForTagKind(c *gc.C) {
// TODO(dimitern): This list of all supported tags and kinds needs
// to live in juju/names.
uuid, err := utils.NewUUID()
c.Assert(err, jc.ErrorIsNil)
allTags := []names.Tag{
nil, // invalid tag
names.NewActionTag(uuid.String()),
names.NewCharmTag("cs:precise/missing"),
names.NewModelTag(uuid.String()),
names.NewFilesystemTag("20/20"),
names.NewLocalUserTag("user"),
names.NewMachineTag("42"),
names.NewNetworkTag("public"),
names.NewRelationTag("wordpress:mysql mysql:db"),
names.NewServiceTag("wordpress"),
names.NewSpaceTag("apps"),
names.NewStorageTag("foo/42"),
names.NewUnitTag("wordpress/5"),
names.NewUserTag("joe"),
names.NewVolumeTag("80/20"),
}
for i, allowedTag := range allTags {
c.Logf("test #%d: allowedTag: %v", i, allowedTag)
var allowedKind string
if allowedTag != nil {
allowedKind = allowedTag.Kind()
}
getAuthFunc := common.AuthFuncForTagKind(allowedKind)
authFunc, err := getAuthFunc()
if allowedKind == "" {
c.Check(err, gc.ErrorMatches, "tag kind cannot be empty")
c.Check(authFunc, gc.IsNil)
continue
} else if !c.Check(err, jc.ErrorIsNil) {
continue
}
for j, givenTag := range allTags {
c.Logf("test #%d.%d: givenTag: %v", i, j, givenTag)
var givenKind string
if givenTag != nil {
givenKind = givenTag.Kind()
}
if allowedKind == givenKind {
c.Check(authFunc(givenTag), jc.IsTrue)
} else {
c.Check(authFunc(givenTag), jc.IsFalse)
}
}
}
}
开发者ID:exekias,项目名称:juju,代码行数:56,代码来源:common_test.go
示例14: setResponse
func (m *mockRunAPI) setResponse(id string, mock mockResponse) {
if m.runResponses == nil {
m.runResponses = make(map[string]params.ActionResult)
}
if m.receiverIdMap == nil {
m.receiverIdMap = make(map[string]string)
}
actionTag := names.NewActionTag(utils.MustNewUUID().String())
m.receiverIdMap[id] = actionTag.Id()
m.runResponses[id] = makeActionResult(mock, actionTag.String())
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:11,代码来源:run_test.go
示例15: FailAction
// FailAction is part of the operation.Callbacks interface.
func (opc *operationCallbacks) FailAction(actionId, message string) error {
if !names.IsValidAction(actionId) {
return errors.Errorf("invalid action id %q", actionId)
}
tag := names.NewActionTag(actionId)
err := opc.u.st.ActionFinish(tag, params.ActionFailed, nil, message)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
err = nil
}
return err
}
开发者ID:imoapps,项目名称:juju,代码行数:12,代码来源:op_callbacks.go
示例16: TestInvalidActionNamesPanic
func (s *actionSuite) TestInvalidActionNamesPanic(c *gc.C) {
invalidActionNameTests := []string{
"", // blank is not a valid action id
"admin", // probably a user name, which isn't a valid action id
}
for _, name := range invalidActionNameTests {
expect := fmt.Sprintf("%q is not a valid action id", name)
testFunc := func() { names.NewActionTag(name) }
c.Assert(testFunc, gc.PanicMatches, expect)
}
}
开发者ID:howbazaar,项目名称:names,代码行数:12,代码来源:action_test.go
示例17: TestNewActionRunnerLeadershipContext
func (s *ContextFactorySuite) TestNewActionRunnerLeadershipContext(c *gc.C) {
s.testLeadershipContextWiring(c, func() runner.Context {
s.SetCharm(c, "dummy")
action, err := s.State.EnqueueAction(s.unit.Tag(), "snapshot", nil)
c.Assert(err, jc.ErrorIsNil)
actionData := &runner.ActionData{
Name: action.Name(),
Tag: names.NewActionTag(action.Id()),
Params: action.Parameters(),
ResultsMap: map[string]interface{}{},
}
ctx, err := s.factory.ActionContext(actionData)
c.Assert(err, jc.ErrorIsNil)
return ctx
})
}
开发者ID:mhilton,项目名称:juju,代码行数:18,代码来源:contextfactory_test.go
示例18: TestAction
func (s *actionSuite) TestAction(c *gc.C) {
var actionTests = []struct {
description string
action params.Action
}{{
description: "A simple Action.",
action: params.Action{
Name: "fakeaction",
Parameters: basicParams,
},
}, {
description: "An Action with nested parameters.",
action: params.Action{
Name: "fakeaction",
Parameters: map[string]interface{}{
"outfile": "foo.bz2",
"compression": map[string]interface{}{
"kind": "bzip",
"quality": float64(5.0),
},
},
},
}}
for i, actionTest := range actionTests {
c.Logf("test %d: %s", i, actionTest.description)
a, err := s.uniterSuite.wordpressUnit.AddAction(
actionTest.action.Name,
actionTest.action.Parameters)
c.Assert(err, jc.ErrorIsNil)
ok := names.IsValidAction(a.Id())
c.Assert(ok, gc.Equals, true)
actionTag := names.NewActionTag(a.Id())
c.Assert(a.Tag(), gc.Equals, actionTag)
retrievedAction, err := s.uniter.Action(actionTag)
c.Assert(err, jc.ErrorIsNil)
c.Assert(retrievedAction.Name(), gc.DeepEquals, actionTest.action.Name)
c.Assert(retrievedAction.Params(), gc.DeepEquals, actionTest.action.Parameters)
}
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:43,代码来源:action_test.go
示例19: TestActionContext
func (s *ContextFactorySuite) TestActionContext(c *gc.C) {
s.SetCharm(c, "dummy")
action, err := s.State.EnqueueAction(s.unit.Tag(), "snapshot", nil)
c.Assert(err, jc.ErrorIsNil)
actionData := &runner.ActionData{
Name: action.Name(),
Tag: names.NewActionTag(action.Id()),
Params: action.Parameters(),
ResultsMap: map[string]interface{}{},
}
ctx, err := s.factory.ActionContext(actionData)
c.Assert(err, jc.ErrorIsNil)
s.AssertCoreContext(c, ctx)
s.AssertActionContext(c, ctx)
s.AssertNotRelationContext(c, ctx)
s.AssertNotStorageContext(c, ctx)
}
开发者ID:mhilton,项目名称:juju,代码行数:20,代码来源:contextfactory_test.go
示例20: FindActionTagsByPrefix
// FindActionTagsByPrefix finds Actions with ids that share the supplied prefix, and
// returns a list of corresponding ActionTags.
func (st *State) FindActionTagsByPrefix(prefix string) []names.ActionTag {
actionLogger.Tracef("FindActionTagsByPrefix() %q", prefix)
var results []names.ActionTag
var doc struct {
Id string `bson:"_id"`
}
actions, closer := st.getCollection(actionsC)
defer closer()
iter := actions.Find(bson.D{{"_id", bson.D{{"$regex", "^" + st.docID(prefix)}}}}).Iter()
defer iter.Close()
for iter.Next(&doc) {
actionLogger.Tracef("FindActionTagsByPrefix() iter doc %+v", doc)
localID := st.localID(doc.Id)
if names.IsValidAction(localID) {
results = append(results, names.NewActionTag(localID))
}
}
actionLogger.Tracef("FindActionTagsByPrefix() %q found %+v", prefix, results)
return results
}
开发者ID:AlexisBruemmer,项目名称:juju,代码行数:24,代码来源:action.go
注:本文中的github.com/juju/names.NewActionTag函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论