github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/buildtools/maven/maven_test.go (about) 1 package maven_test 2 3 import ( 4 "io/ioutil" 5 "path/filepath" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 10 "github.com/fossas/fossa-cli/buildtools/maven" 11 "github.com/fossas/fossa-cli/files" 12 "github.com/fossas/fossa-cli/pkg" 13 ) 14 15 var testPoms = filepath.Join("testdata", "poms") 16 17 func TestModules(t *testing.T) { 18 // Here we mostly just test the discovery of POM files, and analyzers/maven tests that we get the correct 19 // list of MvnModules. 20 21 simplePom := filepath.Join(testPoms, "pom.xml") 22 checked := make(map[string]bool) 23 mods, err := maven.Modules(simplePom, testPoms, checked) 24 assert.NoError(t, err) 25 assert.Len(t, mods, 1) 26 exists, err := files.Exists(mods[0].Dir, mods[0].Target) 27 assert.NoError(t, err) 28 assert.True(t, exists) 29 30 // Now that pom.xml in testPoms has been checked, make sure we don't check it again. 31 modsAgain, err := maven.Modules(simplePom, testPoms, checked) 32 assert.NoError(t, err) 33 assert.Nil(t, modsAgain) 34 35 // Make sure we follow references to other modules (module as path to a file) listed in the POM file. 36 pomWithModules := filepath.Join(testPoms, "nested", "pom.xml") 37 mods2, err := maven.Modules(pomWithModules, testPoms, make(map[string]bool)) 38 assert.NoError(t, err) 39 assert.Len(t, mods2, 3) 40 for _, mod := range mods2 { 41 exists, err := files.Exists(mod.Dir, mod.Target) 42 assert.NoError(t, err) 43 assert.True(t, exists) 44 } 45 46 // Make sure we follow references to other modules (module as path to a directory) listed in the POM file. 47 pomWithModules2 := filepath.Join(testPoms, "pom-minimal.xml") 48 mods3, err := maven.Modules(pomWithModules2, testPoms, make(map[string]bool)) 49 assert.NoError(t, err) 50 assert.Len(t, mods3, 4) 51 for _, mod := range mods3 { 52 exists, err := files.Exists(mod.Dir, mod.Target) 53 assert.NoError(t, err) 54 assert.True(t, exists) 55 } 56 57 // Test the fallback to artifact ID if name is not given in the manifest. 58 assert.Contains(t, mods3, maven.MvnModule{Name: "minimal", Target: "pom-minimal.xml", Dir: testPoms}) 59 } 60 61 func TestParseDependencyTreeDOS(t *testing.T) { 62 // Check that the file is still DOS formatted. 63 data, err := ioutil.ReadFile(filepath.Join("testdata", "dos.out")) 64 assert.NoError(t, err) 65 66 fixture := string(data) 67 for i := range fixture { 68 if i == 0 { 69 continue 70 } 71 if fixture[i] == '\n' { 72 assert.Equal(t, uint8('\r'), fixture[i-1]) 73 } 74 } 75 76 deps, err := maven.ParseDependencyTree(fixture) 77 assert.NoError(t, err) 78 assert.NotEmpty(t, deps.Direct) 79 assert.NotEmpty(t, deps.Transitive) 80 } 81 82 func TestParseDependencyTreeUnix(t *testing.T) { 83 // Check that the file is still Unix formatted. 84 data, err := ioutil.ReadFile(filepath.Join("testdata", "unix.out")) 85 assert.NoError(t, err) 86 87 fixture := string(data) 88 for i := range fixture { 89 if i == 0 { 90 continue 91 } 92 if fixture[i] == '\n' { 93 assert.NotEqual(t, '\r', fixture[i-1]) 94 } 95 } 96 97 deps, err := maven.ParseDependencyTree(fixture) 98 assert.NoError(t, err) 99 assert.NotEmpty(t, deps.Direct) 100 assert.NotEmpty(t, deps.Transitive) 101 } 102 103 /* 104 ├── dep:one:1.0.0 105 └─┬ dep:two:2.0.0 106 ├─┬ dep:three:3.0.0 107 │ └── dep:four:4.0.0 108 └── dep:five:5.0.0 109 */ 110 111 var depOne = pkg.ID{Type: pkg.Maven, Name: "dep:one", Revision: "1.0.0"} 112 var depTwo = pkg.ID{Type: pkg.Maven, Name: "dep:two", Revision: "2.0.0"} 113 var depThree = pkg.ID{Type: pkg.Maven, Name: "dep:three", Revision: "3.0.0"} 114 var depFour = pkg.ID{Type: pkg.Maven, Name: "dep:four", Revision: "4.0.0"} 115 var depFive = pkg.ID{Type: pkg.Maven, Name: "dep:five", Revision: "5.0.0"} 116 117 func TestParseDependencyTree(t *testing.T) { 118 dat, err := ioutil.ReadFile("testdata/unix.out") 119 assert.NoError(t, err) 120 deps, err := maven.ParseDependencyTree(string(dat)) 121 assert.NoError(t, err) 122 123 assert.Equal(t, 2, len(deps.Direct)) 124 assert.Contains(t, deps.Direct, pkg.Import{Target: "", Resolved: depOne}) 125 assert.Contains(t, deps.Direct, pkg.Import{Target: "", Resolved: depTwo}) 126 127 assert.Equal(t, 5, len(deps.Transitive)) 128 assert.Contains(t, deps.Transitive, depOne) 129 assert.Contains(t, deps.Transitive, depTwo) 130 assert.Contains(t, deps.Transitive[depTwo].Imports, pkg.Import{Target: "3.0.0", Resolved: depThree}) 131 assert.Contains(t, deps.Transitive[depTwo].Imports, pkg.Import{Target: "5.0.0", Resolved: depFive}) 132 assert.Contains(t, deps.Transitive, depThree) 133 assert.Contains(t, deps.Transitive[depThree].Imports, pkg.Import{Target: "4.0.0", Resolved: depFour}) 134 assert.Contains(t, deps.Transitive, depFour) 135 assert.Contains(t, deps.Transitive, depFive) 136 }