Skip to content

Commit 660e58a

Browse files
committed
Add region
1 parent b5d368d commit 660e58a

7 files changed

Lines changed: 140 additions & 21 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ require (
4343
github.com/smartcontractkit/chain-selectors v1.0.89
4444
github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10
4545
github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4
46-
github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260413164538-e2dad579edbc
46+
github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260421194300-2c8da85a337a
4747
github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b
4848
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b
4949
github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0

go.sum

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

pkg/workflows/wasm/host/standard_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ func TestStandardTeeRuntime(t *testing.T) {
559559

560560
_, err := m.Execute(t.Context(), test.req, mockExecutionHelper)
561561
require.NoError(t, err)
562-
require.True(t, proto.Equal(seenTeeRequirement, &sdk.Tee{Type: &sdk.Tee_TypeSelection{TypeSelection: &sdk.TeeTypeSelection{Types: []sdk.TeeType{sdk.TeeType_TEE_TYPE_AWS_NITRO}}}}))
562+
require.True(t, proto.Equal(seenTeeRequirement, &sdk.Tee{Type: &sdk.Tee_TypeSelection{TypeSelection: &sdk.TeeTypeSelection{Types: []*sdk.TeeTypeAndRegions{{Type: sdk.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"us-west-2"}}}}}}))
563563
})
564564
}
565565
}

pkg/workflows/wasm/host/standard_tests/tee_runtime/main_wasip1.go

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

