github.com/weaviate/weaviate@v1.24.6/entities/errors/error_group_wrapper_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package errors 13 14 import ( 15 "bytes" 16 "os" 17 "testing" 18 19 "github.com/sirupsen/logrus" 20 "github.com/stretchr/testify/assert" 21 ) 22 23 func TestErrorGroupWrapper(t *testing.T) { 24 cases := []struct { 25 env string 26 set bool 27 }{ 28 {env: "something", set: true}, 29 {env: "something", set: false}, 30 {env: "", set: true}, 31 {env: "false", set: true}, 32 // {env: "true", set: true}, this will NOT recover the panic, but we cannot recover on a higher level and there 33 // is no way to have the test succeed 34 } 35 for _, tt := range cases { 36 t.Run(tt.env, func(t *testing.T) { 37 var buf bytes.Buffer 38 log := logrus.New() 39 log.SetOutput(&buf) 40 defer func() { 41 log.SetOutput(os.Stderr) 42 }() 43 44 eg := NewErrorGroupWrapper(log) 45 if tt.set { 46 t.Setenv("DISABLE_RECOVERY_ON_PANIC", tt.env) 47 } 48 eg.Go(func() error { 49 slice := make([]string, 0) 50 slice[0] = "test" 51 return nil 52 }) 53 err := eg.Wait() 54 assert.Contains(t, buf.String(), "Recovered from panic") 55 assert.Contains(t, err.Error(), "index out of range") 56 }) 57 } 58 }