github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/configs/configload/copy_dir_test.go (about)

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