@@ -10,16 +10,18 @@ import (
10
10
"strings"
11
11
"testing"
12
12
13
+ framework "github.com/devfile/alizer/pkg/apis/enricher/framework/java"
13
14
"github.com/devfile/alizer/pkg/apis/model"
14
15
"github.com/devfile/alizer/pkg/apis/recognizer"
16
+ "github.com/stretchr/testify/assert"
15
17
)
16
18
17
19
func updateContent (filePath string , data []byte ) error {
18
20
f , err := os .OpenFile (filePath , os .O_APPEND | os .O_CREATE | os .O_WRONLY , 0644 )
19
21
if err != nil {
20
22
return err
21
23
}
22
- defer func (){
24
+ defer func () {
23
25
if err := f .Close (); err != nil {
24
26
fmt .Printf ("error closing file: %s" , err )
25
27
}
@@ -103,3 +105,87 @@ func getTestProjectPath(folder string) string {
103
105
basepath := filepath .Dir (b )
104
106
return filepath .Join (basepath , ".." , ".." , "resources/projects" , folder )
105
107
}
108
+
109
+ func testOpenLibertyDetector_DoPortsDetection (t * testing.T , projectType string , expectedPorts []int ) {
110
+ tempDir , err := os .MkdirTemp ("" , projectType + "-test" )
111
+ if err != nil {
112
+ t .Fatal (err )
113
+ }
114
+ defer os .RemoveAll (tempDir )
115
+
116
+ hardcodedXML := `
117
+ <server>
118
+ <httpEndpoint host="*" httpPort="1234" httpsPort="1235" id="defaultHttpEndpoint"/>
119
+ </server>
120
+ `
121
+ writeTestFile (t , tempDir , "hardcoded_server.xml" , hardcodedXML )
122
+
123
+ variableXML := `
124
+ <server>
125
+ <variable name="default.http.port" defaultValue="9080"/>
126
+ <variable name="default.https.port" defaultValue="9443"/>
127
+ <httpEndpoint host="*" httpPort="${default.http.port}" httpsPort="${default.https.port}" id="defaultHttpEndpoint"/>
128
+ </server>
129
+ `
130
+ writeTestFile (t , tempDir , "variable_server.xml" , variableXML )
131
+
132
+ mixedXML := `
133
+ <server>
134
+ <variable name="default.http.port" defaultValue="9080"/>
135
+ <httpEndpoint host="*" httpPort="${default.http.port}" httpsPort="1235" id="defaultHttpEndpoint"/>
136
+ </server>
137
+ `
138
+ writeTestFile (t , tempDir , "mixed_server.xml" , mixedXML )
139
+
140
+ emptyVarXML := `
141
+ <server>
142
+ <variable name="default.http.port" defaultValue=""/>
143
+ <variable name="default.https.port" defaultValue="9443"/>
144
+ <httpEndpoint host="*" httpPort="${default.http.port}" httpsPort="${default.https.port}" id="defaultHttpEndpoint"/>
145
+ </server>
146
+ `
147
+ writeTestFile (t , tempDir , "empty_var_server.xml" , emptyVarXML )
148
+
149
+ detector := framework.OpenLibertyDetector {}
150
+ ctx := context .TODO ()
151
+
152
+ t .Run ("Hardcoded Ports" , func (t * testing.T ) {
153
+ component := & model.Component {
154
+ Path : filepath .Join (tempDir , "hardcoded_server.xml" ),
155
+ }
156
+ detector .DoPortsDetection (component , & ctx )
157
+ assert .Equal (t , []int {1234 , 1235 }, component .Ports )
158
+ })
159
+
160
+ t .Run ("Variable-based Ports" , func (t * testing.T ) {
161
+ component := & model.Component {
162
+ Path : filepath .Join (tempDir , "variable_server.xml" ),
163
+ }
164
+ detector .DoPortsDetection (component , & ctx )
165
+ assert .Equal (t , expectedPorts , component .Ports )
166
+ })
167
+
168
+ t .Run ("Mixed Hardcoded and Variable Ports" , func (t * testing.T ) {
169
+ component := & model.Component {
170
+ Path : filepath .Join (tempDir , "mixed_server.xml" ),
171
+ }
172
+ detector .DoPortsDetection (component , & ctx )
173
+ assert .Equal (t , []int {9080 , 1235 }, component .Ports )
174
+ })
175
+
176
+ t .Run ("Empty Variable Port" , func (t * testing.T ) {
177
+ component := & model.Component {
178
+ Path : filepath .Join (tempDir , "empty_var_server.xml" ),
179
+ }
180
+ detector .DoPortsDetection (component , & ctx )
181
+ assert .Equal (t , []int {9443 }, component .Ports )
182
+ })
183
+ }
184
+
185
+ func writeTestFile (t * testing.T , dir , filename , content string ) {
186
+ path := filepath .Join (dir , filename )
187
+ err := os .WriteFile (path , []byte (content ), 0644 )
188
+ if err != nil {
189
+ t .Fatal (err )
190
+ }
191
+ }
0 commit comments