From 18b10af2d0de381b148c40a2332329374ffab949 Mon Sep 17 00:00:00 2001 From: CatalinStratu Date: Fri, 1 Apr 2022 11:04:43 +0300 Subject: [PATCH 1/5] Cross Platform Testing TestBuilder2_1CanBuildPackageSection Signed-off-by: CatalinStratu --- builder/builder2v1/build_package.go | 2 +- ...ge_test.go => build_package_linux_test.go} | 4 +- .../builder2v1/build_package_windows_test.go | 172 ++++++++++++++++++ .../project1_windows/emptyfile.testdata.txt | 0 testdata/project1_windows/file1.testdata.txt | 1 + testdata/project1_windows/file3.testdata.txt | 1 + .../folder1/file4.testdata.txt | 2 + .../project1_windows/lastfile.testdata.txt | 3 + testdata/{project1 => project2}/symbolic-link | 0 9 files changed, 183 insertions(+), 2 deletions(-) rename builder/builder2v1/{build_package_test.go => build_package_linux_test.go} (99%) create mode 100644 builder/builder2v1/build_package_windows_test.go create mode 100644 testdata/project1_windows/emptyfile.testdata.txt create mode 100644 testdata/project1_windows/file1.testdata.txt create mode 100644 testdata/project1_windows/file3.testdata.txt create mode 100644 testdata/project1_windows/folder1/file4.testdata.txt create mode 100644 testdata/project1_windows/lastfile.testdata.txt rename testdata/{project1 => project2}/symbolic-link (100%) diff --git a/builder/builder2v1/build_package.go b/builder/builder2v1/build_package.go index e59e6763..b1e51072 100644 --- a/builder/builder2v1/build_package.go +++ b/builder/builder2v1/build_package.go @@ -40,7 +40,7 @@ func BuildPackageSection2_1(packageName string, dirRoot string, pathsIgnore []st for _, fp := range filepaths { newFilePatch := "" if osType == "windows" { - newFilePatch = filepath.FromSlash("." + fp[dirRootLen:]) + newFilePatch = filepath.FromSlash(fp[dirRootLen:]) } else { newFilePatch = filepath.FromSlash("./" + fp) } diff --git a/builder/builder2v1/build_package_test.go b/builder/builder2v1/build_package_linux_test.go similarity index 99% rename from builder/builder2v1/build_package_test.go rename to builder/builder2v1/build_package_linux_test.go index 7128834d..c9acf0e2 100644 --- a/builder/builder2v1/build_package_test.go +++ b/builder/builder2v1/build_package_linux_test.go @@ -1,5 +1,7 @@ -// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +//go:build linux +// +build linux +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later package builder2v1 import ( diff --git a/builder/builder2v1/build_package_windows_test.go b/builder/builder2v1/build_package_windows_test.go new file mode 100644 index 00000000..6a6bfbd5 --- /dev/null +++ b/builder/builder2v1/build_package_windows_test.go @@ -0,0 +1,172 @@ +//go:build windows +// +build windows + +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +package builder2v1 + +import ( + "os" + "testing" + + "github.com/spdx/tools-golang/spdx" +) + +// Verify if file exists +func fileExists(path string) bool { + _, err := os.Stat(path) + return !os.IsNotExist(err) +} + +// ===== Package section builder tests ===== +func TestBuilder2_1CanBuildPackageSection(t *testing.T) { + packageName := "project1" + dirRoot := "../../testdata/project1_windows/" + + if !fileExists("../../testdata/project1_windows/symbolic-link") { + + // create a new symbolic or "soft" link + err := os.Symlink("../../testdata/project1_windows/file3.testdata.txt", "../../testdata/project1_windows/symbolic-link") + if err != nil { + t.Errorf("Do not have administrator rights : %v", err) + os.Exit(1) + } + } + wantVerificationCode := "fc9ac4a370af0a471c2e52af66d6b4cf4e2ba12b" + + pkg, err := BuildPackageSection2_1(packageName, dirRoot, nil) + if err != nil { + t.Fatalf("expected nil error, got %v", err) + } + + if pkg == nil { + t.Fatalf("expected non-nil Package, got nil") + } + if pkg.PackageName != "project1" { + t.Errorf("expected %v, got %v", "project1", pkg.PackageName) + } + if pkg.PackageSPDXIdentifier != spdx.ElementID("Package-project1") { + t.Errorf("expected %v, got %v", "Package-project1", pkg.PackageSPDXIdentifier) + } + if pkg.PackageDownloadLocation != "NOASSERTION" { + t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageDownloadLocation) + } + if pkg.FilesAnalyzed != true { + t.Errorf("expected %v, got %v", true, pkg.FilesAnalyzed) + } + if pkg.IsFilesAnalyzedTagPresent != true { + t.Errorf("expected %v, got %v", true, pkg.IsFilesAnalyzedTagPresent) + } + if pkg.PackageVerificationCode != wantVerificationCode { + t.Errorf("expected %v, got %v", wantVerificationCode, pkg.PackageVerificationCode) + } + if pkg.PackageLicenseConcluded != "NOASSERTION" { + t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageLicenseConcluded) + } + if len(pkg.PackageLicenseInfoFromFiles) != 0 { + t.Errorf("expected %v, got %v", 0, len(pkg.PackageLicenseInfoFromFiles)) + } + if pkg.PackageLicenseDeclared != "NOASSERTION" { + t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageLicenseDeclared) + } + if pkg.PackageCopyrightText != "NOASSERTION" { + t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageCopyrightText) + } + + // and make sure we got the right number of files, and check the first one + if pkg.Files == nil { + t.Fatalf("expected non-nil pkg.Files, got nil") + } + if len(pkg.Files) != 5 { + t.Fatalf("expected %d, got %d", 5, len(pkg.Files)) + } + fileEmpty := pkg.Files[spdx.ElementID("File0")] + if fileEmpty == nil { + t.Fatalf("expected non-nil file, got nil") + } + if fileEmpty.FileName != "emptyfile.testdata.txt" { + t.Errorf("expected %v, got %v", "emptyfile.testdata.txt", fileEmpty.FileName) + } + if fileEmpty.FileSPDXIdentifier != spdx.ElementID("File0") { + t.Errorf("expected %v, got %v", "File0", fileEmpty.FileSPDXIdentifier) + } + if fileEmpty.FileChecksumSHA1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709" { + t.Errorf("expected %v, got %v", "da39a3ee5e6b4b0d3255bfef95601890afd80709", fileEmpty.FileChecksumSHA1) + } + if fileEmpty.FileChecksumSHA256 != "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" { + t.Errorf("expected %v, got %v", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", fileEmpty.FileChecksumSHA256) + } + if fileEmpty.FileChecksumMD5 != "d41d8cd98f00b204e9800998ecf8427e" { + t.Errorf("expected %v, got %v", "d41d8cd98f00b204e9800998ecf8427e", fileEmpty.FileChecksumMD5) + } + if fileEmpty.LicenseConcluded != "NOASSERTION" { + t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.LicenseConcluded) + } + if len(fileEmpty.LicenseInfoInFile) != 1 { + t.Errorf("expected %v, got %v", 1, len(fileEmpty.LicenseInfoInFile)) + } else { + if fileEmpty.LicenseInfoInFile[0] != "NOASSERTION" { + t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.LicenseInfoInFile[0]) + } + } + if fileEmpty.FileCopyrightText != "NOASSERTION" { + t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.FileCopyrightText) + } + + err = os.Remove("../../testdata/project1_windows/symbolic-link") + if err != nil { + t.Errorf("the file could not be deleted : %v", err) + } +} + +func TestBuilder2_1CanIgnoreFiles(t *testing.T) { + packageName := "project3" + dirRoot := "../../testdata/project3/" + pathsIgnored := []string{ + "**/ignoredir/", + "/excludedir/", + "**/ignorefile.txt", + "/alsoEXCLUDEthis.txt", + } + pkg, err := BuildPackageSection2_1(packageName, dirRoot, pathsIgnored) + if err != nil { + t.Fatalf("expected nil error, got %v", err) + } + + // make sure we got the right files + if pkg.Files == nil { + t.Fatalf("expected non-nil pkg.Files, got nil") + } + if len(pkg.Files) != 5 { + t.Fatalf("expected %d, got %d", 5, len(pkg.Files)) + } + + want := "./dontscan.txt" + got := pkg.Files[spdx.ElementID("File0")].FileName + if want != got { + t.Errorf("expected %v, got %v", want, got) + } + + want = "./keep/keep.txt" + got = pkg.Files[spdx.ElementID("File1")].FileName + if want != got { + t.Errorf("expected %v, got %v", want, got) + } + + want = "./keep.txt" + got = pkg.Files[spdx.ElementID("File2")].FileName + if want != got { + t.Errorf("expected %v, got %v", want, got) + } + + want = "./subdir/keep/dontscan.txt" + got = pkg.Files[spdx.ElementID("File3")].FileName + if want != got { + t.Errorf("expected %v, got %v", want, got) + } + + want = "./subdir/keep/keep.txt" + got = pkg.Files[spdx.ElementID("File4")].FileName + if want != got { + t.Errorf("expected %v, got %v", want, got) + } +} diff --git a/testdata/project1_windows/emptyfile.testdata.txt b/testdata/project1_windows/emptyfile.testdata.txt new file mode 100644 index 00000000..e69de29b diff --git a/testdata/project1_windows/file1.testdata.txt b/testdata/project1_windows/file1.testdata.txt new file mode 100644 index 00000000..a9ec36cc --- /dev/null +++ b/testdata/project1_windows/file1.testdata.txt @@ -0,0 +1 @@ +arbitrary content for testing purposes diff --git a/testdata/project1_windows/file3.testdata.txt b/testdata/project1_windows/file3.testdata.txt new file mode 100644 index 00000000..2a759795 --- /dev/null +++ b/testdata/project1_windows/file3.testdata.txt @@ -0,0 +1 @@ +This file contains some sort of documentation or whatever diff --git a/testdata/project1_windows/folder1/file4.testdata.txt b/testdata/project1_windows/folder1/file4.testdata.txt new file mode 100644 index 00000000..3cc937e0 --- /dev/null +++ b/testdata/project1_windows/folder1/file4.testdata.txt @@ -0,0 +1,2 @@ +blah blah blah +this file has text in it diff --git a/testdata/project1_windows/lastfile.testdata.txt b/testdata/project1_windows/lastfile.testdata.txt new file mode 100644 index 00000000..5545f2ca --- /dev/null +++ b/testdata/project1_windows/lastfile.testdata.txt @@ -0,0 +1,3 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later + +somebody was kind enough to stick an spdx short-form ID in here diff --git a/testdata/project1/symbolic-link b/testdata/project2/symbolic-link similarity index 100% rename from testdata/project1/symbolic-link rename to testdata/project2/symbolic-link From 4ba81f5896a3dec05ed9b83b104f29712b57459e Mon Sep 17 00:00:00 2001 From: CatalinStratu Date: Fri, 1 Apr 2022 11:05:44 +0300 Subject: [PATCH 2/5] Cross Platform Testing TestBuilder2_1CanBuildPackageSection Signed-off-by: CatalinStratu --- testdata/project2/symbolic-link | 1 - 1 file changed, 1 deletion(-) delete mode 120000 testdata/project2/symbolic-link diff --git a/testdata/project2/symbolic-link b/testdata/project2/symbolic-link deleted file mode 120000 index 11a17958..00000000 --- a/testdata/project2/symbolic-link +++ /dev/null @@ -1 +0,0 @@ -file3.testdata.txt \ No newline at end of file From 437743fe15d87943fba71e5ed519f4e06f358fa2 Mon Sep 17 00:00:00 2001 From: CatalinStratu Date: Fri, 1 Apr 2022 11:19:56 +0300 Subject: [PATCH 3/5] Coments Signed-off-by: CatalinStratu --- builder/builder2v1/build_package_windows_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/builder/builder2v1/build_package_windows_test.go b/builder/builder2v1/build_package_windows_test.go index 6a6bfbd5..7607b4d3 100644 --- a/builder/builder2v1/build_package_windows_test.go +++ b/builder/builder2v1/build_package_windows_test.go @@ -22,9 +22,9 @@ func TestBuilder2_1CanBuildPackageSection(t *testing.T) { packageName := "project1" dirRoot := "../../testdata/project1_windows/" + // check if the file exists if !fileExists("../../testdata/project1_windows/symbolic-link") { - - // create a new symbolic or "soft" link + // create a new symbolic link err := os.Symlink("../../testdata/project1_windows/file3.testdata.txt", "../../testdata/project1_windows/symbolic-link") if err != nil { t.Errorf("Do not have administrator rights : %v", err) @@ -112,6 +112,7 @@ func TestBuilder2_1CanBuildPackageSection(t *testing.T) { t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.FileCopyrightText) } + // Remove symbolic link after test err = os.Remove("../../testdata/project1_windows/symbolic-link") if err != nil { t.Errorf("the file could not be deleted : %v", err) From 3f6c4b428f4e6bdd0f09fbd4ac36b519fae0e4e7 Mon Sep 17 00:00:00 2001 From: CatalinStratu Date: Fri, 1 Apr 2022 11:25:35 +0300 Subject: [PATCH 4/5] Symbolic link Signed-off-by: CatalinStratu --- testdata/project1/symbolic-link | 1 + 1 file changed, 1 insertion(+) create mode 100644 testdata/project1/symbolic-link diff --git a/testdata/project1/symbolic-link b/testdata/project1/symbolic-link new file mode 100644 index 00000000..11a17958 --- /dev/null +++ b/testdata/project1/symbolic-link @@ -0,0 +1 @@ +file3.testdata.txt \ No newline at end of file From c0e37770d9f8289d68b5961b7d1b3fc04b58a0d5 Mon Sep 17 00:00:00 2001 From: CatalinStratu Date: Fri, 1 Apr 2022 11:29:36 +0300 Subject: [PATCH 5/5] Symbolic link fixes Signed-off-by: CatalinStratu --- testdata/project1/symbolic-link | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 120000 testdata/project1/symbolic-link diff --git a/testdata/project1/symbolic-link b/testdata/project1/symbolic-link deleted file mode 100644 index 11a17958..00000000 --- a/testdata/project1/symbolic-link +++ /dev/null @@ -1 +0,0 @@ -file3.testdata.txt \ No newline at end of file diff --git a/testdata/project1/symbolic-link b/testdata/project1/symbolic-link new file mode 120000 index 00000000..2a456eae --- /dev/null +++ b/testdata/project1/symbolic-link @@ -0,0 +1 @@ +../../testdata/project1_windows/file3.testdata.txt \ No newline at end of file