Browse Source

s3tables: improve integration test stability and error reporting

pull/8147/head
Chris Lu 4 days ago
parent
commit
6cdd34da77
  1. 24
      test/s3tables/client.go
  2. 24
      test/s3tables/s3tables_integration_test.go

24
test/s3tables/client.go

@ -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)
} }

24
test/s3tables/s3tables_integration_test.go

@ -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
} }

Loading…
Cancel
Save