summaryrefslogtreecommitdiff
path: root/integrationtests/utime_test.go
blob: b1e6fdcc1df420a0a2e905d62214137d94d6b85a (plain)
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
package integrationtests

import "testing"

// TestUtimeBasic verifies that ior captures the enter_utime tracepoint with the
// real file path. utime(2) takes a genuine filesystem path at args[0]
// ("filename"), so it must be path-classified (KindPathname), just like its
// siblings utimensat/futimesat.
func TestUtimeBasic(t *testing.T) {
	runScenario(t, "utime-basic", []ExpectedEvent{
		{
			PathContains: "utimefile.txt",
			Tracepoint:   "enter_utime",
			Comm:         "ioworkload",
			MinCount:     1,
		},
	})
}

// TestUtimeUtimes verifies the microsecond-resolution sibling utimes(2) is
// likewise path-classified and its filename path captured.
func TestUtimeUtimes(t *testing.T) {
	runScenario(t, "utime-utimes", []ExpectedEvent{
		{
			PathContains: "utimesfile.txt",
			Tracepoint:   "enter_utimes",
			Comm:         "ioworkload",
			MinCount:     1,
		},
	})
}

// TestUtimeEnoent verifies the path is still captured on the error path:
// utime(2) on a missing file fails with ENOENT, but ior records enter_utime
// because the filename is read on syscall entry.
func TestUtimeEnoent(t *testing.T) {
	runScenario(t, "utime-enoent", []ExpectedEvent{
		{
			PathContains: "utime-enoent-missing.txt",
			Tracepoint:   "enter_utime",
			Comm:         "ioworkload",
			MinCount:     1,
		},
	})
}