diff --git a/tools/compliance/Android.bp b/tools/compliance/Android.bp index 8bae3173ad..7037670b93 100644 --- a/tools/compliance/Android.bp +++ b/tools/compliance/Android.bp @@ -19,58 +19,58 @@ package { blueprint_go_binary { name: "bom", - srcs: ["cmd/bom.go"], + srcs: ["cmd/bom/bom.go"], deps: ["compliance-module"], - testSrcs: ["cmd/bom_test.go"], + testSrcs: ["cmd/bom/bom_test.go"], } blueprint_go_binary { name: "checkshare", - srcs: ["cmd/checkshare.go"], + srcs: ["cmd/checkshare/checkshare.go"], deps: ["compliance-module"], - testSrcs: ["cmd/checkshare_test.go"], + testSrcs: ["cmd/checkshare/checkshare_test.go"], } blueprint_go_binary { name: "listshare", - srcs: ["cmd/listshare.go"], + srcs: ["cmd/listshare/listshare.go"], deps: ["compliance-module"], - testSrcs: ["cmd/listshare_test.go"], + testSrcs: ["cmd/listshare/listshare_test.go"], } blueprint_go_binary { name: "dumpgraph", - srcs: ["cmd/dumpgraph.go"], + srcs: ["cmd/dumpgraph/dumpgraph.go"], deps: ["compliance-module"], - testSrcs: ["cmd/dumpgraph_test.go"], + testSrcs: ["cmd/dumpgraph/dumpgraph_test.go"], } blueprint_go_binary { name: "dumpresolutions", - srcs: ["cmd/dumpresolutions.go"], + srcs: ["cmd/dumpresolutions/dumpresolutions.go"], deps: ["compliance-module"], - testSrcs: ["cmd/dumpresolutions_test.go"], + testSrcs: ["cmd/dumpresolutions/dumpresolutions_test.go"], } blueprint_go_binary { name: "htmlnotice", - srcs: ["cmd/htmlnotice.go"], + srcs: ["cmd/htmlnotice/htmlnotice.go"], deps: ["compliance-module"], - testSrcs: ["cmd/htmlnotice_test.go"], + testSrcs: ["cmd/htmlnotice/htmlnotice_test.go"], } blueprint_go_binary { name: "shippedlibs", - srcs: ["cmd/shippedlibs.go"], + srcs: ["cmd/shippedlibs/shippedlibs.go"], deps: ["compliance-module"], - testSrcs: ["cmd/shippedlibs_test.go"], + testSrcs: ["cmd/shippedlibs/shippedlibs_test.go"], } blueprint_go_binary { name: "textnotice", - srcs: ["cmd/textnotice.go"], + srcs: ["cmd/textnotice/textnotice.go"], deps: ["compliance-module"], - testSrcs: ["cmd/textnotice_test.go"], + testSrcs: ["cmd/textnotice/textnotice_test.go"], } bootstrap_go_package { @@ -81,14 +81,14 @@ bootstrap_go_package { "doc.go", "graph.go", "noticeindex.go", - "policy/policy.go", - "policy/resolve.go", - "policy/resolvenotices.go", - "policy/resolveshare.go", - "policy/resolveprivacy.go", - "policy/shareprivacyconflicts.go", - "policy/shipped.go", - "policy/walk.go", + "policy_policy.go", + "policy_resolve.go", + "policy_resolvenotices.go", + "policy_resolveshare.go", + "policy_resolveprivacy.go", + "policy_shareprivacyconflicts.go", + "policy_shipped.go", + "policy_walk.go", "readgraph.go", "resolution.go", "resolutionset.go", @@ -97,14 +97,14 @@ bootstrap_go_package { "condition_test.go", "conditionset_test.go", "readgraph_test.go", - "policy/policy_test.go", - "policy/resolve_test.go", - "policy/resolvenotices_test.go", - "policy/resolveshare_test.go", - "policy/resolveprivacy_test.go", - "policy/shareprivacyconflicts_test.go", - "policy/shipped_test.go", - "policy/walk_test.go", + "policy_policy_test.go", + "policy_resolve_test.go", + "policy_resolvenotices_test.go", + "policy_resolveshare_test.go", + "policy_resolveprivacy_test.go", + "policy_shareprivacyconflicts_test.go", + "policy_shipped_test.go", + "policy_walk_test.go", "resolutionset_test.go", "test_util.go", ], @@ -113,5 +113,5 @@ bootstrap_go_package { "golang-protobuf-encoding-prototext", "license_metadata_proto", ], - pkgPath: "compliance", + pkgPath: "android/soong/tools/compliance", } diff --git a/tools/compliance/cmd/bom.go b/tools/compliance/cmd/bom/bom.go similarity index 93% rename from tools/compliance/cmd/bom.go rename to tools/compliance/cmd/bom/bom.go index f6cb72c2d1..aaec786da4 100644 --- a/tools/compliance/cmd/bom.go +++ b/tools/compliance/cmd/bom/bom.go @@ -16,7 +16,6 @@ package main import ( "bytes" - "compliance" "flag" "fmt" "io" @@ -24,6 +23,8 @@ import ( "os" "path/filepath" "strings" + + "android/soong/tools/compliance" ) var ( @@ -69,12 +70,12 @@ func main() { } else { dir, err := filepath.Abs(filepath.Dir(*outputFile)) if err != nil { - fmt.Fprintf(os.Stderr, "cannot determine path to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot determine path to %q: %s\n", *outputFile, err) os.Exit(1) } fi, err := os.Stat(dir) if err != nil { - fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %w\n", dir, *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %s\n", dir, *outputFile, err) os.Exit(1) } if !fi.IsDir() { @@ -102,7 +103,7 @@ func main() { if *outputFile != "-" { err := os.WriteFile(*outputFile, ofile.(*bytes.Buffer).Bytes(), 0666) if err != nil { - fmt.Fprintf(os.Stderr, "could not write output to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "could not write output to %q: %s\n", *outputFile, err) os.Exit(1) } } diff --git a/tools/compliance/cmd/bom_test.go b/tools/compliance/cmd/bom/bom_test.go similarity index 69% rename from tools/compliance/cmd/bom_test.go rename to tools/compliance/cmd/bom/bom_test.go index b0d61e1bf9..163ac2aaec 100644 --- a/tools/compliance/cmd/bom_test.go +++ b/tools/compliance/cmd/bom/bom_test.go @@ -17,11 +17,22 @@ package main import ( "bufio" "bytes" + "fmt" "os" "strings" "testing" ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + func Test(t *testing.T) { tests := []struct { condition string @@ -31,9 +42,9 @@ func Test(t *testing.T) { expectedOut []string }{ { - condition: "firstparty", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "firstparty", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, stripPrefix: "out/target/product/fictional", expectedOut: []string{ "/system/apex/highest.apex", @@ -44,9 +55,9 @@ func Test(t *testing.T) { }, }, { - condition: "firstparty", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "firstparty", + name: "container", + roots: []string{"container.zip.meta_lic"}, stripPrefix: "out/target/product/fictional/data/", expectedOut: []string{ "container.zip", @@ -57,23 +68,23 @@ func Test(t *testing.T) { }, }, { - condition: "firstparty", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "firstparty", + name: "application", + roots: []string{"application.meta_lic"}, stripPrefix: "out/target/product/fictional/bin/", expectedOut: []string{"application"}, }, { - condition: "firstparty", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "firstparty", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"bin/bin1"}, }, { - condition: "firstparty", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "firstparty", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"lib/libd.so"}, }, @@ -102,27 +113,27 @@ func Test(t *testing.T) { }, }, { - condition: "notice", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "notice", + name: "application", + roots: []string{"application.meta_lic"}, expectedOut: []string{"out/target/product/fictional/bin/application"}, }, { - condition: "notice", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "notice", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, expectedOut: []string{"out/target/product/fictional/system/bin/bin1"}, }, { - condition: "notice", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "notice", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, expectedOut: []string{"out/target/product/fictional/system/lib/libd.so"}, }, { - condition: "reciprocal", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "reciprocal", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, stripPrefix: "out/target/product/fictional/system/apex/", expectedOut: []string{ "highest.apex", @@ -133,9 +144,9 @@ func Test(t *testing.T) { }, }, { - condition: "reciprocal", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "reciprocal", + name: "container", + roots: []string{"container.zip.meta_lic"}, stripPrefix: "out/target/product/fictional/data/", expectedOut: []string{ "container.zip", @@ -146,30 +157,30 @@ func Test(t *testing.T) { }, }, { - condition: "reciprocal", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "reciprocal", + name: "application", + roots: []string{"application.meta_lic"}, stripPrefix: "out/target/product/fictional/bin/", expectedOut: []string{"application"}, }, { - condition: "reciprocal", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "reciprocal", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"bin/bin1"}, }, { - condition: "reciprocal", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "reciprocal", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"lib/libd.so"}, }, { - condition: "restricted", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "restricted", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, stripPrefix: "out/target/product/fictional/system/apex/", expectedOut: []string{ "highest.apex", @@ -180,9 +191,9 @@ func Test(t *testing.T) { }, }, { - condition: "restricted", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "restricted", + name: "container", + roots: []string{"container.zip.meta_lic"}, stripPrefix: "out/target/product/fictional/data/", expectedOut: []string{ "container.zip", @@ -193,30 +204,30 @@ func Test(t *testing.T) { }, }, { - condition: "restricted", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "restricted", + name: "application", + roots: []string{"application.meta_lic"}, stripPrefix: "out/target/product/fictional/bin/", expectedOut: []string{"application"}, }, { - condition: "restricted", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "restricted", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"bin/bin1"}, }, { - condition: "restricted", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "restricted", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"lib/libd.so"}, }, { - condition: "proprietary", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "proprietary", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, stripPrefix: "out/target/product/fictional/system/apex/", expectedOut: []string{ "highest.apex", @@ -227,9 +238,9 @@ func Test(t *testing.T) { }, }, { - condition: "proprietary", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "proprietary", + name: "container", + roots: []string{"container.zip.meta_lic"}, stripPrefix: "out/target/product/fictional/data/", expectedOut: []string{ "container.zip", @@ -240,23 +251,23 @@ func Test(t *testing.T) { }, }, { - condition: "proprietary", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "proprietary", + name: "application", + roots: []string{"application.meta_lic"}, stripPrefix: "out/target/product/fictional/bin/", expectedOut: []string{"application"}, }, { - condition: "proprietary", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "proprietary", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"bin/bin1"}, }, { - condition: "proprietary", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "proprietary", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, stripPrefix: "out/target/product/fictional/system/", expectedOut: []string{"lib/libd.so"}, }, @@ -275,7 +286,7 @@ func Test(t *testing.T) { err := billOfMaterials(&ctx, rootFiles...) if err != nil { - t.Fatalf("bom: error = %w, stderr = %v", err, stderr) + t.Fatalf("bom: error = %v, stderr = %v", err, stderr) return } if stderr.Len() > 0 { diff --git a/tools/compliance/cmd/checkshare.go b/tools/compliance/cmd/checkshare/checkshare.go similarity index 96% rename from tools/compliance/cmd/checkshare.go rename to tools/compliance/cmd/checkshare/checkshare.go index 5114a28d6b..752d14b884 100644 --- a/tools/compliance/cmd/checkshare.go +++ b/tools/compliance/cmd/checkshare/checkshare.go @@ -15,13 +15,14 @@ package main import ( - "compliance" "flag" "fmt" "io" "os" "path/filepath" "sort" + + "android/soong/tools/compliance" ) func init() { @@ -46,12 +47,11 @@ outputs "FAIL" to stdout and exits with status 1. } var ( - failConflicts = fmt.Errorf("conflicts") + failConflicts = fmt.Errorf("conflicts") failNoneRequested = fmt.Errorf("\nNo metadata files requested") - failNoLicenses = fmt.Errorf("No licenses") + failNoLicenses = fmt.Errorf("No licenses") ) - // byError orders conflicts by error string type byError []compliance.SourceSharePrivacyConflict diff --git a/tools/compliance/cmd/checkshare_test.go b/tools/compliance/cmd/checkshare/checkshare_test.go similarity index 96% rename from tools/compliance/cmd/checkshare_test.go rename to tools/compliance/cmd/checkshare/checkshare_test.go index 5036aa5f15..4589595ca8 100644 --- a/tools/compliance/cmd/checkshare_test.go +++ b/tools/compliance/cmd/checkshare/checkshare_test.go @@ -17,10 +17,21 @@ package main import ( "bytes" "fmt" + "os" "strings" "testing" ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + type outcome struct { target string privacyCondition string diff --git a/tools/compliance/cmd/dumpgraph.go b/tools/compliance/cmd/dumpgraph/dumpgraph.go similarity index 98% rename from tools/compliance/cmd/dumpgraph.go rename to tools/compliance/cmd/dumpgraph/dumpgraph.go index 1ee63b238c..02ab0258b6 100644 --- a/tools/compliance/cmd/dumpgraph.go +++ b/tools/compliance/cmd/dumpgraph/dumpgraph.go @@ -15,7 +15,6 @@ package main import ( - "compliance" "flag" "fmt" "io" @@ -23,6 +22,8 @@ import ( "path/filepath" "sort" "strings" + + "android/soong/tools/compliance" ) var ( @@ -31,7 +32,7 @@ var ( stripPrefix = flag.String("strip_prefix", "", "Prefix to remove from paths. i.e. path to root") failNoneRequested = fmt.Errorf("\nNo license metadata files requested") - failNoLicenses = fmt.Errorf("No licenses found") + failNoLicenses = fmt.Errorf("No licenses found") ) type context struct { diff --git a/tools/compliance/cmd/dumpgraph_test.go b/tools/compliance/cmd/dumpgraph/dumpgraph_test.go similarity index 99% rename from tools/compliance/cmd/dumpgraph_test.go rename to tools/compliance/cmd/dumpgraph/dumpgraph_test.go index 305502239c..516c1db04f 100644 --- a/tools/compliance/cmd/dumpgraph_test.go +++ b/tools/compliance/cmd/dumpgraph/dumpgraph_test.go @@ -17,10 +17,21 @@ package main import ( "bytes" "fmt" + "os" "strings" "testing" ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + func Test_plaintext(t *testing.T) { tests := []struct { condition string @@ -1217,7 +1228,7 @@ func Test_graphviz(t *testing.T) { outList := strings.Split(stdout.String(), "\n") outLine := 0 if outList[outLine] != "strict digraph {" { - t.Errorf("dumpgraph: got 1st line %v, want strict digraph {") + t.Errorf("dumpgraph: got 1st line %v, want strict digraph {", outList[outLine]) } outLine++ if strings.HasPrefix(strings.TrimLeft(outList[outLine], " \t"), "rankdir") { diff --git a/tools/compliance/cmd/dumpresolutions.go b/tools/compliance/cmd/dumpresolutions/dumpresolutions.go similarity index 98% rename from tools/compliance/cmd/dumpresolutions.go rename to tools/compliance/cmd/dumpresolutions/dumpresolutions.go index 318cd918e6..463dfadb65 100644 --- a/tools/compliance/cmd/dumpresolutions.go +++ b/tools/compliance/cmd/dumpresolutions/dumpresolutions.go @@ -15,7 +15,6 @@ package main import ( - "compliance" "flag" "fmt" "io" @@ -23,6 +22,8 @@ import ( "path/filepath" "sort" "strings" + + "android/soong/tools/compliance" ) var ( @@ -32,7 +33,7 @@ var ( stripPrefix = flag.String("strip_prefix", "", "Prefix to remove from paths. i.e. path to root") failNoneRequested = fmt.Errorf("\nNo license metadata files requested") - failNoLicenses = fmt.Errorf("No licenses found") + failNoLicenses = fmt.Errorf("No licenses found") ) type context struct { diff --git a/tools/compliance/cmd/dumpresolutions_test.go b/tools/compliance/cmd/dumpresolutions/dumpresolutions_test.go similarity index 98% rename from tools/compliance/cmd/dumpresolutions_test.go rename to tools/compliance/cmd/dumpresolutions/dumpresolutions_test.go index d9046717b2..b698bf20a8 100644 --- a/tools/compliance/cmd/dumpresolutions_test.go +++ b/tools/compliance/cmd/dumpresolutions/dumpresolutions_test.go @@ -16,12 +16,24 @@ package main import ( "bytes" - "compliance" "fmt" + "os" "strings" "testing" + + "android/soong/tools/compliance" ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + func Test_plaintext(t *testing.T) { tests := []struct { condition string @@ -97,7 +109,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesShared.AsList(), + conditions: compliance.ImpliesShared.AsList(), stripPrefix: "testdata/firstparty/", }, expectedOut: []string{}, @@ -107,7 +119,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesPrivate.AsList(), + conditions: compliance.ImpliesPrivate.AsList(), stripPrefix: "testdata/firstparty/", }, expectedOut: []string{}, @@ -117,7 +129,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: append(compliance.ImpliesPrivate.AsList(),compliance.ImpliesShared.AsList()...), + conditions: append(compliance.ImpliesPrivate.AsList(), compliance.ImpliesShared.AsList()...), stripPrefix: "testdata/firstparty/", }, expectedOut: []string{}, @@ -255,7 +267,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesShared.AsList(), + conditions: compliance.ImpliesShared.AsList(), stripPrefix: "testdata/notice/", }, expectedOut: []string{}, @@ -265,7 +277,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesPrivate.AsList(), + conditions: compliance.ImpliesPrivate.AsList(), stripPrefix: "testdata/notice/", }, expectedOut: []string{}, @@ -275,7 +287,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: append(compliance.ImpliesShared.AsList(),compliance.ImpliesPrivate.AsList()...), + conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), stripPrefix: "testdata/notice/", }, expectedOut: []string{}, @@ -408,7 +420,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesShared.AsList(), + conditions: compliance.ImpliesShared.AsList(), stripPrefix: "testdata/reciprocal/", }, expectedOut: []string{ @@ -424,7 +436,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesPrivate.AsList(), + conditions: compliance.ImpliesPrivate.AsList(), stripPrefix: "testdata/reciprocal/", }, expectedOut: []string{}, @@ -434,7 +446,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: append(compliance.ImpliesShared.AsList(),compliance.ImpliesPrivate.AsList()...), + conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), stripPrefix: "testdata/reciprocal/", }, expectedOut: []string{ @@ -573,7 +585,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesShared.AsList(), + conditions: compliance.ImpliesShared.AsList(), stripPrefix: "testdata/restricted/", }, expectedOut: []string{ @@ -597,7 +609,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesPrivate.AsList(), + conditions: compliance.ImpliesPrivate.AsList(), stripPrefix: "testdata/restricted/", }, expectedOut: []string{}, @@ -607,7 +619,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: append(compliance.ImpliesShared.AsList(),compliance.ImpliesPrivate.AsList()...), + conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), stripPrefix: "testdata/restricted/", }, expectedOut: []string{ @@ -754,7 +766,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesShared.AsList(), + conditions: compliance.ImpliesShared.AsList(), stripPrefix: "testdata/proprietary/", }, expectedOut: []string{ @@ -771,7 +783,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: compliance.ImpliesPrivate.AsList(), + conditions: compliance.ImpliesPrivate.AsList(), stripPrefix: "testdata/proprietary/", }, expectedOut: []string{ @@ -789,7 +801,7 @@ func Test_plaintext(t *testing.T) { name: "apex_trimmed_share_private", roots: []string{"highest.apex.meta_lic"}, ctx: context{ - conditions: append(compliance.ImpliesShared.AsList(),compliance.ImpliesPrivate.AsList()...), + conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), stripPrefix: "testdata/proprietary/", }, expectedOut: []string{ @@ -930,7 +942,7 @@ type targetMatcher struct { } // newTestCondition constructs a test license condition in the license graph. -func newTestCondition(lg *compliance.LicenseGraph, conditionName... string) compliance.LicenseConditionSet { +func newTestCondition(lg *compliance.LicenseGraph, conditionName ...string) compliance.LicenseConditionSet { cs := compliance.NewLicenseConditionSet() for _, name := range conditionName { cs = cs.Plus(compliance.RecognizedConditionNames[name]) @@ -3305,7 +3317,7 @@ func Test_graphviz(t *testing.T) { outList := strings.Split(stdout.String(), "\n") outLine := 0 if outList[outLine] != "strict digraph {" { - t.Errorf("dumpresolutions: got 1st line %v, want strict digraph {") + t.Errorf("dumpresolutions: got 1st line %v, want strict digraph {", outList[outLine]) } outLine++ if strings.HasPrefix(strings.TrimLeft(outList[outLine], " \t"), "rankdir") { diff --git a/tools/compliance/cmd/htmlnotice.go b/tools/compliance/cmd/htmlnotice/htmlnotice.go similarity index 95% rename from tools/compliance/cmd/htmlnotice.go rename to tools/compliance/cmd/htmlnotice/htmlnotice.go index cff1ff84eb..2f59ee0ef3 100644 --- a/tools/compliance/cmd/htmlnotice.go +++ b/tools/compliance/cmd/htmlnotice/htmlnotice.go @@ -16,7 +16,6 @@ package main import ( "bytes" - "compliance" "flag" "fmt" "html" @@ -25,6 +24,8 @@ import ( "os" "path/filepath" "strings" + + "android/soong/tools/compliance" ) var ( @@ -74,12 +75,12 @@ func main() { } else { dir, err := filepath.Abs(filepath.Dir(*outputFile)) if err != nil { - fmt.Fprintf(os.Stderr, "cannot determine path to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot determine path to %q: %s\n", *outputFile, err) os.Exit(1) } fi, err := os.Stat(dir) if err != nil { - fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %w\n", dir, *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %s\n", dir, *outputFile, err) os.Exit(1) } if !fi.IsDir() { @@ -107,7 +108,7 @@ func main() { if *outputFile != "-" { err := os.WriteFile(*outputFile, ofile.(*bytes.Buffer).Bytes(), 0666) if err != nil { - fmt.Fprintf(os.Stderr, "could not write output to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "could not write output to %q: %s\n", *outputFile, err) os.Exit(1) } } @@ -139,13 +140,13 @@ func htmlNotice(ctx *context, files ...string) error { } fmt.Fprintln(ctx.stdout, "") - fmt.Fprintln(ctx.stdout, "\n") + fmt.Fprintln(ctx.stdout, "") fmt.Fprintln(ctx.stdout, "\n") + fmt.Fprintln(ctx.stdout, "") if 0 < len(ctx.title) { fmt.Fprintf(ctx.stdout, "%s\n", html.EscapeString(ctx.title)) } diff --git a/tools/compliance/cmd/htmlnotice_test.go b/tools/compliance/cmd/htmlnotice/htmlnotice_test.go similarity index 98% rename from tools/compliance/cmd/htmlnotice_test.go rename to tools/compliance/cmd/htmlnotice/htmlnotice_test.go index 8d3ea02703..fc935c10da 100644 --- a/tools/compliance/cmd/htmlnotice_test.go +++ b/tools/compliance/cmd/htmlnotice/htmlnotice_test.go @@ -39,6 +39,16 @@ var ( libReference = regexp.MustCompile(`^\s*
  • (.*)\s*$`) ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + func Test(t *testing.T) { tests := []struct { condition string @@ -560,7 +570,7 @@ func Test(t *testing.T) { err := htmlNotice(&ctx, rootFiles...) if err != nil { - t.Fatalf("htmlnotice: error = %w, stderr = %v", err, stderr) + t.Fatalf("htmlnotice: error = %v, stderr = %v", err, stderr) return } if stderr.Len() > 0 { diff --git a/tools/compliance/cmd/listshare.go b/tools/compliance/cmd/listshare/listshare.go similarity index 97% rename from tools/compliance/cmd/listshare.go rename to tools/compliance/cmd/listshare/listshare.go index 5c58dc4052..030caa7fd0 100644 --- a/tools/compliance/cmd/listshare.go +++ b/tools/compliance/cmd/listshare/listshare.go @@ -15,7 +15,6 @@ package main import ( - "compliance" "flag" "fmt" "io" @@ -23,6 +22,8 @@ import ( "path/filepath" "sort" "strings" + + "android/soong/tools/compliance" ) func init() { @@ -41,7 +42,7 @@ restricted (e.g. GPL) or reciprocal (e.g. MPL). var ( failNoneRequested = fmt.Errorf("\nNo license metadata files requested") - failNoLicenses = fmt.Errorf("No licenses found") + failNoLicenses = fmt.Errorf("No licenses found") ) func main() { diff --git a/tools/compliance/cmd/listshare_test.go b/tools/compliance/cmd/listshare/listshare_test.go similarity index 97% rename from tools/compliance/cmd/listshare_test.go rename to tools/compliance/cmd/listshare/listshare_test.go index 71a0be6506..91e9a43784 100644 --- a/tools/compliance/cmd/listshare_test.go +++ b/tools/compliance/cmd/listshare/listshare_test.go @@ -16,10 +16,22 @@ package main import ( "bytes" + "fmt" + "os" "strings" "testing" ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + func Test(t *testing.T) { type projectShare struct { project string diff --git a/tools/compliance/cmd/shippedlibs.go b/tools/compliance/cmd/shippedlibs/shippedlibs.go similarity index 89% rename from tools/compliance/cmd/shippedlibs.go rename to tools/compliance/cmd/shippedlibs/shippedlibs.go index f25d7295b1..fddc4896ed 100644 --- a/tools/compliance/cmd/shippedlibs.go +++ b/tools/compliance/cmd/shippedlibs/shippedlibs.go @@ -16,26 +16,27 @@ package main import ( "bytes" - "compliance" "flag" "fmt" "io" "io/fs" "os" "path/filepath" + + "android/soong/tools/compliance" ) var ( - outputFile = flag.String("o", "-", "Where to write the library list. (default stdout)") + outputFile = flag.String("o", "-", "Where to write the library list. (default stdout)") failNoneRequested = fmt.Errorf("\nNo license metadata files requested") failNoLicenses = fmt.Errorf("No licenses found") ) type context struct { - stdout io.Writer - stderr io.Writer - rootFS fs.FS + stdout io.Writer + stderr io.Writer + rootFS fs.FS } func init() { @@ -66,12 +67,12 @@ func main() { } else { dir, err := filepath.Abs(filepath.Dir(*outputFile)) if err != nil { - fmt.Fprintf(os.Stderr, "cannot determine path to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot determine path to %q: %s\n", *outputFile, err) os.Exit(1) } fi, err := os.Stat(dir) if err != nil { - fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %w\n", dir, *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %s\n", dir, *outputFile, err) os.Exit(1) } if !fi.IsDir() { @@ -99,7 +100,7 @@ func main() { if *outputFile != "-" { err := os.WriteFile(*outputFile, ofile.(*bytes.Buffer).Bytes(), 0666) if err != nil { - fmt.Fprintf(os.Stderr, "could not write output to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "could not write output to %q: %s\n", *outputFile, err) os.Exit(1) } } diff --git a/tools/compliance/cmd/shippedlibs_test.go b/tools/compliance/cmd/shippedlibs/shippedlibs_test.go similarity index 54% rename from tools/compliance/cmd/shippedlibs_test.go rename to tools/compliance/cmd/shippedlibs/shippedlibs_test.go index 69ec8176f2..b6aad6dd9f 100644 --- a/tools/compliance/cmd/shippedlibs_test.go +++ b/tools/compliance/cmd/shippedlibs/shippedlibs_test.go @@ -17,11 +17,22 @@ package main import ( "bufio" "bytes" + "fmt" "os" "strings" "testing" ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + func Test(t *testing.T) { tests := []struct { condition string @@ -30,153 +41,153 @@ func Test(t *testing.T) { expectedOut []string }{ { - condition: "firstparty", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "firstparty", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, expectedOut: []string{"Android"}, }, { - condition: "firstparty", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "firstparty", + name: "container", + roots: []string{"container.zip.meta_lic"}, expectedOut: []string{"Android"}, }, { - condition: "firstparty", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "firstparty", + name: "application", + roots: []string{"application.meta_lic"}, expectedOut: []string{"Android"}, }, { - condition: "firstparty", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "firstparty", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, expectedOut: []string{"Android"}, }, { - condition: "firstparty", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "firstparty", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, expectedOut: []string{"Android"}, }, { - condition: "notice", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "notice", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "notice", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "notice", + name: "container", + roots: []string{"container.zip.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "notice", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "notice", + name: "application", + roots: []string{"application.meta_lic"}, expectedOut: []string{"Android", "Device"}, }, { - condition: "notice", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "notice", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "notice", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "notice", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, expectedOut: []string{"External"}, }, { - condition: "reciprocal", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "reciprocal", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "reciprocal", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "reciprocal", + name: "container", + roots: []string{"container.zip.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "reciprocal", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "reciprocal", + name: "application", + roots: []string{"application.meta_lic"}, expectedOut: []string{"Android", "Device"}, }, { - condition: "reciprocal", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "reciprocal", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "reciprocal", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "reciprocal", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, expectedOut: []string{"External"}, }, { - condition: "restricted", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "restricted", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "restricted", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "restricted", + name: "container", + roots: []string{"container.zip.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "restricted", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "restricted", + name: "application", + roots: []string{"application.meta_lic"}, expectedOut: []string{"Android", "Device"}, }, { - condition: "restricted", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "restricted", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "restricted", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "restricted", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, expectedOut: []string{"External"}, }, { - condition: "proprietary", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, + condition: "proprietary", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "proprietary", - name: "container", - roots: []string{"container.zip.meta_lic"}, + condition: "proprietary", + name: "container", + roots: []string{"container.zip.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "proprietary", - name: "application", - roots: []string{"application.meta_lic"}, + condition: "proprietary", + name: "application", + roots: []string{"application.meta_lic"}, expectedOut: []string{"Android", "Device"}, }, { - condition: "proprietary", - name: "binary", - roots: []string{"bin/bin1.meta_lic"}, + condition: "proprietary", + name: "binary", + roots: []string{"bin/bin1.meta_lic"}, expectedOut: []string{"Android", "Device", "External"}, }, { - condition: "proprietary", - name: "library", - roots: []string{"lib/libd.so.meta_lic"}, + condition: "proprietary", + name: "library", + roots: []string{"lib/libd.so.meta_lic"}, expectedOut: []string{"External"}, }, } @@ -194,7 +205,7 @@ func Test(t *testing.T) { err := shippedLibs(&ctx, rootFiles...) if err != nil { - t.Fatalf("shippedLibs: error = %w, stderr = %v", err, stderr) + t.Fatalf("shippedLibs: error = %v, stderr = %v", err, stderr) return } if stderr.Len() > 0 { diff --git a/tools/compliance/cmd/textnotice.go b/tools/compliance/cmd/textnotice/textnotice.go similarity index 94% rename from tools/compliance/cmd/textnotice.go rename to tools/compliance/cmd/textnotice/textnotice.go index 91c57b03e9..b89aff1189 100644 --- a/tools/compliance/cmd/textnotice.go +++ b/tools/compliance/cmd/textnotice/textnotice.go @@ -16,7 +16,6 @@ package main import ( "bytes" - "compliance" "flag" "fmt" "io" @@ -24,6 +23,8 @@ import ( "os" "path/filepath" "strings" + + "android/soong/tools/compliance" ) var ( @@ -69,12 +70,12 @@ func main() { } else { dir, err := filepath.Abs(filepath.Dir(*outputFile)) if err != nil { - fmt.Fprintf(os.Stderr, "cannot determine path to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot determine path to %q: %s\n", *outputFile, err) os.Exit(1) } fi, err := os.Stat(dir) if err != nil { - fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %w\n", dir, *outputFile, err) + fmt.Fprintf(os.Stderr, "cannot read directory %q of %q: %s\n", dir, *outputFile, err) os.Exit(1) } if !fi.IsDir() { @@ -102,7 +103,7 @@ func main() { if *outputFile != "-" { err := os.WriteFile(*outputFile, ofile.(*bytes.Buffer).Bytes(), 0666) if err != nil { - fmt.Fprintf(os.Stderr, "could not write output to %q: %w\n", *outputFile, err) + fmt.Fprintf(os.Stderr, "could not write output to %q: %s\n", *outputFile, err) os.Exit(1) } } diff --git a/tools/compliance/cmd/textnotice_test.go b/tools/compliance/cmd/textnotice/textnotice_test.go similarity index 97% rename from tools/compliance/cmd/textnotice_test.go rename to tools/compliance/cmd/textnotice/textnotice_test.go index 156fb90486..7993532667 100644 --- a/tools/compliance/cmd/textnotice_test.go +++ b/tools/compliance/cmd/textnotice/textnotice_test.go @@ -28,6 +28,16 @@ var ( horizontalRule = regexp.MustCompile("^===[=]*===$") ) +func TestMain(m *testing.M) { + // Change into the parent directory before running the tests + // so they can find the testdata directory. + if err := os.Chdir(".."); err != nil { + fmt.Printf("failed to change to testdata directory: %s\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + func Test(t *testing.T) { tests := []struct { condition string @@ -474,7 +484,7 @@ func Test(t *testing.T) { err := textNotice(&ctx, rootFiles...) if err != nil { - t.Fatalf("textnotice: error = %w, stderr = %v", err, stderr) + t.Fatalf("textnotice: error = %v, stderr = %v", err, stderr) return } if stderr.Len() > 0 { diff --git a/tools/compliance/condition.go b/tools/compliance/condition.go index 26b91cab2e..cfe6f8247e 100644 --- a/tools/compliance/condition.go +++ b/tools/compliance/condition.go @@ -61,16 +61,16 @@ const ( var ( // RecognizedConditionNames maps condition strings to LicenseCondition. RecognizedConditionNames = map[string]LicenseCondition{ - "unencumbered": UnencumberedCondition, - "permissive": PermissiveCondition, - "notice": NoticeCondition, - "reciprocal": ReciprocalCondition, - "restricted": RestrictedCondition, + "unencumbered": UnencumberedCondition, + "permissive": PermissiveCondition, + "notice": NoticeCondition, + "reciprocal": ReciprocalCondition, + "restricted": RestrictedCondition, "restricted_with_classpath_exception": RestrictedClasspathExceptionCondition, - "restricted_allows_dynamic_linking": WeaklyRestrictedCondition, - "proprietary": ProprietaryCondition, - "by_exception_only": ByExceptionOnlyCondition, - "not_allowed": NotAllowedCondition, + "restricted_allows_dynamic_linking": WeaklyRestrictedCondition, + "proprietary": ProprietaryCondition, + "by_exception_only": ByExceptionOnlyCondition, + "not_allowed": NotAllowedCondition, } ) diff --git a/tools/compliance/conditionset_test.go b/tools/compliance/conditionset_test.go index c7306e7c14..c91912f19f 100644 --- a/tools/compliance/conditionset_test.go +++ b/tools/compliance/conditionset_test.go @@ -33,82 +33,82 @@ func TestConditionSet(t *testing.T) { conditions: []string{}, plus: &[]string{}, matchingAny: map[string][]string{ - "notice": []string{}, - "restricted": []string{}, + "notice": []string{}, + "restricted": []string{}, "restricted|reciprocal": []string{}, }, - expected: []string{}, + expected: []string{}, }, { name: "emptyminusnothing", conditions: []string{}, minus: &[]string{}, matchingAny: map[string][]string{ - "notice": []string{}, - "restricted": []string{}, + "notice": []string{}, + "restricted": []string{}, "restricted|reciprocal": []string{}, }, - expected: []string{}, + expected: []string{}, }, { name: "emptyminusnotice", conditions: []string{}, minus: &[]string{"notice"}, matchingAny: map[string][]string{ - "notice": []string{}, - "restricted": []string{}, + "notice": []string{}, + "restricted": []string{}, "restricted|reciprocal": []string{}, }, - expected: []string{}, + expected: []string{}, }, { - name: "noticeonly", + name: "noticeonly", conditions: []string{"notice"}, matchingAny: map[string][]string{ - "notice": []string{"notice"}, - "notice|proprietary": []string{"notice"}, - "restricted": []string{}, + "notice": []string{"notice"}, + "notice|proprietary": []string{"notice"}, + "restricted": []string{}, }, expected: []string{"notice"}, }, { - name: "allnoticeonly", + name: "allnoticeonly", conditions: []string{"notice"}, - plus: &[]string{"notice"}, + plus: &[]string{"notice"}, matchingAny: map[string][]string{ - "notice": []string{"notice"}, - "notice|proprietary": []string{"notice"}, - "restricted": []string{}, + "notice": []string{"notice"}, + "notice|proprietary": []string{"notice"}, + "restricted": []string{}, }, expected: []string{"notice"}, }, { - name: "emptyplusnotice", + name: "emptyplusnotice", conditions: []string{}, - plus: &[]string{"notice"}, + plus: &[]string{"notice"}, matchingAny: map[string][]string{ - "notice": []string{"notice"}, - "notice|proprietary": []string{"notice"}, - "restricted": []string{}, + "notice": []string{"notice"}, + "notice|proprietary": []string{"notice"}, + "restricted": []string{}, }, expected: []string{"notice"}, }, { - name: "everything", + name: "everything", conditions: []string{"unencumbered", "permissive", "notice", "reciprocal", "restricted", "proprietary"}, - plus: &[]string{"restricted_with_classpath_exception", "restricted_allows_dynamic_linking", "by_exception_only", "not_allowed"}, + plus: &[]string{"restricted_with_classpath_exception", "restricted_allows_dynamic_linking", "by_exception_only", "not_allowed"}, matchingAny: map[string][]string{ - "unencumbered": []string{"unencumbered"}, - "permissive": []string{"permissive"}, - "notice": []string{"notice"}, - "reciprocal": []string{"reciprocal"}, - "restricted": []string{"restricted"}, - "restricted_with_classpath_exception": []string{"restricted_with_classpath_exception"}, - "restricted_allows_dynamic_linking": []string{"restricted_allows_dynamic_linking"}, - "proprietary": []string{"proprietary"}, - "by_exception_only": []string{"by_exception_only"}, - "not_allowed": []string{"not_allowed"}, - "notice|proprietary": []string{"notice", "proprietary"}, + "unencumbered": []string{"unencumbered"}, + "permissive": []string{"permissive"}, + "notice": []string{"notice"}, + "reciprocal": []string{"reciprocal"}, + "restricted": []string{"restricted"}, + "restricted_with_classpath_exception": []string{"restricted_with_classpath_exception"}, + "restricted_allows_dynamic_linking": []string{"restricted_allows_dynamic_linking"}, + "proprietary": []string{"proprietary"}, + "by_exception_only": []string{"by_exception_only"}, + "not_allowed": []string{"not_allowed"}, + "notice|proprietary": []string{"notice", "proprietary"}, }, expected: []string{ "unencumbered", @@ -137,13 +137,13 @@ func TestConditionSet(t *testing.T) { "by_exception_only", "not_allowed", }, - plus: &[]string{}, + plus: &[]string{}, minus: &[]string{}, matchingAny: map[string][]string{ "unencumbered|permissive|notice": []string{"unencumbered", "permissive", "notice"}, - "restricted|reciprocal": []string{"reciprocal", "restricted"}, - "proprietary|by_exception_only": []string{"proprietary", "by_exception_only"}, - "not_allowed": []string{"not_allowed"}, + "restricted|reciprocal": []string{"reciprocal", "restricted"}, + "proprietary|by_exception_only": []string{"proprietary", "by_exception_only"}, + "not_allowed": []string{"not_allowed"}, }, expected: []string{ "unencumbered", @@ -159,21 +159,21 @@ func TestConditionSet(t *testing.T) { }, }, { - name: "allbutone", + name: "allbutone", conditions: []string{"unencumbered", "permissive", "notice", "reciprocal", "restricted", "proprietary"}, - plus: &[]string{"restricted_allows_dynamic_linking", "by_exception_only", "not_allowed"}, + plus: &[]string{"restricted_allows_dynamic_linking", "by_exception_only", "not_allowed"}, matchingAny: map[string][]string{ - "unencumbered": []string{"unencumbered"}, - "permissive": []string{"permissive"}, - "notice": []string{"notice"}, - "reciprocal": []string{"reciprocal"}, - "restricted": []string{"restricted"}, - "restricted_with_classpath_exception": []string{}, - "restricted_allows_dynamic_linking": []string{"restricted_allows_dynamic_linking"}, - "proprietary": []string{"proprietary"}, - "by_exception_only": []string{"by_exception_only"}, - "not_allowed": []string{"not_allowed"}, - "notice|proprietary": []string{"notice", "proprietary"}, + "unencumbered": []string{"unencumbered"}, + "permissive": []string{"permissive"}, + "notice": []string{"notice"}, + "reciprocal": []string{"reciprocal"}, + "restricted": []string{"restricted"}, + "restricted_with_classpath_exception": []string{}, + "restricted_allows_dynamic_linking": []string{"restricted_allows_dynamic_linking"}, + "proprietary": []string{"proprietary"}, + "by_exception_only": []string{"by_exception_only"}, + "not_allowed": []string{"not_allowed"}, + "notice|proprietary": []string{"notice", "proprietary"}, }, expected: []string{ "unencumbered", @@ -203,17 +203,17 @@ func TestConditionSet(t *testing.T) { }, minus: &[]string{"restricted_allows_dynamic_linking"}, matchingAny: map[string][]string{ - "unencumbered": []string{"unencumbered"}, - "permissive": []string{"permissive"}, - "notice": []string{"notice"}, - "reciprocal": []string{"reciprocal"}, - "restricted": []string{"restricted"}, - "restricted_with_classpath_exception": []string{"restricted_with_classpath_exception"}, - "restricted_allows_dynamic_linking": []string{}, - "proprietary": []string{"proprietary"}, - "by_exception_only": []string{"by_exception_only"}, - "not_allowed": []string{"not_allowed"}, - "restricted|proprietary": []string{"restricted", "proprietary"}, + "unencumbered": []string{"unencumbered"}, + "permissive": []string{"permissive"}, + "notice": []string{"notice"}, + "reciprocal": []string{"reciprocal"}, + "restricted": []string{"restricted"}, + "restricted_with_classpath_exception": []string{"restricted_with_classpath_exception"}, + "restricted_allows_dynamic_linking": []string{}, + "proprietary": []string{"proprietary"}, + "by_exception_only": []string{"by_exception_only"}, + "not_allowed": []string{"not_allowed"}, + "restricted|proprietary": []string{"restricted", "proprietary"}, }, expected: []string{ "unencumbered", @@ -254,35 +254,35 @@ func TestConditionSet(t *testing.T) { "not_allowed", }, matchingAny: map[string][]string{ - "unencumbered": []string{}, - "permissive": []string{}, - "notice": []string{}, - "reciprocal": []string{}, - "restricted": []string{}, - "restricted_with_classpath_exception": []string{}, - "restricted_allows_dynamic_linking": []string{}, - "proprietary": []string{}, - "by_exception_only": []string{}, - "not_allowed": []string{}, - "restricted|proprietary": []string{}, + "unencumbered": []string{}, + "permissive": []string{}, + "notice": []string{}, + "reciprocal": []string{}, + "restricted": []string{}, + "restricted_with_classpath_exception": []string{}, + "restricted_allows_dynamic_linking": []string{}, + "proprietary": []string{}, + "by_exception_only": []string{}, + "not_allowed": []string{}, + "restricted|proprietary": []string{}, }, expected: []string{}, }, { - name: "restrictedplus", + name: "restrictedplus", conditions: []string{"restricted", "restricted_with_classpath_exception", "restricted_allows_dynamic_linking"}, - plus: &[]string{"permissive", "notice", "restricted", "proprietary"}, + plus: &[]string{"permissive", "notice", "restricted", "proprietary"}, matchingAny: map[string][]string{ - "unencumbered": []string{}, - "permissive": []string{"permissive"}, - "notice": []string{"notice"}, - "restricted": []string{"restricted"}, - "restricted_with_classpath_exception": []string{"restricted_with_classpath_exception"}, - "restricted_allows_dynamic_linking": []string{"restricted_allows_dynamic_linking"}, - "proprietary": []string{"proprietary"}, - "restricted|proprietary": []string{"restricted", "proprietary"}, - "by_exception_only": []string{}, - "proprietary|by_exception_only": []string{"proprietary"}, + "unencumbered": []string{}, + "permissive": []string{"permissive"}, + "notice": []string{"notice"}, + "restricted": []string{"restricted"}, + "restricted_with_classpath_exception": []string{"restricted_with_classpath_exception"}, + "restricted_allows_dynamic_linking": []string{"restricted_allows_dynamic_linking"}, + "proprietary": []string{"proprietary"}, + "restricted|proprietary": []string{"restricted", "proprietary"}, + "by_exception_only": []string{}, + "proprietary|by_exception_only": []string{"proprietary"}, }, expected: []string{"permissive", "notice", "restricted", "restricted_with_classpath_exception", "restricted_allows_dynamic_linking", "proprietary"}, }, @@ -363,7 +363,7 @@ func TestConditionSet(t *testing.T) { } actualConditions := actual.AsList() if len(actualConditions) != len(expectedConditions) { - t.Errorf("len(MatchingAny(%d).AsList()): got %d, want %d", + t.Errorf("len(MatchingAny(%s).AsList()): got %d, want %d", data, len(actualNames), len(expectedNames)) } else { for i := 0; i < len(actualNames); i++ { @@ -452,7 +452,7 @@ func TestConditionSet(t *testing.T) { for i := 0; i < len(actualConditions); i++ { if actualConditions[i] != expectedConditions[i] { t.Errorf("actual.AsList()[%d]: got %s, want %s", - i, actualConditions[i], expectedConditions[i]) + i, actualConditions[i].Name(), expectedConditions[i].Name()) break } } @@ -552,7 +552,7 @@ func TestConditionSet(t *testing.T) { for i := 0; i < len(actualConditions); i++ { if actualConditions[i] != expectedConditions[i] { t.Errorf("actual.AsList()[%d}: got %s, want %s", - i, actualConditions[i], expectedConditions[i]) + i, actualConditions[i].Name(), expectedConditions[i].Name()) break } } @@ -629,7 +629,7 @@ func TestConditionSet(t *testing.T) { if checkExpected(cs, t) { checkMatching(cs, t) } - if checkExpectedSet(cs, t){ + if checkExpectedSet(cs, t) { checkMatchingSet(cs, t) } }) @@ -639,7 +639,7 @@ func TestConditionSet(t *testing.T) { if checkExpected(cs, t) { checkMatching(cs, t) } - if checkExpectedSet(cs, t){ + if checkExpectedSet(cs, t) { checkMatchingSet(cs, t) } }) @@ -649,7 +649,7 @@ func TestConditionSet(t *testing.T) { if checkExpected(cs, t) { checkMatching(cs, t) } - if checkExpectedSet(cs, t){ + if checkExpectedSet(cs, t) { checkMatchingSet(cs, t) } }) diff --git a/tools/compliance/go.mod b/tools/compliance/go.mod new file mode 100644 index 0000000000..61e21583aa --- /dev/null +++ b/tools/compliance/go.mod @@ -0,0 +1,18 @@ +module android/soong/tools/compliance + +require google.golang.org/protobuf v0.0.0 + +replace google.golang.org/protobuf v0.0.0 => ../../../../external/golang-protobuf + +require android/soong v0.0.0 + +replace android/soong v0.0.0 => ../../../soong +// Indirect deps from golang-protobuf +exclude github.com/golang/protobuf v1.5.0 + +replace github.com/google/go-cmp v0.5.5 => ../../../../external/go-cmp + +// Indirect dep from go-cmp +exclude golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 + +go 1.18 diff --git a/tools/compliance/graph.go b/tools/compliance/graph.go index efcc6e4f7d..e73ab462e7 100644 --- a/tools/compliance/graph.go +++ b/tools/compliance/graph.go @@ -148,7 +148,7 @@ func (e *TargetEdge) String() string { type TargetEdgeList []*TargetEdge // Len returns the count of the elmements in the list. -func (l TargetEdgeList) Len() int { return len(l) } +func (l TargetEdgeList) Len() int { return len(l) } // Swap rearranges 2 elements so that each occupies the other's former position. func (l TargetEdgeList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } @@ -171,7 +171,7 @@ func (l TargetEdgeList) Less(i, j int) bool { // edge with a context `ctx` defined by whatever process is creating the path. type TargetEdgePathSegment struct { edge *TargetEdge - ctx interface{} + ctx interface{} } // Target identifies the target that depends on the dependency. @@ -495,7 +495,7 @@ func (ts *TargetNodeSet) String() string { type TargetNodeList []*TargetNode // Len returns the count of elements in the list. -func (l TargetNodeList) Len() int { return len(l) } +func (l TargetNodeList) Len() int { return len(l) } // Swap rearranges 2 elements so that each occupies the other's former position. func (l TargetNodeList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } diff --git a/tools/compliance/policy/policy.go b/tools/compliance/policy_policy.go similarity index 93% rename from tools/compliance/policy/policy.go rename to tools/compliance/policy_policy.go index 4261ed011a..442025ea63 100644 --- a/tools/compliance/policy/policy.go +++ b/tools/compliance/policy_policy.go @@ -33,21 +33,21 @@ var ( // proprietary or confidential pathnames to whether to strip the prefix // from the path when used as the library name for notices. SafePathPrefixes = map[string]bool{ - "external/": true, - "art/": false, - "build/": false, - "cts/": false, - "dalvik/": false, - "developers/": false, + "external/": true, + "art/": false, + "build/": false, + "cts/": false, + "dalvik/": false, + "developers/": false, "development/": false, - "frameworks/": false, - "packages/": true, - "prebuilts/": false, - "sdk/": false, - "system/": false, - "test/": false, - "toolchain/": false, - "tools/": false, + "frameworks/": false, + "packages/": true, + "prebuilts/": false, + "sdk/": false, + "system/": false, + "test/": false, + "toolchain/": false, + "tools/": false, } // SafePrebuiltPrefixes maps the regular expression to match a prebuilt @@ -62,8 +62,8 @@ var ( // ImpliesNotice lists the condition names implying a notice or attribution policy. ImpliesNotice = LicenseConditionSet(UnencumberedCondition | PermissiveCondition | NoticeCondition | ReciprocalCondition | - RestrictedCondition | RestrictedClasspathExceptionCondition | WeaklyRestrictedCondition | - ProprietaryCondition | ByExceptionOnlyCondition) + RestrictedCondition | RestrictedClasspathExceptionCondition | WeaklyRestrictedCondition | + ProprietaryCondition | ByExceptionOnlyCondition) // ImpliesReciprocal lists the condition names implying a local source-sharing policy. ImpliesReciprocal = LicenseConditionSet(ReciprocalCondition) @@ -143,7 +143,6 @@ func LicenseConditionSetFromNames(tn *TargetNode, names ...string) LicenseCondit return cs } - // Resolution happens in three phases: // // 1. A bottom-up traversal propagates (restricted) license conditions up to @@ -182,7 +181,6 @@ func LicenseConditionSetFromNames(tn *TargetNode, names ...string) LicenseCondit // Not all restricted licenses are create equal. Some have special rules or // exceptions. e.g. LGPL or "with classpath excption". - // depConditionsPropagatingToTarget returns the conditions which propagate up an // edge from dependency to target. // @@ -204,7 +202,7 @@ func depConditionsPropagatingToTarget(lg *LicenseGraph, e *TargetEdge, depCondit } result |= depConditions & LicenseConditionSet(RestrictedCondition) - if 0 != (depConditions & LicenseConditionSet(RestrictedClasspathExceptionCondition)) && !edgeNodesAreIndependentModules(e) { + if 0 != (depConditions&LicenseConditionSet(RestrictedClasspathExceptionCondition)) && !edgeNodesAreIndependentModules(e) { result |= LicenseConditionSet(RestrictedClasspathExceptionCondition) } return result @@ -264,13 +262,12 @@ func conditionsAttachingAcrossEdge(lg *LicenseGraph, e *TargetEdge, universe Lic } result &= LicenseConditionSet(RestrictedCondition | RestrictedClasspathExceptionCondition) - if 0 != (result & LicenseConditionSet(RestrictedClasspathExceptionCondition)) && edgeNodesAreIndependentModules(e) { + if 0 != (result&LicenseConditionSet(RestrictedClasspathExceptionCondition)) && edgeNodesAreIndependentModules(e) { result &= LicenseConditionSet(RestrictedCondition) } return result } - // edgeIsDynamicLink returns true for edges representing shared libraries // linked dynamically at runtime. func edgeIsDynamicLink(e *TargetEdge) bool { diff --git a/tools/compliance/policy/policy_test.go b/tools/compliance/policy_policy_test.go similarity index 99% rename from tools/compliance/policy/policy_test.go rename to tools/compliance/policy_policy_test.go index 09e831cc23..32dd5fd52d 100644 --- a/tools/compliance/policy/policy_test.go +++ b/tools/compliance/policy_policy_test.go @@ -226,7 +226,7 @@ func TestPolicy_edgeConditions(t *testing.T) { fs[tt.edge.dep] = []byte(meta[tt.edge.dep]) lg, err := ReadLicenseGraph(&fs, stderr, []string{tt.edge.target}) if err != nil { - t.Errorf("unexpected error reading graph: %w", err) + t.Errorf("unexpected error reading graph: %s", err) return } edge := lg.Edges()[0] diff --git a/tools/compliance/policy/resolve.go b/tools/compliance/policy_resolve.go similarity index 100% rename from tools/compliance/policy/resolve.go rename to tools/compliance/policy_resolve.go diff --git a/tools/compliance/policy/resolve_test.go b/tools/compliance/policy_resolve_test.go similarity index 99% rename from tools/compliance/policy/resolve_test.go rename to tools/compliance/policy_resolve_test.go index 09dd7dd3c8..f98e4cc23a 100644 --- a/tools/compliance/policy/resolve_test.go +++ b/tools/compliance/policy_resolve_test.go @@ -332,7 +332,7 @@ func TestResolveBottomUpConditions(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } @@ -643,7 +643,7 @@ func TestResolveTopDownConditions(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } diff --git a/tools/compliance/policy/resolvenotices.go b/tools/compliance/policy_resolvenotices.go similarity index 100% rename from tools/compliance/policy/resolvenotices.go rename to tools/compliance/policy_resolvenotices.go diff --git a/tools/compliance/policy/resolvenotices_test.go b/tools/compliance/policy_resolvenotices_test.go similarity index 99% rename from tools/compliance/policy/resolvenotices_test.go rename to tools/compliance/policy_resolvenotices_test.go index 275c0a5fe2..cd9dd71bdc 100644 --- a/tools/compliance/policy/resolvenotices_test.go +++ b/tools/compliance/policy_resolvenotices_test.go @@ -457,7 +457,7 @@ func TestResolveNotices(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } expectedRs := toResolutionSet(lg, tt.expectedResolutions) diff --git a/tools/compliance/policy/resolveprivacy.go b/tools/compliance/policy_resolveprivacy.go similarity index 100% rename from tools/compliance/policy/resolveprivacy.go rename to tools/compliance/policy_resolveprivacy.go diff --git a/tools/compliance/policy/resolveprivacy_test.go b/tools/compliance/policy_resolveprivacy_test.go similarity index 97% rename from tools/compliance/policy/resolveprivacy_test.go rename to tools/compliance/policy_resolveprivacy_test.go index 2072d22d58..e8c953a8fe 100644 --- a/tools/compliance/policy/resolveprivacy_test.go +++ b/tools/compliance/policy_resolveprivacy_test.go @@ -76,7 +76,7 @@ func TestResolveSourcePrivacy(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } expectedRs := toResolutionSet(lg, tt.expectedResolutions) diff --git a/tools/compliance/policy/resolveshare.go b/tools/compliance/policy_resolveshare.go similarity index 100% rename from tools/compliance/policy/resolveshare.go rename to tools/compliance/policy_resolveshare.go diff --git a/tools/compliance/policy/resolveshare_test.go b/tools/compliance/policy_resolveshare_test.go similarity index 99% rename from tools/compliance/policy/resolveshare_test.go rename to tools/compliance/policy_resolveshare_test.go index f73888de43..c451b86040 100644 --- a/tools/compliance/policy/resolveshare_test.go +++ b/tools/compliance/policy_resolveshare_test.go @@ -286,7 +286,7 @@ func TestResolveSourceSharing(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } expectedRs := toResolutionSet(lg, tt.expectedResolutions) diff --git a/tools/compliance/policy/shareprivacyconflicts.go b/tools/compliance/policy_shareprivacyconflicts.go similarity index 100% rename from tools/compliance/policy/shareprivacyconflicts.go rename to tools/compliance/policy_shareprivacyconflicts.go diff --git a/tools/compliance/policy/shareprivacyconflicts_test.go b/tools/compliance/policy_shareprivacyconflicts_test.go similarity index 97% rename from tools/compliance/policy/shareprivacyconflicts_test.go rename to tools/compliance/policy_shareprivacyconflicts_test.go index ad3f3f45ce..069daa2d6c 100644 --- a/tools/compliance/policy/shareprivacyconflicts_test.go +++ b/tools/compliance/policy_shareprivacyconflicts_test.go @@ -24,7 +24,7 @@ import ( type byConflict []SourceSharePrivacyConflict // Len returns the count of elements in the slice. -func (l byConflict) Len() int { return len(l) } +func (l byConflict) Len() int { return len(l) } // Swap rearranged 2 elements so that each occupies the other's former // position. @@ -99,7 +99,7 @@ func TestConflictingSharedPrivateSource(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } expectedConflicts := toConflictList(lg, tt.expectedConflicts) diff --git a/tools/compliance/policy/shipped.go b/tools/compliance/policy_shipped.go similarity index 100% rename from tools/compliance/policy/shipped.go rename to tools/compliance/policy_shipped.go diff --git a/tools/compliance/policy/shipped_test.go b/tools/compliance/policy_shipped_test.go similarity index 83% rename from tools/compliance/policy/shipped_test.go rename to tools/compliance/policy_shipped_test.go index 718e56fe82..3ae9b4687e 100644 --- a/tools/compliance/policy/shipped_test.go +++ b/tools/compliance/policy_shipped_test.go @@ -29,30 +29,30 @@ func TestShippedNodes(t *testing.T) { expectedNodes []string }{ { - name: "singleton", - roots: []string{"apacheLib.meta_lic"}, - edges: []annotated{}, + name: "singleton", + roots: []string{"apacheLib.meta_lic"}, + edges: []annotated{}, expectedNodes: []string{"apacheLib.meta_lic"}, }, { - name: "simplebinary", - roots: []string{"apacheBin.meta_lic"}, + name: "simplebinary", + roots: []string{"apacheBin.meta_lic"}, edges: []annotated{ {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}}, }, expectedNodes: []string{"apacheBin.meta_lic", "apacheLib.meta_lic"}, }, { - name: "simpledynamic", - roots: []string{"apacheBin.meta_lic"}, + name: "simpledynamic", + roots: []string{"apacheBin.meta_lic"}, edges: []annotated{ {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}}, }, expectedNodes: []string{"apacheBin.meta_lic"}, }, { - name: "container", - roots: []string{"apacheContainer.meta_lic"}, + name: "container", + roots: []string{"apacheContainer.meta_lic"}, edges: []annotated{ {"apacheContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}}, {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}}, @@ -64,8 +64,8 @@ func TestShippedNodes(t *testing.T) { }, }, { - name: "binary", - roots: []string{"apacheBin.meta_lic"}, + name: "binary", + roots: []string{"apacheBin.meta_lic"}, edges: []annotated{ {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}}, {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}}, @@ -77,8 +77,8 @@ func TestShippedNodes(t *testing.T) { }, }, { - name: "binarydynamic", - roots: []string{"apacheBin.meta_lic"}, + name: "binarydynamic", + roots: []string{"apacheBin.meta_lic"}, edges: []annotated{ {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}}, {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}}, @@ -89,8 +89,8 @@ func TestShippedNodes(t *testing.T) { }, }, { - name: "containerdeep", - roots: []string{"apacheContainer.meta_lic"}, + name: "containerdeep", + roots: []string{"apacheContainer.meta_lic"}, edges: []annotated{ {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}}, @@ -108,7 +108,7 @@ func TestShippedNodes(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } t.Logf("graph:") @@ -127,7 +127,7 @@ func TestShippedNodes(t *testing.T) { t.Logf("sorted nodes: [%s]", strings.Join(actualNodes, ", ")) t.Logf("expected nodes: [%s]", strings.Join(expectedNodes, ", ")) - if len(expectedNodes) != len(actualNodes) { + if len(expectedNodes) != len(actualNodes) { t.Errorf("unexpected number of shipped nodes: %d nodes, want %d nodes", len(actualNodes), len(expectedNodes)) return diff --git a/tools/compliance/policy/walk.go b/tools/compliance/policy_walk.go similarity index 99% rename from tools/compliance/policy/walk.go rename to tools/compliance/policy_walk.go index 3e730889ed..f4d7bbaf3a 100644 --- a/tools/compliance/policy/walk.go +++ b/tools/compliance/policy_walk.go @@ -83,7 +83,7 @@ func WalkTopDown(ctx EdgeContextProvider, lg *LicenseGraph, visit VisitNode) { // specific set of conditions. type resolutionKey struct { target *TargetNode - cs LicenseConditionSet + cs LicenseConditionSet } // WalkResolutionsForCondition performs a top-down walk of the LicenseGraph diff --git a/tools/compliance/policy/walk_test.go b/tools/compliance/policy_walk_test.go similarity index 99% rename from tools/compliance/policy/walk_test.go rename to tools/compliance/policy_walk_test.go index a2ec6e7a84..92867f9535 100644 --- a/tools/compliance/policy/walk_test.go +++ b/tools/compliance/policy_walk_test.go @@ -620,7 +620,7 @@ func TestWalkResolutionsForCondition(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } expectedRs := toResolutionSet(lg, tt.expectedResolutions) @@ -1228,7 +1228,7 @@ func TestWalkActionsForCondition(t *testing.T) { stderr := &bytes.Buffer{} lg, err := toGraph(stderr, tt.roots, tt.edges) if err != nil { - t.Errorf("unexpected test data error: got %w, want no error", err) + t.Errorf("unexpected test data error: got %s, want no error", err) return } expectedAs := toActionSet(lg, tt.expectedActions) diff --git a/tools/compliance/readgraph.go b/tools/compliance/readgraph.go index c809a96dd9..6f91e1c34b 100644 --- a/tools/compliance/readgraph.go +++ b/tools/compliance/readgraph.go @@ -185,7 +185,7 @@ type targetNode struct { // addDependencies converts the proto AnnotatedDependencies into `edges` func addDependencies(lg *LicenseGraph, tn *TargetNode) error { - tn.edges = make(TargetEdgeList, 0,len(tn.proto.Deps)) + tn.edges = make(TargetEdgeList, 0, len(tn.proto.Deps)) for _, ad := range tn.proto.Deps { dependency := ad.GetFile() if len(dependency) == 0 { diff --git a/tools/compliance/readgraph_test.go b/tools/compliance/readgraph_test.go index 6ff7a6c4f8..db52fb193b 100644 --- a/tools/compliance/readgraph_test.go +++ b/tools/compliance/readgraph_test.go @@ -88,9 +88,9 @@ func TestReadLicenseGraph(t *testing.T) { lg, err := ReadLicenseGraph(tt.fs, stderr, tt.roots) if err != nil { if len(tt.expectedError) == 0 { - t.Errorf("unexpected error: got %w, want no error", err) + t.Errorf("unexpected error: got %s, want no error", err) } else if !strings.Contains(err.Error(), tt.expectedError) { - t.Errorf("unexpected error: got %w, want %q", err, tt.expectedError) + t.Errorf("unexpected error: got %s, want %q", err, tt.expectedError) } return } diff --git a/tools/compliance/resolution.go b/tools/compliance/resolution.go index 6f15ca350e..acc61e2ebf 100644 --- a/tools/compliance/resolution.go +++ b/tools/compliance/resolution.go @@ -66,7 +66,7 @@ func (r Resolution) asString() string { type ResolutionList []Resolution // Len returns the count of elements in the list. -func (l ResolutionList) Len() int { return len(l) } +func (l ResolutionList) Len() int { return len(l) } // Swap rearranges 2 elements so that each occupies the other's former position. func (l ResolutionList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } diff --git a/tools/compliance/resolutionset.go b/tools/compliance/resolutionset.go index 893ef26971..ef898834a0 100644 --- a/tools/compliance/resolutionset.go +++ b/tools/compliance/resolutionset.go @@ -65,7 +65,6 @@ func (rs ResolutionSet) AttachesTo() TargetNodeList { return result } - // AttachesToTarget returns true if the set contains conditions that // are `attachedTo`. func (rs ResolutionSet) AttachesToTarget(target *TargetNode) bool { @@ -73,7 +72,6 @@ func (rs ResolutionSet) AttachesToTarget(target *TargetNode) bool { return isPresent } - // Resolutions returns the list of resolutions that `attachedTo` // target must resolve. Returns empty list if no conditions apply. func (rs ResolutionSet) Resolutions(attachesTo *TargetNode) ResolutionList { diff --git a/tools/compliance/test_util.go b/tools/compliance/test_util.go index 8f4088ab7f..26d7461b8b 100644 --- a/tools/compliance/test_util.go +++ b/tools/compliance/test_util.go @@ -33,56 +33,56 @@ license_conditions: "notice" // GPL starts a test metadata file for GPL 2.0 licensing. GPL = `` + -`package_name: "Free Software" + `package_name: "Free Software" license_kinds: "SPDX-license-identifier-GPL-2.0" license_conditions: "restricted" ` // Classpath starts a test metadata file for GPL 2.0 with classpath exception licensing. Classpath = `` + -`package_name: "Free Software" + `package_name: "Free Software" license_kinds: "SPDX-license-identifier-GPL-2.0-with-classpath-exception" license_conditions: "restricted" ` // DependentModule starts a test metadata file for a module in the same package as `Classpath`. DependentModule = `` + -`package_name: "Free Software" + `package_name: "Free Software" license_kinds: "SPDX-license-identifier-MIT" license_conditions: "notice" ` // LGPL starts a test metadata file for a module with LGPL 2.0 licensing. LGPL = `` + -`package_name: "Free Library" + `package_name: "Free Library" license_kinds: "SPDX-license-identifier-LGPL-2.0" license_conditions: "restricted" ` // MPL starts a test metadata file for a module with MPL 2.0 reciprical licensing. MPL = `` + -`package_name: "Reciprocal" + `package_name: "Reciprocal" license_kinds: "SPDX-license-identifier-MPL-2.0" license_conditions: "reciprocal" ` // MIT starts a test metadata file for a module with generic notice (MIT) licensing. MIT = `` + -`package_name: "Android" + `package_name: "Android" license_kinds: "SPDX-license-identifier-MIT" license_conditions: "notice" ` // Proprietary starts a test metadata file for a module with proprietary licensing. Proprietary = `` + -`package_name: "Android" + `package_name: "Android" license_kinds: "legacy_proprietary" license_conditions: "proprietary" ` // ByException starts a test metadata file for a module with by_exception_only licensing. ByException = `` + -`package_name: "Special" + `package_name: "Special" license_kinds: "legacy_by_exception_only" license_conditions: "by_exception_only" ` @@ -91,22 +91,22 @@ license_conditions: "by_exception_only" var ( // meta maps test file names to metadata file content without dependencies. meta = map[string]string{ - "apacheBin.meta_lic": AOSP, - "apacheLib.meta_lic": AOSP, - "apacheContainer.meta_lic": AOSP + "is_container: true\n", - "dependentModule.meta_lic": DependentModule, + "apacheBin.meta_lic": AOSP, + "apacheLib.meta_lic": AOSP, + "apacheContainer.meta_lic": AOSP + "is_container: true\n", + "dependentModule.meta_lic": DependentModule, "gplWithClasspathException.meta_lic": Classpath, - "gplBin.meta_lic": GPL, - "gplLib.meta_lic": GPL, - "gplContainer.meta_lic": GPL + "is_container: true\n", - "lgplBin.meta_lic": LGPL, - "lgplLib.meta_lic": LGPL, - "mitBin.meta_lic": MIT, - "mitLib.meta_lic": MIT, - "mplBin.meta_lic": MPL, - "mplLib.meta_lic": MPL, - "proprietary.meta_lic": Proprietary, - "by_exception.meta_lic": ByException, + "gplBin.meta_lic": GPL, + "gplLib.meta_lic": GPL, + "gplContainer.meta_lic": GPL + "is_container: true\n", + "lgplBin.meta_lic": LGPL, + "lgplLib.meta_lic": LGPL, + "mitBin.meta_lic": MIT, + "mitLib.meta_lic": MIT, + "mplBin.meta_lic": MPL, + "mplLib.meta_lic": MPL, + "proprietary.meta_lic": Proprietary, + "by_exception.meta_lic": ByException, } ) @@ -204,7 +204,7 @@ func (e edge) String() string { type byEdge []edge // Len returns the count of elements in the slice. -func (l byEdge) Len() int { return len(l) } +func (l byEdge) Len() int { return len(l) } // Swap rearranges 2 elements of the slice so that each occupies the other's // former position. @@ -219,7 +219,6 @@ func (l byEdge) Less(i, j int) bool { return l[i].target < l[j].target } - // annotated describes annotated test data edges to define test graphs. type annotated struct { target, dep string @@ -240,7 +239,7 @@ func (e annotated) IsEqualTo(other annotated) bool { if e.dep != other.dep { return false } - if len(e.annotations) != len(other.annotations) { + if len(e.annotations) != len(other.annotations) { return false } a1 := append([]string{}, e.annotations...) @@ -401,7 +400,7 @@ func (l actionList) String() string { } // Len returns the count of elements in the slice. -func (l actionList) Len() int { return len(l) } +func (l actionList) Len() int { return len(l) } // Swap rearranges 2 elements of the slice so that each occupies the other's // former position. @@ -467,10 +466,10 @@ func toConflictList(lg *LicenseGraph, data []confl) []SourceSharePrivacyConflict oprivacy := fields[0] cprivacy := fields[1] result = append(result, SourceSharePrivacyConflict{ - newTestNode(lg, c.sourceNode), - newTestCondition(lg, oshare, cshare), - newTestCondition(lg, oprivacy, cprivacy), - }) + newTestNode(lg, c.sourceNode), + newTestCondition(lg, oshare, cshare), + newTestCondition(lg, oprivacy, cprivacy), + }) } return result }