@@ -25,6 +25,27 @@ func GetLoggerWithPrefix(prefix string, verbose bool) *log.Logger {
2525 return l
2626}
2727
28+ func require_NoError (t * testing.T , err error ) {
29+ t .Helper ()
30+ if err != nil {
31+ t .Fatal (err )
32+ }
33+ }
34+
35+ func require_Equal [T comparable ](t * testing.T , a , b T ) {
36+ t .Helper ()
37+ if a != b {
38+ t .Fatalf ("%v != %v" , a , b )
39+ }
40+ }
41+
42+ func require_True (t * testing.T , a bool ) {
43+ t .Helper ()
44+ if ! a {
45+ t .Fatal ("expected true" )
46+ }
47+ }
48+
2849// CreateAndConnectTwo creates two nodes. nodeB connects to nodeA.
2950// Verbosity flag is passed to logger.
3051func CreateAndConnectTwo (t testing.TB , verbose bool ) (nodeA * Core , nodeB * Core ) {
@@ -201,3 +222,69 @@ func BenchmarkCore_Start_Transfer(b *testing.B) {
201222 }
202223 <- done
203224}
225+
226+ func TestAllowedPublicKeys (t * testing.T ) {
227+ logger := GetLoggerWithPrefix ("" , false )
228+ cfgA , cfgB := config .GenerateConfig (), config .GenerateConfig ()
229+ require_NoError (t , cfgA .GenerateSelfSignedCertificate ())
230+ require_NoError (t , cfgB .GenerateSelfSignedCertificate ())
231+
232+ nodeA , err := New (cfgA .Certificate , logger , AllowedPublicKey ("abcdef" ))
233+ require_NoError (t , err )
234+ defer nodeA .Stop ()
235+
236+ nodeB , err := New (cfgB .Certificate , logger )
237+ require_NoError (t , err )
238+ defer nodeB .Stop ()
239+
240+ u , err := url .Parse ("tcp://localhost:0" )
241+ require_NoError (t , err )
242+
243+ l , err := nodeA .Listen (u , "" )
244+ require_NoError (t , err )
245+
246+ u , err = url .Parse ("tcp://" + l .Addr ().String ())
247+ require_NoError (t , err )
248+
249+ require_NoError (t , nodeB .AddPeer (u , "" ))
250+
251+ time .Sleep (time .Second )
252+
253+ peers := nodeB .GetPeers ()
254+ require_Equal (t , len (peers ), 1 )
255+ require_True (t , ! peers [0 ].Up )
256+ require_True (t , peers [0 ].LastError != nil )
257+ }
258+
259+ func TestAllowedPublicKeysLocal (t * testing.T ) {
260+ logger := GetLoggerWithPrefix ("" , false )
261+ cfgA , cfgB := config .GenerateConfig (), config .GenerateConfig ()
262+ require_NoError (t , cfgA .GenerateSelfSignedCertificate ())
263+ require_NoError (t , cfgB .GenerateSelfSignedCertificate ())
264+
265+ nodeA , err := New (cfgA .Certificate , logger , AllowedPublicKey ("abcdef" ))
266+ require_NoError (t , err )
267+ defer nodeA .Stop ()
268+
269+ nodeB , err := New (cfgB .Certificate , logger )
270+ require_NoError (t , err )
271+ defer nodeB .Stop ()
272+
273+ u , err := url .Parse ("tcp://localhost:0" )
274+ require_NoError (t , err )
275+
276+ l , err := nodeA .ListenLocal (u , "" )
277+ require_NoError (t , err )
278+
279+ u , err = url .Parse ("tcp://" + l .Addr ().String ())
280+ require_NoError (t , err )
281+
282+ require_NoError (t , nodeB .AddPeer (u , "" ))
283+
284+ time .Sleep (time .Second )
285+
286+ peers := nodeB .GetPeers ()
287+ require_Equal (t , len (peers ), 1 )
288+ require_True (t , peers [0 ].Up )
289+ require_True (t , peers [0 ].LastError == nil )
290+ }
0 commit comments