github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/buildtools/debian/debian_test.go (about) 1 package debian_test 2 3 import ( 4 "io/ioutil" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 9 "github.com/fossas/fossa-cli/buildtools/debian" 10 "github.com/fossas/fossa-cli/pkg" 11 ) 12 13 func TestDependencies(t *testing.T) { 14 cmd := Mock() 15 depOneGraph, err := cmd.Dependencies("depOne") 16 assert.NoError(t, err) 17 assert.Equal(t, 1, len(depOneGraph.Direct)) 18 19 assert.Equal(t, 2, len(depOneGraph.Transitive)) 20 depOnePackage := findPackage(depOneGraph.Transitive, "depOne", "df453766e8a8e0a25efd4f1c984c397c") 21 assert.Equal(t, 1, len(depOnePackage.Imports)) 22 assertImport(t, depOnePackage.Imports, "depTwo", "e8e6206fc3b3f4bc6efa6f009fbf2f37") 23 depTwoPackage := findPackage(depOneGraph.Transitive, "depTwo", "e8e6206fc3b3f4bc6efa6f009fbf2f37") 24 assert.Equal(t, 0, len(depTwoPackage.Imports)) 25 } 26 27 // Mock constructs debian.Cmd using mock build tool output. 28 func Mock() debian.Cmd { 29 return debian.Cmd{ 30 Directory: "testdata/dependencies", 31 Upload: false, 32 DebCmd: func(arguments ...string) (string, error) { 33 switch arguments[0] { 34 case "depOne": 35 file, err := ioutil.ReadFile("testdata/dependencies/depOne") 36 return string(file), err 37 case "depTwo": 38 file, err := ioutil.ReadFile("testdata/dependencies/depTwo") 39 return string(file), err 40 case "--recurse": 41 file, err := ioutil.ReadFile("testdata/dependencies/depOneTransitive") 42 return string(file), err 43 default: 44 return "", nil 45 } 46 }, 47 } 48 } 49 50 func findPackage(packages map[pkg.ID]pkg.Package, name, revision string) pkg.Package { 51 for id := range packages { 52 if id.Name == name && id.Revision == revision { 53 return packages[id] 54 } 55 } 56 return pkg.Package{} 57 } 58 59 func assertImport(t *testing.T, imports pkg.Imports, name, revision string) { 60 for _, importedProj := range imports { 61 if importedProj.Resolved.Name == name { 62 if importedProj.Resolved.Revision == revision { 63 return 64 } 65 assert.Fail(t, "found "+name+"@"+importedProj.Resolved.Revision+" instead of "+revision) 66 } 67 } 68 assert.Fail(t, "missing "+name+"@"+revision) 69 }