all: correct removal of testing datasets

In integration tests, we create test datasets that we try to delete once
tests are done. This does not work since Delete() API we use expects
datasets to be empty. We correct this by using an approprate API.

Also, a test dataset is unique up to the current date (second
precision), but if two tests are executed in parallel at the same
second, this can lead to races. We now create datasets unique to the
tests creating them.

The major impact of this CL is that the target Cloud project will not
accumulate test datasets that are of no use.

Change-Id: Idf3dbbe6f16b9848e8f017c808605dbfebfc7f43
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/500515
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Zvonimir Pavlinovic <zpavlinovic@google.com>
diff --git a/internal/bigquery/bigquery.go b/internal/bigquery/bigquery.go
index 35d42b8..309b415 100644
--- a/internal/bigquery/bigquery.go
+++ b/internal/bigquery/bigquery.go
@@ -58,14 +58,14 @@
 
 func (c *Client) Close() (err error) {
 	if c.deleteDatasetOnClose {
-		err = c.dataset.Delete(context.Background())
+		err = c.dataset.DeleteWithContents(context.Background())
 	}
 	return errors.Join(err, c.client.Close())
 }
 
 // NewClientForTesting creates a client with a new, unique dataset. Closing the client deletes the dataset.
-func NewClientForTesting(ctx context.Context, projectID string) (*Client, error) {
-	dsID := fmt.Sprintf("test_%s", time.Now().Format("20060102T030405"))
+func NewClientForTesting(ctx context.Context, projectID, testID string) (*Client, error) {
+	dsID := fmt.Sprintf("test_%s_%s", testID, time.Now().Format("20060102T030405"))
 	c, err := NewClientCreate(ctx, projectID, dsID)
 	if err != nil {
 		return nil, err
diff --git a/internal/vulndb/vulndb_test.go b/internal/vulndb/vulndb_test.go
index 48c193b..d2c15c9 100644
--- a/internal/vulndb/vulndb_test.go
+++ b/internal/vulndb/vulndb_test.go
@@ -47,7 +47,7 @@
 	ctx := context.Background()
 	const projectID = "go-ecosystem"
 
-	client, err := bigquery.NewClientForTesting(ctx, projectID)
+	client, err := bigquery.NewClientForTesting(ctx, projectID, "read_recent_db")
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/internal/vulndbreqs/bq_test.go b/internal/vulndbreqs/bq_test.go
index a41d97d..48baf69 100644
--- a/internal/vulndbreqs/bq_test.go
+++ b/internal/vulndbreqs/bq_test.go
@@ -30,7 +30,7 @@
 	ctx := context.Background()
 	const projectID = "go-ecosystem"
 
-	client, err := bigquery.NewClientForTesting(ctx, projectID)
+	client, err := bigquery.NewClientForTesting(ctx, projectID, "bigquery")
 	if err != nil {
 		t.Fatal(err)
 	}