github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/buildtools/sbt/sbt_test.go (about)

     1  package sbt_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/sbt"
    11  	"github.com/fossas/fossa-cli/files"
    12  	"github.com/fossas/fossa-cli/pkg"
    13  )
    14  
    15  /*
    16  	├─┬ dep:one:1.0.0
    17  	| └─┬ dep:three:3.0.0
    18    	|   └── dep:four:4.0.0
    19  	└─┬ dep:two:2.0.0
    20  	  ├─┬ dep:three:3.0.0
    21  	  │ └── dep:four:4.0.0
    22  	  └── dep:five:5.0.0
    23  */
    24  
    25  func TestParseDependencyTree(t *testing.T) {
    26  	var graph sbt.GraphML
    27  	err := files.ReadXML(&graph, filepath.Join("testdata", "sbt_test_graph.xml"))
    28  	assert.NoError(t, err)
    29  
    30  	evicted, err := ioutil.ReadFile(filepath.Join("testdata", "sbt_test_evicted"))
    31  	assert.NoError(t, err)
    32  
    33  	imports, transitive, err := sbt.ParseDependencyGraph(graph.Graph, string(evicted))
    34  	assert.NoError(t, err)
    35  
    36  	assert.Equal(t, 2, len(imports))
    37  	assertImport(t, imports, "dep:one", "1.0.0")
    38  	assertImport(t, imports, "dep:two", "2.0.0")
    39  
    40  	assert.Equal(t, 5, len(transitive))
    41  
    42  	packageOne := findPackage(transitive, "dep:one", "1.0.0")
    43  	assert.NotEmpty(t, packageOne)
    44  	assert.Equal(t, 1, len(packageOne.Imports))
    45  	assertImport(t, packageOne.Imports, "dep:three", "3.0.0")
    46  
    47  	packageTwo := findPackage(transitive, "dep:two", "2.0.0")
    48  	assert.NotEmpty(t, packageTwo)
    49  	assert.Equal(t, 2, len(packageTwo.Imports))
    50  	assertImport(t, packageTwo.Imports, "dep:three", "3.0.0")
    51  	assertImport(t, packageTwo.Imports, "dep:five", "5.0.0")
    52  
    53  	packageThree := findPackage(transitive, "dep:three", "3.0.0")
    54  	assert.NotEmpty(t, packageThree)
    55  	assert.Equal(t, 1, len(packageThree.Imports))
    56  	assertImport(t, packageThree.Imports, "dep:four", "4.0.0")
    57  
    58  	packageFour := findPackage(transitive, "dep:four", "4.0.0")
    59  	assert.NotEmpty(t, packageFour)
    60  	assert.Equal(t, 0, len(packageFour.Imports))
    61  
    62  	packageFive := findPackage(transitive, "dep:five", "5.0.0")
    63  	assert.NotEmpty(t, packageFive)
    64  	assert.Equal(t, 0, len(packageFive.Imports))
    65  }
    66  
    67  func TestSanityCheckParseDependencyTree(t *testing.T) {
    68  	var graph sbt.GraphML
    69  	err := files.ReadXML(&graph, filepath.Join("testdata", "sbt_dependencygraphml-prisma.xml"))
    70  	assert.NoError(t, err)
    71  
    72  	evicted, err := ioutil.ReadFile(filepath.Join("testdata", "sbt_evicted_nocolor-prisma"))
    73  	assert.NoError(t, err)
    74  
    75  	_, pkgs, err := sbt.ParseDependencyGraph(graph.Graph, string(evicted))
    76  	assert.NoError(t, err)
    77  
    78  	for id, pkg := range pkgs {
    79  		assert.Equal(t, id, pkg.ID)
    80  	}
    81  }
    82  
    83  func TestFilterLines(t *testing.T) {
    84  	// This is a sampling of example disallowed lines from `sbt_dependencytree-prisma-stdout_and_stderr`
    85  	disallowed := []string{
    86  		`Getting org.scala-sbt sbt 1.0.4  (this may take some time)...`,
    87  		`downloading https://repo1.maven.org/maven2/org/scala-sbt/sbt/1.0.4/sbt-1.0.4.jar ...`,
    88  		`	[SUCCESSFUL ] org.scala-sbt#sbt;1.0.4!sbt.jar (111ms)`,
    89  		`:: retrieving :: org.scala-sbt#boot-app`,
    90  		`	confs: [default]`,
    91  		`	69 artifacts copied, 0 already retrieved (22031kB/75ms)`,
    92  		`[info] Loading settings from plugins.sbt ...`,
    93  		`[info] Loading global plugins from /home/fossa/.sbt/1.0/plugins`,
    94  		`[info] Updating {file:/home/fossa/.sbt/1.0/plugins/}global-plugins...`,
    95  		`[info] Done updating.`,
    96  		`[info] Loading settings from plugins.sbt ...`,
    97  		`[info] Loading project definition from /home/fossa/prisma/server/project`,
    98  		`[info] Updating {file:/home/fossa/prisma/server/project/}server-build...`,
    99  		`[info] downloading https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar ...`,
   100  		`[info] 	[SUCCESSFUL ] commons-logging#commons-logging;1.2!commons-logging.jar (103ms)`,
   101  		`[info] Done updating.`,
   102  		`[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:`,
   103  		`[warn] Run 'evicted' to see detailed eviction warnings`,
   104  		`[info] Compiling 2 Scala sources to /home/fossa/prisma/server/project/target/scala-2.12/sbt-1.0/classes ...`,
   105  		`[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.4. Compiling...`,
   106  		`[info]   Compilation completed in 9.09s.`,
   107  		`[info] Done compiling.`,
   108  		`[info] Loading settings from build.sbt ...`,
   109  		`[info] Loading settings from build.sbt,version.sbt ...`,
   110  		`[info] Resolving key references (27245 settings) ...`,
   111  		`[info] Set current project to server (in build file:/home/fossa/prisma/server/)`,
   112  		`[info] Updating gc-values`,
   113  		`https://repo1.maven.org/maven2/org/scalatest/scalatest_2.12/3.0.4/scalatest_2.12-3.0.4.pom`,
   114  		`	100.0% [##########] 5.2 KiB (29.7 KiB / s)`,
   115  		`[info] Resolved gc-values dependencies`,
   116  		`[info] Updating gc-values`,
   117  		`[info] Resolved gc-values dependencies`,
   118  		`[info] Updating authorg/maven2/com/pauldijou/jwt-core_2.12/0.14.1/jwt-core_2.12-0.14.1.pom`,
   119  		`https://repo1.maven.org/maven2/com/pauldijou/jwt-core_2.12/0.14.1/jwt-core_2.12-0.14.1.pom`,
   120  		`	100.0% [##########] 2.3 KiB (90.6 KiB / s)`,
   121  		`[info] Fetched artifacts of gc-values`,
   122  		`[info] Updating prisma-config`,
   123  		`https://repo1.maven.org/maven2/org/yaml/snakeyaml/1.19/snakeyaml-1.19.pom`,
   124  		`  100.0% [##########] 34.4 KiB (649.6 KiB / s)`,
   125  		`[info] Resolved prisma-config dependencies`,
   126  		`[info] Updating {file:/home/fossa/prisma/server/}shared-models...`,
   127  		`                                             https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/4.1.0/amqp-client-4.1.0.jar`,
   128  		`[info] Fetching artifacts of api-connector-postgresql`,
   129  	}
   130  
   131  	for _, line := range disallowed {
   132  		actual := sbt.FilterLine(line)
   133  		assert.False(t, actual, line)
   134  	}
   135  
   136  	allowed := []string{
   137  		"[info] 	* prisma",
   138  	}
   139  
   140  	for _, line := range allowed {
   141  		actual := sbt.FilterLine(line)
   142  		assert.True(t, actual, line)
   143  	}
   144  }
   145  func findPackage(packages map[pkg.ID]pkg.Package, name, revision string) pkg.Package {
   146  	for id := range packages {
   147  		if id.Name == name && id.Revision == revision {
   148  			return packages[id]
   149  		}
   150  	}
   151  	return pkg.Package{}
   152  }
   153  
   154  func assertImport(t *testing.T, imports pkg.Imports, name, revision string) {
   155  	for _, importedProj := range imports {
   156  		if importedProj.Resolved.Name == name {
   157  			if importedProj.Resolved.Revision == revision {
   158  				return
   159  			}
   160  			assert.Fail(t, "found "+name+"@"+importedProj.Resolved.Revision+" instead of "+revision)
   161  		}
   162  	}
   163  	assert.Fail(t, "missing "+name+"@"+revision)
   164  }