6
6
package test
7
7
8
8
import (
9
+ "encoding/json"
9
10
"errors"
11
+ "fmt"
10
12
"strings"
11
13
"testing"
12
14
@@ -24,7 +26,7 @@ func TestParameterExpand(t *testing.T) {
24
26
}
25
27
for _ , x := range validExprs {
26
28
p := NewParam (x [0 ])
27
- res , err := p .Expand (& target.Target {FQDN : x [1 ], ID : x [2 ]})
29
+ res , err := p .Expand (& target.Target {FQDN : x [1 ], ID : x [2 ]}, nil )
28
30
require .NoError (t , err , x [0 ])
29
31
require .Equal (t , x [3 ], res , x [0 ])
30
32
}
@@ -46,10 +48,91 @@ func TestParameterExpandUserFunctions(t *testing.T) {
46
48
}
47
49
for _ , x := range validExprs {
48
50
p := NewParam (x [0 ])
49
- res , err := p .Expand (& target.Target {FQDN : x [1 ], ID : x [2 ]})
51
+ res , err := p .Expand (& target.Target {FQDN : x [1 ], ID : x [2 ]}, nil )
50
52
require .NoError (t , err , x [0 ])
51
53
require .Equal (t , x [3 ], res , x [0 ])
52
54
}
53
55
require .NoError (t , UnregisterFunction ("CustomFunc" ))
54
56
require .Error (t , UnregisterFunction ("NoSuchFunction" ))
55
57
}
58
+
59
+ func TestStepVariablesExpand (t * testing.T ) {
60
+ p := NewParam ("{{ StringVar \" step1.string_var\" }}: {{ IntVar \" step1.int_var\" }}" )
61
+ svm := newStepsVariablesMock ()
62
+
63
+ tgt := target.Target {ID : "1" }
64
+ require .NoError (t , svm .add (tgt .ID , "step1" , "string_var" , "Hello" ))
65
+ require .NoError (t , svm .add (tgt .ID , "step1" , "int_var" , 42 ))
66
+
67
+ res , err := p .Expand (& tgt , svm )
68
+ require .NoError (t , err )
69
+ require .Equal (t , "Hello: 42" , res )
70
+ }
71
+
72
+ func TestInvalidStepVariablesExpand (t * testing.T ) {
73
+ t .Run ("no_dot" , func (t * testing.T ) {
74
+ p := NewParam ("{{ StringVar \" step1string_var\" }}" )
75
+ _ , err := p .Expand (& target.Target {ID : "1" }, newStepsVariablesMock ())
76
+ require .Error (t , err )
77
+ })
78
+
79
+ t .Run ("just_variable_name" , func (t * testing.T ) {
80
+ p := NewParam ("{{ StringVar \" string_var\" }}" )
81
+
82
+ svm := newStepsVariablesMock ()
83
+ tgt := target.Target {ID : "1" }
84
+ require .NoError (t , svm .add (tgt .ID , "step1" , "string_var" , "Hello" ))
85
+
86
+ _ , err := p .Expand (& tgt , svm )
87
+ require .Error (t , err )
88
+ })
89
+
90
+ t .Run ("invalid_variable_name" , func (t * testing.T ) {
91
+ p := NewParam ("{{ StringVar \" step1.22string_var\" }}" )
92
+
93
+ svm := newStepsVariablesMock ()
94
+ tgt := target.Target {ID : "1" }
95
+ // we can add invalid values to our mock
96
+ require .NoError (t , svm .add (tgt .ID , "step1" , "22string_var" , "Hello" ))
97
+
98
+ _ , err := p .Expand (& tgt , svm )
99
+ require .Error (t , err )
100
+ })
101
+ }
102
+
103
+ type stepsVariablesMock struct {
104
+ variables map [string ]map [string ]json.RawMessage
105
+ }
106
+
107
+ func newStepsVariablesMock () * stepsVariablesMock {
108
+ return & stepsVariablesMock {
109
+ variables : make (map [string ]map [string ]json.RawMessage ),
110
+ }
111
+ }
112
+
113
+ func (svm * stepsVariablesMock ) add (tgtID string , label , name string , in interface {}) error {
114
+ b , err := json .Marshal (in )
115
+ if err != nil {
116
+ return err
117
+ }
118
+
119
+ targetVars := svm .variables [tgtID ]
120
+ if targetVars == nil {
121
+ targetVars = make (map [string ]json.RawMessage )
122
+ svm .variables [tgtID ] = targetVars
123
+ }
124
+ targetVars [label + "." + name ] = b
125
+ return nil
126
+ }
127
+
128
+ func (svm * stepsVariablesMock ) Get (tgtID string , stepLabel , name string , out interface {}) error {
129
+ targetVars := svm .variables [tgtID ]
130
+ if targetVars == nil {
131
+ return fmt .Errorf ("no target: %s" , tgtID )
132
+ }
133
+ b , found := targetVars [stepLabel + "." + name ]
134
+ if ! found {
135
+ return fmt .Errorf ("no variable %s %s" , stepLabel , name )
136
+ }
137
+ return json .Unmarshal (b , out )
138
+ }
0 commit comments