diff --git a/test/s3tables/client.go b/test/s3tables/client.go index 1080b6171..5f543cdb2 100644 --- a/test/s3tables/client.go +++ b/test/s3tables/client.go @@ -50,7 +50,9 @@ func (c *S3TablesClient) CreateTableBucket(name string, tags map[string]string) if resp.StatusCode != http.StatusOK { var errResp s3tables.S3TablesError - json.NewDecoder(resp.Body).Decode(&errResp) + if err := json.NewDecoder(resp.Body).Decode(&errResp); err != nil { + return nil, fmt.Errorf("CreateTableBucket failed with status %d and could not decode error response: %v", resp.StatusCode, err) + } return nil, fmt.Errorf("CreateTableBucket failed: %s - %s", errResp.Type, errResp.Message) } @@ -75,7 +77,9 @@ func (c *S3TablesClient) GetTableBucket(arn string) (*s3tables.GetTableBucketRes if resp.StatusCode != http.StatusOK { var errResp s3tables.S3TablesError - json.NewDecoder(resp.Body).Decode(&errResp) + if err := json.NewDecoder(resp.Body).Decode(&errResp); err != nil { + return nil, fmt.Errorf("GetTableBucket failed with status %d and could not decode error response: %v", resp.StatusCode, err) + } return nil, fmt.Errorf("GetTableBucket failed: %s - %s", errResp.Type, errResp.Message) } @@ -100,7 +104,9 @@ func (c *S3TablesClient) ListTableBuckets(prefix string) (*s3tables.ListTableBuc if resp.StatusCode != http.StatusOK { var errResp s3tables.S3TablesError - json.NewDecoder(resp.Body).Decode(&errResp) + if err := json.NewDecoder(resp.Body).Decode(&errResp); err != nil { + return nil, fmt.Errorf("ListTableBuckets failed with status %d and could not decode error response: %v", resp.StatusCode, err) + } return nil, fmt.Errorf("ListTableBuckets failed: %s - %s", errResp.Type, errResp.Message) } @@ -125,7 +131,9 @@ func (c *S3TablesClient) DeleteTableBucket(arn string) error { if resp.StatusCode != http.StatusOK { var errResp s3tables.S3TablesError - json.NewDecoder(resp.Body).Decode(&errResp) + if err := json.NewDecoder(resp.Body).Decode(&errResp); err != nil { + return fmt.Errorf("DeleteTableBucket failed with status %d and could not decode error response: %v", resp.StatusCode, err) + } return fmt.Errorf("DeleteTableBucket failed: %s - %s", errResp.Type, errResp.Message) } @@ -148,7 +156,9 @@ func (c *S3TablesClient) CreateNamespace(bucketARN string, namespace []string) ( if resp.StatusCode != http.StatusOK { var errResp s3tables.S3TablesError - json.NewDecoder(resp.Body).Decode(&errResp) + if err := json.NewDecoder(resp.Body).Decode(&errResp); err != nil { + return nil, fmt.Errorf("CreateNamespace failed with status %d and could not decode error response: %v", resp.StatusCode, err) + } return nil, fmt.Errorf("CreateNamespace failed: %s - %s", errResp.Type, errResp.Message) } @@ -471,7 +481,9 @@ func (c *S3TablesClient) UntagResource(resourceARN string, tagKeys []string) err if resp.StatusCode != http.StatusOK { var errResp s3tables.S3TablesError - json.NewDecoder(resp.Body).Decode(&errResp) + if err := json.NewDecoder(resp.Body).Decode(&errResp); err != nil { + return fmt.Errorf("UntagResource failed with status %d and could not decode error response: %v", resp.StatusCode, err) + } return fmt.Errorf("UntagResource failed: %s - %s", errResp.Type, errResp.Message) } diff --git a/test/s3tables/s3tables_integration_test.go b/test/s3tables/s3tables_integration_test.go index dffdc972b..735bc1b56 100644 --- a/test/s3tables/s3tables_integration_test.go +++ b/test/s3tables/s3tables_integration_test.go @@ -303,18 +303,34 @@ func startMiniCluster(t *testing.T) (*TestCluster, error) { if err != nil { return nil, fmt.Errorf("failed to find master port: %v", err) } + masterGrpcPort, err := findAvailablePort() + if err != nil { + return nil, fmt.Errorf("failed to find master grpc port: %v", err) + } volumePort, err := findAvailablePort() if err != nil { return nil, fmt.Errorf("failed to find volume port: %v", err) } + volumeGrpcPort, err := findAvailablePort() + if err != nil { + return nil, fmt.Errorf("failed to find volume grpc port: %v", err) + } filerPort, err := findAvailablePort() if err != nil { return nil, fmt.Errorf("failed to find filer port: %v", err) } + filerGrpcPort, err := findAvailablePort() + if err != nil { + return nil, fmt.Errorf("failed to find filer grpc port: %v", err) + } s3Port, err := findAvailablePort() if err != nil { return nil, fmt.Errorf("failed to find s3 port: %v", err) } + s3GrpcPort, err := findAvailablePort() + if err != nil { + return nil, fmt.Errorf("failed to find s3 grpc port: %v", err) + } // Create temporary directory for test data testDir := t.TempDir() @@ -366,9 +382,13 @@ func startMiniCluster(t *testing.T) (*TestCluster, error) { "weed", "-dir=" + testDir, "-master.port=" + strconv.Itoa(masterPort), + "-master.port.grpc=" + strconv.Itoa(masterGrpcPort), "-volume.port=" + strconv.Itoa(volumePort), + "-volume.port.grpc=" + strconv.Itoa(volumeGrpcPort), "-filer.port=" + strconv.Itoa(filerPort), + "-filer.port.grpc=" + strconv.Itoa(filerGrpcPort), "-s3.port=" + strconv.Itoa(s3Port), + "-s3.port.grpc=" + strconv.Itoa(s3GrpcPort), "-webdav.port=0", // Disable WebDAV "-admin.ui=false", // Disable admin UI "-master.volumeSizeLimitMB=32", // Small volumes for testing @@ -419,10 +439,12 @@ func (c *TestCluster) Stop() { c.wg.Wait() close(done) }() + timer := time.NewTimer(2 * time.Second) + defer timer.Stop() select { case <-done: // Goroutine finished - case <-time.After(2 * time.Second): + case <-timer.C: // Timeout - goroutine doesn't respond to context cancel }