From 01fd23b6259642b99df5a033c1721a8d15becfb7 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 26 Nov 2018 16:23:23 +0100 Subject: Fix volume CreatedAt being altered on initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CreatedAt date was determined from the volume's `_data` directory (`/var/lib/docker/volumes//_data`). However, when initializing a volume, this directory is updated, causing the date to change. Instead of using the `_data` directory, use its parent directory, which is not updated afterwards, and should reflect the time that the volume was created. Signed-off-by: Sebastiaan van Stijn Signed-off-by: Paweł Gronowski --- integration/volume/volume_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'integration') diff --git a/integration/volume/volume_test.go b/integration/volume/volume_test.go index 6f3a4c64ad..87392620a4 100644 --- a/integration/volume/volume_test.go +++ b/integration/volume/volume_test.go @@ -3,6 +3,7 @@ package volume import ( "context" "net/http" + "os" "path/filepath" "strings" "testing" @@ -104,6 +105,21 @@ func TestVolumesInspect(t *testing.T) { createdAt, err := time.Parse(time.RFC3339, strings.TrimSpace(inspected.CreatedAt)) assert.NilError(t, err) assert.Check(t, createdAt.Unix()-now.Unix() < 60, "CreatedAt (%s) exceeds creation time (%s) 60s", createdAt, now) + + // update atime and mtime for the "_data" directory (which would happen during volume initialization) + modifiedAt := time.Now().Local().Add(5 * time.Hour) + err = os.Chtimes(inspected.Mountpoint, modifiedAt, modifiedAt) + assert.NilError(t, err) + + inspected, err = client.VolumeInspect(ctx, vol.Name) + assert.NilError(t, err) + + createdAt2, err := time.Parse(time.RFC3339, strings.TrimSpace(inspected.CreatedAt)) + assert.NilError(t, err) + + // Check that CreatedAt didn't change after updating atime and mtime of the "_data" directory + // Related issue: #38274 + assert.Equal(t, createdAt, createdAt2) } // TestVolumesInvalidJSON tests that POST endpoints that expect a body return -- cgit v1.2.1