github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/pkg/platform/runtime/setup/implementations/camel/prepare_mac_test.go (about)

     1  // +build darwin
     2  
     3  package camel_test
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"path/filepath"
     9  
    10  	"github.com/ActiveState/cli/internal/fileutils"
    11  	"github.com/ActiveState/cli/pkg/platform/runtime/setup/implementations/camel"
    12  )
    13  
    14  func (suite *MetaDataTestSuite) TestMetaData_Prepare() {
    15  	template := `{
    16  		"affected_env": "PYTHONPATH",
    17  		"binaries_in": [
    18  			{
    19  				"path": "%s",
    20  				"relative": 1
    21  			}
    22  		],
    23  		"relocation_dir": "/relocate"
    24  	}`
    25  
    26  	originalValue := os.Getenv("PYTHONIOENCODING")
    27  	os.Unsetenv("PYTHONIOENCODING")
    28  	defer func() {
    29  		os.Setenv("PYTHONIOENCODING", originalValue)
    30  	}()
    31  
    32  	relBinDir := filepath.Join("Library", "Frameworks", "Python.framework", "Versions", "Current", "bin")
    33  	relVersionedDir := filepath.Join("Library", "Frameworks", "Python.framework", "Versions", "3.7")
    34  
    35  	// Directory that contains binary file on MacOS
    36  	tempDir := filepath.Join(suite.dir, relBinDir)
    37  	err := fileutils.Mkdir(tempDir)
    38  	suite.Require().NoError(err)
    39  
    40  	versionedDir := filepath.Join(suite.dir, relVersionedDir)
    41  	err = fileutils.Mkdir(versionedDir)
    42  	suite.Require().NoError(err)
    43  
    44  	// Directory that contains site-packages on MacOS
    45  	err = fileutils.Mkdir(suite.dir, "Library/Frameworks/Python.framework/Versions/Current/lib")
    46  	suite.Require().NoError(err)
    47  
    48  	pythonBinaryFilename := "python3"
    49  	err = fileutils.Touch(filepath.Join(tempDir, pythonBinaryFilename))
    50  	suite.Require().NoError(err)
    51  
    52  	contents := fmt.Sprintf(template, tempDir)
    53  	metaData, err := camel.ParseMetaData([]byte(contents))
    54  	suite.Require().NoError(err)
    55  
    56  	err = metaData.Prepare(suite.dir)
    57  	suite.Require().NoError(err)
    58  	suite.Assert().NotEmpty(metaData.Env["PYTHONIOENCODING"])
    59  
    60  	suite.Len(metaData.TargetedRelocations, 1, "expected one targeted relocation")
    61  	suite.Equal(camel.TargetedRelocation{
    62  		InDir:        relBinDir,
    63  		SearchString: "#!" + filepath.Join("/", relVersionedDir),
    64  		Replacement:  "#!" + filepath.Join("${INSTALLDIR}", relVersionedDir),
    65  	}, metaData.TargetedRelocations[0], suite.dir)
    66  }