forked from gsn/predictor
feat: predictions
This commit is contained in:
parent
42e7924be9
commit
11be8f351f
42 changed files with 2221 additions and 516 deletions
|
|
@ -23,13 +23,11 @@ func (e *ErrorCode) Error() string {
|
|||
return e.Message
|
||||
}
|
||||
|
||||
// IsErr checks if the given error is an ErrorCode
|
||||
func IsErr(err error) bool {
|
||||
_, ok := err.(*ErrorCode)
|
||||
return ok
|
||||
}
|
||||
|
||||
// AsErr converts error to ErrorCode if possible
|
||||
func AsErr(err error) (*ErrorCode, bool) {
|
||||
if err == nil {
|
||||
return nil, false
|
||||
|
|
@ -38,7 +36,6 @@ func AsErr(err error) (*ErrorCode, bool) {
|
|||
return errcode, ok
|
||||
}
|
||||
|
||||
// Join combines multiple errors into a single ErrorCode
|
||||
func Join(errs ...error) error {
|
||||
if len(errs) == 0 {
|
||||
return nil
|
||||
|
|
@ -66,7 +63,6 @@ func Join(errs ...error) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Use the first error's status code, or default to 500
|
||||
statusCode := http.StatusInternalServerError
|
||||
if len(errs) > 0 {
|
||||
if errcode, ok := AsErr(errs[0]); ok {
|
||||
|
|
@ -77,7 +73,6 @@ func Join(errs ...error) error {
|
|||
return New(statusCode, strings.Join(messages, "; "), details...)
|
||||
}
|
||||
|
||||
// Wrap wraps an error with additional context
|
||||
func Wrap(err error, message string) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -1,81 +0,0 @@
|
|||
package errcodes
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSpecificErrorTypes(t *testing.T) {
|
||||
// Test Redis lock error
|
||||
err := ErrRedisLockAlreadyLocked
|
||||
if !IsErr(err) {
|
||||
t.Error("Expected IsErr to return true for ErrorCode")
|
||||
}
|
||||
|
||||
errcode, ok := AsErr(err)
|
||||
if !ok {
|
||||
t.Error("Expected AsErr to return true for ErrorCode")
|
||||
}
|
||||
if errcode != ErrRedisLockAlreadyLocked {
|
||||
t.Error("Expected AsErr to return the same error")
|
||||
}
|
||||
|
||||
// Test Redis cache miss error
|
||||
cacheErr := ErrRedisCacheMiss
|
||||
if !IsErr(cacheErr) {
|
||||
t.Error("Expected IsErr to return true for cache miss error")
|
||||
}
|
||||
|
||||
// Test configuration error
|
||||
configErr := ErrConfigInvalidEnv
|
||||
if !IsErr(configErr) {
|
||||
t.Error("Expected IsErr to return true for config error")
|
||||
}
|
||||
|
||||
// Test scheduler error
|
||||
schedulerErr := ErrSchedulerTimeoutTooLong
|
||||
if !IsErr(schedulerErr) {
|
||||
t.Error("Expected IsErr to return true for scheduler error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestErrorChecking(t *testing.T) {
|
||||
// Example of how to check for specific errors in practice
|
||||
err := ErrRedisLockAlreadyLocked
|
||||
|
||||
// Check if it's a specific error type
|
||||
if errcode, ok := AsErr(err); ok {
|
||||
switch errcode {
|
||||
case ErrRedisLockAlreadyLocked:
|
||||
// Handle lock already locked case
|
||||
t.Log("Handling lock already locked error")
|
||||
case ErrRedisCacheMiss:
|
||||
// Handle cache miss case
|
||||
t.Log("Handling cache miss error")
|
||||
case ErrRedisCacheCorrupted:
|
||||
// Handle corrupted cache case
|
||||
t.Log("Handling corrupted cache error")
|
||||
default:
|
||||
// Handle other error types
|
||||
t.Log("Handling other error type")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestWrapFunction(t *testing.T) {
|
||||
originalErr := ErrRedisCacheMiss
|
||||
wrappedErr := Wrap(originalErr, "additional context")
|
||||
|
||||
if !IsErr(wrappedErr) {
|
||||
t.Error("Expected wrapped error to be an ErrorCode")
|
||||
}
|
||||
|
||||
errcode, ok := AsErr(wrappedErr)
|
||||
if !ok {
|
||||
t.Error("Expected AsErr to work with wrapped error")
|
||||
}
|
||||
|
||||
// The wrapped error should have the same status code as the original
|
||||
if errcode.StatusCode != ErrRedisCacheMiss.StatusCode {
|
||||
t.Errorf("Expected status code %d, got %d", ErrRedisCacheMiss.StatusCode, errcode.StatusCode)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue