github.com/opentofu/opentofu@v1.7.1/internal/copy/copy_dir_test.go (about) 1 // Copyright (c) The OpenTofu Authors 2 // SPDX-License-Identifier: MPL-2.0 3 // Copyright (c) 2023 HashiCorp, Inc. 4 // SPDX-License-Identifier: MPL-2.0 5 6 package copy 7 8 import ( 9 "os" 10 "path/filepath" 11 "testing" 12 ) 13 14 // TestCopyDir_symlinks sets up a directory with two submodules, 15 // one being a symlink to the other 16 // 17 // The resultant file structure is as follows: 18 // ├── modules 19 // │ ├── symlink-module -> test-module 20 // │ └── test-module 21 // │ └── main.tf 22 // └── target 23 // ├── symlink-module -> test-module 24 // └── test-module 25 // └── main.tf 26 27 func TestCopyDir_symlinks(t *testing.T) { 28 tmpdir := t.TempDir() 29 30 moduleDir := filepath.Join(tmpdir, "modules") 31 err := os.Mkdir(moduleDir, os.ModePerm) 32 if err != nil { 33 t.Fatal(err) 34 } 35 36 subModuleDir := filepath.Join(moduleDir, "test-module") 37 err = os.Mkdir(subModuleDir, os.ModePerm) 38 if err != nil { 39 t.Fatal(err) 40 } 41 42 err = os.WriteFile(filepath.Join(subModuleDir, "main.tf"), []byte("hello"), 0644) 43 if err != nil { 44 t.Fatal(err) 45 } 46 47 err = os.Symlink("test-module", filepath.Join(moduleDir, "symlink-module")) 48 if err != nil { 49 t.Fatal(err) 50 } 51 52 targetDir := filepath.Join(tmpdir, "target") 53 os.Mkdir(targetDir, os.ModePerm) 54 55 err = CopyDir(targetDir, moduleDir) 56 if err != nil { 57 t.Fatal(err) 58 } 59 60 if _, err = os.Lstat(filepath.Join(targetDir, "test-module", "main.tf")); os.IsNotExist(err) { 61 t.Fatal("target test-module/main.tf was not created") 62 } 63 64 if _, err = os.Lstat(filepath.Join(targetDir, "symlink-module", "main.tf")); os.IsNotExist(err) { 65 t.Fatal("target symlink-module/main.tf was not created") 66 } 67 } 68 69 func TestCopyDir_symlink_file(t *testing.T) { 70 tmpdir := t.TempDir() 71 72 moduleDir := filepath.Join(tmpdir, "modules") 73 err := os.Mkdir(moduleDir, os.ModePerm) 74 if err != nil { 75 t.Fatal(err) 76 } 77 78 err = os.WriteFile(filepath.Join(moduleDir, "main.tf"), []byte("hello"), 0644) 79 if err != nil { 80 t.Fatal(err) 81 } 82 83 err = os.Symlink("main.tf", filepath.Join(moduleDir, "symlink.tf")) 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 targetDir := filepath.Join(tmpdir, "target") 89 os.Mkdir(targetDir, os.ModePerm) 90 91 err = CopyDir(targetDir, moduleDir) 92 if err != nil { 93 t.Fatal(err) 94 } 95 96 if _, err = os.Lstat(filepath.Join(targetDir, "main.tf")); os.IsNotExist(err) { 97 t.Fatal("target/main.tf was not created") 98 } 99 100 if _, err = os.Lstat(filepath.Join(targetDir, "symlink.tf")); os.IsNotExist(err) { 101 t.Fatal("target/symlink.tf was not created") 102 } 103 }