From 8d306c72b81ffa8385ea0ab487f2ca3f520357fd Mon Sep 17 00:00:00 2001 From: Harry Rackmil Date: Wed, 15 Jan 2025 16:17:27 -0800 Subject: [PATCH 1/4] add example of skeleton code from codegen --- .../source_config_schemas/skeleton.json | 13 ++++++++ .../source_config_tests/skeleton_test.go | 33 +++++++++++++++++++ .../data_provider/sources/skeleton/config.go | 8 +++++ .../sources/skeleton/data_source.go | 24 ++++++++++++++ .../sources/skeleton/data_source_test.go | 9 +++++ .../data_provider/sources/skeleton/init.go | 30 +++++++++++++++++ 6 files changed, 117 insertions(+) create mode 100644 apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json create mode 100644 apps/lib/data_provider/configs/source_config_tests/skeleton_test.go create mode 100644 apps/lib/data_provider/sources/skeleton/config.go create mode 100644 apps/lib/data_provider/sources/skeleton/data_source.go create mode 100644 apps/lib/data_provider/sources/skeleton/data_source_test.go create mode 100644 apps/lib/data_provider/sources/skeleton/init.go diff --git a/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json b/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json new file mode 100644 index 00000000..3b2efc9b --- /dev/null +++ b/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json @@ -0,0 +1,13 @@ +{ + "$id": "/resources/source_config_schemas/skeleton", + "type": "object", + "properties": { + "dataSource": { + "type": "string", + "const": "skeleton" + } + // TODO: add all other possible fields from your config object + }, + "required": ["dataSourceId"], // TODO: add all other required fields here + "additionalProperties": false +} \ No newline at end of file diff --git a/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go b/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go new file mode 100644 index 00000000..bda436d9 --- /dev/null +++ b/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go @@ -0,0 +1,33 @@ +package config + +import ( + "testing" + + "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/configs" + "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/sources/skeleton" + "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/utils" + "github.com/stretchr/testify/assert" +) + +func TestValidSkeletonConfig(t *testing.T) { + + // TODO: set this to a valid config string using a feed from your new source + validConfig := `{}` + + config, err := configs.LoadConfigFromBytes([]byte(validConfig)) + assert.NoError(t, err) + + assert.Equal(t, 1, len(config.Sources)) + + sourceConfig := config.Sources[0] + + dataSourceId, err := utils.GetDataSourceId(sourceConfig.Config) + assert.NoError(t, err) + assert.Equal(t, skeleton.SkeletonDataSourceId, dataSourceId) + + sourceSpecificConfig, err := skeleton.GetSourceSpecificConfig(sourceConfig) + assert.NoError(t, err) + + // TODO: write some asserts to check that the fields on sourceSpecificConfig have the values you'd expect + panic("implement me") +} diff --git a/apps/lib/data_provider/sources/skeleton/config.go b/apps/lib/data_provider/sources/skeleton/config.go new file mode 100644 index 00000000..25e29db2 --- /dev/null +++ b/apps/lib/data_provider/sources/skeleton/config.go @@ -0,0 +1,8 @@ +package skeleton + +import "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/types" + +type SkeletonConfig struct { + DataSource types.DataSourceId `json:"dataSource"` // required for all Data Provider Sources + // TODO: Add any additional config parameters needed to pull a particular data feed +} diff --git a/apps/lib/data_provider/sources/skeleton/data_source.go b/apps/lib/data_provider/sources/skeleton/data_source.go new file mode 100644 index 00000000..4f0b7b91 --- /dev/null +++ b/apps/lib/data_provider/sources/skeleton/data_source.go @@ -0,0 +1,24 @@ +package skeleton + +import ( + "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/types" +) + +type skeletonDataSource struct { + // TODO: set any necessary parameters +} + +func newSkeletonDataSource(sourceConfig types.DataProviderSourceConfig) *skeletonDataSource { + skeletonConfig, err := GetSourceSpecificConfig(sourceConfig) + if err != nil { + panic("unable to decode config: " + err.Error()) + } + + // TODO: add any necessary initialization code + panic("implement me") +} + +func (r skeletonDataSource) RunDataSource(updatesCh chan types.DataSourceUpdateMap) { + // TODO: Write all logic to fetch datapoints and add to updatesCh + panic("implement me") +} diff --git a/apps/lib/data_provider/sources/skeleton/data_source_test.go b/apps/lib/data_provider/sources/skeleton/data_source_test.go new file mode 100644 index 00000000..388919cc --- /dev/null +++ b/apps/lib/data_provider/sources/skeleton/data_source_test.go @@ -0,0 +1,9 @@ +package skeleton + +import ( + "testing" +) + +func TestSkeletonDataSource(t *testing.T) { + // TODO: write some unit tests for your data source +} diff --git a/apps/lib/data_provider/sources/skeleton/init.go b/apps/lib/data_provider/sources/skeleton/init.go new file mode 100644 index 00000000..1e99974a --- /dev/null +++ b/apps/lib/data_provider/sources/skeleton/init.go @@ -0,0 +1,30 @@ +package skeleton + +import ( + "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/sources" + "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/types" + "github.com/Stork-Oracle/stork-external/apps/lib/data_provider/utils" + "github.com/mitchellh/mapstructure" +) + +var SkeletonDataSourceId types.DataSourceId = types.DataSourceId(utils.GetCurrentDirName()) + +type skeletonDataSourceFactory struct{} + +func (f *skeletonDataSourceFactory) Build(sourceConfig types.DataProviderSourceConfig) types.DataSource { + return newSkeletonDataSource(sourceConfig) +} + +func init() { + sources.RegisterDataSourceFactory(SkeletonDataSourceId, &skeletonDataSourceFactory{}) +} + +// assert we're satisfying our interfaces +var _ types.DataSource = (*skeletonDataSource)(nil) +var _ types.DataSourceFactory = (*skeletonDataSourceFactory)(nil) + +func GetSourceSpecificConfig(sourceConfig types.DataProviderSourceConfig) (SkeletonConfig, error) { + var config SkeletonConfig + err := mapstructure.Decode(sourceConfig.Config, &config) + return config, err +} From fac43130c01eb3221bc6847400a3b8c091d74d0e Mon Sep 17 00:00:00 2001 From: Harry Rackmil Date: Wed, 15 Jan 2025 16:18:11 -0800 Subject: [PATCH 2/4] fix --- .../configs/resources/source_config_schemas/skeleton.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json b/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json index 3b2efc9b..e3578258 100644 --- a/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json +++ b/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json @@ -8,6 +8,6 @@ } // TODO: add all other possible fields from your config object }, - "required": ["dataSourceId"], // TODO: add all other required fields here + "required": ["dataSource"], // TODO: add all other required fields here "additionalProperties": false } \ No newline at end of file From 9b3abeca5a5cdeeda11660ac15f0ed69cb0b1c01 Mon Sep 17 00:00:00 2001 From: Harry Rackmil Date: Thu, 16 Jan 2025 10:24:05 -0800 Subject: [PATCH 3/4] code compiles --- .../configs/resources/source_config_schemas/skeleton.json | 3 +-- .../configs/source_config_tests/skeleton_test.go | 3 ++- apps/lib/data_provider/sources/skeleton/data_source.go | 7 +++++-- .../lib/data_provider/sources/skeleton/data_source_test.go | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json b/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json index e3578258..6b76f1b0 100644 --- a/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json +++ b/apps/lib/data_provider/configs/resources/source_config_schemas/skeleton.json @@ -6,8 +6,7 @@ "type": "string", "const": "skeleton" } - // TODO: add all other possible fields from your config object }, - "required": ["dataSource"], // TODO: add all other required fields here + "required": ["dataSource"], "additionalProperties": false } \ No newline at end of file diff --git a/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go b/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go index bda436d9..9cb54937 100644 --- a/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go +++ b/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go @@ -27,7 +27,8 @@ func TestValidSkeletonConfig(t *testing.T) { sourceSpecificConfig, err := skeleton.GetSourceSpecificConfig(sourceConfig) assert.NoError(t, err) + assert.NotNil(t, sourceSpecificConfig) // TODO: write some asserts to check that the fields on sourceSpecificConfig have the values you'd expect - panic("implement me") + t.Fatalf("implement me") } diff --git a/apps/lib/data_provider/sources/skeleton/data_source.go b/apps/lib/data_provider/sources/skeleton/data_source.go index 4f0b7b91..1fd12861 100644 --- a/apps/lib/data_provider/sources/skeleton/data_source.go +++ b/apps/lib/data_provider/sources/skeleton/data_source.go @@ -5,6 +5,7 @@ import ( ) type skeletonDataSource struct { + SkeletonConfig SkeletonConfig // TODO: set any necessary parameters } @@ -15,10 +16,12 @@ func newSkeletonDataSource(sourceConfig types.DataProviderSourceConfig) *skeleto } // TODO: add any necessary initialization code - panic("implement me") + return &skeletonDataSource{ + SkeletonConfig: skeletonConfig, + } } func (r skeletonDataSource) RunDataSource(updatesCh chan types.DataSourceUpdateMap) { - // TODO: Write all logic to fetch datapoints and add to updatesCh + // TODO: Write all logic to fetch data points and report them to updatesCh panic("implement me") } diff --git a/apps/lib/data_provider/sources/skeleton/data_source_test.go b/apps/lib/data_provider/sources/skeleton/data_source_test.go index 388919cc..d5a5964e 100644 --- a/apps/lib/data_provider/sources/skeleton/data_source_test.go +++ b/apps/lib/data_provider/sources/skeleton/data_source_test.go @@ -6,4 +6,5 @@ import ( func TestSkeletonDataSource(t *testing.T) { // TODO: write some unit tests for your data source + t.Fatalf("implement me") } From 1227b389d952485534152fbb98fb2ec2c529eb3c Mon Sep 17 00:00:00 2001 From: Harry Rackmil Date: Thu, 16 Jan 2025 10:28:24 -0800 Subject: [PATCH 4/4] more test code --- .../configs/source_config_tests/skeleton_test.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go b/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go index 9cb54937..fd3fc6fd 100644 --- a/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go +++ b/apps/lib/data_provider/configs/source_config_tests/skeleton_test.go @@ -12,7 +12,17 @@ import ( func TestValidSkeletonConfig(t *testing.T) { // TODO: set this to a valid config string using a feed from your new source - validConfig := `{}` + validConfig := ` + { + "sources": [ + { + "id": "MY_VALUE", + "config": { + "dataSource": "skeleton" + } + } + ] + }` config, err := configs.LoadConfigFromBytes([]byte(validConfig)) assert.NoError(t, err)