Skip to content

Commit

Permalink
Merge pull request #1133 from jimhawkridge/jhawkridge/DS-12892_add_wo…
Browse files Browse the repository at this point in the history
…rkers_analytics_engine_binding
  • Loading branch information
jacobbednarz committed Nov 24, 2022
2 parents 677a900 + d086ba1 commit 286c0cd
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .changelog/1133.txt
@@ -0,0 +1,3 @@
```release-note:enhancement
workers: Support for Workers Analytics Engine bindings
```
29 changes: 29 additions & 0 deletions workers.go
Expand Up @@ -111,6 +111,8 @@ const (
WorkerServiceBindingType WorkerBindingType = "service"
// WorkerR2BucketBindingType is the type for R2 bucket bindings.
WorkerR2BucketBindingType WorkerBindingType = "r2_bucket"
// WorkerAnalyticsEngineBindingType is the type for Analytics Engine dataset bindings.
WorkerAnalyticsEngineBindingType WorkerBindingType = "analytics_engine"
)

// WorkerBindingListItem a struct representing an individual binding in a list of bindings.
Expand Down Expand Up @@ -355,6 +357,28 @@ func (b WorkerR2BucketBinding) serialize(bindingName string) (workerBindingMeta,
}, nil, nil
}

// WorkerAnalyticsEngineBinding is a binding to an Analytics Engine dataset.
type WorkerAnalyticsEngineBinding struct {
Dataset string
}

// Type returns the type of the binding.
func (b WorkerAnalyticsEngineBinding) Type() WorkerBindingType {
return WorkerAnalyticsEngineBindingType
}

func (b WorkerAnalyticsEngineBinding) serialize(bindingName string) (workerBindingMeta, workerBindingBodyWriter, error) {
if b.Dataset == "" {
return nil, nil, fmt.Errorf(`Dataset for binding "%s" cannot be empty`, bindingName)
}

return workerBindingMeta{
"name": bindingName,
"type": b.Type(),
"dataset": b.Dataset,
}, nil, nil
}

// Each binding that adds a part to the multipart form body will need
// a unique part name so we just generate a random 128bit hex string.
func getRandomPartName() string {
Expand Down Expand Up @@ -545,6 +569,11 @@ func (api *API) ListWorkerBindings(ctx context.Context, requestParams *WorkerReq
bindingListItem.Binding = WorkerR2BucketBinding{
BucketName: bucketName,
}
case WorkerAnalyticsEngineBindingType:
dataset := jsonBinding["dataset"].(string)
bindingListItem.Binding = WorkerAnalyticsEngineBinding{
Dataset: dataset,
}
default:
bindingListItem.Binding = WorkerInheritBinding{}
}
Expand Down
15 changes: 14 additions & 1 deletion workers_test.go
Expand Up @@ -154,6 +154,11 @@ const (
"name": "MY_BUCKET",
"type": "r2_bucket",
"bucket_name": "bucket"
},
{
"name": "MY_DATASET",
"type": "analytics_engine",
"dataset": "my_dataset"
}
],
"success": true,
Expand Down Expand Up @@ -1216,7 +1221,7 @@ func TestWorkers_ListWorkerBindingsMultiScript(t *testing.T) {
assert.NoError(t, err)

assert.Equal(t, successResponse, res.Response)
assert.Equal(t, 7, len(res.BindingList))
assert.Equal(t, 8, len(res.BindingList))

assert.Equal(t, res.BindingList[0], WorkerBindingListItem{
Name: "MY_KV",
Expand Down Expand Up @@ -1270,6 +1275,14 @@ func TestWorkers_ListWorkerBindingsMultiScript(t *testing.T) {
},
})
assert.Equal(t, WorkerR2BucketBindingType, res.BindingList[6].Binding.Type())

assert.Equal(t, res.BindingList[7], WorkerBindingListItem{
Name: "MY_DATASET",
Binding: WorkerAnalyticsEngineBinding{
Dataset: "my_dataset",
},
})
assert.Equal(t, WorkerAnalyticsEngineBindingType, res.BindingList[7].Binding.Type())
}

func TestWorkers_UpdateWorkerRouteErrorsWhenMixingSingleAndMultiScriptProperties(t *testing.T) {
Expand Down

0 comments on commit 286c0cd

Please sign in to comment.