Skip to content

Commit

Permalink
Functional test infinite kernel cache ttl - 1 (#2152)
Browse files Browse the repository at this point in the history
* adding test for infinite kernel cache ttl

* Waiting for 5 seconds

* Creating file outside of gcsfuse

* adding comment

* fixed creation of file3

* fixed creation of file3

* remove defer

* nits

* local changes

* nits

* removing global variable
  • Loading branch information
Tulsishah authored Jul 11, 2024
1 parent ab08a6f commit b8d52e8
Showing 1 changed file with 44 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,17 @@ package kernel_list_cache

import (
"log"
"os"
"path"
"testing"
"time"

"github.com/googlecloudplatform/gcsfuse/v2/tools/integration_tests/util/client"
"github.com/googlecloudplatform/gcsfuse/v2/tools/integration_tests/util/operations"
"github.com/googlecloudplatform/gcsfuse/v2/tools/integration_tests/util/setup"
"github.com/googlecloudplatform/gcsfuse/v2/tools/integration_tests/util/test_setup"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

////////////////////////////////////////////////////////////////////////
Expand All @@ -42,9 +49,43 @@ func (s *infiniteKernelListCacheTest) Teardown(t *testing.T) {
// Test scenarios
////////////////////////////////////////////////////////////////////////

// TODO: Add test scenarios here.
func (s *infiniteKernelListCacheTest) TestMock(t *testing.T) {
t.Log("running mock test")
func (s *infiniteKernelListCacheTest) TestKernelListCache_AlwaysCacheHit(t *testing.T) {
targetDir := path.Join(testDirPath, "explicit_dir")
operations.CreateDirectory(targetDir, t)
// Create test data
f1 := operations.CreateFile(path.Join(targetDir, "file1.txt"), setup.FilePermission_0600, t)
operations.CloseFile(f1)
f2 := operations.CreateFile(path.Join(targetDir, "file2.txt"), setup.FilePermission_0600, t)
operations.CloseFile(f2)

// First read, kernel will cache the dir response.
f, err := os.Open(targetDir)
require.NoError(t, err)
defer func() {
assert.Nil(t, f.Close())
}()
names1, err := f.Readdirnames(-1)
require.NoError(t, err)
require.Equal(t, 2, len(names1))
require.Equal(t, "file1.txt", names1[0])
require.Equal(t, "file2.txt", names1[1])
err = f.Close()
require.NoError(t, err)

// Adding one object to make sure to change the ReadDir() response.
client.CreateObjectInGCSTestDir(ctx, storageClient, testDirName, path.Join("explicit_dir", "file3.txt"), "", t)
// Waiting for 5 seconds to see if the kernel cache expires.
time.Sleep(5 * time.Second)

// Kernel cache will not invalidate since infinite ttl.
f, err = os.Open(targetDir)
assert.NoError(t, err)
names2, err := f.Readdirnames(-1)
assert.NoError(t, err)

require.Equal(t, 2, len(names2))
assert.Equal(t, "file1.txt", names2[0])
assert.Equal(t, "file2.txt", names2[1])
}

////////////////////////////////////////////////////////////////////////
Expand Down

0 comments on commit b8d52e8

Please sign in to comment.