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  }