MCPcopy Index your code
hub / github.com/foxcpp/maddy / TestFileReload

Function TestFileReload

internal/table/file_test.go:98–160  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

96}
97
98func TestFileReload(t *testing.T) {
99 t.Parallel()
100
101 const file = `cat: dog`
102
103 f, err := os.CreateTemp("", "maddy-tests-")
104 if err != nil {
105 t.Fatal(err)
106 }
107 defer func(name string) {
108 err := os.Remove(name)
109 if err != nil {
110 t.Log(err)
111 }
112 }(f.Name())
113 if _, err := f.WriteString(file); err != nil {
114 _ = f.Close()
115 t.Fatal(err)
116 }
117 err = f.Close()
118 if err != nil {
119 t.Fatal(err)
120 }
121
122 mod, err := NewFile(container.New(), "", "")
123 if err != nil {
124 t.Fatal(err)
125 }
126 m := mod.(*File)
127 if err := m.Start(); err != nil {
128 t.Fatal(err)
129 }
130 m.log = testutils.Logger(t, "file_map")
131 defer func() {
132 assert.NoError(t, m.Stop())
133 }()
134
135 if err := mod.Configure([]string{f.Name()}, &config.Map{Block: config.Node{}}); err != nil {
136 t.Fatal(err)
137 }
138
139 // ensure it is correctly loaded at first time.
140 m.mLck.RLock()
141 if m.m["cat"] == nil {
142 t.Fatalf("wrong content loaded, new m were not loaded, %v", m.m)
143 }
144 m.mLck.RUnlock()
145
146 for i := 0; i < 100; i++ {
147 // try to provoke race condition on file writing
148 if i%2 == 0 {
149 if err := os.WriteFile(f.Name(), []byte("dog: cat"), os.ModePerm); err != nil {
150 t.Fatal(err)
151 }
152 }
153 time.Sleep(reloadInterval + 5*time.Millisecond)
154 m.mLck.RLock()
155 if m.m["dog"] == nil {

Callers

nothing calls this directly

Calls 9

ConfigureMethod · 0.95
NewFunction · 0.92
LoggerFunction · 0.92
NewFileFunction · 0.85
RemoveMethod · 0.65
NameMethod · 0.65
CloseMethod · 0.65
StartMethod · 0.65
StopMethod · 0.65

Tested by

no test coverage detected