github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/java/internal/maven/config_test.go (about)

     1  package maven
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/anchore/go-homedir"
    11  	"github.com/anchore/syft/internal"
    12  )
    13  
    14  func Test_defaultMavenLocalRepoDir(t *testing.T) {
    15  	home, err := homedir.Dir()
    16  	require.NoError(t, err)
    17  
    18  	fixtures, err := filepath.Abs("test-fixtures")
    19  	require.NoError(t, err)
    20  
    21  	tests := []struct {
    22  		name     string
    23  		home     string
    24  		expected string
    25  	}{
    26  		{
    27  			name:     "default",
    28  			expected: filepath.Join(home, ".m2", "repository"),
    29  			home:     "",
    30  		},
    31  		{
    32  			name:     "alternate dir",
    33  			expected: "/some/other/repo",
    34  			home:     "test-fixtures/local-repository-settings",
    35  		},
    36  		{
    37  			name:     "explicit home",
    38  			expected: filepath.Join(fixtures, ".m2", "repository"),
    39  			home:     "test-fixtures",
    40  		},
    41  	}
    42  	for _, test := range tests {
    43  		t.Run(test.name, func(t *testing.T) {
    44  			homedir.Reset()
    45  			defer homedir.Reset()
    46  			if test.home != "" {
    47  				home, err := filepath.Abs(test.home)
    48  				require.NoError(t, err)
    49  				t.Setenv("HOME", home)
    50  			}
    51  			got := defaultMavenLocalRepoDir()
    52  			require.Equal(t, test.expected, got)
    53  		})
    54  	}
    55  }
    56  
    57  func Test_getSettingsXmlLocalRepository(t *testing.T) {
    58  	tests := []struct {
    59  		file     string
    60  		expected string
    61  	}{
    62  		{
    63  			expected: "/some/other/repo",
    64  			file:     "test-fixtures/local-repository-settings/.m2/settings.xml",
    65  		},
    66  		{
    67  			expected: "",
    68  			file:     "invalid",
    69  		},
    70  	}
    71  	for _, test := range tests {
    72  		t.Run(test.expected, func(t *testing.T) {
    73  			f, _ := os.Open(test.file)
    74  			defer internal.CloseAndLogError(f, test.file)
    75  			got := getSettingsXMLLocalRepository(f)
    76  			require.Equal(t, test.expected, got)
    77  		})
    78  	}
    79  }
    80  
    81  func Test_remotePomURL(t *testing.T) {
    82  	tests := []struct {
    83  		name       string
    84  		groupID    string
    85  		artifactID string
    86  		version    string
    87  		expected   string
    88  	}{
    89  		{
    90  			name:       "remotePomURL correctly assembles the pom URL",
    91  			groupID:    "org.springframework.boot",
    92  			artifactID: "spring-boot-starter-test",
    93  			version:    "3.1.5",
    94  			expected:   "https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-test/3.1.5/spring-boot-starter-test-3.1.5.pom",
    95  		},
    96  	}
    97  
    98  	for _, tc := range tests {
    99  		t.Run(tc.name, func(t *testing.T) {
   100  			requestURL, err := remotePomURL(mavenBaseURL, tc.groupID, tc.artifactID, tc.version)
   101  			require.NoError(t, err, "expected no err; got %w", err)
   102  			require.Equal(t, tc.expected, requestURL)
   103  		})
   104  	}
   105  }