11package testing
22
33import (
4+ "bytes"
5+ "encoding/json"
46 "fmt"
7+ "io"
8+ "net/http"
9+ "net/url"
510 "os"
611 "path"
712 "path/filepath"
13+ "strings"
814 "sync"
915
1016 "github.com/linuxsuren/api-testing/pkg/util"
@@ -35,7 +41,54 @@ func (l *fileLoader) HasMore() bool {
3541
3642// Load returns the test case content
3743func (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+ }
3992 return
4093}
4194
@@ -48,6 +101,11 @@ func (l *fileLoader) Put(item string) (err error) {
48101 l .parent = path .Dir (item )
49102 }
50103
104+ if strings .HasPrefix (item , "http://" ) || strings .HasPrefix (item , "https://" ) {
105+ l .paths = append (l .paths , item )
106+ return
107+ }
108+
51109 for _ , pattern := range util .Expand (item ) {
52110 var files []string
53111 if files , err = filepath .Glob (pattern ); err == nil {
0 commit comments