Track dependencies when reading notice files

Track which files are read by the notice file indexer and add a flag
to textnotice and htmlnotice to support writing them out.

Bug: 207445310
Test: textnotice_test
Test: htmlnotice_test
Change-Id: Ib74706b8a87a5ed9268a0fe37982ecf89f4e227d
This commit is contained in:
Colin Cross
2022-01-28 15:18:19 -08:00
parent e4442b7df6
commit bb45f8c74d
6 changed files with 264 additions and 26 deletions

View File

@@ -20,6 +20,7 @@ import (
"fmt"
"html"
"os"
"reflect"
"regexp"
"strings"
"testing"
@@ -51,13 +52,14 @@ func TestMain(m *testing.M) {
func Test(t *testing.T) {
tests := []struct {
condition string
name string
roots []string
includeTOC bool
stripPrefix string
title string
expectedOut []matcher
condition string
name string
roots []string
includeTOC bool
stripPrefix string
title string
expectedOut []matcher
expectedDeps []string
}{
{
condition: "firstparty",
@@ -73,6 +75,7 @@ func Test(t *testing.T) {
usedBy{"highest.apex/lib/libb.so"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "firstparty",
@@ -100,6 +103,7 @@ func Test(t *testing.T) {
usedBy{"highest.apex/lib/libb.so"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "firstparty",
@@ -117,6 +121,7 @@ func Test(t *testing.T) {
usedBy{"highest.apex/lib/libb.so"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "firstparty",
@@ -146,6 +151,7 @@ func Test(t *testing.T) {
usedBy{"highest.apex/lib/libb.so"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "firstparty",
@@ -161,6 +167,7 @@ func Test(t *testing.T) {
usedBy{"container.zip/libb.so"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "firstparty",
@@ -172,6 +179,7 @@ func Test(t *testing.T) {
usedBy{"application"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "firstparty",
@@ -183,6 +191,7 @@ func Test(t *testing.T) {
usedBy{"bin/bin1"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "firstparty",
@@ -194,6 +203,7 @@ func Test(t *testing.T) {
usedBy{"lib/libd.so"},
firstParty{},
},
expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
},
{
condition: "notice",
@@ -215,6 +225,10 @@ func Test(t *testing.T) {
usedBy{"highest.apex/bin/bin1"},
notice{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/notice/NOTICE_LICENSE",
},
},
{
condition: "notice",
@@ -236,6 +250,10 @@ func Test(t *testing.T) {
usedBy{"container.zip/bin1"},
notice{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/notice/NOTICE_LICENSE",
},
},
{
condition: "notice",
@@ -251,6 +269,10 @@ func Test(t *testing.T) {
usedBy{"application"},
notice{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/notice/NOTICE_LICENSE",
},
},
{
condition: "notice",
@@ -268,6 +290,10 @@ func Test(t *testing.T) {
usedBy{"bin/bin1"},
notice{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/notice/NOTICE_LICENSE",
},
},
{
condition: "notice",
@@ -279,6 +305,7 @@ func Test(t *testing.T) {
usedBy{"lib/libd.so"},
notice{},
},
expectedDeps: []string{"testdata/notice/NOTICE_LICENSE"},
},
{
condition: "reciprocal",
@@ -300,6 +327,10 @@ func Test(t *testing.T) {
usedBy{"highest.apex/bin/bin1"},
reciprocal{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/reciprocal/RECIPROCAL_LICENSE",
},
},
{
condition: "reciprocal",
@@ -321,6 +352,10 @@ func Test(t *testing.T) {
usedBy{"container.zip/bin1"},
reciprocal{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/reciprocal/RECIPROCAL_LICENSE",
},
},
{
condition: "reciprocal",
@@ -336,6 +371,10 @@ func Test(t *testing.T) {
usedBy{"application"},
reciprocal{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/reciprocal/RECIPROCAL_LICENSE",
},
},
{
condition: "reciprocal",
@@ -353,6 +392,10 @@ func Test(t *testing.T) {
usedBy{"bin/bin1"},
reciprocal{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/reciprocal/RECIPROCAL_LICENSE",
},
},
{
condition: "reciprocal",
@@ -364,6 +407,7 @@ func Test(t *testing.T) {
usedBy{"lib/libd.so"},
notice{},
},
expectedDeps: []string{"testdata/notice/NOTICE_LICENSE"},
},
{
condition: "restricted",
@@ -389,6 +433,11 @@ func Test(t *testing.T) {
usedBy{"highest.apex/bin/bin1"},
reciprocal{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/reciprocal/RECIPROCAL_LICENSE",
"testdata/restricted/RESTRICTED_LICENSE",
},
},
{
condition: "restricted",
@@ -414,6 +463,11 @@ func Test(t *testing.T) {
usedBy{"container.zip/bin1"},
reciprocal{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/reciprocal/RECIPROCAL_LICENSE",
"testdata/restricted/RESTRICTED_LICENSE",
},
},
{
condition: "restricted",
@@ -429,6 +483,10 @@ func Test(t *testing.T) {
usedBy{"application"},
restricted{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/restricted/RESTRICTED_LICENSE",
},
},
{
condition: "restricted",
@@ -448,6 +506,11 @@ func Test(t *testing.T) {
usedBy{"bin/bin1"},
reciprocal{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/reciprocal/RECIPROCAL_LICENSE",
"testdata/restricted/RESTRICTED_LICENSE",
},
},
{
condition: "restricted",
@@ -459,6 +522,7 @@ func Test(t *testing.T) {
usedBy{"lib/libd.so"},
notice{},
},
expectedDeps: []string{"testdata/notice/NOTICE_LICENSE"},
},
{
condition: "proprietary",
@@ -485,6 +549,11 @@ func Test(t *testing.T) {
usedBy{"highest.apex/bin/bin1"},
proprietary{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/proprietary/PROPRIETARY_LICENSE",
"testdata/restricted/RESTRICTED_LICENSE",
},
},
{
condition: "proprietary",
@@ -511,6 +580,11 @@ func Test(t *testing.T) {
usedBy{"container.zip/bin1"},
proprietary{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/proprietary/PROPRIETARY_LICENSE",
"testdata/restricted/RESTRICTED_LICENSE",
},
},
{
condition: "proprietary",
@@ -526,6 +600,10 @@ func Test(t *testing.T) {
usedBy{"application"},
proprietary{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/proprietary/PROPRIETARY_LICENSE",
},
},
{
condition: "proprietary",
@@ -543,6 +621,10 @@ func Test(t *testing.T) {
usedBy{"bin/bin1"},
proprietary{},
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
"testdata/proprietary/PROPRIETARY_LICENSE",
},
},
{
condition: "proprietary",
@@ -554,6 +636,7 @@ func Test(t *testing.T) {
usedBy{"lib/libd.so"},
notice{},
},
expectedDeps: []string{"testdata/notice/NOTICE_LICENSE"},
},
}
for _, tt := range tests {
@@ -566,7 +649,9 @@ func Test(t *testing.T) {
rootFiles = append(rootFiles, "testdata/"+tt.condition+"/"+r)
}
ctx := context{stdout, stderr, os.DirFS("."), tt.includeTOC, tt.stripPrefix, tt.title}
var deps []string
ctx := context{stdout, stderr, os.DirFS("."), tt.includeTOC, tt.stripPrefix, tt.title, &deps}
err := htmlNotice(&ctx, rootFiles...)
if err != nil {
@@ -625,6 +710,15 @@ func Test(t *testing.T) {
for ; lineno < len(tt.expectedOut); lineno++ {
t.Errorf("htmlnotice: missing output line %d: ended early, want %q", lineno+1, tt.expectedOut[lineno].String())
}
t.Logf("got deps: %q", deps)
t.Logf("want deps: %q", tt.expectedDeps)
if g, w := deps, tt.expectedDeps; !reflect.DeepEqual(g, w) {
t.Errorf("unexpected deps, wanted:\n%s\ngot:\n%s\n",
strings.Join(w, "\n"), strings.Join(g, "\n"))
}
})
}
}