| // Copyright 2020 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build linux || darwin |
| // +build linux darwin |
| |
| package dashboard |
| |
| import ( |
| "errors" |
| "testing" |
| |
| "cloud.google.com/go/datastore" |
| ) |
| |
| var testError = errors.New("this is a test error for cmd/coordinator") |
| |
| func ignoreTestError(err error) error { |
| if !errors.Is(err, testError) { |
| return err |
| } |
| return nil |
| } |
| |
| func ignoreNothing(err error) error { |
| return err |
| } |
| |
| func TestFilterMultiError(t *testing.T) { |
| cases := []struct { |
| desc string |
| err error |
| ignores []ignoreFunc |
| wantErr bool |
| }{ |
| { |
| desc: "single ignored error", |
| err: datastore.MultiError{testError}, |
| ignores: []ignoreFunc{ignoreTestError}, |
| }, |
| { |
| desc: "multiple ignored errors", |
| err: datastore.MultiError{testError, testError}, |
| ignores: []ignoreFunc{ignoreTestError}, |
| }, |
| { |
| desc: "non-ignored error", |
| err: datastore.MultiError{testError, errors.New("this should fail")}, |
| ignores: []ignoreFunc{ignoreTestError}, |
| wantErr: true, |
| }, |
| { |
| desc: "nil error", |
| ignores: []ignoreFunc{ignoreTestError}, |
| }, |
| { |
| desc: "non-multistore error", |
| err: errors.New("this should fail"), |
| ignores: []ignoreFunc{ignoreTestError}, |
| wantErr: true, |
| }, |
| { |
| desc: "no ignoreFuncs", |
| err: errors.New("this should fail"), |
| ignores: []ignoreFunc{}, |
| wantErr: true, |
| }, |
| { |
| desc: "if any ignoreFunc ignores, error is ignored.", |
| err: datastore.MultiError{testError, testError}, |
| ignores: []ignoreFunc{ignoreNothing, ignoreTestError}, |
| }, |
| } |
| for _, c := range cases { |
| t.Run(c.desc, func(t *testing.T) { |
| if err := filterMultiError(c.err, c.ignores...); (err != nil) != c.wantErr { |
| t.Errorf("filterMultiError(%v, %v) = %v, wantErr = %v", c.err, c.ignores, err, c.wantErr) |
| } |
| }) |
| } |
| } |
| |
| func TestIgnoreNoSuchEntity(t *testing.T) { |
| if err := ignoreNoSuchEntity(datastore.ErrNoSuchEntity); err != nil { |
| t.Errorf("ignoreNoSuchEntity(%v) = %v, wanted no error", datastore.ErrNoSuchEntity, err) |
| } |
| if err := ignoreNoSuchEntity(datastore.ErrInvalidKey); err == nil { |
| t.Errorf("ignoreNoSuchEntity(%v) = %v, wanted error", datastore.ErrInvalidKey, err) |
| } |
| } |