1
1
package testing
2
2
3
3
import (
4
+ "bytes"
5
+ "encoding/json"
4
6
"fmt"
7
+ "io"
8
+ "net/http"
9
+ "net/url"
5
10
"os"
6
11
"path"
7
12
"path/filepath"
13
+ "strings"
8
14
"sync"
9
15
10
16
"github.com/linuxsuren/api-testing/pkg/util"
@@ -35,7 +41,54 @@ func (l *fileLoader) HasMore() bool {
35
41
36
42
// Load returns the test case content
37
43
func (l * fileLoader ) Load () (data []byte , err error ) {
38
- data , err = os .ReadFile (l .paths [l .index ])
44
+ targetFile := l .paths [l .index ]
45
+ if strings .HasPrefix (targetFile , "http://" ) || strings .HasPrefix (targetFile , "https://" ) {
46
+ var ok bool
47
+ data , ok , err = gRPCCompitableRequest (targetFile )
48
+ if ! ok && err == nil {
49
+ var resp * http.Response
50
+ if resp , err = http .Get (targetFile ); err == nil {
51
+ data , err = io .ReadAll (resp .Body )
52
+ }
53
+ }
54
+ } else {
55
+ data , err = os .ReadFile (targetFile )
56
+ }
57
+ return
58
+ }
59
+
60
+ func gRPCCompitableRequest (targetURLStr string ) (data []byte , ok bool , err error ) {
61
+ if ! strings .Contains (targetURLStr , "server.Runner/ConvertTestSuite" ) {
62
+ return
63
+ }
64
+
65
+ var targetURL * url.URL
66
+ if targetURL , err = url .Parse (targetURLStr ); err != nil {
67
+ return
68
+ }
69
+
70
+ suite := targetURL .Query ().Get ("suite" )
71
+ if suite == "" {
72
+ err = fmt .Errorf ("suite is required" )
73
+ return
74
+ }
75
+
76
+ payload := new (bytes.Buffer )
77
+ payload .WriteString (fmt .Sprintf (`{"TestSuite":"%s", "Generator":"raw"}` , suite ))
78
+
79
+ var resp * http.Response
80
+ if resp , err = http .Post (targetURLStr , "" , payload ); err == nil {
81
+ if data , err = io .ReadAll (resp .Body ); err != nil {
82
+ return
83
+ }
84
+
85
+ var gRPCData map [string ]interface {}
86
+ if err = json .Unmarshal (data , & gRPCData ); err == nil {
87
+ var obj interface {}
88
+ obj , ok = gRPCData ["message" ]
89
+ data = []byte (fmt .Sprintf ("%v" , obj ))
90
+ }
91
+ }
39
92
return
40
93
}
41
94
@@ -48,6 +101,11 @@ func (l *fileLoader) Put(item string) (err error) {
48
101
l .parent = path .Dir (item )
49
102
}
50
103
104
+ if strings .HasPrefix (item , "http://" ) || strings .HasPrefix (item , "https://" ) {
105
+ l .paths = append (l .paths , item )
106
+ return
107
+ }
108
+
51
109
for _ , pattern := range util .Expand (item ) {
52
110
var files []string
53
111
if files , err = filepath .Glob (pattern ); err == nil {
0 commit comments