1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
// Copyright (c) 2019-2022, Sylabs Inc. All rights reserved.
// This software is licensed under a 3-clause BSD license. Please consult the
// LICENSE.md file distributed with the sources of this project regarding your
// rights to use or distribute this software.
package instance
import (
"bytes"
"os"
"testing"
"github.com/sylabs/singularity/v4/internal/pkg/test"
)
func TestLogger(t *testing.T) {
test.DropPrivilege(t)
defer test.ResetPrivilege(t)
formatTest := []struct {
write string
stream string
dropCRNL bool
formatter LogFormatter
search string
}{
{
write: "test\n",
stream: "basic",
formatter: LogFormats[BasicLogFormat],
dropCRNL: true,
search: " basic test",
},
{
write: "test\n",
stream: "k8s",
formatter: LogFormats[KubernetesLogFormat],
dropCRNL: true,
search: " k8s F test",
},
{
write: "test\n",
stream: "json",
formatter: LogFormats[JSONLogFormat],
dropCRNL: true,
search: "\"stream\":\"json\",\"log\":\"test\"",
},
{
write: "test\r\n",
stream: "basic",
formatter: LogFormats[BasicLogFormat],
dropCRNL: false,
search: " basic test\\r\\n",
},
{
write: "test\n",
stream: "",
dropCRNL: true,
search: " test",
},
{
write: "\n",
stream: "stdout",
dropCRNL: true,
search: " stdout \n",
},
{
write: "",
stream: "stdout",
dropCRNL: true,
search: "",
},
}
logfile, err := os.CreateTemp("", "log-")
if err != nil {
t.Errorf("failed to create temporary log file: %s", err)
}
filename := logfile.Name()
logfile.Close()
for _, f := range formatTest {
logger, err := NewLogger(filename, f.formatter)
if err != nil {
t.Errorf("failed to create new logger: %s", err)
}
writer, err := logger.NewWriter(f.stream, f.dropCRNL)
if err != nil {
t.Errorf("failed to add new writer: %s", err)
}
writer.Write([]byte(f.write))
logger.Close()
d, err := os.ReadFile(filename)
if err != nil {
t.Errorf("failed to read log data: %s", err)
}
if !bytes.Contains(d, []byte(f.search)) {
t.Errorf("failed to retrieve %s in %s", f.search, string(d))
}
if err := os.Remove(filename); err != nil {
t.Errorf("failed while deleting log file %s: %s", filename, err)
}
// will recreate log file
if err := logger.ReOpenFile(); err != nil {
t.Errorf("failed to reopen log file: %s", err)
}
// we call it again to just close re-opened log file descriptor
logger.Close()
// delete it once again
if err := os.Remove(filename); err != nil {
t.Errorf("failed while deleting log file %s: %s", filename, err)
}
}
}
|