## Test data Each non-regression directory under testdata/ defines a similar build graph. All have the same structure, but different versions of the graph have different license metadata. The regression* directories can have whatever structure is required for the specific test case. ### Testdata build graph structure: The structure is meant to simulate some common scenarios: * a `lib/` directory with some libraries * a `bin/` directory with some executables * one of the binaries, `bin3`, is a toolchain executable like a compiler * an `application` built with the `bin3` compiler and linking a couple libraries * a pure aggregation `continer.zip` that merely bundles files together, and * an apex file (more like an apk file) with some binaries and libraries. The testdata starts with a `firstparty/` version containng only first-party licenses, and each subsequent directory introduces more restrictive conditions: * `notice/` starts with `firstparty/` adds third-party notice conditions * `reciprocal/` starts with `notice/` and adds some reciprocal conditions * `restricted/` starts with `reciprocal/` and adds some restricted conditions * `proprietary/` starts with `restricted/` and add some privacy conditions #### a `lib/` directory with some libraries ```dot strict digraph { liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; } ``` #### a `bin/` directory with some executables strict digraph { rankdir=LR; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; bin3 [label="bin/bin3.meta_lic\ntoolchain"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; {rank=same; bin1 bin2 bin3} } #### an `application` built with the `bin3` compiler and linking a couple libraries ```dot strict digraph { rankdir=LR; app [label="application.meta_lic"]; bin3 [label="bin/bin3.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; {rank=same; app} } ``` #### a pure aggregation `container.zip` that merely bundles files together ```dot strict digraph { rankdir=LR; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; container [label="container.zip.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; {rank=same; container} } ``` #### an apex file (more like an apk file) with some binaries and libraries ```dot strict digraph { rankdir=LR; apex [label="highest.apex.meta_lic"]; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; bin3 [label="bin/bin3.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; apex} } ``` #### the whole build graph ```dot strict digraph { rankdir=LR; apex [label="highest.apex.meta_lic"]; app [label="application.meta_lic"]; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; bin3 [label="bin/bin3.meta_lic"]; container [label="container.zip.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} } ``` ### firstparty/ testdata starts with all first-party licensing ```dot strict digraph { rankdir=LR; app [label="firstparty/application.meta_lic"]; bin1 [label="firstparty/bin/bin1.meta_lic"]; bin2 [label="firstparty/bin/bin2.meta_lic"]; bin3 [label="firstparty/bin/bin3.meta_lic"]; container [label="firstparty/container.zip.meta_lic"]; apex [label="firstparty/highest.apex.meta_lic"]; liba [label="firstparty/lib/liba.so.meta_lic"]; libb [label="firstparty/lib/libb.so.meta_lic"]; libc [label="firstparty/lib/libc.a.meta_lic"]; lib [label="firstparty/lib/libd.so.meta_lic"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} } ``` ### notice/ testdata introduces third-party notice conditions ```dot strict digraph { rankdir=LR; app [label="notice/application.meta_lic"]; bin1 [label="notice/bin/bin1.meta_lic"]; bin2 [label="notice/bin/bin2.meta_lic"]; bin3 [label="notice/bin/bin3.meta_lic\nnotice"]; container [label="notice/container.zip.meta_lic"]; apex [label="notice/highest.apex.meta_lic"]; liba [label="notice/lib/liba.so.meta_lic\nnotice"]; libb [label="notice/lib/libb.so.meta_lic"]; libc [label="notice/lib/libc.a.meta_lic\nnotice"]; libd [label="notice/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} } ``` ### reciprocal/ testdata introduces third-party reciprocal sharing conditions ```dot strict digraph { rankdir=LR; app [label="reciprocal/application.meta_lic"]; bin1 [label="reciprocal/bin/bin1.meta_lic"]; bin2 [label="reciprocal/bin/bin2.meta_lic"]; bin3 [label="reciprocal/bin/bin3.meta_lic\nnotice"]; container [label="reciprocal/container.zip.meta_lic"]; apex [label="reciprocal/highest.apex.meta_lic"]; liba [label="reciprocal/lib/liba.so.meta_lic\nreciprocal"]; libb [label="reciprocal/lib/libb.so.meta_lic"]; libc [label="reciprocal/lib/libc.a.meta_lic\nreciprocal"]; libd [label="reciprocal/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} } ``` ### restricted/ testdata introduces restricted source sharing conditions ```dot strict digraph { rankdir=LR; app [label="restricted/application.meta_lic"]; bin1 [label="restricted/bin/bin1.meta_lic"]; bin2 [label="restricted/bin/bin2.meta_lic"]; bin3 [label="restricted/bin/bin3.meta_lic\nrestricted"]; container [label="restricted/container.zip.meta_lic"]; apex [label="restricted/highest.apex.meta_lic"]; liba [label="restricted/lib/liba.so.meta_lic\nrestricted"]; libb [label="restricted/lib/libb.so.meta_lic\nrestricted"]; libc [label="restricted/lib/libc.a.meta_lic\nreciprocal"]; libd [label="restricted/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} } ``` ### proprietary/ testdata introduces privacy conditions ```dot strict digraph { rankdir=LR; app [label="proprietary/application.meta_lic"]; bin1 [label="proprietary/bin/bin1.meta_lic"]; bin2 [label="proprietary/bin/bin2.meta_lic\nby_exception_only\nproprietary"]; bin3 [label="proprietary/bin/bin3.meta_lic\nrestricted"]; container [label="proprietary/container.zip.meta_lic"]; apex [label="proprietary/highest.apex.meta_lic"]; liba [label="proprietary/lib/liba.so.meta_lic\nby_exception_only\nproprietary"]; libb [label="proprietary/lib/libb.so.meta_lic\nrestricted"]; libc [label="proprietary/lib/libc.a.meta_lic\nby_exception_only\nproprietary"]; libd [label="proprietary/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} } ```