Skip to content

Commit

Permalink
Merge branch 'master' into fix-env
Browse files Browse the repository at this point in the history
  • Loading branch information
ti-chi-bot authored Dec 28, 2020
2 parents fc40047 + 4571217 commit 2bc5897
Show file tree
Hide file tree
Showing 4 changed files with 203 additions and 148 deletions.
41 changes: 41 additions & 0 deletions pkg/cluster/api/error.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.

package api

import "fmt"

var (
// ErrNoStore is an empty NoStoreErr object, useful for type checking
ErrNoStore = &NoStoreErr{}
)

// NoStoreErr is the error that no store matching address can be found in PD
type NoStoreErr struct {
addr string
}

// Error implement the error interface
func (e *NoStoreErr) Error() string {
return fmt.Sprintf("no store matching address \"%s\" found", e.addr)
}

// Is implements the error interface
func (e *NoStoreErr) Is(target error) bool {
t, ok := target.(*NoStoreErr)
if !ok {
return false
}

return e.addr == t.addr || t.addr == ""
}
47 changes: 47 additions & 0 deletions pkg/cluster/api/error_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.

package api

import (
"errors"
"testing"

"github.com/pingcap/check"
)

func TestNoStoreErrIs(t *testing.T) {
var c *check.C
err0 := &NoStoreErr{
addr: "1.2.3.4",
}
// identical errors are equal
c.Assert(errors.Is(err0, err0), check.IsTrue)
c.Assert(errors.Is(ErrNoStore, ErrNoStore), check.IsTrue)
c.Assert(errors.Is(ErrNoStore, &NoStoreErr{}), check.IsTrue)
c.Assert(errors.Is(&NoStoreErr{}, ErrNoStore), check.IsTrue)
// not equal for different error types
c.Assert(errors.Is(err0, errors.New("")), check.IsFalse)
// default Value matches any error
c.Assert(errors.Is(err0, ErrNoStore), check.IsTrue)
// error with values are not matching default ones
c.Assert(errors.Is(ErrNoStore, err0), check.IsFalse)

err1 := &NoStoreErr{
addr: "2.3.4.5",
}
c.Assert(errors.Is(err1, ErrNoStore), check.IsTrue)
// errors with different values are not equal
c.Assert(errors.Is(err0, err1), check.IsFalse)
c.Assert(errors.Is(err1, err0), check.IsFalse)
}
Loading

0 comments on commit 2bc5897

Please sign in to comment.