Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 20 additions & 21 deletions tools/integration_tests/implicit_dir/delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ package implicit_dir_test

import (
"path"
"testing"

"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/operations"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/setup/implicit_and_explicit_dir_setup"
Expand All @@ -28,29 +27,29 @@ import (
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/fileInImplicitDir1 -- File
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory -- Dir
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory/fileInImplicitDir2 -- File
func TestDeleteNonEmptyImplicitDir(t *testing.T) {
func (s *implicitDirTestSuite) TestDeleteNonEmptyImplicitDir() {
testDirName := "testDeleteNonEmptyImplicitDir"
testDirPath := setupTestDir(testDirName)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))

dirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ImplicitDirectory)

implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, t)
implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, s.T())
}

// Directory Structure
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory -- Dir
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/fileInImplicitDir1 -- File
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory -- Dir
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory/fileInImplicitDir2 -- File
func TestDeleteNonEmptyImplicitSubDir(t *testing.T) {
func (s *implicitDirTestSuite) TestDeleteNonEmptyImplicitSubDir() {
testDirName := "testDeleteNonEmptyImplicitSubDir"
testDirPath := setupTestDir(testDirName)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))

subDirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, implicit_and_explicit_dir_setup.ImplicitSubDirectory)

implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(subDirPath, implicit_and_explicit_dir_setup.ImplicitSubDirectory, t)
implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(subDirPath, implicit_and_explicit_dir_setup.ImplicitSubDirectory, s.T())
}

// Directory Structure
Expand All @@ -60,18 +59,18 @@ func TestDeleteNonEmptyImplicitSubDir(t *testing.T) {
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/fileInImplicitDir1 -- File
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory -- Dir
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory/fileInImplicitDir2 -- File
func TestDeleteImplicitDirWithExplicitSubDir(t *testing.T) {
func (s *implicitDirTestSuite) TestDeleteImplicitDirWithExplicitSubDir() {
testDirName := "testDeleteImplicitDirWithExplicitSubDir"
testDirPath := setupTestDir(testDirName)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))

explicitDirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, ExplicitDirInImplicitDir)

operations.CreateDirectoryWithNFiles(NumberOfFilesInExplicitDirInImplicitDir, explicitDirPath, PrefixFileInExplicitDirInImplicitDir, t)
operations.CreateDirectoryWithNFiles(NumberOfFilesInExplicitDirInImplicitDir, explicitDirPath, PrefixFileInExplicitDirInImplicitDir, s.T())

dirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ImplicitDirectory)

implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, t)
implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, s.T())
}

// Directory Structure
Expand All @@ -81,17 +80,17 @@ func TestDeleteImplicitDirWithExplicitSubDir(t *testing.T) {
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory/fileInImplicitDir2 -- File
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory/explicitDirInImplicitDir -- Dir
// testBucket/dirForImplicitDirTests/testDir/implicitDirectory/implicitSubDirectory/explicitDirInImplicitDir/fileInExplicitDirInImplicitDir -- File
func TestDeleteImplicitDirWithImplicitSubDirContainingExplicitDir(t *testing.T) {
func (s *implicitDirTestSuite) TestDeleteImplicitDirWithImplicitSubDirContainingExplicitDir() {
testDirName := "testDeleteImplicitDirWithImplicitSubDirContainingExplicitDir"
testDirPath := setupTestDir(testDirName)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
explicitDirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, implicit_and_explicit_dir_setup.ImplicitSubDirectory, ExplicitDirInImplicitSubDir)

operations.CreateDirectoryWithNFiles(NumberOfFilesInExplicitDirInImplicitSubDir, explicitDirPath, PrefixFileInExplicitDirInImplicitSubDir, t)
operations.CreateDirectoryWithNFiles(NumberOfFilesInExplicitDirInImplicitSubDir, explicitDirPath, PrefixFileInExplicitDirInImplicitSubDir, s.T())

dirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ImplicitDirectory)

implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, t)
implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, s.T())
}

