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 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var errResp s3tables.S3TablesError
|
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)
|
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 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var errResp s3tables.S3TablesError
|
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)
|
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 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var errResp s3tables.S3TablesError
|
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)
|
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 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var errResp s3tables.S3TablesError
|
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)
|
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 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var errResp s3tables.S3TablesError
|
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)
|
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 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var errResp s3tables.S3TablesError
|
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)
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to find master port: %v", err)
|
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()
|
volumePort, err := findAvailablePort()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to find volume port: %v", err)
|
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()
|
filerPort, err := findAvailablePort()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to find filer port: %v", err)
|
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()
|
s3Port, err := findAvailablePort()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to find s3 port: %v", err)
|
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
|
// Create temporary directory for test data
|
||||||
testDir := t.TempDir()
|
testDir := t.TempDir()
|
||||||
|
|
||||||
@@ -366,9 +382,13 @@ func startMiniCluster(t *testing.T) (*TestCluster, error) {
|
|||||||
"weed",
|
"weed",
|
||||||
"-dir=" + testDir,
|
"-dir=" + testDir,
|
||||||
"-master.port=" + strconv.Itoa(masterPort),
|
"-master.port=" + strconv.Itoa(masterPort),
|
||||||
|
"-master.port.grpc=" + strconv.Itoa(masterGrpcPort),
|
||||||
"-volume.port=" + strconv.Itoa(volumePort),
|
"-volume.port=" + strconv.Itoa(volumePort),
|
||||||
|
"-volume.port.grpc=" + strconv.Itoa(volumeGrpcPort),
|
||||||
"-filer.port=" + strconv.Itoa(filerPort),
|
"-filer.port=" + strconv.Itoa(filerPort),
|
||||||
|
"-filer.port.grpc=" + strconv.Itoa(filerGrpcPort),
|
||||||
"-s3.port=" + strconv.Itoa(s3Port),
|
"-s3.port=" + strconv.Itoa(s3Port),
|
||||||
|
"-s3.port.grpc=" + strconv.Itoa(s3GrpcPort),
|
||||||
"-webdav.port=0", // Disable WebDAV
|
"-webdav.port=0", // Disable WebDAV
|
||||||
"-admin.ui=false", // Disable admin UI
|
"-admin.ui=false", // Disable admin UI
|
||||||
"-master.volumeSizeLimitMB=32", // Small volumes for testing
|
"-master.volumeSizeLimitMB=32", // Small volumes for testing
|
||||||
@@ -419,10 +439,12 @@ func (c *TestCluster) Stop() {
|
|||||||
c.wg.Wait()
|
c.wg.Wait()
|
||||||
close(done)
|
close(done)
|
||||||
}()
|
}()
|
||||||
|
timer := time.NewTimer(2 * time.Second)
|
||||||
|
defer timer.Stop()
|
||||||
select {
|
select {
|
||||||
case <-done:
|
case <-done:
|
||||||
// Goroutine finished
|
// Goroutine finished
|
||||||
case <-time.After(2 * time.Second):
|
case <-timer.C:
|
||||||
// Timeout - goroutine doesn't respond to context cancel
|
// Timeout - goroutine doesn't respond to context cancel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user