本文整理汇总了Golang中github.com/juju/errors.New函数的典型用法代码示例。如果您正苦于以下问题:Golang New函数的具体用法?Golang New怎么用?Golang New使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了New函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: loginRequest
// loginRequest forms a LoginRequest from the information
// in the given HTTP request.
func (ctxt *httpContext) loginRequest(r *http.Request) (params.LoginRequest, error) {
authHeader := r.Header.Get("Authorization")
if authHeader == "" {
// No authorization header implies an attempt
// to login with macaroon authentication.
return params.LoginRequest{
Macaroons: httpbakery.RequestMacaroons(r),
}, nil
}
parts := strings.Fields(authHeader)
if len(parts) != 2 || parts[0] != "Basic" {
// Invalid header format or no header provided.
return params.LoginRequest{}, errors.New("invalid request format")
}
// Challenge is a base64-encoded "tag:pass" string.
// See RFC 2617, Section 2.
challenge, err := base64.StdEncoding.DecodeString(parts[1])
if err != nil {
return params.LoginRequest{}, errors.New("invalid request format")
}
tagPass := strings.SplitN(string(challenge), ":", 2)
if len(tagPass) != 2 {
return params.LoginRequest{}, errors.New("invalid request format")
}
// Ensure that a sensible tag was passed.
_, err = names.ParseTag(tagPass[0])
if err != nil {
return params.LoginRequest{}, errors.Trace(common.ErrBadCreds)
}
return params.LoginRequest{
AuthTag: tagPass[0],
Credentials: tagPass[1],
Nonce: r.Header.Get(params.MachineNonceHeader),
}, nil
}
示例2: ExecRestrictedSQL
// ExecRestrictedSQL implements SQLHelper interface.
// This is used for executing some restricted sql statements.
func (s *session) ExecRestrictedSQL(ctx context.Context, sql string) (rset.Recordset, error) {
if ctx.Value(&sqlexec.RestrictedSQLExecutorKeyType{}) != nil {
// We do not support run this function concurrently.
// TODO: Maybe we should remove this restriction latter.
return nil, errors.New("Should not call ExecRestrictedSQL concurrently.")
}
statements, err := Compile(ctx, sql)
if err != nil {
log.Errorf("Compile %s with error: %v", sql, err)
return nil, errors.Trace(err)
}
if len(statements) != 1 {
log.Errorf("ExecRestrictedSQL only executes one statement. Too many/few statement in %s", sql)
return nil, errors.New("Wrong number of statement.")
}
st := statements[0]
// Check statement for some restriction
// For example only support DML on system meta table.
// TODO: Add more restrictions.
log.Debugf("Executing %s [%s]", st.OriginText(), sql)
ctx.SetValue(&sqlexec.RestrictedSQLExecutorKeyType{}, true)
defer ctx.ClearValue(&sqlexec.RestrictedSQLExecutorKeyType{})
rs, err := st.Exec(ctx)
return rs, errors.Trace(err)
}
示例3: TestSetInstanceStatusFailure
func (s *InstancePollerSuite) TestSetInstanceStatusFailure(c *gc.C) {
s.st.SetErrors(
errors.New("pow!"), // m1 := FindEntity("1")
nil, // m2 := FindEntity("2")
errors.New("FAIL"), // m2.SetInstanceStatus()
errors.NotProvisionedf("machine 42"), // FindEntity("3") (ensure wrapping is preserved)
)
s.st.SetMachineInfo(c, machineInfo{id: "1", instanceStatus: statusInfo("foo")})
s.st.SetMachineInfo(c, machineInfo{id: "2", instanceStatus: statusInfo("")})
result, err := s.api.SetInstanceStatus(params.SetStatus{
Entities: []params.EntityStatusArgs{
{Tag: "machine-1", Status: "new"},
{Tag: "machine-2", Status: "invalid"},
{Tag: "machine-3", Status: ""},
}},
)
c.Assert(err, jc.ErrorIsNil)
c.Assert(result, jc.DeepEquals, s.machineErrorResults)
s.st.CheckFindEntityCall(c, 0, "1")
s.st.CheckFindEntityCall(c, 1, "2")
now := s.clock.Now()
s.st.CheckCall(c, 2, "SetInstanceStatus", status.StatusInfo{Status: "invalid", Since: &now})
s.st.CheckFindEntityCall(c, 3, "3")
}
示例4: rsyslogServerCerts
// rsyslogServerCerts generates new certificates for RsyslogConfigHandler
// using the provider caCert and caKey. This is used during the setup of the
// rsyslog worker as well as when handling any changes to the rsyslog configuration,
// usually adding and removing of state machines through ensure-availability.
func (h *RsyslogConfigHandler) rsyslogServerCerts(caCert, caKey string) (string, string, error) {
if caCert == "" {
return "", "", errors.New("CACert is not set")
}
if caKey == "" {
return "", "", errors.New("CAKey is not set")
}
expiry := time.Now().UTC().AddDate(10, 0, 0)
// Add rsyslog servers in the subjectAltName so we can
// successfully validate when connectiong via SSL
hosts, err := h.rsyslogHosts()
if err != nil {
return "", "", err
}
// Add local IPs to SAN. When connecting via IP address,
// the client will validate the server against any IP in
// the subjectAltName. We add all local ips to make sure
// this does not cause an error
ips, err := localIPS()
if err != nil {
return "", "", err
}
hosts = append(hosts, ips...)
return cert.NewServer(caCert, caKey, expiry, hosts)
}
示例5: TestLifeFailure
func (s *InstancePollerSuite) TestLifeFailure(c *gc.C) {
s.st.SetErrors(
errors.New("pow!"), // m1 := FindEntity("1"); Life not called
nil, // m2 := FindEntity("2")
errors.New("FAIL"), // m2.Life() - unused
errors.NotProvisionedf("machine 42"), // FindEntity("3") (ensure wrapping is preserved)
)
s.st.SetMachineInfo(c, machineInfo{id: "1", life: state.Alive})
s.st.SetMachineInfo(c, machineInfo{id: "2", life: state.Dead})
s.st.SetMachineInfo(c, machineInfo{id: "3", life: state.Dying})
result, err := s.api.Life(s.machineEntities)
c.Assert(err, jc.ErrorIsNil)
c.Assert(result, jc.DeepEquals, params.LifeResults{
Results: []params.LifeResult{
{Error: apiservertesting.ServerError("pow!")},
{Life: params.Dead},
{Error: apiservertesting.NotProvisionedError("42")},
}},
)
s.st.CheckFindEntityCall(c, 0, "1")
s.st.CheckFindEntityCall(c, 1, "2")
s.st.CheckCall(c, 2, "Life")
s.st.CheckFindEntityCall(c, 3, "3")
}
示例6: TestProviderAddressesFailure
func (s *InstancePollerSuite) TestProviderAddressesFailure(c *gc.C) {
s.st.SetErrors(
errors.New("pow!"), // m1 := FindEntity("1")
nil, // m2 := FindEntity("2")
errors.New("FAIL"), // m2.ProviderAddresses()- unused
errors.NotProvisionedf("machine 42"), // FindEntity("3") (ensure wrapping is preserved)
)
s.st.SetMachineInfo(c, machineInfo{id: "1"})
s.st.SetMachineInfo(c, machineInfo{id: "2"})
result, err := s.api.ProviderAddresses(s.machineEntities)
c.Assert(err, jc.ErrorIsNil)
c.Assert(result, jc.DeepEquals, params.MachineAddressesResults{
Results: []params.MachineAddressesResult{
{Error: apiservertesting.ServerError("pow!")},
{Addresses: nil},
{Error: apiservertesting.NotProvisionedError("42")},
}},
)
s.st.CheckFindEntityCall(c, 0, "1")
s.st.CheckFindEntityCall(c, 1, "2")
s.st.CheckCall(c, 2, "ProviderAddresses")
s.st.CheckFindEntityCall(c, 3, "3")
}
示例7: TestIsFatal
func (s *EngineSuite) TestIsFatal(c *gc.C) {
// Start an engine that pays attention to fatal errors.
fatalError := errors.New("KABOOM")
s.stopEngine(c)
s.startEngine(c, func(err error) bool {
return err == fatalError
})
// Start two independent workers.
mh1 := newManifoldHarness()
err := s.engine.Install("some-task", mh1.Manifold())
c.Assert(err, jc.ErrorIsNil)
mh1.AssertOneStart(c)
mh2 := newManifoldHarness()
err = s.engine.Install("other-task", mh2.Manifold())
c.Assert(err, jc.ErrorIsNil)
mh2.AssertOneStart(c)
// Bounce one worker with Just Some Error; check that worker bounces.
mh1.InjectError(c, errors.New("splort"))
mh1.AssertOneStart(c)
mh2.AssertNoStart(c)
// Bounce another worker with the fatal error; check the engine exits with
// the right error.
mh2.InjectError(c, fatalError)
mh1.AssertNoStart(c)
mh2.AssertNoStart(c)
err = worker.Stop(s.engine)
c.Assert(err, gc.Equals, fatalError)
// Clear out s.engine -- lest TearDownTest freak out about the error.
s.engine = nil
}
示例8: effectiveMachineTemplate
// effectiveMachineTemplate verifies that the given template is
// valid and combines it with values from the state
// to produce a resulting template that more accurately
// represents the data that will be inserted into the state.
func (st *State) effectiveMachineTemplate(p MachineTemplate, allowController bool) (tmpl MachineTemplate, err error) {
// First check for obvious errors.
if p.Series == "" {
return tmpl, errors.New("no series specified")
}
if p.InstanceId != "" {
if p.Nonce == "" {
return tmpl, errors.New("cannot add a machine with an instance id and no nonce")
}
} else if p.Nonce != "" {
return tmpl, errors.New("cannot specify a nonce without an instance id")
}
p.Constraints, err = st.resolveMachineConstraints(p.Constraints)
if err != nil {
return tmpl, err
}
if len(p.Jobs) == 0 {
return tmpl, errors.New("no jobs specified")
}
jset := make(map[MachineJob]bool)
for _, j := range p.Jobs {
if jset[j] {
return MachineTemplate{}, errors.Errorf("duplicate job: %s", j)
}
jset[j] = true
}
if jset[JobManageModel] {
if !allowController {
return tmpl, errControllerNotAllowed
}
}
return p, nil
}
示例9: archiveVersion
// archiveVersion retrieves the GUI version from the juju-gui-* directory
// included in the given tar.bz2 archive reader.
func archiveVersion(r io.Reader) (version.Number, error) {
var vers version.Number
prefix := "jujugui-"
tr := tar.NewReader(bzip2.NewReader(r))
for {
hdr, err := tr.Next()
if err == io.EOF {
break
}
if err != nil {
return vers, errors.New("cannot read Juju GUI archive")
}
info := hdr.FileInfo()
if !info.IsDir() || !strings.HasPrefix(hdr.Name, prefix) {
continue
}
n := filepath.Dir(hdr.Name)[len(prefix):]
vers, err = version.Parse(n)
if err != nil {
return vers, errors.Errorf("invalid version %q in archive", n)
}
return vers, nil
}
return vers, errors.New("cannot find Juju GUI version in archive")
}
示例10: TestFinishActions
func (s *actionsSuite) TestFinishActions(c *gc.C) {
args := params.ActionExecutionResults{
[]params.ActionExecutionResult{
{ActionTag: "success", Status: string(state.ActionCompleted)},
{ActionTag: "notfound"},
{ActionTag: "convertFail", Status: "failStatus"},
{ActionTag: "finishFail", Status: string(state.ActionCancelled)},
},
}
expectErr := errors.New("explosivo")
actionFn := makeGetActionByTagString(map[string]state.Action{
"success": fakeAction{},
"convertFail": fakeAction{},
"finishFail": fakeAction{finishErr: expectErr},
})
results := common.FinishActions(args, actionFn)
c.Assert(results, jc.DeepEquals, params.ErrorResults{
[]params.ErrorResult{
{},
{common.ServerError(actionNotFoundErr)},
{common.ServerError(errors.New("unrecognized action status 'failStatus'"))},
{common.ServerError(expectErr)},
},
})
}
示例11: validate
// validate returns an error if the state violates expectations.
func (st State) validate() (err error) {
defer errors.DeferredAnnotatef(&err, "invalid operation state")
hasHook := st.Hook != nil
hasActionId := st.ActionId != nil
hasCharm := st.CharmURL != nil
switch st.Kind {
case Install:
if st.Installed {
return errors.New("unexpected hook info with Kind Install")
}
fallthrough
case Upgrade:
switch {
case !hasCharm:
return errors.New("missing charm URL")
case hasActionId:
return errors.New("unexpected action id")
}
case RunAction:
switch {
case !hasActionId:
return errors.New("missing action id")
case hasCharm:
return errors.New("unexpected charm URL")
}
case RunHook:
switch {
case !hasHook:
return errors.New("missing hook info with Kind RunHook")
case hasCharm:
return errors.New("unexpected charm URL")
case hasActionId:
return errors.New("unexpected action id")
}
case Continue:
// TODO(jw4) LP-1438489
// ModeContinue should no longer have a Hook, but until the upgrade is
// fixed we can't fail the validation if it does.
if hasHook {
logger.Errorf("unexpected hook info with Kind Continue")
}
switch {
case hasCharm:
return errors.New("unexpected charm URL")
case hasActionId:
return errors.New("unexpected action id")
}
default:
return errors.Errorf("unknown operation %q", st.Kind)
}
switch st.Step {
case Queued, Pending, Done:
default:
return errors.Errorf("unknown operation step %q", st.Step)
}
if hasHook {
return st.Hook.Validate()
}
return nil
}
示例12: TestSetErrorMixed
func (s *stubSuite) TestSetErrorMixed(c *gc.C) {
err1 := errors.New("<failure 1>")
err2 := errors.New("<failure 2>")
s.stub.SetErrors(nil, err1, nil, err2)
s.stub.CheckErrors(c, nil, err1, nil, err2)
}
示例13: TestSetErrorsMultiple
func (s *stubSuite) TestSetErrorsMultiple(c *gc.C) {
err1 := errors.New("<failure 1>")
err2 := errors.New("<failure 2>")
s.stub.SetErrors(err1, err2)
s.stub.CheckErrors(c, err1, err2)
}
示例14: NewSSHStorage
// NewSSHStorage creates a new SSHStorage, connected to the
// specified host, managing state under the specified remote path.
func NewSSHStorage(params NewSSHStorageParams) (*SSHStorage, error) {
if params.StorageDir == "" {
return nil, errors.New("storagedir must be specified and non-empty")
}
if params.TmpDir == "" {
return nil, errors.New("tmpdir must be specified and non-empty")
}
script := fmt.Sprintf(
"install -d -g $SUDO_GID -o $SUDO_UID %s %s",
utils.ShQuote(params.StorageDir),
utils.ShQuote(params.TmpDir),
)
cmd := sshCommand(params.Host, "sudo", "-n", "/bin/bash")
var stderr bytes.Buffer
cmd.Stderr = &stderr
cmd.Stdin = strings.NewReader(script)
if err := cmd.Run(); err != nil {
err = fmt.Errorf("failed to create storage dir: %v (%v)", err, strings.TrimSpace(stderr.String()))
return nil, err
}
// We could use sftp, but then we'd be at the mercy of
// sftp's output messages for checking errors. Instead,
// we execute an interactive bash shell.
cmd = sshCommand(params.Host, "bash")
stdin, err := cmd.StdinPipe()
if err != nil {
return nil, err
}
stdout, err := cmd.StdoutPipe()
if err != nil {
stdin.Close()
return nil, err
}
// Combine stdout and stderr, so we can easily
// get at catastrophic failure messages.
cmd.Stderr = cmd.Stdout
stor := &SSHStorage{
host: params.Host,
remotepath: params.StorageDir,
tmpdir: params.TmpDir,
cmd: cmd,
stdin: stdin,
stdout: stdout,
scanner: bufio.NewScanner(stdout),
}
cmd.Start()
// Verify we have write permissions.
_, err = stor.runf(flockExclusive, "touch %s", utils.ShQuote(params.StorageDir))
if err != nil {
stdin.Close()
stdout.Close()
cmd.Wait()
return nil, err
}
return stor, nil
}
示例15: Init
func (c *MigrateCommand) Init(args []string) error {
if len(args) == 0 {
return errors.New("missing operation")
}
c.operation, args = args[0], args[1:]
switch c.operation {
case "export":
if len(args) == 0 {
return errors.New("missing model uuid")
}
c.modelUUID, args = args[0], args[1:]
case "import":
if len(args) == 0 {
return errors.New("missing yaml filename")
}
c.filename, args = args[0], args[1:]
default:
return errors.Errorf("unknown operation %q", c.operation)
}
if !names.IsValidMachine(c.machineId) {
return errors.Errorf("%q is not a valid machine id", c.machineId)
}
c.machineTag = names.NewMachineTag(c.machineId)
return cmd.CheckEmpty(args)
}