github.com/jfrog/jfrog-cli-go@v1.22.1-0.20200318093948-4826ef344ffd/nuget_test.go (about)

     1  package main
     2  
     3  import (
     4  	"github.com/stretchr/testify/assert"
     5  	"github.com/stretchr/testify/require"
     6  	"os"
     7  	"path/filepath"
     8  	"strconv"
     9  	"testing"
    10  
    11  	"github.com/jfrog/jfrog-cli-go/artifactory/utils"
    12  	"github.com/jfrog/jfrog-cli-go/inttestutils"
    13  	"github.com/jfrog/jfrog-cli-go/utils/cliutils"
    14  	"github.com/jfrog/jfrog-cli-go/utils/tests"
    15  	"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
    16  )
    17  
    18  func initNugetTest(t *testing.T) {
    19  	if !*tests.TestNuget {
    20  		t.Skip("Skipping NuGet test. To run Nuget test add the '-test.nuget=true' option.")
    21  	}
    22  
    23  	if !cliutils.IsWindows() {
    24  		t.Skip("Skipping nuget tests, since this is not a Windows machine.")
    25  	}
    26  
    27  	// This is due to Artifactory bug, we cant create remote repository with REST API.
    28  	require.True(t, isRepoExist(tests.NugetRemoteRepo), "Create nuget remote repository:", tests.NugetRemoteRepo, "in order to run nuget tests")
    29  	createJfrogHomeConfig(t)
    30  }
    31  
    32  func TestNugetResolve(t *testing.T) {
    33  	initNugetTest(t)
    34  	projects := []struct {
    35  		name                 string
    36  		project              string
    37  		moduleId             string
    38  		args                 []string
    39  		expectedDependencies int
    40  	}{
    41  		{"packagesconfigwithoutmodulechnage", "packagesconfig", "packagesconfig", []string{"nuget", "restore", tests.NugetRemoteRepo, "--build-name=" + tests.NugetBuildName}, 6},
    42  		{"packagesconfigwithmodulechnage", "packagesconfig", ModuleNameJFrogTest, []string{"nuget", "restore", tests.NugetRemoteRepo, "--build-name=" + tests.NugetBuildName, "--module=" + ModuleNameJFrogTest}, 6},
    43  		{"referencewithoutmodulechnage", "reference", "reference", []string{"nuget", "restore", tests.NugetRemoteRepo, "--build-name=" + tests.NugetBuildName}, 6},
    44  		{"referencewithmodulechnage", "reference", ModuleNameJFrogTest, []string{"nuget", "restore", tests.NugetRemoteRepo, "--build-name=" + tests.NugetBuildName, "--module=" + ModuleNameJFrogTest}, 6},
    45  	}
    46  	for buildNumber, test := range projects {
    47  		t.Run(test.project, func(t *testing.T) {
    48  			testNugetCmd(t, createNugetProject(t, test.project), strconv.Itoa(buildNumber), test.moduleId, test.expectedDependencies, test.args, false)
    49  		})
    50  	}
    51  	cleanBuildToolsTest()
    52  }
    53  
    54  func TestNativeNugetResolve(t *testing.T) {
    55  	initNugetTest(t)
    56  	projects := []struct {
    57  		name                 string
    58  		project              string
    59  		moduleId             string
    60  		args                 []string
    61  		expectedDependencies int
    62  	}{
    63  		{"packagesconfigwithoutmodulechnage", "packagesconfig", "packagesconfig", []string{"nuget", "restore", "--build-name=" + tests.NugetBuildName}, 6},
    64  		{"packagesconfigwithmodulechnage", "packagesconfig", ModuleNameJFrogTest, []string{"nuget", "restore", "--build-name=" + tests.NugetBuildName, "--module=" + ModuleNameJFrogTest}, 6},
    65  		{"referencewithoutmodulechnage", "reference", "reference", []string{"nuget", "restore", "--build-name=" + tests.NugetBuildName}, 6},
    66  		{"referencewithmodulechnage", "reference", ModuleNameJFrogTest, []string{"nuget", "restore", "--build-name=" + tests.NugetBuildName, "--module=" + ModuleNameJFrogTest}, 6},
    67  	}
    68  	for buildNumber, test := range projects {
    69  		projectPath := createNugetProject(t, test.project)
    70  		err := createConfigFileForTest([]string{projectPath}, tests.NugetRemoteRepo, "", t, utils.Nuget, false)
    71  		assert.NoError(t, err)
    72  		t.Run(test.project, func(t *testing.T) {
    73  			testNugetCmd(t, projectPath, strconv.Itoa(buildNumber), test.moduleId, test.expectedDependencies, test.args, true)
    74  		})
    75  	}
    76  	cleanBuildToolsTest()
    77  }
    78  
    79  func createNugetProject(t *testing.T, projectName string) string {
    80  	projectSrc := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "nuget", projectName)
    81  	projectTarget := filepath.Join(tests.Out, projectName)
    82  	err := fileutils.CreateDirIfNotExist(projectTarget)
    83  	assert.NoError(t, err)
    84  
    85  	files, err := fileutils.ListFiles(projectSrc, false)
    86  	assert.NoError(t, err)
    87  
    88  	for _, v := range files {
    89  		err = fileutils.CopyFile(projectTarget, v)
    90  		assert.NoError(t, err)
    91  	}
    92  	return projectTarget
    93  }
    94  
    95  func TestNuGetWithGlobalConfig(t *testing.T) {
    96  	initNugetTest(t)
    97  	projectPath := createNugetProject(t, "packagesconfig")
    98  	jfrogHomeDir, err := cliutils.GetJfrogHomeDir()
    99  	assert.NoError(t, err)
   100  	err = createConfigFileForTest([]string{jfrogHomeDir}, tests.NugetRemoteRepo, "", t, utils.Nuget, true)
   101  	assert.NoError(t, err)
   102  	testNugetCmd(t, projectPath, "1", "packagesconfig", 6, []string{"nuget", "restore", "--build-name=" + tests.NugetBuildName}, true)
   103  
   104  	cleanBuildToolsTest()
   105  }
   106  
   107  func testNugetCmd(t *testing.T, projectPath, buildNumber, module string, expectedDependencies int, args []string, native bool) {
   108  	wd, err := os.Getwd()
   109  	assert.NoError(t, err)
   110  	err = os.Chdir(projectPath)
   111  	assert.NoError(t, err)
   112  	args = append(args, "--build-number="+buildNumber)
   113  	if native {
   114  		runNuGet(t, args...)
   115  	} else {
   116  		artifactoryCli.Exec(args...)
   117  	}
   118  	artifactoryCli.Exec("bp", tests.NugetBuildName, buildNumber)
   119  
   120  	buildInfo := inttestutils.GetBuildInfo(artifactoryDetails.Url, tests.NugetBuildName, buildNumber, t, artHttpDetails)
   121  	require.NotEmpty(t, buildInfo.Modules, "Nuget build info was not generated correctly, no modules were created.")
   122  	assert.Len(t, buildInfo.Modules[0].Dependencies, expectedDependencies, "Incorrect number of artifacts found in the build-info")
   123  	assert.Equal(t, module, buildInfo.Modules[0].Id, "Unexpected module name")
   124  	assert.NoError(t, os.Chdir(wd))
   125  
   126  	// cleanup
   127  	inttestutils.DeleteBuild(artifactoryDetails.Url, tests.NugetBuildName, artHttpDetails)
   128  }
   129  
   130  func runNuGet(t *testing.T, args ...string) {
   131  	artifactoryNuGetCli := tests.NewJfrogCli(execMain, "jfrog rt", "")
   132  	err := artifactoryNuGetCli.Exec(args...)
   133  	assert.NoError(t, err)
   134  }