cos/tools: Fix http client credentials check for changelog

JSON file in google.Credentials maybe empty if authentication is provided by the environment instead of a credential file. This is the case in GCP environments. Remove empty length check to proceed even if JSON is empty.
Also, fix typos and resolve errors in unit tests.

BUG=b/297072390
RELEASE_NOTE=None

Change-Id: I630a8d74693298579da6662a0d1ce12d13abea70
Reviewed-on: https://cos-review.googlesource.com/c/cos/tools/+/56347
Reviewed-by: Robert Kolchmeyer <rkolchmeyer@google.com>
Cloud-Build: GCB Service account <228075978874@cloudbuild.gserviceaccount.com>
Tested-by: Nandhini Rengaraj <nrengaraj@google.com>
diff --git a/src/cmd/changelogctl/main.go b/src/cmd/changelogctl/main.go
index 0838acb..3cf6f4d 100755
--- a/src/cmd/changelogctl/main.go
+++ b/src/cmd/changelogctl/main.go
@@ -54,7 +54,7 @@
 func getHTTPClient() (*http.Client, error) {
 	log.Debug("Creating HTTP client")
 	creds, err := google.FindDefaultCredentials(context.Background(), gerrit.OAuthScope)
-	if err != nil || len(creds.JSON) == 0 {
+	if err != nil {
 		return nil, fmt.Errorf("no application default credentials found - run `gcloud auth application-default login` and try again")
 	}
 	return oauth2.NewClient(oauth2.NoContext, creds.TokenSource), nil
diff --git a/src/pkg/changelog/changelog_test.go b/src/pkg/changelog/changelog_test.go
index a555e7a..3d90b0a 100644
--- a/src/pkg/changelog/changelog_test.go
+++ b/src/pkg/changelog/changelog_test.go
@@ -30,7 +30,7 @@
 
 func getHTTPClient() (*http.Client, error) {
 	creds, err := google.FindDefaultCredentials(context.Background(), gerrit.OAuthScope)
-	if err != nil || len(creds.JSON) == 0 {
+	if err != nil {
 		return nil, fmt.Errorf("no application default credentials found - run `gcloud auth application-default login` and try again")
 	}
 	return oauth2.NewClient(oauth2.NoContext, creds.TokenSource), nil
diff --git a/src/pkg/cos/cos_test.go b/src/pkg/cos/cos_test.go
index 213c1d2..c5b40ac 100644
--- a/src/pkg/cos/cos_test.go
+++ b/src/pkg/cos/cos_test.go
@@ -105,8 +105,8 @@
 	}
 	defer os.RemoveAll(tmpDir)
 
-	downloder := fakeDownloader{}
-	if err := downloadKernelSrc(&downloder, tmpDir); err != nil {
+	downloader := fakeDownloader{}
+	if err := downloadKernelSrc(&downloader, tmpDir); err != nil {
 		t.Fatalf("Failed to run downloadKernelSrc: %v", err)
 	}
 
@@ -132,8 +132,8 @@
 	defer os.RemoveAll(tmpDir)
 	os.Setenv("TMPDIR", tmpDir)
 
-	downloder := fakeDownloader{}
-	if err := SetCompilationEnv(&downloder); err != nil {
+	downloader := fakeDownloader{}
+	if err := SetCompilationEnv(&downloader); err != nil {
 		t.Fatalf("Failed to run SetCompilationEnv: %v", err)
 	}
 
@@ -167,8 +167,8 @@
 	defer os.RemoveAll(tmpDir)
 	origPath := os.Getenv("PATH")
 
-	downloder := fakeDownloader{}
-	if err := InstallCrossToolchain(&downloder, tmpDir); err != nil {
+	downloader := fakeDownloader{}
+	if err := InstallCrossToolchain(&downloader, tmpDir); err != nil {
 		t.Fatalf("Failed to run InstallCrossToolchain: %v", err)
 	}
 
@@ -298,3 +298,5 @@
 func (*fakeDownloader) DownloadArtifact(string, string) error { return nil }
 
 func (*fakeDownloader) GetArtifact(string) ([]byte, error) { return nil, nil }
+
+func (*fakeDownloader) ArtifactExists(string) (bool, error) { return false, nil }
diff --git a/src/pkg/cos/env_reader_test.go b/src/pkg/cos/env_reader_test.go
index a6ceaf3..c538d40 100644
--- a/src/pkg/cos/env_reader_test.go
+++ b/src/pkg/cos/env_reader_test.go
@@ -27,6 +27,23 @@
 GOOGLE_METRICS_PRODUCT_ID=26
 HOME_URL="https://cloud.google.com/container-optimized-os/docs"
 ID=cos`
+	lsbReleaseString := `CHROMEOS_RELEASE_APPID={76E245CF-C0D0-444D-BA50-36739C18EB00}
+CHROMEOS_BOARD_APPID={76E245CF-C0D0-444D-BA50-36739C18EB00}
+CHROMEOS_CANARY_APPID={90F229CE-83E2-4FAF-8479-E368A34938B1}
+DEVICETYPE=OTHER
+HWID_OVERRIDE=LAKITU DEFAULT
+CHROMEOS_RELEASE_NAME=Chromium OS
+CHROMEOS_AUSERVER=https://localhost:8080/noupdate
+CHROMEOS_RELEASE_KEYSET=devkeys
+CHROMEOS_RELEASE_TRACK=testimage-channel
+CHROMEOS_RELEASE_BOARD=lakitu
+CHROMEOS_RELEASE_BRANCH_NUMBER=0
+CHROMEOS_RELEASE_BUILD_NUMBER=15047
+CHROMEOS_RELEASE_CHROME_MILESTONE=109
+CHROMEOS_RELEASE_PATCH_NUMBER=0
+CHROMEOS_RELEASE_VERSION=15047.0.0
+GOOGLE_RELEASE=15047.0.0
+`
 	if err := createConfigFile(osReleaseString, osReleasePath, testDir); err != nil {
 		t.Fatalf("Failed to create osRelease file: %v", err)
 	}
@@ -35,6 +52,10 @@
 		t.Fatalf("Failed to create toolchain path file: %v", err)
 	}
 
+	if err := createConfigFile(lsbReleaseString, lsbReleasePath, testDir); err != nil {
+		t.Fatalf("Failed to create lsbRelease file: %v", err)
+	}
+
 	envReader, err := NewEnvReader(testDir)
 	if err != nil {
 		t.Fatalf("Failed to create EnvReader: %v", err)
diff --git a/src/pkg/findbuild/findbuild.go b/src/pkg/findbuild/findbuild.go
index d0f0b48..e2e9f57 100644
--- a/src/pkg/findbuild/findbuild.go
+++ b/src/pkg/findbuild/findbuild.go
@@ -628,7 +628,7 @@
 	// access secretmanager
 	client, err := secretmanager.NewClient(context.Background())
 	if err != nil {
-		log.Error("failed to create secretmanager client: %v", err)
+		log.Errorf("failed to create secretmanager client: %v", err)
 		return nil, utils.InternalServerError
 	}
 	var (
@@ -649,7 +649,7 @@
 		{instanceSecretName, &instanceName},
 		{dbProjectSecretName, &dbProjectID},
 	}); err != nil {
-		log.Error("failed to retrieve secrets from secretmanager: %v", err)
+		log.Errorf("failed to retrieve secrets from secretmanager: %v", err)
 		return nil, utils.InternalServerError
 	}
 	connectionName := dbProjectID + ":" + zone + ":" + instanceName
diff --git a/src/pkg/gpuconfig/read_configs_test.go b/src/pkg/gpuconfig/read_configs_test.go
index 1fe4d86..33965a4 100644
--- a/src/pkg/gpuconfig/read_configs_test.go
+++ b/src/pkg/gpuconfig/read_configs_test.go
@@ -46,7 +46,7 @@
 	timeNow = func() time.Time { return time.Date(2022, time.October, 10, 0, 0, 0, 0, time.UTC) }
 
 	// read configs from [2022-10-10 to 2022-10-10 minus 3 days]
-	got, err := ReadConfigs(ctx, gcs.Client, "cos-gpu-configs-test", 3)
+	got, err := ReadConfigs(ctx, gcs.Client, "cos-gpu-configs-test", 3, "kernel")
 	if err != nil {
 		log.Fatalf("ReadConfigs() failed:%v\n", err)
 	}
diff --git a/src/pkg/tools/sbomutil/sbomutil_test.go b/src/pkg/tools/sbomutil/sbomutil_test.go
index 3700557..4e34665 100644
--- a/src/pkg/tools/sbomutil/sbomutil_test.go
+++ b/src/pkg/tools/sbomutil/sbomutil_test.go
@@ -174,7 +174,7 @@
 					},
 					{
 						RefA:         spdx_common.DocElementID{ElementRefID: spdx_common.ElementID("SPDXRef-image1")},
-						RefB:         spdx_common.DocElementID{ElementRefID: spdx_common.ElementID("DocumentRef-pkg2")},
+						RefB:         spdx_common.DocElementID{DocumentRefID: "pkg2", ElementRefID: spdx_common.ElementID("SPDXRef-DOCUMENT")},
 						Relationship: "CONTAINS",
 					},
 				},
diff --git a/src/pkg/utils/gobutils_test.go b/src/pkg/utils/gobutils_test.go
index 5a12948..6b88531 100644
--- a/src/pkg/utils/gobutils_test.go
+++ b/src/pkg/utils/gobutils_test.go
@@ -53,7 +53,7 @@
 
 func getHTTPClient() (*http.Client, error) {
 	creds, err := google.FindDefaultCredentials(context.Background(), gerrit.OAuthScope)
-	if err != nil || len(creds.JSON) == 0 {
+	if err != nil {
 		return nil, fmt.Errorf("no application default credentials found - run `gcloud auth application-default login` and try again")
 	}
 	return oauth2.NewClient(oauth2.NoContext, creds.TokenSource), nil