| 160 | } |
| 161 | |
| 162 | func TestFileReload_Broken(t *testing.T) { |
| 163 | t.Parallel() |
| 164 | |
| 165 | const file = `cat: dog` |
| 166 | |
| 167 | f, err := os.CreateTemp("", "maddy-tests-") |
| 168 | if err != nil { |
| 169 | t.Fatal(err) |
| 170 | } |
| 171 | defer func(name string) { |
| 172 | err := os.Remove(name) |
| 173 | if err != nil { |
| 174 | t.Fatal(err) |
| 175 | } |
| 176 | }(f.Name()) |
| 177 | if _, err := f.WriteString(file); err != nil { |
| 178 | require.NoError(t, f.Close()) |
| 179 | t.Fatal(err) |
| 180 | } |
| 181 | require.NoError(t, f.Close()) |
| 182 | |
| 183 | mod, err := NewFile(container.New(), "", "") |
| 184 | if err != nil { |
| 185 | t.Fatal(err) |
| 186 | } |
| 187 | m := mod.(*File) |
| 188 | if err := m.Start(); err != nil { |
| 189 | t.Fatal(err) |
| 190 | } |
| 191 | m.log = testutils.Logger(t, FileModName) |
| 192 | defer func(m *File) { |
| 193 | err := m.Stop() |
| 194 | if err != nil { |
| 195 | t.Fatal(err) |
| 196 | } |
| 197 | }(m) |
| 198 | |
| 199 | if err := mod.Configure([]string{f.Name()}, &config.Map{Block: config.Node{}}); err != nil { |
| 200 | t.Fatal(err) |
| 201 | } |
| 202 | |
| 203 | f2, err := os.OpenFile(f.Name(), os.O_WRONLY|os.O_SYNC, os.ModePerm) |
| 204 | if err != nil { |
| 205 | t.Fatal(err) |
| 206 | } |
| 207 | if _, err := f2.WriteString(":"); err != nil { |
| 208 | t.Fatal(err) |
| 209 | } |
| 210 | defer func(f2 *os.File) { |
| 211 | err := f2.Close() |
| 212 | if err != nil { |
| 213 | t.Fatal(err) |
| 214 | } |
| 215 | }(f2) |
| 216 | |
| 217 | time.Sleep(3 * reloadInterval) |
| 218 | |
| 219 | m.mLck.RLock() |