s3tables: improve integration test stability and error reporting
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user