Skip to content
This repository has been archived by the owner on Aug 12, 2022. It is now read-only.

Commit

Permalink
Address review feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
Michel Vocks committed Aug 19, 2021
1 parent 2831d0c commit 1d30190
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 6 deletions.
9 changes: 4 additions & 5 deletions provider/schema/execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,16 +222,15 @@ func (e *ExecutionData) resolveResourceValues(ctx context.Context, meta ClientMe
defer func() {
if r := recover(); r != nil {
e.Logger.Error("resolve resource recovered from panic", "table", e.Table.Name, "stack", string(debug.Stack()))
err = fmt.Errorf("failed resolve resource. Error: %s", r)
if partialFetchErr := e.checkPartialFetchError(err, resource, "resolve resource recovered from panic"); partialFetchErr != nil {
if partialFetchErr := e.checkPartialFetchError(fmt.Errorf("failed resolve resource. Error: %s", r), resource, "resolve resource recovered from panic"); partialFetchErr != nil {
err = partialFetchErr
} else {
err = nil
}
}
}()
if err = e.resolveColumns(ctx, meta, resource, resource.table.Columns); err != nil {
return err
if partialFetchErr := e.checkPartialFetchError(err, resource, "resolve column error"); partialFetchErr != nil {
return partialFetchErr
}
}
// call PostRowResolver if defined after columns have been resolved
if resource.table.PostResourceResolver != nil {
Expand Down
62 changes: 61 additions & 1 deletion provider/schema/execution_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ func TestExecutionData_ResolveTable(t *testing.T) {
assert.Equal(t, []interface{}{"other", "name_no_prefix", "prefix_name", expectedResource.cqId, expectedResource.Get("meta"), 1}, values)
})

t.Run("test partial fetch", func(t *testing.T) {
t.Run("test partial fetch post resource resolver", func(t *testing.T) {
mockDb := new(databaseMock)
execDefault := NewExecutionData(mockDb, logger, testDefaultsTable, false, nil, true)
mockDb.On("CopyFrom", mock.Anything, mock.Anything, false, mock.Anything).Return(nil)
Expand All @@ -336,6 +336,66 @@ func TestExecutionData_ResolveTable(t *testing.T) {
assert.Len(t, execDefault.PartialFetchFailureResult, 1)
assert.Equal(t, "post resource resolver failed: random failure", execDefault.PartialFetchFailureResult[0].Error)
})

t.Run("test partial fetch resolver", func(t *testing.T) {
mockDb := new(databaseMock)
execDefault := NewExecutionData(mockDb, logger, testDefaultsTable, false, nil, true)
mockDb.On("CopyFrom", mock.Anything, mock.Anything, false, mock.Anything).Return(nil)
testDefaultsTable.Resolver = func(ctx context.Context, meta ClientMeta, parent *Resource, res chan interface{}) error {
res <- testDefaultsTableData{Name: nil}
return fmt.Errorf("random failure")
}
var expectedResource *Resource
testDefaultsTable.PostResourceResolver = func(ctx context.Context, meta ClientMeta, parent *Resource) error {
expectedResource = parent
return nil
}
_, err := execDefault.ResolveTable(context.Background(), mockedClient, nil)
assert.Nil(t, err)
assert.Equal(t, expectedResource.data["name"], "defaultValue")
assert.Len(t, execDefault.PartialFetchFailureResult, 1)
assert.Equal(t, "table resolve error: random failure", execDefault.PartialFetchFailureResult[0].Error)
})

t.Run("test partial fetch resolver panic", func(t *testing.T) {
mockDb := new(databaseMock)
execDefault := NewExecutionData(mockDb, logger, testDefaultsTable, false, nil, true)
mockDb.On("CopyFrom", mock.Anything, mock.Anything, false, mock.Anything).Return(nil)
testDefaultsTable.Resolver = func(ctx context.Context, meta ClientMeta, parent *Resource, res chan interface{}) error {
res <- testDefaultsTableData{Name: nil}
panic("test panic")
}
var expectedResource *Resource
testDefaultsTable.PostResourceResolver = func(ctx context.Context, meta ClientMeta, parent *Resource) error {
expectedResource = parent
return nil
}
_, err := execDefault.ResolveTable(context.Background(), mockedClient, nil)
assert.Nil(t, err)
assert.Equal(t, expectedResource.data["name"], "defaultValue")
assert.Len(t, execDefault.PartialFetchFailureResult, 1)
assert.Equal(t, "table resolve error: failed table test_table fetch. Error: test panic", execDefault.PartialFetchFailureResult[0].Error)
})

t.Run("test partial fetch post resource resolver panic", func(t *testing.T) {
mockDb := new(databaseMock)
execDefault := NewExecutionData(mockDb, logger, testDefaultsTable, false, nil, true)
mockDb.On("CopyFrom", mock.Anything, mock.Anything, false, mock.Anything).Return(nil)
testDefaultsTable.Resolver = func(ctx context.Context, meta ClientMeta, parent *Resource, res chan interface{}) error {
res <- testDefaultsTableData{Name: nil}
return nil
}
var expectedResource *Resource
testDefaultsTable.PostResourceResolver = func(ctx context.Context, meta ClientMeta, parent *Resource) error {
expectedResource = parent
panic("test panic")
}
_, err := execDefault.ResolveTable(context.Background(), mockedClient, nil)
assert.Nil(t, err)
assert.Equal(t, expectedResource.data["name"], "defaultValue")
assert.Len(t, execDefault.PartialFetchFailureResult, 1)
assert.Equal(t, "resolve resource recovered from panic: failed resolve resource. Error: test panic", execDefault.PartialFetchFailureResult[0].Error)
})
}

// ClientMeta is an autogenerated mock type for the ClientMeta type
Expand Down

0 comments on commit 1d30190

Please sign in to comment.