1212
func main() {
1313
req := rawsdk.GetRequest()
14-
requirements := &sdk.Requirements{Tee: &sdk.Tee{Type: &sdk.Tee_TypeSelection{TypeSelection: &sdk.TeeTypeSelection{Types: []sdk.TeeType{sdk.TeeType_TEE_TYPE_AWS_NITRO}}}}}
14+
requirements := &sdk.Requirements{Tee: &sdk.Tee{Type: &sdk.Tee_TypeSelection{TypeSelection: &sdk.TeeTypeSelection{Types: []*sdk.TeeTypeAndRegions{{Type: sdk.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"us-west-2"}}}}}}}
1515
bytes, err := proto.Marshal(requirements)
1616
if err != nil {
1717
rawsdk.SendError(err)

pkg/workflows/wasm/host/tee_provider.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,35 @@ package host
22

33
import sdkpb "github.com/smartcontractkit/chainlink-protos/cre/go/sdk"
44

5-
type TeeProvider sdkpb.TeeType
5+
type teeProvider struct {
6+
sdkpb.TeeType
7+
regions map[string]bool
8+
}
69

7-
func (t TeeProvider) Provides(tee *sdkpb.Tee) bool {
10+
func NewTeeProvider(tpe sdkpb.TeeType, regions []string) func(tee *sdkpb.Tee) bool {
11+
supportedRegions := map[string]bool{}
12+
for _, region := range regions {
13+
supportedRegions[region] = true
14+
}
15+
return (&teeProvider{TeeType: tpe, regions: supportedRegions}).Provides
16+
}
17+
18+
func (t *teeProvider) Provides(tee *sdkpb.Tee) bool {
819
switch teet := tee.Type.(type) {
920
case *sdkpb.Tee_Any:
1021
return true
1122
case *sdkpb.Tee_TypeSelection:
1223
for _, selection := range teet.TypeSelection.Types {
13-
if selection == sdkpb.TeeType(t) {
14-
return true
24+
if selection.Type == t.TeeType {
25+
if len(selection.Regions) == 0 {
26+
return true
27+
}
28+
29+
for _, region := range selection.Regions {
30+
if t.regions[region] {
31+
return true
32+
}
33+
}
1534
}
1635
}
1736
}

pkg/workflows/wasm/host/tee_provider_test.go

Lines changed: 109 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,132 @@ import (
99
sdkpb "github.com/smartcontractkit/chainlink-protos/cre/go/sdk"
1010
)
1111

12-
func TestTeeProvider(t *testing.T) {
12+
func TestNewTeeProvider(t *testing.T) {
1313
t.Parallel()
1414
t.Run("matches any", func(t *testing.T) {
15-
p := TeeProvider(sdkpb.TeeType_TEE_TYPE_AWS_NITRO)
15+
p := teeProvider{TeeType: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, regions: map[string]bool{"us-west-2": true}}
1616
tee := &sdkpb.Tee{Type: &sdkpb.Tee_Any{Any: &emptypb.Empty{}}}
1717
assert.True(t, p.Provides(tee))
1818
})
1919

20-
t.Run("matches type selection", func(t *testing.T) {
21-
p := TeeProvider(sdkpb.TeeType_TEE_TYPE_AWS_NITRO)
20+
t.Run("matches type selection with no region constraint", func(t *testing.T) {
21+
p := teeProvider{TeeType: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, regions: map[string]bool{"us-west-2": true}}
2222
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
2323
TypeSelection: &sdkpb.TeeTypeSelection{
24-
Types: []sdkpb.TeeType{sdkpb.TeeType(99), sdkpb.TeeType_TEE_TYPE_AWS_NITRO},
24+
Types: []*sdkpb.TeeTypeAndRegions{
25+
{Type: sdkpb.TeeType(99)},
26+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO},
27+
},
2528
},
2629
}}
2730
assert.True(t, p.Provides(tee))
2831
})
2932

30-
t.Run("does not match any type", func(t *testing.T) {
31-
// Use a cast to an unknown value so we don't need a second enum variant.
32-
p := TeeProvider(sdkpb.TeeType(99))
33+
t.Run("does not match different types", func(t *testing.T) {
34+
p := teeProvider{TeeType: sdkpb.TeeType(99)}
3335
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
3436
TypeSelection: &sdkpb.TeeTypeSelection{
35-
Types: []sdkpb.TeeType{sdkpb.TeeType_TEE_TYPE_AWS_NITRO},
37+
Types: []*sdkpb.TeeTypeAndRegions{
38+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO},
39+
},
3640
},
3741
}}
3842
assert.False(t, p.Provides(tee))
3943
})
44+
45+
t.Run("matches type and region", func(t *testing.T) {
46+
p := teeProvider{TeeType: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, regions: map[string]bool{"us-west-2": true}}
47+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
48+
TypeSelection: &sdkpb.TeeTypeSelection{
49+
Types: []*sdkpb.TeeTypeAndRegions{
50+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"us-west-2"}},
51+
},
52+
},
53+
}}
54+
assert.True(t, p.Provides(tee))
55+
})
56+
57+
t.Run("matches type but not region", func(t *testing.T) {
58+
p := teeProvider{TeeType: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, regions: map[string]bool{"us-west-2": true}}
59+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
60+
TypeSelection: &sdkpb.TeeTypeSelection{
61+
Types: []*sdkpb.TeeTypeAndRegions{
62+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"eu-west-1"}},
63+
},
64+
},
65+
}}
66+
assert.False(t, p.Provides(tee))
67+
})
68+
69+
t.Run("matches one of multiple requested regions", func(t *testing.T) {
70+
p := teeProvider{TeeType: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, regions: map[string]bool{"eu-west-1": true}}
71+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
72+
TypeSelection: &sdkpb.TeeTypeSelection{
73+
Types: []*sdkpb.TeeTypeAndRegions{
74+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"us-west-2", "eu-west-1"}},
75+
},
76+
},
77+
}}
78+
assert.True(t, p.Provides(tee))
79+
})
80+
81+
t.Run("provider has multiple regions and one matches", func(t *testing.T) {
82+
p := teeProvider{
83+
TeeType: sdkpb.TeeType_TEE_TYPE_AWS_NITRO,
84+
regions: map[string]bool{"us-west-2": true, "us-east-1": true},
85+
}
86+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
87+
TypeSelection: &sdkpb.TeeTypeSelection{
88+
Types: []*sdkpb.TeeTypeAndRegions{
89+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"us-east-1"}},
90+
},
91+
},
92+
}}
93+
assert.True(t, p.Provides(tee))
94+
})
95+
96+
t.Run("no matching region across multiple provider regions", func(t *testing.T) {
97+
p := teeProvider{
98+
TeeType: sdkpb.TeeType_TEE_TYPE_AWS_NITRO,
99+
regions: map[string]bool{"us-west-2": true, "us-east-1": true},
100+
}
101+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
102+
TypeSelection: &sdkpb.TeeTypeSelection{
103+
Types: []*sdkpb.TeeTypeAndRegions{
104+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"ap-southeast-1"}},
105+
},
106+
},
107+
}}
108+
assert.False(t, p.Provides(tee))
109+
})
110+
111+
t.Run("type mismatch ignores region match", func(t *testing.T) {
112+
p := teeProvider{TeeType: sdkpb.TeeType(99), regions: map[string]bool{"us-west-2": true}}
113+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
114+
TypeSelection: &sdkpb.TeeTypeSelection{
115+
Types: []*sdkpb.TeeTypeAndRegions{
116+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"us-west-2"}},
117+
},
118+
},
119+
}}
120+
assert.False(t, p.Provides(tee))
121+
})
122+
123+
t.Run("matches any tee", func(t *testing.T) {
124+
provides := NewTeeProvider(sdkpb.TeeType_TEE_TYPE_AWS_NITRO, []string{"us-west-2"})
125+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_Any{Any: &emptypb.Empty{}}}
126+
assert.True(t, provides(tee))
127+
})
128+
129+
t.Run("returns a function that checks regions", func(t *testing.T) {
130+
provides := NewTeeProvider(sdkpb.TeeType_TEE_TYPE_AWS_NITRO, []string{"us-west-2"})
131+
tee := &sdkpb.Tee{Type: &sdkpb.Tee_TypeSelection{
132+
TypeSelection: &sdkpb.TeeTypeSelection{
133+
Types: []*sdkpb.TeeTypeAndRegions{
134+
{Type: sdkpb.TeeType_TEE_TYPE_AWS_NITRO, Regions: []string{"eu-west-1"}},
135+
},
136+
},
137+
}}
138+
assert.False(t, provides(tee))
139+
})
40140
}

pkg/workflows/wasm/host/wasm_nodag_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,15 +256,15 @@ func Test_NoDAG_RequirementsNotMet(t *testing.T) {
256256

257257
expected := &sdk.Requirements{
258258
Tee: &sdk.Tee{Type: &sdk.Tee_TypeSelection{
259-
TypeSelection: &sdk.TeeTypeSelection{Types: []sdk.TeeType{sdk.TeeType_TEE_TYPE_AWS_NITRO}}},
260-
},
259+
TypeSelection: &sdk.TeeTypeSelection{Types: []*sdk.TeeTypeAndRegions{{Type: sdk.TeeType_TEE_TYPE_AWS_NITRO}}},
260+
}},
261261
}
262262
assert.True(t, proto.Equal(expected, (*sdk.Requirements)(rerunErr)))
263263
}
264264

265265
func runTeeFailureTest(t *testing.T, teeType sdk.TeeType, binary []byte) error {
266266
cfg := defaultNoDAGModCfg(t)
267-
cfg.RequirementsHandler.Tee = TeeProvider(teeType).Provides
267+
cfg.RequirementsHandler.Tee = NewTeeProvider(teeType, nil)
268268
m, err := NewModule(t.Context(), cfg, binary)
269269
require.NoError(t, err)
270270

0 commit comments

Comments
 (0)