[#176] status: Do not lose built-in error text message
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
b006ade154
commit
a55ffa4796
2 changed files with 24 additions and 10 deletions
|
@ -97,7 +97,8 @@ func FromStatusV2(st *status.Status) Status {
|
||||||
// ToStatusV2 converts Status instance to status.Status message structure. Inverse to FromStatusV2 operation.
|
// ToStatusV2 converts Status instance to status.Status message structure. Inverse to FromStatusV2 operation.
|
||||||
//
|
//
|
||||||
// If argument is the StatusV2 instance, it is converted directly.
|
// If argument is the StatusV2 instance, it is converted directly.
|
||||||
// Otherwise, successes are converted with status.OK code w/o details and message, failures - with status.Internal.
|
// Otherwise, successes are converted with status.OK code w/o details and message,
|
||||||
|
// failures - with status.Internal and error text message w/o details.
|
||||||
func ToStatusV2(st Status) *status.Status {
|
func ToStatusV2(st Status) *status.Status {
|
||||||
if v, ok := st.(StatusV2); ok {
|
if v, ok := st.(StatusV2); ok {
|
||||||
return v.ToStatusV2()
|
return v.ToStatusV2()
|
||||||
|
@ -107,7 +108,10 @@ func ToStatusV2(st Status) *status.Status {
|
||||||
return newStatusV2WithLocalCode(status.OK, status.GlobalizeSuccess)
|
return newStatusV2WithLocalCode(status.OK, status.GlobalizeSuccess)
|
||||||
}
|
}
|
||||||
|
|
||||||
return newStatusV2WithLocalCode(status.Internal, status.GlobalizeCommonFail)
|
internalErrorStatus := newStatusV2WithLocalCode(status.Internal, status.GlobalizeCommonFail)
|
||||||
|
internalErrorStatus.SetMessage(st.(error).Error()) // type cast never panics because IsSuccessful() checks cast
|
||||||
|
|
||||||
|
return internalErrorStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
func errMessageStatusV2(code interface{}, msg string) string {
|
func errMessageStatusV2(code interface{}, msg string) string {
|
||||||
|
|
|
@ -12,12 +12,14 @@ func TestToStatusV2(t *testing.T) {
|
||||||
type statusConstructor func() apistatus.Status
|
type statusConstructor func() apistatus.Status
|
||||||
|
|
||||||
for _, testItem := range [...]struct {
|
for _, testItem := range [...]struct {
|
||||||
status interface{} // Status or statusConstructor
|
status interface{} // Status or statusConstructor
|
||||||
codeV2 uint64
|
codeV2 uint64
|
||||||
|
messageV2 string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
status: errors.New("some error"),
|
status: errors.New("some error"),
|
||||||
codeV2: 1024,
|
codeV2: 1024,
|
||||||
|
messageV2: "some error",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
status: 1,
|
status: 1,
|
||||||
|
@ -124,6 +126,9 @@ func TestToStatusV2(t *testing.T) {
|
||||||
|
|
||||||
// must generate the same status.Status message
|
// must generate the same status.Status message
|
||||||
require.EqualValues(t, testItem.codeV2, stv2.Code())
|
require.EqualValues(t, testItem.codeV2, stv2.Code())
|
||||||
|
if len(testItem.messageV2) > 0 {
|
||||||
|
require.Equal(t, testItem.messageV2, stv2.Message())
|
||||||
|
}
|
||||||
|
|
||||||
_, ok := st.(apistatus.StatusV2)
|
_, ok := st.(apistatus.StatusV2)
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -142,12 +147,14 @@ func TestFromStatusV2(t *testing.T) {
|
||||||
type statusConstructor func() apistatus.Status
|
type statusConstructor func() apistatus.Status
|
||||||
|
|
||||||
for _, testItem := range [...]struct {
|
for _, testItem := range [...]struct {
|
||||||
status interface{} // Status or statusConstructor
|
status interface{} // Status or statusConstructor
|
||||||
codeV2 uint64
|
codeV2 uint64
|
||||||
|
messageV2 string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
status: errors.New("some error"),
|
status: errors.New("some error"),
|
||||||
codeV2: 1024,
|
codeV2: 1024,
|
||||||
|
messageV2: "some error",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
status: 1,
|
status: 1,
|
||||||
|
@ -254,6 +261,9 @@ func TestFromStatusV2(t *testing.T) {
|
||||||
|
|
||||||
// must generate the same status.Status message
|
// must generate the same status.Status message
|
||||||
require.EqualValues(t, testItem.codeV2, stv2.Code())
|
require.EqualValues(t, testItem.codeV2, stv2.Code())
|
||||||
|
if len(testItem.messageV2) > 0 {
|
||||||
|
require.Equal(t, testItem.messageV2, stv2.Message())
|
||||||
|
}
|
||||||
|
|
||||||
_, ok := st.(apistatus.StatusV2)
|
_, ok := st.(apistatus.StatusV2)
|
||||||
if ok {
|
if ok {
|
||||||
|
|
Loading…
Reference in a new issue