66 "net"
77 "net/http"
88 "net/http/httptest"
9+ "os"
910 "sync/atomic"
1011 "testing"
1112 "time"
@@ -57,18 +58,30 @@ func TestLoadAll(t *testing.T) {
5758 routeContent string
5859 routeStatusCode int
5960 expected []* eskip.Route
61+ failOnStartup bool
6062 fail bool
61- }{{
62- title : "Download not existing remote file fails in NewRemoteEskipFile" ,
63- routeContent : "" ,
64- routeStatusCode : 404 ,
65- fail : true ,
66- }, {
67- title : "Download valid remote file" ,
68- routeContent : fmt .Sprintf ("VALID: %v;" , routeBody ),
69- routeStatusCode : 200 ,
70- expected : eskip .MustParse (fmt .Sprintf ("VALID: %v;" , routeBody )),
71- },
63+ }{
64+ {
65+ title : "Download not existing remote file fails in NewRemoteEskipFile fail on startup" ,
66+ routeContent : "" ,
67+ routeStatusCode : 404 ,
68+ failOnStartup : true ,
69+ fail : true ,
70+ },
71+ {
72+ title : "Download not existing remote file fails in NewRemoteEskipFile" ,
73+ routeContent : "" ,
74+ routeStatusCode : 404 ,
75+ failOnStartup : false ,
76+ fail : false ,
77+ },
78+ {
79+ title : "Download valid remote file" ,
80+ routeContent : fmt .Sprintf ("VALID: %v;" , routeBody ),
81+ routeStatusCode : 200 ,
82+ failOnStartup : true ,
83+ expected : eskip .MustParse (fmt .Sprintf ("VALID: %v;" , routeBody )),
84+ },
7285 } {
7386 ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
7487 w .WriteHeader (test .routeStatusCode )
@@ -77,7 +90,7 @@ func TestLoadAll(t *testing.T) {
7790 defer ts .Close ()
7891
7992 t .Run (test .title , func (t * testing.T ) {
80- options := & RemoteWatchOptions {RemoteFile : ts .URL , Threshold : 10 , Verbose : true , FailOnStartup : true }
93+ options := & RemoteWatchOptions {RemoteFile : ts .URL , Threshold : 10 , Verbose : true , FailOnStartup : test . failOnStartup }
8194 client , err := RemoteWatch (options )
8295
8396 if test .fail {
@@ -165,6 +178,50 @@ func TestLoadAllAndUpdate(t *testing.T) {
165178 }
166179}
167180
181+ func TestRemoteButLocalURL (t * testing.T ) {
182+ client , err := RemoteWatch (& RemoteWatchOptions {RemoteFile : "fixtures/test.eskip" , FailOnStartup : true })
183+ defer client .(* WatchClient ).Close ()
184+ require .NoError (t , err )
185+ r , err := client .LoadAll ()
186+ require .NoError (t , err )
187+ assert .Equal (t , 2 , len (r ))
188+ }
189+
190+ func TestRemoteLoadAllFail (t * testing.T ) {
191+ count := 0
192+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
193+ switch count {
194+ case 0 :
195+ // RemoteWatch() preloads
196+ count ++
197+ b , err := os .ReadFile ("fixtures/test.eskip" )
198+ if err != nil {
199+ t .Fatalf ("Failed to read file: %v" , err )
200+ }
201+ w .WriteHeader (200 )
202+ w .Write (b )
203+ default :
204+ // LoadAll should fail
205+ w .WriteHeader (500 )
206+ w .Write ([]byte (http .StatusText (500 )))
207+ }
208+ }))
209+ defer server .Close ()
210+
211+ client , err := RemoteWatch (& RemoteWatchOptions {RemoteFile : server .URL , FailOnStartup : true })
212+ defer client .(* remoteEskipFile ).Close ()
213+ require .NoError (t , err )
214+
215+ r , err := client .LoadAll ()
216+ require .Error (t , err )
217+ assert .Equal (t , 0 , len (r ))
218+
219+ r , delR , err := client .LoadUpdate ()
220+ require .Error (t , err )
221+ assert .Equal (t , 0 , len (r ))
222+ assert .Equal (t , 0 , len (delR ))
223+ }
224+
168225func TestHTTPTimeout (t * testing.T ) {
169226 server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
170227 time .Sleep (2 * time .Second )
0 commit comments