Refactor projectmetadata into separate package.

Replace regular expressions to extract fields from a text proto with
and actual parsed protobuf.

Refactor TestFS into its own package, and implement StatFS.

Test: m droid dist cts alllicensemetadata

Test: repo forall -c 'echo -n "$REPO_PATH  " && $ANDROID_BUILD_TOP/out/host/linux-x86/bin/compliance_checkmetadata . 2>&1' | fgrep -v PASS

Change-Id: Icd17a6a2b6a4e2b6ffded48e964b9c9d6e4d64d6
This commit is contained in:
Bob Badour
2022-10-12 20:10:17 -07:00
parent 6974223827
commit dc62de4760
18 changed files with 1094 additions and 54 deletions

View File

@@ -17,10 +17,11 @@ package compliance
import (
"fmt"
"io"
"io/fs"
"sort"
"strings"
"testing"
"android/soong/tools/compliance/testfs"
)
const (
@@ -145,51 +146,6 @@ func newTestConditionSet(lg *LicenseGraph, targetName string, conditionName []st
return cs
}
// testFS implements a test file system (fs.FS) simulated by a map from filename to []byte content.
type testFS map[string][]byte
// Open implements fs.FS.Open() to open a file based on the filename.
func (fs *testFS) Open(name string) (fs.File, error) {
if _, ok := (*fs)[name]; !ok {
return nil, fmt.Errorf("unknown file %q", name)
}
return &testFile{fs, name, 0}, nil
}
// testFile implements a test file (fs.File) based on testFS above.
type testFile struct {
fs *testFS
name string
posn int
}
// Stat not implemented to obviate implementing fs.FileInfo.
func (f *testFile) Stat() (fs.FileInfo, error) {
return nil, fmt.Errorf("unimplemented")
}
// Read copies bytes from the testFS map.
func (f *testFile) Read(b []byte) (int, error) {
if f.posn < 0 {
return 0, fmt.Errorf("file not open: %q", f.name)
}
if f.posn >= len((*f.fs)[f.name]) {
return 0, io.EOF
}
n := copy(b, (*f.fs)[f.name][f.posn:])
f.posn += n
return n, nil
}
// Close marks the testFile as no longer in use.
func (f *testFile) Close() error {
if f.posn < 0 {
return fmt.Errorf("file already closed: %q", f.name)
}
f.posn = -1
return nil
}
// edge describes test data edges to define test graphs.
type edge struct {
target, dep string
@@ -268,7 +224,7 @@ func toGraph(stderr io.Writer, roots []string, edges []annotated) (*LicenseGraph
deps[edge.dep] = []annotated{}
}
}
fs := make(testFS)
fs := make(testfs.TestFS)
for file, edges := range deps {
body := meta[file]
for _, edge := range edges {