MCPcopy
hub / github.com/caddyserver/caddy / TestFileRotationPreserveMode

Function TestFileRotationPreserveMode

modules/logging/filewriter_test.go:102–175  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

100}
101
102func TestFileRotationPreserveMode(t *testing.T) {
103 m := syscall.Umask(0o000)
104 defer syscall.Umask(m)
105
106 dir, err := os.MkdirTemp("", "caddytest")
107 if err != nil {
108 t.Fatalf("failed to create tempdir: %v", err)
109 }
110 defer os.RemoveAll(dir)
111
112 fpath := path.Join(dir, "test.log")
113
114 roll := true
115 mode := fileMode(0o640)
116 fw := FileWriter{
117 Filename: fpath,
118 Mode: mode,
119 Roll: &roll,
120 RollSizeMB: 1,
121 }
122
123 logger, err := fw.OpenWriter()
124 if err != nil {
125 t.Fatalf("failed to create file: %v", err)
126 }
127 defer logger.Close()
128
129 b := make([]byte, 1024*1024-1000)
130 logger.Write(b)
131 logger.Write(b[0:2000])
132
133 files, err := os.ReadDir(dir)
134 if err != nil {
135 t.Fatalf("failed to read temporary log dir: %v", err)
136 }
137
138 // We might get 2 or 3 files depending
139 // on the race between compressed log file generation,
140 // removal of the non compressed file and reading the directory.
141 // Ordering of the files are [ test-*.log test-*.log.gz test.log ]
142 if len(files) < 2 || len(files) > 3 {
143 t.Log("got files: ", files)
144 t.Fatalf("got %v files want 2", len(files))
145 }
146
147 wantPattern := "test-*-*-*-*-*.*.log"
148 test_date_log := files[0]
149 if m, _ := path.Match(wantPattern, test_date_log.Name()); m != true {
150 t.Fatalf("got %v filename want %v", test_date_log.Name(), wantPattern)
151 }
152
153 st, err := os.Stat(path.Join(dir, test_date_log.Name()))
154 if err != nil {
155 t.Fatalf("failed to check file permissions: %v", err)
156 }
157
158 if st.Mode() != os.FileMode(mode) {
159 t.Errorf("file mode is %v, want %v", st.Mode(), mode)

Callers

nothing calls this directly

Calls 8

OpenWriterMethod · 0.95
fileModeTypeAlias · 0.85
ReadDirMethod · 0.80
StatMethod · 0.80
MatchMethod · 0.65
CloseMethod · 0.45
WriteMethod · 0.45
NameMethod · 0.45

Tested by

no test coverage detected