Created
July 29, 2022 21:33
-
-
Save maratori/425facf6450dad263ed990dbeb25bca6 to your computer and use it in GitHub Desktop.
TestMain to print logs if failed
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package componenttests | |
import ( | |
"fmt" | |
"io" | |
"os" | |
"path/filepath" | |
"strings" | |
"testing" | |
) | |
func TestMain(m *testing.M) { | |
deleteAllLogs(".") | |
result := m.Run() | |
if result != 0 { | |
if _, exists := os.LookupEnv("CI"); exists { | |
fmt.Print("\n\nSome test failed. Find and print logs.\n\n\n") | |
printLogsForCI(".") | |
} else { | |
dir, err := filepath.Abs("logs") | |
if err != nil { | |
dir = "logs" | |
} | |
fmt.Printf("\n\nSome test failed. You can find logs here: %s\n\n\n", dir) | |
} | |
} | |
os.Exit(result) | |
} | |
func deleteAllLogs(root string) { | |
_ = filepath.Walk(root, func(relativePath string, info os.FileInfo, e error) error { | |
path, err := filepath.Abs(relativePath) | |
if err != nil { | |
path = relativePath | |
} | |
if e != nil { | |
fmt.Printf("Failed to access path %q: %v\n", path, e) | |
return e | |
} | |
if info.IsDir() { | |
return nil | |
} | |
if filepath.Ext(path) != ".log" { | |
return nil | |
} | |
err = os.Remove(path) | |
if err != nil { | |
fmt.Printf("Can't delete log %s: %v\n", path, err) | |
return nil | |
} | |
fmt.Printf("Log deleted %s\n", path) | |
return nil | |
}) | |
} | |
func printLogsForCI(root string) { | |
_ = filepath.Walk(root, func(relativePath string, info os.FileInfo, e error) error { | |
path, err := filepath.Abs(relativePath) | |
if err != nil { | |
path = relativePath | |
} | |
if e != nil { | |
fmt.Printf("Failed to access path %q: %v\n", path, e) | |
return e | |
} | |
if info.IsDir() { | |
return nil | |
} | |
if filepath.Ext(path) != ".log" { | |
return nil | |
} | |
name := strings.ReplaceAll(info.Name(), " ", "_") | |
fmt.Printf("::group::%s\n", name) | |
fmt.Printf("=== Found log: %s\n\n", path) | |
printFile(path) | |
fmt.Printf("::endgroup::%s\n", name) | |
return nil | |
}) | |
} | |
func printFile(path string) { | |
file, err := os.Open(path) | |
if err != nil { | |
fmt.Printf("Failed to open file %q: %v\n", path, err) | |
return | |
} | |
_, err = io.Copy(os.Stdout, file) | |
if err != nil { | |
fmt.Printf("Failed to print file content %q: %v\n", path, err) | |
return | |
} | |
fmt.Print("\n") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment