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 }