Skip to content

Commit d915ba6

Browse files
authored
fix(engines): reduce valid platform token chars
1 parent e31d3c5 commit d915ba6

File tree

2 files changed

+61
-13
lines changed

2 files changed

+61
-13
lines changed

engines/terraform/resolve_test.go

Lines changed: 59 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -396,12 +396,13 @@ func TestResolveTokenValue(t *testing.T) {
396396

397397
func TestResolveStringInterpolation(t *testing.T) {
398398
tests := []struct {
399-
name string
400-
input string
401-
setupVars map[string]string
402-
expected string
403-
expectError bool
404-
errorMsg string
399+
name string
400+
input string
401+
setupVars map[string]string
402+
setupGlobalVars map[string]string
403+
expectedTokens []string
404+
expectError bool
405+
errorMsg string
405406
}{
406407
{
407408
name: "string with two tokens",
@@ -410,7 +411,8 @@ func TestResolveStringInterpolation(t *testing.T) {
410411
"var1-middle": "value1",
411412
"var2-suffix": "value2",
412413
},
413-
expectError: false,
414+
expectedTokens: []string{"self.var1-middle", "self.var2-suffix"},
415+
expectError: false,
414416
},
415417
{
416418
name: "string with adjacent tokens",
@@ -419,23 +421,26 @@ func TestResolveStringInterpolation(t *testing.T) {
419421
"var1": "value1",
420422
"var2": "value2",
421423
},
422-
expectError: false,
424+
expectedTokens: []string{"self.var1", "self.var2"},
425+
expectError: false,
423426
},
424427
{
425428
name: "string with token at start",
426429
input: "self.var1-suffix",
427430
setupVars: map[string]string{
428431
"var1-suffix": "value1",
429432
},
430-
expectError: false,
433+
expectedTokens: []string{"self.var1-suffix"},
434+
expectError: false,
431435
},
432436
{
433437
name: "string with token at end",
434438
input: "prefix-self.var1",
435439
setupVars: map[string]string{
436440
"var1": "value1",
437441
},
438-
expectError: false,
442+
expectedTokens: []string{"self.var1"},
443+
expectError: false,
439444
},
440445
{
441446
name: "string with ${} wrapped tokens",
@@ -444,7 +449,32 @@ func TestResolveStringInterpolation(t *testing.T) {
444449
"var1": "value1",
445450
"var2": "value2",
446451
},
447-
expectError: false,
452+
expectedTokens: []string{"self.var1", "self.var2"},
453+
expectError: false,
454+
},
455+
{
456+
name: "string with coalesce function",
457+
input: "${coalesce(self.project_id, var.project_id)}",
458+
setupVars: map[string]string{
459+
"project_id": "test-project-123",
460+
},
461+
setupGlobalVars: map[string]string{
462+
"project_id": "global-project",
463+
},
464+
expectedTokens: []string{"self.project_id", "var.project_id"},
465+
expectError: false,
466+
},
467+
{
468+
name: "string with ternary operator",
469+
input: "${self.env != null ? self.env : var.env}",
470+
setupVars: map[string]string{
471+
"env": "production",
472+
},
473+
setupGlobalVars: map[string]string{
474+
"env": "staging",
475+
},
476+
expectedTokens: []string{"self.env", "self.env", "var.env"},
477+
expectError: false,
448478
},
449479
}
450480

@@ -459,6 +489,15 @@ func TestResolveStringInterpolation(t *testing.T) {
459489
instancedTerraformVariables: make(map[string]map[string]cdktf.TerraformVariable),
460490
}
461491

492+
for varName, varValue := range tt.setupGlobalVars {
493+
if td.terraformVariables == nil {
494+
td.terraformVariables = make(map[string]cdktf.TerraformVariable)
495+
}
496+
td.terraformVariables[varName] = cdktf.NewTerraformVariable(stack, jsii.String(varName), &cdktf.TerraformVariableConfig{
497+
Default: varValue,
498+
})
499+
}
500+
462501
td.instancedTerraformVariables["test_intent"] = make(map[string]cdktf.TerraformVariable)
463502
for varName, varValue := range tt.setupVars {
464503
td.instancedTerraformVariables["test_intent"][varName] = cdktf.NewTerraformVariable(stack, jsii.String("test_"+varName), &cdktf.TerraformVariableConfig{
@@ -467,6 +506,15 @@ func TestResolveStringInterpolation(t *testing.T) {
467506
}
468507

469508
tokens := findAllTokens(tt.input)
509+
510+
// Extract token strings from TokenMatch for comparison
511+
tokenStrings := make([]string, len(tokens))
512+
for i, token := range tokens {
513+
tokenStrings[i] = token.Token
514+
}
515+
516+
assert.Equal(t, tt.expectedTokens, tokenStrings, "tokens found do not match expected")
517+
470518
result, err := td.resolveStringInterpolation("test_intent", tt.input, tokens)
471519

472520
if tt.expectError {

engines/terraform/token.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,5 @@ func isOnlyToken(input string) bool {
4545
return strings.TrimSpace(input) == strings.TrimSpace(allTokensPattern.FindString(input))
4646
}
4747

48-
var tokenPattern = regexp.MustCompile(`((?:infra|var|self)\.[\w.\-]+)`)
49-
var allTokensPattern = regexp.MustCompile(`((?:infra|var|self)\.[\w.\-]+)`)
48+
var tokenPattern = regexp.MustCompile(`((?:infra|var|self)\.[a-zA-Z_\-][a-zA-Z0-9_\-\.]*)`)
49+
var allTokensPattern = regexp.MustCompile(`((?:infra|var|self)\.[a-zA-Z_\-][a-zA-Z0-9_\-\.]*)`)

0 commit comments

Comments
 (0)