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  }