(t *testing.T)
| 215 | } |
| 216 | |
| 217 | func TestFileExporter_AtomicResultsWrite(t *testing.T) { |
| 218 | if runtime.GOOS == "windows" { |
| 219 | t.Skip("chmod semantics are not reliable on windows") |
| 220 | } |
| 221 | |
| 222 | dir := t.TempDir() |
| 223 | original := []byte("id,timestamp,latency_ns,url,method,status_code\n") |
| 224 | resultsPath := filepath.Join(dir, resultsFilename) |
| 225 | require.NoError(t, os.WriteFile(resultsPath, original, 0o644)) |
| 226 | |
| 227 | exporter := NewFileExporter(dir) |
| 228 | zone := time.FixedZone("JST", 9*60*60) |
| 229 | run, err := exporter.StartRun(Meta{ |
| 230 | ID: "cccccccc-cccc-cccc-cccc-cccccccccccc", |
| 231 | TargetURL: "https://example.com/", |
| 232 | Method: "GET", |
| 233 | Rate: 1, |
| 234 | Duration: time.Second, |
| 235 | }) |
| 236 | require.NoError(t, err) |
| 237 | require.NoError(t, run.WriteResult(Result{ |
| 238 | Timestamp: time.Date(2021, 3, 13, 15, 20, 43, 0, zone), |
| 239 | LatencyNS: 3, |
| 240 | StatusCode: 200, |
| 241 | })) |
| 242 | |
| 243 | require.NoError(t, os.Chmod(dir, 0o555)) |
| 244 | err = run.Close(Summary{}) |
| 245 | require.Error(t, err) |
| 246 | require.NoError(t, os.Chmod(dir, 0o755)) |
| 247 | |
| 248 | got := readFile(t, resultsPath) |
| 249 | require.Equal(t, string(original), string(got)) |
| 250 | _, err = os.Stat(filepath.Join(dir, summaryFilename("cccccccc-cccc-cccc-cccc-cccccccccccc"))) |
| 251 | require.True(t, os.IsNotExist(err)) |
| 252 | } |
| 253 | |
| 254 | func readGolden(t *testing.T, path string) []byte { |
| 255 | t.Helper() |
nothing calls this directly
no test coverage detected