Skip to content

Commit 23d4bd7

Browse files
authored
feat: Heroku plugin v2 (#1745)
* feat: Heroku plugin v2
1 parent b28a70e commit 23d4bd7

File tree

174 files changed

+1787
-1283
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

174 files changed

+1787
-1283
lines changed
Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,44 @@
11
package client
22

33
import (
4+
"context"
45
"errors"
6+
"fmt"
57

6-
"github.com/cloudquery/cq-provider-sdk/provider/diag"
7-
"github.com/cloudquery/cq-provider-sdk/provider/schema"
8-
"github.com/hashicorp/go-hclog"
8+
"github.com/cloudquery/plugin-sdk/schema"
9+
"github.com/cloudquery/plugin-sdk/specs"
910
heroku "github.com/heroku/heroku-go/v5"
11+
"github.com/rs/zerolog"
1012
)
1113

14+
// Client is what you need to create and initialize in Configure.
15+
// It will be passed for each resource fetcher.
1216
type Client struct {
13-
// This is a client that you need to create and initialize in Configure
14-
// It will be passed for each resource fetcher.
15-
logger hclog.Logger
17+
logger zerolog.Logger
1618
Heroku *heroku.Service
1719
}
1820

19-
func (c *Client) Logger() hclog.Logger {
20-
return c.logger
21+
func (c *Client) Logger() *zerolog.Logger {
22+
return &c.logger
2123
}
2224

23-
func Configure(logger hclog.Logger, config interface{}) (schema.ClientMeta, diag.Diagnostics) {
24-
providerConfig := config.(*Config)
25-
// validate provider config
26-
if providerConfig.Token == "" {
27-
return nil, diag.FromError(errors.New("missing access token in configuration"), diag.ACCESS)
25+
func Configure(ctx context.Context, l zerolog.Logger, s specs.Source) (schema.ClientMeta, error) {
26+
var herokuSpec Spec
27+
if err := s.UnmarshalSpec(&herokuSpec); err != nil {
28+
return nil, fmt.Errorf("failed to unmarshal heroku spec: %w", err)
2829
}
2930

30-
heroku.DefaultTransport.BearerToken = providerConfig.Token
31+
// validate Heroku spec
32+
if herokuSpec.Token == "" {
33+
return nil, errors.New("missing access token in configuration")
34+
}
35+
36+
heroku.DefaultTransport.BearerToken = herokuSpec.Token
3137
client := heroku.DefaultClient
3238
client.Transport = Paginator{transport: client.Transport}
3339
h := heroku.NewService(client)
3440
return &Client{
35-
logger: logger,
41+
logger: l,
3642
Heroku: h,
3743
}, nil
3844
}

plugins/source/heroku/client/spec.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
// Spec defines Heroku source plugin Spec
1313
type Spec struct {
14-
Token []string `yaml:"token,omitempty" json:"token"`
14+
Token string `yaml:"token,omitempty" json:"token"`
1515

1616
BaseDelay int `yaml:"backoff_base_delay,omitempty" hcl:"backoff_base_delay,optional" default:"-1"`
1717
Multiplier float64 `yaml:"backoff_multiplier,omitempty" hcl:"backoff_multiplier,optional"`
Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,55 @@
11
package client
22

33
import (
4+
"context"
5+
"fmt"
6+
"os"
47
"testing"
8+
"time"
59

6-
"github.com/cloudquery/cq-provider-sdk/logging"
7-
"github.com/cloudquery/cq-provider-sdk/provider"
8-
"github.com/cloudquery/cq-provider-sdk/provider/diag"
9-
"github.com/cloudquery/cq-provider-sdk/provider/schema"
10-
providertest "github.com/cloudquery/cq-provider-sdk/provider/testing"
11-
"github.com/hashicorp/go-hclog"
10+
"github.com/cloudquery/plugin-sdk/plugins"
11+
"github.com/cloudquery/plugin-sdk/schema"
12+
"github.com/cloudquery/plugin-sdk/specs"
1213
heroku "github.com/heroku/heroku-go/v5"
14+
"github.com/rs/zerolog"
1315
)
1416

1517
type TestOptions struct{}
1618

17-
func HerokuMockTestHelper(t *testing.T, table *schema.Table, builder func() (*heroku.Service, error), _ TestOptions) {
18-
table.IgnoreInTests = false
19+
func MockTestHelper(t *testing.T, table *schema.Table, createService func() (*heroku.Service, error), options TestOptions) {
1920
t.Helper()
20-
cfg := ``
2121

22-
hk, err := builder()
23-
if err != nil {
24-
t.Fatalf("error: %v", err)
22+
table.IgnoreInTests = false
23+
24+
newTestExecutionClient := func(ctx context.Context, _ zerolog.Logger, spec specs.Source) (schema.ClientMeta, error) {
25+
svc, err := createService()
26+
if err != nil {
27+
return nil, fmt.Errorf("failed to createService %w", err)
28+
}
29+
var herokuSpec Spec
30+
if err := spec.UnmarshalSpec(&herokuSpec); err != nil {
31+
return nil, fmt.Errorf("failed to unmarshal gcp spec: %w", err)
32+
}
33+
l := zerolog.New(zerolog.NewTestWriter(t)).Output(
34+
zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.StampMicro},
35+
).Level(zerolog.DebugLevel).With().Timestamp().Logger()
36+
c := &Client{
37+
logger: l,
38+
Heroku: svc,
39+
}
40+
41+
return c, nil
2542
}
26-
providertest.TestResource(t, providertest.ResourceTestCase{
27-
Provider: &provider.Provider{
28-
Name: "heroku_mock_test_provider",
29-
Version: "development",
30-
Configure: func(logger hclog.Logger, i interface{}) (schema.ClientMeta, diag.Diagnostics) {
31-
c := Client{
32-
logger: logging.New(&hclog.LoggerOptions{
33-
Level: hclog.Warn,
34-
}),
35-
Heroku: hk,
36-
}
37-
return &c, nil
38-
},
39-
ResourceMap: map[string]*schema.Table{
40-
"test_resource": table,
41-
},
42-
Config: func() provider.Config {
43-
return &Config{}
44-
},
43+
44+
p := plugins.NewSourcePlugin(
45+
table.Name,
46+
"dev",
47+
[]*schema.Table{
48+
table,
4549
},
46-
Config: cfg,
47-
SkipIgnoreInTest: true,
50+
newTestExecutionClient)
51+
plugins.TestSourcePluginSync(t, p, specs.Source{
52+
Name: "dev",
53+
Tables: []string{table.Name},
4854
})
4955
}

plugins/source/heroku/codegen/account_feature.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/heroku/codegen/account_feature_mock_test.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/heroku/codegen/add_on.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/heroku/codegen/add_on_attachment.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/heroku/codegen/add_on_attachment_mock_test.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/heroku/codegen/add_on_config.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/heroku/codegen/add_on_config_mock_test.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)