// Directory Structure
Expand All @@ -103,14 +102,14 @@ func TestDeleteImplicitDirWithImplicitSubDirContainingExplicitDir(t *testing.T)
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/implicitDirectory/fileInImplicitDir1 -- File
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/implicitDirectory/implicitSubDirectory -- Dir
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/implicitDirectory/implicitSubDirectory/fileInImplicitDir2 -- File
func TestDeleteImplicitDirInExplicitDir(t *testing.T) {
func (s *implicitDirTestSuite) TestDeleteImplicitDirInExplicitDir() {
testDirName := "testDeleteImplicitDirInExplicitDir"
testDirPath := setupTestDir(testDirName)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryInExplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateImplicitDirectoryInExplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))

dirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ExplicitDirectory, implicit_and_explicit_dir_setup.ImplicitDirectory)

implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, t)
implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ImplicitDirectory, s.T())
}

// Directory Structure
Expand All @@ -122,12 +121,12 @@ func TestDeleteImplicitDirInExplicitDir(t *testing.T) {
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/implicitDirectory/fileInImplicitDir1 -- File
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/implicitDirectory/implicitSubDirectory -- Dir
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/implicitDirectory/implicitSubDirectory/fileInImplicitDir2 -- File
func TestDeleteExplicitDirContainingImplicitSubDir(t *testing.T) {
func (s *implicitDirTestSuite) TestDeleteExplicitDirContainingImplicitSubDir() {
testDirName := "testDeleteExplicitDirContainingImplicitSubDir"
testDirPath := setupTestDir(testDirName)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryInExplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateImplicitDirectoryInExplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))

dirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ExplicitDirectory)

implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ExplicitDirectory, t)
implicit_and_explicit_dir_setup.RemoveAndCheckIfDirIsDeleted(dirPath, implicit_and_explicit_dir_setup.ExplicitDirectory, s.T())
}
58 changes: 52 additions & 6 deletions tools/integration_tests/implicit_dir/implicit_dir_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@ import (
"log"
"os"
"path"
"strings"
"testing"

"cloud.google.com/go/storage"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/client"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/mounting/persistent_mounting"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/mounting/static_mounting"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/setup"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/setup/implicit_and_explicit_dir_setup"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/test_suite"
"github.com/stretchr/testify/suite"
)

const ExplicitDirInImplicitDir = "explicitDirInImplicitDir"
Expand All @@ -45,10 +48,51 @@ type env struct {
storageClient *storage.Client
ctx context.Context
testDirPath string
cfg *test_suite.TestConfig
bucketType string
}

var testEnv env

type implicitDirTestSuite struct {
suite.Suite
}

func (s *implicitDirTestSuite) TearDownTest() {
setup.SaveGCSFuseLogFileInCaseOfFailure(s.T())
}

func runImplicitDirSuite(t *testing.T, runSuiteFunc func()) {
// Run tests for mounted directory if the flag is set. This assumes that run flag is properly passed by GKE team as per the config.
if testEnv.cfg.GKEMountedDirectory != "" && testEnv.cfg.TestBucket != "" {
runSuiteFunc()
return
}

// Run tests for GCE environment otherwise.
flagsSet := setup.BuildFlagSets(*testEnv.cfg, testEnv.bucketType, t.Name())
for _, flags := range flagsSet {
t.Run(strings.Join(flags, "_"), func(t *testing.T) {
// 1. Static mounting
t.Run("Static", func(t *testing.T) {
static_mounting.RunSuiteForStaticMounting(testEnv.cfg, flags, t, runSuiteFunc)
})

// 2. Persistent mounting
t.Run("Persistent", func(t *testing.T) {
persistent_mounting.RunSuiteForPersistentMounting(testEnv.cfg, flags, t, runSuiteFunc)
})
})
}
}

func TestImplicitDirBase(t *testing.T) {
runImplicitDirSuite(t, func() {
suite.Run(t, new(implicitDirTestSuite))
suite.Run(t, &implicitDirLocalFileTest{isRapidWritesEnabled: false})
})
}

