@@ -18,6 +18,9 @@ package resources
18
18
import (
19
19
"crypto"
20
20
"encoding/hex"
21
+ "net"
22
+ "net/http"
23
+ "net/url"
21
24
"testing"
22
25
23
26
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
@@ -110,3 +113,38 @@ func TestDownloadAndChecksums(t *testing.T) {
110
113
_ , err = r .TestLocalArchiveChecksum (tmp )
111
114
require .Error (t , err )
112
115
}
116
+
117
+ func TestIndexDownloadAndSignatureWithinArchive (t * testing.T ) {
118
+ // Spawn test webserver
119
+ mux := http .NewServeMux ()
120
+ fs := http .FileServer (http .Dir ("testdata" ))
121
+ mux .Handle ("/" , fs )
122
+ server := & http.Server {Handler : mux }
123
+ ln , err := net .Listen ("tcp" , "127.0.0.1:" )
124
+ require .NoError (t , err )
125
+ defer ln .Close ()
126
+ go server .Serve (ln )
127
+
128
+ validIdxURL , err := url .Parse ("http://" + ln .Addr ().String () + "/valid/package_index.tar.bz2" )
129
+ require .NoError (t , err )
130
+ idxResource := & IndexResource {URL : validIdxURL }
131
+ destDir , err := paths .MkTempDir ("" , "" )
132
+ require .NoError (t , err )
133
+ defer destDir .RemoveAll ()
134
+ err = idxResource .Download (destDir , func (curr * rpc.DownloadProgress ) {})
135
+ require .NoError (t , err )
136
+ require .True (t , destDir .Join ("package_index.json" ).Exist ())
137
+ require .True (t , destDir .Join ("package_index.json.sig" ).Exist ())
138
+
139
+ invalidIdxURL , err := url .Parse ("http://" + ln .Addr ().String () + "/invalid/package_index.tar.bz2" )
140
+ require .NoError (t , err )
141
+ invIdxResource := & IndexResource {URL : invalidIdxURL }
142
+ invDestDir , err := paths .MkTempDir ("" , "" )
143
+ require .NoError (t , err )
144
+ defer invDestDir .RemoveAll ()
145
+ err = invIdxResource .Download (invDestDir , func (curr * rpc.DownloadProgress ) {})
146
+ require .Error (t , err )
147
+ require .Contains (t , err .Error (), "invalid signature" )
148
+ require .False (t , invDestDir .Join ("package_index.json" ).Exist ())
149
+ require .False (t , invDestDir .Join ("package_index.json.sig" ).Exist ())
150
+ }
0 commit comments