func setupTestDir(dirName string) string {
dir := setup.SetupTestDirectory(DirForImplicitDirTests)
dirPath := path.Join(dir, dirName)
Expand All @@ -71,7 +115,8 @@ func TestMain(m *testing.M) {

// 2. Create storage client before running tests.
testEnv.ctx = context.Background()
bucketType := setup.TestEnvironment(testEnv.ctx, &cfg.ImplicitDir[0])
testEnv.bucketType = setup.TestEnvironment(testEnv.ctx, &cfg.ImplicitDir[0])
testEnv.cfg = &cfg.ImplicitDir[0]
closeStorageClient := client.CreateStorageClientWithCancel(&testEnv.ctx, &testEnv.storageClient)
defer func() {
err := closeStorageClient()
Expand All @@ -80,11 +125,12 @@ func TestMain(m *testing.M) {
}
}()

// 3. Build the flag sets dynamically from the config.
flags := setup.BuildFlagSets(cfg.ImplicitDir[0], bucketType, "")
// 3. Set up test directory for test bucket.
setup.SetUpTestDirForTestBucket(testEnv.cfg)
setup.OverrideFilePathsInFlagSet(testEnv.cfg, setup.TestDir())

// 4. Run tests with the dynamically generated flags.
successCode := implicit_and_explicit_dir_setup.RunTestsForExplicitAndImplicitDir(&cfg.ImplicitDir[0], flags, m)
// 4. Run tests.
successCode := m.Run()
setup.SaveLogFileInCaseOfFailure(successCode)

// 5. Clean up test directory created.
Expand Down
43 changes: 21 additions & 22 deletions tools/integration_tests/implicit_dir/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,13 @@ import (
"os"
"path"
"path/filepath"
"testing"

"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/setup"
"github.com/googlecloudplatform/gcsfuse/v3/tools/integration_tests/util/setup/implicit_and_explicit_dir_setup"
"github.com/stretchr/testify/assert"
)

func TestListImplicitObjectsFromBucket(t *testing.T) {
func (s *implicitDirTestSuite) TestListImplicitObjectsFromBucket() {
testDirName := "testListImplicitObjectsFromBucket"
testDirPath := setupTestDir(testDirName)
// Directory Structure
Expand All @@ -41,8 +40,8 @@ func TestListImplicitObjectsFromBucket(t *testing.T) {
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/fileInExplicitDir1 -- File
// testBucket/dirForImplicitDirTests/testDir/explicitDirectory/fileInExplicitDir2 -- File

implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateExplicitDirectoryStructure(path.Join(DirForImplicitDirTests, testDirName), t)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, path.Join(DirForImplicitDirTests, testDirName))
implicit_and_explicit_dir_setup.CreateExplicitDirectoryStructure(path.Join(DirForImplicitDirTests, testDirName), s.T())

err := filepath.WalkDir(testDirPath, func(path string, dir fs.DirEntry, err error) error {
if err != nil {
Expand All @@ -64,39 +63,39 @@ func TestListImplicitObjectsFromBucket(t *testing.T) {
if path == testDirPath {
// numberOfObjects - 3
if len(objs) != implicit_and_explicit_dir_setup.NumberOfTotalObjects {
t.Errorf("Incorrect number of objects in the bucket.")
s.T().Errorf("Incorrect number of objects in the bucket.")
}

// testBucket/dirForImplicitDirTests/testDir/explicitDir -- Dir
if objs[0].Name() != implicit_and_explicit_dir_setup.ExplicitDirectory || objs[0].IsDir() != true {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}
// testBucket/dirForImplicitDirTests/testDir/explicitFile -- File
if objs[1].Name() != implicit_and_explicit_dir_setup.ExplicitFile || objs[1].IsDir() != false {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}

// testBucket/dirForImplicitDirTests/testDir/implicitDir -- Dir
if objs[2].Name() != implicit_and_explicit_dir_setup.ImplicitDirectory || objs[2].IsDir() != true {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}
}

// Check if explictDir directory has correct data.
if dir.IsDir() && dir.Name() == implicit_and_explicit_dir_setup.ExplicitDirectory {
// numberOfObjects - 2
if len(objs) != implicit_and_explicit_dir_setup.NumberOfFilesInExplicitDirectory {
t.Errorf("Incorrect number of objects in the explicitDirectory.")
s.T().Errorf("Incorrect number of objects in the explicitDirectory.")
}

// testBucket/dirForImplicitDirTests/testDir/explicitDir/fileInExplicitDir1 -- File
if objs[0].Name() != implicit_and_explicit_dir_setup.FirstFileInExplicitDirectory || objs[0].IsDir() != false {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}

// testBucket/dirForImplicitDirTests/testDir/explicitDir/fileInExplicitDir2 -- File
if objs[1].Name() != implicit_and_explicit_dir_setup.SecondFileInExplicitDirectory || objs[1].IsDir() != false {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}
return nil
}
Expand All @@ -105,16 +104,16 @@ func TestListImplicitObjectsFromBucket(t *testing.T) {
if dir.IsDir() && dir.Name() == implicit_and_explicit_dir_setup.ImplicitDirectory {
// numberOfObjects - 2
if len(objs) != implicit_and_explicit_dir_setup.NumberOfFilesInImplicitDirectory {
t.Errorf("Incorrect number of objects in the implicitDirectory.")
s.T().Errorf("Incorrect number of objects in the implicitDirectory.")
}

// testBucket/dirForImplicitDirTests/testDir/implicitDir/fileInImplicitDir1 -- File
if objs[0].Name() != implicit_and_explicit_dir_setup.FileInImplicitDirectory || objs[0].IsDir() != false {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}
// testBucket/dirForImplicitDirTests/testDir/implicitDir/implicitSubDirectory -- Dir
if objs[1].Name() != implicit_and_explicit_dir_setup.ImplicitSubDirectory || objs[1].IsDir() != true {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}
return nil
}
Expand All @@ -123,37 +122,37 @@ func TestListImplicitObjectsFromBucket(t *testing.T) {
if dir.IsDir() && dir.Name() == implicit_and_explicit_dir_setup.ImplicitSubDirectory {
// numberOfObjects - 1
if len(objs) != implicit_and_explicit_dir_setup.NumberOfFilesInImplicitSubDirectory {
t.Errorf("Incorrect number of objects in the implicitSubDirectoryt.")
s.T().Errorf("Incorrect number of objects in the implicitSubDirectoryt.")
}

// testBucket/dirForImplicitDirTests/testDir/implicitDir/implicitSubDir/fileInImplicitDir2 -- File
if objs[0].Name() != implicit_and_explicit_dir_setup.FileInImplicitSubDirectory || objs[0].IsDir() != false {
t.Errorf("Listed incorrect object")
s.T().Errorf("Listed incorrect object")
}
return nil
}
return nil
})
if err != nil {
t.Errorf("error walking the path : %v\n", err)
s.T().Errorf("error walking the path : %v\n", err)
return
}
}

func TestStatImplicitDirAfterList(t *testing.T) {
func (s *implicitDirTestSuite) TestStatImplicitDirAfterList() {
testDirPath := setup.SetupTestDirectory(DirForImplicitDirTests)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, t, testEnv.storageClient, DirForImplicitDirTests)
implicit_and_explicit_dir_setup.CreateImplicitDirectoryStructureUsingStorageClient(testEnv.ctx, s.T(), testEnv.storageClient, DirForImplicitDirTests)

// List the directory
_, err := os.ReadDir(testDirPath)
if err != nil {
t.Fatalf("ReadDir failed: %v", err)
s.T().Fatalf("ReadDir failed: %v", err)
}

// Stat the implicit directory
implicitDirPath := path.Join(testDirPath, implicit_and_explicit_dir_setup.ImplicitDirectory)
f, err := os.Stat(implicitDirPath)
if assert.NoError(t, err) {
assert.True(t, f.IsDir())
if assert.NoError(s.T(), err) {
assert.True(s.T(), f.IsDir())
}
}
Loading
Loading